<?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>74352</bug_id>
          
          <creation_ts>2011-12-12 15:03:16 -0800</creation_ts>
          <short_desc>[skia] Track a simple opaque area when painting via PlatformContextSkia and save in LayerTextureUpdater</short_desc>
          <delta_ts>2012-01-12 14:39:48 -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>
          
          <blocked>76211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>reed</cc>
    
    <cc>reveman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>519540</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-12 15:03:16 -0800</bug_when>
    <thetext>[chromium] Construct a simplified opaque region when painting via PlatformContextSkia and save in LayerTextureUpdater</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519557</commentid>
    <comment_count>1</comment_count>
      <attachid>118874</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-12 15:14:29 -0800</bug_when>
    <thetext>Created attachment 118874
Patch

Construct a simplified opaque region when painting via a PlatformContextSkia, and save it in the LayerTextureUpdater for use when updating compositor resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519561</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-12 15:15:49 -0800</bug_when>
    <thetext>So I am thinking something like this. It gives back an opaque Region with bounded complexity (at most 5 separate rects).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520214</commentid>
    <comment_count>3</comment_count>
      <attachid>119048</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-13 11:26:38 -0800</bug_when>
    <thetext>Created attachment 119048
Patch

Fixed to consider the current clip and mask bitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520231</commentid>
    <comment_count>4</comment_count>
      <attachid>119048</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-13 11:37:10 -0800</bug_when>
    <thetext>Comment on attachment 119048
Patch

Think about handing a million rects at this. The cost of markRect* scares the crap out of me. Can we go for a single big rect at first to establish a method as well as fitness-testing infrastructure? Then go back and do another patch that makes it smarter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520245</commentid>
    <comment_count>5</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-12-13 11:44:20 -0800</bug_when>
    <thetext>Should the detection code in drawRect() also check for gradients or other ways to fill the rectangle besides a single color?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520251</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-13 11:46:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 119048 [details])
&gt; Think about handing a million rects at this. The cost of markRect* scares the crap out of me. Can we go for a single big rect at first to establish a method as well as fitness-testing infrastructure? Then go back and do another patch that makes it smarter?

May I ask what part scares you about it? I had tried to design with this in mine, so that it would only compare the each new rect to at most 5 others. Maybe my intuition is just off on this being cheap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520254</commentid>
    <comment_count>7</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-13 11:49:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; May I ask what part scares you about it? I had tried to design with this in mine, so that it would only compare the each new rect to at most 5 others. Maybe my intuition is just off on this being cheap?

This is pretty much as critical-path as you can get in chrome. So, zero cost is too slow. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520303</commentid>
    <comment_count>8</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-13 12:54:17 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; So I am thinking something like this. It gives back an opaque Region with bounded complexity (at most 5 separate rects).

I like the approach of starting with something simple like a flag or a rect and then follow up with possible improvements after that. I&apos;m not sure a region with bounded complexity is the right approach. Does it make sense to get higher detail about opaque-ness than on a per-tile basis? I&apos;m not sure the complexity of that is worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520310</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-12-13 13:01:19 -0800</bug_when>
    <thetext>What is a good measure of the performance cost? Anecdotally, when ever I have profiled a sites drawing, the hot spots have never been anywhere near the setup for drawRect or fillRect. I am very interested on all aspects of measure drawing performance, so I would appreciate pointers to sites or tests that would exercise the code around this CL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520459</commentid>
    <comment_count>10</comment_count>
      <attachid>119103</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-13 16:15:57 -0800</bug_when>
    <thetext>Created attachment 119103
Patch

A new patch addressing concerns and ideas voiced here and on chats; thanks for the good feedback.

Simplied the decision/storage of the opaque region by just storing a Rect. Try to expand the rect when possible, or replace it when seeing a larger rect.

Considers gradients (and checks if they have alpha) and patterns (assumes they have alpha).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520469</commentid>
    <comment_count>11</comment_count>
      <attachid>119106</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-13 16:29:29 -0800</bug_when>
    <thetext>Created attachment 119106
Patch

Previous patch skipped initializing the new members of the PlatformContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520727</commentid>
    <comment_count>12</comment_count>
      <attachid>119106</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-13 23:37:54 -0800</bug_when>
    <thetext>Comment on attachment 119106
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:300
&gt; +    if (m_opaqueRect.fTop == rect.fTop &amp;&amp; m_opaqueRect.fBottom == rect.fBottom) {

Are these really common cases in practice (e.g.  the new rect has the same height but different width or vice-versa)?  Is it really worth the time checking them?  My suspicion is that more commonly we&apos;ll be drawing a lot of non-overlapping opaque rects whose union will be one large rect.
It&apos;s definitely worth a try to put this in place but my gut feeling is that we&apos;ll want to track opaqueness as a boolean flag on the tiles themselves, maybe at the time we upload their contents as textures.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:331
&gt; +    unsigned fillcolorNotTransparent = m_state-&gt;m_fillColor &amp; 0xFF000000;

Don&apos;t we have to look at the m_state&apos;s xfer mode here?  We could be overwriting existing opaque pixels with transparent ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520924</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 07:51:55 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 119106 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119106&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:300
&gt; &gt; +    if (m_opaqueRect.fTop == rect.fTop &amp;&amp; m_opaqueRect.fBottom == rect.fBottom) {
&gt; 
&gt; Are these really common cases in practice (e.g.  the new rect has the same height but different width or vice-versa)?  Is it really worth the time checking them?  My suspicion is that more commonly we&apos;ll be drawing a lot of non-overlapping opaque rects whose union will be one large rect.

You bring up a good point here. The rects don&apos;t need to be the same height exactly to grow the rectangle.

I can see your point about the many non-overlapping opaque rects, but my intuition is that these would be foreground elements, which this may catch but is not really intended to. It is mostly meant to catch backgrounds, and box decorations. I think the set of backgrounds typically approximately fill a layer. For instance a set of divs would make a vertical column of backgrounds that are the same width and adjacent.

&gt; It&apos;s definitely worth a try to put this in place but my gut feeling is that we&apos;ll want to track opaqueness as a boolean flag on the tiles themselves, maybe at the time we upload their contents as textures.

Basically the region that is opaque is used to know what parts of the screen are occluded, and we track that as we move from front to back painting. Each opaque area is added to the occluded space as we go, and any tiles contained in the occluded space can skip painting/uploading.

I think this comment is directed at using this information on the impl side for draw culling? Currently it would not get the benefit of this infomation, but if we did pass it over, IMO it would be better to pass over one opaque rect per layer rather than a set of booleans for each tile. While the booleans could be used to decide blending, they would lose information wrt occlusion (half opaque tiles) and we&apos;d end up with more overdraw, since tiles do not align between different layers. If we do end up passing opaque information gleaned here over to impl, unless we are reading back all pixels of a tile, I think that we need to decide what is opaque someplace like this (or in WebKit) regardless of how the data is handed to impl.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:331
&gt; &gt; +    unsigned fillcolorNotTransparent = m_state-&gt;m_fillColor &amp; 0xFF000000;
&gt; 
&gt; Don&apos;t we have to look at the m_state&apos;s xfer mode here?  We could be overwriting existing opaque pixels with transparent ones.

Yes, thank you for this! Also m_alpha looks important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521072</commentid>
    <comment_count>14</comment_count>
      <attachid>119249</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 10:53:42 -0800</bug_when>
    <thetext>Created attachment 119249
Patch

Includes consideration of the current state&apos;s Xfermode::Mode and alpha. Grows the tracked opaque rect to include area in a new rect in cases where it can&apos;t consume the entire rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521075</commentid>
    <comment_count>15</comment_count>
      <attachid>119249</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 10:55:56 -0800</bug_when>
    <thetext>Comment on attachment 119249
Patch

I like this, but where are the tests?  There are lots of cases to check for here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521117</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 11:20:58 -0800</bug_when>
    <thetext>Ah, I was expecting to excise this by testing the culling, but I&apos;ll make some tests for it, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521120</commentid>
    <comment_count>17</comment_count>
      <attachid>119249</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-14 11:23:54 -0800</bug_when>
    <thetext>Comment on attachment 119249
Patch

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

I&apos;m curious how this will be used in practice given that after the initial layer paint, we do get incremental updates, which all end up in small canvases with throw away GC&apos;s .  How will we track the overall opaque rect of a layer after the incremental updates?  For example:  Imagine that a layer starts half opaque and half transparent and in a subsequent incremental update, the transparent part is painted over with an opaque color.  Or, the other way around...

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:298
&gt; +

You could presumably add another easy test here for the case where m_opaqueRect is fully inside rect:
if (rect.contains(m_opaqueRect))
  m_opaqueRect = rect;

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:300
&gt; +        if (rect.fLeft &lt; m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt; m_opaqueRect.fLeft)

shouldn&apos;t this be:
rect.fLeft &lt; m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt;= m_opaqueRect.fLeft
                                                                       
(&gt;= vs &gt;  for the second check)

to catch adjacent rects?  Similarly below.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:304
&gt; +    } else if (m_opaqueRect.fLeft &lt;= rect.fLeft &amp;&amp; m_opaqueRect.fRight &gt;= rect.fRight) {

Should this be a straight &quot;if&quot; instead of an &quot;else if&quot;  ?  Although checking for containment as I mentioned above should take care of it.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:333
&gt; +    unsigned fillcolorNotTransparent = m_state-&gt;m_fillColor &amp; 0xFF000000;

Is the color always stored as ARGB ?

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:341
&gt; +                markRectAsOpaque(rect);

If the transparent pixels you&apos;re writing with a non opaque transfer mode end up in what you previously considered part of the opaque rect, don&apos;t you need to reset the opaque rect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521142</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 11:39:46 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 119249 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119249&amp;action=review
&gt; 
&gt; I&apos;m curious how this will be used in practice given that after the initial layer paint, we do get incremental updates, which all end up in small canvases with throw away GC&apos;s .  How will we track the overall opaque rect of a layer after the incremental updates?  For example:  Imagine that a layer starts half opaque and half transparent and in a subsequent incremental update, the transparent part is painted over with an opaque color.  Or, the other way around...

This code is just meant to give back an opaque region for a single paint. You&apos;re right that incremental updates are something to consider, but that is something that would be considered up in the layers themselves, so it&apos;ll be the next CL :).  This is only meant to give back a value for the current painting operation. The property seems long-lived, but a new PlatformContextSkia is created each time a layer is painted, so this value is only holding something for the current paint.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:298
&gt; &gt; +
&gt; 
&gt; You could presumably add another easy test here for the case where m_opaqueRect is fully inside rect:
&gt; if (rect.contains(m_opaqueRect))
&gt;   m_opaqueRect = rect;

yup thanks.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:300
&gt; &gt; +        if (rect.fLeft &lt; m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt; m_opaqueRect.fLeft)
&gt; 
&gt; shouldn&apos;t this be:
&gt; rect.fLeft &lt; m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt;= m_opaqueRect.fLeft
&gt; 
&gt; (&gt;= vs &gt;  for the second check)
&gt;
&gt; to catch adjacent rects?  Similarly below.

fRight is 1 px past the right edge of the rect, so it would be 1 more in the adjacent case and &gt; will catch it. This is the same as maxX/maxY in IntRect, but the name is less clear. At least that was my understanding from reading other SkRect code.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:304
&gt; &gt; +    } else if (m_opaqueRect.fLeft &lt;= rect.fLeft &amp;&amp; m_opaqueRect.fRight &gt;= rect.fRight) {
&gt; 
&gt; Should this be a straight &quot;if&quot; instead of an &quot;else if&quot;  ?  Although checking for containment as I mentioned above should take care of it.

Yeh you&apos;re right, since it is checking &gt;= now, I&apos;ll use the contains check that you suggest to catch this case.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:333
&gt; &gt; +    unsigned fillcolorNotTransparent = m_state-&gt;m_fillColor &amp; 0xFF000000;
&gt; 
&gt; Is the color always stored as ARGB ?

I guess so, I just changed its type from int to unsigned.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:341
&gt; &gt; +                markRectAsOpaque(rect);
&gt; 
&gt; If the transparent pixels you&apos;re writing with a non opaque transfer mode end up in what you previously considered part of the opaque rect, don&apos;t you need to reset the opaque rect?

As above, there is no state preserved across paints, that sort of smartness would happen at the layer level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521144</commentid>
    <comment_count>19</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 11:42:53 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; If the transparent pixels you&apos;re writing with a non opaque transfer mode end up in what you previously considered part of the opaque rect, don&apos;t you need to reset the opaque rect?
&gt; 
&gt; As above, there is no state preserved across paints, that sort of smartness would happen at the layer level.

Sorry I see what you mean here, we might non-opaque stuff drawn over top during a single paint operation. I&apos;ll have to take that into consideration, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521459</commentid>
    <comment_count>20</comment_count>
      <attachid>119329</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 16:42:43 -0800</bug_when>
    <thetext>Created attachment 119329
Patch

Complete with unit test, thank you for making me do that.

PlatformContextSkia::drawRect() is only used in one specific case. Pulled the opaque tracking out to a new function (trackFilledRect()) and call this after any canvas-&gt;drawRect() calls in GraphicsContextSkia and PlatformContextSkia. It also makes use of the SkPaint used to do the filling to get accurate results.

Handles redrawing pixels over top of a previously marked opaque area, and determines if the new fill will preserve the opaque-ness there or not. If not it attempts to keep as large a rect as possible marked opaque.

I don&apos;t have timing data to assess the impact of the change but I will do that tomorrow morning. Cheers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521691</commentid>
    <comment_count>21</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-14 23:00:20 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (From update of attachment 119249 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119249&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m curious how this will be used in practice given that after the initial layer paint, we do get incremental updates, which all end up in small canvases with throw away GC&apos;s .  How will we track the overall opaque rect of a layer after the incremental updates?  For example:  Imagine that a layer starts half opaque and half transparent and in a subsequent incremental update, the transparent part is painted over with an opaque color.  Or, the other way around...
&gt; 
&gt; This code is just meant to give back an opaque region for a single paint. You&apos;re right that incremental updates are something to consider, but that is something that would be considered up in the layers themselves, so it&apos;ll be the next CL :).  This is only meant to give back a value for the current painting operation. The property seems long-lived, but a new PlatformContextSkia is created each time a layer is painted, so this value is only holding something for the current paint.

Apologies for repeating my previous comment but the more I look at this code the more convinced I become that tracking opaqueness as a boolean value on a per-tile basis based on actual pixel values will likely be more flexible.  Imagine a large layer that&apos;s opaque everywhere except for a small area near its center.  By tracking only a single opaque rect for the entire layer we&apos;ll only be able to mark as opaque only about a quarter of the layer.  In contrast, by marking as opaque all tiles except for the one containing the transparent region will potentially give us a much bigger opaque area. 

I find marking entire tiles as opaque or non-opaque will be much less complicated and error prone than trying to concatenate and subtract rects.  Part of the win we&apos;ll get by being able to identify opaque regions is that we can turn off blending while drawing opaque layers.  In again this can only be done at the tile level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521889</commentid>
    <comment_count>22</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-15 07:36:57 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Apologies for repeating my previous comment but the more I look at this code the more convinced I become that tracking opaqueness as a boolean value on a per-tile basis based on actual pixel values will likely be more flexible.  Imagine a large layer that&apos;s opaque everywhere except for a small area near its center.  By tracking only a single opaque rect for the entire layer we&apos;ll only be able to mark as opaque only about a quarter of the layer.  In contrast, by marking as opaque all tiles except for the one containing the transparent region will potentially give us a much bigger opaque area. 

FWIW it would catch ~1/2 not 1/4 in this case, but that&apos;s probably not your point :)

&gt; I find marking entire tiles as opaque or non-opaque will be much less complicated and error prone than trying to concatenate and subtract rects.  Part of the win we&apos;ll get by being able to identify opaque regions is that we can turn off blending while drawing opaque layers.  In again this can only be done at the tile level.

You&apos;re right, of course. Reading the actual pixel values would give the best knowledge about the alpha values. It was brought up as one of 3 possible ways to approach this data collection, but that reading back all the pixels will be expensive when the tile data is in the GPU, and cause more memory bandwidth use, while the goal of culling is to use less. That&apos;s why I chose to go the PlatformContextSkia route here.

I guess two things:

1) The opaque edges but transparent interior seems like a really uncommon case to me, compared to opaque middle and transparent edges?

2) By tracking a few more rects instead of 1 we could cover this case, so if it is an important case, I&apos;d still prefer to do it here rather than do a pixel readback from the GPU.

I don&apos;t know.. I still feel like we should do it this way right now. I like that its performance is not based on the size of the layer, and that it doesn&apos;t require any access to video memory. What do others think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521937</commentid>
    <comment_count>23</comment_count>
      <attachid>119329</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-15 08:56:40 -0800</bug_when>
    <thetext>Comment on attachment 119329
Patch

I ran the following test both with PCSkia::setTrackOpaqueRegion enabled and disabled.

http://www.corp.google.com/~danakj/paint-culling/test-painted-foreground.html

There appears no measurable difference in time to paint, as random noise dominated the differences in results.

For example, to paint the set of layers in one frame (in milliseconds).

Without tracking for two different frames:
.420             .472
.174             .178
.150             .152
.167             .151
.170             .168

With tracking:
.443             .479              .490
.167             .175              .176
.148             .165              .147
.143             .150              .153
.165             .175              .216

Each frame is drawing the same things, just different colours, so as you can see the variation between frames with tracking enabled/disabled is as large as the difference between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521970</commentid>
    <comment_count>24</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-15 09:41:58 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Apologies for repeating my previous comment but the more I look at this code the more convinced I become that tracking opaqueness as a boolean value on a per-tile basis based on actual pixel values will likely be more flexible.  Imagine a large layer that&apos;s opaque everywhere except for a small area near its center.  By tracking only a single opaque rect for the entire layer we&apos;ll only be able to mark as opaque only about a quarter of the layer.  In contrast, by marking as opaque all tiles except for the one containing the transparent region will potentially give us a much bigger opaque area. 
&gt; 
&gt; FWIW it would catch ~1/2 not 1/4 in this case, but that&apos;s probably not your point :)

oh, right, of course :)

&gt; 
&gt; &gt; I find marking entire tiles as opaque or non-opaque will be much less complicated and error prone than trying to concatenate and subtract rects.  Part of the win we&apos;ll get by being able to identify opaque regions is that we can turn off blending while drawing opaque layers.  In again this can only be done at the tile level.
&gt; 
&gt; You&apos;re right, of course. Reading the actual pixel values would give the best knowledge about the alpha values. It was brought up as one of 3 possible ways to approach this data collection, but that reading back all the pixels will be expensive when the tile data is in the GPU, and cause more memory bandwidth use, while the goal of culling is to use less. That&apos;s why I chose to go the PlatformContextSkia route here.
&gt; 
&gt; I guess two things:
&gt; 
&gt; 1) The opaque edges but transparent interior seems like a really uncommon case to me, compared to opaque middle and transparent edges?

It&apos; not just about whether the opaque part is at the center or the edges.  If there is a mix of opaque and transparent regions on a single layer (e.g. images without alpha intermixed with text drawn on transparent background), doing the tests per tile will give you better granularity.  

But it&apos;s true that at this point it&apos;s anyone&apos;s guess what the common pattern on real pages is.  We could measure it, presumably.

&gt; 
&gt; 2) By tracking a few more rects instead of 1 we could cover this case, so if it is an important case, I&apos;d still prefer to do it here rather than do a pixel readback from the GPU.

I&apos;d rather not go back to that. The tile-level granularity seems easier to deal with rather than tracking independent rects.

&gt; 
&gt; I don&apos;t know.. I still feel like we should do it this way right now. I like that its performance is not based on the size of the layer, and that it doesn&apos;t require any access to video memory. What do others think?

One thing to note is that how we detect transparency is somewhat orthogonal to how we track it. We don&apos;t necessarily have to detect transparency by walking the pixels.  We could use code similar to what you have (without the complexity of actual rect tracking) that works on the context level when we create a context to paint the contents of a tile. The question I&apos;m raising is whether we should be doing that on a tile-by-tile basis with a single flag that marks the entire tile or do our own rect tracking on the entire layer.  I advocate using tiles as our base unit so that we can keep both paint and draw culling based on the same flags.

One difficulty that comes to mind if we do end up painting only partial contents of a tile based on a visibility determination that happens in the main thread is the following: What happens if the rest of the tile is uncovered in the compositor thread?  Currently tiles are somewhat binary, either they have valid contents or they don&apos;t.

Anyway, interested in hearing other opinions too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522080</commentid>
    <comment_count>25</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-15 11:08:21 -0800</bug_when>
    <thetext>Nat requested some more tests using canvas and a far larger number of rectangles. The impact of this code seems minimal still, something like on the order or 0.005ms per rect.

There are 3 tests I used:
1. http://www.corp.google.com/~danakj/paint-culling/test-fillrect-collage.html
2. http://www.corp.google.com/~danakj/paint-culling/test-fillrect-border.html
3. http://www.corp.google.com/~danakj/paint-culling/test-fillrect-border-200.html

Average and median time (in seconds) to draw for each of them WITH and WITHOUT opaque tracking.

1. WITH 9.2196     9.241
   WITHOUT 9.1613  9.185

2. WITH 6.6228     6.440
   WITHOUT 6.6032  6.451

3. WITH 7.1644     6.970
   WITHOUT 6.8315  6.946

Third test had a couple high outliers for both sides so the median is probably more interesting. The data set&apos;s not huge but should give an idea. Full data below.

1. WITH 9.228 9.250 9.180 9.258 9.264 9.095 9.234 9.248
1. WITHOUT 9.089 9.119 9.205 9.237 9.218 9.185 9.076
2. WITH 6.496 6.393 6.477 6.440 7.308
2. WITHOUT 6.451 6.592 6.450 6.386 7.137
3. WITH 6.970 6.974 6.960 8.333 6.946 7.015 6.953
3. WITHOUT 6.905 6.956 6.935 6.916 8.310 6.967</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522837</commentid>
    <comment_count>26</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-16 10:40:07 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #22)
&gt; It&apos; not just about whether the opaque part is at the center or the edges.  If there is a mix of opaque and transparent regions on a single layer (e.g. images without alpha intermixed with text drawn on transparent background), doing the tests per tile will give you better granularity.  

I think the assumption underlying this is that we would be painting a single tile at a time. That is not the current situation, we paint the entire layer in one go. And reveman tells me this will never be the case. So if we are going to do the detection during the paint, I think we would need to pass in tile information to the PlatformContextSkia, and have it track opaque stuff, similar to how this CL does, but for each tile. Is that what you are meaning? If so, I&apos;d rather do that in a separate iteration as it is significantly more complicated.

What we are planning to do on a per-tile basis is playback a recorded SkPicture. We could do this opaque computation in there, and it was suggested originally also. Is this what you are meaning instead? I will +you on the email thread but the current state of the thread was it was easier to do this in the context on paint and we should try that out first. We certainly have the potential to do a lot better with this method.

Determining if this method is &quot;good enough&quot; is another issue.. Nat has suggested doing pixel readbacks and comparing the results when running all the LayoutTests, so say if it catches some % of the truly opaque cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522879</commentid>
    <comment_count>27</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-16 11:42:52 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #22)
&gt; &gt; It&apos; not just about whether the opaque part is at the center or the edges.  If there is a mix of opaque and transparent regions on a single layer (e.g. images without alpha intermixed with text drawn on transparent background), doing the tests per tile will give you better granularity.  
&gt; 
&gt; I think the assumption underlying this is that we would be painting a single tile at a time. That is not the current situation, we paint the entire layer in one go. And reveman tells me this will never be the case. So if we are going to do the detection during the paint, I think we would need to pass in tile information to the PlatformContextSkia, and have it track opaque stuff, similar to how this CL does, but for each tile. Is that what you are meaning? If so, I&apos;d rather do that in a separate iteration as it is significantly more complicated.
&gt; 
&gt; What we are planning to do on a per-tile basis is playback a recorded SkPicture. We could do this opaque computation in there, and it was suggested originally also. Is this what you are meaning instead?

Sorry for not being more clear. Yes, that&apos;s what I meant.  When we play back the SkPicture to create the tile contents, we need to create PlatformContext and at that point we can figure out whether the tile is opaque using code similar to what you have here.

And so the question is, should we be trying to figure out the opaque rect when painting the entire layer or postpone it and do it as we fill the contents of each tile?


 I will +you on the email thread but the current state of the thread was it was easier to do this in the context on paint and we should try that out first. We certainly have the potential to do a lot better with this method.
&gt; 
&gt; Determining if this method is &quot;good enough&quot; is another issue.. Nat has suggested doing pixel readbacks and comparing the results when running all the LayoutTests, so say if it catches some % of the truly opaque cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523063</commentid>
    <comment_count>28</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-12-16 14:56:17 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; It&apos; not just about whether the opaque part is at the center or the edges.  If there is a mix of opaque and transparent regions on a single layer (e.g. images without alpha intermixed with text drawn on transparent background), doing the tests per tile will give you better granularity.  
&gt; &gt; 
&gt; &gt; I think the assumption underlying this is that we would be painting a single tile at a time. That is not the current situation, we paint the entire layer in one go. And reveman tells me this will never be the case. So if we are going to do the detection during the paint, I think we would need to pass in tile information to the PlatformContextSkia, and have it track opaque stuff, similar to how this CL does, but for each tile. Is that what you are meaning? If so, I&apos;d rather do that in a separate iteration as it is significantly more complicated.
&gt; &gt; 
&gt; &gt; What we are planning to do on a per-tile basis is playback a recorded SkPicture. We could do this opaque computation in there, and it was suggested originally also. Is this what you are meaning instead?
&gt; 
&gt; Sorry for not being more clear. Yes, that&apos;s what I meant.  When we play back the SkPicture to create the tile contents, we need to create PlatformContext and at that point we can figure out whether the tile is opaque using code similar to what you have here.
&gt; 
&gt; And so the question is, should we be trying to figure out the opaque rect when painting the entire layer or postpone it and do it as we fill the contents of each tile?

I&apos;d like to eventually see us do this on a per-tile basis. However, (assuming that checking opaque-ness when playing back a SkPicture is a bad idea) doing it at the layer level seems like a good first step.

As the opaque-ness query is not required to be accurate (just not allowed to return false positives) I can imagine that returning a boolean value for a rect can be significantly more efficient than returning an opaque rect.

So the question I think we need to answer is; should this be done by returning a boolean or rect? Should the interface provide &quot;isRectOpaque(IntRect)&quot; or &quot;IntRect opaqueRect()&quot;?

&quot;isRectOpaque&quot; is not as useful when doing it at the layer level but just what we need for opaque-ness on a per-tile basis. So if &quot;isRectOpaque&quot; is more efficient and our goal is to do this on a per-tile basis, a boolean return value might be the better choice.

Dana, what do you think about efficiency and simplicity of  &quot;isRectOpaque(IntRect)&quot; vs &quot;IntRect opaqueRect()&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524629</commentid>
    <comment_count>29</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-20 08:35:38 -0800</bug_when>
    <thetext>I think what&apos;s complicating this in my mind is that I really want both.

What this conversation has been about is deciding if a tile is opaque. That is a super useful operation since we can store that data and pass it over to the impl side. Yay. For this, returning one rect is less optimal cuz we only care about data on a per-tile basis. This information could from from the SkCanvas, computed during drawPicture (not the PlatformContextSkia as done in this patch).

What I was thinking about largely when writing this patch, however, was deciding occlusion. I&apos;ve explained my planned strategy a few times to people but not in a documented place yet. So let me do that.

We will keep track of &quot;visible&quot; pixels in a Region. You start with the entire screen &quot;visible&quot;. Begin at the front-most layer and work our way back.
1. For layer L, paint any tiles that intersect with the current &quot;visible&quot; region.
2. For layer L, decide what region O was painted opaque
3. Subtract O from the &quot;visible&quot; region (those pixels should never be painted again).
4. Repeat from 1.

In this way we track which pixels to paint on each layer as we go. For this, I think we want just a single opaque Rect, if it can be a decent enough approximation. If we do this on a per-tile basis, the &quot;visible&quot; region can become arbitrarily complex. If we add 1 rect per layer instead (with $n$ layers), the Region&apos;s complexity will be at most $n$.

The current computation is relatively cheap. A similar operation could be done for each tile if the perf would be acceptable. At the moment I am not worrying about getting opaque data for the impl side, though. If we only consider computing occluded pixels during the paint walk, is this approach better than per-tile like I feel it is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524688</commentid>
    <comment_count>30</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-20 11:01:01 -0800</bug_when>
    <thetext>I think we need to simplify this discussion. The simple fact of the matter is we aren&apos;t yet shipping any skpicture-based drawing paths. We are, however, shipping &quot;paint a tile&quot; paths, and on those paths, we are overdraw bound.

Would it make sense to people here to get something *simple* landed that works for our production &quot;paint tiles into a bitmap&quot; path first? We can do followup patches for other modes afterward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524696</commentid>
    <comment_count>31</comment_count>
      <attachid>120047</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-20 11:14:18 -0800</bug_when>
    <thetext>Created attachment 120047
Patch

when blitting an SkImage, make sure to mark the area as opaque/not. use the SkPaint shader to handle gradients/patterns properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524711</commentid>
    <comment_count>32</comment_count>
      <attachid>120047</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-12-20 11:36:55 -0800</bug_when>
    <thetext>Comment on attachment 120047
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:313
&gt; +    if (rect.fTop &lt;= m_opaqueRect.fTop &amp;&amp; rect.fBottom &gt;= m_opaqueRect.fBottom) {
&gt; +        if (rect.fLeft &lt; m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt; m_opaqueRect.fLeft)
&gt; +            m_opaqueRect.fLeft = rect.fLeft;
&gt; +        if (rect.fRight &gt; m_opaqueRect.fRight &amp;&amp; rect.fLeft &lt; m_opaqueRect.fRight)
&gt; +            m_opaqueRect.fRight = rect.fRight;
&gt; +    } else if (rect.fLeft &lt;= m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt;= m_opaqueRect.fRight) {
&gt; +        if (rect.fTop &lt; m_opaqueRect.fTop &amp;&amp; rect.fBottom &gt; m_opaqueRect.fTop)
&gt; +            m_opaqueRect.fTop = rect.fTop;
&gt; +        if (rect.fBottom &gt; m_opaqueRect.fBottom &amp;&amp; rect.fTop &lt; m_opaqueRect.fBottom)
&gt; +            m_opaqueRect.fBottom = rect.fBottom;
&gt; +    }

Out of curiosity, what would be the downside of making this a simple union?  Unnecessary redraws?  Using both overlap and area criteria seems somewhat complex.  (Although I must admit I don&apos;t fully understand how this rect interacts with the compositor).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524712</commentid>
    <comment_count>33</comment_count>
      <attachid>120047</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-12-20 11:36:58 -0800</bug_when>
    <thetext>Comment on attachment 120047
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:313
&gt; +    if (rect.fTop &lt;= m_opaqueRect.fTop &amp;&amp; rect.fBottom &gt;= m_opaqueRect.fBottom) {
&gt; +        if (rect.fLeft &lt; m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt; m_opaqueRect.fLeft)
&gt; +            m_opaqueRect.fLeft = rect.fLeft;
&gt; +        if (rect.fRight &gt; m_opaqueRect.fRight &amp;&amp; rect.fLeft &lt; m_opaqueRect.fRight)
&gt; +            m_opaqueRect.fRight = rect.fRight;
&gt; +    } else if (rect.fLeft &lt;= m_opaqueRect.fLeft &amp;&amp; rect.fRight &gt;= m_opaqueRect.fRight) {
&gt; +        if (rect.fTop &lt; m_opaqueRect.fTop &amp;&amp; rect.fBottom &gt; m_opaqueRect.fTop)
&gt; +            m_opaqueRect.fTop = rect.fTop;
&gt; +        if (rect.fBottom &gt; m_opaqueRect.fBottom &amp;&amp; rect.fTop &lt; m_opaqueRect.fBottom)
&gt; +            m_opaqueRect.fBottom = rect.fBottom;
&gt; +    }

Out of curiosity, what would be the downside of making this a simple union?  Unnecessary redraws?  Using both overlap and area criteria seems somewhat complex.  (Although I must admit I don&apos;t fully understand how this rect interacts with the compositor).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524726</commentid>
    <comment_count>34</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-20 11:49:35 -0800</bug_when>
    <thetext>  +--------+
  |        |
  |        |
+-|        |-+
| +--------+ |
|            |
+------------+

A rect union would include pixels not in either rect, and mark them opaque when they are not. We can allow false negatives but not positives like this.

Instead we want the result to be. It&apos;s a compromise between a Region union and storing a single Rect.

  +--------+
  |        |
  |        |
  |        |
  +        +
  |        |
  +--------+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524757</commentid>
    <comment_count>35</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-12-20 12:24:59 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt;   +--------+
&gt;   |        |
&gt;   |        |
&gt; +-|        |-+
&gt; | +--------+ |
&gt; |            |
&gt; +------------+
&gt; 
&gt; A rect union would include pixels not in either rect, and mark them opaque when they are not. We can allow false negatives but not positives like this.
&gt; 
&gt; Instead we want the result to be. It&apos;s a compromise between a Region union and storing a single Rect.
&gt; 
&gt;   +--------+
&gt;   |        |
&gt;   |        |
&gt;   |        |
&gt;   +        +
&gt;   |        |
&gt;   +--------+

OK, I see now:  you do a &quot;conservative&quot; union if possible, or pick the larger rect by area if not.  Thanks for the explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525045</commentid>
    <comment_count>36</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-20 18:50:30 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; I think we need to simplify this discussion. The simple fact of the matter is we aren&apos;t yet shipping any skpicture-based drawing paths. We are, however, shipping &quot;paint a tile&quot; paths, and on those paths, we are overdraw bound.
&gt; 
&gt; Would it make sense to people here to get something *simple* landed that works for our production &quot;paint tiles into a bitmap&quot; path first? We can do followup patches for other modes afterward.

(In reply to comment #30)
&gt; I think we need to simplify this discussion. The simple fact of the matter is we aren&apos;t yet shipping any skpicture-based drawing paths. We are, however, shipping &quot;paint a tile&quot; paths, and on those paths, we are overdraw bound.
&gt; 
&gt; Would it make sense to people here to get something *simple* landed that works for our production &quot;paint tiles into a bitmap&quot; path first? We can do followup patches for other modes afterward.

Simple is good but I&apos;m not sure what you&apos;re suggesting simple will be in this case. I mostly want to make sure that whatever we do produces a reasonably good indication of the areas of the layer are opaque. Depending on the order that paints happen in WebKit we could either end up with a good approximation or an overly conservative one.  For example, how does WebKit paint a layer with a semi-transparent border?  How about a layer that contains a number of opaque elements next to each other but has no opaque background? Will they be drawn in a way that will let us concatenate their rects into a larger rect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529892</commentid>
    <comment_count>37</comment_count>
      <attachid>120047</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-04 17:19:44 -0800</bug_when>
    <thetext>Comment on attachment 120047
Patch

(In reply to comment #36)
&gt; Simple is good but I&apos;m not sure what you&apos;re suggesting simple will be in this case. I mostly want to make sure that whatever we do produces a reasonably good indication of the areas of the layer are opaque. Depending on the order that paints happen in WebKit we could either end up with a good approximation or an overly conservative one.  For example, how does WebKit paint a layer with a semi-transparent border?  How about a layer that contains a number of opaque elements next to each other but has no opaque background? Will they be drawn in a way that will let us concatenate their rects into a larger rect?

Ok here are some much-needed numbers.  I ran all of the compositing layout tests, and I am ignoring scroll bars (they are drawn in Chrome).

The average number of opaque pixels that we find, per layer = 83.6%
The total number of opaque pixels that we find, over all the tests = 73.2%

On most layers it is getting most of the pixels. The times it misses most are layers with opaque borders but non-opaque interiors.

This seems like a pretty decent first step towards deciding opaque-ness, and it is something we can iterate on in the future to improve.

I will throw up a new patch tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530599</commentid>
    <comment_count>38</comment_count>
      <attachid>121325</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-05 13:45:17 -0800</bug_when>
    <thetext>Created attachment 121325
Patch

More thorough first cut at detecting opaque-ness via PlatformContextSkia.

This patch takes strokes/lines into account (they may put alpha into pixels). The unit test is beefed up to include lines, paths, ovals and image draws.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530778</commentid>
    <comment_count>39</comment_count>
      <attachid>121325</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-01-05 16:51:14 -0800</bug_when>
    <thetext>Comment on attachment 121325
Patch

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

Looking good.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:454
&gt; +    if (!m_trackOpaqueRegion)

Maybe simpler and faster to call trackDrawBounded() for the bounding box containing all the points?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531074</commentid>
    <comment_count>40</comment_count>
      <attachid>121325</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-06 07:56:16 -0800</bug_when>
    <thetext>Comment on attachment 121325
Patch

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

Thanks.

&gt;&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:454
&gt;&gt; +    if (!m_trackOpaqueRegion)
&gt; 
&gt; Maybe simpler and faster to call trackDrawBounded() for the bounding box containing all the points?

Yeh that would probably be sufficient.  At the moment it would be identical really since the function is only called once with a single line (2 points).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531075</commentid>
    <comment_count>41</comment_count>
      <attachid>121325</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-06 08:03:57 -0800</bug_when>
    <thetext>Comment on attachment 121325
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:454
&gt;&gt;&gt; +    if (!m_trackOpaqueRegion)
&gt;&gt; 
&gt;&gt; Maybe simpler and faster to call trackDrawBounded() for the bounding box containing all the points?
&gt; 
&gt; Yeh that would probably be sufficient.  At the moment it would be identical really since the function is only called once with a single line (2 points).

Sorry on second thought that wouldn&apos;t do the same thing. The path function takes into account stroke thickness and joining method and such. Taking the bounding box would be a smaller area than the area possibly drawn in. I think it needs to be done using an SkPath.

It would be possible to build on big SkPath always from all the points. But I&apos;m not sure that this would always give the same (or larger) bounding box. Does anyone know?

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:484
&gt; +{

nit to self: check m_trackOpaqueRegion region here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531085</commentid>
    <comment_count>42</comment_count>
      <attachid>121325</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-01-06 08:48:47 -0800</bug_when>
    <thetext>Comment on attachment 121325
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:354
&gt; +

// returns true if the xfermode will force the dst to be opaque, regardless of the current dst.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:356
&gt; +{

if (!srcIsOpaque)
    return false;

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:358
&gt; +        return srcIsOpaque; // default to kSrcOver_Mode

return true;

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:369
&gt; +        return srcIsOpaque;

return true;

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:381
&gt; +

// returns true if the xfermode will keep the dst opaque, assuming the dst is already opaque.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:421
&gt; +        if (shader)

Cannot call getFlags() w/o calling setContext() first. Instead, I think you can do this:

if (0xFF == paint.getAlpha()) {
    if (shader)
        opaque = shader-&gt;isOpaque();
    else
        opaque = !bitmap || bitmap-&gt;isOpaque();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531138</commentid>
    <comment_count>43</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-01-06 10:12:54 -0800</bug_when>
    <thetext>paint.computeStrokeFastBounds() takes stroking into account, and will return the bloated bounds (as needed) to take into account stroke-width and join/cap types.

If you have an array of points to be draws as a path or lines, you may be able to just compute their bounds, and then ask the paint for its bounds as a rect, assuming you set the paint&apos;s style appropriately (e.g. to kStroke if you&apos;re drawing as lines).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531454</commentid>
    <comment_count>44</comment_count>
      <attachid>121510</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-06 15:30:10 -0800</bug_when>
    <thetext>Created attachment 121510
Patch

Comments addressed.

Reworked the tracking a bit so the opaque-ness is considered for paths/points/lines/etc also. if they are only drawing opaque pixels then they shouldn&apos;t damage our current opaqueRect.

Buffed up the tests some. Added some actual pixel tests too to check for false positives. (Disabled pending skia-side fixes. [1])

There are two things that I wasn&apos;t totally sure about - I&apos;ll point them out via the review system.

[1] http://codereview.appspot.com/5494076/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531458</commentid>
    <comment_count>45</comment_count>
      <attachid>121510</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-06 15:35:39 -0800</bug_when>
    <thetext>Comment on attachment 121510
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:424
&gt; +    if (paint.getStyle() != SkPaint::kFill_Style &amp;&amp; paint.isAntiAlias())

Is this decision okay? It passes the unit tests but I&apos;m not sure if there&apos;s some case they are missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532171</commentid>
    <comment_count>46</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-01-09 07:03:34 -0800</bug_when>
    <thetext>There are a lot of methods related to just tracking opaqueness. Can all of these be moved into a separate class? PlatformContextSkia could contain an instance of one of these, so there should be no perf const due to indirection, but I would like to attempt to refactor this to try to encapsulate it more (if possible), esp. since PlatformContextSkia is already a big noisy class. Might make unittesting easier too...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532200</commentid>
    <comment_count>47</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-09 07:48:57 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; There are a lot of methods related to just tracking opaqueness. Can all of these be moved into a separate class? PlatformContextSkia could contain an instance of one of these, so there should be no perf const due to indirection, but I would like to attempt to refactor this to try to encapsulate it more (if possible), esp. since PlatformContextSkia is already a big noisy class. Might make unittesting easier too...

+1 to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532243</commentid>
    <comment_count>48</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 09:34:30 -0800</bug_when>
    <thetext>Thanks, great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532610</commentid>
    <comment_count>49</comment_count>
      <attachid>121748</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 16:12:50 -0800</bug_when>
    <thetext>Created attachment 121748
Patch

This is how I propose we split it out. I&apos;ve made an OpaqueRegionSkia class in .../platform/graphics/skia.

The object is pretty dumb itself, it just listens to draws and builds its rect. You can grab the object back from
the context, and ask for it as a rect with OpaqueRegionSkia::asRect().

The context still have functions to listen to drawing operations and just forwards them to the OpaqueRegionSkia
when tracking is enabled in the context.

I kept the same unit tests, because I want them to test the GraphicsContextSkia and other code in
 ...platform/graphics/skia to make sure they are calling the trackDraw*() methods on the platform
context also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532972</commentid>
    <comment_count>50</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-01-10 05:00:21 -0800</bug_when>
    <thetext>thanks, nice refactor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534072</commentid>
    <comment_count>51</comment_count>
      <attachid>121748</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-11 11:39:00 -0800</bug_when>
    <thetext>Comment on attachment 121748
Patch

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

Looks pretty good.  At a minimum, please add a comment referencing the Skia bug, and restore the #includes.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:-37
&gt; -#include &quot;SkCanvas.h&quot;

Please don&apos;t remove these.  As long as this file directly refers to those symbols, we should include what we use, and not rely on transitive includes.  That said, if it&apos;s possible to change these to be forward declarations, feel free to do so.  It looks like it won&apos;t be for SkCanvas or SkPaint, but might be for SkPath.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:46
&gt; +    { } // FIXME: Enable this test when Skia actually gets the pixels right.

Please log a bug about this (if there isn&apos;t already), and add a comment to point to that bug.

Also, this looks like it essentially makes all the pixel tests below a no-op.  Could you use fuzzy testing instead, at least until the bug is fixed?

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:59
&gt; +    uint32_t* pixels = static_cast&lt;uint32_t*&gt;(malloc(400*400*4));
&gt; +    bitmap.setPixels(pixels);

Another option would be use to use bitmap.allocPixels() here, then an SkAutoLockPixels() and getAddr32() to get the pointer.  That would save you doing the malloc()/free() yourself, and make it less fragile against changes to width/height.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:117
&gt; +    uint32_t* pixels = static_cast&lt;uint32_t*&gt;(malloc(200*200*4));
&gt; +    bitmap.setPixels(pixels);

Same here.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:215
&gt; +    uint32_t* pixels = static_cast&lt;uint32_t*&gt;(malloc(200*200*4));
&gt; +    bitmap.setPixels(pixels);

Same here.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:278
&gt; +    uint32_t* pixels = static_cast&lt;uint32_t*&gt;(malloc(200*200*4));
&gt; +    bitmap.setPixels(pixels);

Same here.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:294
&gt; +        static_cast&lt;uint32_t*&gt;(drawBitmap.getPixels())[i] = 0xFFFFFFFF;

Could use drawBitmap.getAddr32() here I think.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:300
&gt; +        static_cast&lt;uint32_t*&gt;(drawBitmap.getPixels())[i] = 0x00000000;

Same here.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:363
&gt; +    uint32_t* pixels = static_cast&lt;uint32_t*&gt;(malloc(200*200*4));
&gt; +    bitmap.setPixels(pixels);

Could use allocPixels()/getAddr32().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534265</commentid>
    <comment_count>52</comment_count>
      <attachid>122098</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-11 14:28:32 -0800</bug_when>
    <thetext>Created attachment 122098
Patch

comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534267</commentid>
    <comment_count>53</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-11 14:29:30 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=121748&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:-37
&gt;&gt; -#include &quot;SkCanvas.h&quot;
&gt; 
&gt; Please don&apos;t remove these.  As long as this file directly refers to those symbols, we should include what we use, and not rely on transitive includes.  That said, if it&apos;s possible to change these to be forward declarations, feel free to do so.  It looks like it won&apos;t be for SkCanvas or SkPaint, but might be for SkPath.

done.

&gt;&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:46
&gt;&gt; +    { } // FIXME: Enable this test when Skia actually gets the pixels right.
&gt; 
&gt; Please log a bug about this (if there isn&apos;t already), and add a comment to point to that bug.
&gt; 
&gt; Also, this looks like it essentially makes all the pixel tests below a no-op.  Could you use fuzzy testing instead, at least until the bug is fixed?

It is actually getting the alpha right here. (Didn&apos;t expect that since LayoutTest webpage output does not.) So I will just use the exact test.

&gt;&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:59
&gt;&gt; +    bitmap.setPixels(pixels);
&gt; 
&gt; Another option would be use to use bitmap.allocPixels() here, then an SkAutoLockPixels() and getAddr32() to get the pointer.  That would save you doing the malloc()/free() yourself, and make it less fragile against changes to width/height.

done. getAddr32() is lovely.

&gt;&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:117
&gt;&gt; +    bitmap.setPixels(pixels);
&gt; 
&gt; Same here.

done everywhere.

&gt;&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:294
&gt;&gt; +        static_cast&lt;uint32_t*&gt;(drawBitmap.getPixels())[i] = 0xFFFFFFFF;
&gt; 
&gt; Could use drawBitmap.getAddr32() here I think.

done everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534375</commentid>
    <comment_count>54</comment_count>
      <attachid>122119</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-11 16:19:34 -0800</bug_when>
    <thetext>Created attachment 122119
Patch

rebase, and punt the changes in platform/graphics/chromium off to a new CL for simplicity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534896</commentid>
    <comment_count>55</comment_count>
      <attachid>122119</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-12 09:19:32 -0800</bug_when>
    <thetext>Comment on attachment 122119
Patch

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

Sorry for the bikeshed, but after thinking about it a bit, I think the trackFoo() functions should be renamed didFoo().  E.g., trackDrawRect() -&gt; didDrawRect().  This will be more consistent with the rest of WebKit code for post-draw notifications.

&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:594
&gt; +    paint.setStrokeWidth(1);
&gt; +    platformContext()-&gt;trackDrawPath(path, paint);

This seems slightly fragile.  It would be safer to call trackDrawPath() from drawInnerPath() and drawOuterPath(), and you wouldn&apos;t need to set the stroke width here.  I presume that you did it this way for performance?

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.h:44
&gt; +namespace WebCore {
&gt; +class PlatformContextSkia;
&gt; +};
&gt; +
&gt; +namespace WebCore {

Any reason for two namespaces here?

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:613
&gt; +void PlatformContextSkia::trackDrawRect(const SkRect&amp; rect, const SkPaint&amp; paint, const SkBitmap* bitmap)

Please rename to didDrawRect(), per above.

&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:47
&gt; +    SkAutoLockPixels locker(bitmap); \

It would be more efficient to create a single SkAutoLockPixels than to do it before each check:  lockPixels acquires a mutex each time, IIRC.  (Since this is a test, I don&apos;t care too much, but I thought you should know.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534944</commentid>
    <comment_count>56</comment_count>
      <attachid>122119</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-12 10:23:56 -0800</bug_when>
    <thetext>Comment on attachment 122119
Patch

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

Thanks for the feedback.

&gt;&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:594
&gt;&gt; +    platformContext()-&gt;trackDrawPath(path, paint);
&gt; 
&gt; This seems slightly fragile.  It would be safer to call trackDrawPath() from drawInnerPath() and drawOuterPath(), and you wouldn&apos;t need to set the stroke width here.  I presume that you did it this way for performance?

it was because there is no platform context in the drawInner/OuterPath functions (they are local static). I will just pass it in and do it there though. Thanks.

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.h:44
&gt;&gt; +namespace WebCore {
&gt; 
&gt; Any reason for two namespaces here?

no, i&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:613
&gt;&gt; +void PlatformContextSkia::trackDrawRect(const SkRect&amp; rect, const SkPaint&amp; paint, const SkBitmap* bitmap)
&gt; 
&gt; Please rename to didDrawRect(), per above.

done.

&gt;&gt; Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp:47
&gt;&gt; +    SkAutoLockPixels locker(bitmap); \
&gt; 
&gt; It would be more efficient to create a single SkAutoLockPixels than to do it before each check:  lockPixels acquires a mutex each time, IIRC.  (Since this is a test, I don&apos;t care too much, but I thought you should know.)

ok, i wasn&apos;t sure if locking it would prevent canvas paint operations from working, but didn&apos;t try it. i&apos;ll keep it in mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534948</commentid>
    <comment_count>57</comment_count>
      <attachid>122268</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-12 10:26:39 -0800</bug_when>
    <thetext>Created attachment 122268
Patch

comments addressed.

- Made the asRect() give back an enclosed IntRect so the calculation of that rect is being tested by the unit tests.
- s/track/did/
- Removed the PlatformContextSkia* member from OpaqueRegionSkia in favour of just passing it in, so that now the class
  only holds in it an SkRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534952</commentid>
    <comment_count>58</comment_count>
      <attachid>122268</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-12 10:33:01 -0800</bug_when>
    <thetext>Comment on attachment 122268
Patch

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

&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:593
&gt;      SkCanvas* canvas = platformContext()-&gt;canvas();
&gt; -    drawOuterPath(canvas, path, paint, width);
&gt; -    drawInnerPath(canvas, path, paint, width);
&gt; +    drawOuterPath(platformContext(), canvas, path, paint, width);
&gt; +    drawInnerPath(platformContext(), canvas, path, paint, width);

I think you could avoid passing in the canvas now, and retrieve it from the platform context in the callee.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534957</commentid>
    <comment_count>59</comment_count>
      <attachid>122268</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-12 10:47:12 -0800</bug_when>
    <thetext>Comment on attachment 122268
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:593
&gt;&gt; +    drawInnerPath(platformContext(), canvas, path, paint, width);
&gt; 
&gt; I think you could avoid passing in the canvas now, and retrieve it from the platform context in the callee.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534958</commentid>
    <comment_count>60</comment_count>
      <attachid>122269</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-12 10:48:38 -0800</bug_when>
    <thetext>Created attachment 122269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534970</commentid>
    <comment_count>61</comment_count>
      <attachid>122269</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-12 10:59:38 -0800</bug_when>
    <thetext>Comment on attachment 122269
Patch

Looks good.  Thanks for all the fixes.  Will let the EWS bots chew on it for a bit.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535021</commentid>
    <comment_count>62</comment_count>
      <attachid>122277</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-12 11:56:59 -0800</bug_when>
    <thetext>Created attachment 122277
Patch

added unit test to address off-by-one error with rects beside each other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535036</commentid>
    <comment_count>63</comment_count>
      <attachid>122277</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-01-12 12:06:14 -0800</bug_when>
    <thetext>Comment on attachment 122277
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535183</commentid>
    <comment_count>64</comment_count>
      <attachid>122277</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 14:39:41 -0800</bug_when>
    <thetext>Comment on attachment 122277
Patch

Clearing flags on attachment: 122277

Committed r104861: &lt;http://trac.webkit.org/changeset/104861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535184</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 14:39:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118874</attachid>
            <date>2011-12-12 15:14:29 -0800</date>
            <delta_ts>2011-12-13 11:26:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111212181427.patch</filename>
            <type>text/plain</type>
            <size>8178</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE5NTEzYWU2MWVjZDU0
OTliY2RiZjg2MDdhNGRlMzljNzk5ZWJmYS4uOWVmNGMwZTljMDFlODFkOTljMjVkMjBjYzBkMzFl
OWE5NjllZDFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTEyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ29u
c3RydWN0IGEgc2ltcGxpZmllZCBvcGFxdWUgcmVnaW9uIHdoZW4gcGFpbnRpbmcgdmlhIFBsYXRm
b3JtQ29udGV4dFNraWEgYW5kIHNhdmUgaW4gTGF5ZXJUZXh0dXJlVXBkYXRlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNTIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGV4dHVyZVVwZGF0ZXI6Om9wYXF1ZVJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJl
VG9VcGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWdp
b25QYWludGVkT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUmVjdEFyZWFHcmVhdGVyVGhh
bik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjptYXJrUmVjdEFzT3Bh
cXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoK
KwogMjAxMS0xMi0xMiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTaGFyZSBjb2RlIHRoYXQgY2hlY2tzIGZvciBtYXRjaGluZyBzZXRzIG9mIHRyYW5z
Zm9ybSBvcGVyYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggYmY3NWNm
MjlhODllMzg5ZTI3Njc3YjExOTIwNmVmMjlhNGUzMDE0Ni4uYzc3MmYyZmM3YWRmYmVlYTVlMDAy
ODA2ZmMyYmM5ODA0NmJmM2I4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAt
MzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSw2ICs4MCwxMSBAQCBwdWJs
aWM6CiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBpcyBi
bHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNh
bXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywg
Y29uc3QgSW50U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZs
b2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8pIHsgfQorCisgICAgY29uc3QgUmVnaW9uJiBvcGFxdWVS
ZWdpb24oKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlZ2lvbjsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgUmVnaW9uIG1fb3BhcXVlUmVnaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQ
aWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
LmNwcAppbmRleCA1MzdlMTM3ZThkOGVjNTE4YjkzNGFhNWNkMmQ3MDBjNzRiMTlmZTRiLi4yOWIz
ZjJiMTA5Y2VlNDY4OThkMTFmODNlYzY1ZDdlZTZiMDk3Y2JlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtNTYsNiAr
NTYsNyBAQCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UgogICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CiAgICAgcGFpbnRDb250ZW50cyhncmFwaGlj
c0NvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlKTsKICAgICBtX3BpY3R1cmUuZW5k
UmVjb3JkaW5nKCk7CisgICAgbV9vcGFxdWVSZWdpb24gPSBwbGF0Zm9ybUNvbnRleHQucmVnaW9u
UGFpbnRlZE9wYXF1ZSgpOwogfQogCiB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OmRyYXdQaWN0dXJlKFNrQ2FudmFzKiBjYW52YXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAppbmRleCAzN2QwM2MyNDZmMjM0Mzk1MzFhNjg3NzM1NDdlNDcxMzU5YjJkMzRjLi5hM2Fm
ZWNmYTRhN2FhN2I1ZDY2OTFjNzcwOGNkODQwNGNkY2U5ODliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKQEAgLTI3NiwxMyArMjc2LDg4IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
cmVzdG9yZSgpCiAgICAgY2FudmFzKCktPnJlc3RvcmUoKTsKIH0KIAorUmVnaW9uIFBsYXRmb3Jt
Q29udGV4dFNraWE6OnJlZ2lvblBhaW50ZWRPcGFxdWUoKSBjb25zdAoreworICAgIFJlZ2lvbiBy
ZWdpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3BhcXVlUmVjdHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgSW50UmVjdCByZWN0KG1fb3BhcXVlUmVjdHNbaV0uZkxlZnQsIG1f
b3BhcXVlUmVjdHNbaV0uZlRvcCwgbV9vcGFxdWVSZWN0c1tpXS53aWR0aCgpLCBtX29wYXF1ZVJl
Y3RzW2ldLmhlaWdodCgpKTsKKyAgICAgICAgcmVnaW9uLnVuaXRlKHJlY3QpOworICAgIH0KKyAg
ICByZXR1cm4gcmVnaW9uOworfQorCitzdGF0aWMgYm9vbCBpc1JlY3RBcmVhR3JlYXRlclRoYW4o
Y29uc3QgU2tSZWN0JiBhLCBjb25zdCBTa1JlY3QmIGIpCit7CisgICAgcmV0dXJuIChsb25nKWEu
d2lkdGgoKSAqIChsb25nKWEuaGVpZ2h0KCkgPiAobG9uZyliLndpZHRoKCkgKiAobG9uZyliLmhl
aWdodCgpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtSZWN0QXNPcGFxdWUo
Y29uc3QgU2tSZWN0JiByZWN0KQoreworICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0cmFjayBvZiBh
biBvcGFxdWUgcmVnaW9uIGJ1dCBib3VuZCBpdHMgY29tcGxleGl0eSBhdCBhIGNvbnN0YW50IHNp
emUuCisgICAgLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgJGMkIGxhcmdlc3QgcmVjdGFuZ2xlcyBi
eSBhcmVhLiBJZiB3ZSBjYW4gYWRkIHRoZSBuZXcgcmVjdCB0byBvbmUKKyAgICAvLyBvZiB0aGUg
ZXhpc3RpbmcgcmVjdGFuZ2xlcyB0aGVuIHdlIGRvIHRoYXQgaW5zdGVhZCwgYXMgdGhhdCBpcyB0
aGUgY2hlYXBlc3Qgd2F5IHRvCisgICAgLy8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQgd2l0
aG91dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4aXR5LiBXZSBkbyB0aGlzIHJlbGF0aXZlbHkKKyAg
ICAvLyBuYWl2ZWx5LgorICAgIGNvbnN0IHVuc2lnbmVkIG51bVJlY3RzID0gNTsKKworICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpbnNlcnQgPSBm
YWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUmVjdHMgJiYgaSA8IG1fb3Bh
cXVlUmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gbV9v
cGFxdWVSZWN0c1tpXTsKKyAgICAgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJvb2wgbWVyZ2VkID0gZmFsc2U7CisgICAgICAg
IGlmIChvcGFxdWVSZWN0LmZUb3AgPT0gcmVjdC5mVG9wICYmIG9wYXF1ZVJlY3QuZkJvdHRvbSA9
PSByZWN0LmZCb3R0b20pIHsKKyAgICAgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgb3BhcXVlUmVj
dC5mTGVmdCAmJiByZWN0LmZSaWdodCA+IG9wYXF1ZVJlY3QuZkxlZnQpIHsKKyAgICAgICAgICAg
ICAgICBvcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKKyAgICAgICAgICAgICAgICBtZXJn
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlY3QuZlJpZ2h0ID4g
b3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8IG9wYXF1ZVJlY3QuZlJpZ2h0KSB7Cisg
ICAgICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKKyAgICAgICAg
ICAgICAgICBtZXJnZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KG9wYXF1ZVJlY3QuZkxlZnQgPT0gcmVjdC5mTGVmdCAmJiBvcGFxdWVSZWN0LmZSaWdodCA9PSBy
ZWN0LmZSaWdodCkgeworICAgICAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG9wYXF1ZVJlY3QuZlRv
cCAmJiByZWN0LmZCb3R0b20gPiBvcGFxdWVSZWN0LmZUb3ApIHsKKyAgICAgICAgICAgICAgICBv
cGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgICAgICAgICAgbWVyZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBvcGFxdWVS
ZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDwgb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAgICAg
ICAgICAgICAgb3BhcXVlUmVjdC5mQm90dG9tID0gcmVjdC5mQm90dG9tOworICAgICAgICAgICAg
ICAgIG1lcmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1lcmdlZCkgeworICAgICAgICAgICAgc3RkOjpzb3J0KG1fb3BhcXVlUmVjdHMuYmVnaW4oKSwg
bV9vcGFxdWVSZWN0cy5lbmQoKSwgaXNSZWN0QXJlYUdyZWF0ZXJUaGFuKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWluc2VydCkgeworICAgICAgICAgICAg
bG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpb3BhcXVlUmVjdC53aWR0aCgpICogKGxvbmcpb3BhcXVl
UmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGxvbmcgYXJlYSA9IChsb25nKXJlY3Qud2lkdGgo
KSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbnNlcnQgPSBhcmVhID4gb3Bh
cXVlQXJlYTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW5zZXJ0KSB7CisgICAgICAgIGlm
IChtX29wYXF1ZVJlY3RzLnNpemUoKSA8IG51bVJlY3RzKQorICAgICAgICAgICAgbV9vcGFxdWVS
ZWN0cy5hcHBlbmQocmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fb3BhcXVlUmVj
dHNbbnVtUmVjdHMtMV0gPSByZWN0OworICAgICAgICBzdGQ6OnNvcnQobV9vcGFxdWVSZWN0cy5i
ZWdpbigpLCBtX29wYXF1ZVJlY3RzLmVuZCgpLCBpc1JlY3RBcmVhR3JlYXRlclRoYW4pOworICAg
IH0KK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkK
IHsKICAgICBTa1BhaW50IHBhaW50OwotICAgIGludCBmaWxsY29sb3JOb3RUcmFuc3BhcmVudCA9
IG1fc3RhdGUtPm1fZmlsbENvbG9yICYgMHhGRjAwMDAwMDsKKyAgICB1bnNpZ25lZCBmaWxsY29s
b3JOb3RUcmFuc3BhcmVudCA9IG1fc3RhdGUtPm1fZmlsbENvbG9yICYgMHhGRjAwMDAwMDsKICAg
ICBpZiAoZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQpIHsKICAgICAgICAgc2V0dXBQYWludEZvckZp
bGxpbmcoJnBhaW50KTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsK
KworICAgICAgICBib29sIGZpbGxjb2xvck9wYXF1ZSA9IGZpbGxjb2xvck5vdFRyYW5zcGFyZW50
ID09IDB4RkYwMDAwMDA7CisgICAgICAgIGlmIChmaWxsY29sb3JPcGFxdWUpCisgICAgICAgICAg
ICBtYXJrUmVjdEFzT3BhcXVlKHJlY3QpOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlLT5tX3N0
cm9rZVN0eWxlICE9IE5vU3Ryb2tlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDE1NWQ0YzI1
OThhMzg1Y2Q1OTgxNTNmM2FiYzlhN2JhNDdmOWQ1YWUuLjM0MTc1NWFiNDdkZGI2MjliY2JiNzI4
MjJlZGExMjQ1MzM0ZmQxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0zMyw2ICszMyw3
IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb25jb3B5YWJs
ZS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgogCiAjaW5jbHVkZSAiU2tDYW52YXMuaCIKICNpbmNs
dWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCkBAIC0xNTMsNiArMTU0LDkgQEAgcHVibGljOgogICAg
IEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CiAKKyAgICAvLyBBZnRlciBwYWludGluZywgdGhpcyB3aWxsIGdpdmUg
YW4gZXN0aW1hdGUgdG8gdGhlIHJlZ2lvbiB0aGF0IHdhcyBwYWludGVkIG9wYXF1ZS4gSXQgbWF5
IHVuZGVyZXN0aW1hdGUgdG8gbWFpbnRhaW4gY29uc3RhbnQgY29tcGxleGl0eS4KKyAgICBSZWdp
b24gcmVnaW9uUGFpbnRlZE9wYXF1ZSgpIGNvbnN0OworCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIHB1c2hlZCBkb3duIHRvIEdyYXBoaWNzQ29udGV4dC4KICAgICB2b2lkIGRyYXdSZWN0
KFNrUmVjdCByZWN0KTsKIApAQCAtMTk1LDYgKzE5OSwxMCBAQCBwcml2YXRlOgogICAgIC8vIGNv
bW1vbiBjb2RlIGJldHdlZW4gc2V0dXBQYWludEZvcltGaWxsaW5nLFN0cm9raW5nXQogICAgIHZv
aWQgc2V0dXBTaGFkZXIoU2tQYWludCosIEdyYWRpZW50KiwgUGF0dGVybiosIFNrQ29sb3IpIGNv
bnN0OwogCisgICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYpOworCisgICAg
VmVjdG9yPFNrUmVjdD4gbV9vcGFxdWVSZWN0czsKKwogICAgIC8vIERlZmluZXMgZHJhd2luZyBz
dHlsZS4KICAgICBzdHJ1Y3QgU3RhdGU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119048</attachid>
            <date>2011-12-13 11:26:38 -0800</date>
            <delta_ts>2011-12-13 16:15:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111213142636.patch</filename>
            <type>text/plain</type>
            <size>8283</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0M2MyMWZjM2UyMjRk
NTg5ZjdiYjRkYWIzNjJmYTNmYzc1ZWJhNS4uMTRiNTU2YTdhN2E4Mjk4YjNkYzE0YzE0MDI2ODgx
MzE3MjMzZGZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTEzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBDb25zdHJ1
Y3QgYSBzaW1wbGlmaWVkIG9wYXF1ZSByZWdpb24gd2hlbiBwYWludGluZyB2aWEgUGxhdGZvcm1D
b250ZXh0U2tpYSBhbmQgc2F2ZSBpbiBMYXllclRleHR1cmVVcGRhdGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM1MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlcjo6b3BhcXVlUmVnaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1Vw
ZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlZ2lvblBh
aW50ZWRPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNSZWN0QXJlYUdyZWF0ZXJUaGFuKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtSZWN0QXNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorCiAy
MDExLTEyLTEzICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4K
IAogICAgICAgICBbUXRdIEdldCByaWQgb2YgbGF5ZXJpbmcgdmlvbGF0aW9ucyBpbiBpbmNsdWRl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IGJmNzVjZjI5YTg5ZTM4OWUyNzY3
N2IxMTkyMDZlZjI5YTRlMzAxNDYuLmM3NzJmMmZjN2FkZmJlZWE1ZTAwMjgwNmZjMmJjOTgwNDZi
ZjNiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTMxLDYgKzMxLDcgQEAK
IAogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNE
LmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzksNiArODAsMTEgQEAgcHVibGljOgogICAgIC8vIElm
IHRoZSBmb3JtYXQgaXMgVGV4ZWxGb3JtYXRCR1JBLCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVjNC56
IGlzIHJlZC4KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3Jt
YXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoY29uc3QgSW50UmVjdCYgLyogY29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUm
IC8qIHRpbGVTaXplICovLCBpbnQgLyogYm9yZGVyVGV4ZWxzICovLCBmbG9hdCAvKiBjb250ZW50
c1NjYWxlICovKSB7IH0KKworICAgIGNvbnN0IFJlZ2lvbiYgb3BhcXVlUmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFxdWVSZWdpb247IH0KKworcHJvdGVjdGVkOgorICAgIFJlZ2lvbiBtX29w
YXF1ZVJlZ2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggNTM3
ZTEzN2U4ZDhlYzUxOGI5MzRhYTVjZDJkNzAwYzc0YjE5ZmU0Yi4uMjliM2YyYjEwOWNlZTQ2ODk4
ZDExZjgzZWM2NWQ3ZWU2YjA5N2NiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgdm9pZCBT
a1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3Qg
SW50UmVjdCYgY29udGVudFIKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZw
bGF0Zm9ybUNvbnRleHQpOwogICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250
ZW50UmVjdCwgY29udGVudHNTY2FsZSk7CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwor
ICAgIG1fb3BhcXVlUmVnaW9uID0gcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUo
KTsKIH0KIAogdm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpkcmF3UGlj
dHVyZShTa0NhbnZhcyogY2FudmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggMzdk
MDNjMjQ2ZjIzNDM5NTMxYTY4NzczNTQ3ZTQ3MTM1OWIyZDM0Yy4uODdjMDExOGExNmQzZmY1NDA3
ZjY0MTU4NmJhMjM4NDc5M2JiOTE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0y
NzYsMTMgKzI3Niw5MyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmUoKQogICAg
IGNhbnZhcygpLT5yZXN0b3JlKCk7CiB9CiAKK1JlZ2lvbiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpy
ZWdpb25QYWludGVkT3BhcXVlKCkgY29uc3QKK3sKKyAgICBSZWdpb24gcmVnaW9uOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29wYXF1ZVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEludFJlY3QgcmVjdChtX29wYXF1ZVJlY3RzW2ldLmZMZWZ0LCBtX29wYXF1ZVJlY3RzW2ld
LmZUb3AsIG1fb3BhcXVlUmVjdHNbaV0ud2lkdGgoKSwgbV9vcGFxdWVSZWN0c1tpXS5oZWlnaHQo
KSk7CisgICAgICAgIHJlZ2lvbi51bml0ZShyZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlZ2lv
bjsKK30KKworc3RhdGljIGJvb2wgaXNSZWN0QXJlYUdyZWF0ZXJUaGFuKGNvbnN0IFNrUmVjdCYg
YSwgY29uc3QgU2tSZWN0JiBiKQoreworICAgIHJldHVybiAobG9uZylhLndpZHRoKCkgKiAobG9u
ZylhLmhlaWdodCgpID4gKGxvbmcpYi53aWR0aCgpICogKGxvbmcpYi5oZWlnaHQoKTsKK30KKwor
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjptYXJrUmVjdEFzT3BhcXVlKFNrUmVjdCByZWN0KQor
eworICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0cmFjayBvZiBhbiBvcGFxdWUgcmVnaW9uIGJ1dCBi
b3VuZCBpdHMgY29tcGxleGl0eSBhdCBhIGNvbnN0YW50IHNpemUuCisgICAgLy8gV2Uga2VlcCB0
cmFjayBvZiB0aGUgJGMkIGxhcmdlc3QgcmVjdGFuZ2xlcyBieSBhcmVhLiBJZiB3ZSBjYW4gYWRk
IHRoZSBuZXcgcmVjdCB0byBvbmUKKyAgICAvLyBvZiB0aGUgZXhpc3RpbmcgcmVjdGFuZ2xlcyB0
aGVuIHdlIGRvIHRoYXQgaW5zdGVhZCwgYXMgdGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvCisg
ICAgLy8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQgd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBj
b21wbGV4aXR5LiBXZSBkbyB0aGlzIHJlbGF0aXZlbHkKKyAgICAvLyBuYWl2ZWx5LgorICAgIGNv
bnN0IHVuc2lnbmVkIG51bVJlY3RzID0gNTsKKworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXAuaXNPcGFx
dWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9zdGF0ZS0+bV9jbGlwLmlzRW1wdHko
KSkKKyAgICAgICAgaWYgKCFyZWN0LmludGVyc2VjdChtX3N0YXRlLT5tX2NsaXApKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpbnNlcnQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtUmVjdHMgJiYgaSA8IG1fb3BhcXVlUmVjdHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gbV9vcGFxdWVSZWN0c1tpXTsKKyAgICAg
ICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGJvb2wgbWVyZ2VkID0gZmFsc2U7CisgICAgICAgIGlmIChvcGFxdWVSZWN0LmZUb3Ag
PT0gcmVjdC5mVG9wICYmIG9wYXF1ZVJlY3QuZkJvdHRvbSA9PSByZWN0LmZCb3R0b20pIHsKKyAg
ICAgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdo
dCA+IG9wYXF1ZVJlY3QuZkxlZnQpIHsKKyAgICAgICAgICAgICAgICBvcGFxdWVSZWN0LmZMZWZ0
ID0gcmVjdC5mTGVmdDsKKyAgICAgICAgICAgICAgICBtZXJnZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHJlY3QuZlJpZ2h0ID4gb3BhcXVlUmVjdC5mUmlnaHQgJiYg
cmVjdC5mTGVmdCA8IG9wYXF1ZVJlY3QuZlJpZ2h0KSB7CisgICAgICAgICAgICAgICAgb3BhcXVl
UmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKKyAgICAgICAgICAgICAgICBtZXJnZWQgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG9wYXF1ZVJlY3QuZkxlZnQgPT0g
cmVjdC5mTGVmdCAmJiBvcGFxdWVSZWN0LmZSaWdodCA9PSByZWN0LmZSaWdodCkgeworICAgICAg
ICAgICAgaWYgKHJlY3QuZlRvcCA8IG9wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPiBv
cGFxdWVSZWN0LmZUb3ApIHsKKyAgICAgICAgICAgICAgICBvcGFxdWVSZWN0LmZUb3AgPSByZWN0
LmZUb3A7CisgICAgICAgICAgICAgICAgbWVyZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBvcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5m
VG9wIDwgb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAgICAgICAgICAgICAgb3BhcXVlUmVjdC5m
Qm90dG9tID0gcmVjdC5mQm90dG9tOworICAgICAgICAgICAgICAgIG1lcmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lcmdlZCkgeworICAgICAgICAg
ICAgc3RkOjpzb3J0KG1fb3BhcXVlUmVjdHMuYmVnaW4oKSwgbV9vcGFxdWVSZWN0cy5lbmQoKSwg
aXNSZWN0QXJlYUdyZWF0ZXJUaGFuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbG9uZyBvcGFxdWVBcmVhID0gb3BhcXVlUmVjdC53aWR0aCgpICog
b3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgbG9uZyBhcmVhID0gcmVjdC53aWR0aCgpICog
cmVjdC5oZWlnaHQoKTsKKyAgICAgICAgaWYgKGFyZWEgPiBvcGFxdWVBcmVhKQorICAgICAgICAg
ICAgaW5zZXJ0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGluc2VydCkgeworICAgICAgICBpZiAo
bV9vcGFxdWVSZWN0cy5zaXplKCkgPCBudW1SZWN0cykKKyAgICAgICAgICAgIG1fb3BhcXVlUmVj
dHMuYXBwZW5kKHJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX29wYXF1ZVJlY3Rz
W251bVJlY3RzLTFdID0gcmVjdDsKKyAgICAgICAgc3RkOjpzb3J0KG1fb3BhcXVlUmVjdHMuYmVn
aW4oKSwgbV9vcGFxdWVSZWN0cy5lbmQoKSwgaXNSZWN0QXJlYUdyZWF0ZXJUaGFuKTsKKyAgICB9
Cit9CisKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiB7
CiAgICAgU2tQYWludCBwYWludDsKLSAgICBpbnQgZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQgPSBt
X3N0YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7CisgICAgdW5zaWduZWQgZmlsbGNvbG9y
Tm90VHJhbnNwYXJlbnQgPSBtX3N0YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7CiAgICAg
aWYgKGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CiAgICAgICAgIHNldHVwUGFpbnRGb3JGaWxs
aW5nKCZwYWludCk7CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CisK
KyAgICAgICAgYm9vbCBmaWxsY29sb3JPcGFxdWUgPSBmaWxsY29sb3JOb3RUcmFuc3BhcmVudCA9
PSAweEZGMDAwMDAwOworICAgICAgICBpZiAoZmlsbGNvbG9yT3BhcXVlKQorICAgICAgICAgICAg
bWFya1JlY3RBc09wYXF1ZShyZWN0KTsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZS0+bV9zdHJv
a2VTdHlsZSAhPSBOb1N0cm9rZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCAxNTVkNGMyNTk4
YTM4NWNkNTk4MTUzZjNhYmM5YTdiYTQ3ZjlkNWFlLi4xNzNlYTgxZjM4NGRhNzI3MTA1OGQwODcx
OThhMmQwOWQwNDcwYjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtMzMsNiArMzMsNyBA
QAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUu
aCIKKyNpbmNsdWRlICJSZWdpb24uaCIKIAogI2luY2x1ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVk
ZSAiU2tEYXNoUGF0aEVmZmVjdC5oIgpAQCAtMTUzLDYgKzE1NCw5IEBAIHB1YmxpYzoKICAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xh
dGlvblF1YWxpdHkpOwogCisgICAgLy8gQWZ0ZXIgcGFpbnRpbmcsIHRoaXMgd2lsbCBnaXZlIGFu
IGVzdGltYXRlIHRvIHRoZSByZWdpb24gdGhhdCB3YXMgcGFpbnRlZCBvcGFxdWUuIEl0IG1heSB1
bmRlcmVzdGltYXRlIHRvIG1haW50YWluIGNvbnN0YW50IGNvbXBsZXhpdHkuCisgICAgUmVnaW9u
IHJlZ2lvblBhaW50ZWRPcGFxdWUoKSBjb25zdDsKKwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBwdXNoZWQgZG93biB0byBHcmFwaGljc0NvbnRleHQuCiAgICAgdm9pZCBkcmF3UmVjdChT
a1JlY3QgcmVjdCk7CiAKQEAgLTE5NSw2ICsxOTksMTAgQEAgcHJpdmF0ZToKICAgICAvLyBjb21t
b24gY29kZSBiZXR3ZWVuIHNldHVwUGFpbnRGb3JbRmlsbGluZyxTdHJva2luZ10KICAgICB2b2lk
IHNldHVwU2hhZGVyKFNrUGFpbnQqLCBHcmFkaWVudCosIFBhdHRlcm4qLCBTa0NvbG9yKSBjb25z
dDsKIAorICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShTa1JlY3QpOworCisgICAgVmVjdG9yPFNr
UmVjdD4gbV9vcGFxdWVSZWN0czsKKwogICAgIC8vIERlZmluZXMgZHJhd2luZyBzdHlsZS4KICAg
ICBzdHJ1Y3QgU3RhdGU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119103</attachid>
            <date>2011-12-13 16:15:57 -0800</date>
            <delta_ts>2011-12-13 16:29:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111213191556.patch</filename>
            <type>text/plain</type>
            <size>7499</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0M2MyMWZjM2UyMjRk
NTg5ZjdiYjRkYWIzNjJmYTNmYzc1ZWJhNS4uMjU4ZTdiZTlmYjViZjVlNDc1MzkyYjYwNDU0YTFh
ZTEyYjg2ODVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTEzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
OjpvcGFxdWVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVnaW9uUGFpbnRlZE9wYXF1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRUcmFja09wYXF1ZVJlZ2lv
bik6CisKIDIwMTEtMTItMTMgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9r
aWEuY29tPgogCiAgICAgICAgIFtRdF0gR2V0IHJpZCBvZiBsYXllcmluZyB2aW9sYXRpb25zIGlu
IGluY2x1ZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggYmY3NWNmMjlhODll
Mzg5ZTI3Njc3YjExOTIwNmVmMjlhNGUzMDE0Ni4uMTk1ZTJlOTA2YTZmMjY4ZjhlNzQzMDkwYjVi
OGYwYzhlYTczN2Y1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAtNzksNiAr
NzksMTEgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBmb3JtYXQgaXMgVGV4ZWxGb3JtYXRCR1JB
LCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVjNC56IGlzIHJlZC4KICAgICB2aXJ0dWFsIFNhbXBsZWRU
ZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgLyogY29u
dGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIC8qIHRpbGVTaXplICovLCBpbnQgLyogYm9yZGVy
VGV4ZWxzICovLCBmbG9hdCAvKiBjb250ZW50c1NjYWxlICovKSB7IH0KKworICAgIGNvbnN0IElu
dFJlY3QmIG9wYXF1ZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlY3Q7IH0KKworcHJv
dGVjdGVkOgorICAgIEludFJlY3QgbV9vcGFxdWVSZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcAppbmRleCA1MzdlMTM3ZThkOGVjNTE4YjkzNGFhNWNkMmQ3MDBjNzRiMTlm
ZTRiLi5mMGNiMTJjOWE1MzVmYjA2OTNjOWE4NmYzZjRkODMwNThiZjk4YWViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApA
QCAtNTMsOSArNTMsMTMgQEAgdm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVy
OjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFIKICAgICBTa0NhbnZhcyog
Y2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNv
bnRlbnRSZWN0LmhlaWdodCgpKTsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29u
dGV4dChjYW52YXMpOwogICAgIHBsYXRmb3JtQ29udGV4dC5zZXREZWZlcnJlZCh0cnVlKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKICAgICBwYWludENv
bnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUpOwogICAg
IG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKworICAgIGNvbnN0IFNrUmVjdCYgcmVjdCA9IHBs
YXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCk7CisgICAgbV9vcGFxdWVSZWN0ID0g
SW50UmVjdChyZWN0LmZMZWZ0LCByZWN0LmZUb3AsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CiB9CiAKIHZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6ZHJhd1Bp
Y3R1cmUoU2tDYW52YXMqIGNhbnZhcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IDM3
ZDAzYzI0NmYyMzQzOTUzMWE2ODc3MzU0N2U0NzEzNTliMmQzNGMuLjk0Y2Y2N2YwYjZkOWJmZDFm
ZmM5ZWUxZjFiODBkZGM1MDI4OWVkNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAt
Mjc2LDExICsyNzYsNjYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkKICAg
ICBjYW52YXMoKS0+cmVzdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1h
cmtSZWN0QXNPcGFxdWUoU2tSZWN0IHJlY3QpCit7CisgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRy
YWNrIG9mIGFuIG9wYXF1ZSByZWdpb24gYnV0IGJvdW5kIGl0cyBjb21wbGV4aXR5IGF0IGEgY29u
c3RhbnQgc2l6ZS4KKyAgICAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBsYXJnZXN0IHJlY3Rhbmds
ZSBzZWVuIGJ5IGFyZWEuIElmIHdlIGNhbiBhZGQgdGhlIG5ldyByZWN0IHRvIHRoaXMKKyAgICAv
LyByZWN0YW5nbGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkg
dG8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQKKyAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcg
dGhlIGNvbXBsZXhpdHkuCisKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIW1fc3RhdGUtPm1faW1hZ2VCdWZmZXJDbGlwLmlzT3BhcXVlKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIW1fc3RhdGUtPm1fY2xpcC5pc0VtcHR5KCkpCisgICAgICAg
IGlmICghcmVjdC5pbnRlcnNlY3QobV9zdGF0ZS0+bV9jbGlwKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGJvb2wgbWVyZ2VkID0gZmFsc2U7CisgICAgaWYgKG1fb3BhcXVlUmVjdC5mVG9w
ID09IHJlY3QuZlRvcCAmJiBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9PSByZWN0LmZCb3R0b20pIHsK
KyAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmln
aHQgPiBtX29wYXF1ZVJlY3QuZkxlZnQpIHsKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mTGVm
dCA9IHJlY3QuZkxlZnQ7CisgICAgICAgICAgICBtZXJnZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChyZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVm
dCA8IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmln
aHQgPSByZWN0LmZSaWdodDsKKyAgICAgICAgICAgIG1lcmdlZCA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG1fb3BhcXVlUmVjdC5mTGVmdCA9PSByZWN0LmZMZWZ0ICYmIG1fb3Bh
cXVlUmVjdC5mUmlnaHQgPT0gcmVjdC5mUmlnaHQpIHsKKyAgICAgICAgaWYgKHJlY3QuZlRvcCA8
IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+IG1fb3BhcXVlUmVjdC5mVG9wKSB7
CisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRvcDsKKyAgICAgICAgICAg
IG1lcmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlY3QuZkJvdHRvbSA+IG1f
b3BhcXVlUmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7
CisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKKyAgICAg
ICAgICAgIG1lcmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1lcmdl
ZCkgeworICAgICAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgo
KSAqIChsb25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgbG9uZyBhcmVhID0gKGxv
bmcpcmVjdC53aWR0aCgpICogKGxvbmcpcmVjdC5oZWlnaHQoKTsKKyAgICAgICAgaWYgKGFyZWEg
PiBvcGFxdWVBcmVhKQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICB9Cit9
CisKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiB7CiAg
ICAgU2tQYWludCBwYWludDsKLSAgICBpbnQgZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQgPSBtX3N0
YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7CisgICAgdW5zaWduZWQgZmlsbGNvbG9yTm90
VHJhbnNwYXJlbnQgPSBtX3N0YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7CiAgICAgaWYg
KGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CisgICAgICAgIGlmIChtX3RyYWNrT3BhcXVlUmVn
aW9uKSB7CisgICAgICAgICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBt
X2djLT5zdGF0ZSgpOworICAgICAgICAgICAgYm9vbCBmaWxsY29sb3JPcGFxdWUgPSBmaWxsY29s
b3JOb3RUcmFuc3BhcmVudCA9PSAweEZGMDAwMDAwOworICAgICAgICAgICAgYm9vbCBncmFkaWVu
dEhhc0FscGhhID0gc3RhdGUuZmlsbEdyYWRpZW50ICYmIHN0YXRlLmZpbGxHcmFkaWVudC0+aGFz
QWxwaGEoKTsKKyAgICAgICAgICAgIGlmICghZ3JhZGllbnRIYXNBbHBoYSAmJiAhc3RhdGUuZmls
bFBhdHRlcm4gJiYgZmlsbGNvbG9yT3BhcXVlKQorICAgICAgICAgICAgICAgIG1hcmtSZWN0QXNP
cGFxdWUocmVjdCk7CisgICAgICAgIH0KKwogICAgICAgICBzZXR1cFBhaW50Rm9yRmlsbGluZygm
cGFpbnQpOwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggMTU1ZDRjMjU5OGEzODVjZDU5ODE1M2YzYWJjOWE3
YmE0N2Y5ZDVhZS4uYmI3MjczZTI3OTc1Y2E2NmQ0YzM4YmQ4MjM0ZjliZmI2NGExZDdhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTE1Myw2ICsxNTMsMTAgQEAgcHVibGljOgogICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eSk7CiAKKyAgICAvLyBBZnRlciBwYWludGluZywgdGhpcyB3aWxsIGdpdmUgYW4g
ZXN0aW1hdGUgdG8gdGhlIHJlZ2lvbiB0aGF0IHdhcyBwYWludGVkIG9wYXF1ZS4gSXQgbWF5IHVu
ZGVyZXN0aW1hdGUgdG8gbWFpbnRhaW4gY29uc3RhbnQgY29tcGxleGl0eS4KKyAgICBjb25zdCBT
a1JlY3QmIHJlZ2lvblBhaW50ZWRPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlY3Q7
IH0KKyAgICB2b2lkIHNldFRyYWNrT3BhcXVlUmVnaW9uKGJvb2wgdHJhY2spIHsgbV90cmFja09w
YXF1ZVJlZ2lvbiA9IHRyYWNrOyB9CisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVz
aGVkIGRvd24gdG8gR3JhcGhpY3NDb250ZXh0LgogICAgIHZvaWQgZHJhd1JlY3QoU2tSZWN0IHJl
Y3QpOwogCkBAIC0xOTUsNiArMTk5LDExIEBAIHByaXZhdGU6CiAgICAgLy8gY29tbW9uIGNvZGUg
YmV0d2VlbiBzZXR1cFBhaW50Rm9yW0ZpbGxpbmcsU3Ryb2tpbmddCiAgICAgdm9pZCBzZXR1cFNo
YWRlcihTa1BhaW50KiwgR3JhZGllbnQqLCBQYXR0ZXJuKiwgU2tDb2xvcikgY29uc3Q7CiAKKyAg
ICB2b2lkIG1hcmtSZWN0QXNPcGFxdWUoU2tSZWN0KTsKKworICAgIFNrUmVjdCBtX29wYXF1ZVJl
Y3Q7CisgICAgYm9vbCBtX3RyYWNrT3BhcXVlUmVnaW9uOworCiAgICAgLy8gRGVmaW5lcyBkcmF3
aW5nIHN0eWxlLgogICAgIHN0cnVjdCBTdGF0ZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119106</attachid>
            <date>2011-12-13 16:29:29 -0800</date>
            <delta_ts>2011-12-14 10:53:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111213192928.patch</filename>
            <type>text/plain</type>
            <size>8159</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0M2MyMWZjM2UyMjRk
NTg5ZjdiYjRkYWIzNjJmYTNmYzc1ZWJhNS4uNGE3NGUzYWNhNjc5NDBmNzdiMjI2Y2I5ZDMyMTVm
NWFmMzhhNjlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTEyLTEzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
OjpvcGFxdWVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RBc09wYXF1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZWdpb25QYWludGVkT3BhcXVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldFRyYWNrT3BhcXVl
UmVnaW9uKToKKwogMjAxMS0xMi0xMyAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Ri
b0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBHZXQgcmlkIG9mIGxheWVyaW5nIHZpb2xhdGlv
bnMgaW4gaW5jbHVkZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBiZjc1Y2Yy
OWE4OWUzODllMjc2NzdiMTE5MjA2ZWYyOWE0ZTMwMTQ2Li4xOTVlMmU5MDZhNmYyNjhmOGU3NDMw
OTBiNWI4ZjBjOGVhNzM3ZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC03
OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1h
dEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2Ft
cGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiAv
KiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBi
b3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8pIHsgfQorCisgICAgY29u
c3QgSW50UmVjdCYgb3BhcXVlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQor
Citwcm90ZWN0ZWQ6CisgICAgSW50UmVjdCBtX29wYXF1ZVJlY3Q7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDUzN2UxMzdlOGQ4ZWM1MThiOTM0YWE1Y2QyZDcwMGM3
NGIxOWZlNGIuLmYwY2IxMmM5YTUzNWZiMDY5M2M5YTg2ZjNmNGQ4MzA1OGJmOThhZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC01Myw5ICs1MywxMyBAQCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UgogICAgIFNrQ2Fu
dmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgo
KSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZv
cm1Db250ZXh0KGNhbnZhcyk7CiAgICAgcGxhdGZvcm1Db250ZXh0LnNldERlZmVycmVkKHRydWUp
OworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKICAgICBH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOwogICAgIHBh
aW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7
CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworCisgICAgY29uc3QgU2tSZWN0JiByZWN0
ID0gcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKTsKKyAgICBtX29wYXF1ZVJl
Y3QgPSBJbnRSZWN0KHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKIH0KIAogdm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpk
cmF3UGljdHVyZShTa0NhbnZhcyogY2FudmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5k
ZXggMzdkMDNjMjQ2ZjIzNDM5NTMxYTY4NzczNTQ3ZTQ3MTM1OWIyZDM0Yy4uYWQ1OWFlNDNhOTcy
MjFjZDA1MDVlMTNhNmJmNWJmMDliZGExNTc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3Bw
CkBAIC0xNzksNiArMTc5LDggQEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6
YXBwbHlBbHBoYShTa0NvbG9yIGMpIGNvbnN0CiAvLyBEYW5nZXI6IGNhbnZhcyBjYW4gYmUgTlVM
TC4KIFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMqIGNh
bnZhcykKICAgICA6IG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fdHJhY2tPcGFxdWVSZWdpb24o
ZmFsc2UpCisgICAgLCBtX29wYXF1ZVJlY3QoU2tSZWN0OjpNYWtlRW1wdHkoKSkKICAgICAsIG1f
cHJpbnRpbmcoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkKGZhbHNlKQogICAgICwgbV9kcmF3aW5n
VG9JbWFnZUJ1ZmZlcihmYWxzZSkKQEAgLTI3NiwxMSArMjc4LDY2IEBAIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6cmVzdG9yZSgpCiAgICAgY2FudmFzKCktPnJlc3RvcmUoKTsKIH0KIAordm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjptYXJrUmVjdEFzT3BhcXVlKFNrUmVjdCByZWN0KQorewor
ICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0cmFjayBvZiBhbiBvcGFxdWUgcmVnaW9uIGJ1dCBib3Vu
ZCBpdHMgY29tcGxleGl0eSBhdCBhIGNvbnN0YW50IHNpemUuCisgICAgLy8gV2Uga2VlcCB0cmFj
ayBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgc2VlbiBieSBhcmVhLiBJZiB3ZSBjYW4gYWRkIHRo
ZSBuZXcgcmVjdCB0byB0aGlzCisgICAgLy8gcmVjdGFuZ2xlIHRoZW4gd2UgZG8gdGhhdCwgYXMg
dGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIGluY3JlYXNlIHRoZSBhcmVhIHJldHVybmVkCisg
ICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4aXR5LgorCisgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3N0YXRlLT5tX2ltYWdlQnVm
ZmVyQ2xpcC5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3N0YXRlLT5t
X2NsaXAuaXNFbXB0eSgpKQorICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0KG1fc3RhdGUtPm1f
Y2xpcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vcGFxdWVSZWN0LmNvbnRh
aW5zKHJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIG1lcmdlZCA9IGZhbHNlOwor
ICAgIGlmIChtX29wYXF1ZVJlY3QuZlRvcCA9PSByZWN0LmZUb3AgJiYgbV9vcGFxdWVSZWN0LmZC
b3R0b20gPT0gcmVjdC5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFx
dWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZMZWZ0KSB7CisgICAg
ICAgICAgICBtX29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OworICAgICAgICAgICAgbWVy
Z2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjdC5mUmlnaHQgPiBtX29wYXF1
ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZlJpZ2h0KSB7CisgICAg
ICAgICAgICBtX29wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7CisgICAgICAgICAgICBt
ZXJnZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX29wYXF1ZVJlY3QuZkxl
ZnQgPT0gcmVjdC5mTGVmdCAmJiBtX29wYXF1ZVJlY3QuZlJpZ2h0ID09IHJlY3QuZlJpZ2h0KSB7
CisgICAgICAgIGlmIChyZWN0LmZUb3AgPCBtX29wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0
b20gPiBtX29wYXF1ZVJlY3QuZlRvcCkgeworICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3Ag
PSByZWN0LmZUb3A7CisgICAgICAgICAgICBtZXJnZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChyZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3Ag
PCBtX29wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0
b20gPSByZWN0LmZCb3R0b207CisgICAgICAgICAgICBtZXJnZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFtZXJnZWQpIHsKKyAgICAgICAgbG9uZyBvcGFxdWVBcmVhID0g
KGxvbmcpbV9vcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZyltX29wYXF1ZVJlY3QuaGVpZ2h0KCk7
CisgICAgICAgIGxvbmcgYXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVp
Z2h0KCk7CisgICAgICAgIGlmIChhcmVhID4gb3BhcXVlQXJlYSkKKyAgICAgICAgICAgIG1fb3Bh
cXVlUmVjdCA9IHJlY3Q7CisgICAgfQorfQorCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRy
YXdSZWN0KFNrUmVjdCByZWN0KQogewogICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgaW50IGZpbGxj
b2xvck5vdFRyYW5zcGFyZW50ID0gbV9zdGF0ZS0+bV9maWxsQ29sb3IgJiAweEZGMDAwMDAwOwor
ICAgIHVuc2lnbmVkIGZpbGxjb2xvck5vdFRyYW5zcGFyZW50ID0gbV9zdGF0ZS0+bV9maWxsQ29s
b3IgJiAweEZGMDAwMDAwOwogICAgIGlmIChmaWxsY29sb3JOb3RUcmFuc3BhcmVudCkgeworICAg
ICAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikgeworICAgICAgICAgICAgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9nYy0+c3RhdGUoKTsKKyAgICAgICAgICAgIGJvb2wg
ZmlsbGNvbG9yT3BhcXVlID0gZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQgPT0gMHhGRjAwMDAwMDsK
KyAgICAgICAgICAgIGJvb2wgZ3JhZGllbnRIYXNBbHBoYSA9IHN0YXRlLmZpbGxHcmFkaWVudCAm
JiBzdGF0ZS5maWxsR3JhZGllbnQtPmhhc0FscGhhKCk7CisgICAgICAgICAgICBpZiAoIWdyYWRp
ZW50SGFzQWxwaGEgJiYgIXN0YXRlLmZpbGxQYXR0ZXJuICYmIGZpbGxjb2xvck9wYXF1ZSkKKyAg
ICAgICAgICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKHJlY3QpOworICAgICAgICB9CisKICAgICAg
ICAgc2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICAgICAgY2FudmFzKCktPmRyYXdS
ZWN0KHJlY3QsIHBhaW50KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDE1NWQ0
YzI1OThhMzg1Y2Q1OTgxNTNmM2FiYzlhN2JhNDdmOWQ1YWUuLjk2YjBmZWU1OTZjN2UxZGVjOTIx
MTY1YmZiNDIyMjA5ODYyNzZkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0xNTMsNiAr
MTUzLDEwIEBAIHB1YmxpYzoKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkpOwogCisgICAgLy8gQWZ0ZXIgcGFp
bnRpbmcsIHRoaXMgd2lsbCBnaXZlIGFuIGVzdGltYXRlIHRvIHRoZSByZWdpb24gdGhhdCB3YXMg
cGFpbnRlZCBvcGFxdWUuIEl0IG1heSB1bmRlcmVzdGltYXRlIHRvIG1haW50YWluIGNvbnN0YW50
IGNvbXBsZXhpdHkuCisgICAgY29uc3QgU2tSZWN0JiByZWdpb25QYWludGVkT3BhcXVlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGFxdWVSZWN0OyB9CisgICAgdm9pZCBzZXRUcmFja09wYXF1ZVJlZ2lv
bihib29sIHRyYWNrKSB7IG1fdHJhY2tPcGFxdWVSZWdpb24gPSB0cmFjazsgfQorCiAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIHB1c2hlZCBkb3duIHRvIEdyYXBoaWNzQ29udGV4dC4KICAg
ICB2b2lkIGRyYXdSZWN0KFNrUmVjdCByZWN0KTsKIApAQCAtMTk1LDYgKzE5OSw4IEBAIHByaXZh
dGU6CiAgICAgLy8gY29tbW9uIGNvZGUgYmV0d2VlbiBzZXR1cFBhaW50Rm9yW0ZpbGxpbmcsU3Ry
b2tpbmddCiAgICAgdm9pZCBzZXR1cFNoYWRlcihTa1BhaW50KiwgR3JhZGllbnQqLCBQYXR0ZXJu
KiwgU2tDb2xvcikgY29uc3Q7CiAKKyAgICB2b2lkIG1hcmtSZWN0QXNPcGFxdWUoU2tSZWN0KTsK
KwogICAgIC8vIERlZmluZXMgZHJhd2luZyBzdHlsZS4KICAgICBzdHJ1Y3QgU3RhdGU7CiAKQEAg
LTIwOSw2ICsyMTUsOSBAQCBwcml2YXRlOgogICAgIC8vIG1TdGF0ZVN0YWNrLmJhY2soKS4KICAg
ICBTdGF0ZSogbV9zdGF0ZTsKIAorICAgIGJvb2wgbV90cmFja09wYXF1ZVJlZ2lvbjsKKyAgICBT
a1JlY3QgbV9vcGFxdWVSZWN0OworCiAgICAgLy8gU3RvcmVzIGltYWdlIHNpemVzIGZvciBhIGhp
bnQgdG8gY29tcHV0ZSBpbWFnZSByZXNhbXBsaW5nIG1vZGVzLgogICAgIC8vIFZhbHVlcyBhcmUg
dXNlZCBpbiBJbWFnZVNraWEuY3BwCiAgICAgSW50U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRT
cmNTaXplOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119249</attachid>
            <date>2011-12-14 10:53:42 -0800</date>
            <delta_ts>2011-12-14 16:42:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111214135340.patch</filename>
            <type>text/plain</type>
            <size>8502</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0M2MyMWZjM2UyMjRk
NTg5ZjdiYjRkYWIzNjJmYTNmYzc1ZWJhNS4uZDZkMmI3NWI4ZjE5NmNlY2E3ZjFmNDhiZjdkNGMx
MWNiYzBmNzI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDExLTEyLTE0ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
OjpvcGFxdWVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RBc09wYXF1
ZSk6CisgICAgICAgIChXZWJDb3JlOjp4ZmVybW9kZUlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OnJlZ2lvblBhaW50ZWRPcGFxdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0VHJhY2tPcGFxdWVSZWdpb24pOgorCiAyMDExLTEy
LTEzICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAg
ICAgICBbUXRdIEdldCByaWQgb2YgbGF5ZXJpbmcgdmlvbGF0aW9ucyBpbiBpbmNsdWRlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IGJmNzVjZjI5YTg5ZTM4OWUyNzY3N2IxMTky
MDZlZjI5YTRlMzAxNDYuLjE5NWUyZTkwNmE2ZjI2OGY4ZTc0MzA5MGI1YjhmMGM4ZWE3MzdmNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTc5LDYgKzc5LDExIEBAIHB1Ymxp
YzoKICAgICAvLyBJZiB0aGUgZm9ybWF0IGlzIFRleGVsRm9ybWF0QkdSQSwgdmVjNC54IGlzIGJs
dWUgYW5kIHZlYzQueiBpcyByZWQuCiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2Ft
cGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIC8qIGNvbnRlbnRSZWN0ICovLCBj
b25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IC8qIGJvcmRlclRleGVscyAqLywgZmxv
YXQgLyogY29udGVudHNTY2FsZSAqLykgeyB9CisKKyAgICBjb25zdCBJbnRSZWN0JiBvcGFxdWVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSZWN0OyB9CisKK3Byb3RlY3RlZDoKKyAgICBJ
bnRSZWN0IG1fb3BhcXVlUmVjdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
aW5kZXggNTM3ZTEzN2U4ZDhlYzUxOGI5MzRhYTVjZDJkNzAwYzc0YjE5ZmU0Yi4uZjBjYjEyYzlh
NTM1ZmIwNjkzYzlhODZmM2Y0ZDgzMDU4YmY5OGFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTUzLDkgKzUzLDEz
IEBAIHZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSCiAgICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGlj
dHVyZS5iZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWln
aHQoKSk7CiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsK
ICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RGVmZXJyZWQodHJ1ZSk7CisgICAgcGxhdGZvcm1Db250
ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOwogICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CiAgICAgcGFpbnRDb250ZW50cyhncmFwaGlj
c0NvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlKTsKICAgICBtX3BpY3R1cmUuZW5k
UmVjb3JkaW5nKCk7CisKKyAgICBjb25zdCBTa1JlY3QmIHJlY3QgPSBwbGF0Zm9ybUNvbnRleHQu
cmVnaW9uUGFpbnRlZE9wYXF1ZSgpOworICAgIG1fb3BhcXVlUmVjdCA9IEludFJlY3QocmVjdC5m
TGVmdCwgcmVjdC5mVG9wLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCiB2b2lk
IFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmRyYXdQaWN0dXJlKFNrQ2FudmFz
KiBjYW52YXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCAzN2QwM2MyNDZmMjM0Mzk1
MzFhNjg3NzM1NDdlNDcxMzU5YjJkMzRjLi5lNDc2OTRkZDA1ODM4NWU0NGZmMmQzZDUyNTZiZGQ0
ZDhjMGNhZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTE3OSw2ICsxNzksOCBA
QCBTa0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjphcHBseUFscGhhKFNrQ29sb3Ig
YykgY29uc3QKIC8vIERhbmdlcjogY2FudmFzIGNhbiBiZSBOVUxMLgogUGxhdGZvcm1Db250ZXh0
U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2FudmFzKQogICAgIDogbV9jYW52
YXMoY2FudmFzKQorICAgICwgbV90cmFja09wYXF1ZVJlZ2lvbihmYWxzZSkKKyAgICAsIG1fb3Bh
cXVlUmVjdChTa1JlY3Q6Ok1ha2VFbXB0eSgpKQogICAgICwgbV9wcmludGluZyhmYWxzZSkKICAg
ICAsIG1fZGVmZXJyZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNl
KQpAQCAtMjc2LDExICsyNzgsNjkgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3Jl
KCkKICAgICBjYW52YXMoKS0+cmVzdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6Om1hcmtSZWN0QXNPcGFxdWUoU2tSZWN0IHJlY3QpCit7CisgICAgLy8gV2Ugd2FudCB0byBr
ZWVwIHRyYWNrIG9mIGFuIG9wYXF1ZSByZWdpb24gYnV0IGJvdW5kIGl0cyBjb21wbGV4aXR5IGF0
IGEgY29uc3RhbnQgc2l6ZS4KKyAgICAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBsYXJnZXN0IHJl
Y3RhbmdsZSBzZWVuIGJ5IGFyZWEuIElmIHdlIGNhbiBhZGQgdGhlIG5ldyByZWN0IHRvIHRoaXMK
KyAgICAvLyByZWN0YW5nbGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVz
dCB3YXkgdG8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQKKyAgICAvLyB3aXRob3V0IGluY3Jl
YXNpbmcgdGhlIGNvbXBsZXhpdHkuCisKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW1fc3RhdGUtPm1faW1hZ2VCdWZmZXJDbGlwLmlzT3BhcXVlKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fc3RhdGUtPm1fY2xpcC5pc0VtcHR5KCkpCisg
ICAgICAgIGlmICghcmVjdC5pbnRlcnNlY3QobV9zdGF0ZS0+bV9jbGlwKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX29wYXF1ZVJlY3QuZlRvcCA8PSByZWN0LmZUb3AgJiYgbV9v
cGFxdWVSZWN0LmZCb3R0b20gPj0gcmVjdC5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZM
ZWZ0IDwgbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZM
ZWZ0KQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKKyAgICAg
ICAgaWYgKHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDwg
bV9vcGFxdWVSZWN0LmZSaWdodCkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSBy
ZWN0LmZSaWdodDsKKyAgICB9IGVsc2UgaWYgKG1fb3BhcXVlUmVjdC5mTGVmdCA8PSByZWN0LmZM
ZWZ0ICYmIG1fb3BhcXVlUmVjdC5mUmlnaHQgPj0gcmVjdC5mUmlnaHQpIHsKKyAgICAgICAgaWYg
KHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+IG1fb3BhcXVl
UmVjdC5mVG9wKQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7Cisg
ICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZU
b3AgPCBtX29wYXF1ZVJlY3QuZkJvdHRvbSkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mQm90
dG9tID0gcmVjdC5mQm90dG9tOworICAgIH0KKworICAgIGxvbmcgb3BhcXVlQXJlYSA9IChsb25n
KW1fb3BhcXVlUmVjdC53aWR0aCgpICogKGxvbmcpbV9vcGFxdWVSZWN0LmhlaWdodCgpOworICAg
IGxvbmcgYXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7Cisg
ICAgaWYgKGFyZWEgPiBvcGFxdWVBcmVhKQorICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0Owor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgeGZlcm1vZGVJc09wYXF1ZShjb25zdCBTa1hmZXJtb2Rl
OjpNb2RlJiB4ZmVybW9kZSwgYm9vbCBzcmNJc09wYXF1ZSkKK3sKKyAgICBzd2l0Y2ggKHhmZXJt
b2RlKSB7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNh
c2UgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpk
ZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0
IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNv
dXJjZQorICAgICAgICByZXR1cm4gc3JjSXNPcGFxdWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3
UmVjdChTa1JlY3QgcmVjdCkKIHsKICAgICBTa1BhaW50IHBhaW50OwotICAgIGludCBmaWxsY29s
b3JOb3RUcmFuc3BhcmVudCA9IG1fc3RhdGUtPm1fZmlsbENvbG9yICYgMHhGRjAwMDAwMDsKKyAg
ICB1bnNpZ25lZCBmaWxsY29sb3JOb3RUcmFuc3BhcmVudCA9IG1fc3RhdGUtPm1fZmlsbENvbG9y
ICYgMHhGRjAwMDAwMDsKICAgICBpZiAoZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQpIHsKKyAgICAg
ICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pIHsKKyAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fZ2MtPnN0YXRlKCk7CisgICAgICAgICAgICBib29sIGZp
bGxjb2xvck9wYXF1ZSA9IGZpbGxjb2xvck5vdFRyYW5zcGFyZW50ID09IDB4RkYwMDAwMDA7Cisg
ICAgICAgICAgICBib29sIGdyYWRpZW50SGFzQWxwaGEgPSBzdGF0ZS5maWxsR3JhZGllbnQgJiYg
c3RhdGUuZmlsbEdyYWRpZW50LT5oYXNBbHBoYSgpOworICAgICAgICAgICAgYm9vbCBoYXNBbHBo
YSA9IG1fc3RhdGUtPm1fYWxwaGEgPCAxIHx8ICFmaWxsY29sb3JPcGFxdWUgfHwgZ3JhZGllbnRI
YXNBbHBoYSB8fCBzdGF0ZS5maWxsUGF0dGVybjsKKyAgICAgICAgICAgIGlmICh4ZmVybW9kZUlz
T3BhcXVlKG1fc3RhdGUtPm1feGZlck1vZGUsICFoYXNBbHBoYSkpCisgICAgICAgICAgICAgICAg
bWFya1JlY3RBc09wYXF1ZShyZWN0KTsKKyAgICAgICAgfQorCiAgICAgICAgIHNldHVwUGFpbnRG
b3JGaWxsaW5nKCZwYWludCk7CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWlu
dCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCAxNTVkNGMyNTk4YTM4NWNkNTk4
MTUzZjNhYmM5YTdiYTQ3ZjlkNWFlLi5jMWE0M2Q5N2Q1OWUxNzg5ZGExNGYxYWE0MGEwY2Y2M2E0
YmEwMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtMTUzLDYgKzE1MywxMCBAQCBwdWJs
aWM6CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25z
dDsKICAgICB2b2lkIHNldEludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5
IGludGVycG9sYXRpb25RdWFsaXR5KTsKIAorICAgIC8vIEFmdGVyIHBhaW50aW5nLCB0aGlzIHdp
bGwgZ2l2ZSBhbiBlc3RpbWF0ZSB0byB0aGUgcmVnaW9uIHRoYXQgd2FzIHBhaW50ZWQgb3BhcXVl
LiBJdCB3aWxsIHVuZGVyZXN0aW1hdGUgdG8gbWFpbnRhaW4gY29uc3RhbnQgY29tcGxleGl0eSBv
ZiB0aGUgcmVzdWx0LgorICAgIGNvbnN0IFNrUmVjdCYgcmVnaW9uUGFpbnRlZE9wYXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQorICAgIHZvaWQgc2V0VHJhY2tPcGFxdWVSZWdp
b24oYm9vbCB0cmFjaykgeyBtX3RyYWNrT3BhcXVlUmVnaW9uID0gdHJhY2s7IH0KKwogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwdXNoZWQgZG93biB0byBHcmFwaGljc0NvbnRleHQuCiAg
ICAgdm9pZCBkcmF3UmVjdChTa1JlY3QgcmVjdCk7CiAKQEAgLTE5NSw2ICsxOTksOCBAQCBwcml2
YXRlOgogICAgIC8vIGNvbW1vbiBjb2RlIGJldHdlZW4gc2V0dXBQYWludEZvcltGaWxsaW5nLFN0
cm9raW5nXQogICAgIHZvaWQgc2V0dXBTaGFkZXIoU2tQYWludCosIEdyYWRpZW50KiwgUGF0dGVy
biosIFNrQ29sb3IpIGNvbnN0OwogCisgICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKFNrUmVjdCk7
CisKICAgICAvLyBEZWZpbmVzIGRyYXdpbmcgc3R5bGUuCiAgICAgc3RydWN0IFN0YXRlOwogCkBA
IC0yMDksNiArMjE1LDkgQEAgcHJpdmF0ZToKICAgICAvLyBtU3RhdGVTdGFjay5iYWNrKCkuCiAg
ICAgU3RhdGUqIG1fc3RhdGU7CiAKKyAgICBib29sIG1fdHJhY2tPcGFxdWVSZWdpb247CisgICAg
U2tSZWN0IG1fb3BhcXVlUmVjdDsKKwogICAgIC8vIFN0b3JlcyBpbWFnZSBzaXplcyBmb3IgYSBo
aW50IHRvIGNvbXB1dGUgaW1hZ2UgcmVzYW1wbGluZyBtb2Rlcy4KICAgICAvLyBWYWx1ZXMgYXJl
IHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50
U3JjU2l6ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119329</attachid>
            <date>2011-12-14 16:42:43 -0800</date>
            <delta_ts>2011-12-20 11:14:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111214194241.patch</filename>
            <type>text/plain</type>
            <size>22411</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ0M2MyMWZjM2UyMjRk
NTg5ZjdiYjRkYWIzNjJmYTNmYzc1ZWJhNS4uN2VhNGQ5OTUxYjdkNGQwNzAzZmM1YjNjNDU2ODc5
ODliMWEyMWUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTEyLTE0ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCBQbGF0Zm9ybUNvbnRleHRTa2lh
VGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6Om9wYXF1
ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6UGxh
dGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjptYXJrUmVjdEFzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6Om1hcmtSZWN0QXNOb25PcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6eGZlcm1vZGVJc09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjp4ZmVybW9kZVByZXNlcnZlc09wYXF1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFja0ZpbGxlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVnaW9uUGFpbnRlZE9wYXF1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRUcmFja09wYXF1ZVJlZ2lvbik6
CisKIDIwMTEtMTItMTMgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEu
Y29tPgogCiAgICAgICAgIFtRdF0gR2V0IHJpZCBvZiBsYXllcmluZyB2aW9sYXRpb25zIGluIGlu
Y2x1ZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDhlNGEwNzA2MzE3MzM4YTc1M2Vj
NDZiZWUyODhhOWIwMWNlZmRjOTkuLjIwZTBhODQyYmNjNjRiNjMyYWZlZDNkYWE1MGYyM2M2ODRm
MGVhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEt
MTItMTQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW3Nr
aWFdIFRyYWNrIGEgc2ltcGxlIG9wYXF1ZSBhcmVhIHdoZW4gcGFpbnRpbmcgdmlhIFBsYXRmb3Jt
Q29udGV4dFNraWEgYW5kIHNhdmUgaW4gTGF5ZXJUZXh0dXJlVXBkYXRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNTIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAg
ICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMi0xMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBXZWJLaXQgY29kZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBhcHBseUNv
bW1hbmQgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCBiZjc1Y2Yy
OWE4OWUzODllMjc2NzdiMTE5MjA2ZWYyOWE0ZTMwMTQ2Li4xOTVlMmU5MDZhNmYyNjhmOGU3NDMw
OTBiNWI4ZjBjOGVhNzM3ZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC03
OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1h
dEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2Ft
cGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiAv
KiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBi
b3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUgKi8pIHsgfQorCisgICAgY29u
c3QgSW50UmVjdCYgb3BhcXVlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQor
Citwcm90ZWN0ZWQ6CisgICAgSW50UmVjdCBtX29wYXF1ZVJlY3Q7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDUzN2UxMzdlOGQ4ZWM1MThiOTM0YWE1Y2QyZDcwMGM3
NGIxOWZlNGIuLmYwY2IxMmM5YTUzNWZiMDY5M2M5YTg2ZjNmNGQ4MzA1OGJmOThhZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwCkBAIC01Myw5ICs1MywxMyBAQCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UgogICAgIFNrQ2Fu
dmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgo
KSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZv
cm1Db250ZXh0KGNhbnZhcyk7CiAgICAgcGxhdGZvcm1Db250ZXh0LnNldERlZmVycmVkKHRydWUp
OworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKICAgICBH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOwogICAgIHBh
aW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7
CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworCisgICAgY29uc3QgU2tSZWN0JiByZWN0
ID0gcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKTsKKyAgICBtX29wYXF1ZVJl
Y3QgPSBJbnRSZWN0KHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKIH0KIAogdm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpk
cmF3UGljdHVyZShTa0NhbnZhcyogY2FudmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKaW5k
ZXggOTEzNWZmNGUwY2Y3MjE0MWEwMWI3MTM4OTRhNTlkZTVhYWMyNDRhMi4uMjgxZDU5MjQzMmIz
MjIzZjM4N2FhOTFlYjkyNzY1NjQyYWQxYmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CkBAIC0zMzksNiArMzM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JG
aWxsaW5nKCZwYWludCk7CiAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtD
bGVhcl9Nb2RlKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIs
IHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIsIHBhaW50
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQpAQCAtNjIxLDYgKzYyMiw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25z
dCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAgICBmaWxs
UGFpbnQuc2V0Q29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CiAgICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7CisgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT50cmFja0ZpbGxlZFJlY3QocjEsIGZpbGxQYWludCk7CisgICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0ZpbGxlZFJlY3QocjIsIGZpbGxQYWludCk7CiAgICAg
fQogCiAgICAgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKHAxLCBwMiwgd2lkdGgsIHBlblN0
eWxlKTsKQEAgLTcwMiw2ICs3MDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLAogICAgICAg
ICAgICAgIG9yaWdpblggKyBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHdpZHRoKSwKICAgICAgICAg
ICAgICBvcmlnaW5ZICsgU2tJbnRUb1NjYWxhcihtaXNzcGVsbEJpdG1hcC0+aGVpZ2h0KCkpKTsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHJlY3QsIHBhaW50KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwdCwKQEAgLTcyNiw2ICs3MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIC8vIFRleHQgbGluZXMgYXJlIGRyYXdu
IHVzaW5nIHRoZSBzdHJva2UgY29sb3IuCiAgICAgcGFpbnQuc2V0Q29sb3IocGxhdGZvcm1Db250
ZXh0KCktPmVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFj
a0ZpbGxlZFJlY3QociwgcGFpbnQpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUg
d2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtNzc4LDYgKzc4Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgU2tQYWludCBwYWlu
dDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIsIHBhaW50KTsKIAogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5yZXN0b3JlKCk7CiB9CkBAIC04MDYsNiArODEyLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclMKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludENvbW1v
bigmcGFpbnQpOwogICAgIHBhaW50LnNldENvbG9yKGNvbG9yLnJnYigpKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LApAQCAtMTE2Myw5ICsx
MTcwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIGJvb2wgdmFsaWRXID0gci53aWR0aCgpID4g
MDsKICAgICBib29sIHZhbGlkSCA9IHIuaGVpZ2h0KCkgPiAwOwogICAgIFNrQ2FudmFzKiBjYW52
YXMgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgaWYgKHZhbGlkVyAmJiB2YWxp
ZEgpCisgICAgaWYgKHZhbGlkVyAmJiB2YWxpZEgpIHsKICAgICAgICAgY2FudmFzLT5kcmF3UmVj
dChyLCBwYWludCk7Ci0gICAgZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgeworICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIsIHBhaW50KTsKKyAgICB9IGVsc2Ug
aWYgKHZhbGlkVyB8fCB2YWxpZEgpIHsKICAgICAgICAgLy8gd2UgYXJlIGV4cGVjdGVkIHRvIHJl
c3BlY3QgdGhlIGxpbmVKb2luLCBzbyB3ZSBjYW4ndCBqdXN0IGNhbGwKICAgICAgICAgLy8gZHJh
d0xpbmUgLS0gd2UgaGF2ZSB0byBjcmVhdGUgYSBwYXRoIHRoYXQgZG91YmxlcyBiYWNrIG9uIGl0
c2VsZi4KICAgICAgICAgU2tQYXRoIHBhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRl
eCAzN2QwM2MyNDZmMjM0Mzk1MzFhNjg3NzM1NDdlNDcxMzU5YjJkMzRjLi5iYThhYzNkZDZkZTQz
OWM0Zjk0ODlkMGE1MjAzNzAzYTg3NWY3ZjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAK
QEAgLTE3OSw2ICsxNzksOCBAQCBTa0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjph
cHBseUFscGhhKFNrQ29sb3IgYykgY29uc3QKIC8vIERhbmdlcjogY2FudmFzIGNhbiBiZSBOVUxM
LgogUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2Fu
dmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQorICAgICwgbV90cmFja09wYXF1ZVJlZ2lvbihm
YWxzZSkKKyAgICAsIG1fb3BhcXVlUmVjdChTa1JlY3Q6Ok1ha2VFbXB0eSgpKQogICAgICwgbV9w
cmludGluZyhmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdU
b0ltYWdlQnVmZmVyKGZhbHNlKQpAQCAtMjc2LDYgKzI3OCwxNDggQEAgdm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpyZXN0b3JlKCkKICAgICBjYW52YXMoKS0+cmVzdG9yZSgpOwogfQogCit2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtSZWN0QXNPcGFxdWUoU2tSZWN0IHJlY3QpCit7Cisg
ICAgLy8gV2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIGFuIG9wYXF1ZSByZWdpb24gYnV0IGJvdW5k
IGl0cyBjb21wbGV4aXR5IGF0IGEgY29uc3RhbnQgc2l6ZS4KKyAgICAvLyBXZSBrZWVwIHRyYWNr
IG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSBzZWVuIGJ5IGFyZWEuIElmIHdlIGNhbiBhZGQgdGhl
IG5ldyByZWN0IHRvIHRoaXMKKyAgICAvLyByZWN0YW5nbGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0
aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQKKyAg
ICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhpdHkuCisKKyAgICBpZiAocmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fc3RhdGUtPm1faW1hZ2VCdWZm
ZXJDbGlwLmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9vcGFxdWVSZWN0
LmNvbnRhaW5zKHJlY3QpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHJlY3QuY29udGFpbnMo
bV9vcGFxdWVSZWN0KSkgeworICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKHJlY3QuZlRvcCA8PSBtX29wYXF1ZVJlY3QuZlRvcCAm
JiByZWN0LmZCb3R0b20gPj0gbV9vcGFxdWVSZWN0LmZCb3R0b20pIHsKKyAgICAgICAgaWYgKHJl
Y3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPiBtX29wYXF1ZVJl
Y3QuZkxlZnQpCisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0Owor
ICAgICAgICBpZiAocmVjdC5mUmlnaHQgPiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxl
ZnQgPCBtX29wYXF1ZVJlY3QuZlJpZ2h0KQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZSaWdo
dCA9IHJlY3QuZlJpZ2h0OworICAgIH0gZWxzZSBpZiAocmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJl
Y3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAg
ICBpZiAocmVjdC5mVG9wIDwgbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID4gbV9v
cGFxdWVSZWN0LmZUb3ApCisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRv
cDsKKyAgICAgICAgaWYgKHJlY3QuZkJvdHRvbSA+IG1fb3BhcXVlUmVjdC5mQm90dG9tICYmIHJl
Y3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mQm90dG9tKQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0
LmZCb3R0b20gPSByZWN0LmZCb3R0b207CisgICAgfQorCisgICAgbG9uZyBvcGFxdWVBcmVhID0g
KGxvbmcpbV9vcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZyltX29wYXF1ZVJlY3QuaGVpZ2h0KCk7
CisgICAgbG9uZyBhcmVhID0gKGxvbmcpcmVjdC53aWR0aCgpICogKGxvbmcpcmVjdC5oZWlnaHQo
KTsKKyAgICBpZiAoYXJlYSA+IG9wYXF1ZUFyZWEpCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IHJl
Y3Q7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShT
a1JlY3QgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50IHRvIGtlZXAgYXMgbXVjaCBvZiB0aGUgY3Vy
cmVudCBvcGFxdWUgcmVjdGFuZ2xlIGFzIHdlIGNhbiwgc28gZmluZCB0aGUgb25lIGxhcmdlc3QK
KyAgICAvLyByZWN0YW5nbGUgaW5zaWRlIG1fb3BhcXVlUmVjdCB0aGF0IGRvZXMgbm90IGludGVy
c2VjdCB3aXRoIHxyZWN0fC4KKworICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkp
IHsKKyAgICAgICAgbV9vcGFxdWVSZWN0LnNldEVtcHR5KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpbnQgZGVsdGFMZWZ0ID0gcmVjdC5mTGVmdCAtIG1fb3BhcXVlUmVjdC5mTGVm
dDsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG1fb3BhcXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdo
dDsKKyAgICBpbnQgZGVsdGFUb3AgPSByZWN0LmZUb3AgLSBtX29wYXF1ZVJlY3QuZlRvcDsKKyAg
ICBpbnQgZGVsdGFCb3R0b20gPSBtX29wYXF1ZVJlY3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsK
KworICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMg
dG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVl
UmVjdC4KKyAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xl
cyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCisgICAgU2tS
ZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFC
b3R0b20pCisgICAgICAgIGhvcml6b250YWwuZkJvdHRvbSA9IHJlY3QuZlRvcDsKKyAgICBlbHNl
CisgICAgICAgIGhvcml6b250YWwuZlRvcCA9IHJlY3QuZkJvdHRvbTsKKyAgICBTa1JlY3QgdmVy
dGljYWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgaWYgKGRlbHRhTGVmdCA+IGRlbHRhUmlnaHQpCisg
ICAgICAgIHZlcnRpY2FsLmZSaWdodCA9IHJlY3QuZkxlZnQ7CisgICAgZWxzZQorICAgICAgICB2
ZXJ0aWNhbC5mTGVmdCA9IHJlY3QuZlJpZ2h0OworCisgICAgaWYgKChsb25nKWhvcml6b250YWwu
d2lkdGgoKSAqIChsb25nKWhvcml6b250YWwuaGVpZ2h0KCkgPiAobG9uZyl2ZXJ0aWNhbC53aWR0
aCgpICogKGxvbmcpdmVydGljYWwuaGVpZ2h0KCkpCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IGhv
cml6b250YWw7CisgICAgZWxzZQorICAgICAgICBtX29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHhmZXJtb2RlSXNPcGFxdWUoU2tYZmVybW9kZSogeGZlcm1v
ZGUsIGJvb2wgc3JjSXNPcGFxdWUpCit7CisgICAgaWYgKCF4ZmVybW9kZSkKKyAgICAgICAgcmV0
dXJuIHNyY0lzT3BhcXVlOyAvLyBkZWZhdWx0IHRvIGtTcmNPdmVyX01vZGUKKyAgICBTa1hmZXJt
b2RlOjpNb2RlIG1vZGU7CisgICAgaWYgKCF4ZmVybW9kZS0+YXNNb2RlKCZtb2RlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgU2tYZmVybW9k
ZTo6a1NyY19Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01v
ZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6
a0RzdE92ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBT
a1hmZXJtb2RlOjprRHN0QVRvcF9Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6
OmtQbHVzX01vZGU6IC8vIHNvdXJjZStkZXN0CisgICAgZGVmYXVsdDogLy8gdGhlIHJlc3QgYXJl
IGFsbCBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICAgICAgcmV0dXJuIHNyY0lzT3Bh
cXVlOworICAgIGNhc2UgU2tYZmVybW9kZTo6a0NsZWFyX01vZGU6IC8vIDAKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtEc3RfTW9kZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0lu
X01vZGU6IC8vIHNvdXJjZSAqIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RJbl9Nb2Rl
OiAvLyBkZXN0ICogc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0X01vZGU6IC8v
IHNvdXJjZSAqICgxLWRlc3QpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0X01vZGU6IC8v
IGRlc3QgKiAoMS1zb3VyY2UpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjQVRvcF9Nb2RlOiAv
LyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprWG9yX01vZGU6IC8vIHNvdXJjZSArIGRlc3Qg
LSAyKihzb3VyY2UqZGVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSBib29sIHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKFNrWGZlcm1vZGUqIHhmZXJt
b2RlLCBib29sIHNyY0lzT3BhcXVlKQoreworICAgIGlmICgheGZlcm1vZGUpCisgICAgICAgIHJl
dHVybiB0cnVlOyAvLyBkZWZhdWx0IHRvIGtTcmNPdmVyX01vZGUKKyAgICBTa1hmZXJtb2RlOjpN
b2RlIG1vZGU7CisgICAgaWYgKCF4ZmVybW9kZS0+YXNNb2RlKCZtb2RlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgU2tYZmVybW9kZTo6a0Rz
dF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOiAvLyBz
b3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdmVy
X01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9k
ZTo6a1NyY0FUb3BfTW9kZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9k
ZTogLy8gc291cmNlK2Rlc3QKKyAgICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJj
ZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtDbGVhcl9Nb2RlOiAvLyAwCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0
X01vZGU6IC8vIHNvdXJjZSAqICgxLWRlc3QpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0
X01vZGU6IC8vIGRlc3QgKiAoMS1zb3VyY2UpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprWG9yX01v
ZGU6IC8vIHNvdXJjZSArIGRlc3QgLSAyKihzb3VyY2UqZGVzdCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY19Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNl
IFNrWGZlcm1vZGU6OmtTcmNJbl9Nb2RlOiAvLyBzb3VyY2UgKiBkZXN0CisgICAgY2FzZSBTa1hm
ZXJtb2RlOjprRHN0SW5fTW9kZTogLy8gZGVzdCAqIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9k
ZTo6a0RzdEFUb3BfTW9kZTogLy8gc291cmNlCisgICAgICAgIHJldHVybiBzcmNJc09wYXF1ZTsK
KyAgICB9Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tGaWxsZWRSZWN0KGNv
bnN0IFNrUmVjdCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgaWYgKCFtX3Ry
YWNrT3BhcXVlUmVnaW9uKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHBhaW50LmdldFN0eWxl
KCkgPT0gU2tQYWludDo6a1N0cm9rZV9TdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9nYy0+c3RhdGUoKTsKKyAgICBib29s
IGNvbG9yT3BhcXVlID0gcGFpbnQuZ2V0QWxwaGEoKSA9PSAweGZmOworICAgIGJvb2wgZ3JhZGll
bnRIYXNBbHBoYSA9IHN0YXRlLmZpbGxHcmFkaWVudCAmJiBzdGF0ZS5maWxsR3JhZGllbnQtPmhh
c0FscGhhKCk7CisgICAgYm9vbCBoYXNBbHBoYSA9ICFjb2xvck9wYXF1ZSB8fCBncmFkaWVudEhh
c0FscGhhIHx8IHN0YXRlLmZpbGxQYXR0ZXJuOworICAgIGlmICh4ZmVybW9kZUlzT3BhcXVlKHBh
aW50LmdldFhmZXJtb2RlKCksICFoYXNBbHBoYSkpCisgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUo
cmVjdCk7CisgICAgZWxzZSBpZiAoU2tSZWN0OjpJbnRlcnNlY3RzKHJlY3QsIG1fb3BhcXVlUmVj
dCkgJiYgIXhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LmdldFhmZXJtb2RlKCksICFoYXNB
bHBoYSkpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUocmVjdCk7Cit9CisKIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiB7CiAgICAgU2tQYWludCBw
YWludDsKQEAgLTI4Myw2ICs0MjcsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdS
ZWN0KFNrUmVjdCByZWN0KQogICAgIGlmIChmaWxsY29sb3JOb3RUcmFuc3BhcmVudCkgewogICAg
ICAgICBzZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgICAgICBjYW52YXMoKS0+ZHJh
d1JlY3QocmVjdCwgcGFpbnQpOworICAgICAgICB0cmFja0ZpbGxlZFJlY3QocmVjdCwgcGFpbnQp
OwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlCkBA
IC0yOTUsMTIgKzQ0MCwxNiBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNr
UmVjdCByZWN0KQogCiAgICAgICAgIFNrUmVjdCB0b3BCb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJl
Y3QuZlRvcCwgcmVjdC5mUmlnaHQsIHJlY3QuZlRvcCArIDEgfTsKICAgICAgICAgY2FudmFzKCkt
PmRyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQpOworICAgICAgICB0cmFja0ZpbGxlZFJlY3QodG9w
Qm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCBib3R0b21Cb3JkZXIgPSB7IHJlY3QuZkxl
ZnQsIHJlY3QuZkJvdHRvbSAtIDEsIHJlY3QuZlJpZ2h0LCByZWN0LmZCb3R0b20gfTsKICAgICAg
ICAgY2FudmFzKCktPmRyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOworICAgICAgICB0cmFj
a0ZpbGxlZFJlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCBsZWZ0Qm9y
ZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZUb3AgKyAxLCByZWN0LmZMZWZ0ICsgMSwgcmVjdC5m
Qm90dG9tIC0gMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QobGVmdEJvcmRlciwgcGFp
bnQpOworICAgICAgICB0cmFja0ZpbGxlZFJlY3QobGVmdEJvcmRlciwgcGFpbnQpOwogICAgICAg
ICBTa1JlY3QgcmlnaHRCb3JkZXIgPSB7IHJlY3QuZlJpZ2h0IC0gMSwgcmVjdC5mVG9wICsgMSwg
cmVjdC5mUmlnaHQsIHJlY3QuZkJvdHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdS
ZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CisgICAgICAgIHRyYWNrRmlsbGVkUmVjdChyaWdodEJv
cmRlciwgcGFpbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCAxNTVk
NGMyNTk4YTM4NWNkNTk4MTUzZjNhYmM5YTdiYTQ3ZjlkNWFlLi42OGQwMDVhOGVlNWRmODJiYjk3
NTVhOTc4MjQwMmQzNWNmMGY3MDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtMTUzLDYg
KzE1MywxMiBAQCBwdWJsaWM6CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSBjb25zdDsKICAgICB2b2lkIHNldEludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KTsKIAorICAgIC8vIEFmdGVyIHBh
aW50aW5nLCB0aGlzIHdpbGwgZ2l2ZSBhbiBlc3RpbWF0ZSB0byB0aGUgcmVnaW9uIHRoYXQgd2Fz
IHBhaW50ZWQgb3BhcXVlLiBJdCB3aWxsIHVuZGVyZXN0aW1hdGUgdG8gbWFpbnRhaW4gY29uc3Rh
bnQgY29tcGxleGl0eSBvZiB0aGUgcmVzdWx0LgorICAgIGNvbnN0IFNrUmVjdCYgcmVnaW9uUGFp
bnRlZE9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQorICAgIHZvaWQgc2V0
VHJhY2tPcGFxdWVSZWdpb24oYm9vbCB0cmFjaykgeyBtX3RyYWNrT3BhcXVlUmVnaW9uID0gdHJh
Y2s7IH0KKworICAgIHZvaWQgdHJhY2tGaWxsZWRSZWN0KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNr
UGFpbnQmKTsKKwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwdXNoZWQgZG93biB0byBH
cmFwaGljc0NvbnRleHQuCiAgICAgdm9pZCBkcmF3UmVjdChTa1JlY3QgcmVjdCk7CiAKQEAgLTE5
NSw2ICsyMDEsOSBAQCBwcml2YXRlOgogICAgIC8vIGNvbW1vbiBjb2RlIGJldHdlZW4gc2V0dXBQ
YWludEZvcltGaWxsaW5nLFN0cm9raW5nXQogICAgIHZvaWQgc2V0dXBTaGFkZXIoU2tQYWludCos
IEdyYWRpZW50KiwgUGF0dGVybiosIFNrQ29sb3IpIGNvbnN0OwogCisgICAgdm9pZCBtYXJrUmVj
dEFzT3BhcXVlKFNrUmVjdCk7CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKFNrUmVjdCk7
CisKICAgICAvLyBEZWZpbmVzIGRyYXdpbmcgc3R5bGUuCiAgICAgc3RydWN0IFN0YXRlOwogCkBA
IC0yMDksNiArMjE4LDkgQEAgcHJpdmF0ZToKICAgICAvLyBtU3RhdGVTdGFjay5iYWNrKCkuCiAg
ICAgU3RhdGUqIG1fc3RhdGU7CiAKKyAgICBib29sIG1fdHJhY2tPcGFxdWVSZWdpb247CisgICAg
U2tSZWN0IG1fb3BhcXVlUmVjdDsKKwogICAgIC8vIFN0b3JlcyBpbWFnZSBzaXplcyBmb3IgYSBo
aW50IHRvIGNvbXB1dGUgaW1hZ2UgcmVzYW1wbGluZyBtb2Rlcy4KICAgICAvLyBWYWx1ZXMgYXJl
IHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50
U3JjU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGRiOTk4OTdjMjUzN2Rm
MWM5MTBlMDFhN2NmM2RkNmM4M2FkZWZkNmYuLjU4YTdjZDRmOTJiNDE1YTNlM2E5ZDY0OWNlZmU4
ZTg2NmQyYzNmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTA1LDYgKzEw
NSw3IEBACiAgICAgICAgICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgWydPUz09IndpbiInLCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMzM3N2M4OTc2N2U4MjhhMjlmNDAzMjQ1OGEwZjMzOTJh
ZjU4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Bs
YXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKKyNkZWZpbmUgRVhQRUNU
X0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLmZMZWZ0LCBiLmZMZWZ0KTsgXAorICAg
IEVYUEVDVF9FUShhLmZSaWdodCwgYi5mUmlnaHQpOyBcCisgICAgRVhQRUNUX0VRKGEuZlRvcCwg
Yi5mVG9wKTsgXAorICAgIEVYUEVDVF9FUShhLmZCb3R0b20sIGIuZkJvdHRvbSk7IFwKKworVEVT
VChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVUZXN0KQoreworICAgIFNrQml0
bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywgMTAwMCwgMTAwMCk7CisgICAgdm9pZCogcGl4ZWxzID0gbWFsbG9jKDEwMDAqMTAwMCo0
KTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAgU2tDYW52YXMgY2FudmFzKGJp
dG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFz
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBv
cGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMS4w
ZiwgMC4wZiwgMC41Zik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAs
IDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigxMCwgMTAsIDEwKzkwLCAx
MCs5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVBsdXNMaWdodGVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChT
a1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0LnJl
Z2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg5
OSwgMTMsIDEwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291
cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAxMCs5
MCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgYWxwaGEsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChT
a1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArODksIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0LnJl
Z2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg4
LCA4LCAzLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNl
T3V0KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDExLCAxMCwgMTErODgs
IDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBj
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgzMCwgMzAsIDI5MCwgMjkwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAzMCsyOTApLCBwbGF0Zm9ybUNvbnRl
eHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KDQwLCAyMCwgMjkwLCA1MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwg
MzAsIDMwKzI5MCwgMzArMjkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUo
KSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDM5MCwgNTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAzMCsyOTApLCBwbGF0
Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAz
MCsyOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIG9wYXF1ZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
U2tSZWN0OjpNYWtlTFRSQigzMCwgMTAsIDMwKzI5MCwgMTArMzEwKSwgcGxhdGZvcm1Db250ZXh0
LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBmcmVlKHBpeGVscyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120047</attachid>
            <date>2011-12-20 11:14:18 -0800</date>
            <delta_ts>2012-01-05 13:45:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20111220141416.patch</filename>
            <type>text/plain</type>
            <size>23451</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUwZTlkMzgzODM2MWVh
NmE3NGExNGMwMGRhNWNkYTlmZTYyY2I4Yi4uMDIxMjg4ZWI4ODc3MTczMGM0NzViMWEwZjQ3N2Ix
OTJkMjcxYmI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTIwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdDogUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpv
cGFxdWVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RBc09wYXF1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnhmZXJtb2RlSXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
eGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6dHJhY2tGaWxsZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dFNraWE6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6OnJlZ2lvblBhaW50ZWRPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6c2V0VHJhY2tPcGFxdWVSZWdpb24pOgorCiAyMDExLTEyLTIwICBKdWxpZW4gQ2hh
ZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlZ3Jlc3Npb24oOTky
MTIpOiB0YWJsZSByb3dzIGdldCBpbmNvcnJlY3QgaGVpZ2h0IGFmdGVyIGNoYW5naW5nIHNvbWUg
Y2VsbHMnIGhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhYTZkNGU2ZGUzYzA3
ZTE2MzU3MjkzYzI1ZWU0YjNmMzNkZDQ5ZWZlLi45MTJkYzk5MDkxNjMzZmVkYTNmMWY5NjYwZjA3
NDEyNTgyODQyZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDExLTEyLTIwICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtza2lhXSBUcmFjayBhIHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQ
bGF0Zm9ybUNvbnRleHRTa2lhIGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMTItMjAgIEdyZWcgQmlsbG9jayAgPGdiaWxs
b2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgTWFrZSBXZWJJbnRlbnRTZXJ2aWNlSW5mbyBjb25z
dHJ1Y3RvciBwdWJsaWMgZm9yIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgK
aW5kZXggMzRkYjcyYWE0NTJjZWMyNmEzNzYyMmQ2MzdmZDhkMWFmNDRiNGRiMy4uYTg1ODc5M2Qx
ZThjNjJiYTlmOWE5YzJlYjg0Yzc2ZmFkOGFmM2E4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaApAQCAtNzIsNiArNzIsMTEgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBmb3JtYXQg
aXMgVGV4ZWxGb3JtYXRCR1JBLCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVjNC56IGlzIHJlZC4KICAg
ICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0g
dGV4dHVyZUZvcm1hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgLyogY29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIC8qIHRpbGVTaXpl
ICovLCBpbnQgLyogYm9yZGVyVGV4ZWxzICovLCBmbG9hdCAvKiBjb250ZW50c1NjYWxlICovKSB7
IH0KKworICAgIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29w
YXF1ZVJlY3Q7IH0KKworcHJvdGVjdGVkOgorICAgIEludFJlY3QgbV9vcGFxdWVSZWN0OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCA1MzdlMTM3ZThkOGVjNTE4Yjkz
NGFhNWNkMmQ3MDBjNzRiMTlmZTRiLi5mMGNiMTJjOWE1MzVmYjA2OTNjOWE4NmYzZjRkODMwNThi
Zjk4YWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyLmNwcApAQCAtNTMsOSArNTMsMTMgQEAgdm9pZCBTa1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFIKICAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRl
bnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKICAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOwogICAgIHBsYXRmb3JtQ29udGV4dC5zZXRE
ZWZlcnJlZCh0cnVlKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24o
dHJ1ZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250
ZXh0KTsKICAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QsIGNv
bnRlbnRzU2NhbGUpOwogICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKworICAgIGNvbnN0
IFNrUmVjdCYgcmVjdCA9IHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCk7Cisg
ICAgbV9vcGFxdWVSZWN0ID0gSW50UmVjdChyZWN0LmZMZWZ0LCByZWN0LmZUb3AsIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKIHZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwCmluZGV4IDkxMzVmZjRlMGNmNzIxNDFhMDFiNzEzODk0YTU5ZGU1YWFjMjQ0YTIu
LjI4MWQ1OTI0MzJiMzIyM2YzODdhYTkxZWI5Mjc2NTY0MmFkMWJmMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcApAQCAtMzM5LDYgKzMzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShT
a1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5kcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRmlsbGVk
UmVjdChyLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKQEAgLTYyMSw2ICs2MjIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikK
ICAgICAgICAgZmlsbFBhaW50LnNldENvbG9yKHBhaW50LmdldENvbG9yKCkpOwogICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIxLCBmaWxsUGFpbnQpOwogICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIyLCBmaWxsUGFpbnQp
OworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIxLCBmaWxsUGFp
bnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIyLCBmaWxs
UGFpbnQpOwogICAgIH0KIAogICAgIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhwMSwgcDIs
IHdpZHRoLCBwZW5TdHlsZSk7CkBAIC03MDIsNiArNzA1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3
aWR0aCwKICAgICAgICAgICAgICBvcmlnaW5YICsgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcih3aWR0
aCksCiAgICAgICAgICAgICAgb3JpZ2luWSArIFNrSW50VG9TY2FsYXIobWlzc3BlbGxCaXRtYXAt
PmhlaWdodCgpKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChy
ZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRmlsbGVkUmVjdChyZWN0
LCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcHQsCkBAIC03MjYsNiArNzMwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwKICAgICAvLyBUZXh0IGxp
bmVzIGFyZSBkcmF3biB1c2luZyB0aGUgc3Ryb2tlIGNvbG9yLgogICAgIHBhaW50LnNldENvbG9y
KHBsYXRmb3JtQ29udGV4dCgpLT5lZmZlY3RpdmVTdHJva2VDb2xvcigpKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+dHJhY2tGaWxsZWRSZWN0KHIsIHBhaW50KTsKIH0KIAogLy8gRHJhd3MgYSBmaWxs
ZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTc3OCw2ICs3ODMsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxs
aW5nKCZwYWludCk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChy
LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRmlsbGVkUmVjdChyLCBwYWlu
dCk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOwogfQpAQCAtODA2LDYgKzgx
Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNl
dHVwUGFpbnRDb21tb24oJnBhaW50KTsKICAgICBwYWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRmlsbGVkUmVjdChyLCBwYWludCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwK
QEAgLTExNjMsOSArMTE3MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBib29sIHZhbGlkVyA9
IHIud2lkdGgoKSA+IDA7CiAgICAgYm9vbCB2YWxpZEggPSByLmhlaWdodCgpID4gMDsKICAgICBT
a0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIGlmICh2
YWxpZFcgJiYgdmFsaWRIKQorICAgIGlmICh2YWxpZFcgJiYgdmFsaWRIKSB7CiAgICAgICAgIGNh
bnZhcy0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIGVsc2UgaWYgKHZhbGlkVyB8fCB2YWxpZEgp
IHsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRmlsbGVkUmVjdChyLCBwYWludCk7
CisgICAgfSBlbHNlIGlmICh2YWxpZFcgfHwgdmFsaWRIKSB7CiAgICAgICAgIC8vIHdlIGFyZSBl
eHBlY3RlZCB0byByZXNwZWN0IHRoZSBsaW5lSm9pbiwgc28gd2UgY2FuJ3QganVzdCBjYWxsCiAg
ICAgICAgIC8vIGRyYXdMaW5lIC0tIHdlIGhhdmUgdG8gY3JlYXRlIGEgcGF0aCB0aGF0IGRvdWJs
ZXMgYmFjayBvbiBpdHNlbGYuCiAgICAgICAgIFNrUGF0aCBwYXRoOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGU2NmRi
YWI0MzUwZDQ1ZDM0M2VmMWQzZmY1NjIxYTg4YTM5NzllYzYuLjJlODUzNzI1M2YwOWNmNWM1NDc1
MTZjMTc4ZThjMjAyNmRiNzc3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTI0OCw2ICsyNDgsNyBAQCBzdGF0aWMg
dm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgTmF0aXZlSW1hZwogICAgICAgICAvLyB3ZSBkb24ndCBzZW5kIGV4dHJhIHBpeGVscy4K
ICAgICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZzcmNSZWN0
LCBkZXN0UmVjdCwgJnBhaW50KTsKICAgICB9CisgICAgcGxhdGZvcm1Db250ZXh0LT50cmFja0Zp
bGxlZFJlY3QoZGVzdFJlY3QsIHBhaW50KTsKIH0KIAogLy8gVHJhbnNmb3JtcyB0aGUgZ2l2ZW4g
ZGltZW5zaW9ucyB3aXRoIHRoZSBnaXZlbiBtYXRyaXguIFVzZWQgdG8gc2VlIGhvdyBiaWcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGE1ZTE4NjgwZDIwYmJiZjY5ODI4NjY4ZTBlYjlj
ZDZmMWU5ODMwYjUuLmIxMzk2ODlhZTdhMTYwY2Y0ZmE1Yzk4NzJhMTNiMjFmMjdiYjAwMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMTc5LDYgKzE3OSw4IEBAIFNrQ29sb3IgUGxh
dGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGx5QWxwaGEoU2tDb2xvciBjKSBjb25zdAogLy8g
RGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9y
bUNvbnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMpCisg
ICAgLCBtX3RyYWNrT3BhcXVlUmVnaW9uKGZhbHNlKQorICAgICwgbV9vcGFxdWVSZWN0KFNrUmVj
dDo6TWFrZUVtcHR5KCkpCiAgICAgLCBtX3ByaW50aW5nKGZhbHNlKQogICAgICwgbV9kZWZlcnJl
ZChmYWxzZSkKICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCkBAIC0yODAsNiAr
MjgyLDE1MSBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmUoKQogICAgIGNhbnZh
cygpLT5yZXN0b3JlKCk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RB
c09wYXF1ZShTa1JlY3QgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50IHRvIGtlZXAgdHJhY2sgb2Yg
YW4gb3BhcXVlIHJlZ2lvbiBidXQgYm91bmQgaXRzIGNvbXBsZXhpdHkgYXQgYSBjb25zdGFudCBz
aXplLgorICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xlIHNlZW4g
YnkgYXJlYS4gSWYgd2UgY2FuIGFkZCB0aGUgbmV3IHJlY3QgdG8gdGhpcworICAgIC8vIHJlY3Rh
bmdsZSB0aGVuIHdlIGRvIHRoYXQsIGFzIHRoYXQgaXMgdGhlIGNoZWFwZXN0IHdheSB0byBpbmNy
ZWFzZSB0aGUgYXJlYSByZXR1cm5lZAorICAgIC8vIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgY29t
cGxleGl0eS4KKworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXAuaXNPcGFxdWUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7CisgICAgICAgIG1fb3Bh
cXVlUmVjdCA9IHJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmVjdC5m
VG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3Qu
ZkJvdHRvbSkgeworICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVjdC5mTGVmdCAm
JiByZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5mTGVmdCkKKyAgICAgICAgICAgIG1fb3BhcXVl
UmVjdC5mTGVmdCA9IHJlY3QuZkxlZnQ7CisgICAgICAgIGlmIChyZWN0LmZSaWdodCA+IG1fb3Bh
cXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVjdC5mUmlnaHQpCisgICAg
ICAgICAgICBtX29wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7CisgICAgfSBlbHNlIGlm
IChyZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29w
YXF1ZVJlY3QuZlJpZ2h0KSB7CisgICAgICAgIGlmIChyZWN0LmZUb3AgPCBtX29wYXF1ZVJlY3Qu
ZlRvcCAmJiByZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZlRvcCkKKyAgICAgICAgICAgIG1f
b3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOworICAgICAgICBpZiAocmVjdC5mQm90dG9tID4g
bV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDwgbV9vcGFxdWVSZWN0LmZCb3R0b20p
CisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKKyAgICB9
CisKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChs
b25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIGFyZWEgPSAobG9uZylyZWN0Lndp
ZHRoKCkgKiAobG9uZylyZWN0LmhlaWdodCgpOworICAgIGlmIChhcmVhID4gb3BhcXVlQXJlYSkK
KyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKK30KKwordm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKFNrUmVjdCByZWN0KQoreworICAgIC8vIFdlIHdhbnQg
dG8ga2VlcCBhcyBtdWNoIG9mIHRoZSBjdXJyZW50IG9wYXF1ZSByZWN0YW5nbGUgYXMgd2UgY2Fu
LCBzbyBmaW5kIHRoZSBvbmUgbGFyZ2VzdAorICAgIC8vIHJlY3RhbmdsZSBpbnNpZGUgbV9vcGFx
dWVSZWN0IHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggfHJlY3R8LgorCisgICAgaWYgKHJl
Y3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgeworICAgICAgICBtX29wYXF1ZVJlY3Quc2V0RW1w
dHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBkZWx0YUxlZnQgPSByZWN0
LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0OworICAgIGludCBkZWx0YVJpZ2h0ID0gbV9vcGFx
dWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OworICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRv
cCAtIG1fb3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRvbSA9IG1fb3BhcXVlUmVj
dC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworCisgICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFy
Z2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2Yg
fHJlY3R8IGFuZCBpbnNpZGUgbV9vcGFxdWVSZWN0LgorICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBs
YXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFib3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5z
aWRlIG1fb3BhcXVlUmVjdC4KKyAgICBTa1JlY3QgaG9yaXpvbnRhbCA9IG1fb3BhcXVlUmVjdDsK
KyAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkKKyAgICAgICAgaG9yaXpvbnRhbC5mQm90
dG9tID0gcmVjdC5mVG9wOworICAgIGVsc2UKKyAgICAgICAgaG9yaXpvbnRhbC5mVG9wID0gcmVj
dC5mQm90dG9tOworICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICBpZiAo
ZGVsdGFMZWZ0ID4gZGVsdGFSaWdodCkKKyAgICAgICAgdmVydGljYWwuZlJpZ2h0ID0gcmVjdC5m
TGVmdDsKKyAgICBlbHNlCisgICAgICAgIHZlcnRpY2FsLmZMZWZ0ID0gcmVjdC5mUmlnaHQ7CisK
KyAgICBpZiAoKGxvbmcpaG9yaXpvbnRhbC53aWR0aCgpICogKGxvbmcpaG9yaXpvbnRhbC5oZWln
aHQoKSA+IChsb25nKXZlcnRpY2FsLndpZHRoKCkgKiAobG9uZyl2ZXJ0aWNhbC5oZWlnaHQoKSkK
KyAgICAgICAgbV9vcGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKKyAgICBlbHNlCisgICAgICAgIG1f
b3BhcXVlUmVjdCA9IHZlcnRpY2FsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgeGZlcm1vZGVJ
c09wYXF1ZShTa1hmZXJtb2RlKiB4ZmVybW9kZSwgYm9vbCBzcmNJc09wYXF1ZSkKK3sKKyAgICBp
ZiAoIXhmZXJtb2RlKQorICAgICAgICByZXR1cm4gc3JjSXNPcGFxdWU7IC8vIGRlZmF1bHQgdG8g
a1NyY092ZXJfTW9kZQorICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZTsKKyAgICBpZiAoIXhmZXJt
b2RlLT5hc01vZGUoJm1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoICht
b2RlKSB7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNh
c2UgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpk
ZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0
IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNv
dXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAg
ICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVz
dAorICAgICAgICByZXR1cm4gc3JjSXNPcGFxdWU7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprQ2xl
YXJfTW9kZTogLy8gMAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdF9Nb2RlOiAvLyBkZXN0Cisg
ICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjSW5fTW9kZTogLy8gc291cmNlICogZGVzdAorICAgIGNh
c2UgU2tYZmVybW9kZTo6a0RzdEluX01vZGU6IC8vIGRlc3QgKiBzb3VyY2UKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtTcmNPdXRfTW9kZTogLy8gc291cmNlICogKDEtZGVzdCkKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVzdCAqICgxLXNvdXJjZSkKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtTcmNBVG9wX01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtY
b3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIDIqKHNvdXJjZSpkZXN0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgeGZlcm1vZGVQcmVzZXJ2
ZXNPcGFxdWUoU2tYZmVybW9kZSogeGZlcm1vZGUsIGJvb2wgc3JjSXNPcGFxdWUpCit7CisgICAg
aWYgKCF4ZmVybW9kZSkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIGRlZmF1bHQgdG8ga1NyY092
ZXJfTW9kZQorICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZTsKKyAgICBpZiAoIXhmZXJtb2RlLT5h
c01vZGUoJm1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0X01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZl
cm1vZGU6OmtTcmNPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAg
IGNhc2UgU2tYZmVybW9kZTo6a0RzdE92ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJj
ZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjQVRvcF9Nb2RlOiAvLyBkZXN0CisgICAg
Y2FzZSBTa1hmZXJtb2RlOjprUGx1c19Nb2RlOiAvLyBzb3VyY2UrZGVzdAorICAgIGRlZmF1bHQ6
IC8vIHRoZSByZXN0IGFyZSBhbGwgc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgU2tYZmVybW9kZTo6a0NsZWFyX01vZGU6IC8vIDAKKyAg
ICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdXRfTW9kZTogLy8gc291cmNlICogKDEtZGVzdCkKKyAg
ICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVzdCAqICgxLXNvdXJjZSkKKyAg
ICBjYXNlIFNrWGZlcm1vZGU6OmtYb3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIDIqKHNvdXJj
ZSpkZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3Jj
X01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0luX01vZGU6IC8vIHNv
dXJjZSAqIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RJbl9Nb2RlOiAvLyBkZXN0ICog
c291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0QVRvcF9Nb2RlOiAvLyBzb3VyY2UKKyAg
ICAgICAgcmV0dXJuIHNyY0lzT3BhcXVlOworICAgIH0KK30KKwordm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjp0cmFja0ZpbGxlZFJlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50
JiBwYWludCkKK3sKKyAgICBpZiAoIW1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAocGFpbnQuZ2V0U3R5bGUoKSA9PSBTa1BhaW50OjprU3Ryb2tlX1N0eWxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIG9wYXF1ZTsKKyAgICBTa1NoYWRlciogc2hhZGVy
ID0gcGFpbnQuZ2V0U2hhZGVyKCk7CisgICAgaWYgKHNoYWRlcikKKyAgICAgICAgb3BhcXVlID0g
c2hhZGVyLT5nZXRGbGFncygpICYgU2tTaGFkZXI6OmtPcGFxdWVBbHBoYV9GbGFnOworICAgIGVs
c2UKKyAgICAgICAgb3BhcXVlID0gcGFpbnQuZ2V0QWxwaGEoKSA9PSAweGZmICYmICFwYWludC5p
c0ZpbHRlckJpdG1hcCgpOworCisgICAgaWYgKHhmZXJtb2RlSXNPcGFxdWUocGFpbnQuZ2V0WGZl
cm1vZGUoKSwgb3BhcXVlKSkKKyAgICAgICAgbWFya1JlY3RBc09wYXF1ZShyZWN0KTsKKyAgICBl
bHNlIGlmIChTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgbV9vcGFxdWVSZWN0KSAmJiAheGZlcm1v
ZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQuZ2V0WGZlcm1vZGUoKSwgb3BhcXVlKSkKKyAgICAgICAg
bWFya1JlY3RBc05vbk9wYXF1ZShyZWN0KTsKK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKIHsKICAgICBTa1BhaW50IHBhaW50OwpAQCAtMjg3LDYg
KzQzNCw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3Qp
CiAgICAgaWYgKGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CiAgICAgICAgIHNldHVwUGFpbnRG
b3JGaWxsaW5nKCZwYWludCk7CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWlu
dCk7CisgICAgICAgIHRyYWNrRmlsbGVkUmVjdChyZWN0LCBwYWludCk7CiAgICAgfQogCiAgICAg
aWYgKG1fc3RhdGUtPm1fc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UKQEAgLTI5OSwxMiArNDQ3LDE2
IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiAKICAg
ICAgICAgU2tSZWN0IHRvcEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wLCByZWN0LmZS
aWdodCwgcmVjdC5mVG9wICsgMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QodG9wQm9y
ZGVyLCBwYWludCk7CisgICAgICAgIHRyYWNrRmlsbGVkUmVjdCh0b3BCb3JkZXIsIHBhaW50KTsK
ICAgICAgICAgU2tSZWN0IGJvdHRvbUJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mQm90dG9t
IC0gMSwgcmVjdC5mUmlnaHQsIHJlY3QuZkJvdHRvbSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJh
d1JlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7CisgICAgICAgIHRyYWNrRmlsbGVkUmVjdChib3R0
b21Cb3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IGxlZnRCb3JkZXIgPSB7IHJlY3QuZkxl
ZnQsIHJlY3QuZlRvcCArIDEsIHJlY3QuZkxlZnQgKyAxLCByZWN0LmZCb3R0b20gLSAxIH07CiAg
ICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CisgICAgICAgIHRy
YWNrRmlsbGVkUmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCByaWdodEJv
cmRlciA9IHsgcmVjdC5mUmlnaHQgLSAxLCByZWN0LmZUb3AgKyAxLCByZWN0LmZSaWdodCwgcmVj
dC5mQm90dG9tIC0gMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmlnaHRCb3JkZXIs
IHBhaW50KTsKKyAgICAgICAgdHJhY2tGaWxsZWRSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDdkY2ZiZTJlMzdmYzFjNDI3ZGRl
N2ZiM2Y2MDMxMWJlMjc0OTgyMTMuLmNkMzNhZWIzZWYxMGI0MjlhMzhmODRmMTNjZGUxMWY1ZDlm
ZDVmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0xNTMsNiArMTUzLDE3IEBAIHB1Ymxp
YzoKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkg
aW50ZXJwb2xhdGlvblF1YWxpdHkpOwogCisgICAgLy8gQWZ0ZXIgcGFpbnRpbmcsIHRoaXMgd2ls
bCBnaXZlIGFuIGVzdGltYXRlIHRvIHRoZSByZWdpb24gdGhhdCB3YXMgcGFpbnRlZCBvcGFxdWUu
IEl0IHdpbGwgdW5kZXJlc3RpbWF0ZSB0byBtYWludGFpbgorICAgIC8vIGNvbnN0YW50IGNvbXBs
ZXhpdHkgb2YgdGhlIHJlc3VsdC4gVGhpcyB3aWxsIG9ubHkgZ2l2ZSBzb21ldGhpbmcgdXNlZnVs
IGlmIHNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpIHdhcyBjYWxsZWQuCisgICAgY29uc3QgU2tS
ZWN0JiByZWdpb25QYWludGVkT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSZWN0OyB9
CisKKyAgICAvLyBFbmFibGUgdHJhY2tpbmcgb2Ygb3BhcXVlIHBhaW50aW5nLgorICAgIHZvaWQg
c2V0VHJhY2tPcGFxdWVSZWdpb24oYm9vbCB0cmFjaykgeyBtX3RyYWNrT3BhcXVlUmVnaW9uID0g
dHJhY2s7IH0KKworICAgIC8vIEFmdGVyIGRyYXdpbmcgYSByZWN0IGluIHRoZSBjb250ZXh0J3Mg
Y2FudmFzLCB1c2UgdGhpcyBmdW5jdGlvbiB0byBub3RpZnkgdGhlIGNvbnRleHQgb2YgdGhlIGRy
YXcKKyAgICAvLyBzbyB0aGF0IGl0IGNhbiB0cmFjayB0aGUgb3BhcXVlIHJlZ2lvbi4KKyAgICB2
b2lkIHRyYWNrRmlsbGVkUmVjdChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7CisKICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGVkIGRvd24gdG8gR3JhcGhpY3NDb250ZXh0
LgogICAgIHZvaWQgZHJhd1JlY3QoU2tSZWN0IHJlY3QpOwogCkBAIC0xOTYsNiArMjA3LDkgQEAg
cHJpdmF0ZToKICAgICAvLyBjb21tb24gY29kZSBiZXR3ZWVuIHNldHVwUGFpbnRGb3JbRmlsbGlu
ZyxTdHJva2luZ10KICAgICB2b2lkIHNldHVwU2hhZGVyKFNrUGFpbnQqLCBHcmFkaWVudCosIFBh
dHRlcm4qLCBTa0NvbG9yKSBjb25zdDsKIAorICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShTa1Jl
Y3QpOworICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShTa1JlY3QpOworCiAgICAgLy8gRGVm
aW5lcyBkcmF3aW5nIHN0eWxlLgogICAgIHN0cnVjdCBTdGF0ZTsKIApAQCAtMjEwLDYgKzIyNCw5
IEBAIHByaXZhdGU6CiAgICAgLy8gbVN0YXRlU3RhY2suYmFjaygpLgogICAgIFN0YXRlKiBtX3N0
YXRlOwogCisgICAgYm9vbCBtX3RyYWNrT3BhcXVlUmVnaW9uOworICAgIFNrUmVjdCBtX29wYXF1
ZVJlY3Q7CisKICAgICAvLyBTdG9yZXMgaW1hZ2Ugc2l6ZXMgZm9yIGEgaGludCB0byBjb21wdXRl
IGltYWdlIHJlc2FtcGxpbmcgbW9kZXMuCiAgICAgLy8gVmFsdWVzIGFyZSB1c2VkIGluIEltYWdl
U2tpYS5jcHAKICAgICBJbnRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBiMmQwMTVhNDA5OGEyMDBmNzZhMzgwMzQ1NGFk
YmRmZTU5NWQwYmJjLi5kYjc3Yzg0YmRhYmFjMGY4N2RiMjU4ODBiOWY4ZjVkN2VmZmFlOWUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEwOCw2ICsxMDgsNyBAQAogICAgICAg
ICAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAgICAgICAg
ICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9J
bWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9Q
bGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgIF0sCiAgICAgICAg
ICAgICB9XSwKICAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jM2I0Y2ZjNDI3MzdkNTBmMGNhZTg2OWE1MTAzOGIyZDc5NjY5N2I1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRT
a2lhVGVzdC5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKwor
I2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEuZkxlZnQsIGIu
ZkxlZnQpOyBcCisgICAgRVhQRUNUX0VRKGEuZlJpZ2h0LCBiLmZSaWdodCk7IFwKKyAgICBFWFBF
Q1RfRVEoYS5mVG9wLCBiLmZUb3ApOyBcCisgICAgRVhQRUNUX0VRKGEuZkJvdHRvbSwgYi5mQm90
dG9tKTsgXAorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZVRlc3Qp
Cit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAwLCAxMDAwKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtYWxs
b2MoMTAwMCoxMDAwKjQpOworICAgIGJpdG1hcC5zZXRQaXhlbHMocGl4ZWxzKTsKKyAgICBTa0Nh
bnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1D
b250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lv
bih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsK
KworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBh
bHBoYSgwLjBmLCAxLjBmLCAwLjBmLCAwLjVmKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEw
LCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUo
KSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5MCksIG9w
YXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlUGx1c0xpZ2h0ZXIpOworICAgIEVY
UEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAxMCs5MCwgMTArOTApLCBwbGF0
Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRS
QigxMCwgMTAsIDEwKzkwLCAxMCs5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3Bh
cXVlKCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTAp
LCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIEVY
UEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAxMCs4OSwgMTArOTApLCBwbGF0
Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDgsIDgsIDMsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBD
b21wb3NpdGVTb3VyY2VPdXQpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIo
MTEsIDEwLCAxMSs4OCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1
ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDMwLCAzMCwgMjkwLCAyOTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
IEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAsIDMwLCAzMCsyOTAsIDMwKzI5MCks
IHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5m
aWxsUmVjdChGbG9hdFJlY3QoNDAsIDIwLCAyOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6
Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAzMCsyOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9u
UGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAx
MCwgMzkwLCA1MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNl
SW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAsIDMwLCAzMCsyOTAs
IDMwKzI5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAg
Y29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAzOTAsIDUwKSwgYWxwaGEsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAs
IDMwLCAzMCsyOTAsIDMwKzI5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVl
KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAzOTAsIDUwKSwg
b3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAxMCwgMzArMjkwLCAxMCszMTApLCBw
bGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGZyZWUocGl4ZWxz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121325</attachid>
            <date>2012-01-05 13:45:17 -0800</date>
            <delta_ts>2012-01-06 15:30:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120105164516.patch</filename>
            <type>text/plain</type>
            <size>38259</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uOTYwODBlZjE4ZDdhZjIzMTliYmIzNTNhYWRjMzgx
NmQ5Y2Q2MTQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAxLTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHM6IFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6
b3BhcXVlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U2tC
aXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9y
bUNvbnRleHRTa2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Om1h
cmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjp4ZmVybW9kZUlzT3BhcXVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJhd1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tEcmF3UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFja0RyYXdQb2ludHMpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cGFpbnRTa1BhaW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlZ2lvblBhaW50ZWRPcGFxdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0VHJhY2tPcGFxdWVSZWdpb24pOgorCiAyMDEy
LTAxLTA0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugb25l
IGJpZyBwcmludGYgY29tbWFuZCBpbnN0ZWFkIG9mIG1hbnkgY2hhaW5lZCBlY2hvIGNvbW1hbmRz
IHRvIGdlbmVyYXRlIGlkbF9maWxlcy50bXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NmVkMzA5NzEwODk0NDViMWRlMjk4YmVlNTA3OWY4ODI0OGViNjM1Ny4uNmIyODM1YzM1ZTM3MmQ3
YjkyOTNlYjcyODAyM2Y3YjY0MWMwMWVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMi0wMS0wNSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbc2tpYV0gVHJhY2sgYSBzaW1wbGUgb3BhcXVlIGFyZWEgd2hlbiBw
YWludGluZyB2aWEgUGxhdGZvcm1Db250ZXh0U2tpYSBhbmQgc2F2ZSBpbiBMYXllclRleHR1cmVV
cGRhdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NDM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTAxLTA0ICBQZXRlciBC
ZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlLXVz
ZSBUZXN0U2hlbGxMaW51eC5jcHAgZm9yIEFuZHJvaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAppbmRleCAzNGRiNzJhYTQ1MmNlYzI2YTM3NjIyZDYzN2ZkOGQxYWY0NGI0ZGIzLi5hODU4
NzkzZDFlOGM2MmJhOWY5YTljMmViODRjNzZmYWQ4YWYzYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oCkBAIC03Miw2ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIGZv
cm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMgcmVk
LgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNE
ZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50U2l6ZSYgLyogdGls
ZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNvbnRlbnRzU2NhbGUg
Ki8pIHsgfQorCisgICAgY29uc3QgSW50UmVjdCYgb3BhcXVlUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BhcXVlUmVjdDsgfQorCitwcm90ZWN0ZWQ6CisgICAgSW50UmVjdCBtX29wYXF1ZVJlY3Q7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDUzN2UxMzdlOGQ4ZWM1
MThiOTM0YWE1Y2QyZDcwMGM3NGIxOWZlNGIuLjZmNmJlYzQzNGZlN2Q2ZmY0NGQwMGEzNWI2MzY2
NWE0ZmMzNzViZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC01Myw5ICs1MywxOCBAQCB2b2lkIFNrUGljdHVyZUNh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UgogICAgIFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmco
Y29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwogICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CiAgICAgcGxhdGZvcm1Db250ZXh0
LnNldERlZmVycmVkKHRydWUpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJl
Z2lvbih0cnVlKTsKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9y
bUNvbnRleHQpOwogICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50UmVj
dCwgY29udGVudHNTY2FsZSk7CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworCisgICAg
Ly8gU2F2ZSB0aGUgbGFyZ2VzdCBJbnRSZWN0IGVuY2xvc2VkIGJ5IHRoZSBTa1JlY3QuCisgICAg
Y29uc3QgU2tSZWN0JiByZWN0ID0gcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUo
KTsKKyAgICBpbnQgbGVmdCA9IFNrU2NhbGFyQ2VpbChyZWN0LmZMZWZ0KTsKKyAgICBpbnQgdG9w
ID0gU2tTY2FsYXJDZWlsKHJlY3QuZlRvcCk7CisgICAgaW50IHJpZ2h0ID0gU2tTY2FsYXJGbG9v
cihyZWN0LmZSaWdodCk7CisgICAgaW50IGJvdHRvbSA9IFNrU2NhbGFyRmxvb3IocmVjdC5mQm90
dG9tKTsKKyAgICBtX29wYXF1ZVJlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQtbGVmdCwg
Ym90dG9tLXRvcCk7CiB9CiAKIHZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CmluZGV4IDkxMzVmZjRlMGNmNzIxNDFhMDFiNzEzODk0YTU5ZGU1YWFjMjQ0YTIuLjFhNmFmYjQx
N2I1YmEwZjc0ZGZlZmQwZWM1ODcyOWE4Yjk1NzRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lh
LmNwcApAQCAtMzM5LDYgKzMzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2Rl
OjprQ2xlYXJfTW9kZSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVj
dChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1JlY3QociwgcGFp
bnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCkBAIC00NjMsMTEgKzQ2NCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZl
eFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQ
YWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRBbnRpQWxpYXMoc2hvdWxkQW50
aWFsaWFzKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgs
IHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBwYWlu
dCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWlu
dC5yZXNldCgpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9r
aW5nKCZwYWludCwgMCwgMCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tE
cmF3UGF0aChwYXRoLCBwYWludCk7CiAgICAgfQogfQogCkBAIC01MDMsMTEgKzUwNiwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgZWxpcHNlUmVj
dCkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d092YWwocmVjdCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdCb3Vu
ZGVkKHJlY3QsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7
CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1
cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAmcmVjdCwgMCk7CiAgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+dHJhY2tEcmF3Qm91bmRlZChyZWN0LCBwYWludCk7CiAgICAgfQogfQogCkBA
IC01NzQsNiArNTc5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQKICAgICBTa0NhbnZhcyog
Y2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIGRyYXdPdXRlclBhdGgo
Y2FudmFzLCBwYXRoLCBwYWludCwgd2lkdGgpOwogICAgIGRyYXdJbm5lclBhdGgoY2FudmFzLCBw
YXRoLCBwYWludCwgd2lkdGgpOworCisgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMSk7CisgICAg
cGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiAvLyBU
aGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCkBAIC02MjEsMTIgKzYyOSwxNSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29u
c3QgSW50UG9pbnQmIHBvaW50MikKICAgICAgICAgZmlsbFBhaW50LnNldENvbG9yKHBhaW50Lmdl
dENvbG9yKCkpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0
KHIxLCBmaWxsUGFpbnQpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdSZWN0KHIyLCBmaWxsUGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tE
cmF3UmVjdChyMSwgZmlsbFBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNr
RHJhd1JlY3QocjIsIGZpbGxQYWludCk7CiAgICAgfQogCiAgICAgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKHAxLCBwMiwgd2lkdGgsIHBlblN0eWxlKTsKICAgICBTa1BvaW50IHB0c1syXSA9
IHsgKFNrUG9pbnQpcDEsIChTa1BvaW50KXAyIH07CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmRyYXdQb2ludHMoU2tDYW52YXM6OmtMaW5lc19Qb2ludE1vZGUsIDIsIHB0cywg
cGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdQb2ludHMoU2tDYW52YXM6
OmtMaW5lc19Qb2ludE1vZGUsIDIsIHB0cywgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0
IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCkBAIC03MDIsNiArNzEzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwKICAgICAgICAgICAgICBvcmlnaW5YICsgV2ViQ29yZUZs
b2F0VG9Ta1NjYWxhcih3aWR0aCksCiAgICAgICAgICAgICAgb3JpZ2luWSArIFNrSW50VG9TY2Fs
YXIobWlzc3BlbGxCaXRtYXAtPmhlaWdodCgpKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRy
YWNrRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LApAQCAtNzI2LDYgKzczOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcHQs
CiAgICAgLy8gVGV4dCBsaW5lcyBhcmUgZHJhd24gdXNpbmcgdGhlIHN0cm9rZSBjb2xvci4KICAg
ICBwYWludC5zZXRDb2xvcihwbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlU3Ryb2tlQ29sb3Io
KSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7
CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1JlY3QociwgcGFpbnQpOwogfQogCiAv
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtNzYw
LDYgKzc3Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoVG9GaWxsKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygm
cGFpbnQpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRo
LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFp
bnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQpAQCAtNzc4LDYgKzc5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
cmVzdG9yZSgpOwogfQpAQCAtODA2LDYgKzgyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRDb21tb24oJnBhaW50KTsKICAgICBw
YWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5kcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJh
d1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsCkBAIC04NDUsNiArODYxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNl
dENvbG9yKGNvbG9yLnJnYigpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0
aChwYXRoLCBwYWludCk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTSgpIGNvbnN0CkBAIC0xMTI5LDYgKzExNDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFu
KQogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgICByZXR1
cm47CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWlu
dCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9T
dHJva2UpCkBAIC0xMTQzLDYgKzExNjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiAgICAgU2tQYWludCBwYWludDsKICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKQEAgLTExNjMsOSArMTE4MiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICBib29sIHZhbGlkVyA9IHIud2lkdGgoKSA+IDA7CiAgICAgYm9vbCB2YWxpZEggPSByLmhlaWdo
dCgpID4gMDsKICAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpOwotICAgIGlmICh2YWxpZFcgJiYgdmFsaWRIKQorICAgIGlmICh2YWxpZFcgJiYgdmFsaWRI
KSB7CiAgICAgICAgIGNhbnZhcy0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIGVsc2UgaWYgKHZh
bGlkVyB8fCB2YWxpZEgpIHsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1Jl
Y3QociwgcGFpbnQpOworICAgIH0gZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgewogICAgICAg
ICAvLyB3ZSBhcmUgZXhwZWN0ZWQgdG8gcmVzcGVjdCB0aGUgbGluZUpvaW4sIHNvIHdlIGNhbid0
IGp1c3QgY2FsbAogICAgICAgICAvLyBkcmF3TGluZSAtLSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHBh
dGggdGhhdCBkb3VibGVzIGJhY2sgb24gaXRzZWxmLgogICAgICAgICBTa1BhdGggcGF0aDsKQEAg
LTExNzMsNiArMTE5Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICBwYXRoLmxpbmVUbyhy
LmZSaWdodCwgci5mQm90dG9tKTsKICAgICAgICAgcGF0aC5jbG9zZSgpOwogICAgICAgICBjYW52
YXMtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRy
YWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGU2NmRiYWI0
MzUwZDQ1ZDM0M2VmMWQzZmY1NjIxYTg4YTM5NzllYzYuLjQxZGU2MTVkYWYxYjZjZDk3N2U2OTAx
N2NmYzg5NmY0ODEzMWYzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTI0OCw2ICsyNDgsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgTmF0aXZlSW1hZwogICAgICAgICAvLyB3ZSBkb24ndCBzZW5kIGV4dHJhIHBpeGVscy4KICAg
ICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZzcmNSZWN0LCBk
ZXN0UmVjdCwgJnBhaW50KTsKICAgICB9CisgICAgcGxhdGZvcm1Db250ZXh0LT50cmFja0RyYXdS
ZWN0KGRlc3RSZWN0LCBwYWludCwgJmJpdG1hcC5iaXRtYXAoKSk7CiB9CiAKIC8vIFRyYW5zZm9y
bXMgdGhlIGdpdmVuIGRpbWVuc2lvbnMgd2l0aCB0aGUgZ2l2ZW4gbWF0cml4LiBVc2VkIHRvIHNl
ZSBob3cgYmlnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCBhNWUxODY4MGQyMGJiYmY2
OTgyODY2OGUwZWI5Y2Q2ZjFlOTgzMGI1Li5mOTY5YmQ3NTJlOTMzNzJmZGVkMjMzNTc4MjQ3ZDUz
ZDY0NjI0MmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTE3OSw2ICsxNzksOCBA
QCBTa0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjphcHBseUFscGhhKFNrQ29sb3Ig
YykgY29uc3QKIC8vIERhbmdlcjogY2FudmFzIGNhbiBiZSBOVUxMLgogUGxhdGZvcm1Db250ZXh0
U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2FudmFzKQogICAgIDogbV9jYW52
YXMoY2FudmFzKQorICAgICwgbV90cmFja09wYXF1ZVJlZ2lvbihmYWxzZSkKKyAgICAsIG1fb3Bh
cXVlUmVjdChTa1JlY3Q6Ok1ha2VFbXB0eSgpKQogICAgICwgbV9wcmludGluZyhmYWxzZSkKICAg
ICAsIG1fZGVmZXJyZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNl
KQpAQCAtMjgwLDYgKzI4MiwyMTAgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3Jl
KCkKICAgICBjYW52YXMoKS0+cmVzdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6Om1hcmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQoreworICAgIC8vIFdlIHdh
bnQgdG8ga2VlcCB0cmFjayBvZiBhbiBvcGFxdWUgcmVnaW9uIGJ1dCBib3VuZCBpdHMgY29tcGxl
eGl0eSBhdCBhIGNvbnN0YW50IHNpemUuCisgICAgLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgbGFy
Z2VzdCByZWN0YW5nbGUgc2VlbiBieSBhcmVhLiBJZiB3ZSBjYW4gYWRkIHRoZSBuZXcgcmVjdCB0
byB0aGlzCisgICAgLy8gcmVjdGFuZ2xlIHRoZW4gd2UgZG8gdGhhdCwgYXMgdGhhdCBpcyB0aGUg
Y2hlYXBlc3Qgd2F5IHRvIGluY3JlYXNlIHRoZSBhcmVhIHJldHVybmVkCisgICAgLy8gd2l0aG91
dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4aXR5LgorCisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcC5pc09w
YXF1ZSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fb3BhcXVlUmVjdC5jb250YWlucyhy
ZWN0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVj
dCkpIHsKKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChyZWN0LmZUb3AgPD0gbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90
dG9tID49IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwg
bV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZMZWZ0KQor
ICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKKyAgICAgICAgaWYg
KHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDwgbV9vcGFx
dWVSZWN0LmZSaWdodCkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZS
aWdodDsKKyAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZMZWZ0ICYm
IHJlY3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKKyAgICAgICAgaWYgKHJlY3Qu
ZlRvcCA8IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+IG1fb3BhcXVlUmVjdC5m
VG9wKQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAg
IGlmIChyZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3AgPCBt
X29wYXF1ZVJlY3QuZkJvdHRvbSkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mQm90dG9tID0g
cmVjdC5mQm90dG9tOworICAgIH0KKworICAgIGxvbmcgb3BhcXVlQXJlYSA9IChsb25nKW1fb3Bh
cXVlUmVjdC53aWR0aCgpICogKGxvbmcpbV9vcGFxdWVSZWN0LmhlaWdodCgpOworICAgIGxvbmcg
YXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CisgICAgaWYg
KGFyZWEgPiBvcGFxdWVBcmVhKQorICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworfQorCit2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0
JiByZWN0KQoreworICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBhcyBtdWNoIG9mIHRoZSBjdXJyZW50
IG9wYXF1ZSByZWN0YW5nbGUgYXMgd2UgY2FuLCBzbyBmaW5kIHRoZSBvbmUgbGFyZ2VzdAorICAg
IC8vIHJlY3RhbmdsZSBpbnNpZGUgbV9vcGFxdWVSZWN0IHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0
IHdpdGggfHJlY3R8LgorCisgICAgaWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgewor
ICAgICAgICBtX29wYXF1ZVJlY3Quc2V0RW1wdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0Owor
ICAgIGludCBkZWx0YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0Owor
ICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOworICAgIGlu
dCBkZWx0YUJvdHRvbSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworCisg
ICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0
aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgbV9vcGFxdWVSZWN0
LgorICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBsYXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFi
b3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KKyAgICBTa1JlY3Qg
aG9yaXpvbnRhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRv
bSkKKyAgICAgICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOworICAgIGVsc2UKKyAg
ICAgICAgaG9yaXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOworICAgIFNrUmVjdCB2ZXJ0aWNh
bCA9IG1fb3BhcXVlUmVjdDsKKyAgICBpZiAoZGVsdGFMZWZ0ID4gZGVsdGFSaWdodCkKKyAgICAg
ICAgdmVydGljYWwuZlJpZ2h0ID0gcmVjdC5mTGVmdDsKKyAgICBlbHNlCisgICAgICAgIHZlcnRp
Y2FsLmZMZWZ0ID0gcmVjdC5mUmlnaHQ7CisKKyAgICBpZiAoKGxvbmcpaG9yaXpvbnRhbC53aWR0
aCgpICogKGxvbmcpaG9yaXpvbnRhbC5oZWlnaHQoKSA+IChsb25nKXZlcnRpY2FsLndpZHRoKCkg
KiAobG9uZyl2ZXJ0aWNhbC5oZWlnaHQoKSkKKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gaG9yaXpv
bnRhbDsKKyAgICBlbHNlCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IHZlcnRpY2FsOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgeGZlcm1vZGVJc09wYXF1ZShTa1hmZXJtb2RlKiB4ZmVybW9kZSwg
Ym9vbCBzcmNJc09wYXF1ZSkKK3sKKyAgICBpZiAoIXhmZXJtb2RlKQorICAgICAgICByZXR1cm4g
c3JjSXNPcGFxdWU7IC8vIGRlZmF1bHQgdG8ga1NyY092ZXJfTW9kZQorICAgIFNrWGZlcm1vZGU6
Ok1vZGUgbW9kZTsKKyAgICBpZiAoIXhmZXJtb2RlLT5hc01vZGUoJm1vZGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTa1hmZXJtb2RlOjpr
U3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTog
Ly8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0
T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZl
cm1vZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1Bs
dXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAgICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxs
IHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgICAgICByZXR1cm4gc3JjSXNPcGFxdWU7
CisgICAgY2FzZSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZTogLy8gMAorICAgIGNhc2UgU2tYZmVy
bW9kZTo6a0RzdF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjSW5fTW9k
ZTogLy8gc291cmNlICogZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdEluX01vZGU6IC8v
IGRlc3QgKiBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdXRfTW9kZTogLy8gc291
cmNlICogKDEtZGVzdCkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVz
dCAqICgxLXNvdXJjZSkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNBVG9wX01vZGU6IC8vIGRl
c3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtYb3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIDIq
KHNvdXJjZSpkZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgeGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUoU2tYZmVybW9kZSogeGZlcm1vZGUs
IGJvb2wgc3JjSXNPcGFxdWUpCit7CisgICAgaWYgKCF4ZmVybW9kZSkKKyAgICAgICAgcmV0dXJu
IHRydWU7IC8vIGRlZmF1bHQgdG8ga1NyY092ZXJfTW9kZQorICAgIFNrWGZlcm1vZGU6Ok1vZGUg
bW9kZTsKKyAgICBpZiAoIXhmZXJtb2RlLT5hc01vZGUoJm1vZGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0X01v
ZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGU6IC8vIHNvdXJj
ZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE92ZXJfTW9k
ZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjpr
U3JjQVRvcF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprUGx1c19Nb2RlOiAv
LyBzb3VyY2UrZGVzdAorICAgIGRlZmF1bHQ6IC8vIHRoZSByZXN0IGFyZSBhbGwgc291cmNlICsg
ZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU2tYZmVy
bW9kZTo6a0NsZWFyX01vZGU6IC8vIDAKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdXRfTW9k
ZTogLy8gc291cmNlICogKDEtZGVzdCkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdXRfTW9k
ZTogLy8gZGVzdCAqICgxLXNvdXJjZSkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtYb3JfTW9kZTog
Ly8gc291cmNlICsgZGVzdCAtIDIqKHNvdXJjZSpkZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tY
ZmVybW9kZTo6a1NyY0luX01vZGU6IC8vIHNvdXJjZSAqIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1v
ZGU6OmtEc3RJbl9Nb2RlOiAvLyBkZXN0ICogc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjpr
RHN0QVRvcF9Nb2RlOiAvLyBzb3VyY2UKKyAgICAgICAgcmV0dXJuIHNyY0lzT3BhcXVlOworICAg
IH0KK30KKwordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFja0RyYXdSZWN0KGNvbnN0IFNr
UmVjdCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXAp
Cit7CisgICAgaWYgKCFtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBib29sIG9wYXF1ZSA9IGZhbHNlOworICAgIFNrUmVjdCBmaWxsQm91bmRzOworICAgIGlmIChw
YWludC5nZXRTdHlsZSgpID09IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYmIHBhaW50LmNhbkNvbXB1
dGVGYXN0Qm91bmRzKCkpIHsKKyAgICAgICAgZmlsbEJvdW5kcyA9IHBhaW50LmNvbXB1dGVGYXN0
Qm91bmRzKHJlY3QsICZmaWxsQm91bmRzKTsKKworICAgICAgICBTa1NoYWRlciogc2hhZGVyID0g
cGFpbnQuZ2V0U2hhZGVyKCk7CisgICAgICAgIGlmIChzaGFkZXIpCisgICAgICAgICAgICBvcGFx
dWUgPSBzaGFkZXItPmdldEZsYWdzKCkgJiBTa1NoYWRlcjo6a09wYXF1ZUFscGhhX0ZsYWc7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYXF1ZSA9IHBhaW50LmdldEFscGhhKCkgPT0gMHhm
ZiAmJiAoIWJpdG1hcCB8fCBiaXRtYXAtPmlzT3BhcXVlKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBmaWxsQm91bmRzID0gcmVjdDsKKworICAgIGlmICh4ZmVybW9kZUlzT3BhcXVlKHBhaW50Lmdl
dFhmZXJtb2RlKCksIG9wYXF1ZSkpIHsKKyAgICAgICAgbWFya1JlY3RBc09wYXF1ZShmaWxsQm91
bmRzKTsKKyAgICB9IGVsc2UgaWYgKFNrUmVjdDo6SW50ZXJzZWN0cyhmaWxsQm91bmRzLCBtX29w
YXF1ZVJlY3QpICYmICF4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludC5nZXRYZmVybW9kZSgp
LCBvcGFxdWUpKQorICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKGZpbGxCb3VuZHMpOworfQor
Cit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJhd1BhdGgoY29uc3QgU2tQYXRoJiBw
YXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAoIW1fdHJhY2tPcGFxdWVSZWdp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIFNrUmVjdCBmaWxsQm91bmRzOworICAgIGlmIChw
YXRoLmlzUmVjdCgmZmlsbEJvdW5kcykpIHsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChmaWxsQm91
bmRzLCBwYWludCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocGFpbnQuY2Fu
Q29tcHV0ZUZhc3RCb3VuZHMoKSkKKyAgICAgICAgZmlsbEJvdW5kcyA9IHBhaW50LmNvbXB1dGVG
YXN0Qm91bmRzKHBhdGguZ2V0Qm91bmRzKCksICZmaWxsQm91bmRzKTsKKyAgICBlbHNlCisgICAg
ICAgIGZpbGxCb3VuZHMgPSBwYXRoLmdldEJvdW5kcygpOworICAgIHRyYWNrRHJhd0JvdW5kZWQo
ZmlsbEJvdW5kcywgcGFpbnQpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNr
RHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlIG1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0
IFNrUG9pbnQgcG9pbnRzW10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIGlmICghbV90
cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tQYXRoIHBhdGg7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZToK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb2ludHMgLSAxOyBpICs9IDIpIHsKKyAg
ICAgICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1tpXSk7CisgICAgICAgICAgICBwYXRoLmxpbmVU
byhwb2ludHNbaSsxXSk7CisgICAgICAgICAgICB0cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsK
KyAgICAgICAgICAgIHBhdGgucmV3aW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTa0NhbnZhczo6a1BvaW50c19Qb2ludE1vZGU6CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUG9pbnRzOyArK2kpIHsKKyAgICAgICAgICAgIFNrUGF0aCBwYXRoOworICAg
ICAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzW2ldKTsKKyAgICAgICAgICAgIHRyYWNrRHJhd1Bh
dGgocGF0aCwgcGFpbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2tD
YW52YXM6OmtQb2x5Z29uX1BvaW50TW9kZToKKyAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBd
KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAg
ICAgIHBhdGgubGluZVRvKHBvaW50c1tpXSk7CisgICAgICAgIHRyYWNrRHJhd1BhdGgocGF0aCwg
cGFpbnQpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6dHJhY2tEcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQm
IHBhaW50KQoreworICAgIGlmIChTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgbV9vcGFxdWVSZWN0
KSAmJiAheGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQuZ2V0WGZlcm1vZGUoKSwgZmFsc2Up
KQorICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHJlY3QpOworfQorCiB2b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogewogICAgIFNrUGFpbnQgcGFpbnQ7
CkBAIC0yODcsNiArNDkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChT
a1JlY3QgcmVjdCkKICAgICBpZiAoZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQpIHsKICAgICAgICAg
c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0
KHJlY3QsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChyZWN0LCBwYWludCk7CiAgICAg
fQogCiAgICAgaWYgKG1fc3RhdGUtPm1fc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UKQEAgLTI5OSwx
MiArNTA2LDE2IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJl
Y3QpCiAKICAgICAgICAgU2tSZWN0IHRvcEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9w
LCByZWN0LmZSaWdodCwgcmVjdC5mVG9wICsgMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1Jl
Y3QodG9wQm9yZGVyLCBwYWludCk7CisgICAgICAgIHRyYWNrRHJhd1JlY3QodG9wQm9yZGVyLCBw
YWludCk7CiAgICAgICAgIFNrUmVjdCBib3R0b21Cb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJlY3Qu
ZkJvdHRvbSAtIDEsIHJlY3QuZlJpZ2h0LCByZWN0LmZCb3R0b20gfTsKICAgICAgICAgY2FudmFz
KCktPmRyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOworICAgICAgICB0cmFja0RyYXdSZWN0
KGJvdHRvbUJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3QgbGVmdEJvcmRlciA9IHsgcmVj
dC5mTGVmdCwgcmVjdC5mVG9wICsgMSwgcmVjdC5mTGVmdCArIDEsIHJlY3QuZkJvdHRvbSAtIDEg
fTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KGxlZnRCb3JkZXIsIHBhaW50KTsKKyAgICAg
ICAgdHJhY2tEcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCByaWdo
dEJvcmRlciA9IHsgcmVjdC5mUmlnaHQgLSAxLCByZWN0LmZUb3AgKyAxLCByZWN0LmZSaWdodCwg
cmVjdC5mQm90dG9tIC0gMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmlnaHRCb3Jk
ZXIsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChyaWdodEJvcmRlciwgcGFpbnQpOwog
ICAgIH0KIH0KIApAQCAtNTM5LDYgKzc1MCw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
cGFpbnRTa1BhaW50KGNvbnN0IFNrUmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50KQogewogICAgIG1fY2FudmFzLT5k
cmF3UmVjdChyZWN0LCBwYWludCk7CisgICAgdHJhY2tEcmF3UmVjdChyZWN0LCBwYWludCk7CiB9
CiAKIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXRtYXAoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaAppbmRleCA3ZGNmYmUyZTM3ZmMxYzQyN2RkZTdmYjNmNjAzMTFi
ZTI3NDk4MjEzLi5mNzljZGMxNTM0YTc3MzEwOWNiN2VlNmU5MmU3MTgyZjI2ODZjM2U1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaApAQCAtMTUzLDYgKzE1MywyMCBAQCBwdWJsaWM6CiAgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdDsKICAgICB2b2lk
IHNldEludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRp
b25RdWFsaXR5KTsKIAorICAgIC8vIEFmdGVyIHBhaW50aW5nLCB0aGlzIHdpbGwgZ2l2ZSBhbiBl
c3RpbWF0ZSB0byB0aGUgcmVnaW9uIHRoYXQgd2FzIHBhaW50ZWQgb3BhcXVlLiBJdCB3aWxsIHVu
ZGVyZXN0aW1hdGUgdG8gbWFpbnRhaW4KKyAgICAvLyBjb25zdGFudCBjb21wbGV4aXR5IG9mIHRo
ZSByZXN1bHQuIFRoaXMgd2lsbCBvbmx5IGdpdmUgc29tZXRoaW5nIHVzZWZ1bCBpZiBzZXRUcmFj
a09wYXF1ZVJlZ2lvbih0cnVlKSB3YXMgY2FsbGVkLgorICAgIGNvbnN0IFNrUmVjdCYgcmVnaW9u
UGFpbnRlZE9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQorCisgICAgLy8g
RW5hYmxlIHRyYWNraW5nIG9mIG9wYXF1ZSBwYWludGluZy4KKyAgICB2b2lkIHNldFRyYWNrT3Bh
cXVlUmVnaW9uKGJvb2wgdHJhY2spIHsgbV90cmFja09wYXF1ZVJlZ2lvbiA9IHRyYWNrOyB9CisK
KyAgICAvLyBBZnRlciBkcmF3aW5nIGluIHRoZSBjb250ZXh0J3MgY2FudmFzLCB1c2UgdGhlc2Ug
ZnVuY3Rpb25zIHRvIG5vdGlmeSB0aGUgY29udGV4dCBzbyBpdCBjYW4gdHJhY2sgdGhlIG9wYXF1
ZSByZWdpb24uCisgICAgdm9pZCB0cmFja0RyYXdSZWN0KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNr
UGFpbnQmLCBjb25zdCBTa0JpdG1hcCogPSAwKTsKKyAgICB2b2lkIHRyYWNrRHJhd1BhdGgoY29u
c3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgdHJhY2tEcmF3UG9pbnRzKFNr
Q2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRbXSwgY29uc3Qg
U2tQYWludCYpOworICAgIC8vIEZvciBkcmF3aW5nIG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgZmls
bCB0aGUgZW50aXJlIHJlY3QuCisgICAgdm9pZCB0cmFja0RyYXdCb3VuZGVkKGNvbnN0IFNrUmVj
dCYsIGNvbnN0IFNrUGFpbnQmKTsKKwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwdXNo
ZWQgZG93biB0byBHcmFwaGljc0NvbnRleHQuCiAgICAgdm9pZCBkcmF3UmVjdChTa1JlY3QgcmVj
dCk7CiAKQEAgLTE5Niw2ICsyMTAsOSBAQCBwcml2YXRlOgogICAgIC8vIGNvbW1vbiBjb2RlIGJl
dHdlZW4gc2V0dXBQYWludEZvcltGaWxsaW5nLFN0cm9raW5nXQogICAgIHZvaWQgc2V0dXBTaGFk
ZXIoU2tQYWludCosIEdyYWRpZW50KiwgUGF0dGVybiosIFNrQ29sb3IpIGNvbnN0OwogCisgICAg
dm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZvaWQgbWFya1JlY3RB
c05vbk9wYXF1ZShjb25zdCBTa1JlY3QmKTsKKwogICAgIC8vIERlZmluZXMgZHJhd2luZyBzdHls
ZS4KICAgICBzdHJ1Y3QgU3RhdGU7CiAKQEAgLTIxMCw2ICsyMjcsOSBAQCBwcml2YXRlOgogICAg
IC8vIG1TdGF0ZVN0YWNrLmJhY2soKS4KICAgICBTdGF0ZSogbV9zdGF0ZTsKIAorICAgIGJvb2wg
bV90cmFja09wYXF1ZVJlZ2lvbjsKKyAgICBTa1JlY3QgbV9vcGFxdWVSZWN0OworCiAgICAgLy8g
U3RvcmVzIGltYWdlIHNpemVzIGZvciBhIGhpbnQgdG8gY29tcHV0ZSBpbWFnZSByZXNhbXBsaW5n
IG1vZGVzLgogICAgIC8vIFZhbHVlcyBhcmUgdXNlZCBpbiBJbWFnZVNraWEuY3BwCiAgICAgSW50
U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5OTkzZDVkNjJmZTVjZi4uNTRj
YTI1NzA2YzE2NTI3MTMxZThlZjg0NWZkYWNmMmQzYjhiMGM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC0xMTMsNiArMTEzLDcgQEAKICAgICAgICAgICAgICAgICAnd2Via2l0
X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdl
VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVt
VGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAndGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0sCiAgICAgICAg
ICAgICBbJ09TPT0id2luIicsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0MTA4OThi
YzA1YjBiZmJmOTE1ZjUwNzNiNzhlYTUxZTQzMGVjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCkBAIC0w
LDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5h
dGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKKyNk
ZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLmZMZWZ0LCBiLmZM
ZWZ0KTsgXAorICAgIEVYUEVDVF9FUShhLmZSaWdodCwgYi5mUmlnaHQpOyBcCisgICAgRVhQRUNU
X0VRKGEuZlRvcCwgYi5mVG9wKTsgXAorICAgIEVYUEVDVF9FUShhLmZCb3R0b20sIGIuZkJvdHRv
bSk7IFwKKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVUZXN0KQor
eworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgMTAwMCwgMTAwMCk7CisgICAgdm9pZCogcGl4ZWxzID0gbWFsbG9j
KDEwMDAqMTAwMCo0KTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAgU2tDYW52
YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29u
dGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24o
dHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisK
KyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxw
aGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigxMCwg
MTAsIDEwKzkwLCAxMCs5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkp
OworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVBsdXNMaWdodGVyKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZv
cm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
Q29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIo
MTAsIDEwLCAxMCs5MCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1
ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwg
YWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArODksIDEwKzkwKSwgcGxhdGZv
cm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdCg4LCA4LCAzLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlU291cmNlT3V0KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEx
LCAxMCwgMTErODgsIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUo
KSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgzMCwgMzAsIDI5MCwgMjkwKSwg
b3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAzMCsyOTApLCBw
bGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KDQwLCAyMCwgMjkwLCA1MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpN
YWtlTFRSQigzMCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBh
aW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAs
IDM5MCwgNTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUlu
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAz
MCsyOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIGFscGhhLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAz
MCwgMzArMjkwLCAzMCsyOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgp
KTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIG9w
YXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwgMTAsIDMwKzI5MCwgMTArMzEwKSwgcGxh
dGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBmcmVlKHBpeGVscyk7
Cit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlTGluZVRlc3Qp
Cit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAwLCAxMDAwKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtYWxs
b2MoMTAwMCoxMDAwKjQpOworICAgIGJpdG1hcC5zZXRQaXhlbHMocGl4ZWxzKTsKKyAgICBTa0Nh
bnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1D
b250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lv
bih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsK
KworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBh
bHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEw
LCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisK
KyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisgICAgY29udGV4dC5zZXRN
aXRlckxpbWl0KDEpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDUpOworICAgIGNv
bnRleHQuc2V0TGluZUNhcChTcXVhcmVDYXApOworICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUo
U29saWRTdHJva2UpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZVNvdXJjZUluKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUo
SW50UG9pbnQoMCwgMCksIEludFBvaW50KDEwMCwgMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBw
bGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuc2F2
ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9pbnQoMTAw
LCAxMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVj
dDo6TWFrZVhZV0goMTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRl
ZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUo
SW50UG9pbnQoMCwgMTEpLCBJbnRQb2ludCgxMDAsIDExKSk7CisgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTQsIDkwLCA4Niks
IHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgZnJlZShwaXhl
bHMpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZVBhdGhU
ZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0
bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMTAwMCwgMTAwMCk7CisgICAgdm9pZCogcGl4ZWxzID0g
bWFsbG9jKDEwMDAqMTAwMCo0KTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAg
U2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRm
b3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVS
ZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4
dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29s
b3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
Q29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlX
SCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkp
OworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAgIGNvbnRleHQu
c2V0TWl0ZXJMaW1pdCgxKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyg1KTsKKyAg
ICBjb250ZXh0LnNldExpbmVDYXAoU3F1YXJlQ2FwKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVN0
eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VJbik7CisKKyAgICBQYXRoIHBhdGg7CisKKyAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQ
b2ludCgwLCAwKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDApKTsKKyAg
ICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFr
ZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1
ZSgpKTsKKyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwg
MTApKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KDEwMCwgMTMpKTsKKyAgICBjb250
ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0go
MTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsK
KyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAxNCkpOwor
ICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQuZmls
bFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTQs
IDkwLCA4NiksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIHBh
dGguY2xlYXIoKTsKKworICAgIGZyZWUocGl4ZWxzKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRl
eHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVJbWFnZVRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFw
OworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAw
LCAxMDAwKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtYWxsb2MoMTAwMCoxMDAwKjQpOworICAgIGJp
dG1hcC5zZXRQaXhlbHMocGl4ZWxzKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKwor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBm
LCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAw
LjBmKTsKKworICAgIFNrQml0bWFwIGRyYXdCaXRtYXA7CisgICAgZHJhd0JpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMCwgMTApOworICAgIGRyYXdCaXRtYXAu
YWxsb2NQaXhlbHMoKTsKKworICAgIGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUodHJ1ZSk7CisgICAg
UmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBvcGFxdWVJbWFnZSA9IEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9wYXF1ZUltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAgIGRyYXdC
aXRtYXAuc2V0SXNPcGFxdWUoZmFsc2UpOworICAgIFJlZlB0cjxCaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYT4gYWxwaGFJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUo
ZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNUX1RSVUUoYWxwaGFJbWFnZS0+Y3VycmVudEZy
YW1lSGFzQWxwaGEoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAs
IDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCks
IHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5k
cmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50
KDAsIDApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAs
IDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgY29udGV4
dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9p
bnQoMCwgMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5
MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNv
bnRleHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJ
bnRQb2ludCg1LCA1KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwg
MTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAg
IGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFBvaW50KDUsIDUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEw
LCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisK
KyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgSW50UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtl
WFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVl
KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIEludFBvaW50KDEwLCAxMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6
TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9w
YXF1ZSgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDIwLCAxMCksIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAyMCwgOTAsIDgwKSwgcGxhdGZv
cm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICBjb250ZXh0LnNldEFscGhhKDAuNSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2Uob3BhcXVl
SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDI1LCAxNSksIENvbXBv
c2l0ZVNvdXJjZUluKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAyNSwgOTAsIDc1KSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lv
blBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwg
MTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNl
T3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5
MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4
dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9p
bnQoMTAsIDIwKSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVj
dDo6TWFrZVhZV0goMjAsIDEwLCA4MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRl
ZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0QWxwaGEo
MC41KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UG9pbnQoMTUsIDI1KSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIGNv
bnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMjUs
IDEwLCA3NSwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKwor
ICAgIGZyZWUocGl4ZWxzKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJh
Y2tPcGFxdWVPdmFsVGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNl
dENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDEwMDAsIDEwMDApOworICAgIHZv
aWQqIHBpeGVscyA9IG1hbGxvYygxMDAwKjEwMDAqNCk7CisgICAgYml0bWFwLnNldFBpeGVscyhw
aXhlbHMpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250
ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNl
dFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZw
bGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEu
MGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgwLCAwLCAwLCAwKSwgcGxhdGZvcm1Db250ZXh0
LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJl
Y3QoMTAsIDEwLCA5MCwgOTApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdI
KDAsIDAsIDAsIDApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJl
Z2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlU291cmNlSW4pOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwg
MTAsIDUwLCAzMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDQw
LCA5MCwgNjApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAg
IGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwgMTAsIDMwLCA1MCkpOworICAgIEVYUEVD
VF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goNDAsIDQwLCA2MCwgNjApLCBwbGF0Zm9ybUNvbnRl
eHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGZyZWUocGl4ZWxzKTsKK30KKworfSAv
LyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121510</attachid>
            <date>2012-01-06 15:30:10 -0800</date>
            <delta_ts>2012-01-09 16:12:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120106183008.patch</filename>
            <type>text/plain</type>
            <size>47110</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uYWVlOGM2OWM5MjY3MWE1MDlhZDgzYmU0Njk2MjQy
MmNmNTYxZTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTA2ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHM6IFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6
b3BhcXVlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0
dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4
dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RB
c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjptYXJrUmVj
dEFzTm9uT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OnhmZXJtb2RlSXNPcGFxdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6eGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRJc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
Ojp0cmFja0RyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dHJh
Y2tEcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6
OnRyYWNrRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
dHJhY2tEcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp0
cmFja0RyYXdQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
dHJhY2tEcmF3Qm91bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwYWlu
dFNrUGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVnaW9u
UGFpbnRlZE9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpz
ZXRUcmFja09wYXF1ZVJlZ2lvbik6CisKIDIwMTItMDEtMDQgIEFkYW0gUm9iZW4gIDxhcm9iZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBvbmUgYmlnIHByaW50ZiBjb21tYW5kIGluc3RlYWQg
b2YgbWFueSBjaGFpbmVkIGVjaG8gY29tbWFuZHMgdG8gZ2VuZXJhdGUgaWRsX2ZpbGVzLnRtcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2ZWQzMDk3MTA4OTQ0NWIxZGUyOThiZWU1MDc5
Zjg4MjQ4ZWI2MzU3Li4wMjBjMzZmN2NhYTQxNDAyYzAwNTMzZjA5NzkxODE5NmUxODVlMmI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTA2ICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFj
ayBhIHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRT
a2lhIGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0
cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
VEVTVCk6CisKIDIwMTItMDEtMDQgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmUtdXNlIFRlc3RTaGVsbExpbnV4LmNwcCBmb3IgQW5k
cm9pZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDM0ZGI3MmFhNDUyY2VjMjZh
Mzc2MjJkNjM3ZmQ4ZDFhZjQ0YjRkYjMuLmE4NTg3OTNkMWU4YzYyYmE5ZjlhOWMyZWI4NGM3NmZh
ZDhhZjNhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTcyLDYgKzcyLDEx
IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUgZm9ybWF0IGlzIFRleGVsRm9ybWF0QkdSQSwgdmVj
NC54IGlzIGJsdWUgYW5kIHZlYzQueiBpcyByZWQuCiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxG
b3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIC8qIGNvbnRlbnRS
ZWN0ICovLCBjb25zdCBJbnRTaXplJiAvKiB0aWxlU2l6ZSAqLywgaW50IC8qIGJvcmRlclRleGVs
cyAqLywgZmxvYXQgLyogY29udGVudHNTY2FsZSAqLykgeyB9CisKKyAgICBjb25zdCBJbnRSZWN0
JiBvcGFxdWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSZWN0OyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBJbnRSZWN0IG1fb3BhcXVlUmVjdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAKaW5kZXggNTM3ZTEzN2U4ZDhlYzUxOGI5MzRhYTVjZDJkNzAwYzc0YjE5ZmU0Yi4u
NmY2YmVjNDM0ZmU3ZDZmZjQ0ZDAwYTM1YjYzNjY1YTRmYzM3NWJkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTUz
LDkgKzUzLDE4IEBAIHZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSCiAgICAgU2tDYW52YXMqIGNhbnZh
cyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50
UmVjdC5oZWlnaHQoKSk7CiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQo
Y2FudmFzKTsKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RGVmZXJyZWQodHJ1ZSk7CisgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOwogICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CiAgICAgcGFpbnRDb250ZW50
cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlKTsKICAgICBtX3Bp
Y3R1cmUuZW5kUmVjb3JkaW5nKCk7CisKKyAgICAvLyBTYXZlIHRoZSBsYXJnZXN0IEludFJlY3Qg
ZW5jbG9zZWQgYnkgdGhlIFNrUmVjdC4KKyAgICBjb25zdCBTa1JlY3QmIHJlY3QgPSBwbGF0Zm9y
bUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpOworICAgIGludCBsZWZ0ID0gU2tTY2FsYXJD
ZWlsKHJlY3QuZkxlZnQpOworICAgIGludCB0b3AgPSBTa1NjYWxhckNlaWwocmVjdC5mVG9wKTsK
KyAgICBpbnQgcmlnaHQgPSBTa1NjYWxhckZsb29yKHJlY3QuZlJpZ2h0KTsKKyAgICBpbnQgYm90
dG9tID0gU2tTY2FsYXJGbG9vcihyZWN0LmZCb3R0b20pOworICAgIG1fb3BhcXVlUmVjdCA9IElu
dFJlY3QobGVmdCwgdG9wLCByaWdodC1sZWZ0LCBib3R0b20tdG9wKTsKIH0KIAogdm9pZCBTa1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpkcmF3UGljdHVyZShTa0NhbnZhcyogY2Fu
dmFzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKaW5kZXggOTEzNWZmNGUwY2Y3MjE0MWEwMWI3
MTM4OTRhNTlkZTVhYWMyNDRhMi4uMWE2YWZiNDE3YjViYTBmNzRkZmVmZDBlYzU4NzI5YThiOTU3
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0zMzksNiArMzM5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFp
bnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTQ2MywxMSArNDY0LDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLAog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAg
IHBhaW50LnNldEFudGlBbGlhcyhzaG91bGRBbnRpYWxpYXMpOwogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VTdHlsZSgp
ICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKICAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKICAgICB9
CiB9CiAKQEAgLTUwMywxMSArNTA2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZShjb25zdCBJbnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CisgICAgcGxh
dGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd0JvdW5kZWQocmVjdCwgcGFpbnQpOwogCiAgICAgaWYg
KHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsKICAgICAgICAgcGFpbnQucmVzZXQoKTsKICAg
ICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsICZy
ZWN0LCAwKTsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChy
ZWN0LCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdCb3VuZGVk
KHJlY3QsIHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTU3NCw2ICs1NzksOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQgd2lkdGgsIGludAogICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCk7CiAgICAgZHJhd091dGVyUGF0aChjYW52YXMsIHBhdGgsIHBhaW50LCB3aWR0aCk7
CiAgICAgZHJhd0lubmVyUGF0aChjYW52YXMsIHBhdGgsIHBhaW50LCB3aWR0aCk7CisKKyAgICBw
YWludC5zZXRTdHJva2VXaWR0aCgxKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3
UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9y
ZGVycy4KQEAgLTYyMSwxMiArNjI5LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAg
ICBmaWxsUGFpbnQuc2V0Q29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7CiAgICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CiAgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7CisgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIxLCBmaWxsUGFpbnQpOworICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UmVjdChyMiwgZmlsbFBhaW50KTsKICAg
ICB9CiAKICAgICBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCB3aWR0aCwgcGVu
U3R5bGUpOwogICAgIFNrUG9pbnQgcHRzWzJdID0geyAoU2tQb2ludClwMSwgKFNrUG9pbnQpcDIg
fTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BvaW50cyhTa0NhbnZh
czo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPnRyYWNrRHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBw
YWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKQEAgLTcwMiw2ICs3MTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLAogICAg
ICAgICAgICAgIG9yaWdpblggKyBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHdpZHRoKSwKICAgICAg
ICAgICAgICBvcmlnaW5ZICsgU2tJbnRUb1NjYWxhcihtaXNzcGVsbEJpdG1hcC0+aGVpZ2h0KCkp
KTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UmVjdChyZWN0LCBwYWludCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcHQsCkBAIC03MjYsNiArNzM4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwKICAgICAvLyBUZXh0IGxpbmVzIGFyZSBkcmF3
biB1c2luZyB0aGUgc3Ryb2tlIGNvbG9yLgogICAgIHBhaW50LnNldENvbG9yKHBsYXRmb3JtQ29u
dGV4dCgpLT5lZmZlY3RpdmVTdHJva2VDb2xvcigpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJh
Y2tEcmF3UmVjdChyLCBwYWludCk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3
aXRoIGEgc3Ryb2tlZCBib3JkZXIuCkBAIC03NjAsNiArNzczLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb0ZpbGwpCiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC03NzgsNiArNzkyLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmls
bGluZygmcGFpbnQpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qo
ciwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIsIHBhaW50
KTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZXN0b3JlKCk7CiB9CkBAIC04MDYsNiArODIx
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclMKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
dXBQYWludENvbW1vbigmcGFpbnQpOwogICAgIHBhaW50LnNldENvbG9yKGNvbG9yLnJnYigpKTsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwKQEAg
LTg0NSw2ICs4NjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JG
aWxsaW5nKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3IoY29sb3IucmdiKCkpOwogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBs
YXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKQEAgLTExMjksNiArMTE0
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgciwg
aW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShn
ZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
dHJhY2tEcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb1N0cm9rZSkKQEAgLTExNDMsNiArMTE2MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb1N0cm9r
ZSkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tE
cmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQpAQCAtMTE2Myw5ICsx
MTgyLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIGJvb2wgdmFsaWRXID0gci53aWR0aCgpID4g
MDsKICAgICBib29sIHZhbGlkSCA9IHIuaGVpZ2h0KCkgPiAwOwogICAgIFNrQ2FudmFzKiBjYW52
YXMgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgaWYgKHZhbGlkVyAmJiB2YWxp
ZEgpCisgICAgaWYgKHZhbGlkVyAmJiB2YWxpZEgpIHsKICAgICAgICAgY2FudmFzLT5kcmF3UmVj
dChyLCBwYWludCk7Ci0gICAgZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgeworICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CisgICAgfSBlbHNlIGlm
ICh2YWxpZFcgfHwgdmFsaWRIKSB7CiAgICAgICAgIC8vIHdlIGFyZSBleHBlY3RlZCB0byByZXNw
ZWN0IHRoZSBsaW5lSm9pbiwgc28gd2UgY2FuJ3QganVzdCBjYWxsCiAgICAgICAgIC8vIGRyYXdM
aW5lIC0tIHdlIGhhdmUgdG8gY3JlYXRlIGEgcGF0aCB0aGF0IGRvdWJsZXMgYmFjayBvbiBpdHNl
bGYuCiAgICAgICAgIFNrUGF0aCBwYXRoOwpAQCAtMTE3Myw2ICsxMTkzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCiAgICAgICAgIHBhdGgubGluZVRvKHIuZlJpZ2h0LCByLmZCb3R0b20pOwogICAgICAg
ICBwYXRoLmNsb3NlKCk7CiAgICAgICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwor
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBwYWludCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAKaW5kZXggZTY2ZGJhYjQzNTBkNDVkMzQzZWYxZDNmZjU2MjFhODhhMzk3
OWVjNi4uNDFkZTYxNWRhZjFiNmNkOTc3ZTY5MDE3Y2ZjODk2ZjQ4MTMxZjM2YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApA
QCAtMjQ4LDYgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250
ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgICAgIC8vIHdl
IGRvbid0IHNlbmQgZXh0cmEgcGl4ZWxzLgogICAgICAgICBjYW52YXMtPmRyYXdCaXRtYXBSZWN0
KGJpdG1hcC5iaXRtYXAoKSwgJnNyY1JlY3QsIGRlc3RSZWN0LCAmcGFpbnQpOwogICAgIH0KKyAg
ICBwbGF0Zm9ybUNvbnRleHQtPnRyYWNrRHJhd1JlY3QoZGVzdFJlY3QsIHBhaW50LCAmYml0bWFw
LmJpdG1hcCgpKTsKIH0KIAogLy8gVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRo
IHRoZSBnaXZlbiBtYXRyaXguIFVzZWQgdG8gc2VlIGhvdyBiaWcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuY3BwCmluZGV4IGE1ZTE4NjgwZDIwYmJiZjY5ODI4NjY4ZTBlYjljZDZmMWU5ODMwYjUuLjky
ODYxYjg4YTgzYzhjYWU5YWQxZjJiMTNlYTI0NDQzMDE4ZGNhYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcApAQCAtMTc5LDYgKzE3OSw4IEBAIFNrQ29sb3IgUGxhdGZvcm1Db250ZXh0U2tp
YTo6U3RhdGU6OmFwcGx5QWxwaGEoU2tDb2xvciBjKSBjb25zdAogLy8gRGFuZ2VyOiBjYW52YXMg
Y2FuIGJlIE5VTEwuCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKFNr
Q2FudmFzKiBjYW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX3RyYWNrT3Bh
cXVlUmVnaW9uKGZhbHNlKQorICAgICwgbV9vcGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkp
CiAgICAgLCBtX3ByaW50aW5nKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZChmYWxzZSkKICAgICAs
IG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCkBAIC0yODAsNiArMjgyLDI1NSBAQCB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmUoKQogICAgIGNhbnZhcygpLT5yZXN0b3JlKCk7
CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFya1JlY3RBc09wYXF1ZShjb25zdCBT
a1JlY3QmIHJlY3QpCit7CisgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIGFuIG9wYXF1
ZSByZWdpb24gYnV0IGJvdW5kIGl0cyBjb21wbGV4aXR5IGF0IGEgY29uc3RhbnQgc2l6ZS4KKyAg
ICAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSBzZWVuIGJ5IGFyZWEu
IElmIHdlIGNhbiBhZGQgdGhlIG5ldyByZWN0IHRvIHRoaXMKKyAgICAvLyByZWN0YW5nbGUgdGhl
biB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVhc2UgdGhl
IGFyZWEgcmV0dXJuZWQKKyAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhpdHku
CisKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1f
c3RhdGUtPm1faW1hZ2VCdWZmZXJDbGlwLmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9vcGFxdWVSZWN0LmNvbnRhaW5zKHJlY3QpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgeworICAgICAgICBtX29wYXF1ZVJlY3Qg
PSByZWN0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHJlY3QuZlRvcCA8PSBt
X29wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gbV9vcGFxdWVSZWN0LmZCb3R0b20p
IHsKKyAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5m
UmlnaHQgPiBtX29wYXF1ZVJlY3QuZkxlZnQpCisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkxl
ZnQgPSByZWN0LmZMZWZ0OworICAgICAgICBpZiAocmVjdC5mUmlnaHQgPiBtX29wYXF1ZVJlY3Qu
ZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZlJpZ2h0KQorICAgICAgICAgICAg
bV9vcGFxdWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OworICAgIH0gZWxzZSBpZiAocmVjdC5m
TGVmdCA8PSBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0
LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9wIDwgbV9vcGFxdWVSZWN0LmZUb3AgJiYg
cmVjdC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZUb3ApCisgICAgICAgICAgICBtX29wYXF1ZVJl
Y3QuZlRvcCA9IHJlY3QuZlRvcDsKKyAgICAgICAgaWYgKHJlY3QuZkJvdHRvbSA+IG1fb3BhcXVl
UmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mQm90dG9tKQorICAgICAg
ICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZCb3R0b207CisgICAgfQorCisgICAg
bG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpbV9vcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZyltX29w
YXF1ZVJlY3QuaGVpZ2h0KCk7CisgICAgbG9uZyBhcmVhID0gKGxvbmcpcmVjdC53aWR0aCgpICog
KGxvbmcpcmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYSA+IG9wYXF1ZUFyZWEpCisgICAgICAg
IG1fb3BhcXVlUmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFy
a1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCit7CisgICAgLy8gV2Ugd2FudCB0
byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVlIHJlY3RhbmdsZSBhcyB3ZSBjYW4s
IHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0CisgICAgLy8gcmVjdGFuZ2xlIGluc2lkZSBtX29wYXF1
ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8cmVjdHwuCisKKyAgICBpZiAocmVj
dC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7CisgICAgICAgIG1fb3BhcXVlUmVjdC5zZXRFbXB0
eSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGRlbHRhTGVmdCA9IHJlY3Qu
ZkxlZnQgLSBtX29wYXF1ZVJlY3QuZkxlZnQ7CisgICAgaW50IGRlbHRhUmlnaHQgPSBtX29wYXF1
ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRlbHRhVG9wID0gcmVjdC5mVG9w
IC0gbV9vcGFxdWVSZWN0LmZUb3A7CisgICAgaW50IGRlbHRhQm90dG9tID0gbV9vcGFxdWVSZWN0
LmZCb3R0b20gLSByZWN0LmZCb3R0b207CisKKyAgICAvLyBob3Jpem9udGFsIGlzIHRoZSBsYXJn
ZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB8
cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCisgICAgLy8gdmVydGljYWwgaXMgdGhlIGxh
cmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgYWJvdmUgb3IgYmVsb3cgfHJlY3R8IGFuZCBpbnNp
ZGUgbV9vcGFxdWVSZWN0LgorICAgIFNrUmVjdCBob3Jpem9udGFsID0gbV9vcGFxdWVSZWN0Owor
ICAgIGlmIChkZWx0YVRvcCA+IGRlbHRhQm90dG9tKQorICAgICAgICBob3Jpem9udGFsLmZCb3R0
b20gPSByZWN0LmZUb3A7CisgICAgZWxzZQorICAgICAgICBob3Jpem9udGFsLmZUb3AgPSByZWN0
LmZCb3R0b207CisgICAgU2tSZWN0IHZlcnRpY2FsID0gbV9vcGFxdWVSZWN0OworICAgIGlmIChk
ZWx0YUxlZnQgPiBkZWx0YVJpZ2h0KQorICAgICAgICB2ZXJ0aWNhbC5mUmlnaHQgPSByZWN0LmZM
ZWZ0OworICAgIGVsc2UKKyAgICAgICAgdmVydGljYWwuZkxlZnQgPSByZWN0LmZSaWdodDsKKwor
ICAgIGlmICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylob3Jpem9udGFsLmhlaWdo
dCgpID4gKGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRpY2FsLmhlaWdodCgpKQor
ICAgICAgICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgIGVsc2UKKyAgICAgICAgbV9v
cGFxdWVSZWN0ID0gdmVydGljYWw7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgeGZlcm1v
ZGUgd2lsbCBmb3JjZSB0aGUgZHN0IHRvIGJlIG9wYXF1ZSwgcmVnYXJkbGVzcyBvZiB0aGUgY3Vy
cmVudCBkc3QuCitzdGF0aWMgaW5saW5lIGJvb2wgeGZlcm1vZGVJc09wYXF1ZShjb25zdCBTa1Bh
aW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1ZSkKK3sKKyAgICBpZiAoIXNyY0lzT3BhcXVlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa1hmZXJtb2RlKiB4ZmVybW9kZSA9IHBhaW50
LmdldFhmZXJtb2RlKCk7CisgICAgaWYgKCF4ZmVybW9kZSkKKyAgICAgICAgcmV0dXJuIHRydWU7
IC8vIGRlZmF1bHQgdG8ga1NyY092ZXJfTW9kZQorICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZTsK
KyAgICBpZiAoIXhmZXJtb2RlLT5hc01vZGUoJm1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNfTW9kZTog
Ly8gc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOiAvLyBzb3VyY2Ug
KyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdmVyX01vZGU6
IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0Rz
dEFUb3BfTW9kZTogLy8gc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprUGx1c19Nb2RlOiAv
LyBzb3VyY2UrZGVzdAorICAgIGRlZmF1bHQ6IC8vIHRoZSByZXN0IGFyZSBhbGwgc291cmNlICsg
ZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU2tYZmVy
bW9kZTo6a0NsZWFyX01vZGU6IC8vIDAKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RfTW9kZTog
Ly8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0luX01vZGU6IC8vIHNvdXJjZSAqIGRl
c3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RJbl9Nb2RlOiAvLyBkZXN0ICogc291cmNlCisg
ICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0X01vZGU6IC8vIHNvdXJjZSAqICgxLWRlc3QpCisg
ICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0X01vZGU6IC8vIGRlc3QgKiAoMS1zb3VyY2UpCisg
ICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjQVRvcF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hm
ZXJtb2RlOjprWG9yX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSAyKihzb3VyY2UqZGVzdCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB4
ZmVybW9kZSB3aWxsIGtlZXAgdGhlIGRzdCBvcGFxdWUsIGFzc3VtaW5nIHRoZSBkc3QgaXMgYWxy
ZWFkeSBvcGFxdWUuCitzdGF0aWMgaW5saW5lIGJvb2wgeGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUo
Y29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgc3JjSXNPcGFxdWUpCit7CisgICAgU2tYZmVybW9k
ZSogeGZlcm1vZGUgPSBwYWludC5nZXRYZmVybW9kZSgpOworICAgIGlmICgheGZlcm1vZGUpCisg
ICAgICAgIHJldHVybiB0cnVlOyAvLyBkZWZhdWx0IHRvIGtTcmNPdmVyX01vZGUKKyAgICBTa1hm
ZXJtb2RlOjpNb2RlIG1vZGU7CisgICAgaWYgKCF4ZmVybW9kZS0+YXNNb2RlKCZtb2RlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTa1hm
ZXJtb2RlOjprRHN0X01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdmVy
X01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9k
ZTo6a0RzdE92ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprU3JjQVRvcF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2Rl
OjprUGx1c19Nb2RlOiAvLyBzb3VyY2UrZGVzdAorICAgIGRlZmF1bHQ6IC8vIHRoZSByZXN0IGFy
ZSBhbGwgc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgU2tYZmVybW9kZTo6a0NsZWFyX01vZGU6IC8vIDAKKyAgICBjYXNlIFNrWGZlcm1v
ZGU6OmtTcmNPdXRfTW9kZTogLy8gc291cmNlICogKDEtZGVzdCkKKyAgICBjYXNlIFNrWGZlcm1v
ZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVzdCAqICgxLXNvdXJjZSkKKyAgICBjYXNlIFNrWGZlcm1v
ZGU6OmtYb3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIDIqKHNvdXJjZSpkZXN0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJj
ZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0luX01vZGU6IC8vIHNvdXJjZSAqIGRlc3QKKyAg
ICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RJbl9Nb2RlOiAvLyBkZXN0ICogc291cmNlCisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprRHN0QVRvcF9Nb2RlOiAvLyBzb3VyY2UKKyAgICAgICAgcmV0dXJuIHNy
Y0lzT3BhcXVlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBwaXhlbHMgcGFp
bnRlZCB3aWxsIGJlIG9wYXF1ZS4KK3N0YXRpYyBpbmxpbmUgYm9vbCBwYWludElzT3BhcXVlKGNv
bnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0JpdG1hcCogYml0bWFwID0gMCkKK3sKKyAgICBp
ZiAocGFpbnQuZ2V0QWxwaGEoKSA8IDB4RkYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAocGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWludC5pc0Fu
dGlBbGlhcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU2tTaGFkZXIqIHNoYWRlciA9
IHBhaW50LmdldFNoYWRlcigpOworICAgIGlmIChzaGFkZXIgJiYgIXNoYWRlci0+aXNPcGFxdWUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+aXNP
cGFxdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJhdyhjb25zdCBTa1JlY3QmIHJlY3QsIGNv
bnN0IFNrUGFpbnQmIHBhaW50LCBib29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKQor
eworICAgIGlmIChmaWxsc0JvdW5kcyAmJiB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09w
YXF1ZSkpCisgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUocmVjdCk7CisgICAgZWxzZSBpZiAoU2tS
ZWN0OjpJbnRlcnNlY3RzKHJlY3QsIG1fb3BhcXVlUmVjdCkgJiYgIXhmZXJtb2RlUHJlc2VydmVz
T3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSkpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUo
cmVjdCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tEcmF3VW5ib3VuZGVk
KGNvbnN0IFNrUGFpbnQmIHBhaW50LCBib29sIGRyYXdzT3BhcXVlKQoreworICAgIGlmICgheGZl
cm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGRyYXdzT3BhcXVlKSkgeworICAgICAgICAvLyBX
ZSBkb24ndCBrbm93IHdoYXQgd2FzIGRyYXduIG9uIHNvIGp1c3QgZGVzdHJveSB0aGUga25vd24g
b3BhcXVlIGFyZWEuCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IFNrUmVjdDo6TWFrZUVtcHR5KCk7
CisgICAgfQorfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJhd1JlY3QoY29u
c3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJp
dG1hcCkKK3sKKyAgICBpZiAoIW1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgYml0bWFwKTsKKyAgICBi
b29sIGZpbGxzQm91bmRzID0gcGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprU3Ryb2tlX1N0
eWxlOworCisgICAgYm9vbCBzdGF5c0luQm91bmRzID0gcGFpbnQuZ2V0U3R5bGUoKSA9PSBTa1Bh
aW50OjprRmlsbF9TdHlsZSB8fCBwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygpOworICAgIGlm
ICghc3RheXNJbkJvdW5kcykKKyAgICAgICAgdHJhY2tEcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFx
dWUpOworICAgIHRyYWNrRHJhdyhyZWN0LCBwYWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tEcmF3UGF0aChjb25zdCBTa1BhdGgm
IHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIGlmICghbV90cmFja09wYXF1ZVJl
Z2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tSZWN0IHJlY3Q7CisgICAgaWYgKHBhdGgu
aXNSZWN0KCZyZWN0KSkgeworICAgICAgICB0cmFja0RyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShw
YWludCk7CisgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYgKCFwYWludC5j
YW5Db21wdXRlRmFzdEJvdW5kcygpKQorICAgICAgICB0cmFja0RyYXdVbmJvdW5kZWQocGFpbnQs
IG9wYXF1ZSk7CisgICAgZWxzZSB7CisgICAgICAgIHJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJv
dW5kcyhwYXRoLmdldEJvdW5kcygpLCAmcmVjdCk7CisgICAgICAgIHRyYWNrRHJhdyhyZWN0LCBw
YWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnRyYWNrRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlIG1vZGUsIGludCBu
dW1Qb2ludHMsIGNvbnN0IFNrUG9pbnQgcG9pbnRzW10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQor
eworICAgIGlmICghbV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghbnVtUG9pbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBTa1JlY3QgcmVjdDsKKyAgICBy
ZWN0LmZMZWZ0ID0gcG9pbnRzWzBdLmZYOworICAgIHJlY3QuZlJpZ2h0ID0gcG9pbnRzWzBdLmZY
ICsgMTsKKyAgICByZWN0LmZUb3AgPSBwb2ludHNbMF0uZlk7CisgICAgcmVjdC5mQm90dG9tID0g
cG9pbnRzWzBdLmZZICsgMTsKKworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyAr
K2kpIHsKKyAgICAgICAgcmVjdC5mTGVmdCA9IHN0ZDo6bWluKHJlY3QuZkxlZnQsIHBvaW50c1tp
XS5mWCk7CisgICAgICAgIHJlY3QuZlJpZ2h0ID0gc3RkOjptYXgocmVjdC5mUmlnaHQsIHBvaW50
c1tpXS5mWCArIDEpOworICAgICAgICByZWN0LmZUb3AgPSBzdGQ6Om1pbihyZWN0LmZUb3AsIHBv
aW50c1tpXS5mWSk7CisgICAgICAgIHJlY3QuZkJvdHRvbSA9IHN0ZDo6bWF4KHJlY3QuZkJvdHRv
bSwgcG9pbnRzW2ldLmZZICsgMSk7CisgICAgfQorCisgICAgYm9vbCBvcGFxdWUgPSBwYWludElz
T3BhcXVlKHBhaW50KTsKKyAgICBib29sIGZpbGxzQm91bmRzID0gZmFsc2U7CisKKyAgICBpZiAo
IXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCisgICAgICAgIHRyYWNrRHJhd1VuYm91bmRl
ZChwYWludCwgb3BhcXVlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1
dGVGYXN0Qm91bmRzKHJlY3QsICZyZWN0KTsKKyAgICAgICAgdHJhY2tEcmF3KHJlY3QsIHBhaW50
LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICB9Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6dHJhY2tEcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmIGJvdW5kcywgY29uc3QgU2tQYWlu
dCYgcGFpbnQpCit7CisgICAgaWYgKCFtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQpOworICAgIGJvb2wg
ZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RCb3Vu
ZHMoKSkKKyAgICAgICAgdHJhY2tEcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFxdWUpOworICAgIGVs
c2UgeworICAgICAgICBTa1JlY3QgcmVjdDsKKyAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1dGVG
YXN0Qm91bmRzKGJvdW5kcywgJnJlY3QpOworICAgICAgICB0cmFja0RyYXcocmVjdCwgcGFpbnQs
IG9wYXF1ZSwgZmlsbHNCb3VuZHMpOworICAgIH0KK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKIHsKICAgICBTa1BhaW50IHBhaW50OwpAQCAtMjg3
LDYgKzUzOCw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJl
Y3QpCiAgICAgaWYgKGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CiAgICAgICAgIHNldHVwUGFp
bnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBw
YWludCk7CisgICAgICAgIHRyYWNrRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogICAgIH0KIAogICAg
IGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlCkBAIC0yOTksMTIgKzU1MSwx
NiBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogCiAg
ICAgICAgIFNrUmVjdCB0b3BCb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVjdC5m
UmlnaHQsIHJlY3QuZlRvcCArIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHRvcEJv
cmRlciwgcGFpbnQpOworICAgICAgICB0cmFja0RyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQpOwog
ICAgICAgICBTa1JlY3QgYm90dG9tQm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZCb3R0b20g
LSAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIH07CiAgICAgICAgIGNhbnZhcygpLT5kcmF3
UmVjdChib3R0b21Cb3JkZXIsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChib3R0b21C
b3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IGxlZnRCb3JkZXIgPSB7IHJlY3QuZkxlZnQs
IHJlY3QuZlRvcCArIDEsIHJlY3QuZkxlZnQgKyAxLCByZWN0LmZCb3R0b20gLSAxIH07CiAgICAg
ICAgIGNhbnZhcygpLT5kcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CisgICAgICAgIHRyYWNr
RHJhd1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3QgcmlnaHRCb3JkZXIg
PSB7IHJlY3QuZlJpZ2h0IC0gMSwgcmVjdC5mVG9wICsgMSwgcmVjdC5mUmlnaHQsIHJlY3QuZkJv
dHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWlu
dCk7CisgICAgICAgIHRyYWNrRHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKICAgICB9CiB9
CiAKQEAgLTUzOSw2ICs3OTUsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnBhaW50U2tQ
YWludChjb25zdCBTa1JlY3QmIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCkKIHsKICAgICBtX2NhbnZhcy0+ZHJhd1JlY3Qo
cmVjdCwgcGFpbnQpOworICAgIHRyYWNrRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQogCiBjb25z
dCBTa0JpdG1hcCogUGxhdGZvcm1Db250ZXh0U2tpYTo6Yml0bWFwKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKaW5kZXggN2RjZmJlMmUzN2ZjMWM0MjdkZGU3ZmIzZjYwMzExYmUyNzQ5ODIx
My4uZWRkNjQ5ODExMzQ3MDU0NTljZTE1NjUyOWVmYTNjYzY4ZTQyMzhjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKQEAgLTE1Myw2ICsxNTMsMjAgQEAgcHVibGljOgogICAgIEludGVycG9sYXRp
b25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0
eSk7CiAKKyAgICAvLyBBZnRlciBwYWludGluZywgdGhpcyB3aWxsIGdpdmUgYW4gZXN0aW1hdGUg
dG8gdGhlIHJlZ2lvbiB0aGF0IHdhcyBwYWludGVkIG9wYXF1ZS4gSXQgd2lsbCB1bmRlcmVzdGlt
YXRlIHRvIG1haW50YWluCisgICAgLy8gY29uc3RhbnQgY29tcGxleGl0eSBvZiB0aGUgcmVzdWx0
LiBUaGlzIHdpbGwgb25seSBnaXZlIHNvbWV0aGluZyB1c2VmdWwgaWYgc2V0VHJhY2tPcGFxdWVS
ZWdpb24odHJ1ZSkgd2FzIGNhbGxlZC4KKyAgICBjb25zdCBTa1JlY3QmIHJlZ2lvblBhaW50ZWRP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlY3Q7IH0KKworICAgIC8vIEVuYWJsZSB0
cmFja2luZyBvZiBvcGFxdWUgcGFpbnRpbmcuCisgICAgdm9pZCBzZXRUcmFja09wYXF1ZVJlZ2lv
bihib29sIHRyYWNrKSB7IG1fdHJhY2tPcGFxdWVSZWdpb24gPSB0cmFjazsgfQorCisgICAgLy8g
QWZ0ZXIgZHJhd2luZyBpbiB0aGUgY29udGV4dCdzIGNhbnZhcywgdXNlIHRoZXNlIGZ1bmN0aW9u
cyB0byBub3RpZnkgdGhlIGNvbnRleHQgc28gaXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUgcmVnaW9u
LgorICAgIHZvaWQgdHJhY2tEcmF3UmVjdChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jiwg
Y29uc3QgU2tCaXRtYXAqID0gMCk7CisgICAgdm9pZCB0cmFja0RyYXdQYXRoKGNvbnN0IFNrUGF0
aCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIHRyYWNrRHJhd1BvaW50cyhTa0NhbnZhczo6
UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50W10sIGNvbnN0IFNrUGFpbnQm
KTsKKyAgICAvLyBGb3IgZHJhd2luZyBvcGVyYXRpb25zIHRoYXQgZG8gbm90IGZpbGwgdGhlIGVu
dGlyZSByZWN0LgorICAgIHZvaWQgdHJhY2tEcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmLCBjb25z
dCBTa1BhaW50Jik7CisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGVkIGRvd24g
dG8gR3JhcGhpY3NDb250ZXh0LgogICAgIHZvaWQgZHJhd1JlY3QoU2tSZWN0IHJlY3QpOwogCkBA
IC0xOTYsNiArMjEwLDExIEBAIHByaXZhdGU6CiAgICAgLy8gY29tbW9uIGNvZGUgYmV0d2VlbiBz
ZXR1cFBhaW50Rm9yW0ZpbGxpbmcsU3Ryb2tpbmddCiAgICAgdm9pZCBzZXR1cFNoYWRlcihTa1Bh
aW50KiwgR3JhZGllbnQqLCBQYXR0ZXJuKiwgU2tDb2xvcikgY29uc3Q7CiAKKyAgICB2b2lkIG1h
cmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3Bh
cXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZvaWQgdHJhY2tEcmF3KGNvbnN0IFNrUmVjdCYsIGNv
bnN0IFNrUGFpbnQmLCBib29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKTsKKyAgICB2
b2lkIHRyYWNrRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50JiwgYm9vbCBkcmF3c09wYXF1ZSk7
CisKICAgICAvLyBEZWZpbmVzIGRyYXdpbmcgc3R5bGUuCiAgICAgc3RydWN0IFN0YXRlOwogCkBA
IC0yMTAsNiArMjI5LDkgQEAgcHJpdmF0ZToKICAgICAvLyBtU3RhdGVTdGFjay5iYWNrKCkuCiAg
ICAgU3RhdGUqIG1fc3RhdGU7CiAKKyAgICBib29sIG1fdHJhY2tPcGFxdWVSZWdpb247CisgICAg
U2tSZWN0IG1fb3BhcXVlUmVjdDsKKwogICAgIC8vIFN0b3JlcyBpbWFnZSBzaXplcyBmb3IgYSBo
aW50IHRvIGNvbXB1dGUgaW1hZ2UgcmVzYW1wbGluZyBtb2Rlcy4KICAgICAvLyBWYWx1ZXMgYXJl
IHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50
U3JjU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGU2NzRiYjZiODViMDg1
Y2FiYWNjOWQ5ZDY0OTk5M2Q1ZDYyZmU1Y2YuLjU0Y2EyNTcwNmMxNjUyNzEzMWU4ZWY4NDVmZGFj
ZjJkM2I4YjBjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTEzLDYgKzEx
Myw3IEBACiAgICAgICAgICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgWydPUz09IndpbiInLCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMjExZjk0ZDRmYWU2MmI1ZWExOGVkNWUyZGRkZjk4ZDFi
YzJhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Bs
YXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcApAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRl
ICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIp
IFwKKyAgICBFWFBFQ1RfRVEoYS5mTGVmdCwgYi5mTGVmdCk7IFwKKyAgICBFWFBFQ1RfRVEoYS5m
UmlnaHQsIGIuZlJpZ2h0KTsgXAorICAgIEVYUEVDVF9FUShhLmZUb3AsIGIuZlRvcCk7IFwKKyAg
ICBFWFBFQ1RfRVEoYS5mQm90dG9tLCBiLmZCb3R0b20pOyBcCisKKyNkZWZpbmUgRVhQRUNUX1BJ
WEVMU19NQVRDSChwaXhlbHMsIHdpZHRoLCBoZWlnaHQsIG9wYXF1ZVJlY3QpIFwKKyAgICB7IH0g
Ly8gRklYTUU6IEVuYWJsZSB0aGlzIHRlc3Qgd2hlbiBTa2lhIGFjdHVhbGx5IGdldHMgdGhlIHBp
eGVscyByaWdodC4KKy8vICBmb3IgKGludCB5ID0gU2tTY2FsYXJDZWlsKG9wYXF1ZVJlY3QuZlRv
cCk7IHkgPCBTa1NjYWxhckZsb29yKG9wYXF1ZVJlY3QuZkJvdHRvbSk7ICsreSkKKy8vICAgICAg
Zm9yIChpbnQgeCA9IFNrU2NhbGFyQ2VpbChvcGFxdWVSZWN0LmZMZWZ0KTsgeCA8IFNrU2NhbGFy
Rmxvb3Iob3BhcXVlUmVjdC5mUmlnaHQpOyArK3gpIHsKKy8vICAgICAgICAgIGludCBpID0geCAr
IHkgKiB3aWR0aDsKKy8vICAgICAgICAgIGludCBhbHBoYSA9IHBpeGVsc1tpXSA+PiAyNDsKKy8v
ICAgICAgICAgIEVYUEVDVF9FUSgyNTUsIGFscGhhKTsKKy8vICAgICAgfQorCitURVNUKFBsYXRm
b3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZVRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0
bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0
MDAsIDQwMCk7CisgICAgdWludDMyX3QqIHBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4o
bWFsbG9jKDQwMCo0MDAqNCkpOworICAgIGJpdG1hcC5zZXRQaXhlbHMocGl4ZWxzKTsKKyAgICBT
a0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZv
cm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJl
Z2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0
KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xv
ciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJC
KDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFx
dWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDQwMCwgNDAwLCBwbGF0Zm9y
bUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBD
b21wb3NpdGVQbHVzTGlnaHRlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRS
QigxMCwgMTAsIDEwKzkwLCAxMCs5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3Bh
cXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCA0MDAsIDQwMCwgcGxhdGZv
cm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
Q29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIo
MTAsIDEwLCAxMCs5MCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1
ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3Jt
Q29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChG
bG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAs
IDEwLCAxMCs4OSwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29u
dGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoOCwgOCwgMywgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZVNvdXJjZU91dCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigxMSwgMTAs
IDExKzg4LCAxMCs5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCA0MDAsIDQwMCwgcGxhdGZvcm1Db250ZXh0
LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgzMCwgMzAsIDI5MCwgMjkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3Np
dGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAz
MCwgMzArMjkwLCAzMCsyOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29u
dGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoNDAsIDIwLCAyOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMw
LCAzMCwgMzArMjkwLCAzMCsyOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1
ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3Jt
Q29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChG
bG9hdFJlY3QoMTAsIDEwLCAzOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBD
b21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigz
MCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFx
dWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDQwMCwgNDAwLCBwbGF0Zm9y
bUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAzMCsy
OTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1Rf
UElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWlu
dGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAz
OTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAxMCwgMzArMjkwLCAx
MCszMTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBF
Q1RfUElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25Q
YWludGVkT3BhcXVlKCkpOworCisgICAgZnJlZShwaXhlbHMpOworfQorCitURVNUKFBsYXRmb3Jt
Q29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUxpbmVUZXN0KQoreworICAgIFNrQml0bWFwIGJp
dG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
MjAwLCAyMDApOworICAgIHVpbnQzMl90KiBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+
KG1hbGxvYygyMDAqMjAwKjQpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAg
U2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRm
b3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVS
ZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4
dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29s
b3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LnNldFNob3Vs
ZEFudGlhbGlhcyhmYWxzZSk7CisgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KDApOworICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDQpOworICAgIGNvbnRleHQuc2V0TGluZUNhcChTcXVh
cmVDYXApOworICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGNv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAg
Y29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNU
KFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9u
UGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAy
MDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOworCisgICAgY29udGV4
dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAwKSwgSW50UG9pbnQo
MTAwLCAwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tS
ZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWlu
dGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwg
cGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LnNh
dmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBvaW50KDEw
MCwgMTApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1Jl
Y3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50
ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBw
bGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuc2F2
ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgMTApLCBJbnRQb2ludCgxMDAs
IDEwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0
OjpNYWtlWFlXSCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVk
T3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxh
dGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDExKSwgSW50UG9pbnQoMTAwLCAx
MSkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6
TWFrZVhZV0goMTAsIDE0LCA5MCwgODYpLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9w
YXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRm
b3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5zZXRTaG91
bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwg
MTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNl
T3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5
MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9Q
SVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50
ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVTb3VyY2VJbik7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9r
ZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5l
KEludFBvaW50KDAsIDApLCBJbnRQb2ludCgxMDAsIDApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUo
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwg
cGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVM
U19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9w
YXF1ZSgpKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG9wYXF1ZSwgQ29sb3JT
cGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIElu
dFBvaW50KDEwMCwgMTApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJl
Z2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIw
MCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNv
bnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAgIGNvbnRleHQuc2F2ZSgpOworICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9pbnQoMTAwLCAxMCkpOwor
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZ
V0goMTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29u
dGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Y29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMSksIEludFBvaW50KDEwMCwgMTEpKTsKKyAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdI
KDEwLCAxNCwgOTAsIDg2KSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7
CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRl
eHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGZyZWUocGl4ZWxzKTsKK30KKworVEVT
VChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVQYXRoVGVzdCkKK3sKKyAgICBT
a0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsIDIwMCwgMjAwKTsKKyAgICB1aW50MzJfdCogcGl4ZWxzID0gc3RhdGljX2Nhc3Q8
dWludDMyX3QqPihtYWxsb2MoMjAwKjIwMCo0KSk7CisgICAgYml0bWFwLnNldFBpeGVscyhwaXhl
bHMpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0
U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRy
YWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0
Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYp
OworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgY29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVj
dDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRl
ZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBs
YXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5zZXRT
aG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdCgxKTsKKyAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyg1KTsKKyAgICBjb250ZXh0LnNldExpbmVDYXAo
U3F1YXJlQ2FwKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAg
ICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CisKKyAg
ICBQYXRoIHBhdGg7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDApKTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHBh
dGgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTAp
LCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVk
T3BhcXVlKCkpOworICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2lu
dCgwLCAxMCkpOworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAxMykpOworICAg
IGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtl
WFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVl
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1D
b250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgcGF0aC5jbGVhcigpOworCisgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHBh
dGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMTApKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBv
aW50KDEwMCwgMTMpKTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIEVYUEVDVF9F
UV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQu
cmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywg
MjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIHBh
dGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIDE0KSk7CisgICAgcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5maWxsUGF0aChw
YXRoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxNCwgOTAsIDg2
KSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRl
ZE9wYXF1ZSgpKTsKKyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBmcmVlKHBpeGVscyk7Cit9CisK
K1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlSW1hZ2VUZXN0KQorewor
ICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAgIHVpbnQzMl90KiBwaXhlbHMgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdCo+KG1hbGxvYygyMDAqMjAwKjQpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxz
KHBpeGVscyk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNv
bnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
JnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwg
MS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBT
a0JpdG1hcCBkcmF3Qml0bWFwOworICAgIGRyYXdCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgMTAsIDEwKTsKKyAgICBkcmF3Qml0bWFwLmFsbG9jUGl4ZWxzKCk7
CisKKyAgICBkcmF3Qml0bWFwLnNldElzT3BhcXVlKHRydWUpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTAqMTA7ICsraSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3QqPihkcmF3Qml0
bWFwLmdldFBpeGVscygpKVtpXSA9IDB4RkZGRkZGRkY7CisgICAgUmVmUHRyPEJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhPiBvcGFxdWVJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
OjpjcmVhdGUoZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKG9wYXF1ZUltYWdl
LT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAgIGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUo
ZmFsc2UpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAqMTA7ICsraSkKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDMyX3QqPihkcmF3Qml0bWFwLmdldFBpeGVscygpKVtpXSA9IDB4MDAwMDAw
MDA7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBhbHBoYUltYWdlID0g
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZShkcmF3Qml0bWFwLCB0cnVlKTsKKyAg
ICBFWFBFQ1RfVFJVRShhbHBoYUltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lv
blBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwg
MjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRl
eHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQ
b2ludCgwLCAwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAs
IDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVY
UEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lv
blBhaW50ZWRPcGFxdWUoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOworICAgIEVYUEVDVF9FUV9S
RUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQucmVn
aW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAw
LCAyMDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29u
dGV4dC5kcmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIElu
dFBvaW50KDUsIDUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAx
MCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVn
aW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCg1LCA1KSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5y
ZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAy
MDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBj
b250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgx
MCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0
LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFn
ZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29u
dGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4
ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisK
KyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBJbnRQb2ludCgyMCwgMTApLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VR
X1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMjAsIDkwLCA4MCksIHBsYXRmb3JtQ29udGV4dC5y
ZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAy
MDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldEFscGhhKDAuNSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50
KDI1LCAxNSksIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAyNSwgOTAsIDc1KSwgcGxhdGZv
cm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgp
KTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3Bh
cXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250
ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhl
bHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKwor
ICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIEludFBvaW50KDEwLCAyMCksIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDIwLCAxMCwgODAsIDkwKSwgcGxhdGZvcm1Db250ZXh0LnJl
Z2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIw
MCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0QWxwaGEoMC41KTsKKyAgICBjb250ZXh0LmRy
YXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQo
MTUsIDI1KSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAg
IEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMjUsIDEwLCA3NSwgOTApLCBwbGF0Zm9y
bUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENI
KHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkp
OworCisgICAgZnJlZShwaXhlbHMpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0
LCB0cmFja09wYXF1ZU92YWxUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRt
YXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAg
IHVpbnQzMl90KiBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KG1hbGxvYygyMDAqMjAw
KjQpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAgU2tDYW52YXMgY2FudmFz
KGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2Fu
dmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xv
ciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwg
MC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdI
KDAsIDAsIDAsIDApLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFpbnRlZE9wYXF1ZSgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5y
ZWdpb25QYWludGVkT3BhcXVlKCkpOworCisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0
KDEwLCAxMCwgOTAsIDkwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgw
LCAwLCAwLCAwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVn
aW9uUGFpbnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEw
LCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAs
IDkwKSwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQucmVnaW9uUGFp
bnRlZE9wYXF1ZSgpKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZVNvdXJjZUluKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsK
KworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgNTAsIDMwKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3Jt
Q29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
cGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7
CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgMzAsIDUwKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCg0MCwgMTAsIDYwLCA5MCksIHBsYXRmb3Jt
Q29udGV4dC5yZWdpb25QYWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
cGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7
CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKworICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5k
cmF3RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgNTAsIDMwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
U2tSZWN0OjpNYWtlWFlXSCg0MCwgNDEsIDYwLCA1OSksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25Q
YWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIw
MCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5k
cmF3RWxsaXBzZShJbnRSZWN0KDIwLCAxMCwgMzAsIDUwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
U2tSZWN0OjpNYWtlWFlXSCg1MSwgNDEsIDQ5LCA1OSksIHBsYXRmb3JtQ29udGV4dC5yZWdpb25Q
YWludGVkT3BhcXVlKCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIw
MCwgcGxhdGZvcm1Db250ZXh0LnJlZ2lvblBhaW50ZWRPcGFxdWUoKSk7CisKKyAgICBmcmVlKHBp
eGVscyk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121748</attachid>
            <date>2012-01-09 16:12:50 -0800</date>
            <delta_ts>2012-01-11 14:28:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120109191249.patch</filename>
            <type>text/plain</type>
            <size>55622</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uZGVhNTAyYTdlZTFjYTgzNWIxNzk0ZWY1YmM2NDBj
ODQ3MjlhMzkwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHM6IFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6Om9wYXF1ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4
UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50U2tCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvT3BhcXVlUmVnaW9uU2tpYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVl
UmVnaW9uU2tpYTo6T3BhcXVlUmVnaW9uU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVS
ZWdpb25Ta2lhOjp+T3BhcXVlUmVnaW9uU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjp4ZmVybW9k
ZUlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OnhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3Bh
cXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVS
ZWdpb25Ta2lhOjp0cmFja0RyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lv
blNraWE6OnRyYWNrRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25T
a2lhOjp0cmFja0RyYXdCb3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNr
aWE6OnRyYWNrRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjp0cmFj
a0RyYXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6bWFy
a1JlY3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjptYXJr
UmVjdEFzTm9uT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1
ZVJlZ2lvblNraWEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lh
Ojphc1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0
Zm9ybUNvbnRleHRTa2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6
OmNsaXBwZWRUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnBhaW50
U2tQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFja0Ry
YXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJh
d1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tEcmF3
UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJh
d0JvdW5kZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0VHJh
Y2tPcGFxdWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
b3BhcXVlUmVnaW9uKToKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDQx
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZWVmYzJmOTEzYzJhM2E1Y2NiNGJmZmJk
ODhiZjc5OGNlMTNmYjRhNS4uZDU1MDc2NTRkM2RhMTgwNmU2ODBiYzJjMjM1YjZhZTlkNWY2NWFk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMS0w
OSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbc2tpYV0g
VHJhY2sgYSBzaW1wbGUgb3BhcXVlIGFyZWEgd2hlbiBwYWludGluZyB2aWEgUGxhdGZvcm1Db250
ZXh0U2tpYSBhbmQgc2F2ZSBpbiBMYXllclRleHR1cmVVcGRhdGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM1MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICog
dGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorCiAyMDEyLTAxLTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90
QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA0NDE4Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDNiYTRiOTEyN2U4OWI3ZDE0ZDJkMDg1ZDQ1ZTc1MTc1MWNhYzZh
N2YuLmZlMjNjMDI2ZTllMDRiM2YzYjM5NjNmNzJiMDk4YzExODk5YWI4NTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTM5MTAsNiArMzkxMCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbnRSZWN0U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGF0aFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BhdHRlcm5Ta2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
LmgKaW5kZXggMzRkYjcyYWE0NTJjZWMyNmEzNzYyMmQ2MzdmZDhkMWFmNDRiNGRiMy4uYTg1ODc5
M2QxZThjNjJiYTlmOWE5YzJlYjg0Yzc2ZmFkOGFmM2E4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaApAQCAtNzIsNiArNzIsMTEgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBmb3Jt
YXQgaXMgVGV4ZWxGb3JtYXRCR1JBLCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVjNC56IGlzIHJlZC4K
ICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVu
dW0gdGV4dHVyZUZvcm1hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgLyogY29udGVudFJlY3QgKi8sIGNvbnN0IEludFNpemUmIC8qIHRpbGVT
aXplICovLCBpbnQgLyogYm9yZGVyVGV4ZWxzICovLCBmbG9hdCAvKiBjb250ZW50c1NjYWxlICov
KSB7IH0KKworICAgIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X29wYXF1ZVJlY3Q7IH0KKworcHJvdGVjdGVkOgorICAgIEludFJlY3QgbV9vcGFxdWVSZWN0Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCA1MzdlMTM3ZThkOGVjNTE4
YjkzNGFhNWNkMmQ3MDBjNzRiMTlmZTRiLi5hNjQ0NTQ4YzQ0N2RkNmE4ZGMzYzVmOGY2MDIyOTZk
NGM2OTZhMjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyLmNwcApAQCAtNTMsOSArNTMsMTggQEAgdm9pZCBTa1BpY3R1cmVDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFIKICAgICBTa0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNv
bnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKICAgICBQbGF0Zm9ybUNv
bnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChjYW52YXMpOwogICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXREZWZlcnJlZCh0cnVlKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdp
b24odHJ1ZSk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1D
b250ZXh0KTsKICAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3Qs
IGNvbnRlbnRzU2NhbGUpOwogICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKworICAgIC8v
IFNhdmUgdGhlIGxhcmdlc3QgSW50UmVjdCBlbmNsb3NlZCBieSB0aGUgU2tSZWN0LgorICAgIGNv
bnN0IFNrUmVjdCYgcmVjdCA9IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KTsKKyAgICBpbnQgbGVmdCA9IFNrU2NhbGFyQ2VpbChyZWN0LmZMZWZ0KTsKKyAgICBpbnQgdG9w
ID0gU2tTY2FsYXJDZWlsKHJlY3QuZlRvcCk7CisgICAgaW50IHJpZ2h0ID0gU2tTY2FsYXJGbG9v
cihyZWN0LmZSaWdodCk7CisgICAgaW50IGJvdHRvbSA9IFNrU2NhbGFyRmxvb3IocmVjdC5mQm90
dG9tKTsKKyAgICBtX29wYXF1ZVJlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQtbGVmdCwg
Ym90dG9tLXRvcCk7CiB9CiAKIHZvaWQgU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6ZHJhd1BpY3R1cmUoU2tDYW52YXMqIGNhbnZhcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CmluZGV4IDkxMzVmZjRlMGNmNzIxNDFhMDFiNzEzODk0YTU5ZGU1YWFjMjQ0YTIuLjFhNmFmYjQx
N2I1YmEwZjc0ZGZlZmQwZWM1ODcyOWE4Yjk1NzRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lh
LmNwcApAQCAtMzM5LDYgKzMzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2Rl
OjprQ2xlYXJfTW9kZSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVj
dChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1JlY3QociwgcGFp
bnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCkBAIC00NjMsMTEgKzQ2NCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZl
eFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQ
YWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRBbnRpQWxpYXMoc2hvdWxkQW50
aWFsaWFzKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgs
IHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBwYWlu
dCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWlu
dC5yZXNldCgpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9r
aW5nKCZwYWludCwgMCwgMCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tE
cmF3UGF0aChwYXRoLCBwYWludCk7CiAgICAgfQogfQogCkBAIC01MDMsMTEgKzUwNiwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgZWxpcHNlUmVj
dCkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d092YWwocmVjdCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdCb3Vu
ZGVkKHJlY3QsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7
CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1
cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAmcmVjdCwgMCk7CiAgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+dHJhY2tEcmF3Qm91bmRlZChyZWN0LCBwYWludCk7CiAgICAgfQogfQogCkBA
IC01NzQsNiArNTc5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQKICAgICBTa0NhbnZhcyog
Y2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIGRyYXdPdXRlclBhdGgo
Y2FudmFzLCBwYXRoLCBwYWludCwgd2lkdGgpOwogICAgIGRyYXdJbm5lclBhdGgoY2FudmFzLCBw
YXRoLCBwYWludCwgd2lkdGgpOworCisgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMSk7CisgICAg
cGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiAvLyBU
aGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCkBAIC02MjEsMTIgKzYyOSwxNSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29u
c3QgSW50UG9pbnQmIHBvaW50MikKICAgICAgICAgZmlsbFBhaW50LnNldENvbG9yKHBhaW50Lmdl
dENvbG9yKCkpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0
KHIxLCBmaWxsUGFpbnQpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdSZWN0KHIyLCBmaWxsUGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tE
cmF3UmVjdChyMSwgZmlsbFBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNr
RHJhd1JlY3QocjIsIGZpbGxQYWludCk7CiAgICAgfQogCiAgICAgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKHAxLCBwMiwgd2lkdGgsIHBlblN0eWxlKTsKICAgICBTa1BvaW50IHB0c1syXSA9
IHsgKFNrUG9pbnQpcDEsIChTa1BvaW50KXAyIH07CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmRyYXdQb2ludHMoU2tDYW52YXM6OmtMaW5lc19Qb2ludE1vZGUsIDIsIHB0cywg
cGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdQb2ludHMoU2tDYW52YXM6
OmtMaW5lc19Qb2ludE1vZGUsIDIsIHB0cywgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0
IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCkBAIC03MDIsNiArNzEzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwKICAgICAgICAgICAgICBvcmlnaW5YICsgV2ViQ29yZUZs
b2F0VG9Ta1NjYWxhcih3aWR0aCksCiAgICAgICAgICAgICAgb3JpZ2luWSArIFNrSW50VG9TY2Fs
YXIobWlzc3BlbGxCaXRtYXAtPmhlaWdodCgpKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRy
YWNrRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LApAQCAtNzI2LDYgKzczOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcHQs
CiAgICAgLy8gVGV4dCBsaW5lcyBhcmUgZHJhd24gdXNpbmcgdGhlIHN0cm9rZSBjb2xvci4KICAg
ICBwYWludC5zZXRDb2xvcihwbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlU3Ryb2tlQ29sb3Io
KSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7
CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1JlY3QociwgcGFpbnQpOwogfQogCiAv
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtNzYw
LDYgKzc3Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoVG9GaWxsKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygm
cGFpbnQpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRo
LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFp
bnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQpAQCAtNzc4LDYgKzc5Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
cmVzdG9yZSgpOwogfQpAQCAtODA2LDYgKzgyMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRDb21tb24oJnBhaW50KTsKICAgICBw
YWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5kcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJh
d1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsCkBAIC04NDUsNiArODYxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNl
dENvbG9yKGNvbG9yLnJnYigpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0
aChwYXRoLCBwYWludCk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTSgpIGNvbnN0CkBAIC0xMTI5LDYgKzExNDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFu
KQogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgICByZXR1
cm47CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWlu
dCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9T
dHJva2UpCkBAIC0xMTQzLDYgKzExNjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiAgICAgU2tQYWludCBwYWludDsKICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKQEAgLTExNjMsOSArMTE4MiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICBib29sIHZhbGlkVyA9IHIud2lkdGgoKSA+IDA7CiAgICAgYm9vbCB2YWxpZEggPSByLmhlaWdo
dCgpID4gMDsKICAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpOwotICAgIGlmICh2YWxpZFcgJiYgdmFsaWRIKQorICAgIGlmICh2YWxpZFcgJiYgdmFsaWRI
KSB7CiAgICAgICAgIGNhbnZhcy0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIGVsc2UgaWYgKHZh
bGlkVyB8fCB2YWxpZEgpIHsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1Jl
Y3QociwgcGFpbnQpOworICAgIH0gZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgewogICAgICAg
ICAvLyB3ZSBhcmUgZXhwZWN0ZWQgdG8gcmVzcGVjdCB0aGUgbGluZUpvaW4sIHNvIHdlIGNhbid0
IGp1c3QgY2FsbAogICAgICAgICAvLyBkcmF3TGluZSAtLSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHBh
dGggdGhhdCBkb3VibGVzIGJhY2sgb24gaXRzZWxmLgogICAgICAgICBTa1BhdGggcGF0aDsKQEAg
LTExNzMsNiArMTE5Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICBwYXRoLmxpbmVUbyhy
LmZSaWdodCwgci5mQm90dG9tKTsKICAgICAgICAgcGF0aC5jbG9zZSgpOwogICAgICAgICBjYW52
YXMtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRy
YWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGU2NmRiYWI0
MzUwZDQ1ZDM0M2VmMWQzZmY1NjIxYTg4YTM5NzllYzYuLjQxZGU2MTVkYWYxYjZjZDk3N2U2OTAx
N2NmYzg5NmY0ODEzMWYzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTI0OCw2ICsyNDgsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgTmF0aXZlSW1hZwogICAgICAgICAvLyB3ZSBkb24ndCBzZW5kIGV4dHJhIHBpeGVscy4KICAg
ICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZzcmNSZWN0LCBk
ZXN0UmVjdCwgJnBhaW50KTsKICAgICB9CisgICAgcGxhdGZvcm1Db250ZXh0LT50cmFja0RyYXdS
ZWN0KGRlc3RSZWN0LCBwYWludCwgJmJpdG1hcC5iaXRtYXAoKSk7CiB9CiAKIC8vIFRyYW5zZm9y
bXMgdGhlIGdpdmVuIGRpbWVuc2lvbnMgd2l0aCB0aGUgZ2l2ZW4gbWF0cml4LiBVc2VkIHRvIHNl
ZSBob3cgYmlnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODFjZDAxMjg3YzE5NWY3
NDQxYjIzNDg5OWVjYzU4YzMyNDUzNjRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcApAQCAtMCwwICsx
LDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJPcGFxdWVSZWdpb25Ta2lh
LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlICJTa1No
YWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK09wYXF1ZVJlZ2lvblNraWE6Ok9wYXF1
ZVJlZ2lvblNraWEoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0KQorICAgIDog
bV9vcGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkpCisgICAgLCBtX3BsYXRmb3JtQ29udGV4
dChwbGF0Zm9ybUNvbnRleHQpCit7Cit9CisKK09wYXF1ZVJlZ2lvblNraWE6On5PcGFxdWVSZWdp
b25Ta2lhKCkKK3sKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB4ZmVybW9kZSB3aWxsIGZv
cmNlIHRoZSBkc3QgdG8gYmUgb3BhcXVlLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IGRzdC4K
K3N0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZUlzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50
LCBib29sIHNyY0lzT3BhcXVlKQoreworICAgIGlmICghc3JjSXNPcGFxdWUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFNrWGZlcm1vZGUqIHhmZXJtb2RlID0gcGFpbnQuZ2V0WGZlcm1v
ZGUoKTsKKyAgICBpZiAoIXhmZXJtb2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZGVmYXVs
dCB0byBrU3JjT3Zlcl9Nb2RlCisgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlOworICAgIGlmICgh
eGZlcm1vZGUtPmFzTW9kZSgmbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY19Nb2RlOiAvLyBzb3VyY2UK
KyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBz
b3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE92ZXJfTW9kZTogLy8gc291cmNl
ICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0QVRvcF9Nb2Rl
OiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtQbHVzX01vZGU6IC8vIHNvdXJjZStk
ZXN0CisgICAgZGVmYXVsdDogLy8gdGhlIHJlc3QgYXJlIGFsbCBzb3VyY2UgKyBkZXN0IC0gc291
cmNlKmRlc3QKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprQ2xl
YXJfTW9kZTogLy8gMAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdF9Nb2RlOiAvLyBkZXN0Cisg
ICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjSW5fTW9kZTogLy8gc291cmNlICogZGVzdAorICAgIGNh
c2UgU2tYZmVybW9kZTo6a0RzdEluX01vZGU6IC8vIGRlc3QgKiBzb3VyY2UKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtTcmNPdXRfTW9kZTogLy8gc291cmNlICogKDEtZGVzdCkKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVzdCAqICgxLXNvdXJjZSkKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtTcmNBVG9wX01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtY
b3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIDIqKHNvdXJjZSpkZXN0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHhmZXJtb2RlIHdp
bGwga2VlcCB0aGUgZHN0IG9wYXF1ZSwgYXNzdW1pbmcgdGhlIGRzdCBpcyBhbHJlYWR5IG9wYXF1
ZS4KK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1Bh
aW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1ZSkKK3sKKyAgICBTa1hmZXJtb2RlKiB4ZmVybW9k
ZSA9IHBhaW50LmdldFhmZXJtb2RlKCk7CisgICAgaWYgKCF4ZmVybW9kZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7IC8vIGRlZmF1bHQgdG8ga1NyY092ZXJfTW9kZQorICAgIFNrWGZlcm1vZGU6Ok1v
ZGUgbW9kZTsKKyAgICBpZiAoIXhmZXJtb2RlLT5hc01vZGUoJm1vZGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtE
c3RfTW9kZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTogLy8g
c291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3Zl
cl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZlcm1v
ZGU6OmtTcmNBVG9wX01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtQbHVzX01v
ZGU6IC8vIHNvdXJjZStkZXN0CisgICAgZGVmYXVsdDogLy8gdGhlIHJlc3QgYXJlIGFsbCBzb3Vy
Y2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBT
a1hmZXJtb2RlOjprQ2xlYXJfTW9kZTogLy8gMAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY091
dF9Nb2RlOiAvLyBzb3VyY2UgKiAoMS1kZXN0KQorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE91
dF9Nb2RlOiAvLyBkZXN0ICogKDEtc291cmNlKQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1hvcl9N
b2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gMiooc291cmNlKmRlc3QpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNfTW9kZTogLy8gc291cmNlCisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprU3JjSW5fTW9kZTogLy8gc291cmNlICogZGVzdAorICAgIGNhc2UgU2tY
ZmVybW9kZTo6a0RzdEluX01vZGU6IC8vIGRlc3QgKiBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1v
ZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNvdXJjZQorICAgICAgICByZXR1cm4gc3JjSXNPcGFxdWU7
CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgaWYgYWxsIHBpeGVscyBwYWludGVkIHdpbGwg
YmUgb3BhcXVlLgorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29uc3QgU2tQYWlu
dCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXAgPSAwLCBib29sIGNoZWNrRmlsbE9ubHkg
PSBmYWxzZSkKK3sKKyAgICBpZiAocGFpbnQuZ2V0QWxwaGEoKSA8IDB4RkYpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWNoZWNrRmlsbE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAh
PSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWludC5pc0FudGlBbGlhcygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU2tTaGFkZXIqIHNoYWRlciA9IHBhaW50LmdldFNoYWRlcigpOwor
ICAgIGlmIChzaGFkZXIgJiYgIXNoYWRlci0+aXNPcGFxdWUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+aXNPcGFxdWUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6
OnRyYWNrRHJhd1JlY3QoY29uc3QgU2tSZWN0JiBmaWxsUmVjdCwgY29uc3QgU2tQYWludCYgcGFp
bnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXApCit7CisgICAgLy8gQW55IHN0cm9raW5nIG1heSBw
dXQgYWxwaGEgaW4gcGl4ZWxzIGV2ZW4gaWYgdGhlIGZpbGxpbmcgcGFydCBkb2VzIG5vdC4KKyAg
ICBpZiAocGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSkgeworICAgICAg
ICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGJpdG1hcCk7CisgICAgICAgIGJv
b2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVG
YXN0Qm91bmRzKCkpCisgICAgICAgICAgICB0cmFja0RyYXdVbmJvdW5kZWQocGFpbnQsIG9wYXF1
ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU2tSZWN0IHN0cm9rZVJlY3Q7CisgICAg
ICAgICAgICBzdHJva2VSZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMoZmlsbFJlY3QsICZz
dHJva2VSZWN0KTsKKyAgICAgICAgICAgIHRyYWNrRHJhdyhzdHJva2VSZWN0LCBwYWludCwgb3Bh
cXVlLCBmaWxsc0JvdW5kcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoZWNrRmls
bE9ubHkgPSB0cnVlOworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgYml0
bWFwLCBjaGVja0ZpbGxPbmx5KTsKKyAgICBib29sIGZpbGxzQm91bmRzID0gcGFpbnQuZ2V0U3R5
bGUoKSAhPSBTa1BhaW50OjprU3Ryb2tlX1N0eWxlOworICAgIHRyYWNrRHJhdyhmaWxsUmVjdCwg
cGFpbnQsIG9wYXF1ZSwgZmlsbHNCb3VuZHMpOworfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6
OnRyYWNrRHJhd1BhdGgoY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkK
K3sKKyAgICBTa1JlY3QgcmVjdDsKKyAgICBpZiAocGF0aC5pc1JlY3QoJnJlY3QpKSB7CisgICAg
ICAgIHRyYWNrRHJhd1JlY3QocmVjdCwgcGFpbnQsIDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYm9vbCBvcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50KTsKKyAgICBib29sIGZp
bGxzQm91bmRzID0gZmFsc2U7CisKKyAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRz
KCkpCisgICAgICAgIHRyYWNrRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKHBhdGguZ2V0Qm91bmRz
KCksICZyZWN0KTsKKyAgICAgICAgdHJhY2tEcmF3KHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxz
Qm91bmRzKTsKKyAgICB9Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3UG9p
bnRzKFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2lu
dCBwb2ludHNbXSwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgaWYgKCFudW1Qb2ludHMp
CisgICAgICAgIHJldHVybjsKKworICAgIFNrUmVjdCByZWN0OworICAgIHJlY3QuZkxlZnQgPSBw
b2ludHNbMF0uZlg7CisgICAgcmVjdC5mUmlnaHQgPSBwb2ludHNbMF0uZlggKyAxOworICAgIHJl
Y3QuZlRvcCA9IHBvaW50c1swXS5mWTsKKyAgICByZWN0LmZCb3R0b20gPSBwb2ludHNbMF0uZlkg
KyAxOworCisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkgeworICAgICAg
ICByZWN0LmZMZWZ0ID0gc3RkOjptaW4ocmVjdC5mTGVmdCwgcG9pbnRzW2ldLmZYKTsKKyAgICAg
ICAgcmVjdC5mUmlnaHQgPSBzdGQ6Om1heChyZWN0LmZSaWdodCwgcG9pbnRzW2ldLmZYICsgMSk7
CisgICAgICAgIHJlY3QuZlRvcCA9IHN0ZDo6bWluKHJlY3QuZlRvcCwgcG9pbnRzW2ldLmZZKTsK
KyAgICAgICAgcmVjdC5mQm90dG9tID0gc3RkOjptYXgocmVjdC5mQm90dG9tLCBwb2ludHNbaV0u
ZlkgKyAxKTsKKyAgICB9CisKKyAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQp
OworICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29t
cHV0ZUZhc3RCb3VuZHMoKSkKKyAgICAgICAgdHJhY2tEcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFx
dWUpOworICAgIGVsc2UgeworICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMo
cmVjdCwgJnJlY3QpOworICAgICAgICB0cmFja0RyYXcocmVjdCwgcGFpbnQsIG9wYXF1ZSwgZmls
bHNCb3VuZHMpOworICAgIH0KK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjp0cmFja0RyYXdC
b3VuZGVkKGNvbnN0IFNrUmVjdCYgYm91bmRzLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAg
ICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQpOworICAgIGJvb2wgZmlsbHNCb3Vu
ZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RCb3VuZHMoKSkKKyAg
ICAgICAgdHJhY2tEcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFxdWUpOworICAgIGVsc2UgeworICAg
ICAgICBTa1JlY3QgcmVjdDsKKyAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRz
KGJvdW5kcywgJnJlY3QpOworICAgICAgICB0cmFja0RyYXcocmVjdCwgcGFpbnQsIG9wYXF1ZSwg
ZmlsbHNCb3VuZHMpOworICAgIH0KK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjp0cmFja0Ry
YXcoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBkcmF3c09w
YXF1ZSwgYm9vbCBmaWxsc0JvdW5kcykKK3sKKyAgICBpZiAoZmlsbHNCb3VuZHMgJiYgeGZlcm1v
ZGVJc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpKQorICAgICAgICBtYXJrUmVjdEFzT3BhcXVl
KHJlY3QpOworICAgIGVsc2UgaWYgKFNrUmVjdDo6SW50ZXJzZWN0cyhyZWN0LCBtX29wYXF1ZVJl
Y3QpICYmICF4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpKQorICAg
ICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHJlY3QpOworfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNr
aWE6OnRyYWNrRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBkcmF3c09w
YXF1ZSkKK3sKKyAgICBpZiAoIXhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBkcmF3c09w
YXF1ZSkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBq
dXN0IGRlc3Ryb3kgdGhlIGtub3duIG9wYXF1ZSBhcmVhLgorICAgICAgICBtX29wYXF1ZVJlY3Qg
PSBTa1JlY3Q6Ok1ha2VFbXB0eSgpOworICAgIH0KK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50
IHRvIGtlZXAgdHJhY2sgb2YgYW4gb3BhcXVlIHJlZ2lvbiBidXQgYm91bmQgaXRzIGNvbXBsZXhp
dHkgYXQgYSBjb25zdGFudCBzaXplLgorICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGxhcmdl
c3QgcmVjdGFuZ2xlIHNlZW4gYnkgYXJlYS4gSWYgd2UgY2FuIGFkZCB0aGUgbmV3IHJlY3QgdG8g
dGhpcworICAgIC8vIHJlY3RhbmdsZSB0aGVuIHdlIGRvIHRoYXQsIGFzIHRoYXQgaXMgdGhlIGNo
ZWFwZXN0IHdheSB0byBpbmNyZWFzZSB0aGUgYXJlYSByZXR1cm5lZAorICAgIC8vIHdpdGhvdXQg
aW5jcmVhc2luZyB0aGUgY29tcGxleGl0eS4KKworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQtPmNsaXBwZWRUb0ltYWdl
KCkuaXNPcGFxdWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX29wYXF1ZVJlY3QuY29u
dGFpbnMocmVjdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjdC5jb250YWlucyhtX29w
YXF1ZVJlY3QpKSB7CisgICAgICAgIG1fb3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAocmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJl
Y3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBpZiAocmVjdC5m
TGVmdCA8IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5m
TGVmdCkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mTGVmdCA9IHJlY3QuZkxlZnQ7CisgICAg
ICAgIGlmIChyZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8
IG1fb3BhcXVlUmVjdC5mUmlnaHQpCisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZlJpZ2h0ID0g
cmVjdC5mUmlnaHQ7CisgICAgfSBlbHNlIGlmIChyZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5m
TGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3QuZlJpZ2h0KSB7CisgICAgICAgIGlm
IChyZWN0LmZUb3AgPCBtX29wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPiBtX29wYXF1
ZVJlY3QuZlRvcCkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOwor
ICAgICAgICBpZiAocmVjdC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5m
VG9wIDwgbV9vcGFxdWVSZWN0LmZCb3R0b20pCisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkJv
dHRvbSA9IHJlY3QuZkJvdHRvbTsKKyAgICB9CisKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9u
ZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChsb25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAg
ICBsb25nIGFyZWEgPSAobG9uZylyZWN0LndpZHRoKCkgKiAobG9uZylyZWN0LmhlaWdodCgpOwor
ICAgIGlmIChhcmVhID4gb3BhcXVlQXJlYSkKKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsK
K30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNr
UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50IHRvIGtlZXAgYXMgbXVjaCBvZiB0aGUgY3Vy
cmVudCBvcGFxdWUgcmVjdGFuZ2xlIGFzIHdlIGNhbiwgc28gZmluZCB0aGUgb25lIGxhcmdlc3QK
KyAgICAvLyByZWN0YW5nbGUgaW5zaWRlIG1fb3BhcXVlUmVjdCB0aGF0IGRvZXMgbm90IGludGVy
c2VjdCB3aXRoIHxyZWN0fC4KKworICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkp
IHsKKyAgICAgICAgbV9vcGFxdWVSZWN0LnNldEVtcHR5KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpbnQgZGVsdGFMZWZ0ID0gcmVjdC5mTGVmdCAtIG1fb3BhcXVlUmVjdC5mTGVm
dDsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG1fb3BhcXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdo
dDsKKyAgICBpbnQgZGVsdGFUb3AgPSByZWN0LmZUb3AgLSBtX29wYXF1ZVJlY3QuZlRvcDsKKyAg
ICBpbnQgZGVsdGFCb3R0b20gPSBtX29wYXF1ZVJlY3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsK
KworICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMg
dG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVl
UmVjdC4KKyAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xl
cyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCisgICAgU2tS
ZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFC
b3R0b20pCisgICAgICAgIGhvcml6b250YWwuZkJvdHRvbSA9IHJlY3QuZlRvcDsKKyAgICBlbHNl
CisgICAgICAgIGhvcml6b250YWwuZlRvcCA9IHJlY3QuZkJvdHRvbTsKKyAgICBTa1JlY3QgdmVy
dGljYWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgaWYgKGRlbHRhTGVmdCA+IGRlbHRhUmlnaHQpCisg
ICAgICAgIHZlcnRpY2FsLmZSaWdodCA9IHJlY3QuZkxlZnQ7CisgICAgZWxzZQorICAgICAgICB2
ZXJ0aWNhbC5mTGVmdCA9IHJlY3QuZlJpZ2h0OworCisgICAgaWYgKChsb25nKWhvcml6b250YWwu
d2lkdGgoKSAqIChsb25nKWhvcml6b250YWwuaGVpZ2h0KCkgPiAobG9uZyl2ZXJ0aWNhbC53aWR0
aCgpICogKGxvbmcpdmVydGljYWwuaGVpZ2h0KCkpCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IGhv
cml6b250YWw7CisgICAgZWxzZQorICAgICAgICBtX29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDYz
NTMwODFhN2FiYWNjNDg0ZWMzY2E3YTFkODMxMjQxZjgzNzU5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wYXF1ZVJlZ2lvblNraWFfaAorI2RlZmluZSBPcGFx
dWVSZWdpb25Ta2lhX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tDYW52
YXMuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiU2tQb2ludC5oIgorI2luY2x1
ZGUgIlNrUmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQbGF0Zm9ybUNvbnRl
eHRTa2lhOworfTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGNsYXNzIGlzIGFu
IGVuY2Fwc3VsYXRpb24gb2YgZnVuY3Rpb25hbGl0eSBmb3IgUGxhdGZvcm1Db250ZXh0U2tpYSwg
YW5kIGl0cyBtZXRob2RzIGFyZSBtaXJyb3JlZAorLy8gdGhlcmUgZm9yIHRoZSBvdXRzaWRlIHdv
cmxkLiBJdCB0cmFja3MgcGFpbnRzIGFuZCBjb21wdXRlcyB3aGF0IGFyZWEgd2lsbCBiZSBvcGFx
dWUuCitjbGFzcyBPcGFxdWVSZWdpb25Ta2lhIHsKK3B1YmxpYzoKKyAgICBPcGFxdWVSZWdpb25T
a2lhKFBsYXRmb3JtQ29udGV4dFNraWEqKTsKKyAgICB+T3BhcXVlUmVnaW9uU2tpYSgpOworCisg
ICAgLy8gVGhlIHJlc3VsdGluZyBvcGFxdWUgcmVnaW9uIGFzIGEgc2luZ2xlIFNrUmVjdC4KKyAg
ICBjb25zdCBTa1JlY3QmIGFzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQor
CisgICAgdm9pZCB0cmFja0RyYXdSZWN0KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBj
b25zdCBTa0JpdG1hcCopOworICAgIHZvaWQgdHJhY2tEcmF3UGF0aChjb25zdCBTa1BhdGgmLCBj
b25zdCBTa1BhaW50Jik7CisgICAgdm9pZCB0cmFja0RyYXdQb2ludHMoU2tDYW52YXM6OlBvaW50
TW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBjb25zdCBTa1BhaW50Jik7Cisg
ICAgdm9pZCB0cmFja0RyYXdCb3VuZGVkKGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHRyYWNrRHJhdyhjb25zdCBTa1JlY3QmLCBjb25zdCBTa1Bh
aW50JiwgYm9vbCBkcmF3c09wYXF1ZSwgYm9vbCBmaWxsc0JvdW5kcyk7CisgICAgdm9pZCB0cmFj
a0RyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYsIGJvb2wgZHJhd3NPcGFxdWUpOworICAgIHZv
aWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNO
b25PcGFxdWUoY29uc3QgU2tSZWN0Jik7CisKKyAgICBTa1JlY3QgbV9vcGFxdWVSZWN0OworICAg
IFBsYXRmb3JtQ29udGV4dFNraWEqIG1fcGxhdGZvcm1Db250ZXh0OworfTsKKworfQorI2VuZGlm
IC8vIE9wYXF1ZVJlZ2lvblNraWFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggYTVl
MTg2ODBkMjBiYmJmNjk4Mjg2NjhlMGViOWNkNmYxZTk4MzBiNS4uZDFlNTI0ZTExYjU1MTJhZmQw
NjRhZjM0ODgwNDJiZWNhNjdlMDFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0x
NzksNiArMTc5LDggQEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbHlB
bHBoYShTa0NvbG9yIGMpIGNvbnN0CiAvLyBEYW5nZXI6IGNhbnZhcyBjYW4gYmUgTlVMTC4KIFBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMqIGNhbnZhcykK
ICAgICA6IG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fb3BhcXVlUmVnaW9uKHRoaXMpCisgICAg
LCBtX3RyYWNrT3BhcXVlUmVnaW9uKGZhbHNlKQogICAgICwgbV9wcmludGluZyhmYWxzZSkKICAg
ICAsIG1fZGVmZXJyZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNl
KQpAQCAtMjY2LDYgKzI2OCwxMSBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBQYXRo
QW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJiBjbGlwUGF0aCkKICAgICBjYW52YXMoKS0+Y2xpcFBh
dGgoY2xpcFBhdGgsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wLCB0cnVlKTsKIH0KIAorY29uc3Qg
U2tCaXRtYXAmIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBwZWRUb0ltYWdlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXA7Cit9CisKIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6cmVzdG9yZSgpCiB7CiAgICAgaWYgKCFtX3N0YXRlLT5tX2ltYWdlQnVm
ZmVyQ2xpcC5lbXB0eSgpKSB7CkBAIC0yODcsNiArMjk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKICAgICBpZiAoZmlsbGNvbG9yTm90VHJhbnNw
YXJlbnQpIHsKICAgICAgICAgc2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICAgICAg
Y2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChy
ZWN0LCBwYWludCk7CiAgICAgfQogCiAgICAgaWYgKG1fc3RhdGUtPm1fc3Ryb2tlU3R5bGUgIT0g
Tm9TdHJva2UKQEAgLTI5OSwxMiArMzA3LDE2IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiAKICAgICAgICAgU2tSZWN0IHRvcEJvcmRlciA9IHsgcmVj
dC5mTGVmdCwgcmVjdC5mVG9wLCByZWN0LmZSaWdodCwgcmVjdC5mVG9wICsgMSB9OwogICAgICAg
ICBjYW52YXMoKS0+ZHJhd1JlY3QodG9wQm9yZGVyLCBwYWludCk7CisgICAgICAgIHRyYWNrRHJh
d1JlY3QodG9wQm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCBib3R0b21Cb3JkZXIgPSB7
IHJlY3QuZkxlZnQsIHJlY3QuZkJvdHRvbSAtIDEsIHJlY3QuZlJpZ2h0LCByZWN0LmZCb3R0b20g
fTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOworICAg
ICAgICB0cmFja0RyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3Qg
bGVmdEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wICsgMSwgcmVjdC5mTGVmdCArIDEs
IHJlY3QuZkJvdHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KGxlZnRCb3Jk
ZXIsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CiAg
ICAgICAgIFNrUmVjdCByaWdodEJvcmRlciA9IHsgcmVjdC5mUmlnaHQgLSAxLCByZWN0LmZUb3Ag
KyAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIC0gMSB9OwogICAgICAgICBjYW52YXMoKS0+
ZHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChyaWdo
dEJvcmRlciwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtNTM5LDYgKzU1MSw3IEBAIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6cGFpbnRTa1BhaW50KGNvbnN0IFNrUmVjdCYgcmVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50KQog
ewogICAgIG1fY2FudmFzLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CisgICAgdHJhY2tEcmF3UmVj
dChyZWN0LCBwYWludCk7CiB9CiAKIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpiaXRtYXAoKSBjb25zdApAQCAtNTk3LDQgKzYxMCwyOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQog
ICAgIG1fZ3B1Q29udGV4dCA9IGNvbnRleHQ7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6dHJhY2tEcmF3UmVjdChjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50
LCBjb25zdCBTa0JpdG1hcCogYml0bWFwKQoreworICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9u
KQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi50cmFja0RyYXdSZWN0KHJlY3QsIHBhaW50LCBiaXRt
YXApOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJhd1BhdGgoY29uc3Qg
U2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAobV90cmFja09w
YXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24udHJhY2tEcmF3UGF0aChwYXRoLCBw
YWludCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tEcmF3UG9pbnRzKFNr
Q2FudmFzOjpQb2ludE1vZGUgbW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludCBwb2lu
dHNbXSwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdp
b24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9uLnRyYWNrRHJhd1BvaW50cyhtb2RlLCBudW1Qb2lu
dHMsIHBvaW50cywgcGFpbnQpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNr
RHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sK
KyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24udHJh
Y2tEcmF3Qm91bmRlZChyZWN0LCBwYWludCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggN2RjZmJlMmUzN2ZjMWM0MjdkZGU3ZmIzZjYwMzEx
YmUyNzQ5ODIxMy4uNDQyNWQ1M2FjMmVjYzlhOGE1M2U1ZTYyNGJmMDAzODJiYWRiNDRmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTMzLDEyICszMywxMCBAQAogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJPcGFx
dWVSZWdpb25Ta2lhLmgiCiAKLSNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrRGFz
aFBhdGhFZmZlY3QuaCIKICNpbmNsdWRlICJTa0RyYXdMb29wZXIuaCIKLSNpbmNsdWRlICJTa1Bh
aW50LmgiCi0jaW5jbHVkZSAiU2tQYXRoLmgiCiAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTk4LDYgKzk2LDggQEAgcHVibGljOgogICAgIC8vIE5PVEU6IHxpbWFnZUJ1ZmZlcnwgbWF5
IGJlIGRlbGV0ZWQgYmVmb3JlIHRoZSB8cmVzdG9yZXwgaXMgaW52b2tlZC4KICAgICB2b2lkIGJl
Z2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZl
ciopOwogICAgIHZvaWQgY2xpcFBhdGhBbnRpQWxpYXNlZChjb25zdCBTa1BhdGgmKTsKKyAgICAv
LyBJZiBub24tZW1wdHksIHRoZSBsYXllciBpcyBjbGlwcGVkIHRvIHRoZSBiaXRtYXAuCisgICAg
Y29uc3QgU2tCaXRtYXAmIGNsaXBwZWRUb0ltYWdlKCkgY29uc3Q7CiAKICAgICAvLyBTZXRzIHVw
IHRoZSBjb21tb24gZmxhZ3Mgb24gYSBwYWludCBmb3IgYW50aWFsaWFzaW5nLCBlZmZlY3RzLCBl
dGMuCiAgICAgLy8gVGhpcyBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieSBzZXR1cFBhaW50RmlsbCBh
bmQgc2V0dXBQYWludFN0cm9rZSwgYnV0CkBAIC0xODcsNiArMTg3LDE4IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmVycmVkOyB9CiAgICAgdm9p
ZCBzZXREZWZlcnJlZChib29sIGRlZmVycmVkKSB7IG1fZGVmZXJyZWQgPSBkZWZlcnJlZDsgfQog
CisgICAgdm9pZCBzZXRUcmFja09wYXF1ZVJlZ2lvbihib29sIHRyYWNrKSB7IG1fdHJhY2tPcGFx
dWVSZWdpb24gPSB0cmFjazsgfQorCisgICAgLy8gVGhpcyB3aWxsIGJlIGFuIGVtcHR5IHJlZ2lv
biB1bmxlc3MgdHJhY2tpbmcgaXMgZW5hYmxlZC4KKyAgICBjb25zdCBPcGFxdWVSZWdpb25Ta2lh
JiBvcGFxdWVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlZ2lvbjsgfQorCisgICAg
Ly8gQWZ0ZXIgZHJhd2luZyBpbiB0aGUgY29udGV4dCdzIGNhbnZhcywgdXNlIHRoZXNlIGZ1bmN0
aW9ucyB0byBub3RpZnkgdGhlIGNvbnRleHQgc28gaXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUgcmVn
aW9uLgorICAgIHZvaWQgdHJhY2tEcmF3UmVjdChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50
JiwgY29uc3QgU2tCaXRtYXAqID0gMCk7CisgICAgdm9pZCB0cmFja0RyYXdQYXRoKGNvbnN0IFNr
UGF0aCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIHRyYWNrRHJhd1BvaW50cyhTa0NhbnZh
czo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50W10sIGNvbnN0IFNrUGFp
bnQmKTsKKyAgICAvLyBGb3IgZHJhd2luZyBvcGVyYXRpb25zIHRoYXQgZG8gbm90IGZpbGwgdGhl
IGVudGlyZSByZWN0LgorICAgIHZvaWQgdHJhY2tEcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmLCBj
b25zdCBTa1BhaW50Jik7CisKIHByaXZhdGU6CiAgICAgLy8gVXNlZCB3aGVuIHJlc3RvcmluZyBh
bmQgdGhlIHN0YXRlIGhhcyBhbiBpbWFnZSBjbGlwLiBPbmx5IHNob3dzIHRoZSBwaXhlbHMgaW4K
ICAgICAvLyBtX2NhbnZhcyB0aGF0IGFyZSBhbHNvIGluIGltYWdlQnVmZmVyLgpAQCAtMjEwLDYg
KzIyMiwxMCBAQCBwcml2YXRlOgogICAgIC8vIG1TdGF0ZVN0YWNrLmJhY2soKS4KICAgICBTdGF0
ZSogbV9zdGF0ZTsKIAorICAgIC8vIFRyYWNrcyB0aGUgcmVnaW9uIHBhaW50ZWQgb3BhcXVlIHZp
YSB0aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIE9wYXF1ZVJlZ2lvblNraWEgbV9vcGFxdWVSZWdp
b247CisgICAgYm9vbCBtX3RyYWNrT3BhcXVlUmVnaW9uOworCiAgICAgLy8gU3RvcmVzIGltYWdl
IHNpemVzIGZvciBhIGhpbnQgdG8gY29tcHV0ZSBpbWFnZSByZXNhbXBsaW5nIG1vZGVzLgogICAg
IC8vIFZhbHVlcyBhcmUgdXNlZCBpbiBJbWFnZVNraWEuY3BwCiAgICAgSW50U2l6ZSBtX2ltYWdl
UmVzYW1wbGluZ0hpbnRTcmNTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
Y2Y5YzQxZWUzZDE3MTM2NjgyYzE1ODVjMjdmN2IwY2M4OGFkZWE3NC4uMDk0Yzg2NDk1MmM2MmZh
ZDdmZDVkYzA1YjdjNjcyNzRmZWJkZWVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC0xMTcsNiArMTE3LDcgQEAKICAgICAgICAgICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2Zp
bGVzJzogWwogICAgICAgICAgICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAog
ICAgICAgICAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAor
ICAgICAgICAgICAgICAgICAgICAndGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwJywK
ICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICBbJ09TPT0i
d2luIicsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZv
cm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0
Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM1ODg1Y2Q2MjE4MzYwZWVlMjQz
ZTEwMzliYTY4YzUwNTY1YWU0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCkBAIC0wLDAgKzEsNDEzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKKyNkZWZpbmUgRVhQRUNU
X0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLmZMZWZ0LCBiLmZMZWZ0KTsgXAorICAg
IEVYUEVDVF9FUShhLmZSaWdodCwgYi5mUmlnaHQpOyBcCisgICAgRVhQRUNUX0VRKGEuZlRvcCwg
Yi5mVG9wKTsgXAorICAgIEVYUEVDVF9FUShhLmZCb3R0b20sIGIuZkJvdHRvbSk7IFwKKworI2Rl
ZmluZSBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgd2lkdGgsIGhlaWdodCwgb3BhcXVlUmVj
dCkgXAorICAgIHsgfSAvLyBGSVhNRTogRW5hYmxlIHRoaXMgdGVzdCB3aGVuIFNraWEgYWN0dWFs
bHkgZ2V0cyB0aGUgcGl4ZWxzIHJpZ2h0LgorLy8gIGZvciAoaW50IHkgPSBTa1NjYWxhckNlaWwo
b3BhcXVlUmVjdC5mVG9wKTsgeSA8IFNrU2NhbGFyRmxvb3Iob3BhcXVlUmVjdC5mQm90dG9tKTsg
Kyt5KQorLy8gICAgICBmb3IgKGludCB4ID0gU2tTY2FsYXJDZWlsKG9wYXF1ZVJlY3QuZkxlZnQp
OyB4IDwgU2tTY2FsYXJGbG9vcihvcGFxdWVSZWN0LmZSaWdodCk7ICsreCkgeworLy8gICAgICAg
ICAgaW50IGkgPSB4ICsgeSAqIHdpZHRoOworLy8gICAgICAgICAgaW50IGFscGhhID0gcGl4ZWxz
W2ldID4+IDI0OworLy8gICAgICAgICAgRVhQRUNUX0VRKDI1NSwgYWxwaGEpOworLy8gICAgICB9
CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlVGVzdCkKK3sKKyAg
ICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICB1aW50MzJfdCogcGl4ZWxzID0gc3RhdGljX2Nh
c3Q8dWludDMyX3QqPihtYWxsb2MoNDAwKjQwMCo0KSk7CisgICAgYml0bWFwLnNldFBpeGVscyhw
aXhlbHMpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250
ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNl
dFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZw
bGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEu
MGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNr
UmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAxMCs5MCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCA0
MDAsIDQwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVQbHVzTGlnaHRlcik7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlTFRSQigxMCwgMTAsIDEwKzkwLCAxMCs5MCksIHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhl
bHMsIDQwMCwgNDAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBvcGFxdWUs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBp
eGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7
CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5MCksIGFscGhh
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VR
X1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigxMCwgMTAsIDEwKzg5LCAxMCs5MCksIHBsYXRmb3JtQ29u
dGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChw
aXhlbHMsIDQwMCwgNDAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOCwgOCwgMywgOTApLCBvcGFxdWUs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU91dCk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigxMSwgMTAsIDExKzg4LCAxMCs5MCksIHBsYXRmb3JtQ29u
dGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChw
aXhlbHMsIDQwMCwgNDAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMzAsIDMwLCAyOTAsIDI5MCksIG9w
YXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxT
X01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg0MCwgMjAsIDI5MCwg
NTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAsIDMwLCAzMCsyOTAsIDMwKzI5
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChwaXhlbHMsIDQwMCwgNDAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEw
LCAzOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VJ
bik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwgMzAsIDMwKzI5MCwg
MzArMjkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBF
WFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgx
MCwgMTAsIDM5MCwgNTApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgRVhQRUNU
X0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKHBpeGVscywgNDAwLCA0MDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDM5MCwgNTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
IEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAsIDEwLCAzMCsyOTAsIDEwKzMxMCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChwaXhlbHMsIDQwMCwgNDAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworCisgICAgZnJlZShwaXhlbHMpOworfQorCitURVNUKFBsYXRmb3JtQ29u
dGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUxpbmVUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1h
cDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAw
LCAyMDApOworICAgIHVpbnQzMl90KiBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KG1h
bGxvYygyMDAqMjAwKjQpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAgU2tD
YW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3Jt
Q29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdp
b24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7
CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3Ig
YWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFu
dGlhbGlhcyhmYWxzZSk7CisgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KDApOworICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDQpOworICAgIGNvbnRleHQuc2V0TGluZUNhcChTcXVhcmVD
YXApOworICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNr
UmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIw
MCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKKworICAgIGNvbnRl
eHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgMCksIEludFBvaW50
KDEwMCwgMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNr
UmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIw
MCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRl
eHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9p
bnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNU
KFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAs
IDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgMTApLCBJbnRQ
b2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIw
MCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
Y29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JT
cGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMSksIElu
dFBvaW50KDEwMCwgMTEpKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxNCwgOTAsIDg2KSwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywg
MjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAg
ICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VY
WVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CisKKyAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDApLCBJbnRQb2ludCgxMDAsIDApKTsK
KyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VY
WVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3Vs
ZEFudGlhbGlhcyhmYWxzZSk7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJh
d0xpbmUoSW50UG9pbnQoMCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkw
LCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQ
RUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1
ZSk7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQo
MCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihh
bHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2lu
dCgwLCAxMSksIEludFBvaW50KDEwMCwgMTEpKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxNCwgOTAsIDg2KSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBmcmVlKHBpeGVscyk7Cit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QsIHRyYWNrT3BhcXVlUGF0aFRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAg
IGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAyMDAsIDIwMCk7
CisgICAgdWludDMyX3QqIHBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4obWFsbG9jKDIw
MCoyMDAqNCkpOworICAgIGJpdG1hcC5zZXRQaXhlbHMocGl4ZWxzKTsKKyAgICBTa0NhbnZhcyBj
YW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0
KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVl
KTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAg
IENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgw
LjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwg
OTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBF
WFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhm
YWxzZSk7CisgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KDEpOworICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKDUpOworICAgIGNvbnRleHQuc2V0TGluZUNhcChTcXVhcmVDYXApOworICAg
IGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGNvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKKworICAgIFBhdGggcGF0aDsKKwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIDApKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9h
dFBvaW50KDEwMCwgMCkpOworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhl
bHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAxMCkpOwor
ICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAxMykpOworICAgIGNvbnRleHQuZmls
bFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAs
IDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYXRoLm1vdmVU
byhGbG9hdFBvaW50KDAsIDEwKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAs
IDEzKSk7CisgICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChT
a1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMywgOTAsIDg3KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAy
MDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgcGF0aC5j
bGVhcigpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMTQpKTsKKyAgICBwYXRoLmFk
ZExpbmVUbyhGbG9hdFBvaW50KDEwMCwgMTApKTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgp
OworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDE0LCA5MCwgODYpLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBmcmVlKHBpeGVscyk7Cit9CisK
K1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlSW1hZ2VUZXN0KQorewor
ICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAgIHVpbnQzMl90KiBwaXhlbHMgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdCo+KG1hbGxvYygyMDAqMjAwKjQpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxz
KHBpeGVscyk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNv
bnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
JnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwg
MS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBT
a0JpdG1hcCBkcmF3Qml0bWFwOworICAgIGRyYXdCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgMTAsIDEwKTsKKyAgICBkcmF3Qml0bWFwLmFsbG9jUGl4ZWxzKCk7
CisKKyAgICBkcmF3Qml0bWFwLnNldElzT3BhcXVlKHRydWUpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTAqMTA7ICsraSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3QqPihkcmF3Qml0
bWFwLmdldFBpeGVscygpKVtpXSA9IDB4RkZGRkZGRkY7CisgICAgUmVmUHRyPEJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhPiBvcGFxdWVJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
OjpjcmVhdGUoZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKG9wYXF1ZUltYWdl
LT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAgIGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUo
ZmFsc2UpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAqMTA7ICsraSkKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDMyX3QqPihkcmF3Qml0bWFwLmdldFBpeGVscygpKVtpXSA9IDB4MDAwMDAw
MDA7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBhbHBoYUltYWdlID0g
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZShkcmF3Qml0bWFwLCB0cnVlKTsKKyAg
ICBFWFBFQ1RfVFJVRShhbHBoYUltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAw
LCAyMDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBj
b250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMCwgMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAs
IDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUlt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29u
dGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChw
aXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworCisgICAgY29udGV4dC5kcmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIEludFBvaW50KDUsIDUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1h
a2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgY29udGV4dC5kcmF3SW1h
Z2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoNSwgNSkp
OworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgxMCwgMTApKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAw
LCAyMDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgY29u
dGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwg
MTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7Cisg
ICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJ
bWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMjAsIDEwKSwgQ29tcG9z
aXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDIw
LCA5MCwgODApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAg
IEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRl
eHQuc2V0QWxwaGEoMC41KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMjUsIDE1KSwgQ29tcG9zaXRlU291cmNl
SW4pOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6
TWFrZVhZV0goMTAsIDI1LCA5MCwgNzUpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1h
a2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBpeGVscywgMjAwLCAyMDAsIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdJ
bWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgxMCwg
MjApLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtl
WFlXSCgyMCwgMTAsIDgwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7
CisgICAgY29udGV4dC5zZXRBbHBoYSgwLjUpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9wYXF1
ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgxNSwgMjUpLCBDb21w
b3NpdGVTb3VyY2VJbik7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlWFlXSCgyNSwgMTAsIDc1LCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIw
MCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
ZnJlZShwaXhlbHMpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09w
YXF1ZU92YWxUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29u
ZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAgIHVpbnQzMl90
KiBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KG1hbGxvYygyMDAqMjAwKjQpKTsKKyAg
ICBiaXRtYXAuc2V0UGl4ZWxzKHBpeGVscyk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7
CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUo
MS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4w
ZiwgMC4wZik7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDAsIDAsIDAs
IDApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVD
VF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwg
MTAsIDkwLCA5MCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMCwgMCwg
MCwgMCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQ
RUNUX1BJWEVMU19NQVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAs
IDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwg
OTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVD
VF9QSVhFTFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZVNvdXJjZUluKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNl
KTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgNTAsIDMwKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19N
QVRDSChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwgMTAsIDMwLCA1MCkp
OworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goNDAsIDEwLCA2MCwgOTApLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0gocGl4ZWxzLCAyMDAsIDIwMCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworCisg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJlY3QoMTAsIDEwLCA1MCwgMzApKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDQwLCA0MSwgNjAsIDU5KSwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKHBp
eGVscywgMjAwLCAyMDAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7
CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDIwLCAxMCwgMzAsIDUwKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCg1MSwgNDEsIDQ5LCA1OSksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChwaXhlbHMsIDIwMCwgMjAwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworCisgICAgZnJlZShwaXhlbHMpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122098</attachid>
            <date>2012-01-11 14:28:32 -0800</date>
            <delta_ts>2012-01-11 16:19:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120111172831.patch</filename>
            <type>text/plain</type>
            <size>55013</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQyNmYxOTIzZmIxODY5
NWE1NDM2ZjI5ZDVjMTlhNDZmMzJjMjQzYS4uMTM4NzU2MGE4OTk1ZTcwZWY1MzVhNjZhMGU3YTgw
YWRmZWE1OGQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHM6IFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXI6Om9wYXF1ZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4
UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50U2tCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvT3BhcXVlUmVnaW9uU2tpYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVl
UmVnaW9uU2tpYTo6T3BhcXVlUmVnaW9uU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVS
ZWdpb25Ta2lhOjp+T3BhcXVlUmVnaW9uU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjp4ZmVybW9k
ZUlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OnhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3Bh
cXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVS
ZWdpb25Ta2lhOjp0cmFja0RyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lv
blNraWE6OnRyYWNrRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25T
a2lhOjp0cmFja0RyYXdCb3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNr
aWE6OnRyYWNrRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjp0cmFj
a0RyYXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6bWFy
a1JlY3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjptYXJr
UmVjdEFzTm9uT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1
ZVJlZ2lvblNraWEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lh
Ojphc1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0
Zm9ybUNvbnRleHRTa2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6
OmNsaXBwZWRUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnBhaW50
U2tQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFja0Ry
YXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJh
d1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tEcmF3
UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJh
d0JvdW5kZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0VHJh
Y2tPcGFxdWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
b3BhcXVlUmVnaW9uKToKKwogMjAxMi0wMS0xMSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3Nl
bnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bVGV4bWFwXSBMYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9tYXNrcy9tYXNrZWQtYW5jZXN0b3IgZG9lcyBub3QgcmVuZGVyIGNvcnJlY3RseS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzUzYzVjNzQ3OGU2ZWY2MDVmNGMzNDlmOGZl
MDVkZWQxNTA4ZTY1MS4uZmM0MmQ3YTYyOWMxOTE4ZTlhYjNlN2MzOGFjNDQxOWQ1Y2Y5ODM0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMS0wOSAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbc2tpYV0gVHJh
Y2sgYSBzaW1wbGUgb3BhcXVlIGFyZWEgd2hlbiBwYWludGluZyB2aWEgUGxhdGZvcm1Db250ZXh0
U2tpYSBhbmQgc2F2ZSBpbiBMYXllclRleHR1cmVVcGRhdGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM1MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVz
dHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRFU1QpOgorCiAyMDEyLTAxLTEwICBEbWl0cnkgTG9tb3YgIDxkc2xvbW92QGdvb2dsZS5jb20+
CiAKICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgb2Jzb2xldGUgcmVmZXJlbmNlcyB0byBXZWJX
b3JrZXIgY2xhc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWNiMzRlNWVhYWMzNzIxZTU0NGRkOWQ2
MzhkOTQ4NGMwYzFlNzBjYi4uNDEyMTc2OGJlMTBjZDNkNmJlZmU5ZGVkY2M4NzhmM2M5Njc1NWMx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzkyNiw2ICszOTI2LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaAppbmRleCAzNGRiNzJhYTQ1MmNlYzI2YTM3NjIyZDYzN2ZkOGQxYWY0
NGI0ZGIzLi5hODU4NzkzZDFlOGM2MmJhOWY5YTljMmViODRjNzZmYWQ4YWYzYTgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC03Miw2ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAg
Ly8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2
ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhl
bEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiAvKiBjb250ZW50UmVjdCAqLywgY29uc3QgSW50
U2l6ZSYgLyogdGlsZVNpemUgKi8sIGludCAvKiBib3JkZXJUZXhlbHMgKi8sIGZsb2F0IC8qIGNv
bnRlbnRzU2NhbGUgKi8pIHsgfQorCisgICAgY29uc3QgSW50UmVjdCYgb3BhcXVlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVjdDsgfQorCitwcm90ZWN0ZWQ6CisgICAgSW50UmVjdCBt
X29wYXF1ZVJlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDUz
N2UxMzdlOGQ4ZWM1MThiOTM0YWE1Y2QyZDcwMGM3NGIxOWZlNGIuLmE2NDQ1NDhjNDQ3ZGQ2YThk
YzNjNWY4ZjYwMjI5NmQ0YzY5NmEyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC01Myw5ICs1MywxOCBAQCB2b2lk
IFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UgogICAgIFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVn
aW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwog
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CiAgICAgcGxh
dGZvcm1Db250ZXh0LnNldERlZmVycmVkKHRydWUpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
cmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOwogICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0
LCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSk7CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGlu
ZygpOworCisgICAgLy8gU2F2ZSB0aGUgbGFyZ2VzdCBJbnRSZWN0IGVuY2xvc2VkIGJ5IHRoZSBT
a1JlY3QuCisgICAgY29uc3QgU2tSZWN0JiByZWN0ID0gcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpOworICAgIGludCBsZWZ0ID0gU2tTY2FsYXJDZWlsKHJlY3QuZkxlZnQp
OworICAgIGludCB0b3AgPSBTa1NjYWxhckNlaWwocmVjdC5mVG9wKTsKKyAgICBpbnQgcmlnaHQg
PSBTa1NjYWxhckZsb29yKHJlY3QuZlJpZ2h0KTsKKyAgICBpbnQgYm90dG9tID0gU2tTY2FsYXJG
bG9vcihyZWN0LmZCb3R0b20pOworICAgIG1fb3BhcXVlUmVjdCA9IEludFJlY3QobGVmdCwgdG9w
LCByaWdodC1sZWZ0LCBib3R0b20tdG9wKTsKIH0KIAogdm9pZCBTa1BpY3R1cmVDYW52YXNMYXll
clRleHR1cmVVcGRhdGVyOjpkcmF3UGljdHVyZShTa0NhbnZhcyogY2FudmFzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAKaW5kZXggZGIzNDM2MTVmYjg4NDBmYzM4NmI2NDZmYjJkMDU3YTRkM2Fl
NjkzNi4uNzdmODhkMzJmMzU0MTU0ZDY2N2M4YTFkMTcyZGU3ZjdlMjFmODcwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzQ29udGV4dFNraWEuY3BwCkBAIC0zMzksNiArMzM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFpbnQuc2V0WGZlcm1vZGVN
b2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tE
cmF3UmVjdChyLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTQ3MywxMSArNDc0LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLAogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldEFudGlB
bGlhcyhzaG91bGRBbnRpYWxpYXMpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdQ
YXRoKHBhdGgsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7
CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1
cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTUxMywx
MSArNTE2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRS
ZWN0JiBlbGlwc2VSZWN0KQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCkt
PnRyYWNrRHJhd0JvdW5kZWQocmVjdCwgcGFpbnQpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
IT0gTm9TdHJva2UpIHsKICAgICAgICAgcGFpbnQucmVzZXQoKTsKICAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsICZyZWN0LCAwKTsKICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7Cisg
ICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsK
ICAgICB9CiB9CiAKQEAgLTU4NCw2ICs1ODksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludAog
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiAgICAg
ZHJhd091dGVyUGF0aChjYW52YXMsIHBhdGgsIHBhaW50LCB3aWR0aCk7CiAgICAgZHJhd0lubmVy
UGF0aChjYW52YXMsIHBhdGgsIHBhaW50LCB3aWR0aCk7CisKKyAgICBwYWludC5zZXRTdHJva2VX
aWR0aCgxKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBwYWlu
dCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KQEAgLTYzMSwx
MiArNjM5LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2lu
dCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAgICBmaWxsUGFpbnQuc2V0
Q29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT50cmFja0RyYXdSZWN0KHIxLCBmaWxsUGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+dHJhY2tEcmF3UmVjdChyMiwgZmlsbFBhaW50KTsKICAgICB9CiAKICAgICBhZGp1
c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCB3aWR0aCwgcGVuU3R5bGUpOwogICAgIFNr
UG9pbnQgcHRzWzJdID0geyAoU2tQb2ludClwMSwgKFNrUG9pbnQpcDIgfTsKIAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50
TW9kZSwgMiwgcHRzLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1Bv
aW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBv
aW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKQEAgLTcx
Miw2ICs3MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLAogICAgICAgICAgICAgIG9yaWdp
blggKyBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHdpZHRoKSwKICAgICAgICAgICAgICBvcmlnaW5Z
ICsgU2tJbnRUb1NjYWxhcihtaXNzcGVsbEJpdG1hcC0+aGVpZ2h0KCkpKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+dHJhY2tEcmF3UmVjdChyZWN0LCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcHQsCkBAIC03MzYs
NiArNzQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwdCwKICAgICAvLyBUZXh0IGxpbmVzIGFyZSBkcmF3biB1c2luZyB0aGUgc3Ry
b2tlIGNvbG9yLgogICAgIHBhaW50LnNldENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLT5lZmZlY3Rp
dmVTdHJva2VDb2xvcigpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdS
ZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UmVjdChyLCBw
YWludCk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBi
b3JkZXIuCkBAIC03NzAsNiArNzgzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGhUb0ZpbGwpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFp
bnRGb3JGaWxsaW5nKCZwYWludCk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3
UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC03ODgsNiArODAyLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBTa1BhaW50IHBhaW50
OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAg
IHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIsIHBhaW50KTsKIAogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5yZXN0b3JlKCk7CiB9CkBAIC04MTYsNiArODMxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclMKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludENvbW1vbigm
cGFpbnQpOwogICAgIHBhaW50LnNldENvbG9yKGNvbG9yLnJnYigpKTsKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwKQEAgLTg1NSw2ICs4NzEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QsCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7
CiAgICAgcGFpbnQuc2V0Q29sb3IoY29sb3IucmdiKCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgp
LT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKQEAgLTExMzksNiArMTE1Niw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUs
IGludCBhbmdsZVNwYW4pCiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkp
CiAgICAgICAgIHJldHVybjsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQ
YXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChw
YXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGhUb1N0cm9rZSkKQEAgLTExNTMsNiArMTE3MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb1N0cm9rZSkKICAgICBTa1BhaW50
IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBh
aW50LCAwLCAwKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBh
dGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBw
YWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQpAQCAtMTE3Myw5ICsxMTkyLDEwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQogICAgIGJvb2wgdmFsaWRXID0gci53aWR0aCgpID4gMDsKICAgICBib29sIHZh
bGlkSCA9IHIuaGVpZ2h0KCkgPiAwOwogICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgaWYgKHZhbGlkVyAmJiB2YWxpZEgpCisgICAgaWYgKHZh
bGlkVyAmJiB2YWxpZEgpIHsKICAgICAgICAgY2FudmFzLT5kcmF3UmVjdChyLCBwYWludCk7Ci0g
ICAgZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgeworICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+dHJhY2tEcmF3UmVjdChyLCBwYWludCk7CisgICAgfSBlbHNlIGlmICh2YWxpZFcgfHwgdmFs
aWRIKSB7CiAgICAgICAgIC8vIHdlIGFyZSBleHBlY3RlZCB0byByZXNwZWN0IHRoZSBsaW5lSm9p
biwgc28gd2UgY2FuJ3QganVzdCBjYWxsCiAgICAgICAgIC8vIGRyYXdMaW5lIC0tIHdlIGhhdmUg
dG8gY3JlYXRlIGEgcGF0aCB0aGF0IGRvdWJsZXMgYmFjayBvbiBpdHNlbGYuCiAgICAgICAgIFNr
UGF0aCBwYXRoOwpAQCAtMTE4Myw2ICsxMjAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAg
IHBhdGgubGluZVRvKHIuZlJpZ2h0LCByLmZCb3R0b20pOwogICAgICAgICBwYXRoLmNsb3NlKCk7
CiAgICAgICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+dHJhY2tEcmF3UGF0aChwYXRoLCBwYWludCk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAK
aW5kZXggZTY2ZGJhYjQzNTBkNDVkMzQzZWYxZDNmZjU2MjFhODhhMzk3OWVjNi4uNDFkZTYxNWRh
ZjFiNmNkOTc3ZTY5MDE3Y2ZjODk2ZjQ4MTMxZjM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtMjQ4LDYgKzI0OCw3
IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgICAgIC8vIHdlIGRvbid0IHNlbmQgZXh0
cmEgcGl4ZWxzLgogICAgICAgICBjYW52YXMtPmRyYXdCaXRtYXBSZWN0KGJpdG1hcC5iaXRtYXAo
KSwgJnNyY1JlY3QsIGRlc3RSZWN0LCAmcGFpbnQpOwogICAgIH0KKyAgICBwbGF0Zm9ybUNvbnRl
eHQtPnRyYWNrRHJhd1JlY3QoZGVzdFJlY3QsIHBhaW50LCAmYml0bWFwLmJpdG1hcCgpKTsKIH0K
IAogLy8gVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRoIHRoZSBnaXZlbiBtYXRy
aXguIFVzZWQgdG8gc2VlIGhvdyBiaWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4
MWNkMDEyODdjMTk1Zjc0NDFiMjM0ODk5ZWNjNThjMzI0NTM2NGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEu
Y3BwCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk9w
YXF1ZVJlZ2lvblNraWEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKwor
I2luY2x1ZGUgIlNrU2hhZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3BhcXVlUmVn
aW9uU2tpYTo6T3BhcXVlUmVnaW9uU2tpYShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNv
bnRleHQpCisgICAgOiBtX29wYXF1ZVJlY3QoU2tSZWN0OjpNYWtlRW1wdHkoKSkKKyAgICAsIG1f
cGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKK3sKK30KKworT3BhcXVlUmVnaW9uU2tp
YTo6fk9wYXF1ZVJlZ2lvblNraWEoKQoreworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHhm
ZXJtb2RlIHdpbGwgZm9yY2UgdGhlIGRzdCB0byBiZSBvcGFxdWUsIHJlZ2FyZGxlc3Mgb2YgdGhl
IGN1cnJlbnQgZHN0Lgorc3RhdGljIGlubGluZSBib29sIHhmZXJtb2RlSXNPcGFxdWUoY29uc3Qg
U2tQYWludCYgcGFpbnQsIGJvb2wgc3JjSXNPcGFxdWUpCit7CisgICAgaWYgKCFzcmNJc09wYXF1
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2tYZmVybW9kZSogeGZlcm1vZGUgPSBw
YWludC5nZXRYZmVybW9kZSgpOworICAgIGlmICgheGZlcm1vZGUpCisgICAgICAgIHJldHVybiB0
cnVlOyAvLyBkZWZhdWx0IHRvIGtTcmNPdmVyX01vZGUKKyAgICBTa1hmZXJtb2RlOjpNb2RlIG1v
ZGU7CisgICAgaWYgKCF4ZmVybW9kZS0+YXNNb2RlKCZtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjX01v
ZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTogLy8gc291
cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3Zlcl9N
b2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6
OmtEc3RBVG9wX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9k
ZTogLy8gc291cmNlK2Rlc3QKKyAgICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJj
ZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtDbGVhcl9Nb2RlOiAvLyAwCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0X01v
ZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNJbl9Nb2RlOiAvLyBzb3VyY2Ug
KiBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0SW5fTW9kZTogLy8gZGVzdCAqIHNvdXJj
ZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY091dF9Nb2RlOiAvLyBzb3VyY2UgKiAoMS1kZXN0
KQorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE91dF9Nb2RlOiAvLyBkZXN0ICogKDEtc291cmNl
KQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0FUb3BfTW9kZTogLy8gZGVzdAorICAgIGNhc2Ug
U2tYZmVybW9kZTo6a1hvcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gMiooc291cmNlKmRlc3Qp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgeGZlcm1vZGUgd2lsbCBrZWVwIHRoZSBkc3Qgb3BhcXVlLCBhc3N1bWluZyB0aGUgZHN0IGlz
IGFscmVhZHkgb3BhcXVlLgorc3RhdGljIGlubGluZSBib29sIHhmZXJtb2RlUHJlc2VydmVzT3Bh
cXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBib29sIHNyY0lzT3BhcXVlKQoreworICAgIFNrWGZl
cm1vZGUqIHhmZXJtb2RlID0gcGFpbnQuZ2V0WGZlcm1vZGUoKTsKKyAgICBpZiAoIXhmZXJtb2Rl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZGVmYXVsdCB0byBrU3JjT3Zlcl9Nb2RlCisgICAg
U2tYZmVybW9kZTo6TW9kZSBtb2RlOworICAgIGlmICgheGZlcm1vZGUtPmFzTW9kZSgmbW9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
U2tYZmVybW9kZTo6a0RzdF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3Jj
T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNrWGZl
cm1vZGU6OmtEc3RPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAg
IGNhc2UgU2tYZmVybW9kZTo6a1NyY0FUb3BfTW9kZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVy
bW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAgICBkZWZhdWx0OiAvLyB0aGUgcmVz
dCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlOiAvLyAwCisgICAgY2FzZSBTa1hm
ZXJtb2RlOjprU3JjT3V0X01vZGU6IC8vIHNvdXJjZSAqICgxLWRlc3QpCisgICAgY2FzZSBTa1hm
ZXJtb2RlOjprRHN0T3V0X01vZGU6IC8vIGRlc3QgKiAoMS1zb3VyY2UpCisgICAgY2FzZSBTa1hm
ZXJtb2RlOjprWG9yX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSAyKihzb3VyY2UqZGVzdCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY19Nb2RlOiAvLyBz
b3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNJbl9Nb2RlOiAvLyBzb3VyY2UgKiBkZXN0
CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0SW5fTW9kZTogLy8gZGVzdCAqIHNvdXJjZQorICAg
IGNhc2UgU2tYZmVybW9kZTo6a0RzdEFUb3BfTW9kZTogLy8gc291cmNlCisgICAgICAgIHJldHVy
biBzcmNJc09wYXF1ZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxz
IHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCitzdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1
ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wg
Y2hlY2tGaWxsT25seSA9IGZhbHNlKQoreworICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhG
RikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY2hlY2tGaWxsT25seSAmJiBwYWlu
dC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYmIHBhaW50LmlzQW50aUFsaWFz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTa1NoYWRlciogc2hhZGVyID0gcGFpbnQu
Z2V0U2hhZGVyKCk7CisgICAgaWYgKHNoYWRlciAmJiAhc2hhZGVyLT5pc09wYXF1ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJpdG1hcCAmJiAhYml0bWFwLT5pc09wYXF1ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgT3Bh
cXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3UmVjdChjb25zdCBTa1JlY3QmIGZpbGxSZWN0LCBjb25z
dCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkKK3sKKyAgICAvLyBBbnkg
c3Ryb2tpbmcgbWF5IHB1dCBhbHBoYSBpbiBwaXhlbHMgZXZlbiBpZiB0aGUgZmlsbGluZyBwYXJ0
IGRvZXMgbm90LgorICAgIGlmIChwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0
eWxlKSB7CisgICAgICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgYml0bWFw
KTsKKyAgICAgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgICAgIGlmICghcGFp
bnQuY2FuQ29tcHV0ZUZhc3RCb3VuZHMoKSkKKyAgICAgICAgICAgIHRyYWNrRHJhd1VuYm91bmRl
ZChwYWludCwgb3BhcXVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTa1JlY3Qgc3Ry
b2tlUmVjdDsKKyAgICAgICAgICAgIHN0cm9rZVJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5k
cyhmaWxsUmVjdCwgJnN0cm9rZVJlY3QpOworICAgICAgICAgICAgdHJhY2tEcmF3KHN0cm9rZVJl
Y3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgY2hlY2tGaWxsT25seSA9IHRydWU7CisgICAgYm9vbCBvcGFxdWUgPSBwYWludElzT3Bh
cXVlKHBhaW50LCBiaXRtYXAsIGNoZWNrRmlsbE9ubHkpOworICAgIGJvb2wgZmlsbHNCb3VuZHMg
PSBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtTdHJva2VfU3R5bGU7CisgICAgdHJhY2tE
cmF3KGZpbGxSZWN0LCBwYWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7Cit9CisKK3ZvaWQgT3Bh
cXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNr
UGFpbnQmIHBhaW50KQoreworICAgIFNrUmVjdCByZWN0OworICAgIGlmIChwYXRoLmlzUmVjdCgm
cmVjdCkpIHsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChyZWN0LCBwYWludCwgMCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQp
OworICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29t
cHV0ZUZhc3RCb3VuZHMoKSkKKyAgICAgICAgdHJhY2tEcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFx
dWUpOworICAgIGVsc2UgeworICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMo
cGF0aC5nZXRCb3VuZHMoKSwgJnJlY3QpOworICAgICAgICB0cmFja0RyYXcocmVjdCwgcGFpbnQs
IG9wYXF1ZSwgZmlsbHNCb3VuZHMpOworICAgIH0KK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
Ojp0cmFja0RyYXdQb2ludHMoU2tDYW52YXM6OlBvaW50TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRz
LCBjb25zdCBTa1BvaW50IHBvaW50c1tdLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBp
ZiAoIW51bVBvaW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tSZWN0IHJlY3Q7CisgICAg
cmVjdC5mTGVmdCA9IHBvaW50c1swXS5mWDsKKyAgICByZWN0LmZSaWdodCA9IHBvaW50c1swXS5m
WCArIDE7CisgICAgcmVjdC5mVG9wID0gcG9pbnRzWzBdLmZZOworICAgIHJlY3QuZkJvdHRvbSA9
IHBvaW50c1swXS5mWSArIDE7CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bVBvaW50czsg
KytpKSB7CisgICAgICAgIHJlY3QuZkxlZnQgPSBzdGQ6Om1pbihyZWN0LmZMZWZ0LCBwb2ludHNb
aV0uZlgpOworICAgICAgICByZWN0LmZSaWdodCA9IHN0ZDo6bWF4KHJlY3QuZlJpZ2h0LCBwb2lu
dHNbaV0uZlggKyAxKTsKKyAgICAgICAgcmVjdC5mVG9wID0gc3RkOjptaW4ocmVjdC5mVG9wLCBw
b2ludHNbaV0uZlkpOworICAgICAgICByZWN0LmZCb3R0b20gPSBzdGQ6Om1heChyZWN0LmZCb3R0
b20sIHBvaW50c1tpXS5mWSArIDEpOworICAgIH0KKworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJ
c09wYXF1ZShwYWludCk7CisgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYg
KCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQorICAgICAgICB0cmFja0RyYXdVbmJvdW5k
ZWQocGFpbnQsIG9wYXF1ZSk7CisgICAgZWxzZSB7CisgICAgICAgIHJlY3QgPSBwYWludC5jb21w
dXRlRmFzdEJvdW5kcyhyZWN0LCAmcmVjdCk7CisgICAgICAgIHRyYWNrRHJhdyhyZWN0LCBwYWlu
dCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNr
aWE6OnRyYWNrRHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiBib3VuZHMsIGNvbnN0IFNrUGFpbnQm
IHBhaW50KQoreworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCk7CisgICAg
Ym9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFz
dEJvdW5kcygpKQorICAgICAgICB0cmFja0RyYXdVbmJvdW5kZWQocGFpbnQsIG9wYXF1ZSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIFNrUmVjdCByZWN0OworICAgICAgICByZWN0ID0gcGFpbnQuY29t
cHV0ZUZhc3RCb3VuZHMoYm91bmRzLCAmcmVjdCk7CisgICAgICAgIHRyYWNrRHJhdyhyZWN0LCBw
YWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2b2lkIE9wYXF1ZVJlZ2lv
blNraWE6OnRyYWNrRHJhdyhjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50
LCBib29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKQoreworICAgIGlmIChmaWxsc0Jv
dW5kcyAmJiB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSkpCisgICAgICAgIG1h
cmtSZWN0QXNPcGFxdWUocmVjdCk7CisgICAgZWxzZSBpZiAoU2tSZWN0OjpJbnRlcnNlY3RzKHJl
Y3QsIG1fb3BhcXVlUmVjdCkgJiYgIXhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBkcmF3
c09wYXF1ZSkpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUocmVjdCk7Cit9CisKK3ZvaWQg
T3BhcXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQmIHBhaW50
LCBib29sIGRyYXdzT3BhcXVlKQoreworICAgIGlmICgheGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUo
cGFpbnQsIGRyYXdzT3BhcXVlKSkgeworICAgICAgICAvLyBXZSBkb24ndCBrbm93IHdoYXQgd2Fz
IGRyYXduIG9uIHNvIGp1c3QgZGVzdHJveSB0aGUga25vd24gb3BhcXVlIGFyZWEuCisgICAgICAg
IG1fb3BhcXVlUmVjdCA9IFNrUmVjdDo6TWFrZUVtcHR5KCk7CisgICAgfQorfQorCit2b2lkIE9w
YXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQorewor
ICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0cmFjayBvZiBhbiBvcGFxdWUgcmVnaW9uIGJ1dCBib3Vu
ZCBpdHMgY29tcGxleGl0eSBhdCBhIGNvbnN0YW50IHNpemUuCisgICAgLy8gV2Uga2VlcCB0cmFj
ayBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgc2VlbiBieSBhcmVhLiBJZiB3ZSBjYW4gYWRkIHRo
ZSBuZXcgcmVjdCB0byB0aGlzCisgICAgLy8gcmVjdGFuZ2xlIHRoZW4gd2UgZG8gdGhhdCwgYXMg
dGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIGluY3JlYXNlIHRoZSBhcmVhIHJldHVybmVkCisg
ICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4aXR5LgorCisgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC0+
Y2xpcHBlZFRvSW1hZ2UoKS5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
b3BhcXVlUmVjdC5jb250YWlucyhyZWN0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZWN0
LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsKKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChyZWN0LmZUb3AgPD0gbV9vcGFxdWVS
ZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAg
ICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID4g
bV9vcGFxdWVSZWN0LmZMZWZ0KQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZMZWZ0ID0gcmVj
dC5mTGVmdDsKKyAgICAgICAgaWYgKHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZSaWdodCAm
JiByZWN0LmZMZWZ0IDwgbV9vcGFxdWVSZWN0LmZSaWdodCkKKyAgICAgICAgICAgIG1fb3BhcXVl
UmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKKyAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0g
bV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQp
IHsKKyAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJv
dHRvbSA+IG1fb3BhcXVlUmVjdC5mVG9wKQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3Ag
PSByZWN0LmZUb3A7CisgICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJv
dHRvbSAmJiByZWN0LmZUb3AgPCBtX29wYXF1ZVJlY3QuZkJvdHRvbSkKKyAgICAgICAgICAgIG1f
b3BhcXVlUmVjdC5mQm90dG9tID0gcmVjdC5mQm90dG9tOworICAgIH0KKworICAgIGxvbmcgb3Bh
cXVlQXJlYSA9IChsb25nKW1fb3BhcXVlUmVjdC53aWR0aCgpICogKGxvbmcpbV9vcGFxdWVSZWN0
LmhlaWdodCgpOworICAgIGxvbmcgYXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJl
Y3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEgPiBvcGFxdWVBcmVhKQorICAgICAgICBtX29wYXF1
ZVJlY3QgPSByZWN0OworfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25P
cGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQoreworICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBhcyBt
dWNoIG9mIHRoZSBjdXJyZW50IG9wYXF1ZSByZWN0YW5nbGUgYXMgd2UgY2FuLCBzbyBmaW5kIHRo
ZSBvbmUgbGFyZ2VzdAorICAgIC8vIHJlY3RhbmdsZSBpbnNpZGUgbV9vcGFxdWVSZWN0IHRoYXQg
ZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggfHJlY3R8LgorCisgICAgaWYgKHJlY3QuY29udGFpbnMo
bV9vcGFxdWVSZWN0KSkgeworICAgICAgICBtX29wYXF1ZVJlY3Quc2V0RW1wdHkoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9v
cGFxdWVSZWN0LmZMZWZ0OworICAgIGludCBkZWx0YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdo
dCAtIHJlY3QuZlJpZ2h0OworICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVl
UmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRvbSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0g
cmVjdC5mQm90dG9tOworCisgICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0
d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBp
bnNpZGUgbV9vcGFxdWVSZWN0LgorICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBsYXJnZXIgb2YgdGhl
IHR3byByZWN0YW5nbGVzIGFib3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVl
UmVjdC4KKyAgICBTa1JlY3QgaG9yaXpvbnRhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICBpZiAoZGVs
dGFUb3AgPiBkZWx0YUJvdHRvbSkKKyAgICAgICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5m
VG9wOworICAgIGVsc2UKKyAgICAgICAgaG9yaXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwor
ICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICBpZiAoZGVsdGFMZWZ0ID4g
ZGVsdGFSaWdodCkKKyAgICAgICAgdmVydGljYWwuZlJpZ2h0ID0gcmVjdC5mTGVmdDsKKyAgICBl
bHNlCisgICAgICAgIHZlcnRpY2FsLmZMZWZ0ID0gcmVjdC5mUmlnaHQ7CisKKyAgICBpZiAoKGxv
bmcpaG9yaXpvbnRhbC53aWR0aCgpICogKGxvbmcpaG9yaXpvbnRhbC5oZWlnaHQoKSA+IChsb25n
KXZlcnRpY2FsLndpZHRoKCkgKiAobG9uZyl2ZXJ0aWNhbC5oZWlnaHQoKSkKKyAgICAgICAgbV9v
cGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKKyAgICBlbHNlCisgICAgICAgIG1fb3BhcXVlUmVjdCA9
IHZlcnRpY2FsOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUwNjM1MzA4MWE3YWJhY2M0ODRlYzNjYTdhMWQ4MzEyNDFmODM3NTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1
ZVJlZ2lvblNraWEuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3BhcXVlUmVnaW9uU2tpYV9o
CisjZGVmaW5lIE9wYXF1ZVJlZ2lvblNraWFfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNp
bmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1Bv
aW50LmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IFBsYXRmb3JtQ29udGV4dFNraWE7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRo
aXMgY2xhc3MgaXMgYW4gZW5jYXBzdWxhdGlvbiBvZiBmdW5jdGlvbmFsaXR5IGZvciBQbGF0Zm9y
bUNvbnRleHRTa2lhLCBhbmQgaXRzIG1ldGhvZHMgYXJlIG1pcnJvcmVkCisvLyB0aGVyZSBmb3Ig
dGhlIG91dHNpZGUgd29ybGQuIEl0IHRyYWNrcyBwYWludHMgYW5kIGNvbXB1dGVzIHdoYXQgYXJl
YSB3aWxsIGJlIG9wYXF1ZS4KK2NsYXNzIE9wYXF1ZVJlZ2lvblNraWEgeworcHVibGljOgorICAg
IE9wYXF1ZVJlZ2lvblNraWEoUGxhdGZvcm1Db250ZXh0U2tpYSopOworICAgIH5PcGFxdWVSZWdp
b25Ta2lhKCk7CisKKyAgICAvLyBUaGUgcmVzdWx0aW5nIG9wYXF1ZSByZWdpb24gYXMgYSBzaW5n
bGUgU2tSZWN0LgorICAgIGNvbnN0IFNrUmVjdCYgYXNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
cGFxdWVSZWN0OyB9CisKKyAgICB2b2lkIHRyYWNrRHJhd1JlY3QoY29uc3QgU2tSZWN0JiwgY29u
c3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKik7CisgICAgdm9pZCB0cmFja0RyYXdQYXRoKGNv
bnN0IFNrUGF0aCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIHRyYWNrRHJhd1BvaW50cyhT
a0NhbnZhczo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50W10sIGNvbnN0
IFNrUGFpbnQmKTsKKyAgICB2b2lkIHRyYWNrRHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiwgY29u
c3QgU2tQYWludCYpOworCitwcml2YXRlOgorICAgIHZvaWQgdHJhY2tEcmF3KGNvbnN0IFNrUmVj
dCYsIGNvbnN0IFNrUGFpbnQmLCBib29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKTsK
KyAgICB2b2lkIHRyYWNrRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50JiwgYm9vbCBkcmF3c09w
YXF1ZSk7CisgICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZv
aWQgbWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmKTsKKworICAgIFNrUmVjdCBtX29w
YXF1ZVJlY3Q7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogbV9wbGF0Zm9ybUNvbnRleHQ7Cit9
OworCit9CisjZW5kaWYgLy8gT3BhcXVlUmVnaW9uU2tpYV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAppbmRleCBhNWUxODY4MGQyMGJiYmY2OTgyODY2OGUwZWI5Y2Q2ZjFlOTgzMGI1Li5kMWU1
MjRlMTFiNTUxMmFmZDA2NGFmMzQ4ODA0MmJlY2E2N2UwMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKQEAgLTE3OSw2ICsxNzksOCBAQCBTa0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6
OlN0YXRlOjphcHBseUFscGhhKFNrQ29sb3IgYykgY29uc3QKIC8vIERhbmdlcjogY2FudmFzIGNh
biBiZSBOVUxMLgogUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0Nh
bnZhcyogY2FudmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQorICAgICwgbV9vcGFxdWVSZWdp
b24odGhpcykKKyAgICAsIG1fdHJhY2tPcGFxdWVSZWdpb24oZmFsc2UpCiAgICAgLCBtX3ByaW50
aW5nKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZChmYWxzZSkKICAgICAsIG1fZHJhd2luZ1RvSW1h
Z2VCdWZmZXIoZmFsc2UpCkBAIC0yNjYsNiArMjY4LDExIEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6Y2xpcFBhdGhBbnRpQWxpYXNlZChjb25zdCBTa1BhdGgmIGNsaXBQYXRoKQogICAgIGNh
bnZhcygpLT5jbGlwUGF0aChjbGlwUGF0aCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3AsIHRydWUp
OwogfQogCitjb25zdCBTa0JpdG1hcCYgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xpcHBlZFRvSW1h
Z2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcDsKK30K
Kwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkKIHsKICAgICBpZiAoIW1fc3Rh
dGUtPm1faW1hZ2VCdWZmZXJDbGlwLmVtcHR5KCkpIHsKQEAgLTI4Nyw2ICsyOTQsNyBAQCB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogICAgIGlmIChmaWxs
Y29sb3JOb3RUcmFuc3BhcmVudCkgewogICAgICAgICBzZXR1cFBhaW50Rm9yRmlsbGluZygmcGFp
bnQpOwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOworICAgICAgICB0
cmFja0RyYXdSZWN0KHJlY3QsIHBhaW50KTsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZS0+bV9z
dHJva2VTdHlsZSAhPSBOb1N0cm9rZQpAQCAtMjk5LDEyICszMDcsMTYgQEAgdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKIAogICAgICAgICBTa1JlY3QgdG9w
Qm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZUb3AsIHJlY3QuZlJpZ2h0LCByZWN0LmZUb3Ag
KyAxIH07CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKKyAg
ICAgICAgdHJhY2tEcmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IGJv
dHRvbUJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mQm90dG9tIC0gMSwgcmVjdC5mUmlnaHQs
IHJlY3QuZkJvdHRvbSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QoYm90dG9tQm9yZGVy
LCBwYWludCk7CisgICAgICAgIHRyYWNrRHJhd1JlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7CiAg
ICAgICAgIFNrUmVjdCBsZWZ0Qm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZUb3AgKyAxLCBy
ZWN0LmZMZWZ0ICsgMSwgcmVjdC5mQm90dG9tIC0gMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJh
d1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOworICAgICAgICB0cmFja0RyYXdSZWN0KGxlZnRCb3Jk
ZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IHJpZ2h0Qm9yZGVyID0geyByZWN0LmZSaWdodCAt
IDEsIHJlY3QuZlRvcCArIDEsIHJlY3QuZlJpZ2h0LCByZWN0LmZCb3R0b20gLSAxIH07CiAgICAg
ICAgIGNhbnZhcygpLT5kcmF3UmVjdChyaWdodEJvcmRlciwgcGFpbnQpOworICAgICAgICB0cmFj
a0RyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CiAgICAgfQogfQogCkBAIC01MzksNiArNTUx
LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwYWludFNrUGFpbnQoY29uc3QgU2tSZWN0
JiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQ
YWludCYgcGFpbnQpCiB7CiAgICAgbV9jYW52YXMtPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAg
ICB0cmFja0RyYXdSZWN0KHJlY3QsIHBhaW50KTsKIH0KIAogY29uc3QgU2tCaXRtYXAqIFBsYXRm
b3JtQ29udGV4dFNraWE6OmJpdG1hcCgpIGNvbnN0CkBAIC01OTcsNCArNjEwLDI4IEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCiAgICAgbV9ncHVDb250ZXh0ID0gY29udGV4dDsKIH0KIAordm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjp0cmFja0RyYXdSZWN0KGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3Qg
U2tQYWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXApCit7CisgICAgaWYgKG1fdHJh
Y2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9uLnRyYWNrRHJhd1JlY3QocmVj
dCwgcGFpbnQsIGJpdG1hcCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhY2tE
cmF3UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAg
IGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi50cmFja0Ry
YXdQYXRoKHBhdGgsIHBhaW50KTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFj
a0RyYXdQb2ludHMoU2tDYW52YXM6OlBvaW50TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25z
dCBTa1BvaW50IHBvaW50c1tdLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAobV90
cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24udHJhY2tEcmF3UG9pbnRz
KG1vZGUsIG51bVBvaW50cywgcG9pbnRzLCBwYWludCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6dHJhY2tEcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFp
bnQmIHBhaW50KQoreworICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29w
YXF1ZVJlZ2lvbi50cmFja0RyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCA3ZGNmYmUyZTM3ZmMxYzQy
N2RkZTdmYjNmNjAzMTFiZTI3NDk4MjEzLi5hM2IyMDZkYWE4YmVkYWUwMWZmNTQ0MmYyN2Q0ZDQz
NThjNTEzZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtMzMsNiArMzMsNyBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNp
bmNsdWRlICJPcGFxdWVSZWdpb25Ta2lhLmgiCiAKICNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2lu
Y2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKQEAgLTk4LDYgKzk5LDggQEAgcHVibGljOgogICAg
IC8vIE5PVEU6IHxpbWFnZUJ1ZmZlcnwgbWF5IGJlIGRlbGV0ZWQgYmVmb3JlIHRoZSB8cmVzdG9y
ZXwgaXMgaW52b2tlZC4KICAgICB2b2lkIGJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwogICAgIHZvaWQgY2xpcFBhdGhBbnRpQWxp
YXNlZChjb25zdCBTa1BhdGgmKTsKKyAgICAvLyBJZiBub24tZW1wdHksIHRoZSBsYXllciBpcyBj
bGlwcGVkIHRvIHRoZSBiaXRtYXAuCisgICAgY29uc3QgU2tCaXRtYXAmIGNsaXBwZWRUb0ltYWdl
KCkgY29uc3Q7CiAKICAgICAvLyBTZXRzIHVwIHRoZSBjb21tb24gZmxhZ3Mgb24gYSBwYWludCBm
b3IgYW50aWFsaWFzaW5nLCBlZmZlY3RzLCBldGMuCiAgICAgLy8gVGhpcyBpcyBpbXBsaWNpdGx5
IGNhbGxlZCBieSBzZXR1cFBhaW50RmlsbCBhbmQgc2V0dXBQYWludFN0cm9rZSwgYnV0CkBAIC0x
ODcsNiArMTkwLDE4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJl
dHVybiBtX2RlZmVycmVkOyB9CiAgICAgdm9pZCBzZXREZWZlcnJlZChib29sIGRlZmVycmVkKSB7
IG1fZGVmZXJyZWQgPSBkZWZlcnJlZDsgfQogCisgICAgdm9pZCBzZXRUcmFja09wYXF1ZVJlZ2lv
bihib29sIHRyYWNrKSB7IG1fdHJhY2tPcGFxdWVSZWdpb24gPSB0cmFjazsgfQorCisgICAgLy8g
VGhpcyB3aWxsIGJlIGFuIGVtcHR5IHJlZ2lvbiB1bmxlc3MgdHJhY2tpbmcgaXMgZW5hYmxlZC4K
KyAgICBjb25zdCBPcGFxdWVSZWdpb25Ta2lhJiBvcGFxdWVSZWdpb24oKSBjb25zdCB7IHJldHVy
biBtX29wYXF1ZVJlZ2lvbjsgfQorCisgICAgLy8gQWZ0ZXIgZHJhd2luZyBpbiB0aGUgY29udGV4
dCdzIGNhbnZhcywgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBub3RpZnkgdGhlIGNvbnRleHQgc28g
aXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUgcmVnaW9uLgorICAgIHZvaWQgdHJhY2tEcmF3UmVjdChj
b25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqID0gMCk7CisgICAg
dm9pZCB0cmFja0RyYXdQYXRoKGNvbnN0IFNrUGF0aCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2
b2lkIHRyYWNrRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBj
b25zdCBTa1BvaW50W10sIGNvbnN0IFNrUGFpbnQmKTsKKyAgICAvLyBGb3IgZHJhd2luZyBvcGVy
YXRpb25zIHRoYXQgZG8gbm90IGZpbGwgdGhlIGVudGlyZSByZWN0LgorICAgIHZvaWQgdHJhY2tE
cmF3Qm91bmRlZChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7CisKIHByaXZhdGU6CiAg
ICAgLy8gVXNlZCB3aGVuIHJlc3RvcmluZyBhbmQgdGhlIHN0YXRlIGhhcyBhbiBpbWFnZSBjbGlw
LiBPbmx5IHNob3dzIHRoZSBwaXhlbHMgaW4KICAgICAvLyBtX2NhbnZhcyB0aGF0IGFyZSBhbHNv
IGluIGltYWdlQnVmZmVyLgpAQCAtMjEwLDYgKzIyNSwxMCBAQCBwcml2YXRlOgogICAgIC8vIG1T
dGF0ZVN0YWNrLmJhY2soKS4KICAgICBTdGF0ZSogbV9zdGF0ZTsKIAorICAgIC8vIFRyYWNrcyB0
aGUgcmVnaW9uIHBhaW50ZWQgb3BhcXVlIHZpYSB0aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIE9w
YXF1ZVJlZ2lvblNraWEgbV9vcGFxdWVSZWdpb247CisgICAgYm9vbCBtX3RyYWNrT3BhcXVlUmVn
aW9uOworCiAgICAgLy8gU3RvcmVzIGltYWdlIHNpemVzIGZvciBhIGhpbnQgdG8gY29tcHV0ZSBp
bWFnZSByZXNhbXBsaW5nIG1vZGVzLgogICAgIC8vIFZhbHVlcyBhcmUgdXNlZCBpbiBJbWFnZVNr
aWEuY3BwCiAgICAgSW50U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNTaXplOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggY2E4ZmIzOWQyNGQ5ZmQxYzJhNmQ4NmJkNzNlNzQ1
MTM4NTFhYjFmOS4uNGMwYzAyM2UxZjdkOTdkMTc5ZDUwNDYxODI3Yzk4MmY2ODFkNWViYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMTksNiArMTE5LDcgQEAKICAgICAgICAg
ICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvSW1h
Z2VMYXllckNocm9taXVtVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAndGVzdHMvUGxh
dGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgfV0sCiAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjJjYTgxNzc1MmMxNTBjMDVlMzA3M2RmMDZhYmY2YTQwMDgxZjZmYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlICJC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSB7CisKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9F
UShhLmZMZWZ0LCBiLmZMZWZ0KTsgXAorICAgIEVYUEVDVF9FUShhLmZSaWdodCwgYi5mUmlnaHQp
OyBcCisgICAgRVhQRUNUX0VRKGEuZlRvcCwgYi5mVG9wKTsgXAorICAgIEVYUEVDVF9FUShhLmZC
b3R0b20sIGIuZkJvdHRvbSk7IFwKKworI2RlZmluZSBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgb3BhcXVlUmVjdCkgXAoreyBcCisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrZXIoYml0bWFw
KTsgXAorICAgIGZvciAoaW50IHkgPSBTa1NjYWxhckNlaWwob3BhcXVlUmVjdC5mVG9wKTsgeSA8
IFNrU2NhbGFyRmxvb3Iob3BhcXVlUmVjdC5mQm90dG9tKTsgKyt5KSBcCisgICAgICAgIGZvciAo
aW50IHggPSBTa1NjYWxhckNlaWwob3BhcXVlUmVjdC5mTGVmdCk7IHggPCBTa1NjYWxhckZsb29y
KG9wYXF1ZVJlY3QuZlJpZ2h0KTsgKyt4KSB7IFwKKyAgICAgICAgICAgIGludCBhbHBoYSA9ICpi
aXRtYXAuZ2V0QWRkcjMyKHgsIHkpID4+IDI0OyBcCisgICAgICAgICAgICBFWFBFQ1RfRVEoMjU1
LCBhbHBoYSk7IFwKKyAgICAgICAgfSBcCit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRl
c3QsIHRyYWNrT3BhcXVlVGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFw
LnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICBi
aXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAw
LjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBm
KTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3Bh
cXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgYWxwaGEsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9S
RUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAxMCs5MCwgMTArOTApLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVBsdXNMaWdodGVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChT
a1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpN
YWtlTFRSQigxMCwgMTAsIDEwKzkwLCAxMCs5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBD
b21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigx
MCwgMTAsIDEwKzg5LCAxMCs5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCg4LCA4LCAzLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291
cmNlT3V0KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDExLCAxMCwgMTEr
ODgsIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDMwLCAzMCwg
MjkwLCAyOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92
ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAsIDMwLCAzMCsyOTAs
IDMwKzI5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24o
KS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg0MCwgMjAsIDI5
MCwgNTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIp
OworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAsIDMwLCAzMCsyOTAsIDMw
KzI5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQ
RUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDM5MCwg
NTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDMwLCAzMCwgMzArMjkwLCAzMCsyOTAp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9Q
SVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAzOTAsIDUwKSwg
YWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6
TWFrZUxUUkIoMzAsIDMwLCAzMCsyOTAsIDMwKzI5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDM5MCwgNTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFr
ZUxUUkIoMzAsIDEwLCAzMCsyOTAsIDEwKzMxMCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7Cit9CisKK1RFU1QoUGxhdGZvcm1Db250
ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlTGluZVRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFw
OworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAyMDAs
IDIwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJp
dG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFz
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBv
cGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4w
ZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7
CisgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KDApOworICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKDQpOworICAgIGNvbnRleHQuc2V0TGluZUNhcChTcXVhcmVDYXApOworICAgIGNvbnRl
eHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5maWxsUmVjdChG
bG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0go
MTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlU291cmNlSW4pOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5k
cmF3TGluZShJbnRQb2ludCgwLCAwKSwgSW50UG9pbnQoMTAwLCAwKSk7CisgICAgY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkw
LCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQ
RUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJ
bnRQb2ludCgwLCAxMCksIEludFBvaW50KDEwMCwgMTApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUo
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYWxw
aGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQo
MCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAg
ICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFscGhhLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDExKSwg
SW50UG9pbnQoMTAwLCAxMSkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9F
UV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDE0LCA5MCwgODYpLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4
dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwg
MTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7Cisg
ICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VJbik7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0
cm9rZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdM
aW5lKEludFBvaW50KDAsIDApLCBJbnRQb2ludCgxMDAsIDApKTsKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkw
KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1Rf
UElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKyAgICBjb250
ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG9wYXF1ZSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBv
aW50KDEwMCwgMTApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0
U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0
LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9pbnQoMTAwLCAxMCkpOworICAgIGNvbnRl
eHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEz
LCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAg
IEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGlu
ZShJbnRQb2ludCgwLCAxMSksIEludFBvaW50KDEwMCwgMTEpKTsKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxNCwgOTAsIDg2
KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1Rf
UElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVQYXRo
VGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDIwMCwgMjAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhl
bHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4
dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
cmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxh
dGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBm
KTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIGNvbnRl
eHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1Jl
Y3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxk
QW50aWFsaWFzKGZhbHNlKTsKKyAgICBjb250ZXh0LnNldE1pdGVyTGltaXQoMSk7CisgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoNSk7CisgICAgY29udGV4dC5zZXRMaW5lQ2FwKFNxdWFy
ZUNhcCk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CisgICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOworCisgICAgUGF0
aCBwYXRoOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHBhdGguYWRk
TGluZVRvKEZsb2F0UG9pbnQoMTAwLCAwKSk7CisgICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxT
X01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihvcGFxdWUsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMTApKTsK
KyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KDEwMCwgMTMpKTsKKyAgICBjb250ZXh0LmZp
bGxQYXRoKHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEw
LCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAg
IEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBv
aW50KDAsIDEwKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDEzKSk7Cisg
ICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1h
a2VYWVdIKDEwLCAxMywgOTAsIDg3KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5t
b3ZlVG8oRmxvYXRQb2ludCgwLCAxNCkpOworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQo
MTAwLCAxMCkpOworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTQsIDkwLCA4NiksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgcGF0aC5jbGVhcigp
OworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUltYWdlVGVz
dCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIDIwMCwgMjAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMo
KTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNr
aWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFj
a09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZv
cm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsK
KyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIFNrQml0bWFw
IGRyYXdCaXRtYXA7CisgICAgZHJhd0JpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4
ODhfQ29uZmlnLCAxMCwgMTApOworICAgIGRyYXdCaXRtYXAuYWxsb2NQaXhlbHMoKTsKKworICAg
IGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUodHJ1ZSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBk
cmF3Qml0bWFwLmhlaWdodCgpOyArK3kpCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZHJh
d0JpdG1hcC53aWR0aCgpOyArK3gpCisgICAgICAgICAgICAqZHJhd0JpdG1hcC5nZXRBZGRyMzIo
eCwgeSkgPSAweEZGRkZGRkZGOworICAgIFJlZlB0cjxCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YT4gb3BhcXVlSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKGRyYXdC
aXRtYXAsIHRydWUpOworICAgIEVYUEVDVF9GQUxTRShvcGFxdWVJbWFnZS0+Y3VycmVudEZyYW1l
SGFzQWxwaGEoKSk7CisKKyAgICBkcmF3Qml0bWFwLnNldElzT3BhcXVlKGZhbHNlKTsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGRyYXdCaXRtYXAuaGVpZ2h0KCk7ICsreSkKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBkcmF3Qml0bWFwLndpZHRoKCk7ICsreCkKKyAgICAgICAgICAgICpk
cmF3Qml0bWFwLmdldEFkZHIzMih4LCB5KSA9IDB4MDAwMDAwMDA7CisgICAgUmVmUHRyPEJpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhPiBhbHBoYUltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFt
ZVNraWE6OmNyZWF0ZShkcmF3Qml0bWFwLCB0cnVlKTsKKyAgICBFWFBFQ1RfVFJVRShhbHBoYUlt
YWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEw
LCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAs
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQo
MCwgMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwg
OTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVD
VF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDUsIDUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1Jl
Y3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShh
bHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCg1LCA1KSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19N
QVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisK
KyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgSW50UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtl
WFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFn
ZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29u
dGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChi
aXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBj
b250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJ
bnRQb2ludCgyMCwgMTApLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
U2tSZWN0OjpNYWtlWFlXSCgxMCwgMjAsIDkwLCA4MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICBjb250ZXh0LnNldEFscGhhKDAuNSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2Uob3Bh
cXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDI1LCAxNSksIENv
bXBvc2l0ZVNvdXJjZUluKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAyNSwgOTAsIDc1KSwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6
Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFs
cGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDEwLCAyMCksIENv
bXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDIw
LCAxMCwgODAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0
QWxwaGEoMC41KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMTUsIDI1KSwgQ29tcG9zaXRlU291cmNlSW4pOwor
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZ
V0goMjUsIDEwLCA3NSwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0
LCB0cmFja09wYXF1ZU92YWxUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRt
YXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAg
IGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYs
IDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAu
MGYpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgwLCAwLCAwLCAwKSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCkpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMCwgMCwgMCwgMCksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAg
ICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CisKKyAgICBjb250ZXh0LnNl
dFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVj
dCgxMCwgMTAsIDUwLCAzMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0go
MTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwg
MTAsIDMwLCA1MCkpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goNDAsIDEw
LCA2MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAg
IEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwgMTAsIDUwLCAzMCkpOworICAgIEVY
UEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goNDAsIDQxLCA2MCwgNTkpLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
Yml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNv
bnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgyMCwgMTAsIDMwLCA1MCkpOworICAgIEVYUEVDVF9F
UV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goNTEsIDQxLCA0OSwgNTkpLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122119</attachid>
            <date>2012-01-11 16:19:34 -0800</date>
            <delta_ts>2012-01-12 10:26:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120111191932.patch</filename>
            <type>text/plain</type>
            <size>52468</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjBiZWVhYWE3ZTQyYmUx
ZDdlZTM0ODQxM2YxNjIyM2I1MDg3NDlmZi4uZmFlNDdkMTJhMGIwYTk2MDMxODk5YWE3YjM0N2M3
YWQ1MTBkNWY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTAxLTExICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHM6IFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdpb25Ta2lhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6On5PcGFxdWVSZWdpb25Ta2lhKToKKyAgICAg
ICAgKFdlYkNvcmU6OnhmZXJtb2RlSXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6eGZlcm1v
ZGVQcmVzZXJ2ZXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRJc09wYXF1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjp0cmFja0RyYXdSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnRyYWNrRHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3UG9pbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnRyYWNrRHJhd0JvdW5kZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
YXF1ZVJlZ2lvblNraWE6OnRyYWNrRHJhd1VuYm91bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpP
cGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
YXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmFzUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xpcHBlZFRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6cGFpbnRTa1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dFNraWE6OnRyYWNrRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
b250ZXh0U2tpYTo6dHJhY2tEcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjp0cmFja0RyYXdQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
b250ZXh0U2tpYTo6dHJhY2tEcmF3Qm91bmRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRUcmFja09wYXF1ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpvcGFxdWVSZWdpb24pOgorCiAyMDEyLTAxLTExICBBZGFtIFRy
ZWF0ICA8YXRyZWF0QHJpbS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM1M2M1
Yzc0NzhlNmVmNjA1ZjRjMzQ5ZjhmZTA1ZGVkMTUwOGU2NTEuLjE2NzU0MmFhNDBmNWFlYTFkNzIw
YzRhMDY5NGNjYWQ5YjI4M2ZmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTItMDEtMTEgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW3NraWFdIFRyYWNrIGEgc2ltcGxlIG9wYXF1ZSBhcmVhIHdoZW4gcGFpbnRp
bmcgdmlhIFBsYXRmb3JtQ29udGV4dFNraWEgYW5kIHNhdmUgaW4gTGF5ZXJUZXh0dXJlVXBkYXRl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktp
dC5neXBpOgorICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wMS0xMCAgRG1pdHJ5IExvbW92
ICA8ZHNsb21vdkBnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIG9ic29s
ZXRlIHJlZmVyZW5jZXMgdG8gV2ViV29ya2VyIGNsYXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDVj
YjM0ZTVlYWFjMzcyMWU1NDRkZDlkNjM4ZDk0ODRjMGMxZTcwY2IuLjQxMjE3NjhiZTEwY2QzZDZi
ZWZlOWRlZGNjODc4ZjNjOTY3NTVjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM5MjYsNiArMzky
Niw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbnRSZWN0U2tpYS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNr
aWEuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25T
a2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCBkYjM0MzYxNWZiODg0MGZj
Mzg2YjY0NmZiMmQwNTdhNGQzYWU2OTM2Li43N2Y4OGQzMmYzNTQxNTRkNjY3YzhhMWQxNzJkZTdm
N2UyMWY4NzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKQEAgLTMzOSw2ICszMzksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAg
ICBwYWludC5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDczLDExICs0NzQsMTMg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2lu
dHMsCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7
CiAgICAgcGFpbnQuc2V0QW50aUFsaWFzKHNob3VsZEFudGlhbGlhcyk7CiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogCiAgICAgaWYgKHN0cm9rZVN0
eWxlKCkgIT0gTm9TdHJva2UpIHsKICAgICAgICAgcGFpbnQucmVzZXQoKTsKICAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsK
KyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwog
ICAgIH0KIH0KIApAQCAtNTEzLDExICs1MTYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIGVsaXBzZVJlY3QpCiAgICAgU2tQYWludCBwYWludDsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+dHJhY2tEcmF3Qm91bmRlZChyZWN0LCBwYWludCk7CiAKICAg
ICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWludC5yZXNldCgp
OwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWlu
dCwgJnJlY3QsIDApOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdP
dmFsKHJlY3QsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd0Jv
dW5kZWQocmVjdCwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtNTg0LDYgKzU4OSw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGludCB3aWR0aCwgaW50CiAgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKTsKICAgICBkcmF3T3V0ZXJQYXRoKGNhbnZhcywgcGF0aCwgcGFpbnQsIHdp
ZHRoKTsKICAgICBkcmF3SW5uZXJQYXRoKGNhbnZhcywgcGF0aCwgcGFpbnQsIHdpZHRoKTsKKwor
ICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKDEpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFj
a0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJh
dyBib3JkZXJzLgpAQCAtNjMxLDEyICs2MzksMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAg
ICAgICAgIGZpbGxQYWludC5zZXRDb2xvcihwYWludC5nZXRDb2xvcigpKTsKICAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyMiwgZmlsbFBhaW50KTsK
KyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1JlY3QocjEsIGZpbGxQYWludCk7
CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIyLCBmaWxsUGFpbnQp
OwogICAgIH0KIAogICAgIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhwMSwgcDIsIHdpZHRo
LCBwZW5TdHlsZSk7CiAgICAgU2tQb2ludCBwdHNbMl0gPSB7IChTa1BvaW50KXAxLCAoU2tQb2lu
dClwMiB9OwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UG9pbnRzKFNr
Q2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBwdHMsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+dHJhY2tEcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBw
dHMsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGlu
ZVN0eWxlIHN0eWxlKQpAQCAtNzEyLDYgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgs
CiAgICAgICAgICAgICAgb3JpZ2luWCArIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIod2lkdGgpLAog
ICAgICAgICAgICAgIG9yaWdpblkgKyBTa0ludFRvU2NhbGFyKG1pc3NwZWxsQml0bWFwLT5oZWln
aHQoKSkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwg
cGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHJlY3QsIHBhaW50
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwdCwKQEAgLTczNiw2ICs3NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIC8vIFRleHQgbGluZXMgYXJl
IGRyYXduIHVzaW5nIHRoZSBzdHJva2UgY29sb3IuCiAgICAgcGFpbnQuc2V0Q29sb3IocGxhdGZv
cm1Db250ZXh0KCktPmVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkpOwogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgp
LT50cmFja0RyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFu
Z2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTc3MCw2ICs3ODMsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvRmlsbCkKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKIAogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTc4OCw2ICs4MDIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRG
b3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3
UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1JlY3Qociwg
cGFpbnQpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKIH0KQEAgLTgxNiw2
ICs4MzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Q29tbW9uKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3IoY29sb3Iucmdi
KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
LApAQCAtODU1LDYgKzg3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWlu
dEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiBB
ZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdApAQCAtMTEzOSw2
ICsxMTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0
JiByLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKICAgICBpZiAoIWlzUGF0aFNraWFT
YWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQpAQCAtMTE1Myw2ICsxMTcx
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRv
U3Ryb2tlKQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVw
UGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50
cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCkBAIC0xMTcz
LDkgKzExOTIsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgYm9vbCB2YWxpZFcgPSByLndpZHRo
KCkgPiAwOwogICAgIGJvb2wgdmFsaWRIID0gci5oZWlnaHQoKSA+IDA7CiAgICAgU2tDYW52YXMq
IGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICBpZiAodmFsaWRXICYm
IHZhbGlkSCkKKyAgICBpZiAodmFsaWRXICYmIHZhbGlkSCkgewogICAgICAgICBjYW52YXMtPmRy
YXdSZWN0KHIsIHBhaW50KTsKLSAgICBlbHNlIGlmICh2YWxpZFcgfHwgdmFsaWRIKSB7CisgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdSZWN0KHIsIHBhaW50KTsKKyAgICB9IGVs
c2UgaWYgKHZhbGlkVyB8fCB2YWxpZEgpIHsKICAgICAgICAgLy8gd2UgYXJlIGV4cGVjdGVkIHRv
IHJlc3BlY3QgdGhlIGxpbmVKb2luLCBzbyB3ZSBjYW4ndCBqdXN0IGNhbGwKICAgICAgICAgLy8g
ZHJhd0xpbmUgLS0gd2UgaGF2ZSB0byBjcmVhdGUgYSBwYXRoIHRoYXQgZG91YmxlcyBiYWNrIG9u
IGl0c2VsZi4KICAgICAgICAgU2tQYXRoIHBhdGg7CkBAIC0xMTgzLDYgKzEyMDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKICAgICAgICAgcGF0aC5saW5lVG8oci5mUmlnaHQsIHIuZkJvdHRvbSk7CiAg
ICAgICAgIHBhdGguY2xvc2UoKTsKICAgICAgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWlu
dCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFja0RyYXdQYXRoKHBhdGgsIHBhaW50
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBlNjZkYmFiNDM1MGQ0NWQzNDNlZjFkM2ZmNTYyMWE4
OGEzOTc5ZWM2Li40MWRlNjE1ZGFmMWI2Y2Q5NzdlNjkwMTdjZmM4OTZmNDgxMzFmMzZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwCkBAIC0yNDgsNiArMjQ4LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9y
bUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcKICAgICAgICAg
Ly8gd2UgZG9uJ3Qgc2VuZCBleHRyYSBwaXhlbHMuCiAgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1h
cFJlY3QoYml0bWFwLmJpdG1hcCgpLCAmc3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CiAgICAg
fQorICAgIHBsYXRmb3JtQ29udGV4dC0+dHJhY2tEcmF3UmVjdChkZXN0UmVjdCwgcGFpbnQsICZi
aXRtYXAuYml0bWFwKCkpOwogfQogCiAvLyBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBkaW1lbnNpb25z
IHdpdGggdGhlIGdpdmVuIG1hdHJpeC4gVXNlZCB0byBzZWUgaG93IGJpZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tp
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjgxY2QwMTI4N2MxOTVmNzQ0MWIyMzQ4OTllY2M1OGMzMjQ1MzY0
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiT3BhcXVlUmVnaW9uU2tpYS5oIgorCisjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSAiU2tTaGFkZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdpb25Ta2lhKFBsYXRmb3JtQ29u
dGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1fb3BhcXVlUmVjdChTa1JlY3Q6Ok1h
a2VFbXB0eSgpKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQorewor
fQorCitPcGFxdWVSZWdpb25Ta2lhOjp+T3BhcXVlUmVnaW9uU2tpYSgpCit7Cit9CisKKy8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgeGZlcm1vZGUgd2lsbCBmb3JjZSB0aGUgZHN0IHRvIGJlIG9wYXF1
ZSwgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCBkc3QuCitzdGF0aWMgaW5saW5lIGJvb2wgeGZl
cm1vZGVJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1ZSkKK3sK
KyAgICBpZiAoIXNyY0lzT3BhcXVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa1hm
ZXJtb2RlKiB4ZmVybW9kZSA9IHBhaW50LmdldFhmZXJtb2RlKCk7CisgICAgaWYgKCF4ZmVybW9k
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIGRlZmF1bHQgdG8ga1NyY092ZXJfTW9kZQorICAg
IFNrWGZlcm1vZGU6Ok1vZGUgbW9kZTsKKyAgICBpZiAoIXhmZXJtb2RlLT5hc01vZGUoJm1vZGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IFNrWGZlcm1vZGU6OmtTcmNfTW9kZTogLy8gc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjpr
U3JjT3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtEc3RPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAor
ICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdEFUb3BfTW9kZTogLy8gc291cmNlCisgICAgY2FzZSBT
a1hmZXJtb2RlOjprUGx1c19Nb2RlOiAvLyBzb3VyY2UrZGVzdAorICAgIGRlZmF1bHQ6IC8vIHRo
ZSByZXN0IGFyZSBhbGwgc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2UgU2tYZmVybW9kZTo6a0NsZWFyX01vZGU6IC8vIDAKKyAgICBjYXNl
IFNrWGZlcm1vZGU6OmtEc3RfTW9kZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1Ny
Y0luX01vZGU6IC8vIHNvdXJjZSAqIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RJbl9N
b2RlOiAvLyBkZXN0ICogc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0X01vZGU6
IC8vIHNvdXJjZSAqICgxLWRlc3QpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0X01vZGU6
IC8vIGRlc3QgKiAoMS1zb3VyY2UpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjQVRvcF9Nb2Rl
OiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprWG9yX01vZGU6IC8vIHNvdXJjZSArIGRl
c3QgLSAyKihzb3VyY2UqZGVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSB4ZmVybW9kZSB3aWxsIGtlZXAgdGhlIGRzdCBvcGFxdWUs
IGFzc3VtaW5nIHRoZSBkc3QgaXMgYWxyZWFkeSBvcGFxdWUuCitzdGF0aWMgaW5saW5lIGJvb2wg
eGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgc3JjSXNP
cGFxdWUpCit7CisgICAgU2tYZmVybW9kZSogeGZlcm1vZGUgPSBwYWludC5nZXRYZmVybW9kZSgp
OworICAgIGlmICgheGZlcm1vZGUpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBkZWZhdWx0IHRv
IGtTcmNPdmVyX01vZGUKKyAgICBTa1hmZXJtb2RlOjpNb2RlIG1vZGU7CisgICAgaWYgKCF4ZmVy
bW9kZS0+YXNNb2RlKCZtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
IChtb2RlKSB7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0X01vZGU6IC8vIGRlc3QKKyAgICBj
YXNlIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2Uq
ZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE92ZXJfTW9kZTogLy8gc291cmNlICsgZGVz
dCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjQVRvcF9Nb2RlOiAvLyBk
ZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprUGx1c19Nb2RlOiAvLyBzb3VyY2UrZGVzdAorICAg
IGRlZmF1bHQ6IC8vIHRoZSByZXN0IGFyZSBhbGwgc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU2tYZmVybW9kZTo6a0NsZWFyX01vZGU6
IC8vIDAKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdXRfTW9kZTogLy8gc291cmNlICogKDEt
ZGVzdCkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVzdCAqICgxLXNv
dXJjZSkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtYb3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAt
IDIqKHNvdXJjZSpkZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTa1hmZXJt
b2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0luX01v
ZGU6IC8vIHNvdXJjZSAqIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RJbl9Nb2RlOiAv
LyBkZXN0ICogc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0QVRvcF9Nb2RlOiAvLyBz
b3VyY2UKKyAgICAgICAgcmV0dXJuIHNyY0lzT3BhcXVlOworICAgIH0KK30KKworLy8gUmV0dXJu
cyB0cnVlIGlmIGFsbCBwaXhlbHMgcGFpbnRlZCB3aWxsIGJlIG9wYXF1ZS4KK3N0YXRpYyBpbmxp
bmUgYm9vbCBwYWludElzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0JpdG1h
cCogYml0bWFwID0gMCwgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZmFsc2UpCit7CisgICAgaWYgKHBh
aW50LmdldEFscGhhKCkgPCAweEZGKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFj
aGVja0ZpbGxPbmx5ICYmIHBhaW50LmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUg
JiYgcGFpbnQuaXNBbnRpQWxpYXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNrU2hh
ZGVyKiBzaGFkZXIgPSBwYWludC5nZXRTaGFkZXIoKTsKKyAgICBpZiAoc2hhZGVyICYmICFzaGFk
ZXItPmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYml0bWFwICYm
ICFiaXRtYXAtPmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjp0cmFja0RyYXdSZWN0KGNvbnN0IFNr
UmVjdCYgZmlsbFJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0JpdG1hcCogYml0
bWFwKQoreworICAgIC8vIEFueSBzdHJva2luZyBtYXkgcHV0IGFscGhhIGluIHBpeGVscyBldmVu
IGlmIHRoZSBmaWxsaW5nIHBhcnQgZG9lcyBub3QuCisgICAgaWYgKHBhaW50LmdldFN0eWxlKCkg
IT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpIHsKKyAgICAgICAgYm9vbCBvcGFxdWUgPSBwYWludElz
T3BhcXVlKHBhaW50LCBiaXRtYXApOworICAgICAgICBib29sIGZpbGxzQm91bmRzID0gZmFsc2U7
CisKKyAgICAgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQorICAgICAgICAg
ICAgdHJhY2tEcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFxdWUpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFNrUmVjdCBzdHJva2VSZWN0OworICAgICAgICAgICAgc3Ryb2tlUmVjdCA9IHBh
aW50LmNvbXB1dGVGYXN0Qm91bmRzKGZpbGxSZWN0LCAmc3Ryb2tlUmVjdCk7CisgICAgICAgICAg
ICB0cmFja0RyYXcoc3Ryb2tlUmVjdCwgcGFpbnQsIG9wYXF1ZSwgZmlsbHNCb3VuZHMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gdHJ1ZTsKKyAgICBib29s
IG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGJpdG1hcCwgY2hlY2tGaWxsT25seSk7Cisg
ICAgYm9vbCBmaWxsc0JvdW5kcyA9IHBhaW50LmdldFN0eWxlKCkgIT0gU2tQYWludDo6a1N0cm9r
ZV9TdHlsZTsKKyAgICB0cmFja0RyYXcoZmlsbFJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91
bmRzKTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjp0cmFja0RyYXdQYXRoKGNvbnN0IFNr
UGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgU2tSZWN0IHJlY3Q7Cisg
ICAgaWYgKHBhdGguaXNSZWN0KCZyZWN0KSkgeworICAgICAgICB0cmFja0RyYXdSZWN0KHJlY3Qs
IHBhaW50LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgb3BhcXVlID0g
cGFpbnRJc09wYXF1ZShwYWludCk7CisgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisg
ICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQorICAgICAgICB0cmFja0RyYXdV
bmJvdW5kZWQocGFpbnQsIG9wYXF1ZSk7CisgICAgZWxzZSB7CisgICAgICAgIHJlY3QgPSBwYWlu
dC5jb21wdXRlRmFzdEJvdW5kcyhwYXRoLmdldEJvdW5kcygpLCAmcmVjdCk7CisgICAgICAgIHRy
YWNrRHJhdyhyZWN0LCBwYWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2
b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnRyYWNrRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2Rl
IG1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnQgcG9pbnRzW10sIGNvbnN0IFNrUGFp
bnQmIHBhaW50KQoreworICAgIGlmICghbnVtUG9pbnRzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTa1JlY3QgcmVjdDsKKyAgICByZWN0LmZMZWZ0ID0gcG9pbnRzWzBdLmZYOworICAgIHJlY3Qu
ZlJpZ2h0ID0gcG9pbnRzWzBdLmZYICsgMTsKKyAgICByZWN0LmZUb3AgPSBwb2ludHNbMF0uZlk7
CisgICAgcmVjdC5mQm90dG9tID0gcG9pbnRzWzBdLmZZICsgMTsKKworICAgIGZvciAoaW50IGkg
PSAxOyBpIDwgbnVtUG9pbnRzOyArK2kpIHsKKyAgICAgICAgcmVjdC5mTGVmdCA9IHN0ZDo6bWlu
KHJlY3QuZkxlZnQsIHBvaW50c1tpXS5mWCk7CisgICAgICAgIHJlY3QuZlJpZ2h0ID0gc3RkOjpt
YXgocmVjdC5mUmlnaHQsIHBvaW50c1tpXS5mWCArIDEpOworICAgICAgICByZWN0LmZUb3AgPSBz
dGQ6Om1pbihyZWN0LmZUb3AsIHBvaW50c1tpXS5mWSk7CisgICAgICAgIHJlY3QuZkJvdHRvbSA9
IHN0ZDo6bWF4KHJlY3QuZkJvdHRvbSwgcG9pbnRzW2ldLmZZICsgMSk7CisgICAgfQorCisgICAg
Ym9vbCBvcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50KTsKKyAgICBib29sIGZpbGxzQm91bmRz
ID0gZmFsc2U7CisKKyAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCisgICAg
ICAgIHRyYWNrRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgcmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKHJlY3QsICZyZWN0KTsKKyAgICAgICAg
dHJhY2tEcmF3KHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICB9Cit9CisK
K3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmIGJv
dW5kcywgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgYm9vbCBvcGFxdWUgPSBwYWludElz
T3BhcXVlKHBhaW50KTsKKyAgICBib29sIGZpbGxzQm91bmRzID0gZmFsc2U7CisKKyAgICBpZiAo
IXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCisgICAgICAgIHRyYWNrRHJhd1VuYm91bmRl
ZChwYWludCwgb3BhcXVlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2tSZWN0IHJlY3Q7CisgICAg
ICAgIHJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhib3VuZHMsICZyZWN0KTsKKyAgICAg
ICAgdHJhY2tEcmF3KHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICB9Cit9
CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6dHJhY2tEcmF3KGNvbnN0IFNrUmVjdCYgcmVjdCwg
Y29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgZHJhd3NPcGFxdWUsIGJvb2wgZmlsbHNCb3VuZHMp
Cit7CisgICAgaWYgKGZpbGxzQm91bmRzICYmIHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGRyYXdz
T3BhcXVlKSkKKyAgICAgICAgbWFya1JlY3RBc09wYXF1ZShyZWN0KTsKKyAgICBlbHNlIGlmIChT
a1JlY3Q6OkludGVyc2VjdHMocmVjdCwgbV9vcGFxdWVSZWN0KSAmJiAheGZlcm1vZGVQcmVzZXJ2
ZXNPcGFxdWUocGFpbnQsIGRyYXdzT3BhcXVlKSkKKyAgICAgICAgbWFya1JlY3RBc05vbk9wYXF1
ZShyZWN0KTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjp0cmFja0RyYXdVbmJvdW5kZWQo
Y29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgZHJhd3NPcGFxdWUpCit7CisgICAgaWYgKCF4ZmVy
bW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpKSB7CisgICAgICAgIC8vIFdl
IGRvbid0IGtub3cgd2hhdCB3YXMgZHJhd24gb24gc28ganVzdCBkZXN0cm95IHRoZSBrbm93biBv
cGFxdWUgYXJlYS4KKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gU2tSZWN0OjpNYWtlRW1wdHkoKTsK
KyAgICB9Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc09wYXF1ZShjb25z
dCBTa1JlY3QmIHJlY3QpCit7CisgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIGFuIG9w
YXF1ZSByZWdpb24gYnV0IGJvdW5kIGl0cyBjb21wbGV4aXR5IGF0IGEgY29uc3RhbnQgc2l6ZS4K
KyAgICAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSBzZWVuIGJ5IGFy
ZWEuIElmIHdlIGNhbiBhZGQgdGhlIG5ldyByZWN0IHRvIHRoaXMKKyAgICAvLyByZWN0YW5nbGUg
dGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVhc2Ug
dGhlIGFyZWEgcmV0dXJuZWQKKyAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhp
dHkuCisKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IW1fcGxhdGZvcm1Db250ZXh0LT5jbGlwcGVkVG9JbWFnZSgpLmlzT3BhcXVlKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobV9vcGFxdWVSZWN0LmNvbnRhaW5zKHJlY3QpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgeworICAgICAgICBt
X29wYXF1ZVJlY3QgPSByZWN0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHJl
Y3QuZlRvcCA8PSBtX29wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gbV9vcGFxdWVS
ZWN0LmZCb3R0b20pIHsKKyAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZkxl
ZnQgJiYgcmVjdC5mUmlnaHQgPiBtX29wYXF1ZVJlY3QuZkxlZnQpCisgICAgICAgICAgICBtX29w
YXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OworICAgICAgICBpZiAocmVjdC5mUmlnaHQgPiBt
X29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZlJpZ2h0KQor
ICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OworICAgIH0gZWxz
ZSBpZiAocmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0g
bV9vcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9wIDwgbV9vcGFxdWVS
ZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZUb3ApCisgICAgICAgICAg
ICBtX29wYXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRvcDsKKyAgICAgICAgaWYgKHJlY3QuZkJvdHRv
bSA+IG1fb3BhcXVlUmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mQm90
dG9tKQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZCb3R0b207Cisg
ICAgfQorCisgICAgbG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpbV9vcGFxdWVSZWN0LndpZHRoKCkg
KiAobG9uZyltX29wYXF1ZVJlY3QuaGVpZ2h0KCk7CisgICAgbG9uZyBhcmVhID0gKGxvbmcpcmVj
dC53aWR0aCgpICogKGxvbmcpcmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYSA+IG9wYXF1ZUFy
ZWEpCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9u
U2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCit7CisgICAgLy8g
V2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVlIHJlY3RhbmdsZSBh
cyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0CisgICAgLy8gcmVjdGFuZ2xlIGluc2lk
ZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8cmVjdHwuCisKKyAg
ICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7CisgICAgICAgIG1fb3BhcXVlUmVj
dC5zZXRFbXB0eSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGRlbHRhTGVm
dCA9IHJlY3QuZkxlZnQgLSBtX29wYXF1ZVJlY3QuZkxlZnQ7CisgICAgaW50IGRlbHRhUmlnaHQg
PSBtX29wYXF1ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRlbHRhVG9wID0g
cmVjdC5mVG9wIC0gbV9vcGFxdWVSZWN0LmZUb3A7CisgICAgaW50IGRlbHRhQm90dG9tID0gbV9v
cGFxdWVSZWN0LmZCb3R0b20gLSByZWN0LmZCb3R0b207CisKKyAgICAvLyBob3Jpem9udGFsIGlz
IHRoZSBsYXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSBy
aWdodCBvZiB8cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCisgICAgLy8gdmVydGljYWwg
aXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgYWJvdmUgb3IgYmVsb3cgfHJlY3R8
IGFuZCBpbnNpZGUgbV9vcGFxdWVSZWN0LgorICAgIFNrUmVjdCBob3Jpem9udGFsID0gbV9vcGFx
dWVSZWN0OworICAgIGlmIChkZWx0YVRvcCA+IGRlbHRhQm90dG9tKQorICAgICAgICBob3Jpem9u
dGFsLmZCb3R0b20gPSByZWN0LmZUb3A7CisgICAgZWxzZQorICAgICAgICBob3Jpem9udGFsLmZU
b3AgPSByZWN0LmZCb3R0b207CisgICAgU2tSZWN0IHZlcnRpY2FsID0gbV9vcGFxdWVSZWN0Owor
ICAgIGlmIChkZWx0YUxlZnQgPiBkZWx0YVJpZ2h0KQorICAgICAgICB2ZXJ0aWNhbC5mUmlnaHQg
PSByZWN0LmZMZWZ0OworICAgIGVsc2UKKyAgICAgICAgdmVydGljYWwuZkxlZnQgPSByZWN0LmZS
aWdodDsKKworICAgIGlmICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylob3Jpem9u
dGFsLmhlaWdodCgpID4gKGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRpY2FsLmhl
aWdodCgpKQorICAgICAgICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgIGVsc2UKKyAg
ICAgICAgbV9vcGFxdWVSZWN0ID0gdmVydGljYWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3Bh
cXVlUmVnaW9uU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA2MzUzMDgxYTdhYmFjYzQ4NGVjM2NhN2Ex
ZDgzMTI0MWY4Mzc1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBPcGFxdWVSZWdpb25Ta2lhX2gKKyNkZWZpbmUgT3BhcXVlUmVnaW9uU2tpYV9oCisKKyNpbmNs
dWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tQYWlu
dC5oIgorI2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYTsKK307CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyBpcyBhbiBlbmNhcHN1bGF0aW9uIG9mIGZ1bmN0
aW9uYWxpdHkgZm9yIFBsYXRmb3JtQ29udGV4dFNraWEsIGFuZCBpdHMgbWV0aG9kcyBhcmUgbWly
cm9yZWQKKy8vIHRoZXJlIGZvciB0aGUgb3V0c2lkZSB3b3JsZC4gSXQgdHJhY2tzIHBhaW50cyBh
bmQgY29tcHV0ZXMgd2hhdCBhcmVhIHdpbGwgYmUgb3BhcXVlLgorY2xhc3MgT3BhcXVlUmVnaW9u
U2tpYSB7CitwdWJsaWM6CisgICAgT3BhcXVlUmVnaW9uU2tpYShQbGF0Zm9ybUNvbnRleHRTa2lh
Kik7CisgICAgfk9wYXF1ZVJlZ2lvblNraWEoKTsKKworICAgIC8vIFRoZSByZXN1bHRpbmcgb3Bh
cXVlIHJlZ2lvbiBhcyBhIHNpbmdsZSBTa1JlY3QuCisgICAgY29uc3QgU2tSZWN0JiBhc1JlY3Qo
KSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlY3Q7IH0KKworICAgIHZvaWQgdHJhY2tEcmF3UmVj
dChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqKTsKKyAgICB2
b2lkIHRyYWNrRHJhd1BhdGgoY29uc3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOworICAgIHZv
aWQgdHJhY2tEcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2ludHMsIGNv
bnN0IFNrUG9pbnRbXSwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgdHJhY2tEcmF3Qm91bmRl
ZChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB0
cmFja0RyYXcoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGJvb2wgZHJhd3NPcGFxdWUs
IGJvb2wgZmlsbHNCb3VuZHMpOworICAgIHZvaWQgdHJhY2tEcmF3VW5ib3VuZGVkKGNvbnN0IFNr
UGFpbnQmLCBib29sIGRyYXdzT3BhcXVlKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNPcGFxdWUoY29u
c3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYp
OworCisgICAgU2tSZWN0IG1fb3BhcXVlUmVjdDsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBt
X3BsYXRmb3JtQ29udGV4dDsKK307CisKK30KKyNlbmRpZiAvLyBPcGFxdWVSZWdpb25Ta2lhX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGE1ZTE4NjgwZDIwYmJiZjY5ODI4NjY4ZTBl
YjljZDZmMWU5ODMwYjUuLmQxZTUyNGUxMWI1NTEyYWZkMDY0YWYzNDg4MDQyYmVjYTY3ZTAxZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMTc5LDYgKzE3OSw4IEBAIFNrQ29sb3Ig
UGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGx5QWxwaGEoU2tDb2xvciBjKSBjb25zdAog
Ly8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0
Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMp
CisgICAgLCBtX29wYXF1ZVJlZ2lvbih0aGlzKQorICAgICwgbV90cmFja09wYXF1ZVJlZ2lvbihm
YWxzZSkKICAgICAsIG1fcHJpbnRpbmcoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkKGZhbHNlKQog
ICAgICwgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcihmYWxzZSkKQEAgLTI2Niw2ICsyNjgsMTEgQEAg
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0aEFudGlBbGlhc2VkKGNvbnN0IFNrUGF0
aCYgY2xpcFBhdGgpCiAgICAgY2FudmFzKCktPmNsaXBQYXRoKGNsaXBQYXRoLCBTa1JlZ2lvbjo6
a0ludGVyc2VjdF9PcCwgdHJ1ZSk7CiB9CiAKK2NvbnN0IFNrQml0bWFwJiBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpjbGlwcGVkVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPm1f
aW1hZ2VCdWZmZXJDbGlwOworfQorCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmUo
KQogewogICAgIGlmICghbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXAuZW1wdHkoKSkgewpAQCAt
Mjg3LDYgKzI5NCw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0
IHJlY3QpCiAgICAgaWYgKGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CiAgICAgICAgIHNldHVw
UGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0
LCBwYWludCk7CisgICAgICAgIHRyYWNrRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogICAgIH0KIAog
ICAgIGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlCkBAIC0yOTksMTIgKzMw
NywxNiBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQog
CiAgICAgICAgIFNrUmVjdCB0b3BCb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVj
dC5mUmlnaHQsIHJlY3QuZlRvcCArIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHRv
cEJvcmRlciwgcGFpbnQpOworICAgICAgICB0cmFja0RyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQp
OwogICAgICAgICBTa1JlY3QgYm90dG9tQm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZCb3R0
b20gLSAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIH07CiAgICAgICAgIGNhbnZhcygpLT5k
cmF3UmVjdChib3R0b21Cb3JkZXIsIHBhaW50KTsKKyAgICAgICAgdHJhY2tEcmF3UmVjdChib3R0
b21Cb3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IGxlZnRCb3JkZXIgPSB7IHJlY3QuZkxl
ZnQsIHJlY3QuZlRvcCArIDEsIHJlY3QuZkxlZnQgKyAxLCByZWN0LmZCb3R0b20gLSAxIH07CiAg
ICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CisgICAgICAgIHRy
YWNrRHJhd1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3QgcmlnaHRCb3Jk
ZXIgPSB7IHJlY3QuZlJpZ2h0IC0gMSwgcmVjdC5mVG9wICsgMSwgcmVjdC5mUmlnaHQsIHJlY3Qu
ZkJvdHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBw
YWludCk7CisgICAgICAgIHRyYWNrRHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKICAgICB9
CiB9CiAKQEAgLTUzOSw2ICs1NTEsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnBhaW50
U2tQYWludChjb25zdCBTa1JlY3QmIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCkKIHsKICAgICBtX2NhbnZhcy0+ZHJhd1Jl
Y3QocmVjdCwgcGFpbnQpOworICAgIHRyYWNrRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQogCiBj
b25zdCBTa0JpdG1hcCogUGxhdGZvcm1Db250ZXh0U2tpYTo6Yml0bWFwKCkgY29uc3QKQEAgLTU5
Nyw0ICs2MTAsMjggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICBtX2dwdUNvbnRleHQgPSBjb250
ZXh0OwogfQogCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnRyYWNrRHJhd1JlY3QoY29uc3Qg
U2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1h
cCkKK3sKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdp
b24udHJhY2tEcmF3UmVjdChyZWN0LCBwYWludCwgYml0bWFwKTsKK30KKwordm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjp0cmFja0RyYXdQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQ
YWludCYgcGFpbnQpCit7CisgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1f
b3BhcXVlUmVnaW9uLnRyYWNrRHJhd1BhdGgocGF0aCwgcGFpbnQpOworfQorCit2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnRyYWNrRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlIG1vZGUs
IGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnQgcG9pbnRzW10sIGNvbnN0IFNrUGFpbnQmIHBh
aW50KQoreworICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJl
Z2lvbi50cmFja0RyYXdQb2ludHMobW9kZSwgbnVtUG9pbnRzLCBwb2ludHMsIHBhaW50KTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFja0RyYXdCb3VuZGVkKGNvbnN0IFNrUmVj
dCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgaWYgKG1fdHJhY2tPcGFxdWVS
ZWdpb24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9uLnRyYWNrRHJhd0JvdW5kZWQocmVjdCwgcGFp
bnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmlu
ZGV4IDdkY2ZiZTJlMzdmYzFjNDI3ZGRlN2ZiM2Y2MDMxMWJlMjc0OTgyMTMuLmEzYjIwNmRhYThi
ZWRhZTAxZmY1NDQyZjI3ZDRkNDM1OGM1MTNlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBA
IC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUgIk9wYXF1ZVJlZ2lvblNraWEuaCIKIAogI2luY2x1
ZGUgIlNrQ2FudmFzLmgiCiAjaW5jbHVkZSAiU2tEYXNoUGF0aEVmZmVjdC5oIgpAQCAtOTgsNiAr
OTksOCBAQCBwdWJsaWM6CiAgICAgLy8gTk9URTogfGltYWdlQnVmZmVyfCBtYXkgYmUgZGVsZXRl
ZCBiZWZvcmUgdGhlIHxyZXN0b3JlfCBpcyBpbnZva2VkLgogICAgIHZvaWQgYmVnaW5MYXllckNs
aXBwZWRUb0ltYWdlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKik7CiAgICAg
dm9pZCBjbGlwUGF0aEFudGlBbGlhc2VkKGNvbnN0IFNrUGF0aCYpOworICAgIC8vIElmIG5vbi1l
bXB0eSwgdGhlIGxheWVyIGlzIGNsaXBwZWQgdG8gdGhlIGJpdG1hcC4KKyAgICBjb25zdCBTa0Jp
dG1hcCYgY2xpcHBlZFRvSW1hZ2UoKSBjb25zdDsKIAogICAgIC8vIFNldHMgdXAgdGhlIGNvbW1v
biBmbGFncyBvbiBhIHBhaW50IGZvciBhbnRpYWxpYXNpbmcsIGVmZmVjdHMsIGV0Yy4KICAgICAv
LyBUaGlzIGlzIGltcGxpY2l0bHkgY2FsbGVkIGJ5IHNldHVwUGFpbnRGaWxsIGFuZCBzZXR1cFBh
aW50U3Ryb2tlLCBidXQKQEAgLTE4Nyw2ICsxOTAsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNE
ZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJyZWQ7IH0KICAgICB2b2lkIHNldERlZmVy
cmVkKGJvb2wgZGVmZXJyZWQpIHsgbV9kZWZlcnJlZCA9IGRlZmVycmVkOyB9CiAKKyAgICB2b2lk
IHNldFRyYWNrT3BhcXVlUmVnaW9uKGJvb2wgdHJhY2spIHsgbV90cmFja09wYXF1ZVJlZ2lvbiA9
IHRyYWNrOyB9CisKKyAgICAvLyBUaGlzIHdpbGwgYmUgYW4gZW1wdHkgcmVnaW9uIHVubGVzcyB0
cmFja2luZyBpcyBlbmFibGVkLgorICAgIGNvbnN0IE9wYXF1ZVJlZ2lvblNraWEmIG9wYXF1ZVJl
Z2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlUmVnaW9uOyB9CisKKyAgICAvLyBBZnRlciBk
cmF3aW5nIGluIHRoZSBjb250ZXh0J3MgY2FudmFzLCB1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIG5v
dGlmeSB0aGUgY29udGV4dCBzbyBpdCBjYW4gdHJhY2sgdGhlIG9wYXF1ZSByZWdpb24uCisgICAg
dm9pZCB0cmFja0RyYXdSZWN0KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBjb25zdCBT
a0JpdG1hcCogPSAwKTsKKyAgICB2b2lkIHRyYWNrRHJhd1BhdGgoY29uc3QgU2tQYXRoJiwgY29u
c3QgU2tQYWludCYpOworICAgIHZvaWQgdHJhY2tEcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1v
ZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRbXSwgY29uc3QgU2tQYWludCYpOworICAg
IC8vIEZvciBkcmF3aW5nIG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgZmlsbCB0aGUgZW50aXJlIHJl
Y3QuCisgICAgdm9pZCB0cmFja0RyYXdCb3VuZGVkKGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFp
bnQmKTsKKwogcHJpdmF0ZToKICAgICAvLyBVc2VkIHdoZW4gcmVzdG9yaW5nIGFuZCB0aGUgc3Rh
dGUgaGFzIGFuIGltYWdlIGNsaXAuIE9ubHkgc2hvd3MgdGhlIHBpeGVscyBpbgogICAgIC8vIG1f
Y2FudmFzIHRoYXQgYXJlIGFsc28gaW4gaW1hZ2VCdWZmZXIuCkBAIC0yMTAsNiArMjI1LDEwIEBA
IHByaXZhdGU6CiAgICAgLy8gbVN0YXRlU3RhY2suYmFjaygpLgogICAgIFN0YXRlKiBtX3N0YXRl
OwogCisgICAgLy8gVHJhY2tzIHRoZSByZWdpb24gcGFpbnRlZCBvcGFxdWUgdmlhIHRoZSBHcmFw
aGljc0NvbnRleHQuCisgICAgT3BhcXVlUmVnaW9uU2tpYSBtX29wYXF1ZVJlZ2lvbjsKKyAgICBi
b29sIG1fdHJhY2tPcGFxdWVSZWdpb247CisKICAgICAvLyBTdG9yZXMgaW1hZ2Ugc2l6ZXMgZm9y
IGEgaGludCB0byBjb21wdXRlIGltYWdlIHJlc2FtcGxpbmcgbW9kZXMuCiAgICAgLy8gVmFsdWVz
IGFyZSB1c2VkIGluIEltYWdlU2tpYS5jcHAKICAgICBJbnRTaXplIG1faW1hZ2VSZXNhbXBsaW5n
SGludFNyY1NpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjYThmYjM5ZDI0
ZDlmZDFjMmE2ZDg2YmQ3M2U3NDUxMzg1MWFiMWY5Li40YzBjMDIzZTFmN2Q5N2QxNzlkNTA0NjE4
MjdjOTgyZjY4MWQ1ZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTExOSw2
ICsxMTksNyBAQAogICAgICAgICAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAg
ICAgICAgICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAnLAogICAgICAgICAg
ICAgICAgIF0sCiAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRT
a2lhVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4
dFNraWFUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmNhODE3NzUyYzE1MGMwNWUzMDczZGYwNmFiZjZh
NDAwODFmNmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKQEAgLTAsMCArMSw0MDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNr
aWEuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5j
bHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChh
LCBiKSBcCisgICAgRVhQRUNUX0VRKGEuZkxlZnQsIGIuZkxlZnQpOyBcCisgICAgRVhQRUNUX0VR
KGEuZlJpZ2h0LCBiLmZSaWdodCk7IFwKKyAgICBFWFBFQ1RfRVEoYS5mVG9wLCBiLmZUb3ApOyBc
CisgICAgRVhQRUNUX0VRKGEuZkJvdHRvbSwgYi5mQm90dG9tKTsgXAorCisjZGVmaW5lIEVYUEVD
VF9QSVhFTFNfTUFUQ0goYml0bWFwLCBvcGFxdWVSZWN0KSBcCit7IFwKKyAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGxvY2tlcihiaXRtYXApOyBcCisgICAgZm9yIChpbnQgeSA9IFNrU2NhbGFyQ2VpbChv
cGFxdWVSZWN0LmZUb3ApOyB5IDwgU2tTY2FsYXJGbG9vcihvcGFxdWVSZWN0LmZCb3R0b20pOyAr
K3kpIFwKKyAgICAgICAgZm9yIChpbnQgeCA9IFNrU2NhbGFyQ2VpbChvcGFxdWVSZWN0LmZMZWZ0
KTsgeCA8IFNrU2NhbGFyRmxvb3Iob3BhcXVlUmVjdC5mUmlnaHQpOyArK3gpIHsgXAorICAgICAg
ICAgICAgaW50IGFscGhhID0gKmJpdG1hcC5nZXRBZGRyMzIoeCwgeSkgPj4gMjQ7IFwKKyAgICAg
ICAgICAgIEVYUEVDVF9FUSgyNTUsIGFscGhhKTsgXAorICAgICAgICB9IFwKK30KKworVEVTVChQ
bGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVUZXN0KQoreworICAgIFNrQml0bWFw
IGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZp
ZywgNDAwLCA0MDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNh
bnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQo
JmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUp
OworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAg
Q29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAu
MGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
MTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNv
dXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAx
MCs5MCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEw
LCA5MCwgOTApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigxMCwgMTAsIDEwKzkwLCAx
MCs5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQ
RUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5
MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlUGx1c0xpZ2h0ZXIpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMTAsIDEwLCAxMCs5MCwgMTArOTAp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9Q
SVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArOTAsIDEwKzkwKSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgYWxwaGEsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChTa1JlY3Q6Ok1ha2VMVFJCKDEwLCAxMCwgMTArODksIDEwKzkwKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRl
eHQuZmlsbFJlY3QoRmxvYXRSZWN0KDgsIDgsIDMsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdXQpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6
TWFrZUxUUkIoMTEsIDEwLCAxMSs4OCwgMTArOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVj
dChGbG9hdFJlY3QoMzAsIDMwLCAyOTAsIDI5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtl
TFRSQigzMCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KDQwLCAyMCwgMjkwLCA1MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
Q29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRS
QigzMCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZUxUUkIoMzAs
IDMwLCAzMCsyOTAsIDMwKzI5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgxMCwgMTAsIDM5MCwgNTApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwgMzAsIDMwKzI5MCwgMzArMjkwKSwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxT
X01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCksIG9wYXF1
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNU
X0VRX1JFQ1QoU2tSZWN0OjpNYWtlTFRSQigzMCwgMTAsIDMwKzI5MCwgMTArMzEwKSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30K
KworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVMaW5lVGVzdCkKK3sK
KyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIDIwMCwgMjAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAg
ICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxh
dGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1
ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250
ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBD
b2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIGNvbnRleHQuc2V0U2hv
dWxkQW50aWFsaWFzKGZhbHNlKTsKKyAgICBjb250ZXh0LnNldE1pdGVyTGltaXQoMCk7CisgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoNCk7CisgICAgY29udGV4dC5zZXRMaW5lQ2FwKFNx
dWFyZUNhcCk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CisgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAg
ICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CisKKyAgICBjb250ZXh0LnNh
dmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDApLCBJbnRQb2ludCgxMDAs
IDApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6
Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9pbnQoMTAwLCAxMCkpOwor
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZ
V0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4
dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4
dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBvaW50KDEwMCwgMTApKTsKKyAgICBjb250
ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAx
MywgOTAsIDg3KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ry
b2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xp
bmUoSW50UG9pbnQoMCwgMTEpLCBJbnRQb2ludCgxMDAsIDExKSk7CisgICAgY29udGV4dC5yZXN0
b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTQsIDkwLCA4
NiksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChT
a1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKKworICAgIGNvbnRleHQuc2F2ZSgp
OworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgMCksIEludFBvaW50KDEwMCwgMCkp
OworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFr
ZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxp
YXMoZmFsc2UpOworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKElu
dFBvaW50KDAsIDEwKSwgSW50UG9pbnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgY29udGV4dC5z
YXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvcGFxdWUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgMTApLCBJbnRQb2ludCgx
MDAsIDEwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tS
ZWN0OjpNYWtlWFlXSCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDExKSwgSW50UG9pbnQoMTAwLCAxMSkp
OworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFr
ZVhZV0goMTAsIDE0LCA5MCwgODYpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LCB0cmFja09wYXF1ZVBhdGhUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBi
aXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOwor
ICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOwor
CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAg
cGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEu
MGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYs
IDAuMGYpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
IEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFU
Q0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisg
ICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAgIGNvbnRleHQuc2V0TWl0
ZXJMaW1pdCgxKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyg1KTsKKyAgICBjb250
ZXh0LnNldExpbmVDYXAoU3F1YXJlQ2FwKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNv
bGlkU3Ryb2tlKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVT
b3VyY2VJbik7CisKKyAgICBQYXRoIHBhdGg7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihh
bHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgw
LCAwKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDApKTsKKyAgICBjb250
ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0go
MTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8o
RmxvYXRQb2ludCgwLCAxMCkpOworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAx
MykpOworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tS
ZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgcGF0aC5jbGVhcigpOworCisg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
IHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMTApKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9h
dFBvaW50KDEwMCwgMTMpKTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIEVYUEVD
VF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIHBhdGgu
Y2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIDE0KSk7CisgICAgcGF0aC5h
ZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5maWxsUGF0aChwYXRo
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxNCwgOTAsIDg2KSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBwYXRoLmNsZWFyKCk7Cit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qs
IHRyYWNrT3BhcXVlSW1hZ2VUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRt
YXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAg
IGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxh
dGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYs
IDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAu
MGYpOworCisgICAgU2tCaXRtYXAgZHJhd0JpdG1hcDsKKyAgICBkcmF3Qml0bWFwLnNldENvbmZp
ZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDEwLCAxMCk7CisgICAgZHJhd0JpdG1hcC5h
bGxvY1BpeGVscygpOworCisgICAgZHJhd0JpdG1hcC5zZXRJc09wYXF1ZSh0cnVlKTsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGRyYXdCaXRtYXAuaGVpZ2h0KCk7ICsreSkKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBkcmF3Qml0bWFwLndpZHRoKCk7ICsreCkKKyAgICAgICAgICAgICpk
cmF3Qml0bWFwLmdldEFkZHIzMih4LCB5KSA9IDB4RkZGRkZGRkY7CisgICAgUmVmUHRyPEJpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhPiBvcGFxdWVJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJh
bWVTa2lhOjpjcmVhdGUoZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKG9wYXF1
ZUltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAgIGRyYXdCaXRtYXAuc2V0SXNP
cGFxdWUoZmFsc2UpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZHJhd0JpdG1hcC5oZWlnaHQo
KTsgKyt5KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGRyYXdCaXRtYXAud2lkdGgoKTsg
Kyt4KQorICAgICAgICAgICAgKmRyYXdCaXRtYXAuZ2V0QWRkcjMyKHgsIHkpID0gMHgwMDAwMDAw
MDsKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGFscGhhSW1hZ2UgPSBC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKGRyYXdCaXRtYXAsIHRydWUpOworICAg
IEVYUEVDVF9UUlVFKGFscGhhSW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOworCisgICAg
Y29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNU
KFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3
SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAs
IDApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkw
KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1Rf
UElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpN
YWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFx
dWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoNSwgNSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFU
Q0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAg
IGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFBvaW50KDUsIDUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEw
LCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgxMCwgMTApKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBjb250ZXh0
LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2lu
dCgxMCwgMTApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwg
OTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBF
WFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDIwLCAxMCksIENvbXBvc2l0ZVNvdXJjZUluKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAyMCwgOTAsIDgwKSwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxT
X01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0QWxwaGEoMC41KTsKKyAgICBj
b250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMjUsIDE1KSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIGNvbnRleHQucmVzdG9y
ZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDI1LCA5MCwgNzUp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9Q
SVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVY
UEVDVF9FUV9SRUNUKFNrUmVjdDo6TWFrZVhZV0goMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
Yml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
Y29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMTAsIDIwKSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNU
KFNrUmVjdDo6TWFrZVhZV0goMjAsIDEwLCA4MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZl
KCk7CisgICAgY29udGV4dC5zZXRBbHBoYSgwLjUpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9w
YXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgxNSwgMjUpLCBD
b21wb3NpdGVTb3VyY2VJbik7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgyNSwgMTAsIDc1LCA5MCksIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAs
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7Cit9CisKK1RFU1QoUGxh
dGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlT3ZhbFRlc3QpCit7CisgICAgU2tCaXRt
YXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnLCAyMDAsIDIwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMg
Y2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4
dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1
ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAg
ICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEo
MC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1h
a2VYWVdIKDAsIDAsIDAsIDApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0
KDEwLCAxMCwgOTAsIDkwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCgw
LCAwLCAwLCAwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwg
OTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChTa1JlY3Q6Ok1ha2VYWVdIKDEwLCAxMCwgOTAsIDkwKSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUlu
KTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4
dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgNTAsIDMwKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoU2tSZWN0OjpNYWtlWFlXSCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3
RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgMzAsIDUwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tS
ZWN0OjpNYWtlWFlXSCg0MCwgMTAsIDYwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3Vs
ZEFudGlhbGlhcyh0cnVlKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEwLCAx
MCwgNTAsIDMwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCg0MCwgNDEs
IDYwLCA1OSksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24o
KS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDIwLCAxMCwgMzAs
IDUwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoU2tSZWN0OjpNYWtlWFlXSCg1MSwgNDEsIDQ5LCA1
OSksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122268</attachid>
            <date>2012-01-12 10:26:39 -0800</date>
            <delta_ts>2012-01-12 10:48:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120112132638.patch</filename>
            <type>text/plain</type>
            <size>53709</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjBiZWVhYWE3ZTQyYmUx
ZDdlZTM0ODQxM2YxNjIyM2I1MDg3NDlmZi4uMzE5ZGVhMDk4ZGJhOGY0YjA3YTAxNjA3ZTE2Njkw
N2MxYWJmNGQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTAxLTEyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QuY3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3T3V0ZXJQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbm5lclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdp
b25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6On5PcGFxdWVSZWdp
b25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmFzUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjp4ZmVybW9kZUlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Onhm
ZXJtb2RlUHJlc2VydmVzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3Qm91bmRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJl
Z2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVn
aW9uU2tpYTo6bWFya1JlY3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdp
b25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xpcHBlZFRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6cGFpbnRTa1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OmRpZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dFNraWE6OmRpZERyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dFNraWE6OmRpZERyYXdQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6c2V0VHJhY2tPcGFxdWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6b3BhcXVlUmVnaW9uKToKKwogMjAxMi0wMS0xMSAgQWRhbSBUcmVhdCAg
PGF0cmVhdEByaW0uY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjA4OApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNTNjNWM3NDc4
ZTZlZjYwNWY0YzM0OWY4ZmUwNWRlZDE1MDhlNjUxLi45MzdkMjU4NTc0NDIyOGQzNGIzYzQ1YTU1
OGQ5MjZhNzdiNTYwY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTAxLTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtza2lhXSBUcmFjayBhIHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZp
YSBQbGF0Zm9ybUNvbnRleHRTa2lhIGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDEtMTAgIERtaXRyeSBMb21vdiAgPGRz
bG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBvYnNvbGV0ZSBy
ZWZlcmVuY2VzIHRvIFdlYldvcmtlciBjbGFzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1Y2IzNGU1
ZWFhYzM3MjFlNTQ0ZGQ5ZDYzOGQ5NDg0YzBjMWU3MGNiLi40MTIxNzY4YmUxMGNkM2Q2YmVmZTlk
ZWRjYzg3OGYzYzk2NzU1YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zOTI2LDYgKzM5MjYsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW50UmVjdFNraWEuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tp
YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKaW5kZXggZGIzNDM2MTVmYjg4NDBmYzM4NmI2
NDZmYjJkMDU3YTRkM2FlNjkzNi4uODljY2Q5OWZmMmUyMmZkNDNjMDExYzA0NWM1MmM0ZThjYjZh
NzViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0zMzksNiArMzM5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFp
bnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC00NzMsMTEgKzQ3NCwxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBw
YWludC5zZXRBbnRpQWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0g
Tm9TdHJva2UpIHsKICAgICAgICAgcGFpbnQucmVzZXQoKTsKICAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKICAgICB9CiB9CiAK
QEAgLTUxMywxMSArNTE2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBJbnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VT
dHlsZSgpICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAmcmVjdCwgMCk7
CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFp
bnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5kZWQocmVjdCwgcGFp
bnQpOwogICAgIH0KIH0KIApAQCAtNTI2LDcgKzUzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uCiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJh
d091dGVyUGF0aChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQm
IHBhaW50LCBpbnQgd2lkdGgpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd091dGVyUGF0aChQbGF0
Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1BhdGgm
IHBhdGgsIFNrUGFpbnQmIHBhaW50LCBpbnQgd2lkdGgpCiB7CiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pICYmIE9TKERBUldJTikKICAgICBwYWludC5zZXRBbHBoYSg2NCk7CkBAIC01MzcsMTQgKzU0
MiwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd091dGVyUGF0aChTa0NhbnZhcyogY2FudmFz
LCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmCiAgICAgcGFpbnQuc2V0UGF0aEVmZmVjdChu
ZXcgU2tDb3JuZXJQYXRoRWZmZWN0KDEpKS0+dW5yZWYoKTsKICNlbmRpZgogICAgIGNhbnZhcy0+
ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIGNvbnRleHQtPmRpZERyYXdQYXRoKHBhdGgsIHBh
aW50KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRyYXdJbm5lclBhdGgoU2tDYW52YXMqIGNh
bnZhcywgY29uc3QgU2tQYXRoJiBwYXRoLCBTa1BhaW50JiBwYWludCwgaW50IHdpZHRoKQorc3Rh
dGljIGlubGluZSB2b2lkIGRyYXdJbm5lclBhdGgoUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4
dCwgU2tDYW52YXMqIGNhbnZhcywgY29uc3QgU2tQYXRoJiBwYXRoLCBTa1BhaW50JiBwYWludCwg
aW50IHdpZHRoKQogewogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAgICAg
cGFpbnQuc2V0QWxwaGEoMTI4KTsKICAgICBwYWludC5zZXRTdHJva2VXaWR0aCh3aWR0aCAqIDAu
NWYpOwogICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIGNvbnRleHQtPmRp
ZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKICNlbmRpZgogfQogCkBAIC01ODIsOCArNTg5LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50IHdpZHRoLCBpbnQKICAgICBwYWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7
CiAgICAgZm9jdXNSaW5nUmVnaW9uLmdldEJvdW5kYXJ5UGF0aCgmcGF0aCk7CiAgICAgU2tDYW52
YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICBkcmF3T3V0ZXJQ
YXRoKGNhbnZhcywgcGF0aCwgcGFpbnQsIHdpZHRoKTsKLSAgICBkcmF3SW5uZXJQYXRoKGNhbnZh
cywgcGF0aCwgcGFpbnQsIHdpZHRoKTsKKyAgICBkcmF3T3V0ZXJQYXRoKHBsYXRmb3JtQ29udGV4
dCgpLCBjYW52YXMsIHBhdGgsIHBhaW50LCB3aWR0aCk7CisgICAgZHJhd0lubmVyUGF0aChwbGF0
Zm9ybUNvbnRleHQoKSwgY2FudmFzLCBwYXRoLCBwYWludCwgd2lkdGgpOwogfQogCiAvLyBUaGlz
IGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCkBAIC02MzEsMTIgKzYzOCwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3Qg
SW50UG9pbnQmIHBvaW50MikKICAgICAgICAgZmlsbFBhaW50LnNldENvbG9yKHBhaW50LmdldENv
bG9yKCkpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIx
LCBmaWxsUGFpbnQpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdS
ZWN0KHIyLCBmaWxsUGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1Jl
Y3QocjEsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVj
dChyMiwgZmlsbFBhaW50KTsKICAgICB9CiAKICAgICBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJp
ZXMocDEsIHAyLCB3aWR0aCwgcGVuU3R5bGUpOwogICAgIFNrUG9pbnQgcHRzWzJdID0geyAoU2tQ
b2ludClwMSwgKFNrUG9pbnQpcDIgfTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+ZHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7
CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQb2ludHMoU2tDYW52YXM6OmtMaW5lc19Q
b2ludE1vZGUsIDIsIHB0cywgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLCBU
ZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCkBAIC03MTIsNiArNzIyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHB0
LCBmbG9hdCB3aWR0aCwKICAgICAgICAgICAgICBvcmlnaW5YICsgV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcih3aWR0aCksCiAgICAgICAgICAgICAgb3JpZ2luWSArIFNrSW50VG9TY2FsYXIobWlzc3Bl
bGxCaXRtYXAtPmhlaWdodCgpKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5k
cmF3UmVjdChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0
KHJlY3QsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwdCwKQEAgLTczNiw2ICs3NDcsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIC8vIFRl
eHQgbGluZXMgYXJlIGRyYXduIHVzaW5nIHRoZSBzdHJva2UgY29sb3IuCiAgICAgcGFpbnQuc2V0
Q29sb3IocGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkpOwogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CiB9CiAKIC8vIERyYXdzIGEgZmls
bGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCkBAIC03NzAsNiArNzgyLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb0ZpbGwpCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNzg4
LDYgKzgwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1Jl
Y3QociwgcGFpbnQpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKIH0KQEAg
LTgxNiw2ICs4MzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zZXR1cFBhaW50Q29tbW9uKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3IoY29s
b3IucmdiKCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qociwg
cGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwKQEAgLTg1NSw2ICs4NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVw
UGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3IoY29sb3IucmdiKCkp
OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAK
IEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CkBAIC0xMTM5
LDYgKzExNTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJl
Y3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQogICAgIGlmICghaXNQYXRoU2tp
YVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgICByZXR1cm47CiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250
ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQpAQCAtMTE1Myw2ICsxMTcw
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRv
U3Ryb2tlKQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVw
UGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5k
aWREcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQpAQCAtMTE3Myw5
ICsxMTkxLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIGJvb2wgdmFsaWRXID0gci53aWR0aCgp
ID4gMDsKICAgICBib29sIHZhbGlkSCA9IHIuaGVpZ2h0KCkgPiAwOwogICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgaWYgKHZhbGlkVyAmJiB2
YWxpZEgpCisgICAgaWYgKHZhbGlkVyAmJiB2YWxpZEgpIHsKICAgICAgICAgY2FudmFzLT5kcmF3
UmVjdChyLCBwYWludCk7Ci0gICAgZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgeworICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOworICAgIH0gZWxzZSBp
ZiAodmFsaWRXIHx8IHZhbGlkSCkgewogICAgICAgICAvLyB3ZSBhcmUgZXhwZWN0ZWQgdG8gcmVz
cGVjdCB0aGUgbGluZUpvaW4sIHNvIHdlIGNhbid0IGp1c3QgY2FsbAogICAgICAgICAvLyBkcmF3
TGluZSAtLSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHBhdGggdGhhdCBkb3VibGVzIGJhY2sgb24gaXRz
ZWxmLgogICAgICAgICBTa1BhdGggcGF0aDsKQEAgLTExODMsNiArMTIwMiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQogICAgICAgICBwYXRoLmxpbmVUbyhyLmZSaWdodCwgci5mQm90dG9tKTsKICAgICAg
ICAgcGF0aC5jbG9zZSgpOwogICAgICAgICBjYW52YXMtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsK
KyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcAppbmRleCBlNjZkYmFiNDM1MGQ0NWQzNDNlZjFkM2ZmNTYyMWE4OGEzOTc5
ZWM2Li4xZDVkOTkxMWJhYjA4YmZhNTBjY2NhODgwNzEzZGQzMTU2MmQwOWY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBA
IC0yNDgsNiArMjQ4LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9ybUNvbnRl
eHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcKICAgICAgICAgLy8gd2Ug
ZG9uJ3Qgc2VuZCBleHRyYSBwaXhlbHMuCiAgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3Qo
Yml0bWFwLmJpdG1hcCgpLCAmc3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CiAgICAgfQorICAg
IHBsYXRmb3JtQ29udGV4dC0+ZGlkRHJhd1JlY3QoZGVzdFJlY3QsIHBhaW50LCAmYml0bWFwLmJp
dG1hcCgpKTsKIH0KIAogLy8gVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRoIHRo
ZSBnaXZlbiBtYXRyaXguIFVzZWQgdG8gc2VlIGhvdyBiaWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFhNWFkNGJhNjgzMjFmNmY0OGRkMzQwZmZjMTAzMzY5NzUwMTBiYzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1
ZVJlZ2lvblNraWEuY3BwCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIk9wYXF1ZVJlZ2lvblNraWEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dFNraWEuaCIKKworI2luY2x1ZGUgIlNrU2hhZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworT3BhcXVlUmVnaW9uU2tpYTo6T3BhcXVlUmVnaW9uU2tpYSgpCisgICAgOiBtX29wYXF1ZVJl
Y3QoU2tSZWN0OjpNYWtlRW1wdHkoKSkKK3sKK30KKworT3BhcXVlUmVnaW9uU2tpYTo6fk9wYXF1
ZVJlZ2lvblNraWEoKQoreworfQorCitJbnRSZWN0IE9wYXF1ZVJlZ2lvblNraWE6OmFzUmVjdCgp
IGNvbnN0Cit7CisgICAgLy8gUmV0dXJucyB0aGUgbGFyZ2VzdCBlbmNsb3NlZCByZWN0LgorICAg
IGludCBsZWZ0ID0gU2tTY2FsYXJDZWlsKG1fb3BhcXVlUmVjdC5mTGVmdCk7CisgICAgaW50IHRv
cCA9IFNrU2NhbGFyQ2VpbChtX29wYXF1ZVJlY3QuZlRvcCk7CisgICAgaW50IHJpZ2h0ID0gU2tT
Y2FsYXJGbG9vcihtX29wYXF1ZVJlY3QuZlJpZ2h0KTsKKyAgICBpbnQgYm90dG9tID0gU2tTY2Fs
YXJGbG9vcihtX29wYXF1ZVJlY3QuZkJvdHRvbSk7CisgICAgcmV0dXJuIEludFJlY3QobGVmdCwg
dG9wLCByaWdodC1sZWZ0LCBib3R0b20tdG9wKTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSB4ZmVybW9kZSB3aWxsIGZvcmNlIHRoZSBkc3QgdG8gYmUgb3BhcXVlLCByZWdhcmRsZXNzIG9m
IHRoZSBjdXJyZW50IGRzdC4KK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZUlzT3BhcXVlKGNv
bnN0IFNrUGFpbnQmIHBhaW50LCBib29sIHNyY0lzT3BhcXVlKQoreworICAgIGlmICghc3JjSXNP
cGFxdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNrWGZlcm1vZGUqIHhmZXJtb2Rl
ID0gcGFpbnQuZ2V0WGZlcm1vZGUoKTsKKyAgICBpZiAoIXhmZXJtb2RlKQorICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gZGVmYXVsdCB0byBrU3JjT3Zlcl9Nb2RlCisgICAgU2tYZmVybW9kZTo6TW9k
ZSBtb2RlOworICAgIGlmICgheGZlcm1vZGUtPmFzTW9kZSgmbW9kZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgU2tYZmVybW9kZTo6a1Ny
Y19Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGU6IC8v
IHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE92
ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBTa1hmZXJt
b2RlOjprRHN0QVRvcF9Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtQbHVz
X01vZGU6IC8vIHNvdXJjZStkZXN0CisgICAgZGVmYXVsdDogLy8gdGhlIHJlc3QgYXJlIGFsbCBz
b3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZTogLy8gMAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0Rz
dF9Nb2RlOiAvLyBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjSW5fTW9kZTogLy8gc291
cmNlICogZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdEluX01vZGU6IC8vIGRlc3QgKiBz
b3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNPdXRfTW9kZTogLy8gc291cmNlICogKDEt
ZGVzdCkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdXRfTW9kZTogLy8gZGVzdCAqICgxLXNv
dXJjZSkKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNBVG9wX01vZGU6IC8vIGRlc3QKKyAgICBj
YXNlIFNrWGZlcm1vZGU6OmtYb3JfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIDIqKHNvdXJjZSpk
ZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHhmZXJtb2RlIHdpbGwga2VlcCB0aGUgZHN0IG9wYXF1ZSwgYXNzdW1pbmcgdGhlIGRz
dCBpcyBhbHJlYWR5IG9wYXF1ZS4KK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZl
c09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1ZSkKK3sKKyAgICBT
a1hmZXJtb2RlKiB4ZmVybW9kZSA9IHBhaW50LmdldFhmZXJtb2RlKCk7CisgICAgaWYgKCF4ZmVy
bW9kZSkKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIGRlZmF1bHQgdG8ga1NyY092ZXJfTW9kZQor
ICAgIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZTsKKyAgICBpZiAoIXhmZXJtb2RlLT5hc01vZGUoJm1v
ZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIFNrWGZlcm1vZGU6OmtEc3RfTW9kZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6
a1NyY092ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBT
a1hmZXJtb2RlOjprRHN0T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QK
KyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNBVG9wX01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNr
WGZlcm1vZGU6OmtQbHVzX01vZGU6IC8vIHNvdXJjZStkZXN0CisgICAgZGVmYXVsdDogLy8gdGhl
IHJlc3QgYXJlIGFsbCBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZTogLy8gMAorICAgIGNhc2Ug
U2tYZmVybW9kZTo6a1NyY091dF9Nb2RlOiAvLyBzb3VyY2UgKiAoMS1kZXN0KQorICAgIGNhc2Ug
U2tYZmVybW9kZTo6a0RzdE91dF9Nb2RlOiAvLyBkZXN0ICogKDEtc291cmNlKQorICAgIGNhc2Ug
U2tYZmVybW9kZTo6a1hvcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gMiooc291cmNlKmRlc3Qp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNfTW9kZTog
Ly8gc291cmNlCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjSW5fTW9kZTogLy8gc291cmNlICog
ZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdEluX01vZGU6IC8vIGRlc3QgKiBzb3VyY2UK
KyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNvdXJjZQorICAgICAgICBy
ZXR1cm4gc3JjSXNPcGFxdWU7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgaWYgYWxsIHBp
eGVscyBwYWludGVkIHdpbGwgYmUgb3BhcXVlLgorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNP
cGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXAgPSAwLCBi
b29sIGNoZWNrRmlsbE9ubHkgPSBmYWxzZSkKK3sKKyAgICBpZiAocGFpbnQuZ2V0QWxwaGEoKSA8
IDB4RkYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWNoZWNrRmlsbE9ubHkgJiYg
cGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWludC5pc0FudGlB
bGlhcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU2tTaGFkZXIqIHNoYWRlciA9IHBh
aW50LmdldFNoYWRlcigpOworICAgIGlmIChzaGFkZXIgJiYgIXNoYWRlci0+aXNPcGFxdWUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+aXNPcGFx
dWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdSZWN0KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgZmlsbFJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBj
b25zdCBTa0JpdG1hcCogYml0bWFwKQoreworICAgIC8vIEFueSBzdHJva2luZyBtYXkgcHV0IGFs
cGhhIGluIHBpeGVscyBldmVuIGlmIHRoZSBmaWxsaW5nIHBhcnQgZG9lcyBub3QuCisgICAgaWYg
KHBhaW50LmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpIHsKKyAgICAgICAgYm9v
bCBvcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCBiaXRtYXApOworICAgICAgICBib29sIGZp
bGxzQm91bmRzID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJv
dW5kcygpKQorICAgICAgICAgICAgZGlkRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBTa1JlY3Qgc3Ryb2tlUmVjdDsKKyAgICAgICAgICAg
IHN0cm9rZVJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhmaWxsUmVjdCwgJnN0cm9rZVJl
Y3QpOworICAgICAgICAgICAgZGlkRHJhdyhjb250ZXh0LCBzdHJva2VSZWN0LCBwYWludCwgb3Bh
cXVlLCBmaWxsc0JvdW5kcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoZWNrRmls
bE9ubHkgPSB0cnVlOworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgYml0
bWFwLCBjaGVja0ZpbGxPbmx5KTsKKyAgICBib29sIGZpbGxzQm91bmRzID0gcGFpbnQuZ2V0U3R5
bGUoKSAhPSBTa1BhaW50OjprU3Ryb2tlX1N0eWxlOworICAgIGRpZERyYXcoY29udGV4dCwgZmls
bFJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKK30KKwordm9pZCBPcGFxdWVSZWdp
b25Ta2lhOjpkaWREcmF3UGF0aChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBj
b25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIFNrUmVjdCBy
ZWN0OworICAgIGlmIChwYXRoLmlzUmVjdCgmcmVjdCkpIHsKKyAgICAgICAgZGlkRHJhd1JlY3Qo
Y29udGV4dCwgcmVjdCwgcGFpbnQsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ym9vbCBvcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50KTsKKyAgICBib29sIGZpbGxzQm91bmRz
ID0gZmFsc2U7CisKKyAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCisgICAg
ICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQsIG9wYXF1ZSk7CisgICAgZWxzZSB7CisgICAgICAg
IHJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhwYXRoLmdldEJvdW5kcygpLCAmcmVjdCk7
CisgICAgICAgIGRpZERyYXcoY29udGV4dCwgcmVjdCwgcGFpbnQsIG9wYXF1ZSwgZmlsbHNCb3Vu
ZHMpOworICAgIH0KK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UG9pbnRzKGNv
bnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIFNrQ2FudmFzOjpQb2ludE1vZGUgbW9k
ZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludCBwb2ludHNbXSwgY29uc3QgU2tQYWludCYg
cGFpbnQpCit7CisgICAgaWYgKCFudW1Qb2ludHMpCisgICAgICAgIHJldHVybjsKKworICAgIFNr
UmVjdCByZWN0OworICAgIHJlY3QuZkxlZnQgPSBwb2ludHNbMF0uZlg7CisgICAgcmVjdC5mUmln
aHQgPSBwb2ludHNbMF0uZlggKyAxOworICAgIHJlY3QuZlRvcCA9IHBvaW50c1swXS5mWTsKKyAg
ICByZWN0LmZCb3R0b20gPSBwb2ludHNbMF0uZlkgKyAxOworCisgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCBudW1Qb2ludHM7ICsraSkgeworICAgICAgICByZWN0LmZMZWZ0ID0gc3RkOjptaW4ocmVj
dC5mTGVmdCwgcG9pbnRzW2ldLmZYKTsKKyAgICAgICAgcmVjdC5mUmlnaHQgPSBzdGQ6Om1heChy
ZWN0LmZSaWdodCwgcG9pbnRzW2ldLmZYICsgMSk7CisgICAgICAgIHJlY3QuZlRvcCA9IHN0ZDo6
bWluKHJlY3QuZlRvcCwgcG9pbnRzW2ldLmZZKTsKKyAgICAgICAgcmVjdC5mQm90dG9tID0gc3Rk
OjptYXgocmVjdC5mQm90dG9tLCBwb2ludHNbaV0uZlkgKyAxKTsKKyAgICB9CisKKyAgICBib29s
IG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQpOworICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBm
YWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RCb3VuZHMoKSkKKyAgICAgICAg
ZGlkRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVj
dCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKHJlY3QsICZyZWN0KTsKKyAgICAgICAgZGlkRHJh
dyhjb250ZXh0LCByZWN0LCBwYWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQor
Cit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdCb3VuZGVkKGNvbnN0IFBsYXRmb3JtQ29u
dGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgYm91bmRzLCBjb25zdCBTa1BhaW50JiBw
YWludCkKK3sKKyAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQpOworICAgIGJv
b2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RC
b3VuZHMoKSkKKyAgICAgICAgZGlkRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgU2tSZWN0IHJlY3Q7CisgICAgICAgIHJlY3QgPSBwYWludC5jb21wdXRl
RmFzdEJvdW5kcyhib3VuZHMsICZyZWN0KTsKKyAgICAgICAgZGlkRHJhdyhjb250ZXh0LCByZWN0
LCBwYWludCwgb3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2b2lkIE9wYXF1ZVJl
Z2lvblNraWE6OmRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29u
c3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBkcmF3c09wYXF1ZSwg
Ym9vbCBmaWxsc0JvdW5kcykKK3sKKyAgICBpZiAoZmlsbHNCb3VuZHMgJiYgeGZlcm1vZGVJc09w
YXF1ZShwYWludCwgZHJhd3NPcGFxdWUpKQorICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKGNvbnRl
eHQsIHJlY3QpOworICAgIGVsc2UgaWYgKFNrUmVjdDo6SW50ZXJzZWN0cyhyZWN0LCBtX29wYXF1
ZVJlY3QpICYmICF4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpKQor
ICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHJlY3QpOworfQorCit2b2lkIE9wYXF1ZVJlZ2lv
blNraWE6OmRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgZHJhd3NP
cGFxdWUpCit7CisgICAgaWYgKCF4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NP
cGFxdWUpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hhdCB3YXMgZHJhd24gb24gc28g
anVzdCBkZXN0cm95IHRoZSBrbm93biBvcGFxdWUgYXJlYS4KKyAgICAgICAgbV9vcGFxdWVSZWN0
ID0gU2tSZWN0OjpNYWtlRW1wdHkoKTsKKyAgICB9Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tp
YTo6bWFya1JlY3RBc09wYXF1ZShjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBj
b25zdCBTa1JlY3QmIHJlY3QpCit7CisgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIGFu
IG9wYXF1ZSByZWdpb24gYnV0IGJvdW5kIGl0cyBjb21wbGV4aXR5IGF0IGEgY29uc3RhbnQgc2l6
ZS4KKyAgICAvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSBzZWVuIGJ5
IGFyZWEuIElmIHdlIGNhbiBhZGQgdGhlIG5ldyByZWN0IHRvIHRoaXMKKyAgICAvLyByZWN0YW5n
bGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVh
c2UgdGhlIGFyZWEgcmV0dXJuZWQKKyAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBs
ZXhpdHkuCisKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIWNvbnRleHQtPmNsaXBwZWRUb0ltYWdlKCkuaXNPcGFxdWUoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7CisgICAgICAgIG1fb3BhcXVl
UmVjdCA9IHJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmVjdC5mVG9w
IDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZkJv
dHRvbSkgeworICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiBy
ZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5mTGVmdCkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVj
dC5mTGVmdCA9IHJlY3QuZkxlZnQ7CisgICAgICAgIGlmIChyZWN0LmZSaWdodCA+IG1fb3BhcXVl
UmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVjdC5mUmlnaHQpCisgICAgICAg
ICAgICBtX29wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7CisgICAgfSBlbHNlIGlmIChy
ZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1
ZVJlY3QuZlJpZ2h0KSB7CisgICAgICAgIGlmIChyZWN0LmZUb3AgPCBtX29wYXF1ZVJlY3QuZlRv
cCAmJiByZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZlRvcCkKKyAgICAgICAgICAgIG1fb3Bh
cXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOworICAgICAgICBpZiAocmVjdC5mQm90dG9tID4gbV9v
cGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDwgbV9vcGFxdWVSZWN0LmZCb3R0b20pCisg
ICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKKyAgICB9CisK
KyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChsb25n
KW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIGFyZWEgPSAobG9uZylyZWN0LndpZHRo
KCkgKiAobG9uZylyZWN0LmhlaWdodCgpOworICAgIGlmIChhcmVhID4gb3BhcXVlQXJlYSkKKyAg
ICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpt
YXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50
IHRvIGtlZXAgYXMgbXVjaCBvZiB0aGUgY3VycmVudCBvcGFxdWUgcmVjdGFuZ2xlIGFzIHdlIGNh
biwgc28gZmluZCB0aGUgb25lIGxhcmdlc3QKKyAgICAvLyByZWN0YW5nbGUgaW5zaWRlIG1fb3Bh
cXVlUmVjdCB0aGF0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHxyZWN0fC4KKworICAgIGlmIChy
ZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsKKyAgICAgICAgbV9vcGFxdWVSZWN0LnNldEVt
cHR5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgZGVsdGFMZWZ0ID0gcmVj
dC5mTGVmdCAtIG1fb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG1fb3Bh
cXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdodDsKKyAgICBpbnQgZGVsdGFUb3AgPSByZWN0LmZU
b3AgLSBtX29wYXF1ZVJlY3QuZlRvcDsKKyAgICBpbnQgZGVsdGFCb3R0b20gPSBtX29wYXF1ZVJl
Y3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKKworICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxh
cmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9m
IHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KKyAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUg
bGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGlu
c2lkZSBtX29wYXF1ZVJlY3QuCisgICAgU2tSZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7
CisgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFCb3R0b20pCisgICAgICAgIGhvcml6b250YWwuZkJv
dHRvbSA9IHJlY3QuZlRvcDsKKyAgICBlbHNlCisgICAgICAgIGhvcml6b250YWwuZlRvcCA9IHJl
Y3QuZkJvdHRvbTsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgaWYg
KGRlbHRhTGVmdCA+IGRlbHRhUmlnaHQpCisgICAgICAgIHZlcnRpY2FsLmZSaWdodCA9IHJlY3Qu
ZkxlZnQ7CisgICAgZWxzZQorICAgICAgICB2ZXJ0aWNhbC5mTGVmdCA9IHJlY3QuZlJpZ2h0Owor
CisgICAgaWYgKChsb25nKWhvcml6b250YWwud2lkdGgoKSAqIChsb25nKWhvcml6b250YWwuaGVp
Z2h0KCkgPiAobG9uZyl2ZXJ0aWNhbC53aWR0aCgpICogKGxvbmcpdmVydGljYWwuaGVpZ2h0KCkp
CisgICAgICAgIG1fb3BhcXVlUmVjdCA9IGhvcml6b250YWw7CisgICAgZWxzZQorICAgICAgICBt
X29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJl
Z2lvblNraWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2YyYzVhMWIxZDQyZWY2NDZkNjRiNTRhZWZiMmM2ZTc1
ODBmOTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wYXF1
ZVJlZ2lvblNraWFfaAorI2RlZmluZSBPcGFxdWVSZWdpb25Ta2lhX2gKKworI2luY2x1ZGUgIklu
dFJlY3QuaCIKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIK
KyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiU2tQb2ludC5oIgorI2luY2x1ZGUgIlNr
UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQbGF0Zm9ybUNvbnRleHRTa2lh
OworCisvLyBUaGlzIGNsYXNzIGlzIGFuIGVuY2Fwc3VsYXRpb24gb2YgZnVuY3Rpb25hbGl0eSBm
b3IgUGxhdGZvcm1Db250ZXh0U2tpYSwgYW5kIGl0cyBtZXRob2RzIGFyZSBtaXJyb3JlZAorLy8g
dGhlcmUgZm9yIHRoZSBvdXRzaWRlIHdvcmxkLiBJdCB0cmFja3MgcGFpbnRzIGFuZCBjb21wdXRl
cyB3aGF0IGFyZWEgd2lsbCBiZSBvcGFxdWUuCitjbGFzcyBPcGFxdWVSZWdpb25Ta2lhIHsKK3B1
YmxpYzoKKyAgICBPcGFxdWVSZWdpb25Ta2lhKCk7CisgICAgdmlydHVhbCB+T3BhcXVlUmVnaW9u
U2tpYSgpOworCisgICAgLy8gVGhlIHJlc3VsdGluZyBvcGFxdWUgcmVnaW9uIGFzIGEgc2luZ2xl
IHJlY3QuCisgICAgSW50UmVjdCBhc1JlY3QoKSBjb25zdDsKKworICAgIHZvaWQgZGlkRHJhd1Jl
Y3QoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFp
bnQmLCBjb25zdCBTa0JpdG1hcCopOworICAgIHZvaWQgZGlkRHJhd1BhdGgoY29uc3QgUGxhdGZv
cm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUGF0aCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lk
IGRpZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIFNrQ2FudmFzOjpQb2lu
dE1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRbXSwgY29uc3QgU2tQYWludCYpOwor
ICAgIHZvaWQgZGlkRHJhd0JvdW5kZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0
IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZERyYXco
Y29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQm
LCBib29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKTsKKyAgICB2b2lkIGRpZERyYXdV
bmJvdW5kZWQoY29uc3QgU2tQYWludCYsIGJvb2wgZHJhd3NPcGFxdWUpOworICAgIHZvaWQgbWFy
a1JlY3RBc09wYXF1ZShjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0Jik7
CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYpOworCisgICAgU2tS
ZWN0IG1fb3BhcXVlUmVjdDsKK307CisKK30KKyNlbmRpZiAvLyBPcGFxdWVSZWdpb25Ta2lhX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGE1ZTE4NjgwZDIwYmJiZjY5ODI4NjY4ZTBl
YjljZDZmMWU5ODMwYjUuLjAzNGMzMzE5ZTE4ZTkyYThlMWM3MjQ4MTliNjBiMGQyZDM2ZjM2ZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMTc5LDYgKzE3OSw3IEBAIFNrQ29sb3Ig
UGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGx5QWxwaGEoU2tDb2xvciBjKSBjb25zdAog
Ly8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0
Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMp
CisgICAgLCBtX3RyYWNrT3BhcXVlUmVnaW9uKGZhbHNlKQogICAgICwgbV9wcmludGluZyhmYWxz
ZSkKICAgICAsIG1fZGVmZXJyZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVy
KGZhbHNlKQpAQCAtMjY2LDYgKzI2NywxMSBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmNs
aXBQYXRoQW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJiBjbGlwUGF0aCkKICAgICBjYW52YXMoKS0+
Y2xpcFBhdGgoY2xpcFBhdGgsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wLCB0cnVlKTsKIH0KIAor
Y29uc3QgU2tCaXRtYXAmIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBwZWRUb0ltYWdlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXA7Cit9CisKIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZSgpCiB7CiAgICAgaWYgKCFtX3N0YXRlLT5tX2lt
YWdlQnVmZmVyQ2xpcC5lbXB0eSgpKSB7CkBAIC0yODcsNiArMjkzLDcgQEAgdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKICAgICBpZiAoZmlsbGNvbG9yTm90
VHJhbnNwYXJlbnQpIHsKICAgICAgICAgc2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAg
ICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1Jl
Y3QocmVjdCwgcGFpbnQpOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxl
ICE9IE5vU3Ryb2tlCkBAIC0yOTksMTIgKzMwNiwxNiBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogCiAgICAgICAgIFNrUmVjdCB0b3BCb3JkZXIgPSB7
IHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVjdC5mUmlnaHQsIHJlY3QuZlRvcCArIDEgfTsKICAg
ICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQpOworICAgICAgICBkaWRE
cmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tSZWN0IGJvdHRvbUJvcmRlciA9
IHsgcmVjdC5mTGVmdCwgcmVjdC5mQm90dG9tIC0gMSwgcmVjdC5mUmlnaHQsIHJlY3QuZkJvdHRv
bSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7Cisg
ICAgICAgIGRpZERyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3Qg
bGVmdEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wICsgMSwgcmVjdC5mTGVmdCArIDEs
IHJlY3QuZkJvdHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KGxlZnRCb3Jk
ZXIsIHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOwogICAg
ICAgICBTa1JlY3QgcmlnaHRCb3JkZXIgPSB7IHJlY3QuZlJpZ2h0IC0gMSwgcmVjdC5mVG9wICsg
MSwgcmVjdC5mUmlnaHQsIHJlY3QuZkJvdHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRy
YXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CisgICAgICAgIGRpZERyYXdSZWN0KHJpZ2h0Qm9y
ZGVyLCBwYWludCk7CiAgICAgfQogfQogCkBAIC01MzksNiArNTUwLDcgQEAgdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpwYWludFNrUGFpbnQoY29uc3QgU2tSZWN0JiByZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQYWludCYgcGFpbnQpCiB7CiAg
ICAgbV9jYW52YXMtPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICBkaWREcmF3UmVjdChyZWN0
LCBwYWludCk7CiB9CiAKIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXRt
YXAoKSBjb25zdApAQCAtNTk3LDQgKzYwOSwyOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIG1f
Z3B1Q29udGV4dCA9IGNvbnRleHQ7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZGlk
RHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3Qg
U2tCaXRtYXAqIGJpdG1hcCkKK3sKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAg
ICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1JlY3QodGhpcywgcmVjdCwgcGFpbnQsIGJpdG1hcCk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZGlkRHJhd1BhdGgoY29uc3QgU2tQYXRo
JiBwYXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAobV90cmFja09wYXF1ZVJl
Z2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1BhdGgodGhpcywgcGF0aCwgcGFp
bnQpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRpZERyYXdQb2ludHMoU2tDYW52
YXM6OlBvaW50TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50IHBvaW50c1td
LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikK
KyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1BvaW50cyh0aGlzLCBtb2RlLCBudW1Qb2lu
dHMsIHBvaW50cywgcGFpbnQpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRpZERy
YXdCb3VuZGVkKGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7Cisg
ICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERy
YXdCb3VuZGVkKHRoaXMsIHJlY3QsIHBhaW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCA3ZGNmYmUyZTM3ZmMxYzQyN2RkZTdmYjNmNjAz
MTFiZTI3NDk4MjEzLi5mZTNhYmI2ZjU2MDVlYTRkYmE2ODNjMGM1OTY4ZDJhM2YwYTAyZTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJPcGFx
dWVSZWdpb25Ta2lhLmgiCiAKICNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrRGFz
aFBhdGhFZmZlY3QuaCIKQEAgLTk4LDYgKzk5LDggQEAgcHVibGljOgogICAgIC8vIE5PVEU6IHxp
bWFnZUJ1ZmZlcnwgbWF5IGJlIGRlbGV0ZWQgYmVmb3JlIHRoZSB8cmVzdG9yZXwgaXMgaW52b2tl
ZC4KICAgICB2b2lkIGJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbWFnZUJ1ZmZlciopOwogICAgIHZvaWQgY2xpcFBhdGhBbnRpQWxpYXNlZChjb25zdCBT
a1BhdGgmKTsKKyAgICAvLyBJZiBub24tZW1wdHksIHRoZSBsYXllciBpcyBjbGlwcGVkIHRvIHRo
ZSBiaXRtYXAuCisgICAgY29uc3QgU2tCaXRtYXAmIGNsaXBwZWRUb0ltYWdlKCkgY29uc3Q7CiAK
ICAgICAvLyBTZXRzIHVwIHRoZSBjb21tb24gZmxhZ3Mgb24gYSBwYWludCBmb3IgYW50aWFsaWFz
aW5nLCBlZmZlY3RzLCBldGMuCiAgICAgLy8gVGhpcyBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieSBz
ZXR1cFBhaW50RmlsbCBhbmQgc2V0dXBQYWludFN0cm9rZSwgYnV0CkBAIC0xODcsNiArMTkwLDE4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmVy
cmVkOyB9CiAgICAgdm9pZCBzZXREZWZlcnJlZChib29sIGRlZmVycmVkKSB7IG1fZGVmZXJyZWQg
PSBkZWZlcnJlZDsgfQogCisgICAgdm9pZCBzZXRUcmFja09wYXF1ZVJlZ2lvbihib29sIHRyYWNr
KSB7IG1fdHJhY2tPcGFxdWVSZWdpb24gPSB0cmFjazsgfQorCisgICAgLy8gVGhpcyB3aWxsIGJl
IGFuIGVtcHR5IHJlZ2lvbiB1bmxlc3MgdHJhY2tpbmcgaXMgZW5hYmxlZC4KKyAgICBjb25zdCBP
cGFxdWVSZWdpb25Ta2lhJiBvcGFxdWVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJl
Z2lvbjsgfQorCisgICAgLy8gQWZ0ZXIgZHJhd2luZyBpbiB0aGUgY29udGV4dCdzIGNhbnZhcywg
dXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBub3RpZnkgdGhlIGNvbnRleHQgc28gaXQgY2FuIHRyYWNr
IHRoZSBvcGFxdWUgcmVnaW9uLgorICAgIHZvaWQgZGlkRHJhd1JlY3QoY29uc3QgU2tSZWN0Jiwg
Y29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiA9IDApOworICAgIHZvaWQgZGlkRHJhd1Bh
dGgoY29uc3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZGlkRHJhd1BvaW50
cyhTa0NhbnZhczo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50W10sIGNv
bnN0IFNrUGFpbnQmKTsKKyAgICAvLyBGb3IgZHJhd2luZyBvcGVyYXRpb25zIHRoYXQgZG8gbm90
IGZpbGwgdGhlIGVudGlyZSByZWN0LgorICAgIHZvaWQgZGlkRHJhd0JvdW5kZWQoY29uc3QgU2tS
ZWN0JiwgY29uc3QgU2tQYWludCYpOworCiBwcml2YXRlOgogICAgIC8vIFVzZWQgd2hlbiByZXN0
b3JpbmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4gaW1hZ2UgY2xpcC4gT25seSBzaG93cyB0aGUgcGl4
ZWxzIGluCiAgICAgLy8gbV9jYW52YXMgdGhhdCBhcmUgYWxzbyBpbiBpbWFnZUJ1ZmZlci4KQEAg
LTIxMCw2ICsyMjUsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBtU3RhdGVTdGFjay5iYWNrKCkuCiAg
ICAgU3RhdGUqIG1fc3RhdGU7CiAKKyAgICAvLyBUcmFja3MgdGhlIHJlZ2lvbiBwYWludGVkIG9w
YXF1ZSB2aWEgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICBPcGFxdWVSZWdpb25Ta2lhIG1fb3Bh
cXVlUmVnaW9uOworICAgIGJvb2wgbV90cmFja09wYXF1ZVJlZ2lvbjsKKwogICAgIC8vIFN0b3Jl
cyBpbWFnZSBzaXplcyBmb3IgYSBoaW50IHRvIGNvbXB1dGUgaW1hZ2UgcmVzYW1wbGluZyBtb2Rl
cy4KICAgICAvLyBWYWx1ZXMgYXJlIHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUg
bV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGNhOGZiMzlkMjRkOWZkMWMyYTZkODZiZDczZTc0NTEzODUxYWIxZjkuLjRjMGMwMjNl
MWY3ZDk3ZDE3OWQ1MDQ2MTgyN2M5ODJmNjgxZDVlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtMTE5LDYgKzExOSw3IEBACiAgICAgICAgICAgICAgICAgJ3dlYmtpdF91bml0
dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwJywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0
LmNwcCcsCiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAg
WydPUz09IndpbiInLCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzYTlhYzAxN2RiNzMz
N2UwYTM3NGU2OTcxNDAzYTg4NGM0YTBmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcApAQCAtMCwwICsx
LDQwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFt
ZVNraWEuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOYXRpdmVJ
bWFnZVNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCisjZGVmaW5l
IEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBFWFBFQ1RfRVEoYS54KCksIGIueCgpKTsgXAor
ICAgIEVYUEVDVF9FUShhLm1heFgoKSwgYi5tYXhYKCkpOyBcCisgICAgRVhQRUNUX0VRKGEueSgp
LCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5tYXhZKCksIGIubWF4WSgpKTsKKworI2RlZmlu
ZSBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgb3BhcXVlUmVjdCkgXAoreyBcCisgICAgU2tB
dXRvTG9ja1BpeGVscyBsb2NrZXIoYml0bWFwKTsgXAorICAgIGZvciAoaW50IHkgPSBvcGFxdWVS
ZWN0LnkoKTsgeSA8IG9wYXF1ZVJlY3QubWF4WSgpOyArK3kpIFwKKyAgICAgICAgZm9yIChpbnQg
eCA9IG9wYXF1ZVJlY3QueCgpOyB4IDwgb3BhcXVlUmVjdC5tYXhYKCk7ICsreCkgeyBcCisgICAg
ICAgICAgICBpbnQgYWxwaGEgPSAqYml0bWFwLmdldEFkZHIzMih4LCB5KSA+PiAyNDsgXAorICAg
ICAgICAgICAgRVhQRUNUX0VRKDI1NSwgYWxwaGEpOyBcCisgICAgICAgIH0gXAorfQorCitURVNU
KFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZVRlc3QpCit7CisgICAgU2tCaXRt
YXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnLCA0MDAsIDQwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMg
Y2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4
dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1
ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAg
ICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEo
MC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRl
U291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIGFs
cGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBDb21wb3NpdGVQbHVzTGlnaHRlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgx
MCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7
CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg5OSwg
MTMsIDEwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNl
SW4pOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFU
Q0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisg
ICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBhbHBoYSwgQ29s
b3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDEwLCA4OSwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoOCwgOCwgMywgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZVNvdXJjZU91dCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMSwgMTAsIDg4LCA5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgzMCwgMzAsIDI5MCwgMjkwKSwg
b3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgMjkwLCAyOTApLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoNDAsIDIwLCAyOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAzMCwgMjkwLCAyOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoMTAsIDEwLCAzOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3Np
dGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDI5MCwgMjkw
KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1Rf
UElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMzkwLCA1MCks
IGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDMwLCAzMCwgMjkwLCAyOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
MTAsIDEwLCAzOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMCwgMjkwLCAzMTAp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9Q
SVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUxpbmVU
ZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0
bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVs
cygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0
U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRy
YWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0
Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYp
OworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgY29udGV4
dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdCgw
KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyg0KTsKKyAgICBjb250ZXh0LnNldExp
bmVDYXAoU3F1YXJlQ2FwKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tl
KTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3Bh
cXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKKworICAgIGNvbnRleHQuc2F2
ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgMCksIEludFBvaW50KDEwMCwg
MCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQu
ZHJhd0xpbmUoSW50UG9pbnQoMCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4
dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFs
cGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50
KDAsIDEwKSwgSW50UG9pbnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4
dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMSksIEludFBvaW50
KDEwMCwgMTEpKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDEwLCAxNCwgOTAsIDg2KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFs
aWFzKHRydWUpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNv
dXJjZU92ZXIpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwg
OTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOworCisgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAwKSwgSW50UG9p
bnQoMTAwLCAwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlh
bGlhcyhmYWxzZSk7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcihvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUo
SW50UG9pbnQoMCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAg
ICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBvaW50KDEwMCwgMTAp
KTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEw
LCAxMywgOTAsIDg3KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJh
d0xpbmUoSW50UG9pbnQoMCwgMTEpLCBJbnRQb2ludCgxMDAsIDExKSk7CisgICAgY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTQsIDkwLCA4NiksIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVM
U19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7
Cit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlUGF0aFRlc3Qp
Cit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnLCAyMDAsIDIwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7
CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lh
IHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tP
cGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3Jt
Q29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7Cisg
ICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgx
MCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7
CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxz
ZSk7CisgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KDEpOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKDUpOworICAgIGNvbnRleHQuc2V0TGluZUNhcChTcXVhcmVDYXApOworICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKKworICAgIFBhdGggcGF0aDsKKworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBw
YXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIDApKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBv
aW50KDEwMCwgMCkpOworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgcGF0aC5jbGVhcigpOworCisg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIDEwKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxv
YXRQb2ludCgxMDAsIDEzKSk7CisgICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBwYXRoLmNsZWFyKCk7
CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAxMCkpOworICAgIHBhdGguYWRkTGluZVRv
KEZsb2F0UG9pbnQoMTAwLCAxMykpOworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAs
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgcGF0aC5jbGVh
cigpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMTQpKTsKKyAgICBwYXRoLmFkZExp
bmVUbyhGbG9hdFBvaW50KDEwMCwgMTApKTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDE0LCA5MCwgODYpLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIHBhdGgu
Y2xlYXIoKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVJ
bWFnZVRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAyMDAsIDIwMCk7CisgICAgYml0bWFwLmFsbG9j
UGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNv
bnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
JnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwg
MS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBT
a0JpdG1hcCBkcmF3Qml0bWFwOworICAgIGRyYXdCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgMTAsIDEwKTsKKyAgICBkcmF3Qml0bWFwLmFsbG9jUGl4ZWxzKCk7
CisKKyAgICBkcmF3Qml0bWFwLnNldElzT3BhcXVlKHRydWUpOworICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgZHJhd0JpdG1hcC5oZWlnaHQoKTsgKyt5KQorICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGRyYXdCaXRtYXAud2lkdGgoKTsgKyt4KQorICAgICAgICAgICAgKmRyYXdCaXRtYXAuZ2V0
QWRkcjMyKHgsIHkpID0gMHhGRkZGRkZGRjsKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWE+IG9wYXF1ZUltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0
ZShkcmF3Qml0bWFwLCB0cnVlKTsKKyAgICBFWFBFQ1RfRkFMU0Uob3BhcXVlSW1hZ2UtPmN1cnJl
bnRGcmFtZUhhc0FscGhhKCkpOworCisgICAgZHJhd0JpdG1hcC5zZXRJc09wYXF1ZShmYWxzZSk7
CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBkcmF3Qml0bWFwLmhlaWdodCgpOyArK3kpCisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZHJhd0JpdG1hcC53aWR0aCgpOyArK3gpCisgICAgICAg
ICAgICAqZHJhd0JpdG1hcC5nZXRBZGRyMzIoeCwgeSkgPSAweDAwMDAwMDAwOworICAgIFJlZlB0
cjxCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYT4gYWxwaGFJbWFnZSA9IEJpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhOjpjcmVhdGUoZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNUX1RSVUUo
YWxwaGFJbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CisKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
MTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7Cisg
ICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMCwgMCkpOworICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFs
cGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRl
eHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQ
b2ludCg1LCA1KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgSW50UG9pbnQoNSwgNSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAs
IDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDEwLCAxMCkpOworICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdl
KGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDEwLCAxMCkp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
Yml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
Y29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMjAsIDEwKSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDIwLCA5MCwgODApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAg
Y29udGV4dC5zZXRBbHBoYSgwLjUpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdl
LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgyNSwgMTUpLCBDb21wb3NpdGVT
b3VyY2VJbik7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgxMCwgMjUsIDkwLCA3NSksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRl
U291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludCgxMCwgMjApLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMTAsIDgwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNh
dmUoKTsKKyAgICBjb250ZXh0LnNldEFscGhhKDAuNSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2Uo
b3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDE1LCAyNSks
IENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDI1LCAxMCwgNzUsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNv
bnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVPdmFsVGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRt
YXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDIw
MCwgMjAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMo
Yml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52
YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9y
IG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAw
LjBmLCAwLjBmLCAwLjBmKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwg
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJlY3QoMTAsIDEwLCA5MCwgOTAp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlSW4pOworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxp
YXMoZmFsc2UpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJlY3QoMTAsIDEwLCA1MCwg
MzApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJlY3QoMTAsIDEwLCAzMCwgNTApKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDQwLCAxMCwgNjAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0
U2hvdWxkQW50aWFsaWFzKHRydWUpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3Iob3BhcXVl
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJlY3Qo
MTAsIDEwLCA1MCwgMzApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQwLCA0MSwgNjAs
IDU5KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBF
Q1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdFbGxpcHNlKEludFJlY3QoMjAsIDEwLCAzMCwgNTAp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUxLCA0MSwgNDksIDU5KSwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENI
KGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122269</attachid>
            <date>2012-01-12 10:48:38 -0800</date>
            <delta_ts>2012-01-12 11:56:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120112134837.patch</filename>
            <type>text/plain</type>
            <size>53783</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjBiZWVhYWE3ZTQyYmUx
ZDdlZTM0ODQxM2YxNjIyM2I1MDg3NDlmZi4uMzE5ZGVhMDk4ZGJhOGY0YjA3YTAxNjA3ZTE2Njkw
N2MxYWJmNGQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTAxLTEyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QuY3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3T3V0ZXJQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbm5lclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdp
b25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6On5PcGFxdWVSZWdp
b25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmFzUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjp4ZmVybW9kZUlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Onhm
ZXJtb2RlUHJlc2VydmVzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3Qm91bmRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJl
Z2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVn
aW9uU2tpYTo6bWFya1JlY3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdp
b25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xpcHBlZFRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6cGFpbnRTa1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OmRpZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dFNraWE6OmRpZERyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dFNraWE6OmRpZERyYXdQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6c2V0VHJhY2tPcGFxdWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6b3BhcXVlUmVnaW9uKToKKwogMjAxMi0wMS0xMSAgQWRhbSBUcmVhdCAg
PGF0cmVhdEByaW0uY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjA4OApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNTNjNWM3NDc4
ZTZlZjYwNWY0YzM0OWY4ZmUwNWRlZDE1MDhlNjUxLi45MzdkMjU4NTc0NDIyOGQzNGIzYzQ1YTU1
OGQ5MjZhNzdiNTYwY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTAxLTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtza2lhXSBUcmFjayBhIHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZp
YSBQbGF0Zm9ybUNvbnRleHRTa2lhIGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDEtMTAgIERtaXRyeSBMb21vdiAgPGRz
bG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBvYnNvbGV0ZSBy
ZWZlcmVuY2VzIHRvIFdlYldvcmtlciBjbGFzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1Y2IzNGU1
ZWFhYzM3MjFlNTQ0ZGQ5ZDYzOGQ5NDg0YzBjMWU3MGNiLi40MTIxNzY4YmUxMGNkM2Q2YmVmZTlk
ZWRjYzg3OGYzYzk2NzU1YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zOTI2LDYgKzM5MjYsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW50UmVjdFNraWEuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tp
YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKaW5kZXggZGIzNDM2MTVmYjg4NDBmYzM4NmI2
NDZmYjJkMDU3YTRkM2FlNjkzNi4uZDQxNzc4NGE0MWU2MjI2NTNiNDUwYjAzYzE1NDA1Y2VhNGJj
YzExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0zMzksNiArMzM5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFp
bnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC00NzMsMTEgKzQ3NCwxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBw
YWludC5zZXRBbnRpQWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0g
Tm9TdHJva2UpIHsKICAgICAgICAgcGFpbnQucmVzZXQoKTsKICAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKICAgICB9CiB9CiAK
QEAgLTUxMywxMSArNTE2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBJbnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VT
dHlsZSgpICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAmcmVjdCwgMCk7
CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFp
bnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5kZWQocmVjdCwgcGFp
bnQpOwogICAgIH0KIH0KIApAQCAtNTI2LDcgKzUzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uCiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJh
d091dGVyUGF0aChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQm
IHBhaW50LCBpbnQgd2lkdGgpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd091dGVyUGF0aChQbGF0
Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmIHBh
aW50LCBpbnQgd2lkdGgpCiB7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikK
ICAgICBwYWludC5zZXRBbHBoYSg2NCk7CkBAIC01MzYsMTUgKzU0MSwxNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZHJhd091dGVyUGF0aChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1BhdGgmIHBh
dGgsIFNrUGFpbnQmCiAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMSk7CiAgICAgcGFpbnQuc2V0
UGF0aEVmZmVjdChuZXcgU2tDb3JuZXJQYXRoRWZmZWN0KDEpKS0+dW5yZWYoKTsKICNlbmRpZgot
ICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIGNvbnRleHQtPmNhbnZhcygp
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgY29udGV4dC0+ZGlkRHJhd1BhdGgocGF0aCwg
cGFpbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJhd0lubmVyUGF0aChTa0NhbnZhcyog
Y2FudmFzLCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmIHBhaW50LCBpbnQgd2lkdGgpCitz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd0lubmVyUGF0aChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250
ZXh0LCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmIHBhaW50LCBpbnQgd2lkdGgpCiB7CiAj
aWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBwYWludC5zZXRBbHBoYSgx
MjgpOwogICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKHdpZHRoICogMC41Zik7Ci0gICAgY2FudmFz
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgY29udGV4dC0+Y2FudmFzKCktPmRyYXdQYXRo
KHBhdGgsIHBhaW50KTsKKyAgICBjb250ZXh0LT5kaWREcmF3UGF0aChwYXRoLCBwYWludCk7CiAj
ZW5kaWYKIH0KIApAQCAtNTgxLDkgKzU4OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50CiAK
ICAgICBwYWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAgICAgZm9jdXNSaW5nUmVnaW9uLmdl
dEJvdW5kYXJ5UGF0aCgmcGF0aCk7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKTsKLSAgICBkcmF3T3V0ZXJQYXRoKGNhbnZhcywgcGF0aCwgcGFpbnQs
IHdpZHRoKTsKLSAgICBkcmF3SW5uZXJQYXRoKGNhbnZhcywgcGF0aCwgcGFpbnQsIHdpZHRoKTsK
KyAgICBkcmF3T3V0ZXJQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBwYWludCwgd2lkdGgp
OworICAgIGRyYXdJbm5lclBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIHBhaW50LCB3aWR0
aCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KQEAgLTYzMSwx
MiArNjM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2lu
dCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAgICBmaWxsUGFpbnQuc2V0
Q29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kaWREcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmRpZERyYXdSZWN0KHIyLCBmaWxsUGFpbnQpOwogICAgIH0KIAogICAgIGFkanVzdExp
bmVUb1BpeGVsQm91bmRhcmllcyhwMSwgcDIsIHdpZHRoLCBwZW5TdHlsZSk7CiAgICAgU2tQb2lu
dCBwdHNbMl0gPSB7IChTa1BvaW50KXAxLCAoU2tQb2ludClwMiB9OwogCiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2Rl
LCAyLCBwdHMsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BvaW50cyhT
a0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBw
dCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKQEAgLTcxMiw2ICs3
MjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29u
c3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLAogICAgICAgICAgICAgIG9yaWdpblggKyBX
ZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHdpZHRoKSwKICAgICAgICAgICAgICBvcmlnaW5ZICsgU2tJ
bnRUb1NjYWxhcihtaXNzcGVsbEJpdG1hcC0+aGVpZ2h0KCkpKTsKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+ZGlkRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LApAQCAtNzM2LDYgKzc0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcHQsCiAgICAgLy8gVGV4dCBsaW5lcyBhcmUgZHJhd24gdXNpbmcgdGhlIHN0cm9rZSBjb2xv
ci4KICAgICBwYWludC5zZXRDb2xvcihwbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlU3Ryb2tl
Q29sb3IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBw
YWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHIsIHBhaW50KTsKIH0K
IAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAg
LTc3MCw2ICs3ODEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aFRvRmlsbCkKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxp
bmcoJnBhaW50KTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgo
cGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBw
YWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCkBAIC03ODgsNiArODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
cmVzdG9yZSgpOwogfQpAQCAtODE2LDYgKzgyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRDb21tb24oJnBhaW50KTsKICAgICBw
YWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5kcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdS
ZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0LApAQCAtODU1LDYgKzg2OSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRD
b2xvcihjb2xvci5yZ2IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3
UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBh
dGgsIHBhaW50KTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
KCkgY29uc3QKQEAgLTExMzksNiArMTE1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAg
ICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2Up
CkBAIC0xMTUzLDYgKzExNjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CiAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxh
dGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCkBAIC0xMTczLDkgKzExOTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgYm9vbCB2
YWxpZFcgPSByLndpZHRoKCkgPiAwOwogICAgIGJvb2wgdmFsaWRIID0gci5oZWlnaHQoKSA+IDA7
CiAgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAg
ICBpZiAodmFsaWRXICYmIHZhbGlkSCkKKyAgICBpZiAodmFsaWRXICYmIHZhbGlkSCkgewogICAg
ICAgICBjYW52YXMtPmRyYXdSZWN0KHIsIHBhaW50KTsKLSAgICBlbHNlIGlmICh2YWxpZFcgfHwg
dmFsaWRIKSB7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWlu
dCk7CisgICAgfSBlbHNlIGlmICh2YWxpZFcgfHwgdmFsaWRIKSB7CiAgICAgICAgIC8vIHdlIGFy
ZSBleHBlY3RlZCB0byByZXNwZWN0IHRoZSBsaW5lSm9pbiwgc28gd2UgY2FuJ3QganVzdCBjYWxs
CiAgICAgICAgIC8vIGRyYXdMaW5lIC0tIHdlIGhhdmUgdG8gY3JlYXRlIGEgcGF0aCB0aGF0IGRv
dWJsZXMgYmFjayBvbiBpdHNlbGYuCiAgICAgICAgIFNrUGF0aCBwYXRoOwpAQCAtMTE4Myw2ICsx
MjAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIHBhdGgubGluZVRvKHIuZlJpZ2h0LCBy
LmZCb3R0b20pOwogICAgICAgICBwYXRoLmNsb3NlKCk7CiAgICAgICAgIGNhbnZhcy0+ZHJhd1Bh
dGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgo
cGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGU2NmRiYWI0MzUwZDQ1ZDM0M2Vm
MWQzZmY1NjIxYTg4YTM5NzllYzYuLjFkNWQ5OTExYmFiMDhiZmE1MGNjY2E4ODA3MTNkZDMxNTYy
ZDA5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAKQEAgLTI0OCw2ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0
bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1h
ZwogICAgICAgICAvLyB3ZSBkb24ndCBzZW5kIGV4dHJhIHBpeGVscy4KICAgICAgICAgY2FudmFz
LT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZzcmNSZWN0LCBkZXN0UmVjdCwgJnBh
aW50KTsKICAgICB9CisgICAgcGxhdGZvcm1Db250ZXh0LT5kaWREcmF3UmVjdChkZXN0UmVjdCwg
cGFpbnQsICZiaXRtYXAuYml0bWFwKCkpOwogfQogCiAvLyBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBk
aW1lbnNpb25zIHdpdGggdGhlIGdpdmVuIG1hdHJpeC4gVXNlZCB0byBzZWUgaG93IGJpZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVl
UmVnaW9uU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE1YWQ0YmE2ODMyMWY2ZjQ4ZGQzNDBmZmMxMDMz
Njk3NTAxMGJjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiT3BhcXVlUmVnaW9uU2tpYS5oIgorCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSAiU2tTaGFkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdpb25Ta2lhKCkK
KyAgICA6IG1fb3BhcXVlUmVjdChTa1JlY3Q6Ok1ha2VFbXB0eSgpKQoreworfQorCitPcGFxdWVS
ZWdpb25Ta2lhOjp+T3BhcXVlUmVnaW9uU2tpYSgpCit7Cit9CisKK0ludFJlY3QgT3BhcXVlUmVn
aW9uU2tpYTo6YXNSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm5zIHRoZSBsYXJnZXN0IGVu
Y2xvc2VkIHJlY3QuCisgICAgaW50IGxlZnQgPSBTa1NjYWxhckNlaWwobV9vcGFxdWVSZWN0LmZM
ZWZ0KTsKKyAgICBpbnQgdG9wID0gU2tTY2FsYXJDZWlsKG1fb3BhcXVlUmVjdC5mVG9wKTsKKyAg
ICBpbnQgcmlnaHQgPSBTa1NjYWxhckZsb29yKG1fb3BhcXVlUmVjdC5mUmlnaHQpOworICAgIGlu
dCBib3R0b20gPSBTa1NjYWxhckZsb29yKG1fb3BhcXVlUmVjdC5mQm90dG9tKTsKKyAgICByZXR1
cm4gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0LWxlZnQsIGJvdHRvbS10b3ApOworfQorCisvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHhmZXJtb2RlIHdpbGwgZm9yY2UgdGhlIGRzdCB0byBiZSBvcGFx
dWUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgZHN0Lgorc3RhdGljIGlubGluZSBib29sIHhm
ZXJtb2RlSXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgc3JjSXNPcGFxdWUpCit7
CisgICAgaWYgKCFzcmNJc09wYXF1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2tY
ZmVybW9kZSogeGZlcm1vZGUgPSBwYWludC5nZXRYZmVybW9kZSgpOworICAgIGlmICgheGZlcm1v
ZGUpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBkZWZhdWx0IHRvIGtTcmNPdmVyX01vZGUKKyAg
ICBTa1hmZXJtb2RlOjpNb2RlIG1vZGU7CisgICAgaWYgKCF4ZmVybW9kZS0+YXNNb2RlKCZtb2Rl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6
a1NyY092ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBT
a1hmZXJtb2RlOjprRHN0T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QK
KyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2Ug
U2tYZmVybW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAgICBkZWZhdWx0OiAvLyB0
aGUgcmVzdCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlOiAvLyAwCisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprRHN0X01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtT
cmNJbl9Nb2RlOiAvLyBzb3VyY2UgKiBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0SW5f
TW9kZTogLy8gZGVzdCAqIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY091dF9Nb2Rl
OiAvLyBzb3VyY2UgKiAoMS1kZXN0KQorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE91dF9Nb2Rl
OiAvLyBkZXN0ICogKDEtc291cmNlKQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0FUb3BfTW9k
ZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1hvcl9Nb2RlOiAvLyBzb3VyY2UgKyBk
ZXN0IC0gMiooc291cmNlKmRlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgeGZlcm1vZGUgd2lsbCBrZWVwIHRoZSBkc3Qgb3BhcXVl
LCBhc3N1bWluZyB0aGUgZHN0IGlzIGFscmVhZHkgb3BhcXVlLgorc3RhdGljIGlubGluZSBib29s
IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBib29sIHNyY0lz
T3BhcXVlKQoreworICAgIFNrWGZlcm1vZGUqIHhmZXJtb2RlID0gcGFpbnQuZ2V0WGZlcm1vZGUo
KTsKKyAgICBpZiAoIXhmZXJtb2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZGVmYXVsdCB0
byBrU3JjT3Zlcl9Nb2RlCisgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlOworICAgIGlmICgheGZl
cm1vZGUtPmFzTW9kZSgmbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdF9Nb2RlOiAvLyBkZXN0CisgICAg
Y2FzZSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNl
KmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRl
c3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0FUb3BfTW9kZTogLy8g
ZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAg
ICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVz
dAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2Rl
OiAvLyAwCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0X01vZGU6IC8vIHNvdXJjZSAqICgx
LWRlc3QpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0X01vZGU6IC8vIGRlc3QgKiAoMS1z
b3VyY2UpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprWG9yX01vZGU6IC8vIHNvdXJjZSArIGRlc3Qg
LSAyKihzb3VyY2UqZGVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2tYZmVy
bW9kZTo6a1NyY19Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNJbl9N
b2RlOiAvLyBzb3VyY2UgKiBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0SW5fTW9kZTog
Ly8gZGVzdCAqIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdEFUb3BfTW9kZTogLy8g
c291cmNlCisgICAgICAgIHJldHVybiBzcmNJc09wYXF1ZTsKKyAgICB9Cit9CisKKy8vIFJldHVy
bnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCitzdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlKQoreworICAgIGlmIChw
YWludC5nZXRBbHBoYSgpIDwgMHhGRikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
Y2hlY2tGaWxsT25seSAmJiBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxl
ICYmIHBhaW50LmlzQW50aUFsaWFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTa1No
YWRlciogc2hhZGVyID0gcGFpbnQuZ2V0U2hhZGVyKCk7CisgICAgaWYgKHNoYWRlciAmJiAhc2hh
ZGVyLT5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJpdG1hcCAm
JiAhYml0bWFwLT5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tSZWN0JiBmaWxsUmVjdCwgY29uc3Qg
U2tQYWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXApCit7CisgICAgLy8gQW55IHN0
cm9raW5nIG1heSBwdXQgYWxwaGEgaW4gcGl4ZWxzIGV2ZW4gaWYgdGhlIGZpbGxpbmcgcGFydCBk
b2VzIG5vdC4KKyAgICBpZiAocGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHls
ZSkgeworICAgICAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGJpdG1hcCk7
CisgICAgICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXBhaW50
LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCisgICAgICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBh
aW50LCBvcGFxdWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFNrUmVjdCBzdHJva2VS
ZWN0OworICAgICAgICAgICAgc3Ryb2tlUmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKGZp
bGxSZWN0LCAmc3Ryb2tlUmVjdCk7CisgICAgICAgICAgICBkaWREcmF3KGNvbnRleHQsIHN0cm9r
ZVJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IHRydWU7CisgICAgYm9vbCBvcGFxdWUgPSBwYWludElz
T3BhcXVlKHBhaW50LCBiaXRtYXAsIGNoZWNrRmlsbE9ubHkpOworICAgIGJvb2wgZmlsbHNCb3Vu
ZHMgPSBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtTdHJva2VfU3R5bGU7CisgICAgZGlk
RHJhdyhjb250ZXh0LCBmaWxsUmVjdCwgcGFpbnQsIG9wYXF1ZSwgZmlsbHNCb3VuZHMpOworfQor
Cit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKGNvbnN0IFBsYXRmb3JtQ29udGV4
dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCYgcGFpbnQp
Cit7CisgICAgU2tSZWN0IHJlY3Q7CisgICAgaWYgKHBhdGguaXNSZWN0KCZyZWN0KSkgeworICAg
ICAgICBkaWREcmF3UmVjdChjb250ZXh0LCByZWN0LCBwYWludCwgMCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQpOworICAg
IGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZh
c3RCb3VuZHMoKSkKKyAgICAgICAgZGlkRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKHBhdGguZ2V0
Qm91bmRzKCksICZyZWN0KTsKKyAgICAgICAgZGlkRHJhdyhjb250ZXh0LCByZWN0LCBwYWludCwg
b3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6
OmRpZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tDYW52
YXM6OlBvaW50TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50IHBvaW50c1td
LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAoIW51bVBvaW50cykKKyAgICAgICAg
cmV0dXJuOworCisgICAgU2tSZWN0IHJlY3Q7CisgICAgcmVjdC5mTGVmdCA9IHBvaW50c1swXS5m
WDsKKyAgICByZWN0LmZSaWdodCA9IHBvaW50c1swXS5mWCArIDE7CisgICAgcmVjdC5mVG9wID0g
cG9pbnRzWzBdLmZZOworICAgIHJlY3QuZkJvdHRvbSA9IHBvaW50c1swXS5mWSArIDE7CisKKyAg
ICBmb3IgKGludCBpID0gMTsgaSA8IG51bVBvaW50czsgKytpKSB7CisgICAgICAgIHJlY3QuZkxl
ZnQgPSBzdGQ6Om1pbihyZWN0LmZMZWZ0LCBwb2ludHNbaV0uZlgpOworICAgICAgICByZWN0LmZS
aWdodCA9IHN0ZDo6bWF4KHJlY3QuZlJpZ2h0LCBwb2ludHNbaV0uZlggKyAxKTsKKyAgICAgICAg
cmVjdC5mVG9wID0gc3RkOjptaW4ocmVjdC5mVG9wLCBwb2ludHNbaV0uZlkpOworICAgICAgICBy
ZWN0LmZCb3R0b20gPSBzdGQ6Om1heChyZWN0LmZCb3R0b20sIHBvaW50c1tpXS5mWSArIDEpOwor
ICAgIH0KKworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCk7CisgICAgYm9v
bCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJv
dW5kcygpKQorICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFxdWUpOworICAgIGVs
c2UgeworICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMocmVjdCwgJnJlY3Qp
OworICAgICAgICBkaWREcmF3KGNvbnRleHQsIHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91
bmRzKTsKKyAgICB9Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQo
Y29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tSZWN0JiBib3VuZHMs
IGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1
ZShwYWludCk7CisgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYgKCFwYWlu
dC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQorICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50
LCBvcGFxdWUpOworICAgIGVsc2UgeworICAgICAgICBTa1JlY3QgcmVjdDsKKyAgICAgICAgcmVj
dCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKGJvdW5kcywgJnJlY3QpOworICAgICAgICBkaWRE
cmF3KGNvbnRleHQsIHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICB9Cit9
CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiBjb250ZXh0LCBjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBi
b29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKQoreworICAgIGlmIChmaWxsc0JvdW5k
cyAmJiB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSkpCisgICAgICAgIG1hcmtS
ZWN0QXNPcGFxdWUoY29udGV4dCwgcmVjdCk7CisgICAgZWxzZSBpZiAoU2tSZWN0OjpJbnRlcnNl
Y3RzKHJlY3QsIG1fb3BhcXVlUmVjdCkgJiYgIXhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50
LCBkcmF3c09wYXF1ZSkpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUocmVjdCk7Cit9CisK
K3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50JiBw
YWludCwgYm9vbCBkcmF3c09wYXF1ZSkKK3sKKyAgICBpZiAoIXhmZXJtb2RlUHJlc2VydmVzT3Bh
cXVlKHBhaW50LCBkcmF3c09wYXF1ZSkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0
IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhlIGtub3duIG9wYXF1ZSBhcmVhLgorICAg
ICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VFbXB0eSgpOworICAgIH0KK30KKwordm9p
ZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFBsYXRmb3JtQ29udGV4
dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50IHRv
IGtlZXAgdHJhY2sgb2YgYW4gb3BhcXVlIHJlZ2lvbiBidXQgYm91bmQgaXRzIGNvbXBsZXhpdHkg
YXQgYSBjb25zdGFudCBzaXplLgorICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGxhcmdlc3Qg
cmVjdGFuZ2xlIHNlZW4gYnkgYXJlYS4gSWYgd2UgY2FuIGFkZCB0aGUgbmV3IHJlY3QgdG8gdGhp
cworICAgIC8vIHJlY3RhbmdsZSB0aGVuIHdlIGRvIHRoYXQsIGFzIHRoYXQgaXMgdGhlIGNoZWFw
ZXN0IHdheSB0byBpbmNyZWFzZSB0aGUgYXJlYSByZXR1cm5lZAorICAgIC8vIHdpdGhvdXQgaW5j
cmVhc2luZyB0aGUgY29tcGxleGl0eS4KKworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghY29udGV4dC0+Y2xpcHBlZFRvSW1hZ2UoKS5pc09wYXF1ZSgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fb3BhcXVlUmVjdC5jb250YWlucyhyZWN0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsK
KyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChyZWN0LmZUb3AgPD0gbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49
IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFx
dWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZMZWZ0KQorICAgICAg
ICAgICAgbV9vcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKKyAgICAgICAgaWYgKHJlY3Qu
ZlJpZ2h0ID4gbV9vcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDwgbV9vcGFxdWVSZWN0
LmZSaWdodCkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsK
KyAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3Qu
ZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKKyAgICAgICAgaWYgKHJlY3QuZlRvcCA8
IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+IG1fb3BhcXVlUmVjdC5mVG9wKQor
ICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlmIChy
ZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3AgPCBtX29wYXF1
ZVJlY3QuZkJvdHRvbSkKKyAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mQm90dG9tID0gcmVjdC5m
Qm90dG9tOworICAgIH0KKworICAgIGxvbmcgb3BhcXVlQXJlYSA9IChsb25nKW1fb3BhcXVlUmVj
dC53aWR0aCgpICogKGxvbmcpbV9vcGFxdWVSZWN0LmhlaWdodCgpOworICAgIGxvbmcgYXJlYSA9
IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEg
PiBvcGFxdWVBcmVhKQorICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworfQorCit2b2lkIE9w
YXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQor
eworICAgIC8vIFdlIHdhbnQgdG8ga2VlcCBhcyBtdWNoIG9mIHRoZSBjdXJyZW50IG9wYXF1ZSBy
ZWN0YW5nbGUgYXMgd2UgY2FuLCBzbyBmaW5kIHRoZSBvbmUgbGFyZ2VzdAorICAgIC8vIHJlY3Rh
bmdsZSBpbnNpZGUgbV9vcGFxdWVSZWN0IHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggfHJl
Y3R8LgorCisgICAgaWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgeworICAgICAgICBt
X29wYXF1ZVJlY3Quc2V0RW1wdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlu
dCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0OworICAgIGludCBk
ZWx0YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OworICAgIGludCBk
ZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJv
dHRvbSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworCisgICAgLy8gaG9y
aXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBv
ciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgbV9vcGFxdWVSZWN0LgorICAgIC8v
IHZlcnRpY2FsIGlzIHRoZSBsYXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFib3ZlIG9yIGJl
bG93IHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KKyAgICBTa1JlY3QgaG9yaXpvbnRh
bCA9IG1fb3BhcXVlUmVjdDsKKyAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkKKyAgICAg
ICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOworICAgIGVsc2UKKyAgICAgICAgaG9y
aXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOworICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG1fb3Bh
cXVlUmVjdDsKKyAgICBpZiAoZGVsdGFMZWZ0ID4gZGVsdGFSaWdodCkKKyAgICAgICAgdmVydGlj
YWwuZlJpZ2h0ID0gcmVjdC5mTGVmdDsKKyAgICBlbHNlCisgICAgICAgIHZlcnRpY2FsLmZMZWZ0
ID0gcmVjdC5mUmlnaHQ7CisKKyAgICBpZiAoKGxvbmcpaG9yaXpvbnRhbC53aWR0aCgpICogKGxv
bmcpaG9yaXpvbnRhbC5oZWlnaHQoKSA+IChsb25nKXZlcnRpY2FsLndpZHRoKCkgKiAobG9uZyl2
ZXJ0aWNhbC5oZWlnaHQoKSkKKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKKyAg
ICBlbHNlCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IHZlcnRpY2FsOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzZjJjNWExYjFkNDJlZjY0
NmQ2NGI1NGFlZmIyYzZlNzU4MGY5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgT3BhcXVlUmVnaW9uU2tpYV9oCisjZGVmaW5lIE9wYXF1ZVJlZ2lvblNraWFf
aAorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNs
dWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1BvaW50
LmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBs
YXRmb3JtQ29udGV4dFNraWE7CisKKy8vIFRoaXMgY2xhc3MgaXMgYW4gZW5jYXBzdWxhdGlvbiBv
ZiBmdW5jdGlvbmFsaXR5IGZvciBQbGF0Zm9ybUNvbnRleHRTa2lhLCBhbmQgaXRzIG1ldGhvZHMg
YXJlIG1pcnJvcmVkCisvLyB0aGVyZSBmb3IgdGhlIG91dHNpZGUgd29ybGQuIEl0IHRyYWNrcyBw
YWludHMgYW5kIGNvbXB1dGVzIHdoYXQgYXJlYSB3aWxsIGJlIG9wYXF1ZS4KK2NsYXNzIE9wYXF1
ZVJlZ2lvblNraWEgeworcHVibGljOgorICAgIE9wYXF1ZVJlZ2lvblNraWEoKTsKKyAgICB2aXJ0
dWFsIH5PcGFxdWVSZWdpb25Ta2lhKCk7CisKKyAgICAvLyBUaGUgcmVzdWx0aW5nIG9wYXF1ZSBy
ZWdpb24gYXMgYSBzaW5nbGUgcmVjdC4KKyAgICBJbnRSZWN0IGFzUmVjdCgpIGNvbnN0OworCisg
ICAgdm9pZCBkaWREcmF3UmVjdChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tS
ZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKik7CisgICAgdm9pZCBkaWREcmF3
UGF0aChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tQYXRoJiwgY29uc3QgU2tQ
YWludCYpOworICAgIHZvaWQgZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lh
KiwgU2tDYW52YXM6OlBvaW50TW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBj
b25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNv
bnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOworCitwcml2YXRlOgor
ICAgIHZvaWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0
JiwgY29uc3QgU2tQYWludCYsIGJvb2wgZHJhd3NPcGFxdWUsIGJvb2wgZmlsbHNCb3VuZHMpOwor
ICAgIHZvaWQgZGlkRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50JiwgYm9vbCBkcmF3c09wYXF1
ZSk7CisgICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
LCBjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tS
ZWN0Jik7CisKKyAgICBTa1JlY3QgbV9vcGFxdWVSZWN0OworfTsKKworfQorI2VuZGlmIC8vIE9w
YXF1ZVJlZ2lvblNraWFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggYTVlMTg2ODBk
MjBiYmJmNjk4Mjg2NjhlMGViOWNkNmYxZTk4MzBiNS4uMDM0YzMzMTllMThlOTJhOGUxYzcyNDgx
OWI2MGIwZDJkMzZmMzZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0xNzksNiAr
MTc5LDcgQEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbHlBbHBoYShT
a0NvbG9yIGMpIGNvbnN0CiAvLyBEYW5nZXI6IGNhbnZhcyBjYW4gYmUgTlVMTC4KIFBsYXRmb3Jt
Q29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMqIGNhbnZhcykKICAgICA6
IG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fdHJhY2tPcGFxdWVSZWdpb24oZmFsc2UpCiAgICAg
LCBtX3ByaW50aW5nKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZChmYWxzZSkKICAgICAsIG1fZHJh
d2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCkBAIC0yNjYsNiArMjY3LDExIEBAIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6Y2xpcFBhdGhBbnRpQWxpYXNlZChjb25zdCBTa1BhdGgmIGNsaXBQYXRo
KQogICAgIGNhbnZhcygpLT5jbGlwUGF0aChjbGlwUGF0aCwgU2tSZWdpb246OmtJbnRlcnNlY3Rf
T3AsIHRydWUpOwogfQogCitjb25zdCBTa0JpdG1hcCYgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xp
cHBlZFRvSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlLT5tX2ltYWdlQnVmZmVy
Q2xpcDsKK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkKIHsKICAgICBp
ZiAoIW1fc3RhdGUtPm1faW1hZ2VCdWZmZXJDbGlwLmVtcHR5KCkpIHsKQEAgLTI4Nyw2ICsyOTMs
NyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogICAg
IGlmIChmaWxsY29sb3JOb3RUcmFuc3BhcmVudCkgewogICAgICAgICBzZXR1cFBhaW50Rm9yRmls
bGluZygmcGFpbnQpOwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwor
ICAgICAgICBkaWREcmF3UmVjdChyZWN0LCBwYWludCk7CiAgICAgfQogCiAgICAgaWYgKG1fc3Rh
dGUtPm1fc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UKQEAgLTI5OSwxMiArMzA2LDE2IEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiAKICAgICAgICAgU2tS
ZWN0IHRvcEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wLCByZWN0LmZSaWdodCwgcmVj
dC5mVG9wICsgMSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QodG9wQm9yZGVyLCBwYWlu
dCk7CisgICAgICAgIGRpZERyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1Jl
Y3QgYm90dG9tQm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZCb3R0b20gLSAxLCByZWN0LmZS
aWdodCwgcmVjdC5mQm90dG9tIH07CiAgICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChib3R0b21C
b3JkZXIsIHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1JlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7
CiAgICAgICAgIFNrUmVjdCBsZWZ0Qm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZUb3AgKyAx
LCByZWN0LmZMZWZ0ICsgMSwgcmVjdC5mQm90dG9tIC0gMSB9OwogICAgICAgICBjYW52YXMoKS0+
ZHJhd1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOworICAgICAgICBkaWREcmF3UmVjdChsZWZ0Qm9y
ZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCByaWdodEJvcmRlciA9IHsgcmVjdC5mUmlnaHQg
LSAxLCByZWN0LmZUb3AgKyAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIC0gMSB9OwogICAg
ICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKKyAgICAgICAgZGlk
RHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTUzOSw2ICs1NTAs
NyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnBhaW50U2tQYWludChjb25zdCBTa1JlY3Qm
IHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1Bh
aW50JiBwYWludCkKIHsKICAgICBtX2NhbnZhcy0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOworICAg
IGRpZERyYXdSZWN0KHJlY3QsIHBhaW50KTsKIH0KIAogY29uc3QgU2tCaXRtYXAqIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmJpdG1hcCgpIGNvbnN0CkBAIC01OTcsNCArNjA5LDI4IEBAIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiAgICAgbV9ncHVDb250ZXh0ID0gY29udGV4dDsKIH0KIAordm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpkaWREcmF3UmVjdChjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFp
bnQmIHBhaW50LCBjb25zdCBTa0JpdG1hcCogYml0bWFwKQoreworICAgIGlmIChtX3RyYWNrT3Bh
cXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UmVjdCh0aGlzLCByZWN0
LCBwYWludCwgYml0bWFwKTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkaWREcmF3
UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIGlm
IChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UGF0
aCh0aGlzLCBwYXRoLCBwYWludCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZGlk
RHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlIG1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0
IFNrUG9pbnQgcG9pbnRzW10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIGlmIChtX3Ry
YWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UG9pbnRzKHRo
aXMsIG1vZGUsIG51bVBvaW50cywgcG9pbnRzLCBwYWludCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6ZGlkRHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1Bh
aW50JiBwYWludCkKK3sKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9v
cGFxdWVSZWdpb24uZGlkRHJhd0JvdW5kZWQodGhpcywgcmVjdCwgcGFpbnQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDdkY2ZiZTJlMzdm
YzFjNDI3ZGRlN2ZiM2Y2MDMxMWJlMjc0OTgyMTMuLmZlM2FiYjZmNTYwNWVhNGRiYTY4M2MwYzU5
NjhkMmEzZjBhMDJlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb25jb3B5YWJsZS5o
IgorI2luY2x1ZGUgIk9wYXF1ZVJlZ2lvblNraWEuaCIKIAogI2luY2x1ZGUgIlNrQ2FudmFzLmgi
CiAjaW5jbHVkZSAiU2tEYXNoUGF0aEVmZmVjdC5oIgpAQCAtOTgsNiArOTksOCBAQCBwdWJsaWM6
CiAgICAgLy8gTk9URTogfGltYWdlQnVmZmVyfCBtYXkgYmUgZGVsZXRlZCBiZWZvcmUgdGhlIHxy
ZXN0b3JlfCBpcyBpbnZva2VkLgogICAgIHZvaWQgYmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKik7CiAgICAgdm9pZCBjbGlwUGF0aEFu
dGlBbGlhc2VkKGNvbnN0IFNrUGF0aCYpOworICAgIC8vIElmIG5vbi1lbXB0eSwgdGhlIGxheWVy
IGlzIGNsaXBwZWQgdG8gdGhlIGJpdG1hcC4KKyAgICBjb25zdCBTa0JpdG1hcCYgY2xpcHBlZFRv
SW1hZ2UoKSBjb25zdDsKIAogICAgIC8vIFNldHMgdXAgdGhlIGNvbW1vbiBmbGFncyBvbiBhIHBh
aW50IGZvciBhbnRpYWxpYXNpbmcsIGVmZmVjdHMsIGV0Yy4KICAgICAvLyBUaGlzIGlzIGltcGxp
Y2l0bHkgY2FsbGVkIGJ5IHNldHVwUGFpbnRGaWxsIGFuZCBzZXR1cFBhaW50U3Ryb2tlLCBidXQK
QEAgLTE4Nyw2ICsxOTAsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVmZXJyZWQ7IH0KICAgICB2b2lkIHNldERlZmVycmVkKGJvb2wgZGVmZXJy
ZWQpIHsgbV9kZWZlcnJlZCA9IGRlZmVycmVkOyB9CiAKKyAgICB2b2lkIHNldFRyYWNrT3BhcXVl
UmVnaW9uKGJvb2wgdHJhY2spIHsgbV90cmFja09wYXF1ZVJlZ2lvbiA9IHRyYWNrOyB9CisKKyAg
ICAvLyBUaGlzIHdpbGwgYmUgYW4gZW1wdHkgcmVnaW9uIHVubGVzcyB0cmFja2luZyBpcyBlbmFi
bGVkLgorICAgIGNvbnN0IE9wYXF1ZVJlZ2lvblNraWEmIG9wYXF1ZVJlZ2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhcXVlUmVnaW9uOyB9CisKKyAgICAvLyBBZnRlciBkcmF3aW5nIGluIHRoZSBj
b250ZXh0J3MgY2FudmFzLCB1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIG5vdGlmeSB0aGUgY29udGV4
dCBzbyBpdCBjYW4gdHJhY2sgdGhlIG9wYXF1ZSByZWdpb24uCisgICAgdm9pZCBkaWREcmF3UmVj
dChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqID0gMCk7Cisg
ICAgdm9pZCBkaWREcmF3UGF0aChjb25zdCBTa1BhdGgmLCBjb25zdCBTa1BhaW50Jik7CisgICAg
dm9pZCBkaWREcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2ludHMsIGNv
bnN0IFNrUG9pbnRbXSwgY29uc3QgU2tQYWludCYpOworICAgIC8vIEZvciBkcmF3aW5nIG9wZXJh
dGlvbnMgdGhhdCBkbyBub3QgZmlsbCB0aGUgZW50aXJlIHJlY3QuCisgICAgdm9pZCBkaWREcmF3
Qm91bmRlZChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7CisKIHByaXZhdGU6CiAgICAg
Ly8gVXNlZCB3aGVuIHJlc3RvcmluZyBhbmQgdGhlIHN0YXRlIGhhcyBhbiBpbWFnZSBjbGlwLiBP
bmx5IHNob3dzIHRoZSBwaXhlbHMgaW4KICAgICAvLyBtX2NhbnZhcyB0aGF0IGFyZSBhbHNvIGlu
IGltYWdlQnVmZmVyLgpAQCAtMjEwLDYgKzIyNSwxMCBAQCBwcml2YXRlOgogICAgIC8vIG1TdGF0
ZVN0YWNrLmJhY2soKS4KICAgICBTdGF0ZSogbV9zdGF0ZTsKIAorICAgIC8vIFRyYWNrcyB0aGUg
cmVnaW9uIHBhaW50ZWQgb3BhcXVlIHZpYSB0aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIE9wYXF1
ZVJlZ2lvblNraWEgbV9vcGFxdWVSZWdpb247CisgICAgYm9vbCBtX3RyYWNrT3BhcXVlUmVnaW9u
OworCiAgICAgLy8gU3RvcmVzIGltYWdlIHNpemVzIGZvciBhIGhpbnQgdG8gY29tcHV0ZSBpbWFn
ZSByZXNhbXBsaW5nIG1vZGVzLgogICAgIC8vIFZhbHVlcyBhcmUgdXNlZCBpbiBJbWFnZVNraWEu
Y3BwCiAgICAgSW50U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNTaXplOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggY2E4ZmIzOWQyNGQ5ZmQxYzJhNmQ4NmJkNzNlNzQ1MTM4
NTFhYjFmOS4uNGMwYzAyM2UxZjdkOTdkMTc5ZDUwNDYxODI3Yzk4MmY2ODFkNWViYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xMTksNiArMTE5LDcgQEAKICAgICAgICAgICAg
ICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgICAgICAgICAndGVz
dHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvSW1hZ2VM
YXllckNocm9taXVtVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAndGVzdHMvUGxhdGZv
cm1Db250ZXh0U2tpYVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAg
fV0sCiAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDNhOWFjMDE3ZGI3MzM3ZTBhMzc0ZTY5NzE0MDNhODg0YzRhMGZiNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRl
c3QuY3BwCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRlICJCaXRt
YXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSB7CisKKyNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShh
LngoKSwgYi54KCkpOyBcCisgICAgRVhQRUNUX0VRKGEubWF4WCgpLCBiLm1heFgoKSk7IFwKKyAg
ICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAorICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5t
YXhZKCkpOworCisjZGVmaW5lIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBvcGFxdWVSZWN0
KSBcCit7IFwKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2tlcihiaXRtYXApOyBcCisgICAgZm9y
IChpbnQgeSA9IG9wYXF1ZVJlY3QueSgpOyB5IDwgb3BhcXVlUmVjdC5tYXhZKCk7ICsreSkgXAor
ICAgICAgICBmb3IgKGludCB4ID0gb3BhcXVlUmVjdC54KCk7IHggPCBvcGFxdWVSZWN0Lm1heFgo
KTsgKyt4KSB7IFwKKyAgICAgICAgICAgIGludCBhbHBoYSA9ICpiaXRtYXAuZ2V0QWRkcjMyKHgs
IHkpID4+IDI0OyBcCisgICAgICAgICAgICBFWFBFQ1RfRVEoMjU1LCBhbHBoYSk7IFwKKyAgICAg
ICAgfSBcCit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlVGVz
dCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMo
KTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNr
aWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFj
a09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZv
cm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsK
KyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEw
LCAxMCwgOTAsIDkwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNf
TUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEzLCAxMCwgOTApLCBvcGFxdWUs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVBsdXNMaWdodGVyKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAs
IDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24o
KS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg5OSwgMTMsIDEw
LCA5MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VJbik7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDg5LCA5MCksIHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRt
YXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg4LCA4LCAzLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3V0KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDExLCAxMCwgODgsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDMw
LCAzMCwgMjkwLCAyOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNv
dXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCAyOTAsIDI5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCg0MCwgMjAsIDI5MCwgNTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCAyOTAsIDI5MCksIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAs
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDM5MCwgNTApLCBvcGFxdWUsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDMwLCAzMCwgMjkwLCAyOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
MTAsIDEwLCAzOTAsIDUwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMzAsIDMwLCAyOTAsIDI5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDM5MCwgNTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAsIDEwLCAyOTAsIDMxMCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7Cit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qs
IHRyYWNrT3BhcXVlTGluZVRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1h
cC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAyMDAsIDIwMCk7CisgICAg
Yml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwg
MC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4w
Zik7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisgICAgY29udGV4
dC5zZXRNaXRlckxpbWl0KDApOworICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDQpOwor
ICAgIGNvbnRleHQuc2V0TGluZUNhcChTcXVhcmVDYXApOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
U3R5bGUoU29saWRTdHJva2UpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAs
IDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNf
TUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOwor
CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAw
KSwgSW50UG9pbnQoMTAwLCAwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBvaW50KDEwMCwg
MTApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQu
ZHJhd0xpbmUoSW50UG9pbnQoMCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4
dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTMsIDkwLCA4Nyks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFs
cGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50
KDAsIDExKSwgSW50UG9pbnQoMTAwLCAxMSkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDE0LCA5MCwgODYpLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4
dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3Vy
Y2VJbik7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBv
aW50KDAsIDApLCBJbnRQb2ludCgxMDAsIDApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRl
eHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBj
b250ZXh0LnNldFN0cm9rZUNvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Y29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBvaW50KDEwMCwgMTApKTsKKyAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwg
OTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBF
WFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAg
IGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwg
SW50UG9pbnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMTAsIDEzLCA5MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7
CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMSksIEludFBvaW50KDEwMCwgMTEp
KTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEw
LCAxNCwgOTAsIDg2KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJh
Y2tPcGFxdWVQYXRoVGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNl
dENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDIwMCwgMjAwKTsKKyAgICBiaXRt
YXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBs
YXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3Jt
Q29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBm
LCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsK
KworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVl
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0U2hv
dWxkQW50aWFsaWFzKGZhbHNlKTsKKyAgICBjb250ZXh0LnNldE1pdGVyTGltaXQoMSk7CisgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoNSk7CisgICAgY29udGV4dC5zZXRMaW5lQ2FwKFNx
dWFyZUNhcCk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CisgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOworCisgICAg
UGF0aCBwYXRoOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMCkpOworICAgIHBhdGgu
YWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAwKSk7CisgICAgY29udGV4dC5maWxsUGF0aChwYXRo
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENI
KGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBw
YXRoLmNsZWFyKCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgMTApKTsKKyAgICBw
YXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KDEwMCwgMTMpKTsKKyAgICBjb250ZXh0LmZpbGxQYXRo
KHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNf
TUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGFscGhhLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIDEwKSk7Cisg
ICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDEzKSk7CisgICAgY29udGV4dC5maWxs
UGF0aChwYXRoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMywgOTAsIDg3KSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBwYXRoLmNsZWFyKCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAxNCkp
OworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQu
ZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTQsIDkwLCA4
NiksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgcGF0aC5jbGVhcigpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LCB0cmFja09wYXF1ZUltYWdlVGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAg
Yml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDIwMCwgMjAwKTsK
KyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsK
KworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAg
IHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgx
LjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBm
LCAwLjBmKTsKKworICAgIFNrQml0bWFwIGRyYXdCaXRtYXA7CisgICAgZHJhd0JpdG1hcC5zZXRD
b25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMCwgMTApOworICAgIGRyYXdCaXRt
YXAuYWxsb2NQaXhlbHMoKTsKKworICAgIGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUodHJ1ZSk7Cisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBkcmF3Qml0bWFwLmhlaWdodCgpOyArK3kpCisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgZHJhd0JpdG1hcC53aWR0aCgpOyArK3gpCisgICAgICAgICAg
ICAqZHJhd0JpdG1hcC5nZXRBZGRyMzIoeCwgeSkgPSAweEZGRkZGRkZGOworICAgIFJlZlB0cjxC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYT4gb3BhcXVlSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYTo6Y3JlYXRlKGRyYXdCaXRtYXAsIHRydWUpOworICAgIEVYUEVDVF9GQUxTRShv
cGFxdWVJbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CisKKyAgICBkcmF3Qml0bWFwLnNl
dElzT3BhcXVlKGZhbHNlKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGRyYXdCaXRtYXAuaGVp
Z2h0KCk7ICsreSkKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkcmF3Qml0bWFwLndpZHRo
KCk7ICsreCkKKyAgICAgICAgICAgICpkcmF3Qml0bWFwLmdldEFkZHIzMih4LCB5KSA9IDB4MDAw
MDAwMDA7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBhbHBoYUltYWdl
ID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZShkcmF3Qml0bWFwLCB0cnVlKTsK
KyAgICBFWFBFQ1RfVFJVRShhbHBoYUltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdl
KG9wYXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29u
dGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChi
aXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgY29u
dGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQoMCwgMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTAp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9Q
SVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworCisgICAgY29udGV4dC5kcmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIEludFBvaW50KDUsIDUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdl
dCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCg1LCA1KSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdJbWFn
ZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMTAsIDEw
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAg
Y29udGV4dC5kcmF3SW1hZ2UoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMTAsIDEwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkw
LCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQ
RUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgyMCwgMTApLCBDb21wb3NpdGVTb3VyY2VJbik7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMjAsIDkwLCA4MCksIHBsYXRmb3JtQ29udGV4
dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRt
YXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250
ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldEFscGhhKDAuNSk7CisgICAgY29udGV4dC5kcmF3
SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDI1
LCAxNSksIENvbXBvc2l0ZVNvdXJjZUluKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAyNSwgOTAsIDc1KSwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2Uu
Z2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDEwLCAyMCksIENvbXBvc2l0ZVNv
dXJjZUluKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAxMCwgODAsIDkwKSwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxT
X01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0QWxwaGEoMC41KTsKKyAgICBj
b250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
SW50UG9pbnQoMTUsIDI1KSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIGNvbnRleHQucmVzdG9y
ZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjUsIDEwLCA3NSwgOTApLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFU
Q0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQor
CitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZU92YWxUZXN0KQorewor
ICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZywgMjAwLCAyMDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAg
IFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0
Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVl
UmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRl
eHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENv
bG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgwLCAwLCAwLCAwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVj
dCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVj
dCgxMCwgMTAsIDkwLCA5MCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMCwg
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCks
IG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAs
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CisKKyAgICBjb250ZXh0
LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50
UmVjdCgxMCwgMTAsIDUwLCAzMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEw
LCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAg
IEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxwaGEsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVjdCgxMCwgMTAsIDMw
LCA1MCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDAsIDEwLCA2MCwgOTApLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNf
TUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
CisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisKKyAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJh
d0VsbGlwc2UoSW50UmVjdCgxMCwgMTAsIDUwLCAzMCkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoNDAsIDQxLCA2MCwgNTkpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxw
aGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UoSW50UmVj
dCgyMCwgMTAsIDMwLCA1MCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTEsIDQxLCA0
OSwgNTkpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVY
UEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122277</attachid>
            <date>2012-01-12 11:56:59 -0800</date>
            <delta_ts>2012-01-12 14:39:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74352-20120112145658.patch</filename>
            <type>text/plain</type>
            <size>56755</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjBiZWVhYWE3ZTQyYmUx
ZDdlZTM0ODQxM2YxNjIyM2I1MDg3NDlmZi4uMzE5ZGVhMDk4ZGJhOGY0YjA3YTAxNjA3ZTE2Njkw
N2MxYWJmNGQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTAxLTEyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtza2lhXSBUcmFjayBh
IHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZpYSBQbGF0Zm9ybUNvbnRleHRTa2lh
IGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMgaW4gUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QuY3BwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3T3V0ZXJQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbm5lclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdp
b25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6On5PcGFxdWVSZWdp
b25Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmFzUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjp4ZmVybW9kZUlzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Onhm
ZXJtb2RlUHJlc2VydmVzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3Qm91bmRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJl
Z2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVn
aW9uU2tpYTo6bWFya1JlY3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdp
b25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xpcHBlZFRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6cGFpbnRTa1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OmRpZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q29udGV4dFNraWE6OmRpZERyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dFNraWE6OmRpZERyYXdQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6c2V0VHJhY2tPcGFxdWVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6b3BhcXVlUmVnaW9uKToKKwogMjAxMi0wMS0xMSAgQWRhbSBUcmVhdCAg
PGF0cmVhdEByaW0uY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjA4OApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNTNjNWM3NDc4
ZTZlZjYwNWY0YzM0OWY4ZmUwNWRlZDE1MDhlNjUxLi45MzdkMjU4NTc0NDIyOGQzNGIzYzQ1YTU1
OGQ5MjZhNzdiNTYwY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTAxLTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtza2lhXSBUcmFjayBhIHNpbXBsZSBvcGFxdWUgYXJlYSB3aGVuIHBhaW50aW5nIHZp
YSBQbGF0Zm9ybUNvbnRleHRTa2lhIGFuZCBzYXZlIGluIExheWVyVGV4dHVyZVVwZGF0ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzUyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
aToKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDEtMTAgIERtaXRyeSBMb21vdiAgPGRz
bG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBvYnNvbGV0ZSBy
ZWZlcmVuY2VzIHRvIFdlYldvcmtlciBjbGFzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1Y2IzNGU1
ZWFhYzM3MjFlNTQ0ZGQ5ZDYzOGQ5NDg0YzBjMWU3MGNiLi40MTIxNzY4YmUxMGNkM2Q2YmVmZTlk
ZWRjYzg3OGYzYzk2NzU1YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zOTI2LDYgKzM5MjYsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW50UmVjdFNraWEuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tp
YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKaW5kZXggZGIzNDM2MTVmYjg4NDBmYzM4NmI2
NDZmYjJkMDU3YTRkM2FlNjkzNi4uZDQxNzc4NGE0MWU2MjI2NTNiNDUwYjAzYzE1NDA1Y2VhNGJj
YzExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0zMzksNiArMzM5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFp
bnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC00NzMsMTEgKzQ3NCwxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBw
YWludC5zZXRBbnRpQWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0g
Tm9TdHJva2UpIHsKICAgICAgICAgcGFpbnQucmVzZXQoKTsKICAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwogICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKICAgICB9CiB9CiAK
QEAgLTUxMywxMSArNTE2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBJbnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKIAogICAgIGlmIChzdHJva2VT
dHlsZSgpICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHBhaW50LnJlc2V0KCk7CiAgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAmcmVjdCwgMCk7
CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFp
bnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5kZWQocmVjdCwgcGFp
bnQpOwogICAgIH0KIH0KIApAQCAtNTI2LDcgKzUzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uCiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJh
d091dGVyUGF0aChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQm
IHBhaW50LCBpbnQgd2lkdGgpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd091dGVyUGF0aChQbGF0
Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmIHBh
aW50LCBpbnQgd2lkdGgpCiB7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikK
ICAgICBwYWludC5zZXRBbHBoYSg2NCk7CkBAIC01MzYsMTUgKzU0MSwxNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZHJhd091dGVyUGF0aChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBTa1BhdGgmIHBh
dGgsIFNrUGFpbnQmCiAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMSk7CiAgICAgcGFpbnQuc2V0
UGF0aEVmZmVjdChuZXcgU2tDb3JuZXJQYXRoRWZmZWN0KDEpKS0+dW5yZWYoKTsKICNlbmRpZgot
ICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIGNvbnRleHQtPmNhbnZhcygp
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgY29udGV4dC0+ZGlkRHJhd1BhdGgocGF0aCwg
cGFpbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJhd0lubmVyUGF0aChTa0NhbnZhcyog
Y2FudmFzLCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmIHBhaW50LCBpbnQgd2lkdGgpCitz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd0lubmVyUGF0aChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250
ZXh0LCBjb25zdCBTa1BhdGgmIHBhdGgsIFNrUGFpbnQmIHBhaW50LCBpbnQgd2lkdGgpCiB7CiAj
aWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBwYWludC5zZXRBbHBoYSgx
MjgpOwogICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKHdpZHRoICogMC41Zik7Ci0gICAgY2FudmFz
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgY29udGV4dC0+Y2FudmFzKCktPmRyYXdQYXRo
KHBhdGgsIHBhaW50KTsKKyAgICBjb250ZXh0LT5kaWREcmF3UGF0aChwYXRoLCBwYWludCk7CiAj
ZW5kaWYKIH0KIApAQCAtNTgxLDkgKzU4OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50CiAK
ICAgICBwYWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAgICAgZm9jdXNSaW5nUmVnaW9uLmdl
dEJvdW5kYXJ5UGF0aCgmcGF0aCk7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKTsKLSAgICBkcmF3T3V0ZXJQYXRoKGNhbnZhcywgcGF0aCwgcGFpbnQs
IHdpZHRoKTsKLSAgICBkcmF3SW5uZXJQYXRoKGNhbnZhcywgcGF0aCwgcGFpbnQsIHdpZHRoKTsK
KyAgICBkcmF3T3V0ZXJQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBwYWludCwgd2lkdGgp
OworICAgIGRyYXdJbm5lclBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIHBhaW50LCB3aWR0
aCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KQEAgLTYzMSwx
MiArNjM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2lu
dCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAgICBmaWxsUGFpbnQuc2V0
Q29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kaWREcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmRpZERyYXdSZWN0KHIyLCBmaWxsUGFpbnQpOwogICAgIH0KIAogICAgIGFkanVzdExp
bmVUb1BpeGVsQm91bmRhcmllcyhwMSwgcDIsIHdpZHRoLCBwZW5TdHlsZSk7CiAgICAgU2tQb2lu
dCBwdHNbMl0gPSB7IChTa1BvaW50KXAxLCAoU2tQb2ludClwMiB9OwogCiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2Rl
LCAyLCBwdHMsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BvaW50cyhT
a0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBw
dCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKQEAgLTcxMiw2ICs3
MjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29u
c3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLAogICAgICAgICAgICAgIG9yaWdpblggKyBX
ZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHdpZHRoKSwKICAgICAgICAgICAgICBvcmlnaW5ZICsgU2tJ
bnRUb1NjYWxhcihtaXNzcGVsbEJpdG1hcC0+aGVpZ2h0KCkpKTsKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+ZGlkRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LApAQCAtNzM2LDYgKzc0Niw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcHQsCiAgICAgLy8gVGV4dCBsaW5lcyBhcmUgZHJhd24gdXNpbmcgdGhlIHN0cm9rZSBjb2xv
ci4KICAgICBwYWludC5zZXRDb2xvcihwbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlU3Ryb2tl
Q29sb3IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBw
YWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHIsIHBhaW50KTsKIH0K
IAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAg
LTc3MCw2ICs3ODEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aFRvRmlsbCkKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxp
bmcoJnBhaW50KTsKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgo
cGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBw
YWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCkBAIC03ODgsNiArODAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
cmVzdG9yZSgpOwogfQpAQCAtODE2LDYgKzgyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRDb21tb24oJnBhaW50KTsKICAgICBw
YWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5kcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdS
ZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0LApAQCAtODU1LDYgKzg2OSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRD
b2xvcihjb2xvci5yZ2IoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3
UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBh
dGgsIHBhaW50KTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
KCkgY29uc3QKQEAgLTExMzksNiArMTE1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAg
ICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2Up
CkBAIC0xMTUzLDYgKzExNjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CiAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxh
dGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCkBAIC0xMTczLDkgKzExOTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgYm9vbCB2
YWxpZFcgPSByLndpZHRoKCkgPiAwOwogICAgIGJvb2wgdmFsaWRIID0gci5oZWlnaHQoKSA+IDA7
CiAgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAg
ICBpZiAodmFsaWRXICYmIHZhbGlkSCkKKyAgICBpZiAodmFsaWRXICYmIHZhbGlkSCkgewogICAg
ICAgICBjYW52YXMtPmRyYXdSZWN0KHIsIHBhaW50KTsKLSAgICBlbHNlIGlmICh2YWxpZFcgfHwg
dmFsaWRIKSB7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWlu
dCk7CisgICAgfSBlbHNlIGlmICh2YWxpZFcgfHwgdmFsaWRIKSB7CiAgICAgICAgIC8vIHdlIGFy
ZSBleHBlY3RlZCB0byByZXNwZWN0IHRoZSBsaW5lSm9pbiwgc28gd2UgY2FuJ3QganVzdCBjYWxs
CiAgICAgICAgIC8vIGRyYXdMaW5lIC0tIHdlIGhhdmUgdG8gY3JlYXRlIGEgcGF0aCB0aGF0IGRv
dWJsZXMgYmFjayBvbiBpdHNlbGYuCiAgICAgICAgIFNrUGF0aCBwYXRoOwpAQCAtMTE4Myw2ICsx
MjAxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIHBhdGgubGluZVRvKHIuZlJpZ2h0LCBy
LmZCb3R0b20pOwogICAgICAgICBwYXRoLmNsb3NlKCk7CiAgICAgICAgIGNhbnZhcy0+ZHJhd1Bh
dGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgo
cGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IGU2NmRiYWI0MzUwZDQ1ZDM0M2Vm
MWQzZmY1NjIxYTg4YTM5NzllYzYuLjFkNWQ5OTExYmFiMDhiZmE1MGNjY2E4ODA3MTNkZDMxNTYy
ZDA5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAKQEAgLTI0OCw2ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0
bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1h
ZwogICAgICAgICAvLyB3ZSBkb24ndCBzZW5kIGV4dHJhIHBpeGVscy4KICAgICAgICAgY2FudmFz
LT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZzcmNSZWN0LCBkZXN0UmVjdCwgJnBh
aW50KTsKICAgICB9CisgICAgcGxhdGZvcm1Db250ZXh0LT5kaWREcmF3UmVjdChkZXN0UmVjdCwg
cGFpbnQsICZiaXRtYXAuYml0bWFwKCkpOwogfQogCiAvLyBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBk
aW1lbnNpb25zIHdpdGggdGhlIGdpdmVuIG1hdHJpeC4gVXNlZCB0byBzZWUgaG93IGJpZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVl
UmVnaW9uU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRhNGVlNGYzY2VmNmFiZjQ0NDlmNTIxZTRmMGVj
OGRkMTZiNmEyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiT3BhcXVlUmVnaW9uU2tpYS5oIgorCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSAiU2tTaGFkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitPcGFxdWVSZWdpb25Ta2lhOjpPcGFxdWVSZWdpb25Ta2lhKCkK
KyAgICA6IG1fb3BhcXVlUmVjdChTa1JlY3Q6Ok1ha2VFbXB0eSgpKQoreworfQorCitPcGFxdWVS
ZWdpb25Ta2lhOjp+T3BhcXVlUmVnaW9uU2tpYSgpCit7Cit9CisKK0ludFJlY3QgT3BhcXVlUmVn
aW9uU2tpYTo6YXNSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm5zIHRoZSBsYXJnZXN0IGVu
Y2xvc2VkIHJlY3QuCisgICAgaW50IGxlZnQgPSBTa1NjYWxhckNlaWwobV9vcGFxdWVSZWN0LmZM
ZWZ0KTsKKyAgICBpbnQgdG9wID0gU2tTY2FsYXJDZWlsKG1fb3BhcXVlUmVjdC5mVG9wKTsKKyAg
ICBpbnQgcmlnaHQgPSBTa1NjYWxhckZsb29yKG1fb3BhcXVlUmVjdC5mUmlnaHQpOworICAgIGlu
dCBib3R0b20gPSBTa1NjYWxhckZsb29yKG1fb3BhcXVlUmVjdC5mQm90dG9tKTsKKyAgICByZXR1
cm4gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0LWxlZnQsIGJvdHRvbS10b3ApOworfQorCisvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHhmZXJtb2RlIHdpbGwgZm9yY2UgdGhlIGRzdCB0byBiZSBvcGFx
dWUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgZHN0Lgorc3RhdGljIGlubGluZSBib29sIHhm
ZXJtb2RlSXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIGJvb2wgc3JjSXNPcGFxdWUpCit7
CisgICAgaWYgKCFzcmNJc09wYXF1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2tY
ZmVybW9kZSogeGZlcm1vZGUgPSBwYWludC5nZXRYZmVybW9kZSgpOworICAgIGlmICgheGZlcm1v
ZGUpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBkZWZhdWx0IHRvIGtTcmNPdmVyX01vZGUKKyAg
ICBTa1hmZXJtb2RlOjpNb2RlIG1vZGU7CisgICAgaWYgKCF4ZmVybW9kZS0+YXNNb2RlKCZtb2Rl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6
a1NyY092ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNvdXJjZSpkZXN0CisgICAgY2FzZSBT
a1hmZXJtb2RlOjprRHN0T3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QK
KyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RBVG9wX01vZGU6IC8vIHNvdXJjZQorICAgIGNhc2Ug
U2tYZmVybW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAgICBkZWZhdWx0OiAvLyB0
aGUgcmVzdCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlOiAvLyAwCisgICAgY2Fz
ZSBTa1hmZXJtb2RlOjprRHN0X01vZGU6IC8vIGRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtT
cmNJbl9Nb2RlOiAvLyBzb3VyY2UgKiBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0SW5f
TW9kZTogLy8gZGVzdCAqIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY091dF9Nb2Rl
OiAvLyBzb3VyY2UgKiAoMS1kZXN0KQorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdE91dF9Nb2Rl
OiAvLyBkZXN0ICogKDEtc291cmNlKQorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0FUb3BfTW9k
ZTogLy8gZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1hvcl9Nb2RlOiAvLyBzb3VyY2UgKyBk
ZXN0IC0gMiooc291cmNlKmRlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgeGZlcm1vZGUgd2lsbCBrZWVwIHRoZSBkc3Qgb3BhcXVl
LCBhc3N1bWluZyB0aGUgZHN0IGlzIGFscmVhZHkgb3BhcXVlLgorc3RhdGljIGlubGluZSBib29s
IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBib29sIHNyY0lz
T3BhcXVlKQoreworICAgIFNrWGZlcm1vZGUqIHhmZXJtb2RlID0gcGFpbnQuZ2V0WGZlcm1vZGUo
KTsKKyAgICBpZiAoIXhmZXJtb2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZGVmYXVsdCB0
byBrU3JjT3Zlcl9Nb2RlCisgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlOworICAgIGlmICgheGZl
cm1vZGUtPmFzTW9kZSgmbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdF9Nb2RlOiAvLyBkZXN0CisgICAg
Y2FzZSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gc291cmNl
KmRlc3QKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdmVyX01vZGU6IC8vIHNvdXJjZSArIGRl
c3QgLSBzb3VyY2UqZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY0FUb3BfTW9kZTogLy8g
ZGVzdAorICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rlc3QKKyAg
ICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVz
dAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2Rl
OiAvLyAwCisgICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0X01vZGU6IC8vIHNvdXJjZSAqICgx
LWRlc3QpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0X01vZGU6IC8vIGRlc3QgKiAoMS1z
b3VyY2UpCisgICAgY2FzZSBTa1hmZXJtb2RlOjprWG9yX01vZGU6IC8vIHNvdXJjZSArIGRlc3Qg
LSAyKihzb3VyY2UqZGVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgU2tYZmVy
bW9kZTo6a1NyY19Nb2RlOiAvLyBzb3VyY2UKKyAgICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNJbl9N
b2RlOiAvLyBzb3VyY2UgKiBkZXN0CisgICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0SW5fTW9kZTog
Ly8gZGVzdCAqIHNvdXJjZQorICAgIGNhc2UgU2tYZmVybW9kZTo6a0RzdEFUb3BfTW9kZTogLy8g
c291cmNlCisgICAgICAgIHJldHVybiBzcmNJc09wYXF1ZTsKKyAgICB9Cit9CisKKy8vIFJldHVy
bnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCitzdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlKQoreworICAgIGlmIChw
YWludC5nZXRBbHBoYSgpIDwgMHhGRikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
Y2hlY2tGaWxsT25seSAmJiBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxl
ICYmIHBhaW50LmlzQW50aUFsaWFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTa1No
YWRlciogc2hhZGVyID0gcGFpbnQuZ2V0U2hhZGVyKCk7CisgICAgaWYgKHNoYWRlciAmJiAhc2hh
ZGVyLT5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJpdG1hcCAm
JiAhYml0bWFwLT5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tSZWN0JiBmaWxsUmVjdCwgY29uc3Qg
U2tQYWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXApCit7CisgICAgLy8gQW55IHN0
cm9raW5nIG1heSBwdXQgYWxwaGEgaW4gcGl4ZWxzIGV2ZW4gaWYgdGhlIGZpbGxpbmcgcGFydCBk
b2VzIG5vdC4KKyAgICBpZiAocGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHls
ZSkgeworICAgICAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGJpdG1hcCk7
CisgICAgICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXBhaW50
LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCisgICAgICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBh
aW50LCBvcGFxdWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFNrUmVjdCBzdHJva2VS
ZWN0OworICAgICAgICAgICAgc3Ryb2tlUmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKGZp
bGxSZWN0LCAmc3Ryb2tlUmVjdCk7CisgICAgICAgICAgICBkaWREcmF3KGNvbnRleHQsIHN0cm9r
ZVJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IHRydWU7CisgICAgYm9vbCBvcGFxdWUgPSBwYWludElz
T3BhcXVlKHBhaW50LCBiaXRtYXAsIGNoZWNrRmlsbE9ubHkpOworICAgIGJvb2wgZmlsbHNCb3Vu
ZHMgPSBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtTdHJva2VfU3R5bGU7CisgICAgZGlk
RHJhdyhjb250ZXh0LCBmaWxsUmVjdCwgcGFpbnQsIG9wYXF1ZSwgZmlsbHNCb3VuZHMpOworfQor
Cit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKGNvbnN0IFBsYXRmb3JtQ29udGV4
dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCYgcGFpbnQp
Cit7CisgICAgU2tSZWN0IHJlY3Q7CisgICAgaWYgKHBhdGguaXNSZWN0KCZyZWN0KSkgeworICAg
ICAgICBkaWREcmF3UmVjdChjb250ZXh0LCByZWN0LCBwYWludCwgMCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBib29sIG9wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQpOworICAg
IGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZh
c3RCb3VuZHMoKSkKKyAgICAgICAgZGlkRHJhd1VuYm91bmRlZChwYWludCwgb3BhcXVlKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKHBhdGguZ2V0
Qm91bmRzKCksICZyZWN0KTsKKyAgICAgICAgZGlkRHJhdyhjb250ZXh0LCByZWN0LCBwYWludCwg
b3BhcXVlLCBmaWxsc0JvdW5kcyk7CisgICAgfQorfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6
OmRpZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tDYW52
YXM6OlBvaW50TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50IHBvaW50c1td
LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAoIW51bVBvaW50cykKKyAgICAgICAg
cmV0dXJuOworCisgICAgU2tSZWN0IHJlY3Q7CisgICAgcmVjdC5mTGVmdCA9IHBvaW50c1swXS5m
WDsKKyAgICByZWN0LmZSaWdodCA9IHBvaW50c1swXS5mWCArIDE7CisgICAgcmVjdC5mVG9wID0g
cG9pbnRzWzBdLmZZOworICAgIHJlY3QuZkJvdHRvbSA9IHBvaW50c1swXS5mWSArIDE7CisKKyAg
ICBmb3IgKGludCBpID0gMTsgaSA8IG51bVBvaW50czsgKytpKSB7CisgICAgICAgIHJlY3QuZkxl
ZnQgPSBzdGQ6Om1pbihyZWN0LmZMZWZ0LCBwb2ludHNbaV0uZlgpOworICAgICAgICByZWN0LmZS
aWdodCA9IHN0ZDo6bWF4KHJlY3QuZlJpZ2h0LCBwb2ludHNbaV0uZlggKyAxKTsKKyAgICAgICAg
cmVjdC5mVG9wID0gc3RkOjptaW4ocmVjdC5mVG9wLCBwb2ludHNbaV0uZlkpOworICAgICAgICBy
ZWN0LmZCb3R0b20gPSBzdGQ6Om1heChyZWN0LmZCb3R0b20sIHBvaW50c1tpXS5mWSArIDEpOwor
ICAgIH0KKworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCk7CisgICAgYm9v
bCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJv
dW5kcygpKQorICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50LCBvcGFxdWUpOworICAgIGVs
c2UgeworICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMocmVjdCwgJnJlY3Qp
OworICAgICAgICBkaWREcmF3KGNvbnRleHQsIHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91
bmRzKTsKKyAgICB9Cit9CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQo
Y29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tSZWN0JiBib3VuZHMs
IGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIGJvb2wgb3BhcXVlID0gcGFpbnRJc09wYXF1
ZShwYWludCk7CisgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOworCisgICAgaWYgKCFwYWlu
dC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQorICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50
LCBvcGFxdWUpOworICAgIGVsc2UgeworICAgICAgICBTa1JlY3QgcmVjdDsKKyAgICAgICAgcmVj
dCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKGJvdW5kcywgJnJlY3QpOworICAgICAgICBkaWRE
cmF3KGNvbnRleHQsIHJlY3QsIHBhaW50LCBvcGFxdWUsIGZpbGxzQm91bmRzKTsKKyAgICB9Cit9
CisKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiBjb250ZXh0LCBjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBi
b29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRzKQoreworICAgIGlmIChmaWxsc0JvdW5k
cyAmJiB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSkpCisgICAgICAgIG1hcmtS
ZWN0QXNPcGFxdWUoY29udGV4dCwgcmVjdCk7CisgICAgZWxzZSBpZiAoU2tSZWN0OjpJbnRlcnNl
Y3RzKHJlY3QsIG1fb3BhcXVlUmVjdCkgJiYgIXhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50
LCBkcmF3c09wYXF1ZSkpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUocmVjdCk7Cit9CisK
K3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50JiBw
YWludCwgYm9vbCBkcmF3c09wYXF1ZSkKK3sKKyAgICBpZiAoIXhmZXJtb2RlUHJlc2VydmVzT3Bh
cXVlKHBhaW50LCBkcmF3c09wYXF1ZSkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0
IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhlIGtub3duIG9wYXF1ZSBhcmVhLgorICAg
ICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VFbXB0eSgpOworICAgIH0KK30KKwordm9p
ZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFBsYXRmb3JtQ29udGV4
dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgcmVjdCkKK3sKKyAgICAvLyBXZSB3YW50IHRv
IGtlZXAgdHJhY2sgb2YgYW4gb3BhcXVlIHJlZ2lvbiBidXQgYm91bmQgaXRzIGNvbXBsZXhpdHkg
YXQgYSBjb25zdGFudCBzaXplLgorICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGxhcmdlc3Qg
cmVjdGFuZ2xlIHNlZW4gYnkgYXJlYS4gSWYgd2UgY2FuIGFkZCB0aGUgbmV3IHJlY3QgdG8gdGhp
cworICAgIC8vIHJlY3RhbmdsZSB0aGVuIHdlIGRvIHRoYXQsIGFzIHRoYXQgaXMgdGhlIGNoZWFw
ZXN0IHdheSB0byBpbmNyZWFzZSB0aGUgYXJlYSByZXR1cm5lZAorICAgIC8vIHdpdGhvdXQgaW5j
cmVhc2luZyB0aGUgY29tcGxleGl0eS4KKworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghY29udGV4dC0+Y2xpcHBlZFRvSW1hZ2UoKS5pc09wYXF1ZSgp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fb3BhcXVlUmVjdC5jb250YWlucyhyZWN0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsK
KyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChyZWN0LmZUb3AgPD0gbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49
IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFx
dWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mTGVmdCkKKyAgICAg
ICAgICAgIG1fb3BhcXVlUmVjdC5mTGVmdCA9IHJlY3QuZkxlZnQ7CisgICAgICAgIGlmIChyZWN0
LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJl
Y3QuZlJpZ2h0KQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0
OworICAgIH0gZWxzZSBpZiAocmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVj
dC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9w
IDwgbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG1fb3BhcXVlUmVjdC5mVG9w
KQorICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlm
IChyZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3AgPD0gbV9v
cGFxdWVSZWN0LmZCb3R0b20pCisgICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJl
Y3QuZkJvdHRvbTsKKyAgICB9CisKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1
ZVJlY3Qud2lkdGgoKSAqIChsb25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIGFy
ZWEgPSAobG9uZylyZWN0LndpZHRoKCkgKiAobG9uZylyZWN0LmhlaWdodCgpOworICAgIGlmIChh
cmVhID4gb3BhcXVlQXJlYSkKKyAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKK30KKwordm9p
ZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVj
dCkKK3sKKyAgICAvLyBXZSB3YW50IHRvIGtlZXAgYXMgbXVjaCBvZiB0aGUgY3VycmVudCBvcGFx
dWUgcmVjdGFuZ2xlIGFzIHdlIGNhbiwgc28gZmluZCB0aGUgb25lIGxhcmdlc3QKKyAgICAvLyBy
ZWN0YW5nbGUgaW5zaWRlIG1fb3BhcXVlUmVjdCB0aGF0IGRvZXMgbm90IGludGVyc2VjdCB3aXRo
IHxyZWN0fC4KKworICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsKKyAgICAg
ICAgbV9vcGFxdWVSZWN0LnNldEVtcHR5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpbnQgZGVsdGFMZWZ0ID0gcmVjdC5mTGVmdCAtIG1fb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBp
bnQgZGVsdGFSaWdodCA9IG1fb3BhcXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdodDsKKyAgICBp
bnQgZGVsdGFUb3AgPSByZWN0LmZUb3AgLSBtX29wYXF1ZVJlY3QuZlRvcDsKKyAgICBpbnQgZGVs
dGFCb3R0b20gPSBtX29wYXF1ZVJlY3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKKworICAgIC8v
IGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxl
ZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KKyAg
ICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBv
ciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCisgICAgU2tSZWN0IGhvcml6
b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFCb3R0b20pCisg
ICAgICAgIGhvcml6b250YWwuZkJvdHRvbSA9IHJlY3QuZlRvcDsKKyAgICBlbHNlCisgICAgICAg
IGhvcml6b250YWwuZlRvcCA9IHJlY3QuZkJvdHRvbTsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBt
X29wYXF1ZVJlY3Q7CisgICAgaWYgKGRlbHRhTGVmdCA+IGRlbHRhUmlnaHQpCisgICAgICAgIHZl
cnRpY2FsLmZSaWdodCA9IHJlY3QuZkxlZnQ7CisgICAgZWxzZQorICAgICAgICB2ZXJ0aWNhbC5m
TGVmdCA9IHJlY3QuZlJpZ2h0OworCisgICAgaWYgKChsb25nKWhvcml6b250YWwud2lkdGgoKSAq
IChsb25nKWhvcml6b250YWwuaGVpZ2h0KCkgPiAobG9uZyl2ZXJ0aWNhbC53aWR0aCgpICogKGxv
bmcpdmVydGljYWwuaGVpZ2h0KCkpCisgICAgICAgIG1fb3BhcXVlUmVjdCA9IGhvcml6b250YWw7
CisgICAgZWxzZQorICAgICAgICBtX29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2YyYzVhMWIxZDQy
ZWY2NDZkNjRiNTRhZWZiMmM2ZTc1ODBmOTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIE9wYXF1ZVJlZ2lvblNraWFfaAorI2RlZmluZSBPcGFxdWVSZWdpb25T
a2lhX2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisj
aW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiU2tQ
b2ludC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBQbGF0Zm9ybUNvbnRleHRTa2lhOworCisvLyBUaGlzIGNsYXNzIGlzIGFuIGVuY2Fwc3VsYXRp
b24gb2YgZnVuY3Rpb25hbGl0eSBmb3IgUGxhdGZvcm1Db250ZXh0U2tpYSwgYW5kIGl0cyBtZXRo
b2RzIGFyZSBtaXJyb3JlZAorLy8gdGhlcmUgZm9yIHRoZSBvdXRzaWRlIHdvcmxkLiBJdCB0cmFj
a3MgcGFpbnRzIGFuZCBjb21wdXRlcyB3aGF0IGFyZWEgd2lsbCBiZSBvcGFxdWUuCitjbGFzcyBP
cGFxdWVSZWdpb25Ta2lhIHsKK3B1YmxpYzoKKyAgICBPcGFxdWVSZWdpb25Ta2lhKCk7CisgICAg
dmlydHVhbCB+T3BhcXVlUmVnaW9uU2tpYSgpOworCisgICAgLy8gVGhlIHJlc3VsdGluZyBvcGFx
dWUgcmVnaW9uIGFzIGEgc2luZ2xlIHJlY3QuCisgICAgSW50UmVjdCBhc1JlY3QoKSBjb25zdDsK
KworICAgIHZvaWQgZGlkRHJhd1JlY3QoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0
IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBjb25zdCBTa0JpdG1hcCopOworICAgIHZvaWQgZGlk
RHJhd1BhdGgoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUGF0aCYsIGNvbnN0
IFNrUGFpbnQmKTsKKyAgICB2b2lkIGRpZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0
U2tpYSosIFNrQ2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRb
XSwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZGlkRHJhd0JvdW5kZWQoY29uc3QgUGxhdGZv
cm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNr
UmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBib29sIGRyYXdzT3BhcXVlLCBib29sIGZpbGxzQm91bmRz
KTsKKyAgICB2b2lkIGRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYsIGJvb2wgZHJhd3NP
cGFxdWUpOworICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiwgY29uc3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0
IFNrUmVjdCYpOworCisgICAgU2tSZWN0IG1fb3BhcXVlUmVjdDsKK307CisKK30KKyNlbmRpZiAv
LyBPcGFxdWVSZWdpb25Ta2lhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGE1ZTE4
NjgwZDIwYmJiZjY5ODI4NjY4ZTBlYjljZDZmMWU5ODMwYjUuLjAzNGMzMzE5ZTE4ZTkyYThlMWM3
MjQ4MTliNjBiMGQyZDM2ZjM2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMTc5
LDYgKzE3OSw3IEBAIFNrQ29sb3IgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGx5QWxw
aGEoU2tDb2xvciBjKSBjb25zdAogLy8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCiBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCiAg
ICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX3RyYWNrT3BhcXVlUmVnaW9uKGZhbHNlKQog
ICAgICwgbV9wcmludGluZyhmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQoZmFsc2UpCiAgICAgLCBt
X2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQpAQCAtMjY2LDYgKzI2NywxMSBAQCB2b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OmNsaXBQYXRoQW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJiBjbGlw
UGF0aCkKICAgICBjYW52YXMoKS0+Y2xpcFBhdGgoY2xpcFBhdGgsIFNrUmVnaW9uOjprSW50ZXJz
ZWN0X09wLCB0cnVlKTsKIH0KIAorY29uc3QgU2tCaXRtYXAmIFBsYXRmb3JtQ29udGV4dFNraWE6
OmNsaXBwZWRUb0ltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS0+bV9pbWFnZUJ1
ZmZlckNsaXA7Cit9CisKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZSgpCiB7CiAg
ICAgaWYgKCFtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcC5lbXB0eSgpKSB7CkBAIC0yODcsNiAr
MjkzLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkK
ICAgICBpZiAoZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQpIHsKICAgICAgICAgc2V0dXBQYWludEZv
ckZpbGxpbmcoJnBhaW50KTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJlY3QsIHBhaW50
KTsKKyAgICAgICAgZGlkRHJhd1JlY3QocmVjdCwgcGFpbnQpOwogICAgIH0KIAogICAgIGlmICht
X3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlCkBAIC0yOTksMTIgKzMwNiwxNiBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogCiAgICAgICAg
IFNrUmVjdCB0b3BCb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVjdC5mUmlnaHQs
IHJlY3QuZlRvcCArIDEgfTsKICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHRvcEJvcmRlciwg
cGFpbnQpOworICAgICAgICBkaWREcmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKICAgICAgICAg
U2tSZWN0IGJvdHRvbUJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mQm90dG9tIC0gMSwgcmVj
dC5mUmlnaHQsIHJlY3QuZkJvdHRvbSB9OwogICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QoYm90
dG9tQm9yZGVyLCBwYWludCk7CisgICAgICAgIGRpZERyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFp
bnQpOwogICAgICAgICBTa1JlY3QgbGVmdEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9w
ICsgMSwgcmVjdC5mTGVmdCArIDEsIHJlY3QuZkJvdHRvbSAtIDEgfTsKICAgICAgICAgY2FudmFz
KCktPmRyYXdSZWN0KGxlZnRCb3JkZXIsIHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1JlY3QobGVm
dEJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3QgcmlnaHRCb3JkZXIgPSB7IHJlY3QuZlJp
Z2h0IC0gMSwgcmVjdC5mVG9wICsgMSwgcmVjdC5mUmlnaHQsIHJlY3QuZkJvdHRvbSAtIDEgfTsK
ICAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CisgICAgICAg
IGRpZERyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CiAgICAgfQogfQogCkBAIC01MzksNiAr
NTUwLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwYWludFNrUGFpbnQoY29uc3QgU2tS
ZWN0JiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2tQYWludCYgcGFpbnQpCiB7CiAgICAgbV9jYW52YXMtPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsK
KyAgICBkaWREcmF3UmVjdChyZWN0LCBwYWludCk7CiB9CiAKIGNvbnN0IFNrQml0bWFwKiBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpiaXRtYXAoKSBjb25zdApAQCAtNTk3LDQgKzYwOSwyOCBAQCB2b2lk
IFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQogICAgIG1fZ3B1Q29udGV4dCA9IGNvbnRleHQ7CiB9CiAKK3ZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6ZGlkRHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBT
a1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCkKK3sKKyAgICBpZiAobV90cmFj
a09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1JlY3QodGhpcywg
cmVjdCwgcGFpbnQsIGJpdG1hcCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZGlk
RHJhd1BhdGgoY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAg
ICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJh
d1BhdGgodGhpcywgcGF0aCwgcGFpbnQpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OmRpZERyYXdQb2ludHMoU2tDYW52YXM6OlBvaW50TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRzLCBj
b25zdCBTa1BvaW50IHBvaW50c1tdLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBpZiAo
bV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1BvaW50
cyh0aGlzLCBtb2RlLCBudW1Qb2ludHMsIHBvaW50cywgcGFpbnQpOworfQorCit2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OmRpZERyYXdCb3VuZGVkKGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3Qg
U2tQYWludCYgcGFpbnQpCit7CisgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAg
IG1fb3BhcXVlUmVnaW9uLmRpZERyYXdCb3VuZGVkKHRoaXMsIHJlY3QsIHBhaW50KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAppbmRleCA3ZGNmYmUy
ZTM3ZmMxYzQyN2RkZTdmYjNmNjAzMTFiZTI3NDk4MjEzLi5mZTNhYmI2ZjU2MDVlYTRkYmE2ODNj
MGM1OTY4ZDJhM2YwYTAyZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaApAQCAtMzMsNiArMzMs
NyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFi
bGUuaCIKKyNpbmNsdWRlICJPcGFxdWVSZWdpb25Ta2lhLmgiCiAKICNpbmNsdWRlICJTa0NhbnZh
cy5oIgogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKQEAgLTk4LDYgKzk5LDggQEAgcHVi
bGljOgogICAgIC8vIE5PVEU6IHxpbWFnZUJ1ZmZlcnwgbWF5IGJlIGRlbGV0ZWQgYmVmb3JlIHRo
ZSB8cmVzdG9yZXwgaXMgaW52b2tlZC4KICAgICB2b2lkIGJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFn
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwogICAgIHZvaWQgY2xpcFBh
dGhBbnRpQWxpYXNlZChjb25zdCBTa1BhdGgmKTsKKyAgICAvLyBJZiBub24tZW1wdHksIHRoZSBs
YXllciBpcyBjbGlwcGVkIHRvIHRoZSBiaXRtYXAuCisgICAgY29uc3QgU2tCaXRtYXAmIGNsaXBw
ZWRUb0ltYWdlKCkgY29uc3Q7CiAKICAgICAvLyBTZXRzIHVwIHRoZSBjb21tb24gZmxhZ3Mgb24g
YSBwYWludCBmb3IgYW50aWFsaWFzaW5nLCBlZmZlY3RzLCBldGMuCiAgICAgLy8gVGhpcyBpcyBp
bXBsaWNpdGx5IGNhbGxlZCBieSBzZXR1cFBhaW50RmlsbCBhbmQgc2V0dXBQYWludFN0cm9rZSwg
YnV0CkBAIC0xODcsNiArMTkwLDE4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGVmZXJyZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlZmVycmVkOyB9CiAgICAgdm9pZCBzZXREZWZlcnJlZChib29sIGRl
ZmVycmVkKSB7IG1fZGVmZXJyZWQgPSBkZWZlcnJlZDsgfQogCisgICAgdm9pZCBzZXRUcmFja09w
YXF1ZVJlZ2lvbihib29sIHRyYWNrKSB7IG1fdHJhY2tPcGFxdWVSZWdpb24gPSB0cmFjazsgfQor
CisgICAgLy8gVGhpcyB3aWxsIGJlIGFuIGVtcHR5IHJlZ2lvbiB1bmxlc3MgdHJhY2tpbmcgaXMg
ZW5hYmxlZC4KKyAgICBjb25zdCBPcGFxdWVSZWdpb25Ta2lhJiBvcGFxdWVSZWdpb24oKSBjb25z
dCB7IHJldHVybiBtX29wYXF1ZVJlZ2lvbjsgfQorCisgICAgLy8gQWZ0ZXIgZHJhd2luZyBpbiB0
aGUgY29udGV4dCdzIGNhbnZhcywgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBub3RpZnkgdGhlIGNv
bnRleHQgc28gaXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUgcmVnaW9uLgorICAgIHZvaWQgZGlkRHJh
d1JlY3QoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiA9IDAp
OworICAgIHZvaWQgZGlkRHJhd1BhdGgoY29uc3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOwor
ICAgIHZvaWQgZGlkRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRz
LCBjb25zdCBTa1BvaW50W10sIGNvbnN0IFNrUGFpbnQmKTsKKyAgICAvLyBGb3IgZHJhd2luZyBv
cGVyYXRpb25zIHRoYXQgZG8gbm90IGZpbGwgdGhlIGVudGlyZSByZWN0LgorICAgIHZvaWQgZGlk
RHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOworCiBwcml2YXRlOgog
ICAgIC8vIFVzZWQgd2hlbiByZXN0b3JpbmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4gaW1hZ2UgY2xp
cC4gT25seSBzaG93cyB0aGUgcGl4ZWxzIGluCiAgICAgLy8gbV9jYW52YXMgdGhhdCBhcmUgYWxz
byBpbiBpbWFnZUJ1ZmZlci4KQEAgLTIxMCw2ICsyMjUsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBt
U3RhdGVTdGFjay5iYWNrKCkuCiAgICAgU3RhdGUqIG1fc3RhdGU7CiAKKyAgICAvLyBUcmFja3Mg
dGhlIHJlZ2lvbiBwYWludGVkIG9wYXF1ZSB2aWEgdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICBP
cGFxdWVSZWdpb25Ta2lhIG1fb3BhcXVlUmVnaW9uOworICAgIGJvb2wgbV90cmFja09wYXF1ZVJl
Z2lvbjsKKwogICAgIC8vIFN0b3JlcyBpbWFnZSBzaXplcyBmb3IgYSBoaW50IHRvIGNvbXB1dGUg
aW1hZ2UgcmVzYW1wbGluZyBtb2Rlcy4KICAgICAvLyBWYWx1ZXMgYXJlIHVzZWQgaW4gSW1hZ2VT
a2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGNhOGZiMzlkMjRkOWZkMWMyYTZkODZiZDczZTc0
NTEzODUxYWIxZjkuLjRjMGMwMjNlMWY3ZDk3ZDE3OWQ1MDQ2MTgyN2M5ODJmNjgxZDVlYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTE5LDYgKzExOSw3IEBACiAgICAgICAg
ICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0lt
YWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Bs
YXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgIH1dLAogICAgICAgICAgICAgWydPUz09IndpbiInLCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBmZjUzOTAyM2Q4NGMyNGI4YTgyMzBmMjZlYThjY2RiNzBkN2I3NDQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcApAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSAi
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgeworCisjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEsIGIpIFwKKyAgICBFWFBFQ1Rf
RVEoYS54KCksIGIueCgpKTsgXAorICAgIEVYUEVDVF9FUShhLm1heFgoKSwgYi5tYXhYKCkpOyBc
CisgICAgRVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5tYXhZKCks
IGIubWF4WSgpKTsKKworI2RlZmluZSBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgb3BhcXVl
UmVjdCkgXAoreyBcCisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrZXIoYml0bWFwKTsgXAorICAg
IGZvciAoaW50IHkgPSBvcGFxdWVSZWN0LnkoKTsgeSA8IG9wYXF1ZVJlY3QubWF4WSgpOyArK3kp
IFwKKyAgICAgICAgZm9yIChpbnQgeCA9IG9wYXF1ZVJlY3QueCgpOyB4IDwgb3BhcXVlUmVjdC5t
YXhYKCk7ICsreCkgeyBcCisgICAgICAgICAgICBpbnQgYWxwaGEgPSAqYml0bWFwLmdldEFkZHIz
Mih4LCB5KSA+PiAyNDsgXAorICAgICAgICAgICAgRVhQRUNUX0VRKDI1NSwgYWxwaGEpOyBcCisg
ICAgICAgIH0gXAorfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1
ZVRlc3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4
ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBs
YXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4w
Zik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBjb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgxMCwgMTAsIDkwLCA5MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDk5LCAxMywgMTAsIDkwKSwgb3Bh
cXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVQbHVzTGlnaHRlcik7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdCg5OSwgMTMsIDEwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAs
IDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVn
aW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOTksIDEz
LCAxMCwgOTApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlSW4p
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA4OSwgOTApLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
Yml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
Y29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOCwgOCwgMywgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU91dCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgxMSwgMTAsIDg4LCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgzMCwgMzAsIDI5MCwgMjkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3Np
dGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgMjkwLCAy
OTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVD
VF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoNDAsIDIwLCAyOTAsIDUw
KSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgMjkwLCAyOTApLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAzOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgMzAsIDI5MCwgMjkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEwLCAxMCwgMzkwLCA1MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgMjkwLCAyOTApLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAzOTAsIDUwKSwgb3BhcXVlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCAxMCwgMjkwLCAzMTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LCB0cmFja09wYXF1ZUpvaW5UZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBi
aXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgNDAwLCA0MDApOwor
ICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOwor
CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAg
cGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEu
MGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYs
IDAuMGYpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMjAsIDIwLCAxMCwgMTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCAxMCwgMTApLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgLy8gRG9l
c24ndCBqb2luCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMzEsIDIwLCAxMCwgMTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCAxMCwgMTApLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgLy8gRG9l
cyBqb2luCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMzAsIDIwLCAxMCwgMTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCAyMCwgMTApLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgLy8gRG9lc24n
dCBqb2luCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMjAsIDMxLCAyMCwgMTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCAyMCwgMTApLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgLy8gRG9lcyBq
b2luCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMjAsIDMwLCAyMCwgMTApLCBvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCAyMCwgMjApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0
Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgLy8gRG9lc24ndCBq
b2luCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoOSwgMjAsIDEwLCAyMCksIG9wYXF1
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgyMCwgMjAsIDIwLCAyMCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRm
b3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICAvLyBEb2VzIGpvaW4K
KyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMjAsIDEwLCAyMCksIG9wYXF1ZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgxMCwgMjAsIDMwLCAyMCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICAvLyBEb2Vzbid0IGpvaW4K
KyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgOSwgMzAsIDEwKSwgb3BhcXVlLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEwLCAyMCwgMzAsIDIwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIC8vIERvZXMgam9pbgorICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMzAsIDEwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCAxMCwgMzAsIDMwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRT
a2lhVGVzdCwgdHJhY2tPcGFxdWVMaW5lVGVzdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7Cisg
ICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDIwMCwgMjAw
KTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFw
KTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOwor
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1
ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAw
LjBmLCAwLjBmKTsKKworICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKyAg
ICBjb250ZXh0LnNldE1pdGVyTGltaXQoMCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25l
c3MoNCk7CisgICAgY29udGV4dC5zZXRMaW5lQ2FwKFNxdWFyZUNhcCk7CisgICAgY29udGV4dC5z
ZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlU291cmNlT3Zlcik7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3Vy
Y2VJbik7CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBv
aW50KDAsIDApLCBJbnRQb2ludCgxMDAsIDApKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRl
eHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9p
bnQoMTAwLCAxMCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Y29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCAxMCksIEludFBvaW50KDEwMCwgMTApKTsKKyAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMywg
OTAsIDg3KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBF
WFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUo
SW50UG9pbnQoMCwgMTEpLCBJbnRQb2ludCgxMDAsIDExKSk7CisgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTQsIDkwLCA4NiksIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRD
SChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAg
ICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAx
MCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZVNvdXJjZUluKTsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0U3Ry
b2tlQ29sb3IoYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xp
bmUoSW50UG9pbnQoMCwgMCksIEludFBvaW50KDEwMCwgMCkpOworICAgIGNvbnRleHQucmVzdG9y
ZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFU
Q0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisg
ICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAgIGNvbnRleHQuc2F2ZSgp
OworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDEwKSwgSW50UG9pbnQoMTAwLCAx
MCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1
ZSk7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQo
MCwgMTApLCBJbnRQb2ludCgxMDAsIDEwKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTMsIDkwLCA4NyksIHBsYXRmb3JtQ29udGV4dC5v
cGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAs
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0
LnNhdmUoKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGFscGhhLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAsIDExKSwgSW50UG9pbnQo
MTAwLCAxMSkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMTAsIDE0LCA5MCwgODYpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LCB0cmFja09wYXF1ZVBhdGhUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBi
aXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAwLCAyMDApOwor
ICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOwor
CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAg
cGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEu
MGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYs
IDAuMGYpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFw
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4
dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdCgx
KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyg1KTsKKyAgICBjb250ZXh0LnNldExp
bmVDYXAoU3F1YXJlQ2FwKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tl
KTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7
CisKKyAgICBQYXRoIHBhdGg7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAwKSk7Cisg
ICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDApKTsKKyAgICBjb250ZXh0LmZpbGxQ
YXRoKHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCAxMCkp
OworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoMTAwLCAxMykpOworICAgIGNvbnRleHQu
ZmlsbFBhdGgocGF0aCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAsIDkwLCA5
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgcGF0aC5jbGVhcigpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYWxw
aGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwg
MTApKTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KDEwMCwgMTMpKTsKKyAgICBjb250
ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEzLCA5
MCwgODcpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVY
UEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIHBhdGguY2xlYXIoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50
KDAsIDE0KSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCgxMDAsIDEwKSk7CisgICAg
Y29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAx
NCwgOTAsIDg2KSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKyAgICBwYXRoLmNsZWFyKCk7Cit9CisKK1RFU1QoUGxhdGZvcm1Db250
ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlSW1hZ2VUZXN0KQoreworICAgIFNrQml0bWFwIGJpdG1h
cDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMjAw
LCAyMDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhi
aXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZh
cyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Ig
b3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAu
MGYsIDAuMGYsIDAuMGYpOworCisgICAgU2tCaXRtYXAgZHJhd0JpdG1hcDsKKyAgICBkcmF3Qml0
bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDEwLCAxMCk7CisgICAg
ZHJhd0JpdG1hcC5hbGxvY1BpeGVscygpOworCisgICAgZHJhd0JpdG1hcC5zZXRJc09wYXF1ZSh0
cnVlKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGRyYXdCaXRtYXAuaGVpZ2h0KCk7ICsreSkK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkcmF3Qml0bWFwLndpZHRoKCk7ICsreCkKKyAg
ICAgICAgICAgICpkcmF3Qml0bWFwLmdldEFkZHIzMih4LCB5KSA9IDB4RkZGRkZGRkY7CisgICAg
UmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBvcGFxdWVJbWFnZSA9IEJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoZHJhd0JpdG1hcCwgdHJ1ZSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9wYXF1ZUltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKworICAgIGRyYXdC
aXRtYXAuc2V0SXNPcGFxdWUoZmFsc2UpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZHJhd0Jp
dG1hcC5oZWlnaHQoKTsgKyt5KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGRyYXdCaXRt
YXAud2lkdGgoKTsgKyt4KQorICAgICAgICAgICAgKmRyYXdCaXRtYXAuZ2V0QWRkcjMyKHgsIHkp
ID0gMHgwMDAwMDAwMDsKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGFs
cGhhSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKGRyYXdCaXRtYXAs
IHRydWUpOworICAgIEVYUEVDVF9UUlVFKGFscGhhSW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhh
KCkpOworCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5k
cmF3SW1hZ2Uob3BhcXVlSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50
KDAsIDApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxh
dGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxT
X01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBJbnRQb2ludCgwLCAwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMTAs
IDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAg
RVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24o
KS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoNSwgNSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhh
SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDUsIDUpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9w
YXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQu
ZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2lu
dCgxMCwgMTApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgp
KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBJbnRQb2ludCgxMCwgMTApKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEw
LCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsK
KyAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZHJhd0ltYWdlKGFscGhhSW1hZ2UuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDIwLCAxMCksIENvbXBvc2l0ZVNvdXJj
ZUluKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAyMCwgOTAsIDgwKSwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01B
VENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKwor
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuc2V0QWxwaGEoMC41KTsKKyAgICBjb250
ZXh0LmRyYXdJbWFnZShvcGFxdWVJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50
UG9pbnQoMjUsIDE1KSwgQ29tcG9zaXRlU291cmNlSW4pOworICAgIGNvbnRleHQucmVzdG9yZSgp
OworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDI1LCA5MCwgNzUpLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0go
Yml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAg
Y29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAsIDEwLCA5MCwgOTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3SW1hZ2UoYWxw
aGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoMTAsIDIwKSwgQ29t
cG9zaXRlU291cmNlSW4pOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDEwLCA4MCwg
OTApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVD
VF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworCisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zZXRBbHBoYSgwLjUp
OworICAgIGNvbnRleHQuZHJhd0ltYWdlKG9wYXF1ZUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBJbnRQb2ludCgxNSwgMjUpLCBDb21wb3NpdGVTb3VyY2VJbik7CisgICAgY29udGV4
dC5yZXN0b3JlKCk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyNSwgMTAsIDc1LCA5MCks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7Cit9CisKK1RFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlT3ZhbFRl
c3QpCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRt
YXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAyMDAsIDIwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxz
KCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRT
a2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJh
Y2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRm
b3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7
CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9u
KCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworCisgICAgY29udGV4dC5kcmF3RWxsaXBz
ZShJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCAwLCAwLCAwKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKKworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwg
OTAsIDkwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAxMCwgOTAsIDkwKSwgcGxhdGZvcm1D
b250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENI
KGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKworICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKKworICAg
IGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3RWxs
aXBzZShJbnRSZWN0KDEwLCAxMCwgNTAsIDMwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgxMCwgMTAsIDkwLCA5MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3Qo
KSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhbHBoYSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEw
LCAxMCwgMzAsIDUwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MCwgMTAsIDYwLCA5
MCksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNU
X1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisKKyAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29u
dGV4dC5kcmF3RWxsaXBzZShJbnRSZWN0KDEwLCAxMCwgNTAsIDMwKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCg0MCwgNDEsIDYwLCA1OSksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdp
b24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3Jt
Q29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3RWxsaXBz
ZShJbnRSZWN0KDIwLCAxMCwgMzAsIDUwKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1
MSwgNDEsIDQ5LCA1OSksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7
CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVS
ZWdpb24oKS5hc1JlY3QoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>