<?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>111144</bug_id>
          
          <creation_ts>2013-02-28 22:51:18 -0800</creation_ts>
          <short_desc>GIFImageReader to count frames and decode in one pass</short_desc>
          <delta_ts>2013-03-19 16:10:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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>98098</blocked>
    
    <blocked>111395</blocked>
    
    <blocked>112099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>jschuh</cc>
    
    <cc>pkasting</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>844847</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-28 22:51:18 -0800</bug_when>
    <thetext>This means that GIFImageReader can parse (count frame) and decode a GIF file in one pass. The code currently do frame counting and decoding separately. The frame counting is particularly bad and has O(n^2) behavior on a slow network. By doing parse plus decode in one pass we can efficiently decode a GIF file. This also enables random frame seeking and deferred decoding for GIF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851848</commentid>
    <comment_count>1</comment_count>
      <attachid>192359</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-09 17:47:17 -0800</bug_when>
    <thetext>Created attachment 192359
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851849</commentid>
    <comment_count>2</comment_count>
      <attachid>192360</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-09 17:51:54 -0800</bug_when>
    <thetext>Created attachment 192360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851852</commentid>
    <comment_count>3</comment_count>
      <attachid>192361</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-09 17:57:57 -0800</bug_when>
    <thetext>Created attachment 192361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851855</commentid>
    <comment_count>4</comment_count>
      <attachid>192361</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-09 18:18:05 -0800</bug_when>
    <thetext>Comment on attachment 192361
Patch

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

This patch might be hard to review. I&apos;ve added inline comments to the review tool.

Done exhausting testing locally to cover a lot of corner cases, in addition to bit-exact as before I ensure states (e.g. loop count, frame count, frame status) remains the same.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-380
&gt; -            // m_bytesToConsume is the current component size because it hasn&apos;t been updated.

This and line 387 don&apos;t do prepare / decode any more. Save the information for later decoding step.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-543
&gt; -            if (m_frameContext) {

This blob of code remains the same, just always saved to a new frame context.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-669
&gt; -            if (query == GIFImageDecoder::GIFFullQuery &amp;&amp; !m_frameContext)

This blob of code remains the same as before. New code saves frame information regardless of query and frameContext is always valid so we can get rid of one scope of {}.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-755
&gt; -                if (m_frameContext &amp;&amp; !m_frameContext-&gt;rowsRemaining) {

This blob code doesn&apos;t make sense, removed. Also note that rowsRemaining is irrelevant here, decoding state is moved to GIFLZWContext and done in a later time,

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-760
&gt; -            } else {

This blob of code is removed, notification of frameComplete() is moved to decode() above.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:784
&gt; +    if (m_frames.isEmpty() || m_frames.last()-&gt;isComplete())

This new method is to ensure we don&apos;t add a new frame if the current frame is not complete yet.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:87
&gt; +    GIFLZWContext(WebCore::GIFImageDecoder* client, GIFFrameContext* frameContext)

Reshuffling of some members and moved GIFLZWContext to the top of file. There&apos;s basically no new members defined in GIFLZWContext.

The ownership is now GIFImageReader owns GIFFrameContext owns GIFLZWContext. Each GIFFrameContext can be independently decoded.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:137
&gt; +struct GIFLZWBlock {

New data structure for each individual LZW block.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:164
&gt; +    int datasize;

This readonly state is moved from GIFLZWContext to here. The concept is that GIFLZWContext is a state machine, while GIFFrameContext is mostly readonly.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:211
&gt; +    size_t m_currentLzwBlock;

These are new member for keeping tracking of decoding states.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:279
&gt; +    bool isFirstFrame() const

Helper method to detect if the current frame is the first frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851871</commentid>
    <comment_count>5</comment_count>
      <attachid>192361</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-09 20:59:13 -0800</bug_when>
    <thetext>Comment on attachment 192361
Patch

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

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:101
&gt; +bool GIFLZWContext::outputRow()

I moved this method from GIFImageReader to GIFLZWContext. I also moved some of the output state machine into this class. There&apos;s no change in logic in this method. Note that now everything m_frameContext-&gt; are all readonly. Cleanup will come in a later patch.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:201
&gt; +bool GIFLZWContext::doLZW(const unsigned char* block, size_t bytesInBlock)

This method is now moved from GIFImageReader to GIFLZWContext. Again no major change in logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852890</commentid>
    <comment_count>6</comment_count>
      <attachid>192361</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-03-11 16:59:51 -0700</bug_when>
    <thetext>Comment on attachment 192361
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        This change fixed the performance problem of decoding GIF files when

Nit: fixed -&gt; fixes.  You might want to refer here to the existing description of the particular performance problem that you&apos;re removing from GIFImageDecoder::frameCount().

&gt; Source/WebCore/ChangeLog:24
&gt; +        implementaiton. However this algorithm does not perform any decoding

Nit: implementaiton -&gt; implementation

&gt; Source/WebCore/ChangeLog:29
&gt; +        implementation look through all frame information saved and decode

Nit: look -&gt; looks, decode -&gt; decodes

&gt; Source/WebCore/ChangeLog:32
&gt; +        Because of the separate of parse and decode, each frame can be decoded

Nit: separate of parse and decode -&gt; separation of parsing and decoding

&gt; Source/WebCore/ChangeLog:33
&gt; +        separately. This paves the way to support seeking in GIF file.

Nit: file -&gt; files

&gt; Source/WebCore/ChangeLog:38
&gt; +        Exhaustive testing is done locally with a corpus of 60k images.

Nit: is -&gt; was

&gt; Source/WebCore/ChangeLog:40
&gt; +        The results was bit-exact as the previous implementation with only

Nit: was bit-exact as -&gt; were bit-identical when compared to

&gt; Source/WebCore/ChangeLog:43
&gt; +        other image viewers, e.g. Preview on Mac.

I&apos;d be interested in knowing what kind of bustage, specifically, is decoded differently.

&gt; Source/WebCore/ChangeLog:45
&gt; +        These were also no crashing when decoding the entire corpus.

Nit: These were -&gt; There was

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:111
&gt; +    else if (m_reader &amp;&amp; (!m_reader-&gt;imagesCount() || m_reader-&gt;parseFailed()))

Nit: I&apos;d just combine this with the previous conditional with ||

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:327
&gt; +    const int oldSize = m_frameBufferCache.size();

Nit: size_t

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:246
&gt; +                return false;

Does returning false here always cause us to set the decode failed bit?  It&apos;s not instantly obvious, especially the way decoding responsibility now seems to use more layers than before.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:325
&gt; +    // Check for no remaining rows can handle bad GIF data with extra blocks.

I can&apos;t parse this.  Does it mean &quot;Some bad GIFs have extra blocks beyond the last row, which we don&apos;t want to decode.&quot;?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:336
&gt; +    if (m_currentLzwBlock == m_lzwBlocks.size() || !m_lzwContext-&gt;hasRemainingRows()) {

Doesn&apos;t this have to be true in order for control flow to reach here?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:347
&gt; +    // Try to be tolerant and don&apos;t report parsing errors but we will not parse again.

Why is important to be tolerant here?  Why not just fail entirely, which is what I think the old code did?  Wouldn&apos;t this remove the &quot;parse failed&quot; variable and method?  Is this the source of the behavior change?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:354
&gt; +    while (m_currentDecodingFrame &lt; m_frames.size() &amp;&amp; m_currentDecodingFrame &lt; haltAtFrame) {

Nit: Simpler:

while (m_currentDecodingFrame &lt; std::min(m_frames.size(), haltAtFrame)) {

This also suggests that haltAtFrame (and other frame count numbers anywhere else) should perhaps be a size_t?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:359
&gt; +        if (!success)

Just call decode() directly in this statement and eliminate the temp.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:371
&gt; +    // All frames decoded.

Nit: Comment adds nothing

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:395
&gt; +        const size_t currentComponentSize = m_bytesToConsume;

This second temp doesn&apos;t seem necessary; can&apos;t we just call addLzwBlock() with m_bytesToConsume, as the old doLZW() call used to do?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:567
&gt; +            if (*currentComponent &amp; 0x1) {
&gt; +                currentFrame-&gt;tpixel = currentComponent[3];
&gt; +                currentFrame-&gt;isTransparent = true;
&gt; +            } else {
&gt; +                currentFrame-&gt;isTransparent = false;
&gt; +                // ignoring gfx control extension
&gt;              }

Nit: Simpler, and more accurate comment.  You may need a &quot;!!&quot; or &quot;static_cast&lt;bool&gt;()&quot; if the first line produces a compiler warning.  Even with that, the code is not only shorter, but it reads more clearly to me, because the conditional is testing a named variable whose meaning is obvious.

currentFrame-&gt;isTransparent = *currentComponent &amp; 0x1;
if (currentFrame-&gt;isTransparent)
    currentFrame-&gt;tpixel = currentComponent[3];

// We ignore the &quot;user input&quot; bit.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:571
&gt; +            currentFrame-&gt;disposalMethod = (WebCore::ImageFrame::FrameDisposalMethod)disposalMethod;

Nit: Let&apos;s switch this to a C++-style cast

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:574
&gt; +            // Some specs say 3rd bit (value 4), other specs say value 3
&gt; +            // Let&apos;s choose 3 (the more popular)

Better comment:

// Some specs say that disposal method 3 is &quot;overwrite previous&quot;, others that setting the third bit of the field (i.e. method 4) is.  We map both to the same value.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:697
&gt; +            if (currentComponent[8] &amp; 0x40)
&gt; +                currentFrame-&gt;interlaced = true;
&gt; +            else
&gt; +                currentFrame-&gt;interlaced = false;

Nit: Simpler.  Same comment about compiler warning applies.

currentFrame-&gt;interlaced = currentComponent[8] &amp; 0x40;

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:708
&gt; +                // Overlaying interlaced, transparent GIFs over
&gt; +                // existing image data using the Haeberli display hack
&gt; +                // requires saving the underlying image in order to
&gt; +                // avoid jaggies at the transparency edges. We are
&gt; +                // unprepared to deal with that, so don&apos;t display such
&gt; +                // images progressively

Nit: If you hoist this comment to live above the conditional, the code becomes:

currentFrame-&gt;progressiveDisplay = isFirstFrame();

I wonder if the comment implies that we could expand this to cover non-transparent frames too, or something.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:716
&gt; +            // bits per pixel is currentComponent[8]&amp;0x07
&gt; +
&gt;              // has a local colormap?
&gt;              if (currentComponent[8] &amp; 0x80) {
&gt;                  int numColors = 2 &lt;&lt; (currentComponent[8] &amp; 0x7);

Nit: How about this.  (Compiler warning note, again)

currentFrame-&gt;isLocalColormapDefined = currentComponent[8] &amp; 0x80;
if (currentFrame-&gt;isLocalColormapDefined) {
    // The three low-order bits of currentComponent[8] specify the bits per pixel.
    int numColors = 2 &lt;&lt; (currentComponent[8] &amp; 0x7);
...

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:768
&gt;              break;

Nit: I&apos;d make this return false

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:784
&gt;&gt; +    if (m_frames.isEmpty() || m_frames.last()-&gt;isComplete())
&gt; 
&gt; This new method is to ensure we don&apos;t add a new frame if the current frame is not complete yet.

OK... I&apos;m a little fuzzy on this, the two callsites look kind of like they unconditionally added a frame, but I&apos;m not really sure.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:279
&gt;&gt; +    bool isFirstFrame() const
&gt; 
&gt; Helper method to detect if the current frame is the first frame.

Maybe it should be named &quot;decodingFirstFrame()&quot;?  &quot;currentFrameIsFirstFrame()&quot;?

&gt; Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp:178
&gt; +    // There are two frames scanned because we have not encountered  a decoding

Nit: Extra space</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853173</commentid>
    <comment_count>7</comment_count>
      <attachid>192361</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-12 01:18:21 -0700</bug_when>
    <thetext>Comment on attachment 192361
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt; +        This change fixed the performance problem of decoding GIF files when
&gt; 
&gt; Nit: fixed -&gt; fixes.  You might want to refer here to the existing description of the particular performance problem that you&apos;re removing from GIFImageDecoder::frameCount().

Done.

&gt;&gt; Source/WebCore/ChangeLog:24
&gt;&gt; +        implementaiton. However this algorithm does not perform any decoding
&gt; 
&gt; Nit: implementaiton -&gt; implementation

Done.

&gt;&gt; Source/WebCore/ChangeLog:29
&gt;&gt; +        implementation look through all frame information saved and decode
&gt; 
&gt; Nit: look -&gt; looks, decode -&gt; decodes

Done.

&gt;&gt; Source/WebCore/ChangeLog:32
&gt;&gt; +        Because of the separate of parse and decode, each frame can be decoded
&gt; 
&gt; Nit: separate of parse and decode -&gt; separation of parsing and decoding

Done.

&gt;&gt; Source/WebCore/ChangeLog:33
&gt;&gt; +        separately. This paves the way to support seeking in GIF file.
&gt; 
&gt; Nit: file -&gt; files

Done.

&gt;&gt; Source/WebCore/ChangeLog:38
&gt;&gt; +        Exhaustive testing is done locally with a corpus of 60k images.
&gt; 
&gt; Nit: is -&gt; was

Done.

&gt;&gt; Source/WebCore/ChangeLog:43
&gt;&gt; +        other image viewers, e.g. Preview on Mac.
&gt; 
&gt; I&apos;d be interested in knowing what kind of bustage, specifically, is decoded differently.

The difference here is because of this: New code adds a new GIFFrameContext for GIFControlExtension and GIFImageHeader and those two files stop right between these two states, result in an empty frame. Old code doesn&apos;t add a new frame for GIFControlExtension but only at GIFImageHeader.

To solve this difference I can check if image header is defined before counting as a new frame. However no matter I add a new frame for GIFControlExtension or GIFImageHeader, both will result in an empty frame if the file truncates before a LZW block appear. See the fix in setHeaderDefined() and imagesCount().

&gt;&gt; Source/WebCore/ChangeLog:45
&gt;&gt; +        These were also no crashing when decoding the entire corpus.
&gt; 
&gt; Nit: These were -&gt; There was

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:111
&gt;&gt; +    else if (m_reader &amp;&amp; (!m_reader-&gt;imagesCount() || m_reader-&gt;parseFailed()))
&gt; 
&gt; Nit: I&apos;d just combine this with the previous conditional with ||

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:327
&gt;&gt; +    const int oldSize = m_frameBufferCache.size();
&gt; 
&gt; Nit: size_t

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:246
&gt;&gt; +                return false;
&gt; 
&gt; Does returning false here always cause us to set the decode failed bit?  It&apos;s not instantly obvious, especially the way decoding responsibility now seems to use more layers than before.

Yes, return false here always results in m_client-&gt;setFailed() being called. I&apos;ll comments to clarify.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:325
&gt;&gt; +    // Check for no remaining rows can handle bad GIF data with extra blocks.
&gt; 
&gt; I can&apos;t parse this.  Does it mean &quot;Some bad GIFs have extra blocks beyond the last row, which we don&apos;t want to decode.&quot;?

Right. Updated comments.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:336
&gt;&gt; +    if (m_currentLzwBlock == m_lzwBlocks.size() || !m_lzwContext-&gt;hasRemainingRows()) {
&gt; 
&gt; Doesn&apos;t this have to be true in order for control flow to reach here?

You&apos;re right. This is actually a bug. I&apos;ve added a unit test for this. The bug was that it reset the LZW context when progressively decoding the file, as the decoder processes more blocks. The unit test uncovers another problem that LZW decoding is preformed before |datasize| and other fields properly defined. They are fixed in the latest patch.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:347
&gt;&gt; +    // Try to be tolerant and don&apos;t report parsing errors but we will not parse again.
&gt; 
&gt; Why is important to be tolerant here?  Why not just fail entirely, which is what I think the old code did?  Wouldn&apos;t this remove the &quot;parse failed&quot; variable and method?  Is this the source of the behavior change?

Added comments for this. Previous implementation uses a separate GIFImageReader for counting frames, which means counting can fail but decoding cannot. The code here is to match previous implementation.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:354
&gt;&gt; +    while (m_currentDecodingFrame &lt; m_frames.size() &amp;&amp; m_currentDecodingFrame &lt; haltAtFrame) {
&gt; 
&gt; Nit: Simpler:
&gt; 
&gt; while (m_currentDecodingFrame &lt; std::min(m_frames.size(), haltAtFrame)) {
&gt; 
&gt; This also suggests that haltAtFrame (and other frame count numbers anywhere else) should perhaps be a size_t?

Added a FIXME for this. Try not to change this because this involves changing GIFImageDecoder as well.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:359
&gt;&gt; +        if (!success)
&gt; 
&gt; Just call decode() directly in this statement and eliminate the temp.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:371
&gt;&gt; +    // All frames decoded.
&gt; 
&gt; Nit: Comment adds nothing

Removed.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:395
&gt;&gt; +        const size_t currentComponentSize = m_bytesToConsume;
&gt; 
&gt; This second temp doesn&apos;t seem necessary; can&apos;t we just call addLzwBlock() with m_bytesToConsume, as the old doLZW() call used to do?

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:567
&gt;&gt;              }
&gt; 
&gt; Nit: Simpler, and more accurate comment.  You may need a &quot;!!&quot; or &quot;static_cast&lt;bool&gt;()&quot; if the first line produces a compiler warning.  Even with that, the code is not only shorter, but it reads more clearly to me, because the conditional is testing a named variable whose meaning is obvious.
&gt; 
&gt; currentFrame-&gt;isTransparent = *currentComponent &amp; 0x1;
&gt; if (currentFrame-&gt;isTransparent)
&gt;     currentFrame-&gt;tpixel = currentComponent[3];
&gt; 
&gt; // We ignore the &quot;user input&quot; bit.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:571
&gt;&gt; +            currentFrame-&gt;disposalMethod = (WebCore::ImageFrame::FrameDisposalMethod)disposalMethod;
&gt; 
&gt; Nit: Let&apos;s switch this to a C++-style cast

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:574
&gt;&gt; +            // Let&apos;s choose 3 (the more popular)
&gt; 
&gt; Better comment:
&gt; 
&gt; // Some specs say that disposal method 3 is &quot;overwrite previous&quot;, others that setting the third bit of the field (i.e. method 4) is.  We map both to the same value.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:697
&gt;&gt; +                currentFrame-&gt;interlaced = false;
&gt; 
&gt; Nit: Simpler.  Same comment about compiler warning applies.
&gt; 
&gt; currentFrame-&gt;interlaced = currentComponent[8] &amp; 0x40;

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:708
&gt;&gt; +                // images progressively
&gt; 
&gt; Nit: If you hoist this comment to live above the conditional, the code becomes:
&gt; 
&gt; currentFrame-&gt;progressiveDisplay = isFirstFrame();
&gt; 
&gt; I wonder if the comment implies that we could expand this to cover non-transparent frames too, or something.

Done. Added a FIXME for the case you mentioned.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:716
&gt;&gt;                  int numColors = 2 &lt;&lt; (currentComponent[8] &amp; 0x7);
&gt; 
&gt; Nit: How about this.  (Compiler warning note, again)
&gt; 
&gt; currentFrame-&gt;isLocalColormapDefined = currentComponent[8] &amp; 0x80;
&gt; if (currentFrame-&gt;isLocalColormapDefined) {
&gt;     // The three low-order bits of currentComponent[8] specify the bits per pixel.
&gt;     int numColors = 2 &lt;&lt; (currentComponent[8] &amp; 0x7);
&gt; ...

currentFrame-&gt;isLocalColormapDefined actually has an additional meaning that the entire local colormap is received so we can&apos;t set it early (See line 742). Changing this to accomodate comments.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:768
&gt;&gt;              break;
&gt; 
&gt; Nit: I&apos;d make this return false

Done.

&gt;&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:784
&gt;&gt;&gt; +    if (m_frames.isEmpty() || m_frames.last()-&gt;isComplete())
&gt;&gt; 
&gt;&gt; This new method is to ensure we don&apos;t add a new frame if the current frame is not complete yet.
&gt; 
&gt; OK... I&apos;m a little fuzzy on this, the two callsites look kind of like they unconditionally added a frame, but I&apos;m not really sure.

There are two control blocks that can adda a new frame, which is not desirable and avoided here. For the case if frame list empty we should always add a new frame.

The second condition is tricky: in the stream, either GIFControlExtension or GIFImageHeader can come first, but we don&apos;t want to add a new frame twice. We know that there will only be one &quot;data complete&quot; signal for each frame, and we only want to start a new frame if the previous frame is data complete.

&gt;&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:279
&gt;&gt;&gt; +    bool isFirstFrame() const
&gt;&gt; 
&gt;&gt; Helper method to detect if the current frame is the first frame.
&gt; 
&gt; Maybe it should be named &quot;decodingFirstFrame()&quot;?  &quot;currentFrameIsFirstFrame()&quot;?

Done.

&gt;&gt; Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp:178
&gt;&gt; +    // There are two frames scanned because we have not encountered  a decoding
&gt; 
&gt; Nit: Extra space

Done. There&apos;s no need to update these two tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853188</commentid>
    <comment_count>8</comment_count>
      <attachid>192666</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-12 01:33:55 -0700</bug_when>
    <thetext>Created attachment 192666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853191</commentid>
    <comment_count>9</comment_count>
      <attachid>192666</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-12 01:36:43 -0700</bug_when>
    <thetext>Comment on attachment 192666
Patch

Thanks for Peter for the thorough review.

Major changes in the last patch:
* Fixed the problem of empty last frame. No more differences in the 60k images corpus.
* Fixed two bugs uncovered by your review. Added a unit test to verify.
* Fixed the 3 bytes out of bound read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853508</commentid>
    <comment_count>10</comment_count>
      <attachid>192666</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-03-12 08:48:18 -0700</bug_when>
    <thetext>Comment on attachment 192666
Patch

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

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:83
&gt; +// FIXME: Make this a class and hide private members.

Looks like a class to me.  Is this already done?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:98
&gt; +        , irow(0)

Unless I&apos;m missing something, it seems unfortunate to mix m_-prefixed members and non-prefixed.

Perhaps you could fix this in a renaming-only patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853509</commentid>
    <comment_count>11</comment_count>
      <attachid>192361</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-03-12 08:48:38 -0700</bug_when>
    <thetext>Comment on attachment 192361
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:101
&gt;&gt; +bool GIFLZWContext::outputRow()
&gt; 
&gt; I moved this method from GIFImageReader to GIFLZWContext. I also moved some of the output state machine into this class. There&apos;s no change in logic in this method. Note that now everything m_frameContext-&gt; are all readonly. Cleanup will come in a later patch.

Could the member var be made pointer-to-const then?  (I have no idea, I&apos;m just guessing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853680</commentid>
    <comment_count>12</comment_count>
      <attachid>192666</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-12 11:54:05 -0700</bug_when>
    <thetext>Comment on attachment 192666
Patch

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

Fixed several comments by Stephen. Changed GIFFrameContext* to const GFC*.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:83
&gt;&gt; +// FIXME: Make this a class and hide private members.
&gt; 
&gt; Looks like a class to me.  Is this already done?

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:98
&gt;&gt; +        , irow(0)
&gt; 
&gt; Unless I&apos;m missing something, it seems unfortunate to mix m_-prefixed members and non-prefixed.
&gt; 
&gt; Perhaps you could fix this in a renaming-only patch.

Yes I plan to fix in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853681</commentid>
    <comment_count>13</comment_count>
      <attachid>192779</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-12 11:54:37 -0700</bug_when>
    <thetext>Created attachment 192779
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854782</commentid>
    <comment_count>14</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-13 16:29:22 -0700</bug_when>
    <thetext>Review ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854961</commentid>
    <comment_count>15</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-03-13 22:18:23 -0700</bug_when>
    <thetext>Sorry, I have been flooded.  I will try to get to this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854979</commentid>
    <comment_count>16</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-13 23:12:36 -0700</bug_when>
    <thetext>No problem. Thanks for taking your time to look at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855623</commentid>
    <comment_count>17</comment_count>
      <attachid>192779</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-03-14 18:24:08 -0700</bug_when>
    <thetext>Comment on attachment 192779
Patch

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

Most stuff is nitpicks, the integer overflow worry is the biggest concern I have.

&gt; Source/WebCore/ChangeLog:16
&gt; +        it is received very slowly. Existing implementation creates a new

Nit: it is -&gt; they are

&gt; Source/WebCore/ChangeLog:17
&gt; +        GIFImageReader for counting frames for every byte that comes in, this

Nit: Is this accurate?  Shouldn&apos;t &quot;for every byte that comes in&quot; read &quot;every time it is notified that new data has been received&quot;?

&gt; Source/WebKit/chromium/ChangeLog:112
&gt; +        that progressive decoding produces the same results as a truncated file.

Nit: This is unclear, how about &quot;...verify that continually re-decoding an image one additional byte at a time produces the same outputs as repeatedly decoding (with brand new decoders) truncated versions of the image that are one byte longer each time.&quot;

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:79
&gt; +    decode(std::numeric_limits&lt;unsigned&gt;::max(), GIFFrameCountQuery);

Nit: Personally, I&apos;d probably just pass static_cast&lt;unsigned&gt;(-1), which does the same thing in a slightly less verbose way and avoids the need for the #include... up to you

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:110
&gt; +    if (failed()
&gt; +        || (m_reader &amp;&amp; (!m_reader-&gt;imagesCount() || m_reader-&gt;parseFailed())))

Tiny nit: With WebKit&apos;s lack of a column limit, I find combining these on one line fractionally clearer

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:202
&gt; +// Return true if decoding block was successful and the entire block was consumed.
&gt; +// Return false if there was a critical decoding error. The error should be reported to client.

It looks like maybe OUTPUT_ROW can return true if more block remains but no rows remain.  Perhaps the comment should be:

Returns true if decoding was successful.  In this case the block will have been completely consumed and/or rowsRemaining will be 0.  Otherwise, decoding failed; returns false in this case, which will always cause the GIFImageReader to set the &quot;decode failed&quot; flag.

(Hopefully this is accurate?)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:316
&gt; +// Return true if decoding for this frame has progressed.
&gt; +// Return false if there was a critical decoding error. The error should be reported to client.

This also seems inaccurate, since sometimes decoding hasn&apos;t progressed and we still return true (e.g. the very first return statement in the function).  Maybe:

Returns false if a decoding error occurred.  This is a fatal error and causes the GIFImageReader to set the &quot;decode failed&quot; flag.  Otherwise, either not enough data is available to decode further than before, or the new data has been decoded successfully; returns true in this case.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:338
&gt; +        if (blockPosition + blockSize &gt; length)

Are either of the additions in here subject to a potential integer overflow condition?  They look exploitable if they are.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:348
&gt; +    // Note that some broken GIF files have no more LZW blocks but still some rows remaining.
&gt; +    // We treat it as frame complete as well, to be consistent with previous implementation.

This second half of the comment seems like it belongs on isComplete(), not here.

Also, I&apos;m concerned about anywhere where a comment mentions the &quot;previous implementation&quot;.  For one, readers may not know what the &quot;previous implementation&quot; was; for another, this comment might become misleading over time if we change or refactor the implementation more; and for a third, consistency with the past is not really a great reason on its own.  I&apos;m willing to change some of these behaviors if doing so would be more sane or compatible; otherwise, we should probably phrase things more like &quot;do XYZ because GIFs in the wild rely on it&quot;.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:365
&gt; +    // Try to be tolerant and don&apos;t report parsing errors but we will not parse again.
&gt; +    // Previous implementation used a separate GIFImageReader to count frames, so parsing error was tolerated
&gt; +    // but not decoding error. Do a separate case here to match previous implementation.

Can we ever actually successfully decode after a failed parse?  Does that just result in the image decoding up to the parse failure and then claiming to be complete?

I&apos;m just wondering if the complexity here can be simplified without a visible change to the consumer.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:379
&gt; +        // Exit this loop and wait for more data to continue decoding.

Nit: It&apos;s a little misleading to put this here since it really only applies if the conditional is true.  How about writing &quot;// We need more data to continue decoding.&quot; as an EOL comment on the break statement?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:582
&gt; +            // NOTE: This relies on the values in the FrameDisposalMethod enum

Nit: I&apos;d add a blank line above here because the NOTE isn&apos;t connected to the line above it.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:586
&gt; +

Nit: ...and I&apos;d probably take away the blank here.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:620
&gt; +            // GIFConsumeNetscapeExtension alway reads 3 bytes from the stream; We should at least wait for this amount.

Nit: alway -&gt; always

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:722
&gt; +            // bits per pixel is currentComponent[8]&amp;0x07
&gt; +

Nit: Remove these two lines, the comment is restated more clearly below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856180</commentid>
    <comment_count>18</comment_count>
      <attachid>193350</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-15 12:17:24 -0700</bug_when>
    <thetext>Created attachment 193350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856184</commentid>
    <comment_count>19</comment_count>
      <attachid>192779</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-15 12:18:18 -0700</bug_when>
    <thetext>Comment on attachment 192779
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:110
&gt;&gt; +        || (m_reader &amp;&amp; (!m_reader-&gt;imagesCount() || m_reader-&gt;parseFailed())))
&gt; 
&gt; Tiny nit: With WebKit&apos;s lack of a column limit, I find combining these on one line fractionally clearer

okay

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:202
&gt;&gt; +// Return false if there was a critical decoding error. The error should be reported to client.
&gt; 
&gt; It looks like maybe OUTPUT_ROW can return true if more block remains but no rows remain.  Perhaps the comment should be:
&gt; 
&gt; Returns true if decoding was successful.  In this case the block will have been completely consumed and/or rowsRemaining will be 0.  Otherwise, decoding failed; returns false in this case, which will always cause the GIFImageReader to set the &quot;decode failed&quot; flag.
&gt; 
&gt; (Hopefully this is accurate?)

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:316
&gt;&gt; +// Return false if there was a critical decoding error. The error should be reported to client.
&gt; 
&gt; This also seems inaccurate, since sometimes decoding hasn&apos;t progressed and we still return true (e.g. the very first return statement in the function).  Maybe:
&gt; 
&gt; Returns false if a decoding error occurred.  This is a fatal error and causes the GIFImageReader to set the &quot;decode failed&quot; flag.  Otherwise, either not enough data is available to decode further than before, or the new data has been decoded successfully; returns true in this case.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:338
&gt;&gt; +        if (blockPosition + blockSize &gt; length)
&gt; 
&gt; Are either of the additions in here subject to a potential integer overflow condition?  They look exploitable if they are.

When this code is reached, the LZW block should be complete (in parse()). This is really being extra careful about going out of bounds. I don&apos;t thin they have integer flow problem, they are both size_t and blockSize is no larger than 255. For the integer overflow to occur the entire file has to exceed the memory limit (32bits or 64bits), which I don&apos;t think is possible.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:348
&gt;&gt; +    // We treat it as frame complete as well, to be consistent with previous implementation.
&gt; 
&gt; This second half of the comment seems like it belongs on isComplete(), not here.
&gt; 
&gt; Also, I&apos;m concerned about anywhere where a comment mentions the &quot;previous implementation&quot;.  For one, readers may not know what the &quot;previous implementation&quot; was; for another, this comment might become misleading over time if we change or refactor the implementation more; and for a third, consistency with the past is not really a great reason on its own.  I&apos;m willing to change some of these behaviors if doing so would be more sane or compatible; otherwise, we should probably phrase things more like &quot;do XYZ because GIFs in the wild rely on it&quot;.

I dropped the comment that mentioned previous implementation but keep the explanation of the behavior of the code for handling wild GIFs.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:365
&gt;&gt; +    // but not decoding error. Do a separate case here to match previous implementation.
&gt; 
&gt; Can we ever actually successfully decode after a failed parse?  Does that just result in the image decoding up to the parse failure and then claiming to be complete?
&gt; 
&gt; I&apos;m just wondering if the complexity here can be simplified without a visible change to the consumer.

You are right. It is totally possible that parse failure has occurred but all frames are fully decoded and complete. This is to match previous implementation, I&apos;d change the behavior in a later patch if we want to. Also dropped the comment about previous implementation.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:379
&gt;&gt; +        // Exit this loop and wait for more data to continue decoding.
&gt; 
&gt; Nit: It&apos;s a little misleading to put this here since it really only applies if the conditional is true.  How about writing &quot;// We need more data to continue decoding.&quot; as an EOL comment on the break statement?

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:582
&gt;&gt; +            // NOTE: This relies on the values in the FrameDisposalMethod enum
&gt; 
&gt; Nit: I&apos;d add a blank line above here because the NOTE isn&apos;t connected to the line above it.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:586
&gt;&gt; +
&gt; 
&gt; Nit: ...and I&apos;d probably take away the blank here.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:620
&gt;&gt; +            // GIFConsumeNetscapeExtension alway reads 3 bytes from the stream; We should at least wait for this amount.
&gt; 
&gt; Nit: alway -&gt; always

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:722
&gt;&gt; +
&gt; 
&gt; Nit: Remove these two lines, the comment is restated more clearly below

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856186</commentid>
    <comment_count>20</comment_count>
      <attachid>192779</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-15 12:19:08 -0700</bug_when>
    <thetext>Comment on attachment 192779
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:79
&gt;&gt; +    decode(std::numeric_limits&lt;unsigned&gt;::max(), GIFFrameCountQuery);
&gt; 
&gt; Nit: Personally, I&apos;d probably just pass static_cast&lt;unsigned&gt;(-1), which does the same thing in a slightly less verbose way and avoids the need for the #include... up to you

Using ::max() makes it more clear to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856500</commentid>
    <comment_count>21</comment_count>
      <attachid>193350</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-03-15 21:26:52 -0700</bug_when>
    <thetext>Comment on attachment 193350
Patch

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

It seems like some of my comments, in particular about the change description, you didn&apos;t respond up or down to.

This generally looks OK to me.  I wonder if we can simplify imagesCount() a bit.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:347
&gt; +    // Note that some broken GIF files have no more LZW blocks but still some rows remaining, we treat it as frame complete as well.

I take back what I said about putting this last line on isComplete() -- instead it makes sense to put a note like this in the state machine where we call setComplete() (but not here).

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:362
&gt; +    // Try to be tolerant and don&apos;t report parsing errors but we will not parse again.

Consider adding a TODO to just fail on parsing errors?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:617
&gt; +            // GIFConsumeNetscapeExtension always reads 3 bytes from the stream; We should at least wait for this amount.

Nit: We -&gt; we

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:262
&gt; +        // GIFControlExtension adds a new frame but is not counted until GIFImageHeader is reached.

Does this actually matter for anything?  I can&apos;t think why it&apos;s important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856811</commentid>
    <comment_count>22</comment_count>
      <attachid>193482</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-17 20:38:42 -0700</bug_when>
    <thetext>Created attachment 193482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856812</commentid>
    <comment_count>23</comment_count>
      <attachid>192779</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-17 20:40:05 -0700</bug_when>
    <thetext>Comment on attachment 192779
Patch

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

Updated ChangeLog as well.

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +        it is received very slowly. Existing implementation creates a new
&gt; 
&gt; Nit: it is -&gt; they are

Done.

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        GIFImageReader for counting frames for every byte that comes in, this
&gt; 
&gt; Nit: Is this accurate?  Shouldn&apos;t &quot;for every byte that comes in&quot; read &quot;every time it is notified that new data has been received&quot;?

Done.

&gt;&gt; Source/WebKit/chromium/ChangeLog:112
&gt;&gt; +        that progressive decoding produces the same results as a truncated file.
&gt; 
&gt; Nit: This is unclear, how about &quot;...verify that continually re-decoding an image one additional byte at a time produces the same outputs as repeatedly decoding (with brand new decoders) truncated versions of the image that are one byte longer each time.&quot;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857628</commentid>
    <comment_count>24</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-18 15:21:44 -0700</bug_when>
    <thetext>Review ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857870</commentid>
    <comment_count>25</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-03-18 20:02:28 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Review ping.

In case you&apos;re waiting on me, I&apos;m assuming at this point that further review is going to be done by a real reviewer, since you&apos;ve addressed all my issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857873</commentid>
    <comment_count>26</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-18 20:04:49 -0700</bug_when>
    <thetext>pkasting: Thanks for your thorough review. It was very helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858250</commentid>
    <comment_count>27</comment_count>
      <attachid>193482</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-03-19 07:10:58 -0700</bug_when>
    <thetext>Comment on attachment 193482
Patch

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

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:355
&gt; +// This method uses GIFFrameContext:decode() to decode each frame, decoding error is reported to client as a critical failure.

Nit:  Comma splice.  Split into two sentences, or use a semicolon.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:356
&gt; +// Return true if decoding has progressed. return false; if an error has occurred.

Nit:  English and C mixed is cute, but I&apos;d stick to one or the other for both the true and false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858251</commentid>
    <comment_count>28</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-03-19 07:11:37 -0700</bug_when>
    <thetext>+jschuh for security issues, if any</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858252</commentid>
    <comment_count>29</comment_count>
      <attachid>193482</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-03-19 07:12:14 -0700</bug_when>
    <thetext>Comment on attachment 193482
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858582</commentid>
    <comment_count>30</comment_count>
      <attachid>193893</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-19 12:09:07 -0700</bug_when>
    <thetext>Created attachment 193893
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858617</commentid>
    <comment_count>31</comment_count>
      <attachid>193893</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 12:31:32 -0700</bug_when>
    <thetext>Comment on attachment 193893
Patch for landing

Clearing flags on attachment: 193893

Committed r146237: &lt;http://trac.webkit.org/changeset/146237&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858618</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 12:31:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192359</attachid>
            <date>2013-03-09 17:47:17 -0800</date>
            <delta_ts>2013-03-09 17:51:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130309174318.patch</filename>
            <type>text/plain</type>
            <size>58735</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1OTA3YmU2ZDEyNzMw
ZTMzOGZlN2E5MGQ4MDI1ZDU4MDY3OTY1Ny4uYzg1ZmRjNmEwNjU3ZGM0ODkxNjBjMzExNjE3YmMx
MTJhMzQ1MmVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTAzLTA5ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
Y291bnQgZnJhbWVzIGFuZCBkZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9CSkVDVElWRQorCisgICAgICAgIFRoaXMgY2hh
bmdlaGFzIHRoZSBvYmplY3RpdmUgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHJlYWRpbmcgR0lG
IGZpbGVzLgorICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBwYXJzZSB0aGUgZW50aXJl
IEdJRiBmaWxlIGluIG9uZSBwYXNzIGFuZCBzYXZlcworICAgICAgICBpbmZvcm1hdGlvbiBhYm91
dCBlYWNoIGZyYW1lLCBzdWNoIHRoYXQgZGVjb2RpbmcgaW4gYSBsYXRlciBwYXNzIGRvZXMKKyAg
ICAgICAgbm90IG5lZWQgdG8gcGFyc2UgdGhlIGZpbGUgYWdhaW4uCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgZml4ZWQgdGhlIHBlcmZvcm1hbmNlIHByb2JsZW0gb2YgZGVjb2RpbmcgR0lGIGZpbGVz
IHdoZW4KKyAgICAgICAgaXQgaXMgcmVjZWl2ZWQgdmVyeSBzbG93bHkuCisKKyAgICAgICAgQUxH
T1JJVEhNCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkaXZpZGVzIHRoZSBkZWNvZGlu
ZyBwcm9jZXNzIGludG8gdHdvIHNlcGFyYXRlCisgICAgICAgIHN0ZXBzOiBwYXJzZSBhbmQgTFpX
IGRlY29kaW5nLgorCisgICAgICAgIEluIHRoZSBwYXJzZSBzdGVwLCB0aGUgc3RhdGUgbWFjaGlu
ZSBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAgICAgICBpbXBsZW1lbnRhaXRvbi4gSG93
ZXZlciB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvZGluZworICAgICAg
ICB3aGlsZSBzY2FubmluZyB0aHJvdWdoIHRoZSBmaWxlLiBJbnRlYWQgaXQgY3JlYXRlcyBhIG5l
dyBkYXRhIHN0cnVjdHVyZQorICAgICAgICBmb3IgY2FjaGluZyBhbGwgZnJhbWUgaW5mb3JtYXRp
b24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExaVyBibG9ja3MuCisKKyAgICAgICAgSWYgYSBmdWxs
IGRlY29kZSBpcyByZXF1ZXN0ZWQgdGhlbiBMWlcgZGVjb2RpbmcgaXMgcGVyZm9ybWVkLiBUaGlz
CisgICAgICAgIGltcGxlbWVudGF0aW9uIGxvb2sgdGhyb3VnaCBhbGwgZnJhbWUgaW5mb3JtYXRp
b24gc2F2ZWQgYW5kIGRlY29kZQorICAgICAgICBlYWNoIGZyYW1lIHNlcXVlbnRpYWxseSB1bnRp
bCB0aGUgdGFyZ2V0IGZyYW1lIGlzIHJlYWNoZWQuCisKKyAgICAgICAgQmVjYXVzZSBvZiB0aGUg
c2VwYXJhdGUgb2YgcGFyc2UgYW5kIGRlY29kZSwgZWFjaCBmcmFtZSBjYW4gYmUgZGVjb2RlZAor
ICAgICAgICBzZXBhcmF0ZWx5LiBUaGlzIHBhdmVzIHRoZSB3YXkgdG8gc3VwcG9ydCBzZWVraW5n
IGluIEdJRiBmaWxlLgorCisgICAgICAgIFRFU1RJTkcKKworICAgICAgICBObyBuZXcgdGVzdHMu
IFRoZXJlIGFyZSBhbHJlYWR5IEdJRiB1bml0IHRlc3RzIGZvciBmdW5jdGlvbmFsIHRlc3Rpbmcu
CisgICAgICAgIEV4aGF1c3RpdmUgdGVzdGluZyBpcyBkb25lIGxvY2FsbHkgd2l0aCBhIGNvcnB1
cyBvZiA2MGsgaW1hZ2VzLgorICAgICAgICBJIG1peGVkIHRoZSBjb3JwdXMgd2l0aCBzb21lIGdl
bmVyYXRlZCBiYWQgZGF0YSBhbmQgdHJ1bmNhdGVkIGZpbGVzLgorICAgICAgICBUaGUgcmVzdWx0
cyB3YXMgYml0LWV4YWN0IGFzIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB3aXRoIG9ubHkK
KyAgICAgICAgMiBjb3VudHMgb2YgZGlmZmVyZW5jZXMuIEluIHRoZXNlIHR3byBpbnN0YW5jZXMg
dGhlIG5ldyBhbGdvcml0aG0gY2FuCisgICAgICAgIGRlY29kZSBvbmUgbW9yZSBicm9rZW4gaW1h
Z2UgYXQgdGhlIGVuZCwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoCisgICAgICAgIG90aGVyIGlt
YWdlIHZpZXdlcnMsIGUuZy4gUHJldmlldyBvbiBNYWMuCisKKyAgICAgICAgVGhlc2Ugd2VyZSBh
bHNvIG5vIGNyYXNoaW5nIHdoZW4gZGVjb2RpbmcgdGhlIGVudGlyZSBjb3JwdXMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEdJRkltYWdlRGVjb2Rlcik6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAg
KEdJRkxaV0NvbnRleHQ6Om91dHB1dFJvdyk6CisgICAgICAgIChHSUZMWldDb250ZXh0Ojpkb0xa
Vyk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmRlY29kZSk6CisgICAgICAgIChHSUZJbWFn
ZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6CisgICAg
ICAgIChHSUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChHSUZM
WldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGTFpXQ29udGV4dDo6R0lG
TFpXQ29udGV4dCk6CisgICAgICAgIChHSUZMWldDb250ZXh0KToKKyAgICAgICAgKEdJRkxaV0Nv
bnRleHQ6Omhhc1JlbWFpbmluZ1Jvd3MpOgorICAgICAgICAoR0lGTFpXQmxvY2spOgorICAgICAg
ICAoR0lGTFpXQmxvY2s6OkdJRkxaV0Jsb2NrKToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dCk6
CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChH
SUZGcmFtZUNvbnRleHQ6On5HSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250
ZXh0OjphZGRMendCbG9jayk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmlzQ29tcGxldGUp
OgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpzZXRDb21wbGV0ZSk6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6On5H
SUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6aW1hZ2VzQ291bnQpOgor
ICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFn
ZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2VGYWlsZWQpOgorICAgICAg
ICAoR0lGSW1hZ2VSZWFkZXI6OmlzRmlyc3RGcmFtZSk6CisKIDIwMTMtMDMtMDcgIFJvYmVydCBI
b2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE0MDkwNyk6
IEluY29ycmVjdCBiYXNlbGluZSBmb3IgY2VsbHMgd2l0aCBtZWRpYSBjb250ZW50IGR1cmluZyBs
b2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDlmNDQ3NDMxNjY0OWMwOTZmNWE0ZThj
NjcwZWIxZTNjOTBiMTc0MzcuLmU2ZDllMDYzMDMxOTgxZjU5M2JhMjQ0NTNlMDU5ZTIzMWExNjE1
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDMt
MDkgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBHSUZJbWFnZVJl
YWRlciB0byBjb3VudCBmcmFtZXMgYW5kIGRlY29kZSBpbiBvbmUgcGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEdJRkltYWdlRGVjb2Rl
clRlc3QgZHVlIHRvIGNoYW5nZXMgaW4gZGVjb2RpbmcgYWxnb3JpdGhtLgorICAgICAgICBUaGUg
bmV3IGFsZ29yaXRobSBpcyBtb3JlIHRvbGVyYW50IHRvIGJhZCBHSUYgZGF0YS4gSXQgaXMgYWJs
ZQorICAgICAgICB0byBkZWNvZGUgdGhlIGxhc3QgYnJva2VuIGZyYW1lLCB1cGRhdGluZyB1bml0
IHRlc3QgYWNjb3JkaW5nbHkuCisKKyAgICAgICAgKiB0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisKIDIwMTMtMDMtMDggIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBS
b2xsZWQgQ2hyb21pdW0gREVQUyB0byByMTg3MDM3LiAgUmVxdWVzdGVkIGJ5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1JbnN0cnVtZW50YXRpb24uaAppbmRleCAxZjk1
NTc3ZTZlYzEwNDZmMzlkOWQ3MWYwZWExZGU0YTZmZjhjNTBiLi5mZmJlZThmOTg5MDRmNzNkZjky
ZjNmMGY2NmI2MGZhY2ZmNTE4ZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAog
aW5saW5lIHZvaWQgUGxhdGZvcm1JbnN0cnVtZW50YXRpb246OndpbGxEZWNvZGVJbWFnZShjb25z
dCBTdHJpbmcmIGltYWdlVHlwZSkKIHsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpZiAwICYm
IFBMQVRGT1JNKENIUk9NSVVNKQogICAgIFRSQUNFX0VWRU5UX0JFR0lOMSgid2Via2l0IiwgIklt
YWdlIERlY29kZSIsICJpbWFnZVR5cGUiLCBUUkFDRV9TVFJfQ09QWShpbWFnZVR5cGUuYXNjaWko
KS5kYXRhKCkpKTsKICNlbmRpZgogICAgIEZBU1RfUkVUVVJOX0lGX05PX0NMSUVOVCgpOwpAQCAt
NzYsNyArNzYsNyBAQCBpbmxpbmUgdm9pZCBQbGF0Zm9ybUluc3RydW1lbnRhdGlvbjo6d2lsbERl
Y29kZUltYWdlKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKQogCiBpbmxpbmUgdm9pZCBQbGF0Zm9y
bUluc3RydW1lbnRhdGlvbjo6ZGlkRGVjb2RlSW1hZ2UoKQogewotI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorI2lmIDAgJiYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgVFJBQ0VfRVZFTlRfRU5EMCgi
d2Via2l0IiwgIkltYWdlIERlY29kZSIpOwogI2VuZGlmCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
Q0xJRU5UKCk7CkBAIC04NSw3ICs4NSw3IEBAIGlubGluZSB2b2lkIFBsYXRmb3JtSW5zdHJ1bWVu
dGF0aW9uOjpkaWREZWNvZGVJbWFnZSgpCiAKIGlubGluZSB2b2lkIFBsYXRmb3JtSW5zdHJ1bWVu
dGF0aW9uOjp3aWxsUmVzaXplSW1hZ2UoYm9vbCBzaG91bGRDYWNoZSkKIHsKLSNpZiBQTEFURk9S
TShDSFJPTUlVTSkKKyNpZiAwICYmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIFRSQUNFX0VWRU5U
X0JFR0lOMSgid2Via2l0IiwgIkltYWdlIFJlc2l6ZSIsICJjYWNoZWQiLCBzaG91bGRDYWNoZSk7
CiAjZW5kaWYKICAgICBGQVNUX1JFVFVSTl9JRl9OT19DTElFTlQoKTsKQEAgLTk0LDcgKzk0LDcg
QEAgaW5saW5lIHZvaWQgUGxhdGZvcm1JbnN0cnVtZW50YXRpb246OndpbGxSZXNpemVJbWFnZShi
b29sIHNob3VsZENhY2hlKQogCiBpbmxpbmUgdm9pZCBQbGF0Zm9ybUluc3RydW1lbnRhdGlvbjo6
ZGlkUmVzaXplSW1hZ2UoKQogewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lmIDAgJiYgUExB
VEZPUk0oQ0hST01JVU0pCiAgICAgVFJBQ0VfRVZFTlRfRU5EMCgid2Via2l0IiwgIkltYWdlIFJl
c2l6ZSIpOwogI2VuZGlmCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fQ0xJRU5UKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGJiODg0MTViYjBjNTY1OGQwMjJhODFhZTU0N2JjYzE5
N2RlYzJjMDAuLmM4MjMzMDRjZjYwZDUyOGE5ODA4NjRmNTNkNTU1Njk0YTcxZmEzNTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJH
SUZJbWFnZVJlYWRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCisj
aW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0lGSW1h
Z2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhh
T3B0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAg
IDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikK
LSAgICAsIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAs
IG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKIHsKIH0KQEAgLTUyLDkgKzUy
LDYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKICAgICBpZiAobV9yZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyLT5zZXRE
YXRhKGRhdGEpOwotCi0gICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBh
cyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KLSAgICBtX2FscmVhZHlTY2FubmVk
VGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUoKQpAQCAtNzksMjEgKzc2LDcgQEAgYm9vbCBHSUZJbWFnZURlY29k
ZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIAogc2l6ZV90IEdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiB7Ci0gICAgaWYgKCFtX2FscmVhZHlTY2FubmVk
VGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBTY2FubmluZyBhbGwg
dGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlvciBpZiB0aGUgZGF0YSB3ZXJlIHRvCi0gICAgICAg
IC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4gIE1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIHRyeSB0
byBjbG9uZSBvdXIKLSAgICAgICAgLy8gZXhpc3RpbmcgcmVhZCBzZXNzaW9uIHRvIHByZXNlcnZl
IHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGNyYXdsCi0gICAgICAgIC8vIGFsbCB0aGUgZGF0
YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdvcnNlIHRoYW4gd2hhdCBJbWFnZUlPIGRvZXMgb24K
LSAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAoaXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFn
YWluKS4KLSAgICAgICAgR0lGSW1hZ2VSZWFkZXIgcmVhZGVyKDApOwotICAgICAgICByZWFkZXIu
c2V0RGF0YShtX2RhdGEpOwotICAgICAgICByZWFkZXIuZGVjb2RlKEdJRkZyYW1lQ291bnRRdWVy
eSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSk7Ci0gICAgICAgIG1fYWxyZWFkeVNjYW5uZWRU
aGlzRGF0YUZvckZyYW1lQ291bnQgPSB0cnVlOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUu
cmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytpKQotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9Ci0K
KyAgICBkZWNvZGUoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBHSUZGcmFt
ZUNvdW50UXVlcnkpOwogICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwogfQog
CkBAIC0xMDcsOCArOTAsOCBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQo
KSBjb25zdAogICAgIC8vIHNob3VsZCBkZWZhdWx0IHRvIGxvb3Bpbmcgb25jZSAodGhlIGluaXRp
YWwgdmFsdWUgZm9yCiAgICAgLy8gfG1fcmVwZXRpdGlvbkNvdW50fCkuCiAgICAgLy8KLSAgICAv
LyBUaGVyZSBhcmUgdHdvIGFkZGl0aW9uYWwgd3JpbmtsZXMgaGVyZS4gIEZpcnN0LCBJbWFnZVNv
dXJjZTo6Y2xlYXIoKSBtYXkKLSAgICAvLyBkZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUg
cmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVzc18KKyAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRp
dGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQorICAgIC8v
IG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRl
ciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVj
cmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0aGUKICAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9u
J3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKICAg
ICAvLyBuZXcgcmVhZGVyIHdpbGwgb25jZSBhZ2FpbiByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4s
IGFuZCB3ZSB3b24ndApAQCAtMTE4LDcgKzEwMSwxNiBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpy
ZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVhdCBp
dCBhcyBhICJsb29wIG9uY2UiIGFuaW1hdGlvbi4gIFdlIGRvbid0IG5lZWQKICAgICAvLyBzcGVj
aWFsIGNvZGUgaGVyZSBlaXRoZXIsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlJ2xsIG5ldmVyIGNo
YW5nZQogICAgIC8vIHxtX3JlcGV0aXRpb25Db3VudHwgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZS4K
LSAgICBpZiAobV9yZWFkZXIgJiYgKG1fcmVhZGVyLT5sb29wQ291bnQoKSAhPSBjTG9vcENvdW50
Tm90U2VlbikpCisgICAgLy8KKyAgICAvLyBUaGlyZCwgd2UgdXNlIHRoZSBzYW1lIEdJRkltYWdl
UmVhZGVyIGZvciBjb3VudGluZyBmcmFtZXMgYW5kIHdlIG1pZ2h0CisgICAgLy8gc2VlIHRoZSBs
b29wIGNvdW50IGFuZCB0aGVuIGVuY291bnRlciBhIGRlY29kaW5nIGVycm9yIHdoaWNoIGhhcHBl
bnMKKyAgICAvLyBsYXRlciBpbiB0aGUgc3RyZWFtLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQg
bm8gZnJhbWVzIGFyZSBpbiB0aGUKKyAgICAvLyBzdHJlYW0uIEluIHRoZXNlIGNhc2VzIHdlIHNo
b3VsZCBqdXN0IGxvb3Agb25jZS4KKyAgICBpZiAoZmFpbGVkKCkpCisgICAgICAgIG1fcmVwZXRp
dGlvbkNvdW50ID0gY0FuaW1hdGlvbkxvb3BPbmNlOworICAgIGVsc2UgaWYgKG1fcmVhZGVyICYm
ICghbV9yZWFkZXItPmltYWdlc0NvdW50KCkgfHwgbV9yZWFkZXItPnBhcnNlRmFpbGVkKCkpKQor
ICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IGNBbmltYXRpb25Mb29wT25jZTsKKyAgICBlbHNl
IGlmIChtX3JlYWRlciAmJiBtX3JlYWRlci0+bG9vcENvdW50KCkgIT0gY0xvb3BDb3VudE5vdFNl
ZW4pCiAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gbV9yZWFkZXItPmxvb3BDb3VudCgpOwog
ICAgIHJldHVybiBtX3JlcGV0aXRpb25Db3VudDsKIH0KQEAgLTMyMSw5ICszMTMsMzMgQEAgdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkg
cXVlcnkpCiAgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKG1fZGF0YSk7CiAgICAgfQogCi0gICAg
Ly8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2UndmUgcmVjZWl2ZWQgYWxs
IHRoZSBkYXRhLCBkZWNvZGluZwotICAgIC8vIGhhcyBmYWlsZWQuCi0gICAgaWYgKCFtX3JlYWRl
ci0+ZGVjb2RlKHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAg
ICBpZiAocXVlcnkgPT0gR0lGU2l6ZVF1ZXJ5KSB7CisgICAgICAgIGlmICghbV9yZWFkZXItPmRl
Y29kZShHSUZTaXplUXVlcnksIGhhbHRBdEZyYW1lKSkKKyAgICAgICAgICAgIHNldEZhaWxlZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKEdJ
RkZyYW1lQ291bnRRdWVyeSwgaGFsdEF0RnJhbWUpKSB7CisgICAgICAgIHNldEZhaWxlZCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgaW50IG9sZFNpemUgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGUuc2l6ZSgpOworICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUobV9yZWFk
ZXItPmltYWdlc0NvdW50KCkpOworICAgIGZvciAoaW50IGkgPSBvbGRTaXplOyBpIDwgbV9yZWFk
ZXItPmltYWdlc0NvdW50KCk7ICsraSkKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlW2ldLnNl
dFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKKworICAgIGlmIChxdWVyeSA9
PSBHSUZGcmFtZUNvdW50UXVlcnkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9yZWFk
ZXItPmRlY29kZShHSUZGdWxsUXVlcnksIGhhbHRBdEZyYW1lKSkgeworICAgICAgICBzZXRGYWls
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEl0IGlzIGFsc28gYSBmYXRh
bCBlcnJvciBpZiBhbGwgZGF0YSBpcyByZWNlaXZlZCBidXQgd2UgZmFpbGVkIHRvIGRlY29kZQor
ICAgIC8vIGFsbCBmcmFtZXMgY29tcGxldGVseS4KKyAgICBpZiAoaXNBbGxEYXRhUmVjZWl2ZWQo
KSAmJiBoYWx0QXRGcmFtZSA+PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpICYmIG1fcmVhZGVy
KQogICAgICAgICBzZXRGYWlsZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4
IDU1ZjliMzU2NGY0MTJjNzA3MjE5MWQ3NDA2MWIxOTY3NjE2YzZiNmQuLmY5ZTFiODRkMzE4MWFh
NmM1NWZiYWMyNDhlYjMxMmU5NTQyYjhhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKQEAg
LTcyLDcgKzcyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBmYWlsdXJlLCB0
aGlzIHdpbGwgbWFyayB0aGUgaW1hZ2UgYXMgZmFpbGVkLgogICAgICAgICBib29sIGluaXRGcmFt
ZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KTsKIAotICAgICAgICBib29sIG1fYWxyZWFkeVNj
YW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQ7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVmZmVy
U2F3QWxwaGE7CiAgICAgICAgIG11dGFibGUgaW50IG1fcmVwZXRpdGlvbkNvdW50OwogICAgICAg
ICBPd25QdHI8R0lGSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHAKaW5kZXggYjg3ZjZkZjU3ZTc2OTVkNTViZDM1NzRlMmMyMzE5MGVkZGY3ZjMzNy4uODdjNTk3
MTNkYTYxZjY0MzFhZGU1NmM3Y2RlOWQzYzRjMzkxNDU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwCkBAIC05OCwyMCArOTgsMjAgQEAgdXNpbmcgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OwogI2RlZmluZSBHRVRJTlQxNihwKSAgICgocClbMV08PDh8KHApWzBdKQogCiAvLyBTZW5kIHRo
ZSBkYXRhIHRvIHRoZSBkaXNwbGF5IGZyb250LWVuZC4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91
dHB1dFJvdygpCitib29sIEdJRkxaV0NvbnRleHQ6Om91dHB1dFJvdygpCiB7Ci0gICAgaW50IGRy
b3dTdGFydCA9IG1fZnJhbWVDb250ZXh0LT5pcm93OwotICAgIGludCBkcm93RW5kID0gbV9mcmFt
ZUNvbnRleHQtPmlyb3c7CisgICAgaW50IGRyb3dTdGFydCA9IGlyb3c7CisgICAgaW50IGRyb3dF
bmQgPSBpcm93OwogCiAgICAgLy8gSGFlYmVybGktaW5zcGlyZWQgaGFjayBmb3IgaW50ZXJsYWNl
ZCBHSUZzOiBSZXBsaWNhdGUgbGluZXMgd2hpbGUKICAgICAvLyBkaXNwbGF5aW5nIHRvIGRpbWlu
aXNoIHRoZSAidmVuZXRpYW4tYmxpbmQiIGVmZmVjdCBhcyB0aGUgaW1hZ2UgaXMKICAgICAvLyBs
b2FkZWQuIEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMgdG8gYXZvaWQgdGhlIGFwcGVh
cmFuY2Ugb2YgdGhlCiAgICAgLy8gaW1hZ2UgY3Jhd2xpbmcgdXAgdGhlIHNjcmVlbiBhcyBzdWNj
ZXNzaXZlIHBhc3NlcyBhcmUgZHJhd24uCi0gICAgaWYgKG1fZnJhbWVDb250ZXh0LT5wcm9ncmVz
c2l2ZURpc3BsYXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFtZUNvbnRl
eHQtPmlwYXNzIDwgNCkgeworICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNw
bGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIGlwYXNzIDwgNCkgewogICAgICAg
ICB1bnNpZ25lZCByb3dEdXAgPSAwOwogICAgICAgICB1bnNpZ25lZCByb3dTaGlmdCA9IDA7CiAK
LSAgICAgICAgc3dpdGNoIChtX2ZyYW1lQ29udGV4dC0+aXBhc3MpIHsKKyAgICAgICAgc3dpdGNo
IChpcGFzcykgewogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICByb3dEdXAgPSA3OwogICAg
ICAgICAgICAgcm93U2hpZnQgPSAzOwpAQCAtMTQ4LDg4ICsxNDgsNjMgQEAgYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6b3V0cHV0Um93KCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDQUxM
QkFDSzogTGV0IHRoZSBjbGllbnQga25vdyB3ZSBoYXZlIGRlY29kZWQgYSByb3cuCi0gICAgaWYg
KG1fY2xpZW50ICYmIG1fZnJhbWVDb250ZXh0Ci0gICAgICAgICYmICFtX2NsaWVudC0+aGF2ZURl
Y29kZWRSb3cobV9pbWFnZXNDb3VudCAtIDEsIG1fbHp3Q29udGV4dC5yb3dCdWZmZXIsIG1fZnJh
bWVDb250ZXh0LT53aWR0aCwKLSAgICAgICAgICAgIGRyb3dTdGFydCwgZHJvd0VuZCAtIGRyb3dT
dGFydCArIDEsIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgJiYgbV9mcmFtZUNv
bnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFtZUNvbnRleHQtPmlwYXNzID4gMSkpCisgICAgaWYg
KCFtX2NsaWVudC0+aGF2ZURlY29kZWRSb3cobV9mcmFtZUNvbnRleHQtPmZyYW1lSWQsIHJvd0J1
ZmZlciwgbV9mcmFtZUNvbnRleHQtPndpZHRoLAorICAgICAgICBkcm93U3RhcnQsIGRyb3dFbmQg
LSBkcm93U3RhcnQgKyAxLCBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1f
ZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIGlwYXNzID4gMSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICghbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQpCi0gICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5pcm93Kys7CisgICAgICAgIGlyb3crKzsKICAgICBlbHNlIHsKICAgICAg
ICAgZG8gewotICAgICAgICAgICAgc3dpdGNoIChtX2ZyYW1lQ29udGV4dC0+aXBhc3MpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA4OwotICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwotICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDQ7CisgICAgICAgICAgICAgICAgaXJvdyArPSA4Owor
ICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaXJvdyA9IDQ7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsKLSAg
ICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQt
PmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsK
LSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAyOworICAgICAgICAg
ICAgICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29u
dGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAg
ICAgICAgICAgIGlyb3cgPSAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pcm93ICs9IDQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93
ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5p
cm93ID0gMTsKKyAgICAgICAgICAgICAgICBpcm93ICs9IDQ7CisgICAgICAgICAgICAgICAgaWYg
KGlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBp
cGFzcysrOworICAgICAgICAgICAgICAgICAgICBpcm93ID0gMTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSAyOwotICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwotICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7CisgICAgICAgICAgICAgICAgaXJvdyArPSAyOwor
ICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaXJvdyA9IDA7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICB9IHdoaWxlIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+IChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0
IC0gMSkpOworICAgICAgICB9IHdoaWxlIChpcm93ID4gKG1fZnJhbWVDb250ZXh0LT5oZWlnaHQg
LSAxKSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBQZXJmb3JtIExlbXBlbC1a
aXYtV2VsY2ggZGVjb2RpbmcuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNp
Z25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKK2Jvb2wgR0lGTFpXQ29udGV4
dDo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2sp
CiB7Ci0gICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAg
ICBpbnQgY29kZTsKICAgICBpbnQgaW5jb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNo
OwogCi0gICAgLy8gQ29weSBhbGwgdGhlIGRlY29kZXIgc3RhdGUgdmFyaWFibGVzIGludG8gbG9j
YWxzIHNvIHRoZSBjb21waWxlcgotICAgIC8vIHdvbid0IHdvcnJ5IGFib3V0IHRoZW0gYmVpbmcg
YWxpYXNlZC4gVGhlIGxvY2FscyB3aWxsIGJlIGhvbWVkCi0gICAgLy8gYmFjayBpbnRvIHRoZSBH
SUYgZGVjb2RlciBzdHJ1Y3R1cmUgd2hlbiB3ZSBleGl0LgotICAgIGludCBhdmFpbCA9IG1fbHp3
Q29udGV4dC5hdmFpbDsKLSAgICBpbnQgYml0cyA9IG1fbHp3Q29udGV4dC5iaXRzOwotICAgIHNp
emVfdCBjbnQgPSBieXRlc0luQmxvY2s7Ci0gICAgaW50IGNvZGVzaXplID0gbV9sendDb250ZXh0
LmNvZGVzaXplOwotICAgIGludCBjb2RlbWFzayA9IG1fbHp3Q29udGV4dC5jb2RlbWFzazsKLSAg
ICBpbnQgb2xkY29kZSA9IG1fbHp3Q29udGV4dC5vbGRjb2RlOwotICAgIGludCBjbGVhckNvZGUg
PSBtX2x6d0NvbnRleHQuY2xlYXJDb2RlOwotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyID0g
bV9sendDb250ZXh0LmZpcnN0Y2hhcjsKLSAgICBpbnQgZGF0dW0gPSBtX2x6d0NvbnRleHQuZGF0
dW07Ci0KLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+JiBwcmVmaXggPSBtX2x6d0NvbnRleHQu
cHJlZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgc3VmZml4ID0gbV9sendDb250ZXh0
LnN1ZmZpeDsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHN0YWNrID0gbV9sendDb250ZXh0
LnN0YWNrOwotICAgIHNpemVfdCBzdGFja3AgPSBtX2x6d0NvbnRleHQuc3RhY2twOwotICAgIHNp
emVfdCByb3dwID0gbV9sendDb250ZXh0LnJvd1Bvc2l0aW9uOwotICAgIHNpemVfdCB3aWR0aCA9
IG1fZnJhbWVDb250ZXh0LT53aWR0aDsKLSAgICBzaXplX3Qgcm93c1JlbWFpbmluZyA9IG1fZnJh
bWVDb250ZXh0LT5yb3dzUmVtYWluaW5nOwotCi0gICAgaWYgKHJvd3AgPT0gd2lkdGgpCisgICAg
aWYgKHJvd1Bvc2l0aW9uID09IHJvd0J1ZmZlci5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAjZGVmaW5lIE9VVFBVVF9ST1cgXApAQCAtMjM3LDEzICsyMTIsMTIgQEAgYm9vbCBHSUZJ
bWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRl
c0luQmxvY2spCiAgICAgICAgIGlmICghb3V0cHV0Um93KCkpIFwKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgXAogICAgICAgICByb3dzUmVtYWluaW5nLS07IFwKLSAgICAgICAgcm93cCA9IDA7
IFwKLSAgICAgICAgbV9sendDb250ZXh0LnJvd1Bvc2l0aW9uID0gMDsgXAorICAgICAgICByb3dQ
b3NpdGlvbiA9IDA7IFwKICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKSBcCi0gICAgICAgICAg
ICBnb3RvIEVORDsgXAorICAgICAgICAgICAgcmV0dXJuIHRydWU7IFwKICAgICB9IHdoaWxlICgw
KQogCi0gICAgZm9yIChjaCA9IGJsb2NrOyBjbnQtLSA+IDA7IGNoKyspIHsKKyAgICBmb3IgKGNo
ID0gYmxvY2s7IGJ5dGVzSW5CbG9jay0tID4gMDsgY2grKykgewogICAgICAgICAvLyBGZWVkIHRo
ZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVjb2RlcidzIDMyLWJpdCBpbnB1dCBidWZmZXIuCiAgICAg
ICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJpdHM7CiAgICAgICAgIGJpdHMgKz0gODsKQEAg
LTI2OSwxMiArMjQzLDEyIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQogICAgICAgICAgICAgICAgIC8v
IGVuZC1vZi1zdHJlYW0gc2hvdWxkIG9ubHkgYXBwZWFyIGFmdGVyIGFsbCBpbWFnZSBkYXRhLgog
ICAgICAgICAgICAgICAgIGlmICghcm93c1JlbWFpbmluZykKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAob2xkY29kZSA9PSAtMSkgewotICAgICAgICAg
ICAgICAgIG1fbHp3Q29udGV4dC5yb3dCdWZmZXJbcm93cCsrXSA9IHN1ZmZpeFtjb2RlXTsKLSAg
ICAgICAgICAgICAgICBpZiAocm93cCA9PSB3aWR0aCkKKyAgICAgICAgICAgICAgICByb3dCdWZm
ZXJbcm93UG9zaXRpb24rK10gPSBzdWZmaXhbY29kZV07CisgICAgICAgICAgICAgICAgaWYgKHJv
d1Bvc2l0aW9uID09IHJvd0J1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIE9VVFBV
VF9ST1c7CiAKICAgICAgICAgICAgICAgICBmaXJzdGNoYXIgPSBvbGRjb2RlID0gY29kZTsKQEAg
LTI4NywxMiArMjYxLDEyIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQogICAgICAgICAgICAgICAgIGNv
ZGUgPSBvbGRjb2RlOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcCA9PSBNQVhfQllURVMp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWls
ZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHdoaWxlIChjb2RlID49IGNsZWFyQ29kZSkgewogICAgICAg
ICAgICAgICAgIGlmIChjb2RlID49IE1BWF9CWVRFUyB8fCBjb2RlID09IHByZWZpeFtjb2RlXSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxl
ZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN1ZmZpeFtdIG9ubHkgaG9sZHMgY2hhcmFjdGVycyB0
aHJvdWdoIHN1ZmZpeFthdmFpbCAtIDFdLAogICAgICAgICAgICAgICAgIC8vIGFsbG93aW5nIGNv
ZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgbWFsZm9ybWVkCkBA
IC0zMDIsNyArMjc2LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWdu
ZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgY29k
ZSA9IHByZWZpeFtjb2RlXTsKIAogICAgICAgICAgICAgICAgIGlmIChzdGFja3AgPT0gTUFYX0JZ
VEVTKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGFja1tzdGFja3ArK10gPSBmaXJzdGNoYXIgPSBz
dWZmaXhbY29kZV07CkBAIC0zMjUsMzYgKzI5OSw4NSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKIAog
ICAgICAgICAgICAgLy8gQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0aGUgc2NhbmxpbmUg
YnVmZmVyLgogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG1fbHp3Q29udGV4dC5y
b3dCdWZmZXJbcm93cCsrXSA9IHN0YWNrWy0tc3RhY2twXTsKLSAgICAgICAgICAgICAgICBpZiAo
cm93cCA9PSB3aWR0aCkKKyAgICAgICAgICAgICAgICByb3dCdWZmZXJbcm93UG9zaXRpb24rK10g
PSBzdGFja1stLXN0YWNrcF07CisgICAgICAgICAgICAgICAgaWYgKHJvd1Bvc2l0aW9uID09IHJv
d0J1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9ST1c7CiAgICAgICAg
ICAgICB9IHdoaWxlIChzdGFja3AgPiAwKTsKICAgICAgICAgfQogICAgIH0KIAotRU5EOgotICAg
IC8vIEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29kZXIgc3RhdGUgdmFyaWFi
bGVzLgotICAgIG1fbHp3Q29udGV4dC5hdmFpbCA9IGF2YWlsOwotICAgIG1fbHp3Q29udGV4dC5i
aXRzID0gYml0czsKLSAgICBtX2x6d0NvbnRleHQuY29kZXNpemUgPSBjb2Rlc2l6ZTsKLSAgICBt
X2x6d0NvbnRleHQuY29kZW1hc2sgPSBjb2RlbWFzazsKLSAgICBtX2x6d0NvbnRleHQub2xkY29k
ZSA9IG9sZGNvZGU7Ci0gICAgbV9sendDb250ZXh0LmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKLSAg
ICBtX2x6d0NvbnRleHQuZGF0dW0gPSBkYXR1bTsKLSAgICBtX2x6d0NvbnRleHQuc3RhY2twID0g
c3RhY2twOwotICAgIG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbiA9IHJvd3A7Ci0gICAgbV9mcmFt
ZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSByb3dzUmVtYWluaW5nOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEdJRkZyYW1lQ29udGV4dDo6ZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50LCBi
b29sKiBmcmFtZURlY29kZWQpCit7CisgICAgKmZyYW1lRGVjb2RlZCA9IGZhbHNlOworICAgIGlm
ICghbV9sendDb250ZXh0KSB7CisgICAgICAgIG1fbHp3Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBH
SUZMWldDb250ZXh0KGNsaWVudCwgdGhpcykpOworICAgICAgICBpZiAoIW1fbHp3Q29udGV4dC0+
cHJlcGFyZVRvRGVjb2RlKCkpIHsKKyAgICAgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJyZW50
THp3QmxvY2sgPSAwOworICAgIH0KKworICAgIC8vIENoZWNrIGZvciBubyByZW1haW5pbmcgcm93
cyBjYW4gaGFuZGxlIGJhZCBHSUYgZGF0YSB3aXRoIGV4dHJhIGJsb2Nrcy4KKyAgICB3aGlsZSAo
bV9jdXJyZW50THp3QmxvY2sgPCBtX2x6d0Jsb2Nrcy5zaXplKCkgJiYgbV9sendDb250ZXh0LT5o
YXNSZW1haW5pbmdSb3dzKCkpIHsKKyAgICAgICAgc2l6ZV90IGJsb2NrUG9zaXRpb24gPSBtX2x6
d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9ja10uYmxvY2tQb3NpdGlvbjsKKyAgICAgICAgc2l6ZV90
IGJsb2NrU2l6ZSA9IG1fbHp3QmxvY2tzW21fY3VycmVudEx6d0Jsb2NrXS5ibG9ja1NpemU7Cisg
ICAgICAgIGlmIChibG9ja1Bvc2l0aW9uID49IGxlbmd0aCB8fCBibG9ja1Bvc2l0aW9uICsgYmxv
Y2tTaXplID4gbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IW1fbHp3Q29udGV4dC0+ZG9MWlcoZGF0YSArIGJsb2NrUG9zaXRpb24sIGJsb2NrU2l6ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrbV9jdXJyZW50THp3QmxvY2s7Cisg
ICAgfQorCisgICAgaWYgKG1fY3VycmVudEx6d0Jsb2NrID09IG1fbHp3QmxvY2tzLnNpemUoKSB8
fCAhbV9sendDb250ZXh0LT5oYXNSZW1haW5pbmdSb3dzKCkpIHsKKyAgICAgICAgKmZyYW1lRGVj
b2RlZCA9IHRydWU7CisgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigpOworICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKEdJRkltYWdlRGVj
b2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQogewogICAgIEFTU0VS
VChtX2J5dGVzUmVhZCA8PSBtX2RhdGEtPnNpemUoKSk7Ci0gICAgcmV0dXJuIGRlY29kZUludGVy
bmFsKG1fYnl0ZXNSZWFkLCBtX2RhdGEtPnNpemUoKSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSwgaGFs
dEF0RnJhbWUpOworCisgICAgLy8gVHJ5IHRvIGJlIHRvbGVyYW50IGFuZCBkb24ndCByZXBvcnQg
cGFyc2luZyBlcnJvcnMgYnV0IHdlIHdpbGwgbm90IHBhcnNlIGFnYWluLgorICAgIGlmICghbV9w
YXJzZUZhaWxlZCAmJiAhcGFyc2UobV9ieXRlc1JlYWQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRl
c1JlYWQsIHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5KSkKKyAgICAgICAg
bV9wYXJzZUZhaWxlZCA9IHRydWU7CisKKyAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVy
OjpHSUZGdWxsUXVlcnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgd2hpbGUgKG1fY3Vy
cmVudERlY29kaW5nRnJhbWUgPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9jdXJyZW50RGVjb2RpbmdG
cmFtZSA8IGhhbHRBdEZyYW1lKSB7CisgICAgICAgIGJvb2wgZnJhbWVEZWNvZGVkID0gZmFsc2U7
CisgICAgICAgIEdJRkZyYW1lQ29udGV4dCogY3VycmVudEZyYW1lID0gbV9mcmFtZXNbbV9jdXJy
ZW50RGVjb2RpbmdGcmFtZV0uZ2V0KCk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGN1cnJlbnRG
cmFtZS0+ZGVjb2RlKGRhdGEoMCksIG1fZGF0YS0+c2l6ZSgpLCBtX2NsaWVudCwgJmZyYW1lRGVj
b2RlZCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIC8vIEV4aXQgdGhpcyBsb29wIGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgdG8g
Y29udGludWUgZGVjb2RpbmcuCisgICAgICAgIGlmICghZnJhbWVEZWNvZGVkIHx8ICFjdXJyZW50
RnJhbWUtPmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICgh
bV9jbGllbnQtPmZyYW1lQ29tcGxldGUobV9jdXJyZW50RGVjb2RpbmdGcmFtZSwgY3VycmVudEZy
YW1lLT5kZWxheVRpbWUsIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK21fY3VycmVudERlY29kaW5nRnJhbWU7CisgICAg
fQorCisgICAgLy8gQWxsIGZyYW1lcyBkZWNvZGVkLgorICAgIGlmIChtX2N1cnJlbnREZWNvZGlu
Z0ZyYW1lID09IG1fZnJhbWVzLnNpemUoKSAmJiBtX3BhcnNlQ29tcGxldGVkKQorICAgICAgICBt
X2NsaWVudC0+Z2lmQ29tcGxldGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gUHJvY2Vz
cyBkYXRhIGFycml2aW5nIGZyb20gdGhlIHN0cmVhbSBmb3IgdGhlIGdpZiBkZWNvZGVyLgotYm9v
bCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6
ZV90IGxlbiwgR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0
RnJhbWUpCisvLyBQYXJzZSBpbmNvbWluZyBHSUYgZGF0YSBzdHJlYW0gaW50byBpbnRlcm5hbCBk
YXRhIHN0cnVjdHVyZXMuCisvLyBSZXR1cm4gdHJ1ZSBpZiBwYXJzaW5nIGhhcyBwcm9ncmVzc2Vk
IG9yIHRoZXJlIGlzIG5vdCBlbm91Z2ggZGF0YS4KKy8vIFJldHVybiBmYWxzZSBpZiBhIGZhdGFs
IGVycm9yIGlzIGVuY291bnRlcmVkLgorYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90
IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgYm9vbCBwYXJzZVNpemVPbmx5KQogewogICAgIGlm
ICghbGVuKSB7CiAgICAgICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBs
YXN0IGNhbGwsIGp1c3QgaWdub3JlIHRoaXMgY2FsbC4KQEAgLTM2MiwzNSArMzg1LDMxIEBAIGJv
b2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNp
emVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgfQogCiAgICAgaWYgKGxlbiA8IG1fYnl0ZXNUb0Nv
bnN1bWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBUaGlzIGxvb3AgcmVhZHMgYXMgbWFueSBjb21wb25lbnRzIGZyb20gfG1fZGF0YXwgYXMg
cG9zc2libGUuCiAgICAgLy8gQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGl0ZXJhdGlvbiwgZGF0
YVBvc2l0aW9uIHdpbGwgYmUgYWR2YW5jZWQgYnkgbV9ieXRlc1RvQ29uc3VtZSB0bwogICAgIC8v
IHBvaW50IHRvIHRoZSBuZXh0IGNvbXBvbmVudC4gbGVuIHdpbGwgYmUgZGVjcmVtZW50ZWQgYWNj
b3JkaW5nbHkuCiAgICAgd2hpbGUgKGxlbiA+PSBtX2J5dGVzVG9Db25zdW1lKSB7CisgICAgICAg
IGNvbnN0IHNpemVfdCBjdXJyZW50Q29tcG9uZW50UG9zaXRpb24gPSBkYXRhUG9zaXRpb247Cisg
ICAgICAgIGNvbnN0IHNpemVfdCBjdXJyZW50Q29tcG9uZW50U2l6ZSA9IG1fYnl0ZXNUb0NvbnN1
bWU7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGN1cnJlbnRDb21wb25lbnQgPSBkYXRh
KGRhdGFQb3NpdGlvbik7CiAKICAgICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBjb21wb25lbnQg
YXMgY29uc3VtZWQuIE5vdGUgdGhhdCBjdXJyZW50Q29tcG9uZW50IHdpbGwgcmVtYWluIHBvaW50
ZWQgYXQgdGhpcwogICAgICAgICAvLyBjb21wb25lbnQgdW50aWwgdGhlIG5leHQgbG9vcCBpdGVy
YXRpb24uCi0gICAgICAgIGRhdGFQb3NpdGlvbiArPSBtX2J5dGVzVG9Db25zdW1lOwotICAgICAg
ICBsZW4gLT0gbV9ieXRlc1RvQ29uc3VtZTsKKyAgICAgICAgZGF0YVBvc2l0aW9uICs9IGN1cnJl
bnRDb21wb25lbnRTaXplOworICAgICAgICBsZW4gLT0gY3VycmVudENvbXBvbmVudFNpemU7CiAK
ICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgR0lGTFpXOgotICAgICAg
ICAgICAgLy8gbV9ieXRlc1RvQ29uc3VtZSBpcyB0aGUgY3VycmVudCBjb21wb25lbnQgc2l6ZSBi
ZWNhdXNlIGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCi0gICAgICAgICAgICBpZiAoIWRvTFpXKGN1
cnJlbnRDb21wb25lbnQsIG1fYnl0ZXNUb0NvbnN1bWUpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVh
ZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KKyAgICAgICAgICAgIEFTU0VSVCghbV9m
cmFtZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1fZnJhbWVzLmxhc3QoKS0+YWRkTHp3Qmxv
Y2soY3VycmVudENvbXBvbmVudFBvc2l0aW9uLCBjdXJyZW50Q29tcG9uZW50U2l6ZSk7CiAgICAg
ICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgR0lGTFpXU3RhcnQ6IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFn
ZURlY29kZXI6OkdJRkZ1bGxRdWVyeSkgewotICAgICAgICAgICAgICAgIGludCBkYXRhc2l6ZSA9
ICpjdXJyZW50Q29tcG9uZW50OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kYXRh
c2l6ZSA9IGRhdGFzaXplOwotICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgTFpXIHBhcnNl
ci9kZWNvZGVyLgotICAgICAgICAgICAgICAgIGlmICghbV9sendDb250ZXh0LnByZXBhcmVUb0Rl
Y29kZShtX3NjcmVlbldpZHRoLCBkYXRhc2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAg
bV9mcmFtZXMubGFzdCgpLT5kYXRhc2l6ZSA9ICpjdXJyZW50Q29tcG9uZW50OwogICAgICAgICAg
ICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtNDAyLDcgKzQyMSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNp
emVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICBl
bHNlIGlmICghc3RybmNtcCgoY2hhciopY3VycmVudENvbXBvbmVudCwgIkdJRjg3YSIsIDYpKQog
ICAgICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDg3OwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNl
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIEdFVE4oNywgR0lG
R2xvYmFsSGVhZGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00MTUsNiAr
NDM0LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgIG1fc2NyZWVuSGVp
Z2h0ID0gR0VUSU5UMTYoY3VycmVudENvbXBvbmVudCArIDIpOwogCiAgICAgICAgICAgICAvLyBD
QUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgorICAgICAgICAg
ICAgLy8gTm90ZTogQSBzdWJzZXF1ZW50IGZyYW1lIG1pZ2h0IGhhdmUgZGltZW5zaW9ucyBsYXJn
ZXIgdGhhbiB0aGUgInNjcmVlbiIgZGltZW5zaW9ucy4KICAgICAgICAgICAgIGlmIChtX2NsaWVu
dCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDY4LDcgKzQ4OCw3IEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVf
dCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAvLyB1bnRpbCB3ZSBmaW5kIGFuIGltYWdl
IHNlcGFyYXRvciwgYnV0IEdJRjg5YSBzYXlzIHN1Y2gKICAgICAgICAgICAgIC8vIGEgZmlsZSBp
cyBjb3JydXB0LiBXZSBmb2xsb3cgR0lGODlhIGFuZCBiYWlsIG91dC4KICAgICAgICAgICAgIGlm
ICgqY3VycmVudENvbXBvbmVudCAhPSAnLCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBHRVROKDksIEdJRkltYWdlSGVhZGVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTM1LDMwICs1NTUsMjYgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VE
ZWMKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR0lGQ29udHJvbEV4dGVuc2lvbjogewotICAg
ICAgICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKLSAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0KCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICBHSUZG
cmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3QoKS5nZXQoKTsKIAotICAg
ICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpjdXJy
ZW50Q29tcG9uZW50ICYgMHgxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOwotICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4IGNvbnRyb2wgZXh0ZW5z
aW9uCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVs
aWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQotICAgICAg
ICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKLSAgICAgICAgICAg
ICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+PiAyKSAmIDB4
NzsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QgPSAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbE1ldGhvZDsKLQot
ICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhl
ciBzcGVjcyBzYXkgdmFsdWUgMwotICAgICAgICAgICAgICAgIC8vIExldCdzIGNob29zZSAzICh0
aGUgbW9yZSBwb3B1bGFyKQotICAgICAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9PSA0
KQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QgPSBX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7Ci0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25l
bnQgKyAxKSAqIDEwOworICAgICAgICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50ICYgMHgxKSB7
CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50
WzNdOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aXNUcmFuc3BhcmVudCA9IHRydWU7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aXNU
cmFuc3BhcmVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250
cm9sIGV4dGVuc2lvbgogICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBy
ZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCisgICAg
ICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCisgICAgICAgICAgICBp
bnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+PiAyKSAmIDB4NzsKKyAg
ICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbE1ldGhvZDsKKworICAgICAgICAgICAg
Ly8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1
ZSAzCisgICAgICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxhcikKKyAg
ICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9PSA0KQorICAgICAgICAgICAgICAgIGN1cnJl
bnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3Zl
cndyaXRlUHJldmlvdXM7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRlbGF5VGltZSA9IEdF
VElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwogICAgICAgICAgICAgR0VUTigxLCBH
SUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTYxNiw3
ICs2MzIsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0
YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgICAgIEdFVE4o
MSwgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jayk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIDAsMy03IGFyZSB5ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2FwZSBleHRl
bnNpb24gY29kZXMKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+
c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjM2LDcgKzY1Miw3
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRp
b24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAgKiBzaXplIGhhcyB3ZWly
ZCB3aWR0aCBvciBoZWlnaHQuICBXZSBhc3N1bWUgdGhhdCBHSUY4N2EKICAgICAgICAgICAgICAq
IGZpbGVzIGRvbid0IGNvbnRhaW4gYW5pbWF0aW9ucy4KICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgaWYgKCFtX2ltYWdlc0RlY29kZWQKKyAgICAgICAgICAgIGlmIChpc0ZpcnN0RnJhbWUo
KQogICAgICAgICAgICAgICAgICYmICgobV9zY3JlZW5IZWlnaHQgPCBoZWlnaHQpIHx8IChtX3Nj
cmVlbldpZHRoIDwgd2lkdGgpIHx8IChtX3ZlcnNpb24gPT0gODcpKSkgewogICAgICAgICAgICAg
ICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lk
dGggPSB3aWR0aDsKQEAgLTY1MywxMCArNjY5LDEwIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRl
Y29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVj
CiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbV9zY3JlZW5IZWlnaHQ7CiAgICAgICAgICAgICAg
ICAgd2lkdGggPSBtX3NjcmVlbldpZHRoOwogICAgICAgICAgICAgICAgIGlmICghaGVpZ2h0IHx8
ICF3aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rl
cjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IG1faW1hZ2VzRGVjb2RlZCkgeworICAg
ICAgICAgICAgaWYgKHBhcnNlU2l6ZU9ubHkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZGVj
b2RlciBuZWVkcyB0byBzdG9wLiBIYW5kIGJhY2sgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBjb25z
dW1lZCBmcm9tCiAgICAgICAgICAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQg
d2UgY29uc3VtZWQgdG8gcmVhZCB0aGUgaGVhZGVyKS4KICAgICAgICAgICAgICAgICBzZXRSZW1h
aW5pbmdCeXRlcyhsZW4gKyA5KTsKQEAgLTY2NCw2MiArNjgwLDQ1IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJ
RkltYWdlRGVjCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIG1faW1hZ2VzQ291bnQgPSBtX2ltYWdlc0RlY29kZWQgKyAxOworICAgICAg
ICAgICAgYWRkRnJhbWVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgR0lGRnJhbWVDb250ZXh0
KiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lcy5sYXN0KCkuZ2V0KCk7CiAKLSAgICAgICAgICAgIGlm
IChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhbV9mcmFtZUNvbnRl
eHQpCi0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0
KCk7Ci0KLSAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT54T2Zmc2V0ID0geE9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+eU9mZnNldCA9IHlPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPmhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
d2lkdGggPSB3aWR0aDsKLQotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FzZSB3aWxsIG5ldmVy
IGJlIHRha2VuIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGltYWdlICovCi0gICAgICAgICAgICAgICAg
LyogYmVpbmcgZGVjb2RlZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAg
ICAgKi8KLSAgICAgICAgICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0
byByZWFsbG9jYXRlIGJ1ZmZlcnMuICAgICAqLwotICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lk
dGggPSBzdGQ6Om1heChtX3NjcmVlbldpZHRoLCB3aWR0aCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobV9zY3JlZW5IZWlnaHQgPCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgIG1fc2NyZWVu
SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRb
OF0gJiAweDQwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxh
Y2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0g
MTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aW50ZXJsYWNlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aXBhc3MgPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICghbV9pbWFnZXNEZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBH
SUZzIG92ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2lu
ZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNrCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVp
cmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAg
ICAgICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFy
ZQotICAgICAgICAgICAgICAgICAgICAvLyB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBz
byBkb24ndCBkaXNwbGF5IHN1Y2gKLSAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dy
ZXNzaXZlbHkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZl
RGlzcGxheSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+eE9mZnNldCA9IHhPZmZzZXQ7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPnlPZmZz
ZXQgPSB5T2Zmc2V0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5oZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPndpZHRoID0gd2lkdGg7CiAKLSAgICAgICAgICAg
ICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIGxhc3QgaW1hZ2UuCi0gICAgICAgICAgICAgICAgbV9m
cmFtZUNvbnRleHQtPmlyb3cgPSAwOwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5y
b3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodDsKKyAgICAgICAgICAgIG1fc2Ny
ZWVuV2lkdGggPSBzdGQ6Om1heChtX3NjcmVlbldpZHRoLCB3aWR0aCk7CisgICAgICAgICAgICBt
X3NjcmVlbkhlaWdodCA9IHN0ZDo6bWF4KG1fc2NyZWVuSGVpZ2h0LCBoZWlnaHQpOwogCi0gICAg
ICAgICAgICAgICAgLy8gYml0cyBwZXIgcGl4ZWwgaXMgY3VycmVudENvbXBvbmVudFs4XSYweDA3
CisgICAgICAgICAgICBpZiAoY3VycmVudENvbXBvbmVudFs4XSAmIDB4NDApCisgICAgICAgICAg
ICAgICAgY3VycmVudEZyYW1lLT5pbnRlcmxhY2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmludGVybGFjZWQgPSBmYWxzZTsKKworICAg
ICAgICAgICAgLy8gT25seSBkaXNwbGF5IHRoZSBmaXJzdCBmcmFtZSBwcm9ncmVzc2l2ZWx5Lgor
ICAgICAgICAgICAgaWYgKGlzRmlyc3RGcmFtZSgpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIE92ZXJsYXlpbmcgaW50ZXJsYWNlZCwgdHJhbnNwYXJlbnQgR0lGcyBv
dmVyCisgICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFl
YmVybGkgZGlzcGxheSBoYWNrCisgICAgICAgICAgICAgICAgLy8gcmVxdWlyZXMgc2F2aW5nIHRo
ZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgLy8gYXZvaWQg
amFnZ2llcyBhdCB0aGUgdHJhbnNwYXJlbmN5IGVkZ2VzLiBXZSBhcmUKKyAgICAgICAgICAgICAg
ICAvLyB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNwbGF5IHN1Y2gK
KyAgICAgICAgICAgICAgICAvLyBpbWFnZXMgcHJvZ3Jlc3NpdmVseQorICAgICAgICAgICAgICAg
IGN1cnJlbnRGcmFtZS0+cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gZmFsc2U7CiAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIC8vIGJpdHMgcGVyIHBpeGVsIGlzIGN1cnJlbnRDb21wb25lbnRbOF0m
MHgwNworCiAgICAgICAgICAgICAvLyBoYXMgYSBsb2NhbCBjb2xvcm1hcD8KICAgICAgICAgICAg
IGlmIChjdXJyZW50Q29tcG9uZW50WzhdICYgMHg4MCkgewogICAgICAgICAgICAgICAgIGludCBu
dW1Db2xvcnMgPSAyIDw8IChjdXJyZW50Q29tcG9uZW50WzhdICYgMHg3KTsKICAgICAgICAgICAg
ICAgICBjb25zdCBzaXplX3QgbG9jYWxDb2xvcm1hcEJ5dGVzID0gMyAqIG51bUNvbG9yczsKIAog
ICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIg
aXQgbG9hZHMKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQ
b3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3Jt
YXBTaXplID0gbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3NpdGlvbjsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOwog
CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IGxvY2FsQ29sb3JtYXBCeXRlcykgewogICAgICAg
ICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGhhdmUgZW5vdWdoIGJ5dGVzIHRvIGNvbnN1
bWUgdGhlIGVudGlyZSBjb2xvcm1hcCBhdCBvbmNlLgpAQCAtNzI3LDcwICs3MjYsNTEgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6
ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KQotICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gbG9jYWxDb2xvcm1hcEJ5
dGVzOwogICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFwQnl0ZXM7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFsZXR0ZQotICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0YXJ0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZJbWFn
ZUNvbG9ybWFwOiB7Ci0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9mcmFt
ZXMubGFzdCgpLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIEdF
VE4oMSwgR0lGTFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7Ci0gICAgICAgICAgICAvLyBTdGlsbCB3b3JraW5nIG9u
IHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2suCiAgICAgICAgICAg
ICBjb25zdCBzaXplX3QgYnl0ZXNJbkJsb2NrID0gKmN1cnJlbnRDb21wb25lbnQ7Ci0gICAgICAg
ICAgICBpZiAoYnl0ZXNJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0YQotICAgICAgICAgICAgICAg
IC8vIGlzIGNvcnJ1cHQsIHdlIG1heSBub3QgZ2V0IGFuIGV4cGxpY2l0IHRlcm1pbmF0b3IuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0ICYmICFtX2ZyYW1lQ29udGV4dC0+cm93
c1JlbWFpbmluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlsbGVnYWwg
R0lGLCBidXQgd2UgcmVtYWluIHRvbGVyYW50LgotICAgICAgICAgICAgICAgICAgICBHRVROKDEs
IEdJRlN1YkJsb2NrKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnl0ZXNJ
bkJsb2NrKQogICAgICAgICAgICAgICAgIEdFVE4oYnl0ZXNJbkJsb2NrLCBHSUZMWlcpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFu
eSBtb3JlIGltYWdlcyBpbiB0aGlzIHNlcXVlbmNlLgotICAgICAgICAgICAgICAgIG1faW1hZ2Vz
RGVjb2RlZCsrOwotCi0gICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBmcmFtZSBpcyBu
b3cgY29tcGxldGUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmIG1fZnJhbWVDb250
ZXh0ICYmICFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2ltYWdlc0RlY29kZWQgLSAxLCBtX2Zy
YW1lQ29udGV4dC0+ZGVsYXlUaW1lLCBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxldGUoKSBoYXMg
YWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgotCi0gICAgICAgICAgICAgICAg
Ly8gQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdlCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2Fs
Q29sb3JtYXBEZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pc1RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5pc2hlZCBwYXJzaW5nIG9uZSBmcmFt
ZTsgUHJvY2VzcyBuZXh0IGZyYW1lLgorICAgICAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPnNldENvbXBsZXRl
KCk7CiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZEb25l
OiB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwgd2UgY2FuIHN0b3AuCi0g
ICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmdpZkNv
bXBsZXRlKCk7CisgICAgICAgICAgICBtX3BhcnNlQ29tcGxldGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgorICAgICAgICAgICAgQVNTRVJUKGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc2V0UmVt
YWluaW5nQnl0ZXMobGVuKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgR0lGSW1hZ2VSZWFkZXI6OnNldFJlbWFpbmluZ0J5dGVzKHNpemVfdCByZW1haW5p
bmdCeXRlcykKQEAgLTc5OSwyMiArNzc5LDMxIEBAIHZvaWQgR0lGSW1hZ2VSZWFkZXI6OnNldFJl
bWFpbmluZ0J5dGVzKHNpemVfdCByZW1haW5pbmdCeXRlcykKICAgICBtX2J5dGVzUmVhZCA9IG1f
ZGF0YS0+c2l6ZSgpIC0gcmVtYWluaW5nQnl0ZXM7CiB9CiAKLWJvb2wgR0lGTFpXQ29udGV4dDo6
cHJlcGFyZVRvRGVjb2RlKHVuc2lnbmVkIHJvd1dpZHRoLCBpbnQgZGF0YXNpemUpCit2b2lkIEdJ
RkltYWdlUmVhZGVyOjphZGRGcmFtZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9mcmFtZXMu
aXNFbXB0eSgpIHx8IG1fZnJhbWVzLmxhc3QoKS0+aXNDb21wbGV0ZSgpKQorICAgICAgICBtX2Zy
YW1lcy5hcHBlbmQoYWRvcHRQdHIobmV3IEdJRkZyYW1lQ29udGV4dChtX2ZyYW1lcy5zaXplKCkp
KSk7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRoaXMgbWV0aG9kIHRvIGNsb3NlIHRvIGRvTFpXKCku
Citib29sIEdJRkxaV0NvbnRleHQ6OnByZXBhcmVUb0RlY29kZSgpCiB7CiAgICAgLy8gU2luY2Ug
d2UgdXNlIGEgY29kZXNpemUgb2YgMSBtb3JlIHRoYW4gdGhlIGRhdGFzaXplLCB3ZSBuZWVkIHRv
IGVuc3VyZQogICAgIC8vIHRoYXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0
aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMikuCiAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0
IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBhdCA0MDk1LgotICAgIGlmIChkYXRhc2l6ZSA+
PSBNQVhfTFpXX0JJVFMpCisgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSA+PSBNQVhf
TFpXX0JJVFMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjbGVhckNvZGUgPSAxIDw8IGRh
dGFzaXplOworICAgIGNsZWFyQ29kZSA9IDEgPDwgbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplOwog
ICAgIGlmIChjbGVhckNvZGUgPj0gTUFYX0JZVEVTKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBhdmFpbCA9IGNsZWFyQ29kZSArIDI7CiAgICAgb2xkY29kZSA9IC0xOwotICAgIGNvZGVz
aXplID0gZGF0YXNpemUgKyAxOworICAgIGNvZGVzaXplID0gbV9mcmFtZUNvbnRleHQtPmRhdGFz
aXplICsgMTsKICAgICBjb2RlbWFzayA9ICgxIDw8IGNvZGVzaXplKSAtIDE7CiAgICAgZGF0dW0g
PSBiaXRzID0gMDsKKyAgICBpcGFzcyA9IG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID8gMSA6
IDA7CisgICAgaXJvdyA9IDA7CiAKICAgICAvLyBJbml0aWFsaXplIHRoZSB0YWJsZXMgbGF6aWx5
LCB0aGlzIGFsbG93cyBmcmFtZSBjb3VudCBxdWVyeSB0byB1c2UgbGVzcyBtZW1vcnkuCiAgICAg
c3VmZml4LnJlc2l6ZShNQVhfQllURVMpOwpAQCAtODIyLDggKzgxMSw5IEBAIGJvb2wgR0lGTFpX
Q29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKHVuc2lnbmVkIHJvd1dpZHRoLCBpbnQgZGF0YXNpemUp
CiAgICAgcHJlZml4LnJlc2l6ZShNQVhfQllURVMpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBvdXRw
dXQgcm93IGJ1ZmZlci4KLSAgICByb3dCdWZmZXIucmVzaXplKHJvd1dpZHRoKTsKKyAgICByb3dC
dWZmZXIucmVzaXplKG1fZnJhbWVDb250ZXh0LT53aWR0aCk7CiAgICAgcm93UG9zaXRpb24gPSAw
OworICAgIHJvd3NSZW1haW5pbmcgPSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0OwogCiAgICAgLy8g
Q2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQg
b2YgYmFkIGRhdGEuCiAgICAgc3VmZml4LmZpbGwoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmlu
ZGV4IGFlMmE4YmIyMWNkODMzMTE2YTlkMTc4NjhmYWY4NzM5YmJkZjkzZmMuLmZjYjU5NTEwZjMz
ZmVhNDYwMGE1MjBjMGZhYjJjNDhlZjU2MWVmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBA
IC00Miw2ICs0Miw4IEBACiAvLyBzbyB3ZSB3aWxsIHRvby4KICNpbmNsdWRlICJHSUZJbWFnZURl
Y29kZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKICNkZWZpbmUgTUFYX0xaV19CSVRTICAgICAgICAgIDEyCkBAIC03NSwxNiArNzcsODIgQEAg
ZW51bSBHSUZTdGF0ZSB7CiAgICAgR0lGQ29uc3VtZUNvbW1lbnQKIH07CiAKLS8vIEZyYW1lIG91
dHB1dCBzdGF0ZSBtYWNoaW5lLgotc3RydWN0IEdJRkZyYW1lQ29udGV4dCB7CitzdHJ1Y3QgR0lG
RnJhbWVDb250ZXh0OworCisvLyBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgorLy8gRklYTUU6
IE1ha2UgdGhpcyBhIGNsYXNzIGFuZCBoaWRlIHByaXZhdGUgbWVtYmVycy4KK2NsYXNzIEdJRkxa
V0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGlu
dCBkYXRhc2l6ZTsKKyAgICBHSUZMWldDb250ZXh0KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlciog
Y2xpZW50LCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCkKKyAgICAgICAgOiBzdGFja3Ao
MCkKKyAgICAgICAgLCBjb2Rlc2l6ZSgwKQorICAgICAgICAsIGNvZGVtYXNrKDApCisgICAgICAg
ICwgY2xlYXJDb2RlKDApCisgICAgICAgICwgYXZhaWwoMCkKKyAgICAgICAgLCBvbGRjb2RlKDAp
CisgICAgICAgICwgZmlyc3RjaGFyKDApCisgICAgICAgICwgYml0cygwKQorICAgICAgICAsIGRh
dHVtKDApCisgICAgICAgICwgaXBhc3MoMCkKKyAgICAgICAgLCBpcm93KDApCisgICAgICAgICwg
cm93UG9zaXRpb24oMCkKKyAgICAgICAgLCByb3dzUmVtYWluaW5nKDApCisgICAgICAgICwgbV9j
bGllbnQoY2xpZW50KQorICAgICAgICAsIG1fZnJhbWVDb250ZXh0KGZyYW1lQ29udGV4dCkKKyAg
ICB7IH0KKworICAgIGJvb2wgcHJlcGFyZVRvRGVjb2RlKCk7CisgICAgYm9vbCBvdXRwdXRSb3co
KTsKKyAgICBib29sIGRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0
ZXNJbkJsb2NrKTsKKyAgICBib29sIGhhc1JlbWFpbmluZ1Jvd3MoKSB7IHJldHVybiByb3dzUmVt
YWluaW5nOyB9CisKK3ByaXZhdGU6CisgICAgLy8gTFpXIGRlY29kaW5nIHN0YXRlcyBhbmQgb3V0
cHV0IHN0YXRlcy4KKyAgICBzaXplX3Qgc3RhY2twOyAvLyBDdXJyZW50IHN0YWNrIHBvaW50ZXIu
CisgICAgaW50IGNvZGVzaXplOworICAgIGludCBjb2RlbWFzazsKKyAgICBpbnQgY2xlYXJDb2Rl
OyAvLyBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldC4KKyAgICBpbnQg
YXZhaWw7IC8vIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlvbmFyeS4KKyAg
ICBpbnQgb2xkY29kZTsKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKKyAgICBpbnQgYml0
czsgLy8gTnVtYmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1bSIuCisgICAgaW50IGRhdHVtOyAv
LyAzMi1iaXQgaW5wdXQgYnVmZmVyLgogICAgIGludCBpcGFzczsgLy8gSW50ZXJsYWNlIHBhc3M7
IFJhbmdlcyAxLTQgaWYgaW50ZXJsYWNlZC4KLSAgICBzaXplX3Qgcm93c1JlbWFpbmluZzsgLy8g
Um93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0LgogICAgIHNpemVfdCBpcm93OyAvLyBDdXJyZW50
IG91dHB1dCByb3csIHN0YXJ0aW5nIGF0IHplcm8uCisgICAgc2l6ZV90IHJvd1Bvc2l0aW9uOwor
ICAgIHNpemVfdCByb3dzUmVtYWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQu
CisKKyAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHByZWZpeDsKKyAgICBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4gc3VmZml4OworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsKKyAgICBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4gcm93QnVmZmVyOyAvLyBTaW5nbGUgc2NhbmxpbmUgdGVtcG9y
YXJ5IGJ1ZmZlci4KKworICAgIC8vIEluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5k
IHJlYWQtb25seS4KKyAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OworICAg
IEdJRkZyYW1lQ29udGV4dCogbV9mcmFtZUNvbnRleHQ7Cit9OworCisvLyBEYXRhIHN0cnVjdHVy
ZSBmb3Igb25lIExaVyBibG9jay4KK3N0cnVjdCBHSUZMWldCbG9jayB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR0lGTFpXQmxvY2soc2l6ZV90IHBvc2l0aW9u
LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBibG9ja1Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAg
ICAsIGJsb2NrU2l6ZShzaXplKQorICAgIHsKKyAgICB9CiAKLSAgICAvLyBQYXJhbWV0ZXJzIGZv
ciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZC4KKyAgICBzaXplX3QgYmxvY2tQ
b3NpdGlvbjsKKyAgICBzaXplX3QgYmxvY2tTaXplOworfTsKKworLy8gRnJhbWUgb3V0cHV0IHN0
YXRlIG1hY2hpbmUuCitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSBtZW1iZXJzIHRv
IHByaXZhdGUgc2VjdGlvbi4KKyAgICBpbnQgZnJhbWVJZDsKICAgICB1bnNpZ25lZCB4T2Zmc2V0
OwogICAgIHVuc2lnbmVkIHlPZmZzZXQ7IC8vIFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmln
aW4uCiAgICAgdW5zaWduZWQgd2lkdGg7CkBAIC05Myw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAg
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsg
Ly8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVf
dCBsb2NhbENvbG9ybWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQg
bG9jYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCisgICAg
aW50IGRhdGFzaXplOwogICAgIAogICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5lZCA6IDE7
CiAgICAgYm9vbCBwcm9ncmVzc2l2ZURpc3BsYXkgOiAxOyAvLyBJZiB0cnVlLCBkbyBIYWViZXJs
aSBpbnRlcmxhY2UgaGFjay4KQEAgLTEwMSwxMSArMTcwLDggQEAgcHVibGljOgogCiAgICAgdW5z
aWduZWQgZGVsYXlUaW1lOyAvLyBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHRo
aXMgaW1hZ2UgaW4gYSBtdWx0aS1pbWFnZSBHSUYuCiAKLSAgICBHSUZGcmFtZUNvbnRleHQoKQot
ICAgICAgICA6IGRhdGFzaXplKDApCi0gICAgICAgICwgaXBhc3MoMCkKLSAgICAgICAgLCByb3dz
UmVtYWluaW5nKDApCi0gICAgICAgICwgaXJvdygwKQorICAgIEdJRkZyYW1lQ29udGV4dChpbnQg
aWQpCisgICAgICAgIDogZnJhbWVJZChpZCkKICAgICAgICAgLCB4T2Zmc2V0KDApCiAgICAgICAg
ICwgeU9mZnNldCgwKQogICAgICAgICAsIHdpZHRoKDApCkBAIC0xMTQsNTQgKzE4MCwzNiBAQCBw
dWJsaWM6CiAgICAgICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlz
cG9zZU5vdFNwZWNpZmllZCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAg
ICAgICAgLCBsb2NhbENvbG9ybWFwU2l6ZSgwKQorICAgICAgICAsIGRhdGFzaXplKDApCiAgICAg
ICAgICwgaXNMb2NhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAgLCBwcm9ncmVzc2l2
ZURpc3BsYXkoZmFsc2UpCiAgICAgICAgICwgaW50ZXJsYWNlZChmYWxzZSkKICAgICAgICAgLCBp
c1RyYW5zcGFyZW50KGZhbHNlKQogICAgICAgICAsIGRlbGF5VGltZSgwKQorICAgICAgICAsIG1f
Y3VycmVudEx6d0Jsb2NrKDApCisgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQogICAgIHsK
ICAgICB9CiAgICAgCiAgICAgfkdJRkZyYW1lQ29udGV4dCgpCiAgICAgewogICAgIH0KLX07CiAK
LS8vIExaVyBkZWNvZGVyIHN0YXRlIG1hY2hpbmUuCi0vLyBGSVhNRTogTWFrZSB0aGlzIGEgY2xh
c3MgYW5kIGhpZGUgcHJpdmF0ZSBtZW1iZXJzLgotc3RydWN0IEdJRkxaV0NvbnRleHQgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEdJRkxaV0NvbnRleHQoKQot
ICAgICAgICA6IHN0YWNrcCgwKQotICAgICAgICAsIGNvZGVzaXplKDApCi0gICAgICAgICwgY29k
ZW1hc2soMCkKLSAgICAgICAgLCBjbGVhckNvZGUoMCkKLSAgICAgICAgLCBhdmFpbCgwKQotICAg
ICAgICAsIG9sZGNvZGUoMCkKLSAgICAgICAgLCBmaXJzdGNoYXIoMCkKLSAgICAgICAgLCBiaXRz
KDApCi0gICAgICAgICwgZGF0dW0oMCkKLSAgICAgICAgLCByb3dQb3NpdGlvbigwKQotICAgIHsg
fQorICAgIHZvaWQgYWRkTHp3QmxvY2soc2l6ZV90IHBvc2l0aW9uLCBzaXplX3Qgc2l6ZSkKKyAg
ICB7CisgICAgICAgIG1fbHp3QmxvY2tzLmFwcGVuZChHSUZMWldCbG9jayhwb3NpdGlvbiwgc2l6
ZSkpOworICAgIH0KIAotICAgIGJvb2wgcHJlcGFyZVRvRGVjb2RlKHVuc2lnbmVkIHJvd1dpZHRo
LCBpbnQgZGF0YXNpemUpOworICAgIGJvb2wgZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50LCBib29s
KiBmcmFtZURlY29kZWQpOwogCi0gICAgc2l6ZV90IHN0YWNrcDsgLy8gQ3VycmVudCBzdGFjayBw
b2ludGVyLgotICAgIGludCBjb2Rlc2l6ZTsKLSAgICBpbnQgY29kZW1hc2s7Ci0gICAgaW50IGNs
ZWFyQ29kZTsgLy8gQ29kZXdvcmQgdXNlZCB0byB0cmlnZ2VyIGRpY3Rpb25hcnkgcmVzZXQuCi0g
ICAgaW50IGF2YWlsOyAvLyBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGluIGRpY3Rpb25h
cnkuCi0gICAgaW50IG9sZGNvZGU7Ci0gICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXI7Ci0gICAg
aW50IGJpdHM7IC8vIE51bWJlciBvZiB1bnJlYWQgYml0cyBpbiAiZGF0dW0iLgotICAgIGludCBk
YXR1bTsgLy8gMzItYml0IGlucHV0IGJ1ZmZlci4KLSAgICBzaXplX3Qgcm93UG9zaXRpb247Cisg
ICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisgICAg
dm9pZCBzZXRDb21wbGV0ZSgpIHsgbV9pc0NvbXBsZXRlID0gdHJ1ZTsgfQogCi0gICAgVmVjdG9y
PHVuc2lnbmVkIHNob3J0PiBwcmVmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN1ZmZp
eDsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3RhY2s7Ci0gICAgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+IHJvd0J1ZmZlcjsgLy8gU2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIuCitw
cml2YXRlOgorICAgIE93blB0cjxHSUZMWldDb250ZXh0PiBtX2x6d0NvbnRleHQ7CisgICAgVmVj
dG9yPEdJRkxaV0Jsb2NrPiBtX2x6d0Jsb2NrczsgLy8gTFpXIGJsb2NrcyBmb3IgdGhpcyBmcmFt
ZS4KKyAgICBzaXplX3QgbV9jdXJyZW50THp3QmxvY2s7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7
CiB9OwogCiBjbGFzcyBHSUZJbWFnZVJlYWRlciB7CkBAIC0xNzksMjMgKzIyNywyMSBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAg
LCBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFw
U2l6ZSgwKQotICAgICAgICAsIG1faW1hZ2VzRGVjb2RlZCgwKQotICAgICAgICAsIG1faW1hZ2Vz
Q291bnQoMCkKICAgICAgICAgLCBtX2xvb3BDb3VudChjTG9vcENvdW50Tm90U2VlbikKLSAgICAg
ICAgLCBtX2ZyYW1lQ29udGV4dCgwKQorICAgICAgICAsIG1fY3VycmVudERlY29kaW5nRnJhbWUo
MCkKKyAgICAgICAgLCBtX3BhcnNlRmFpbGVkKGZhbHNlKQorICAgICAgICAsIG1fcGFyc2VDb21w
bGV0ZWQoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIH5HSUZJbWFnZVJlYWRlcigpCiAgICAg
ewotICAgICAgICBkZWxldGUgbV9mcmFtZUNvbnRleHQ7Ci0gICAgICAgIG1fZnJhbWVDb250ZXh0
ID0gMDsKICAgICB9CiAKICAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+IGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQogICAgIGJvb2wgZGVjb2RlKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKTsKIAot
ICAgIGludCBpbWFnZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzQ291bnQ7IH0KKyAg
ICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lcy5zaXplKCk7IH0KICAg
ICBpbnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KIAogICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9ybWFwKCkgY29uc3QKQEAgLTIxNiwxMiArMjYy
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID8gZnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplIDogMDsKICAgICB9CiAKLSAgICBjb25zdCBH
SUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250
ZXh0OyB9CisgICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lc1ttX2N1cnJlbnREZWNvZGluZ0ZyYW1lXS5nZXQoKTsgfQorCisgICAg
Ym9vbCBwYXJzZUZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VGYWlsZWQ7IH0KIAogcHJp
dmF0ZToKLSAgICBib29sIGRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVf
dCBsZW4sIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnksIHVuc2lnbmVkIGhhbHRB
dEZyYW1lKTsKLSAgICBib29sIG91dHB1dFJvdygpOwotICAgIGJvb2wgZG9MWlcoY29uc3QgdW5z
aWduZWQgY2hhciAqLCBzaXplX3QpOworICAgIGJvb2wgcGFyc2Uoc2l6ZV90IGRhdGFQb3NpdGlv
biwgc2l6ZV90IGxlbiwgYm9vbCBwYXJzZVNpemVPbmx5KTsKICAgICB2b2lkIHNldFJlbWFpbmlu
Z0J5dGVzKHNpemVfdCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhKHNpemVfdCBk
YXRhUG9zaXRpb24pIGNvbnN0CkBAIC0yMjksNiArMjc1LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihtX2RhdGEtPmRh
dGEoKSkgKyBkYXRhUG9zaXRpb247CiAgICAgfQogCisgICAgdm9pZCBhZGRGcmFtZUlmTmVjZXNz
YXJ5KCk7CisgICAgYm9vbCBpc0ZpcnN0RnJhbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZnJhbWVzLmlzRW1wdHkoKSB8fCAobV9mcmFtZXMuc2l6ZSgpID09IDF1ICYmICFtX2Zy
YW1lc1swXS0+aXNDb21wbGV0ZSgpKTsKKyAgICB9CisKICAgICBXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8gUGFyc2luZyBzdGF0ZSBtYWNoaW5lLgpAQCAtMjQ0
LDE1ICsyOTYsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNHbG9iYWxDb2xvcm1hcERlZmlu
ZWQ7CiAgICAgc2l6ZV90IG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbjsgLy8gKDMqIE1BWF9DT0xP
UlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1hcCBpZiBsb2NhbCBub3Qgc3VwcGxpZWQsIDMgYnl0
ZXMgZm9yIGVhY2ggY29sb3IuCiAgICAgaW50IG1fZ2xvYmFsQ29sb3JtYXBTaXplOyAvLyBTaXpl
IG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4KLSAgICB1bnNpZ25lZCBtX2ltYWdlc0RlY29kZWQ7
IC8vIENvdW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzLgotICAgIGludCBt
X2ltYWdlc0NvdW50OyAvLyBDb3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGlu
ZyBpbmNvbXBsZXRlIGZyYW1lcykuCiAgICAgaW50IG1fbG9vcENvdW50OyAvLyBOZXRzY2FwZSBz
cGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbCB0aGUgbnVtYmVyIG9mIGFuaW1hdGlv
biBsb29wcyBhIEdJRiByZW5kZXJzLgogICAgIAotICAgIEdJRkZyYW1lQ29udGV4dCogbV9mcmFt
ZUNvbnRleHQ7Ci0KLSAgICBHSUZMWldDb250ZXh0IG1fbHp3Q29udGV4dDsKKyAgICBWZWN0b3I8
T3duUHRyPEdJRkZyYW1lQ29udGV4dD4gPiBtX2ZyYW1lczsKKyAgICBzaXplX3QgbV9jdXJyZW50
RGVjb2RpbmdGcmFtZTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fZGF0
YTsKKyAgICBib29sIG1fcGFyc2VGYWlsZWQ7CisgICAgYm9vbCBtX3BhcnNlQ29tcGxldGVkOwog
fTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMzIyODM3YmE0MmQx
NmIzMmFiOGZkZTFhODlhMjk1OTNiYTEyNzUxYi4uMDFmMTU4ZGI5YmU1ODliYjc5NDIzYjFiMDIx
OTllZTZmYzJjZmMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtODEyLDYgKzgx
MiwyMiBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAg
ICAgJ3RhcmdldF9uYW1lJzogJ2dpZl9kZWNvZGVyJywKKyAgICAgICAgICAgICd0eXBlJzogJ2V4
ZWN1dGFibGUnLAorICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAg
ICAnLi4vLi4vV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAorICAgICAgICAgICAgICAgICcuLi8u
Li9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOndlYmNvcmUnLAorICAgICAgICAgICAg
ICAgICd3ZWJraXRfdGVzdF9zdXBwb3J0JywKKyAgICAgICAgICAgICAgICAnd2Via2l0JywKKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAnZGVmaW5lcyc6IFsKKyAgICAgICAgICAgICAgICAn
V0VCS0lUX0lNUExFTUVOVEFUSU9OPTEnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdz
b3VyY2VzJzogWworICAgICAgICAgICAgICAgICdzcmMvZ2lmX2RlY29kZXIuY2MnLAorICAgICAg
ICAgICAgXSwKKyAgICAgICAgfSwKKyAgICAgICAgewogICAgICAgICAgICAgJ3RhcmdldF9uYW1l
JzogJ3dlYmtpdF90ZXN0X3N1cHBvcnQnLAogICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCiAg
ICAgICAgICAgICAgICAgWydpbnNpZGVfY2hyb21pdW1fYnVpbGQ9PTEgYW5kIGNvbXBvbmVudD09
InNoYXJlZF9saWJyYXJ5IicsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL2dpZl9kZWNvZGVyLmNjIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvZ2lmX2RlY29k
ZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGEwZGFjNDMxMDk1NDJjM2NiMDQwZTdkNWI2Y2EyNDk1ZDAyMmI4
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL2dpZl9kZWNv
ZGVyLmNjCkBAIC0wLDAgKzEsMjQ4IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8
c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJLaXQu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
c3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gcmVhZEZpbGUoY29uc3QgY2hhciogZmlsZU5hbWUpCit7CisgICAgRklMRSAqIGZp
bGU7CisKKyAgICBmaWxlID0gZm9wZW4gKGZpbGVOYW1lLCAicmIiKTsKKyAgICBpZiAoIWZpbGUp
CisgICAgICAgIGV4aXQoMSk7CisKKyAgICAvLyBvYnRhaW4gZmlsZSBzaXplOgorICAgIGZzZWVr
KGZpbGUsIDAsIFNFRUtfRU5EKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGZ0ZWxsKGZpbGUpOworICAg
IHJld2luZChmaWxlKTsKKworICAgIC8vIGFsbG9jYXRlIG1lbW9yeSB0byBjb250YWluIHRoZSB3
aG9sZSBmaWxlOgorICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFy
W3NpemVdOworICAgIGZyZWFkKGJ1ZmZlciwgMSwgc2l6ZSwgZmlsZSk7CisKKyAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoYnVmZmVyLCBzaXplKTsKK30KKworI2RlZmluZSBTQ0hFRFVM
RShpKSAgXAorICAgIHRlbXAgPSBzY2hlZHVsZVsoaS0zKSYweEZdIF4gc2NoZWR1bGVbKGktOCkm
MHhGXSBeIHNjaGVkdWxlWyhpLTE0KSYweEZdIF4gc2NoZWR1bGVbKGktMTYpJjB4Rl07ICBcCisg
ICAgc2NoZWR1bGVbaSAmIDB4Rl0gPSB0ZW1wIDw8IDEgfCB0ZW1wID4+IDMxOworCisjZGVmaW5l
IFJPVU5EMGEoYSxiLGMsZCxlLGkpICBcCisgICAgc2NoZWR1bGVbaV0gPSAoYmxvY2tbaV0gPDwg
MjQpIHwgKChibG9ja1tpXSAmIDB4RkYwMCkgPDwgOCkgfCAoKGJsb2NrW2ldID4+IDgpICYgMHhG
RjAwKSB8IChibG9ja1tpXSA+PiAyNCk7ICBcCisgICAgUk9VTkRUQUlMKGEsIGIsIGUsICgoYiAm
IGMpIHwgKH5iICYgZCkpLCBpLCAweDVBODI3OTk5KQorCisjZGVmaW5lIFJPVU5EMGIoYSxiLGMs
ZCxlLGkpICBcCisgICAgU0NIRURVTEUoaSkgIFwKKyAgICBST1VORFRBSUwoYSwgYiwgZSwgKChi
ICYgYykgfCAofmIgJiBkKSksIGksIDB4NUE4Mjc5OTkpCisKKyNkZWZpbmUgUk9VTkQxKGEsYixj
LGQsZSxpKSAgXAorICAgIFNDSEVEVUxFKGkpICBcCisgICAgUk9VTkRUQUlMKGEsIGIsIGUsIChi
IF4gYyBeIGQpLCBpLCAweDZFRDlFQkExKQorCisjZGVmaW5lIFJPVU5EMihhLGIsYyxkLGUsaSkg
IFwKKyAgICBTQ0hFRFVMRShpKSAgXAorICAgIFJPVU5EVEFJTChhLCBiLCBlLCAoKGIgJiBjKSBe
IChiICYgZCkgXiAoYyAmIGQpKSwgaSwgMHg4RjFCQkNEQykKKworI2RlZmluZSBST1VORDMoYSxi
LGMsZCxlLGkpICBcCisgICAgU0NIRURVTEUoaSkgIFwKKyAgICBST1VORFRBSUwoYSwgYiwgZSwg
KGIgXiBjIF4gZCksIGksIDB4Q0E2MkMxRDYpCisKKyNkZWZpbmUgUk9VTkRUQUlMKGEsYixlLGYs
aSxrKSAgXAorICAgIGUgKz0gKGEgPDwgNSB8IGEgPj4gMjcpICsgZiArIGsgKyBzY2hlZHVsZVtp
ICYgMHhGXTsgIFwKKyAgICBiID0gYiA8PCAzMCB8IGIgPj4gMjsKKwordm9pZCBzaGExX2NvbXBy
ZXNzKHVpbnQzMl90ICpzdGF0ZSwgdWludDMyX3QgKmJsb2NrKSB7CisgICAgdWludDMyX3QgYSA9
IHN0YXRlWzBdOworICAgIHVpbnQzMl90IGIgPSBzdGF0ZVsxXTsKKyAgICB1aW50MzJfdCBjID0g
c3RhdGVbMl07CisgICAgdWludDMyX3QgZCA9IHN0YXRlWzNdOworICAgIHVpbnQzMl90IGUgPSBz
dGF0ZVs0XTsKKworICAgIHVpbnQzMl90IHNjaGVkdWxlWzE2XTsKKyAgICB1aW50MzJfdCB0ZW1w
OworICAgIFJPVU5EMGEoYSwgYiwgYywgZCwgZSwgIDApCisgICAgUk9VTkQwYShlLCBhLCBiLCBj
LCBkLCAgMSkKKyAgICBST1VORDBhKGQsIGUsIGEsIGIsIGMsICAyKQorICAgIFJPVU5EMGEoYywg
ZCwgZSwgYSwgYiwgIDMpCisgICAgUk9VTkQwYShiLCBjLCBkLCBlLCBhLCAgNCkKKyAgICBST1VO
RDBhKGEsIGIsIGMsIGQsIGUsICA1KQorICAgIFJPVU5EMGEoZSwgYSwgYiwgYywgZCwgIDYpCisg
ICAgUk9VTkQwYShkLCBlLCBhLCBiLCBjLCAgNykKKyAgICBST1VORDBhKGMsIGQsIGUsIGEsIGIs
ICA4KQorICAgIFJPVU5EMGEoYiwgYywgZCwgZSwgYSwgIDkpCisgICAgUk9VTkQwYShhLCBiLCBj
LCBkLCBlLCAxMCkKKyAgICBST1VORDBhKGUsIGEsIGIsIGMsIGQsIDExKQorICAgIFJPVU5EMGEo
ZCwgZSwgYSwgYiwgYywgMTIpCisgICAgUk9VTkQwYShjLCBkLCBlLCBhLCBiLCAxMykKKyAgICBS
T1VORDBhKGIsIGMsIGQsIGUsIGEsIDE0KQorICAgIFJPVU5EMGEoYSwgYiwgYywgZCwgZSwgMTUp
CisgICAgUk9VTkQwYihlLCBhLCBiLCBjLCBkLCAxNikKKyAgICBST1VORDBiKGQsIGUsIGEsIGIs
IGMsIDE3KQorICAgIFJPVU5EMGIoYywgZCwgZSwgYSwgYiwgMTgpCisgICAgUk9VTkQwYihiLCBj
LCBkLCBlLCBhLCAxOSkKKyAgICBST1VORDEoYSwgYiwgYywgZCwgZSwgMjApCisgICAgUk9VTkQx
KGUsIGEsIGIsIGMsIGQsIDIxKQorICAgIFJPVU5EMShkLCBlLCBhLCBiLCBjLCAyMikKKyAgICBS
T1VORDEoYywgZCwgZSwgYSwgYiwgMjMpCisgICAgUk9VTkQxKGIsIGMsIGQsIGUsIGEsIDI0KQor
ICAgIFJPVU5EMShhLCBiLCBjLCBkLCBlLCAyNSkKKyAgICBST1VORDEoZSwgYSwgYiwgYywgZCwg
MjYpCisgICAgUk9VTkQxKGQsIGUsIGEsIGIsIGMsIDI3KQorICAgIFJPVU5EMShjLCBkLCBlLCBh
LCBiLCAyOCkKKyAgICBST1VORDEoYiwgYywgZCwgZSwgYSwgMjkpCisgICAgUk9VTkQxKGEsIGIs
IGMsIGQsIGUsIDMwKQorICAgIFJPVU5EMShlLCBhLCBiLCBjLCBkLCAzMSkKKyAgICBST1VORDEo
ZCwgZSwgYSwgYiwgYywgMzIpCisgICAgUk9VTkQxKGMsIGQsIGUsIGEsIGIsIDMzKQorICAgIFJP
VU5EMShiLCBjLCBkLCBlLCBhLCAzNCkKKyAgICBST1VORDEoYSwgYiwgYywgZCwgZSwgMzUpCisg
ICAgUk9VTkQxKGUsIGEsIGIsIGMsIGQsIDM2KQorICAgIFJPVU5EMShkLCBlLCBhLCBiLCBjLCAz
NykKKyAgICBST1VORDEoYywgZCwgZSwgYSwgYiwgMzgpCisgICAgUk9VTkQxKGIsIGMsIGQsIGUs
IGEsIDM5KQorICAgIFJPVU5EMihhLCBiLCBjLCBkLCBlLCA0MCkKKyAgICBST1VORDIoZSwgYSwg
YiwgYywgZCwgNDEpCisgICAgUk9VTkQyKGQsIGUsIGEsIGIsIGMsIDQyKQorICAgIFJPVU5EMihj
LCBkLCBlLCBhLCBiLCA0MykKKyAgICBST1VORDIoYiwgYywgZCwgZSwgYSwgNDQpCisgICAgUk9V
TkQyKGEsIGIsIGMsIGQsIGUsIDQ1KQorICAgIFJPVU5EMihlLCBhLCBiLCBjLCBkLCA0NikKKyAg
ICBST1VORDIoZCwgZSwgYSwgYiwgYywgNDcpCisgICAgUk9VTkQyKGMsIGQsIGUsIGEsIGIsIDQ4
KQorICAgIFJPVU5EMihiLCBjLCBkLCBlLCBhLCA0OSkKKyAgICBST1VORDIoYSwgYiwgYywgZCwg
ZSwgNTApCisgICAgUk9VTkQyKGUsIGEsIGIsIGMsIGQsIDUxKQorICAgIFJPVU5EMihkLCBlLCBh
LCBiLCBjLCA1MikKKyAgICBST1VORDIoYywgZCwgZSwgYSwgYiwgNTMpCisgICAgUk9VTkQyKGIs
IGMsIGQsIGUsIGEsIDU0KQorICAgIFJPVU5EMihhLCBiLCBjLCBkLCBlLCA1NSkKKyAgICBST1VO
RDIoZSwgYSwgYiwgYywgZCwgNTYpCisgICAgUk9VTkQyKGQsIGUsIGEsIGIsIGMsIDU3KQorICAg
IFJPVU5EMihjLCBkLCBlLCBhLCBiLCA1OCkKKyAgICBST1VORDIoYiwgYywgZCwgZSwgYSwgNTkp
CisgICAgUk9VTkQzKGEsIGIsIGMsIGQsIGUsIDYwKQorICAgIFJPVU5EMyhlLCBhLCBiLCBjLCBk
LCA2MSkKKyAgICBST1VORDMoZCwgZSwgYSwgYiwgYywgNjIpCisgICAgUk9VTkQzKGMsIGQsIGUs
IGEsIGIsIDYzKQorICAgIFJPVU5EMyhiLCBjLCBkLCBlLCBhLCA2NCkKKyAgICBST1VORDMoYSwg
YiwgYywgZCwgZSwgNjUpCisgICAgUk9VTkQzKGUsIGEsIGIsIGMsIGQsIDY2KQorICAgIFJPVU5E
MyhkLCBlLCBhLCBiLCBjLCA2NykKKyAgICBST1VORDMoYywgZCwgZSwgYSwgYiwgNjgpCisgICAg
Uk9VTkQzKGIsIGMsIGQsIGUsIGEsIDY5KQorICAgIFJPVU5EMyhhLCBiLCBjLCBkLCBlLCA3MCkK
KyAgICBST1VORDMoZSwgYSwgYiwgYywgZCwgNzEpCisgICAgUk9VTkQzKGQsIGUsIGEsIGIsIGMs
IDcyKQorICAgIFJPVU5EMyhjLCBkLCBlLCBhLCBiLCA3MykKKyAgICBST1VORDMoYiwgYywgZCwg
ZSwgYSwgNzQpCisgICAgUk9VTkQzKGEsIGIsIGMsIGQsIGUsIDc1KQorICAgIFJPVU5EMyhlLCBh
LCBiLCBjLCBkLCA3NikKKyAgICBST1VORDMoZCwgZSwgYSwgYiwgYywgNzcpCisgICAgUk9VTkQz
KGMsIGQsIGUsIGEsIGIsIDc4KQorICAgIFJPVU5EMyhiLCBjLCBkLCBlLCBhLCA3OSkKKworICAg
IHN0YXRlWzBdICs9IGE7CisgICAgc3RhdGVbMV0gKz0gYjsKKyAgICBzdGF0ZVsyXSArPSBjOwor
ICAgIHN0YXRlWzNdICs9IGQ7CisgICAgc3RhdGVbNF0gKz0gZTsKK30KKwordm9pZCBzaGExX2hh
c2godWludDhfdCAqbWVzc2FnZSwgdWludDMyX3QgbGVuLCB1aW50MzJfdCAqaGFzaCkgeworICAg
IGhhc2hbMF0gPSAweDY3NDUyMzAxOworICAgIGhhc2hbMV0gPSAweEVGQ0RBQjg5OworICAgIGhh
c2hbMl0gPSAweDk4QkFEQ0ZFOworICAgIGhhc2hbM10gPSAweDEwMzI1NDc2OworICAgIGhhc2hb
NF0gPSAweEMzRDJFMUYwOworCisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSArIDY0IDw9
IGxlbjsgaSArPSA2NCkKKyAgICAgICAgc2hhMV9jb21wcmVzcyhoYXNoLCAodWludDMyX3QqKSht
ZXNzYWdlICsgaSkpOworCisgICAgdWludDMyX3QgYmxvY2tbMTZdOworICAgIHVpbnQ4X3QgKmJ5
dGVCbG9jayA9ICh1aW50OF90KilibG9jazsKKworICAgIGludCByZW0gPSBsZW4gLSBpOworICAg
IG1lbWNweShieXRlQmxvY2ssIG1lc3NhZ2UgKyBpLCByZW0pOworCisgICAgYnl0ZUJsb2NrW3Jl
bV0gPSAweDgwOworICAgIHJlbSsrOworICAgIGlmICg2NCAtIHJlbSA+PSA4KQorICAgICAgICBt
ZW1zZXQoYnl0ZUJsb2NrICsgcmVtLCAwLCA1NiAtIHJlbSk7CisgICAgZWxzZSB7CisgICAgICAg
IG1lbXNldChieXRlQmxvY2sgKyByZW0sIDAsIDY0IC0gcmVtKTsKKyAgICAgICAgc2hhMV9jb21w
cmVzcyhoYXNoLCBibG9jayk7CisgICAgICAgIG1lbXNldChibG9jaywgMCwgNTYpOworICAgIH0K
KworICAgIHVpbnQ2NF90IGxvbmdMZW4gPSAoKHVpbnQ2NF90KWxlbikgPDwgMzsKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgODsgaSsrKQorICAgICAgICBieXRlQmxvY2tbNjQgLSAxIC0gaV0gPSAodWlu
dDhfdCkobG9uZ0xlbiA+PiAoaSAqIDgpKTsKKyAgICBzaGExX2NvbXByZXNzKGhhc2gsIGJsb2Nr
KTsKK30KKworY2xhc3MgRHVtbXlXZWJLaXRQbGF0Zm9ybVN1cHBvcnQgOiBwdWJsaWMgV2ViS2l0
OjpQbGF0Zm9ybSB7CisgIHB1YmxpYzoKKyAgICB+RHVtbXlXZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHVu
c2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkge30KKworICAgIER1bW15V2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCkge30KK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikgeworICAgIGlmIChhcmdjID09IDEpIHsKKyAgICAgICAgY291dCA8PCAiZ2lmX2RlY29kZXIg
W2ZpbGVdIiA8PCBlbmRsOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBXZWJLaXQ6
OmluaXRpYWxpemVXaXRob3V0VjgobmV3IER1bW15V2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkpOwor
CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1h
Z2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhID0gcmVhZEZpbGUoYXJndlsxXSk7CisgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRh
LmdldCgpLCB0cnVlKTsKKworICAgIGNvdXQgPDwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDw8IGVu
ZGw7CisKKyAgICBpbnQgZnJhbWVzID0gZGVjb2Rlci0+ZnJhbWVDb3VudCgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUg
PSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaSk7CisKKyAgICAgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHVpbnQzMl90IGhhc2hbNV07CisgICAg
ICAgIHNoYTFfaGFzaCgodWludDhfdCopZnJhbWUtPmdldFNrQml0bWFwKCkuZ2V0UGl4ZWxzKCks
CisgICAgICAgICAgICAgICAgICBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5nZXRTaXplKCksCisgICAg
ICAgICAgICAgICAgICBoYXNoKTsKKworICAgICAgICBjb3V0IDw8IGkgPDwgIiAiCisgICAgICAg
ICAgICAgPDwgZnJhbWUtPnN0YXR1cygpIDw8ICIgIgorICAgICAgICAgICAgIDw8IGhhc2hbMF0g
PDwgIiAiCisgICAgICAgICAgICAgPDwgaGFzaFsxXSA8PCAiICIKKyAgICAgICAgICAgICA8PCBo
YXNoWzJdIDw8ICIgIgorICAgICAgICAgICAgIDw8IGhhc2hbM10gPDwgIiAiCisgICAgICAgICAg
ICAgPDwgaGFzaFs0XQorICAgICAgICAgICAgIDw8IGVuZGw7CisgICAgfQorICAgIGNvdXQgPDwg
ZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgPDwgZW5kbDsKKworICAgIHJldHVybiAwOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVz
dC5jcHAKaW5kZXggYTdiZjVkNTUwZjQzYmZmOGJiYjAzYmE2NzZiZWU2ZDliM2Q5YTE5Ny4uYWYy
OTcxZDRhM2JkMGJlODVmODdjNmYxYzMyMDdhZWZmMjk1ZGMxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC0xNzUs
MTUgKzE3NSwxOCBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGJyb2tlblNlY29uZEZyYW1l
KQogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwogICAgIGRlY29kZXItPnNldERhdGEoZGF0
YS5nZXQoKSwgdHJ1ZSk7CiAKLSAgICBFWFBFQ1RfRVEoMXUsIGRlY29kZXItPmZyYW1lQ291bnQo
KSk7CisgICAgLy8gVGhlcmUgYXJlIHR3byBmcmFtZXMgc2Nhbm5lZCBiZWNhdXNlIHdlIGhhdmUg
bm90IGVuY291bnRlcmVkICBhIGRlY29kaW5nCisgICAgLy8gZXJyb3IgeWV0LgorICAgIEVYUEVD
VF9FUSgydSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKIAogICAgIEltYWdlRnJhbWUqIGZyYW1l
ID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwogICAgIEVYUEVDVF9FUShJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOwogICAgIEVYUEVDVF9FUSgxNiwg
ZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CiAgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+
Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CiAKKyAgICAvLyBXZSBjYW4gZGVjb2RlIHRoZSBzZWNv
bmQgZnJhbWUgZXZlbiBpZiBpdCBpcyBicm9rZW4uCiAgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGZyYW1lKTsKKyAgICBFWFBFQ1Rf
VFJVRShmcmFtZSk7CiAgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+
cmVwZXRpdGlvbkNvdW50KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192360</attachid>
            <date>2013-03-09 17:51:54 -0800</date>
            <delta_ts>2013-03-09 17:57:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130309174755.patch</filename>
            <type>text/plain</type>
            <size>48886</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1OTA3YmU2ZDEyNzMw
ZTMzOGZlN2E5MGQ4MDI1ZDU4MDY3OTY1Ny4uMTI0NjFmMjRhNmJhMTlhMTU4YjFiOTE5ZmIwODI4
M2IyYzYyMjQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTAzLTA5ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
Y291bnQgZnJhbWVzIGFuZCBkZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9CSkVDVElWRQorCisgICAgICAgIFRoaXMgY2hh
bmdlIGhhcyB0aGUgb2JqZWN0aXZlIG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSByZWFkaW5nIEdJ
RgorICAgICAgICBmaWxlcy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gcGFyc2UgdGhlIGVudGly
ZSBHSUYgZmlsZSBpbiBvbmUgcGFzcworICAgICAgICBhbmQgc2F2ZXMgaW5mb3JtYXRpb24gYWJv
dXQgZWFjaCBmcmFtZSwgc3VjaCB0aGF0IGRlY29kaW5nIGluIGEgbGF0ZXIKKyAgICAgICAgcGFz
cyBkb2VzIG5vdCBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlIGFnYWluLgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGZpeGVkIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIG9mIGRlY29kaW5nIEdJRiBmaWxl
cyB3aGVuCisgICAgICAgIGl0IGlzIHJlY2VpdmVkIHZlcnkgc2xvd2x5LgorCisgICAgICAgIEFM
R09SSVRITQorCisgICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gZGl2aWRlcyB0aGUgZGVjb2Rp
bmcgcHJvY2VzcyBpbnRvIHR3byBzZXBhcmF0ZQorICAgICAgICBzdGVwczogcGFyc2UgYW5kIExa
VyBkZWNvZGluZy4KKworICAgICAgICBJbiB0aGUgcGFyc2Ugc3RlcCwgdGhlIHN0YXRlIG1hY2hp
bmUgaXMgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcKKyAgICAgICAgaW1wbGVtZW50YWl0b24uIEhv
d2V2ZXIgdGhpcyBhbGdvcml0aG0gZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb2RpbmcKKyAgICAg
ICAgd2hpbGUgc2Nhbm5pbmcgdGhyb3VnaCB0aGUgZmlsZS4gSW50ZWFkIGl0IGNyZWF0ZXMgYSBu
ZXcgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgICAgZm9yIGNhY2hpbmcgYWxsIGZyYW1lIGluZm9ybWF0
aW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMWlcgYmxvY2tzLgorCisgICAgICAgIElmIGEgZnVs
bCBkZWNvZGUgaXMgcmVxdWVzdGVkIHRoZW4gTFpXIGRlY29kaW5nIGlzIHBlcmZvcm1lZC4gVGhp
cworICAgICAgICBpbXBsZW1lbnRhdGlvbiBsb29rIHRocm91Z2ggYWxsIGZyYW1lIGluZm9ybWF0
aW9uIHNhdmVkIGFuZCBkZWNvZGUKKyAgICAgICAgZWFjaCBmcmFtZSBzZXF1ZW50aWFsbHkgdW50
aWwgdGhlIHRhcmdldCBmcmFtZSBpcyByZWFjaGVkLgorCisgICAgICAgIEJlY2F1c2Ugb2YgdGhl
IHNlcGFyYXRlIG9mIHBhcnNlIGFuZCBkZWNvZGUsIGVhY2ggZnJhbWUgY2FuIGJlIGRlY29kZWQK
KyAgICAgICAgc2VwYXJhdGVseS4gVGhpcyBwYXZlcyB0aGUgd2F5IHRvIHN1cHBvcnQgc2Vla2lu
ZyBpbiBHSUYgZmlsZS4KKworICAgICAgICBURVNUSU5HCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVyZSBhcmUgYWxyZWFkeSBHSUYgdW5pdCB0ZXN0cyBmb3IgZnVuY3Rpb25hbCB0ZXN0aW5n
LgorICAgICAgICBFeGhhdXN0aXZlIHRlc3RpbmcgaXMgZG9uZSBsb2NhbGx5IHdpdGggYSBjb3Jw
dXMgb2YgNjBrIGltYWdlcy4KKyAgICAgICAgSSBtaXhlZCB0aGUgY29ycHVzIHdpdGggc29tZSBn
ZW5lcmF0ZWQgYmFkIGRhdGEgYW5kIHRydW5jYXRlZCBmaWxlcy4KKyAgICAgICAgVGhlIHJlc3Vs
dHMgd2FzIGJpdC1leGFjdCBhcyB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2l0aCBvbmx5
CisgICAgICAgIDIgY291bnRzIG9mIGRpZmZlcmVuY2VzLiBJbiB0aGVzZSB0d28gaW5zdGFuY2Vz
IHRoZSBuZXcgYWxnb3JpdGhtIGNhbgorICAgICAgICBkZWNvZGUgb25lIG1vcmUgYnJva2VuIGlt
YWdlIGF0IHRoZSBlbmQsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICBvdGhlciBp
bWFnZSB2aWV3ZXJzLCBlLmcuIFByZXZpZXcgb24gTWFjLgorCisgICAgICAgIFRoZXNlIHdlcmUg
YWxzbyBubyBjcmFzaGluZyB3aGVuIGRlY29kaW5nIHRoZSBlbnRpcmUgY29ycHVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAg
IChHSUZMWldDb250ZXh0OjpvdXRwdXRSb3cpOgorICAgICAgICAoR0lGTFpXQ29udGV4dDo6ZG9M
WlcpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1h
Z2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmFkZEZyYW1lSWZOZWNlc3NhcnkpOgorICAgICAgICAoR0lG
TFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkxaV0NvbnRleHQ6OkdJ
RkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGTFpXQ29udGV4dCk6CisgICAgICAgIChHSUZMWldD
b250ZXh0OjpoYXNSZW1haW5pbmdSb3dzKToKKyAgICAgICAgKEdJRkxaV0Jsb2NrKToKKyAgICAg
ICAgKEdJRkxaV0Jsb2NrOjpHSUZMWldCbG9jayk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQp
OgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAo
R0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1lQ29u
dGV4dDo6YWRkTHp3QmxvY2spOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojppc0NvbXBsZXRl
KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6c2V0Q29tcGxldGUpOgorICAgICAgICAoR0lG
SW1hZ2VSZWFkZXI6OkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+
R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmltYWdlc0NvdW50KToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpmcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1h
Z2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlRmFpbGVkKToKKyAgICAg
ICAgKEdJRkltYWdlUmVhZGVyOjppc0ZpcnN0RnJhbWUpOgorCiAyMDEzLTAzLTA3ICBSb2JlcnQg
SG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNDA5MDcp
OiBJbmNvcnJlY3QgYmFzZWxpbmUgZm9yIGNlbGxzIHdpdGggbWVkaWEgY29udGVudCBkdXJpbmcg
bG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5ZjQ0NzQzMTY2NDljMDk2ZjVhNGU4
YzY3MGViMWUzYzkwYjE3NDM3Li5lNmQ5ZTA2MzAzMTk4MWY1OTNiYTI0NDUzZTA1OWUyMzFhMTYx
NTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAz
LTA5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VS
ZWFkZXIgdG8gY291bnQgZnJhbWVzIGFuZCBkZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBHSUZJbWFnZURlY29k
ZXJUZXN0IGR1ZSB0byBjaGFuZ2VzIGluIGRlY29kaW5nIGFsZ29yaXRobS4KKyAgICAgICAgVGhl
IG5ldyBhbGdvcml0aG0gaXMgbW9yZSB0b2xlcmFudCB0byBiYWQgR0lGIGRhdGEuIEl0IGlzIGFi
bGUKKyAgICAgICAgdG8gZGVjb2RlIHRoZSBsYXN0IGJyb2tlbiBmcmFtZSwgdXBkYXRpbmcgdW5p
dCB0ZXN0IGFjY29yZGluZ2x5LgorCisgICAgICAgICogdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVz
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorCiAyMDEzLTAzLTA4ICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiAg
Um9sbGVkIENocm9taXVtIERFUFMgdG8gcjE4NzAzNy4gIFJlcXVlc3RlZCBieQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmNwcAppbmRleCBiYjg4NDE1YmIwYzU2NThkMDIyYTgxYWU1NDdiY2MxOTdk
ZWMyYzAwLi5jODIzMzA0Y2Y2MGQ1MjhhOTgwODY0ZjUzZDU1NTY5NGE3MWZhMzU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiR0lG
SW1hZ2VSZWFkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEdJRkltYWdl
RGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9w
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6
IEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0g
ICAgLCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KHRydWUpCiAgICAgLCBt
X3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9vcE9uY2UpCiB7CiB9CkBAIC01Miw5ICs1Miw2
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7CiAgICAgaWYgKG1fcmVhZGVyKQogICAgICAgICBtX3JlYWRlci0+c2V0RGF0
YShkYXRhKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gcmVzY2FuIHRoZSBmcmFtZSBjb3VudCwgYXMg
dGhlIG5ldyBkYXRhIG1heSBoYXZlIGNoYW5nZWQgaXQuCi0gICAgbV9hbHJlYWR5U2Nhbm5lZFRo
aXNEYXRhRm9yRnJhbWVDb3VudCA9IGZhbHNlOwogfQogCiBib29sIEdJRkltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCkKQEAgLTc5LDIxICs3Niw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
OjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiAKIHNpemVfdCBHSUZJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewotICAgIGlmICghbV9hbHJlYWR5U2Nhbm5lZFRo
aXNEYXRhRm9yRnJhbWVDb3VudCkgewotICAgICAgICAvLyBGSVhNRTogU2Nhbm5pbmcgYWxsIHRo
ZSBkYXRhIGhhcyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEgd2VyZSB0bwotICAgICAgICAv
LyBjb21lIGluIHJlYWxseSBzbG93bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8g
Y2xvbmUgb3VyCi0gICAgICAgIC8vIGV4aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZSBz
dGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBjcmF3bAotICAgICAgICAvLyBhbGwgdGhlIGRhdGEu
ICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQgSW1hZ2VJTyBkb2VzIG9uCi0g
ICAgICAgIC8vIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2Fp
bikuCi0gICAgICAgIEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsKLSAgICAgICAgcmVhZGVyLnNl
dERhdGEobV9kYXRhKTsKLSAgICAgICAgcmVhZGVyLmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwotICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhp
c0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJl
c2l6ZShyZWFkZXIuaW1hZ2VzQ291bnQoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVhZGVyLmltYWdlc0NvdW50KCk7ICsraSkKLSAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgfQotCisg
ICAgZGVjb2RlKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgR0lGRnJhbWVD
b3VudFF1ZXJ5KTsKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKIH0KIApA
QCAtMTA3LDggKzkwLDggQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkg
Y29uc3QKICAgICAvLyBzaG91bGQgZGVmYXVsdCB0byBsb29waW5nIG9uY2UgKHRoZSBpbml0aWFs
IHZhbHVlIGZvcgogICAgIC8vIHxtX3JlcGV0aXRpb25Db3VudHwpLgogICAgIC8vCi0gICAgLy8g
VGhlcmUgYXJlIHR3byBhZGRpdGlvbmFsIHdyaW5rbGVzIGhlcmUuICBGaXJzdCwgSW1hZ2VTb3Vy
Y2U6OmNsZWFyKCkgbWF5Ci0gICAgLy8gZGVzdHJveSB0aGUgcmVhZGVyLCBtYWtpbmcgdGhlIHJl
c3VsdCBmcm9tIHRoZSByZWFkZXIgX2xlc3NfCisgICAgLy8gVGhlcmUgYXJlIHNvbWUgYWRkaXRp
b25hbCB3cmlua2xlcyBoZXJlLiBGaXJzdCwgSW1hZ2VTb3VyY2U6OmNsZWFyKCkKKyAgICAvLyBt
YXkgZGVzdHJveSB0aGUgcmVhZGVyLCBtYWtpbmcgdGhlIHJlc3VsdCBmcm9tIHRoZSByZWFkZXIg
X2xlc3NfCiAgICAgLy8gYXV0aG9yaXRhdGl2ZSBvbiBmdXR1cmUgY2FsbHMgaWYgdGhlIHJlY3Jl
YXRlZCByZWFkZXIgaGFzbid0IHNlZW4gdGhlCiAgICAgLy8gbG9vcCBjb3VudC4gIFdlIGRvbid0
IG5lZWQgdG8gc3BlY2lhbC1jYXNlIHRoaXMgYmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlCiAgICAg
Ly8gbmV3IHJlYWRlciB3aWxsIG9uY2UgYWdhaW4gcmV0dXJuIGNMb29wQ291bnROb3RTZWVuLCBh
bmQgd2Ugd29uJ3QKQEAgLTExOCw3ICsxMDEsMTYgQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6cmVw
ZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAvLyBzaG91bGQgY29udGludWUgdG8gdHJlYXQgaXQg
YXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24uICBXZSBkb24ndCBuZWVkCiAgICAgLy8gc3BlY2lh
bCBjb2RlIGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSdsbCBuZXZlciBjaGFu
Z2UKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZyb20gaXRzIGRlZmF1bHQgdmFsdWUuCi0g
ICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+bG9vcENvdW50KCkgIT0gY0xvb3BDb3VudE5v
dFNlZW4pKQorICAgIC8vCisgICAgLy8gVGhpcmQsIHdlIHVzZSB0aGUgc2FtZSBHSUZJbWFnZVJl
YWRlciBmb3IgY291bnRpbmcgZnJhbWVzIGFuZCB3ZSBtaWdodAorICAgIC8vIHNlZSB0aGUgbG9v
cCBjb3VudCBhbmQgdGhlbiBlbmNvdW50ZXIgYSBkZWNvZGluZyBlcnJvciB3aGljaCBoYXBwZW5z
CisgICAgLy8gbGF0ZXIgaW4gdGhlIHN0cmVhbS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IG5v
IGZyYW1lcyBhcmUgaW4gdGhlCisgICAgLy8gc3RyZWFtLiBJbiB0aGVzZSBjYXNlcyB3ZSBzaG91
bGQganVzdCBsb29wIG9uY2UuCisgICAgaWYgKGZhaWxlZCgpKQorICAgICAgICBtX3JlcGV0aXRp
b25Db3VudCA9IGNBbmltYXRpb25Mb29wT25jZTsKKyAgICBlbHNlIGlmIChtX3JlYWRlciAmJiAo
IW1fcmVhZGVyLT5pbWFnZXNDb3VudCgpIHx8IG1fcmVhZGVyLT5wYXJzZUZhaWxlZCgpKSkKKyAg
ICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgZWxzZSBp
ZiAobV9yZWFkZXIgJiYgbV9yZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29wQ291bnROb3RTZWVu
KQogICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAg
ICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9CkBAIC0zMjEsOSArMzEzLDMzIEBAIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1
ZXJ5KQogICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShtX2RhdGEpOwogICAgIH0KIAotICAgIC8v
IElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0
aGUgZGF0YSwgZGVjb2RpbmcKLSAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlmICghbV9yZWFkZXIt
PmRlY29kZShxdWVyeSwgaGFsdEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAg
aWYgKHF1ZXJ5ID09IEdJRlNpemVRdWVyeSkgeworICAgICAgICBpZiAoIW1fcmVhZGVyLT5kZWNv
ZGUoR0lGU2l6ZVF1ZXJ5LCBoYWx0QXRGcmFtZSkpCisgICAgICAgICAgICBzZXRGYWlsZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZWFkZXItPmRlY29kZShHSUZG
cmFtZUNvdW50UXVlcnksIGhhbHRBdEZyYW1lKSkgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGludCBvbGRTaXplID0gbV9mcmFtZUJ1
ZmZlckNhY2hlLnNpemUoKTsKKyAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fcmVhZGVy
LT5pbWFnZXNDb3VudCgpKTsKKyAgICBmb3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IG1fcmVhZGVy
LT5pbWFnZXNDb3VudCgpOyArK2kpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQ
cmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisKKyAgICBpZiAocXVlcnkgPT0g
R0lGRnJhbWVDb3VudFF1ZXJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcmVhZGVy
LT5kZWNvZGUoR0lGRnVsbFF1ZXJ5LCBoYWx0QXRGcmFtZSkpIHsKKyAgICAgICAgc2V0RmFpbGVk
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJdCBpcyBhbHNvIGEgZmF0YWwg
ZXJyb3IgaWYgYWxsIGRhdGEgaXMgcmVjZWl2ZWQgYnV0IHdlIGZhaWxlZCB0byBkZWNvZGUKKyAg
ICAvLyBhbGwgZnJhbWVzIGNvbXBsZXRlbHkuCisgICAgaWYgKGlzQWxsRGF0YVJlY2VpdmVkKCkg
JiYgaGFsdEF0RnJhbWUgPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAmJiBtX3JlYWRlcikK
ICAgICAgICAgc2V0RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA1
NWY5YjM1NjRmNDEyYzcwNzIxOTFkNzQwNjFiMTk2NzYxNmM2YjZkLi5mOWUxYjg0ZDMxODFhYTZj
NTVmYmFjMjQ4ZWIzMTJlOTU0MmI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC03
Miw3ICs3Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZmFpbHVyZSwgdGhp
cyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KICAgICAgICAgYm9vbCBpbml0RnJhbWVC
dWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCk7CiAKLSAgICAgICAgYm9vbCBtX2FscmVhZHlTY2Fu
bmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50OwogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNh
d0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAg
T3duUHRyPEdJRkltYWdlUmVhZGVyPiBtX3JlYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3Bw
CmluZGV4IGI4N2Y2ZGY1N2U3Njk1ZDU1YmQzNTc0ZTJjMjMxOTBlZGRmN2YzMzcuLjg3YzU5NzEz
ZGE2MWY2NDMxYWRlNTZjN2NkZTlkM2M0YzM5MTQ1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcApAQCAtOTgsMjAgKzk4LDIwIEBAIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsK
ICNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVswXSkKIAogLy8gU2VuZCB0aGUg
ZGF0YSB0byB0aGUgZGlzcGxheSBmcm9udC1lbmQuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpvdXRw
dXRSb3coKQorYm9vbCBHSUZMWldDb250ZXh0OjpvdXRwdXRSb3coKQogewotICAgIGludCBkcm93
U3RhcnQgPSBtX2ZyYW1lQ29udGV4dC0+aXJvdzsKLSAgICBpbnQgZHJvd0VuZCA9IG1fZnJhbWVD
b250ZXh0LT5pcm93OworICAgIGludCBkcm93U3RhcnQgPSBpcm93OworICAgIGludCBkcm93RW5k
ID0gaXJvdzsKIAogICAgIC8vIEhhZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQg
R0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxlCiAgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlz
aCB0aGUgInZlbmV0aWFuLWJsaW5kIiBlZmZlY3QgYXMgdGhlIGltYWdlIGlzCiAgICAgLy8gbG9h
ZGVkLiBBZGp1c3QgcGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJh
bmNlIG9mIHRoZQogICAgIC8vIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vz
c2l2ZSBwYXNzZXMgYXJlIGRyYXduLgotICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3Np
dmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0
LT5pcGFzcyA8IDQpIHsKKyAgICBpZiAobV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxh
eSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFzcyA8IDQpIHsKICAgICAgICAg
dW5zaWduZWQgcm93RHVwID0gMDsKICAgICAgICAgdW5zaWduZWQgcm93U2hpZnQgPSAwOwogCi0g
ICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgIHN3aXRjaCAo
aXBhc3MpIHsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgcm93RHVwID0gNzsKICAgICAg
ICAgICAgIHJvd1NoaWZ0ID0gMzsKQEAgLTE0OCw4OCArMTQ4LDYzIEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6Om91dHB1dFJvdygpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ0FMTEJB
Q0s6IExldCB0aGUgY2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93LgotICAgIGlmICht
X2NsaWVudCAmJiBtX2ZyYW1lQ29udGV4dAotICAgICAgICAmJiAhbV9jbGllbnQtPmhhdmVEZWNv
ZGVkUm93KG1faW1hZ2VzQ291bnQgLSAxLCBtX2x6d0NvbnRleHQucm93QnVmZmVyLCBtX2ZyYW1l
Q29udGV4dC0+d2lkdGgsCi0gICAgICAgICAgICBkcm93U3RhcnQsIGRyb3dFbmQgLSBkcm93U3Rh
cnQgKyAxLCBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250
ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA+IDEpKQorICAgIGlmICgh
bV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1fZnJhbWVDb250ZXh0LT5mcmFtZUlkLCByb3dCdWZm
ZXIsIG1fZnJhbWVDb250ZXh0LT53aWR0aCwKKyAgICAgICAgZHJvd1N0YXJ0LCBkcm93RW5kIC0g
ZHJvd1N0YXJ0ICsgMSwgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2Zy
YW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFzcyA+IDEpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkKQotICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXJvdysrOworICAgICAgICBpcm93Kys7CiAgICAgZWxzZSB7CiAgICAgICAg
IGRvIHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGlwYXNzKSB7CiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsKLSAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmlyb3cgPSA0OworICAgICAgICAgICAgICAgIGlyb3cgKz0gODsKKyAg
ICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSA0Owog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Y2FzZSAyOgotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5o
ZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAg
ICAgICBpcm93ICs9IDg7CisgICAgICAgICAgICAgICAgaWYgKGlyb3cgPj0gbV9mcmFtZUNvbnRl
eHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBpcGFzcysrOworICAgICAgICAgICAg
ICAgICAgICBpcm93ID0gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+aXJvdyArPSA0OwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+
PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVD
b250ZXh0LT5pcGFzcysrOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJv
dyA9IDE7CisgICAgICAgICAgICAgICAgaXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlmIChp
cm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXBh
c3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaXJvdyA9IDE7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gMjsKLSAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmlyb3cgPSAwOworICAgICAgICAgICAgICAgIGlyb3cgKz0gMjsKKyAg
ICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSAwOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
fSB3aGlsZSAobV9mcmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFtZUNvbnRleHQtPmhlaWdodCAt
IDEpKTsKKyAgICAgICAgfSB3aGlsZSAoaXJvdyA+IChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0g
MSkpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gUGVyZm9ybSBMZW1wZWwtWml2
LVdlbGNoIGRlY29kaW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWdu
ZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCitib29sIEdJRkxaV0NvbnRleHQ6
OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQog
ewotICAgIGlmICghbV9mcmFtZUNvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAgICAg
aW50IGNvZGU7CiAgICAgaW50IGluY29kZTsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaDsK
IAotICAgIC8vIENvcHkgYWxsIHRoZSBkZWNvZGVyIHN0YXRlIHZhcmlhYmxlcyBpbnRvIGxvY2Fs
cyBzbyB0aGUgY29tcGlsZXIKLSAgICAvLyB3b24ndCB3b3JyeSBhYm91dCB0aGVtIGJlaW5nIGFs
aWFzZWQuIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAotICAgIC8vIGJhY2sgaW50byB0aGUgR0lG
IGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KLSAgICBpbnQgYXZhaWwgPSBtX2x6d0Nv
bnRleHQuYXZhaWw7Ci0gICAgaW50IGJpdHMgPSBtX2x6d0NvbnRleHQuYml0czsKLSAgICBzaXpl
X3QgY250ID0gYnl0ZXNJbkJsb2NrOwotICAgIGludCBjb2Rlc2l6ZSA9IG1fbHp3Q29udGV4dC5j
b2Rlc2l6ZTsKLSAgICBpbnQgY29kZW1hc2sgPSBtX2x6d0NvbnRleHQuY29kZW1hc2s7Ci0gICAg
aW50IG9sZGNvZGUgPSBtX2x6d0NvbnRleHQub2xkY29kZTsKLSAgICBpbnQgY2xlYXJDb2RlID0g
bV9sendDb250ZXh0LmNsZWFyQ29kZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhciA9IG1f
bHp3Q29udGV4dC5maXJzdGNoYXI7Ci0gICAgaW50IGRhdHVtID0gbV9sendDb250ZXh0LmRhdHVt
OwotCi0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgcHJlZml4ID0gbV9sendDb250ZXh0LnBy
ZWZpeDsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHN1ZmZpeCA9IG1fbHp3Q29udGV4dC5z
dWZmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdGFjayA9IG1fbHp3Q29udGV4dC5z
dGFjazsKLSAgICBzaXplX3Qgc3RhY2twID0gbV9sendDb250ZXh0LnN0YWNrcDsKLSAgICBzaXpl
X3Qgcm93cCA9IG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbjsKLSAgICBzaXplX3Qgd2lkdGggPSBt
X2ZyYW1lQ29udGV4dC0+d2lkdGg7Ci0gICAgc2l6ZV90IHJvd3NSZW1haW5pbmcgPSBtX2ZyYW1l
Q29udGV4dC0+cm93c1JlbWFpbmluZzsKLQotICAgIGlmIChyb3dwID09IHdpZHRoKQorICAgIGlm
IChyb3dQb3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogI2RlZmluZSBPVVRQVVRfUk9XIFwKQEAgLTIzNywxMyArMjEyLDEyIEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJ
bkJsb2NrKQogICAgICAgICBpZiAoIW91dHB1dFJvdygpKSBcCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IFwKICAgICAgICAgcm93c1JlbWFpbmluZy0tOyBcCi0gICAgICAgIHJvd3AgPSAwOyBc
Ci0gICAgICAgIG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbiA9IDA7IFwKKyAgICAgICAgcm93UG9z
aXRpb24gPSAwOyBcCiAgICAgICAgIGlmICghcm93c1JlbWFpbmluZykgXAotICAgICAgICAgICAg
Z290byBFTkQ7IFwKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyBcCiAgICAgfSB3aGlsZSAoMCkK
IAotICAgIGZvciAoY2ggPSBibG9jazsgY250LS0gPiAwOyBjaCsrKSB7CisgICAgZm9yIChjaCA9
IGJsb2NrOyBieXRlc0luQmxvY2stLSA+IDA7IGNoKyspIHsKICAgICAgICAgLy8gRmVlZCB0aGUg
bmV4dCBieXRlIGludG8gdGhlIGRlY29kZXIncyAzMi1iaXQgaW5wdXQgYnVmZmVyLgogICAgICAg
ICBkYXR1bSArPSAoKGludCkgKmNoKSA8PCBiaXRzOwogICAgICAgICBiaXRzICs9IDg7CkBAIC0y
NjksMTIgKzI0MywxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25l
ZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAgICAvLyBl
bmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBhbGwgaW1hZ2UgZGF0YS4KICAg
ICAgICAgICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5z
ZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG9sZGNvZGUgPT0gLTEpIHsKLSAgICAgICAgICAg
ICAgICBtX2x6d0NvbnRleHQucm93QnVmZmVyW3Jvd3ArK10gPSBzdWZmaXhbY29kZV07Ci0gICAg
ICAgICAgICAgICAgaWYgKHJvd3AgPT0gd2lkdGgpCisgICAgICAgICAgICAgICAgcm93QnVmZmVy
W3Jvd1Bvc2l0aW9uKytdID0gc3VmZml4W2NvZGVdOworICAgICAgICAgICAgICAgIGlmIChyb3dQ
b3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBPVVRQVVRf
Uk9XOwogCiAgICAgICAgICAgICAgICAgZmlyc3RjaGFyID0gb2xkY29kZSA9IGNvZGU7CkBAIC0y
ODcsMTIgKzI2MSwxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25l
ZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAgICBjb2Rl
ID0gb2xkY29kZTsKIAogICAgICAgICAgICAgICAgIGlmIChzdGFja3AgPT0gTUFYX0JZVEVTKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVk
KCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICB3aGlsZSAoY29kZSA+PSBjbGVhckNvZGUpIHsKICAgICAgICAg
ICAgICAgICBpZiAoY29kZSA+PSBNQVhfQllURVMgfHwgY29kZSA9PSBwcmVmaXhbY29kZV0pCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQo
KSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRzIGNoYXJhY3RlcnMgdGhy
b3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKICAgICAgICAgICAgICAgICAvLyBhbGxvd2luZyBjb2Rl
ID49IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1lZApAQCAt
MzAyLDcgKzI3Niw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQogICAgICAgICAgICAgICAgIGNvZGUg
PSBwcmVmaXhbY29kZV07CiAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IE1BWF9CWVRF
UykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZh
aWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgc3RhY2tbc3RhY2twKytdID0gZmlyc3RjaGFyID0gc3Vm
Zml4W2NvZGVdOwpAQCAtMzI1LDM2ICsyOTksODUgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9M
WlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAKICAg
ICAgICAgICAgIC8vIENvcHkgdGhlIGRlY29kZWQgZGF0YSBvdXQgdG8gdGhlIHNjYW5saW5lIGJ1
ZmZlci4KICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBtX2x6d0NvbnRleHQucm93
QnVmZmVyW3Jvd3ArK10gPSBzdGFja1stLXN0YWNrcF07Ci0gICAgICAgICAgICAgICAgaWYgKHJv
d3AgPT0gd2lkdGgpCisgICAgICAgICAgICAgICAgcm93QnVmZmVyW3Jvd1Bvc2l0aW9uKytdID0g
c3RhY2tbLS1zdGFja3BdOworICAgICAgICAgICAgICAgIGlmIChyb3dQb3NpdGlvbiA9PSByb3dC
dWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUk9XOwogICAgICAgICAg
ICAgfSB3aGlsZSAoc3RhY2twID4gMCk7CiAgICAgICAgIH0KICAgICB9CiAKLUVORDoKLSAgICAv
LyBIb21lIHRoZSBsb2NhbCBjb3BpZXMgb2YgdGhlIEdJRiBkZWNvZGVyIHN0YXRlIHZhcmlhYmxl
cy4KLSAgICBtX2x6d0NvbnRleHQuYXZhaWwgPSBhdmFpbDsKLSAgICBtX2x6d0NvbnRleHQuYml0
cyA9IGJpdHM7Ci0gICAgbV9sendDb250ZXh0LmNvZGVzaXplID0gY29kZXNpemU7Ci0gICAgbV9s
endDb250ZXh0LmNvZGVtYXNrID0gY29kZW1hc2s7Ci0gICAgbV9sendDb250ZXh0Lm9sZGNvZGUg
PSBvbGRjb2RlOwotICAgIG1fbHp3Q29udGV4dC5maXJzdGNoYXIgPSBmaXJzdGNoYXI7Ci0gICAg
bV9sendDb250ZXh0LmRhdHVtID0gZGF0dW07Ci0gICAgbV9sendDb250ZXh0LnN0YWNrcCA9IHN0
YWNrcDsKLSAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24gPSByb3dwOwotICAgIG1fZnJhbWVD
b250ZXh0LT5yb3dzUmVtYWluaW5nID0gcm93c1JlbWFpbmluZzsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBHSUZGcmFtZUNvbnRleHQ6OmRlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCwgYm9v
bCogZnJhbWVEZWNvZGVkKQoreworICAgICpmcmFtZURlY29kZWQgPSBmYWxzZTsKKyAgICBpZiAo
IW1fbHp3Q29udGV4dCkgeworICAgICAgICBtX2x6d0NvbnRleHQgPSBhZG9wdFB0cihuZXcgR0lG
TFpXQ29udGV4dChjbGllbnQsIHRoaXMpKTsKKyAgICAgICAgaWYgKCFtX2x6d0NvbnRleHQtPnBy
ZXBhcmVUb0RlY29kZSgpKSB7CisgICAgICAgICAgICBtX2x6d0NvbnRleHQuY2xlYXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY3VycmVudEx6
d0Jsb2NrID0gMDsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3Igbm8gcmVtYWluaW5nIHJvd3Mg
Y2FuIGhhbmRsZSBiYWQgR0lGIGRhdGEgd2l0aCBleHRyYSBibG9ja3MuCisgICAgd2hpbGUgKG1f
Y3VycmVudEx6d0Jsb2NrIDwgbV9sendCbG9ja3Muc2l6ZSgpICYmIG1fbHp3Q29udGV4dC0+aGFz
UmVtYWluaW5nUm93cygpKSB7CisgICAgICAgIHNpemVfdCBibG9ja1Bvc2l0aW9uID0gbV9sendC
bG9ja3NbbV9jdXJyZW50THp3QmxvY2tdLmJsb2NrUG9zaXRpb247CisgICAgICAgIHNpemVfdCBi
bG9ja1NpemUgPSBtX2x6d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9ja10uYmxvY2tTaXplOworICAg
ICAgICBpZiAoYmxvY2tQb3NpdGlvbiA+PSBsZW5ndGggfHwgYmxvY2tQb3NpdGlvbiArIGJsb2Nr
U2l6ZSA+IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFt
X2x6d0NvbnRleHQtPmRvTFpXKGRhdGEgKyBibG9ja1Bvc2l0aW9uLCBibG9ja1NpemUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK21fY3VycmVudEx6d0Jsb2NrOworICAg
IH0KKworICAgIGlmIChtX2N1cnJlbnRMendCbG9jayA9PSBtX2x6d0Jsb2Nrcy5zaXplKCkgfHwg
IW1fbHp3Q29udGV4dC0+aGFzUmVtYWluaW5nUm93cygpKSB7CisgICAgICAgICpmcmFtZURlY29k
ZWQgPSB0cnVlOworICAgICAgICBtX2x6d0NvbnRleHQuY2xlYXIoKTsKKyAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29k
ZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIHsKICAgICBBU1NFUlQo
bV9ieXRlc1JlYWQgPD0gbV9kYXRhLT5zaXplKCkpOwotICAgIHJldHVybiBkZWNvZGVJbnRlcm5h
bChtX2J5dGVzUmVhZCwgbV9kYXRhLT5zaXplKCkgLSBtX2J5dGVzUmVhZCwgcXVlcnksIGhhbHRB
dEZyYW1lKTsKKworICAgIC8vIFRyeSB0byBiZSB0b2xlcmFudCBhbmQgZG9uJ3QgcmVwb3J0IHBh
cnNpbmcgZXJyb3JzIGJ1dCB3ZSB3aWxsIG5vdCBwYXJzZSBhZ2Fpbi4KKyAgICBpZiAoIW1fcGFy
c2VGYWlsZWQgJiYgIXBhcnNlKG1fYnl0ZXNSZWFkLCBtX2RhdGEtPnNpemUoKSAtIG1fYnl0ZXNS
ZWFkLCBxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSkpCisgICAgICAgIG1f
cGFyc2VGYWlsZWQgPSB0cnVlOworCisgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6
R0lGRnVsbFF1ZXJ5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHdoaWxlIChtX2N1cnJl
bnREZWNvZGluZ0ZyYW1lIDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fY3VycmVudERlY29kaW5nRnJh
bWUgPCBoYWx0QXRGcmFtZSkgeworICAgICAgICBib29sIGZyYW1lRGVjb2RlZCA9IGZhbHNlOwor
ICAgICAgICBHSUZGcmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzW21fY3VycmVu
dERlY29kaW5nRnJhbWVdLmdldCgpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBjdXJyZW50RnJh
bWUtPmRlY29kZShkYXRhKDApLCBtX2RhdGEtPnNpemUoKSwgbV9jbGllbnQsICZmcmFtZURlY29k
ZWQpOworCisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAvLyBFeGl0IHRoaXMgbG9vcCBhbmQgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGNv
bnRpbnVlIGRlY29kaW5nLgorICAgICAgICBpZiAoIWZyYW1lRGVjb2RlZCB8fCAhY3VycmVudEZy
YW1lLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIW1f
Y2xpZW50LT5mcmFtZUNvbXBsZXRlKG1fY3VycmVudERlY29kaW5nRnJhbWUsIGN1cnJlbnRGcmFt
ZS0+ZGVsYXlUaW1lLCBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgKyttX2N1cnJlbnREZWNvZGluZ0ZyYW1lOworICAgIH0K
KworICAgIC8vIEFsbCBmcmFtZXMgZGVjb2RlZC4KKyAgICBpZiAobV9jdXJyZW50RGVjb2RpbmdG
cmFtZSA9PSBtX2ZyYW1lcy5zaXplKCkgJiYgbV9wYXJzZUNvbXBsZXRlZCkKKyAgICAgICAgbV9j
bGllbnQtPmdpZkNvbXBsZXRlKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFByb2Nlc3Mg
ZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBnaWYgZGVjb2Rlci4KLWJvb2wg
R0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVf
dCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKQorLy8gUGFyc2UgaW5jb21pbmcgR0lGIGRhdGEgc3RyZWFtIGludG8gaW50ZXJuYWwgZGF0
YSBzdHJ1Y3R1cmVzLgorLy8gUmV0dXJuIHRydWUgaWYgcGFyc2luZyBoYXMgcHJvZ3Jlc3NlZCBv
ciB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEuCisvLyBSZXR1cm4gZmFsc2UgaWYgYSBmYXRhbCBl
cnJvciBpcyBlbmNvdW50ZXJlZC4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKHNpemVfdCBk
YXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXplT25seSkKIHsKICAgICBpZiAo
IWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFz
dCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCkBAIC0zNjIsMzUgKzM4NSwzMSBAQCBib29s
IEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXpl
X3QgbGVuLCBHSUZJbWFnZURlYwogICAgIH0KIAogICAgIGlmIChsZW4gPCBtX2J5dGVzVG9Db25z
dW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
Ly8gVGhpcyBsb29wIHJlYWRzIGFzIG1hbnkgY29tcG9uZW50cyBmcm9tIHxtX2RhdGF8IGFzIHBv
c3NpYmxlLgogICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBpdGVyYXRpb24sIGRhdGFQ
b3NpdGlvbiB3aWxsIGJlIGFkdmFuY2VkIGJ5IG1fYnl0ZXNUb0NvbnN1bWUgdG8KICAgICAvLyBw
b2ludCB0byB0aGUgbmV4dCBjb21wb25lbnQuIGxlbiB3aWxsIGJlIGRlY3JlbWVudGVkIGFjY29y
ZGluZ2x5LgogICAgIHdoaWxlIChsZW4gPj0gbV9ieXRlc1RvQ29uc3VtZSkgeworICAgICAgICBj
b25zdCBzaXplX3QgY3VycmVudENvbXBvbmVudFBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOworICAg
ICAgICBjb25zdCBzaXplX3QgY3VycmVudENvbXBvbmVudFNpemUgPSBtX2J5dGVzVG9Db25zdW1l
OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjdXJyZW50Q29tcG9uZW50ID0gZGF0YShk
YXRhUG9zaXRpb24pOwogCiAgICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tcG9uZW50IGFz
IGNvbnN1bWVkLiBOb3RlIHRoYXQgY3VycmVudENvbXBvbmVudCB3aWxsIHJlbWFpbiBwb2ludGVk
IGF0IHRoaXMKICAgICAgICAgLy8gY29tcG9uZW50IHVudGlsIHRoZSBuZXh0IGxvb3AgaXRlcmF0
aW9uLgotICAgICAgICBkYXRhUG9zaXRpb24gKz0gbV9ieXRlc1RvQ29uc3VtZTsKLSAgICAgICAg
bGVuIC09IG1fYnl0ZXNUb0NvbnN1bWU7CisgICAgICAgIGRhdGFQb3NpdGlvbiArPSBjdXJyZW50
Q29tcG9uZW50U2l6ZTsKKyAgICAgICAgbGVuIC09IGN1cnJlbnRDb21wb25lbnRTaXplOwogCiAg
ICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEdJRkxaVzoKLSAgICAgICAg
ICAgIC8vIG1fYnl0ZXNUb0NvbnN1bWUgaXMgdGhlIGN1cnJlbnQgY29tcG9uZW50IHNpemUgYmVj
YXVzZSBpdCBoYXNuJ3QgYmVlbiB1cGRhdGVkLgotICAgICAgICAgICAgaWYgKCFkb0xaVyhjdXJy
ZW50Q29tcG9uZW50LCBtX2J5dGVzVG9Db25zdW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5
IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCisgICAgICAgICAgICBBU1NFUlQoIW1fZnJh
bWVzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPmFkZEx6d0Jsb2Nr
KGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiwgY3VycmVudENvbXBvbmVudFNpemUpOwogICAgICAg
ICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIEdJRkxaV1N0YXJ0OiB7Ci0gICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZGdWxsUXVlcnkpIHsKLSAgICAgICAgICAgICAgICBpbnQgZGF0YXNpemUgPSAq
Y3VycmVudENvbXBvbmVudDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0YXNp
emUgPSBkYXRhc2l6ZTsKLSAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIExaVyBwYXJzZXIv
ZGVjb2Rlci4KLSAgICAgICAgICAgICAgICBpZiAoIW1fbHp3Q29udGV4dC5wcmVwYXJlVG9EZWNv
ZGUobV9zY3JlZW5XaWR0aCwgZGF0YXNpemUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1f
ZnJhbWVzLmxhc3QoKS0+ZGF0YXNpemUgPSAqY3VycmVudENvbXBvbmVudDsKICAgICAgICAgICAg
IEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTQwMiw3ICs0MjEsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXpl
X3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgZWxz
ZSBpZiAoIXN0cm5jbXAoKGNoYXIqKWN1cnJlbnRDb21wb25lbnQsICJHSUY4N2EiLCA2KSkKICAg
ICAgICAgICAgICAgICBtX3ZlcnNpb24gPSA4NzsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBHRVROKDcsIEdJRkds
b2JhbEhlYWRlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDE1LDYgKzQz
NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9z
aXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICBtX3NjcmVlbkhlaWdo
dCA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAyKTsKIAogICAgICAgICAgICAgLy8gQ0FM
TEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KKyAgICAgICAgICAg
IC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRpbWVuc2lvbnMgbGFyZ2Vy
IHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCiAgICAgICAgICAgICBpZiAobV9jbGllbnQg
JiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ2OCw3ICs0ODgsNyBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3Qg
bGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgLy8gdW50aWwgd2UgZmluZCBhbiBpbWFnZSBz
ZXBhcmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCiAgICAgICAgICAgICAvLyBhIGZpbGUgaXMg
Y29ycnVwdC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuCiAgICAgICAgICAgICBpZiAo
KmN1cnJlbnRDb21wb25lbnQgIT0gJywnKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVu
dCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRlcik7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTUzNSwzMCArNTU1LDI2IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRl
Y29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVj
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkNvbnRyb2xFeHRlbnNpb246IHsKLSAgICAg
ICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkg
ewotICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgpOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgYWRkRnJhbWVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgR0lGRnJh
bWVDb250ZXh0KiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lcy5sYXN0KCkuZ2V0KCk7CiAKLSAgICAg
ICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgIGlmICgqY3VycmVu
dENvbXBvbmVudCAmIDB4MSkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
dHBpeGVsID0gY3VycmVudENvbXBvbmVudFszXTsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9sIGV4dGVuc2lv
bgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGll
cyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KLSAgICAgICAg
ICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCi0gICAgICAgICAgICAg
ICAgaW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkgPj4gMikgJiAweDc7
Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kID0gKFdlYkNv
cmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxNZXRob2Q7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTb21lIHNwZWNzIHNheSAzcmQgYml0ICh2YWx1ZSA0KSwgb3RoZXIg
c3BlY3Mgc2F5IHZhbHVlIDMKLSAgICAgICAgICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAodGhl
IG1vcmUgcG9wdWxhcikKLSAgICAgICAgICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkK
LSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kID0gV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOwotICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5kZWxheVRpbWUgPSBHRVRJTlQxNihjdXJyZW50Q29tcG9uZW50
ICsgMSkgKiAxMDsKKyAgICAgICAgICAgIGlmICgqY3VycmVudENvbXBvbmVudCAmIDB4MSkgewor
ICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+dHBpeGVsID0gY3VycmVudENvbXBvbmVudFsz
XTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzVHJhbnNwYXJlbnQgPSB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzVHJh
bnNwYXJlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBpZ25vcmluZyBnZnggY29udHJv
bCBleHRlbnNpb24KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVs
aWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQorICAgICAg
ICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQorICAgICAgICAgICAgaW50
IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkgPj4gMikgJiAweDc7CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxNZXRob2Q7CisKKyAgICAgICAgICAgIC8v
IFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUg
MworICAgICAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCisgICAg
ICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKKyAgICAgICAgICAgICAgICBjdXJyZW50
RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzOworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kZWxheVRpbWUgPSBHRVRJ
TlQxNihjdXJyZW50Q29tcG9uZW50ICsgMSkgKiAxMDsKICAgICAgICAgICAgIEdFVE4oMSwgR0lG
Q29uc3VtZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02MTYsNyAr
NjMyLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICBHRVROKDEs
IEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2spOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyAwLDMtNyBhcmUgeWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5z
aW9uIGNvZGVzCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNl
dEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTYzNiw3ICs2NTIsNyBA
QCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9u
LCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgICogc2l6ZSBoYXMgd2VpcmQg
d2lkdGggb3IgaGVpZ2h0LiAgV2UgYXNzdW1lIHRoYXQgR0lGODdhCiAgICAgICAgICAgICAgKiBm
aWxlcyBkb24ndCBjb250YWluIGFuaW1hdGlvbnMuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGlmICghbV9pbWFnZXNEZWNvZGVkCisgICAgICAgICAgICBpZiAoaXNGaXJzdEZyYW1lKCkK
ICAgICAgICAgICAgICAgICAmJiAoKG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0KSB8fCAobV9zY3Jl
ZW5XaWR0aCA8IHdpZHRoKSB8fCAobV92ZXJzaW9uID09IDg3KSkpIHsKICAgICAgICAgICAgICAg
ICBtX3NjcmVlbkhlaWdodCA9IGhlaWdodDsKICAgICAgICAgICAgICAgICBtX3NjcmVlbldpZHRo
ID0gd2lkdGg7CkBAIC02NTMsMTAgKzY2OSwxMCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNv
ZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwog
ICAgICAgICAgICAgICAgIGhlaWdodCA9IG1fc2NyZWVuSGVpZ2h0OwogICAgICAgICAgICAgICAg
IHdpZHRoID0gbV9zY3JlZW5XaWR0aDsKICAgICAgICAgICAgICAgICBpZiAoIWhlaWdodCB8fCAh
d2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5z
ZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6
OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBtX2ltYWdlc0RlY29kZWQpIHsKKyAgICAg
ICAgICAgIGlmIChwYXJzZVNpemVPbmx5KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGRlY29k
ZXIgbmVlZHMgdG8gc3RvcC4gSGFuZCBiYWNrIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY29uc3Vt
ZWQgZnJvbQogICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBtaW51cyA5ICh0aGUgYW1vdW50IHdl
IGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCiAgICAgICAgICAgICAgICAgc2V0UmVtYWlu
aW5nQnl0ZXMobGVuICsgOSk7CkBAIC02NjQsNjIgKzY4MCw0NSBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJ
bWFnZURlYwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBtX2ltYWdlc0NvdW50ID0gbV9pbWFnZXNEZWNvZGVkICsgMTsKKyAgICAgICAg
ICAgIGFkZEZyYW1lSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIEdJRkZyYW1lQ29udGV4dCog
Y3VycmVudEZyYW1lID0gbV9mcmFtZXMubGFzdCgpLmdldCgpOwogCi0gICAgICAgICAgICBpZiAo
cXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkgJiYgIW1fZnJhbWVDb250ZXh0
KQotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgp
OwotCi0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+eE9mZnNldCA9IHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPnlPZmZzZXQgPSB5T2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPndp
ZHRoID0gd2lkdGg7Ci0KLSAgICAgICAgICAgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBuZXZlciBi
ZSB0YWtlbiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLwotICAgICAgICAgICAgICAgIC8q
IGJlaW5nIGRlY29kZWQuIElmIGFueSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJnZXIgICAg
ICovCi0gICAgICAgICAgICAgICAgLyogdGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5lZWQgdG8g
cmVhbGxvY2F0ZSBidWZmZXJzLiAgICAgKi8KLSAgICAgICAgICAgICAgICBtX3NjcmVlbldpZHRo
ID0gc3RkOjptYXgobV9zY3JlZW5XaWR0aCwgd2lkdGgpOwotCi0gICAgICAgICAgICAgICAgaWYg
KG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICBtX3NjcmVlbkhl
aWdodCA9IGhlaWdodDsKLQotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29tcG9uZW50Wzhd
ICYgMHg0MCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA9IDE7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPmludGVybGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPmlwYXNzID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIW1faW1hZ2VzRGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PnByb2dyZXNzaXZlRGlzcGxheSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIE92ZXJsYXlpbmcgaW50ZXJsYWNlZCwgdHJhbnNwYXJlbnQgR0lG
cyBvdmVyCi0gICAgICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcg
dGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjawotICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJl
cyBzYXZpbmcgdGhlIHVuZGVybHlpbmcgaW1hZ2UgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgICAg
ICAgICAgLy8gYXZvaWQgamFnZ2llcyBhdCB0aGUgdHJhbnNwYXJlbmN5IGVkZ2VzLiBXZSBhcmUK
LSAgICAgICAgICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28g
ZG9uJ3QgZGlzcGxheSBzdWNoCi0gICAgICAgICAgICAgICAgICAgIC8vIGltYWdlcyBwcm9ncmVz
c2l2ZWx5Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURp
c3BsYXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50RnJh
bWUtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT55T2Zmc2V0
ID0geU9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aGVpZ2h0ID0gaGVpZ2h0Owor
ICAgICAgICAgICAgY3VycmVudEZyYW1lLT53aWR0aCA9IHdpZHRoOwogCi0gICAgICAgICAgICAg
ICAgLy8gQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlLgotICAgICAgICAgICAgICAgIG1fZnJh
bWVDb250ZXh0LT5pcm93ID0gMDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cm93
c1JlbWFpbmluZyA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQ7CisgICAgICAgICAgICBtX3NjcmVl
bldpZHRoID0gc3RkOjptYXgobV9zY3JlZW5XaWR0aCwgd2lkdGgpOworICAgICAgICAgICAgbV9z
Y3JlZW5IZWlnaHQgPSBzdGQ6Om1heChtX3NjcmVlbkhlaWdodCwgaGVpZ2h0KTsKIAotICAgICAg
ICAgICAgICAgIC8vIGJpdHMgcGVyIHBpeGVsIGlzIGN1cnJlbnRDb21wb25lbnRbOF0mMHgwNwor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDQwKQorICAgICAgICAgICAg
ICAgIGN1cnJlbnRGcmFtZS0+aW50ZXJsYWNlZCA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pbnRlcmxhY2VkID0gZmFsc2U7CisKKyAgICAg
ICAgICAgIC8vIE9ubHkgZGlzcGxheSB0aGUgZmlyc3QgZnJhbWUgcHJvZ3Jlc3NpdmVseS4KKyAg
ICAgICAgICAgIGlmIChpc0ZpcnN0RnJhbWUoKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJh
bWUtPnByb2dyZXNzaXZlRGlzcGxheSA9IHRydWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBPdmVybGF5aW5nIGludGVybGFjZWQsIHRyYW5zcGFyZW50IEdJRnMgb3Zl
cgorICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJl
cmxpIGRpc3BsYXkgaGFjaworICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNhdmluZyB0aGUg
dW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bworICAgICAgICAgICAgICAgIC8vIGF2b2lkIGph
Z2dpZXMgYXQgdGhlIHRyYW5zcGFyZW5jeSBlZGdlcy4gV2UgYXJlCisgICAgICAgICAgICAgICAg
Ly8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlzcGxheSBzdWNoCisg
ICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkKKyAgICAgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPnByb2dyZXNzaXZlRGlzcGxheSA9IGZhbHNlOwogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAvLyBiaXRzIHBlciBwaXhlbCBpcyBjdXJyZW50Q29tcG9uZW50WzhdJjB4
MDcKKwogICAgICAgICAgICAgLy8gaGFzIGEgbG9jYWwgY29sb3JtYXA/CiAgICAgICAgICAgICBp
ZiAoY3VycmVudENvbXBvbmVudFs4XSAmIDB4ODApIHsKICAgICAgICAgICAgICAgICBpbnQgbnVt
Q29sb3JzID0gMiA8PCAoY3VycmVudENvbXBvbmVudFs4XSAmIDB4Nyk7CiAgICAgICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IGxvY2FsQ29sb3JtYXBCeXRlcyA9IDMgKiBudW1Db2xvcnM7CiAKICAg
ICAgICAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFmdGVyIGl0
IGxvYWRzCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwUG9zaXRpb24gPSBkYXRhUG9z
aXRpb247Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFw
U2l6ZSA9IG51bUNvbG9yczsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3Vy
cmVudEZyYW1lLT5sb2NhbENvbG9ybWFwUG9zaXRpb24gPSBkYXRhUG9zaXRpb247CisgICAgICAg
ICAgICAgICAgY3VycmVudEZyYW1lLT5sb2NhbENvbG9ybWFwU2l6ZSA9IG51bUNvbG9yczsKIAog
ICAgICAgICAgICAgICAgIGlmIChsZW4gPCBsb2NhbENvbG9ybWFwQnl0ZXMpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCB3ZSBoYXZlIGVub3VnaCBieXRlcyB0byBjb25zdW1l
IHRoZSBlbnRpcmUgY29sb3JtYXAgYXQgb25jZS4KQEAgLTcyNyw3MCArNzI2LDUxIEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVf
dCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkKLSAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgZGF0YVBvc2l0aW9uICs9IGxvY2FsQ29sb3JtYXBCeXRl
czsKICAgICAgICAgICAgICAgICBsZW4gLT0gbG9jYWxDb2xvcm1hcEJ5dGVzOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBTd2l0Y2ggYmFjayB0byB0aGUgZ2xvYmFsIHBhbGV0dGUKLSAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgR0VUTigxLCBHSUZMWldTdGFydCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR0lGSW1hZ2VD
b2xvcm1hcDogewotICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KQotICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1fZnJhbWVz
Lmxhc3QoKS0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICBHRVRO
KDEsIEdJRkxaV1N0YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBHSUZTdWJCbG9jazogewotICAgICAgICAgICAgLy8gU3RpbGwgd29ya2luZyBvbiB0
aGUgc2FtZSBpbWFnZTogUHJvY2VzcyBuZXh0IExaVyBkYXRhIGJsb2NrLgogICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IGJ5dGVzSW5CbG9jayA9ICpjdXJyZW50Q29tcG9uZW50OwotICAgICAgICAg
ICAgaWYgKGJ5dGVzSW5CbG9jaykgewotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVy
ZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEKLSAgICAgICAgICAgICAgICAv
LyBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLgotICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAhbV9mcmFtZUNvbnRleHQtPnJvd3NS
ZW1haW5pbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbGxlZ2FsIEdJ
RiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4KLSAgICAgICAgICAgICAgICAgICAgR0VUTigxLCBH
SUZTdWJCbG9jayk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ5dGVzSW5C
bG9jaykKICAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9jaywgR0lGTFpXKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFyZSBhbnkg
bW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICBtX2ltYWdlc0Rl
Y29kZWQrKzsKLQotICAgICAgICAgICAgICAgIC8vIENBTExCQUNLOiBUaGUgZnJhbWUgaXMgbm93
IGNvbXBsZXRlLgotICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiBtX2ZyYW1lQ29udGV4
dCAmJiAhbV9jbGllbnQtPmZyYW1lQ29tcGxldGUobV9pbWFnZXNEZWNvZGVkIC0gMSwgbV9mcmFt
ZUNvbnRleHQtPmRlbGF5VGltZSwgbV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmcmFtZUNvbXBsZXRlKCkgaGFzIGFs
cmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KLQotICAgICAgICAgICAgICAgIC8v
IENsZWFyIHN0YXRlIGZyb20gdGhpcyBpbWFnZQotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1l
Q29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENv
bG9ybWFwRGVmaW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+aXNUcmFuc3BhcmVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRmluaXNoZWQgcGFyc2luZyBvbmUgZnJhbWU7
IFByb2Nlc3MgbmV4dCBmcmFtZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZnJhbWVzLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICAgICAgbV9mcmFtZXMubGFzdCgpLT5zZXRDb21wbGV0ZSgp
OwogICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR0lGRG9uZTog
ewotICAgICAgICAgICAgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgotICAg
ICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5naWZDb21w
bGV0ZSgpOworICAgICAgICAgICAgbV9wYXJzZUNvbXBsZXRlZCA9IHRydWU7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAvLyBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KKyAgICAgICAgICAgIEFTU0VSVChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIHNldFJlbWFp
bmluZ0J5dGVzKGxlbik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5n
Qnl0ZXMpCkBAIC03OTksMjIgKzc3OSwzMSBAQCB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1h
aW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCiAgICAgbV9ieXRlc1JlYWQgPSBtX2Rh
dGEtPnNpemUoKSAtIHJlbWFpbmluZ0J5dGVzOwogfQogCi1ib29sIEdJRkxaV0NvbnRleHQ6OnBy
ZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQordm9pZCBHSUZJ
bWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fZnJhbWVzLmlz
RW1wdHkoKSB8fCBtX2ZyYW1lcy5sYXN0KCktPmlzQ29tcGxldGUoKSkKKyAgICAgICAgbV9mcmFt
ZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBHSUZGcmFtZUNvbnRleHQobV9mcmFtZXMuc2l6ZSgpKSkp
OworfQorCisvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCB0byBjbG9zZSB0byBkb0xaVygpLgor
Ym9vbCBHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUoKQogewogICAgIC8vIFNpbmNlIHdl
IHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBl
bnN1cmUKICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhl
IE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgogICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBw
b3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0bHkgYXQgNDA5NS4KLSAgICBpZiAoZGF0YXNpemUgPj0g
TUFYX0xaV19CSVRTKQorICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+ZGF0YXNpemUgPj0gTUFYX0xa
V19CSVRTKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2xlYXJDb2RlID0gMSA8PCBkYXRh
c2l6ZTsKKyAgICBjbGVhckNvZGUgPSAxIDw8IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZTsKICAg
ICBpZiAoY2xlYXJDb2RlID49IE1BWF9CWVRFUykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgYXZhaWwgPSBjbGVhckNvZGUgKyAyOwogICAgIG9sZGNvZGUgPSAtMTsKLSAgICBjb2Rlc2l6
ZSA9IGRhdGFzaXplICsgMTsKKyAgICBjb2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6
ZSArIDE7CiAgICAgY29kZW1hc2sgPSAoMSA8PCBjb2Rlc2l6ZSkgLSAxOwogICAgIGRhdHVtID0g
Yml0cyA9IDA7CisgICAgaXBhc3MgPSBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA/IDEgOiAw
OworICAgIGlyb3cgPSAwOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFibGVzIGxhemlseSwg
dGhpcyBhbGxvd3MgZnJhbWUgY291bnQgcXVlcnkgdG8gdXNlIGxlc3MgbWVtb3J5LgogICAgIHN1
ZmZpeC5yZXNpemUoTUFYX0JZVEVTKTsKQEAgLTgyMiw4ICs4MTEsOSBAQCBib29sIEdJRkxaV0Nv
bnRleHQ6OnByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQog
ICAgIHByZWZpeC5yZXNpemUoTUFYX0JZVEVTKTsKIAogICAgIC8vIEluaXRpYWxpemUgb3V0cHV0
IHJvdyBidWZmZXIuCi0gICAgcm93QnVmZmVyLnJlc2l6ZShyb3dXaWR0aCk7CisgICAgcm93QnVm
ZmVyLnJlc2l6ZShtX2ZyYW1lQ29udGV4dC0+d2lkdGgpOwogICAgIHJvd1Bvc2l0aW9uID0gMDsK
KyAgICByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodDsKIAogICAgIC8vIENs
ZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9m
IGJhZCBkYXRhLgogICAgIHN1ZmZpeC5maWxsKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAppbmRl
eCBhZTJhOGJiMjFjZDgzMzExNmE5ZDE3ODY4ZmFmODczOWJiZGY5M2ZjLi5mY2I1OTUxMGYzM2Zl
YTQ2MDBhNTIwYzBmYWIyYzQ4ZWY1NjFlZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaApAQCAt
NDIsNiArNDIsOCBAQAogLy8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNv
ZGVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiAjZGVmaW5lIE1BWF9MWldfQklUUyAgICAgICAgICAxMgpAQCAtNzUsMTYgKzc3LDgyIEBAIGVu
dW0gR0lGU3RhdGUgewogICAgIEdJRkNvbnN1bWVDb21tZW50CiB9OwogCi0vLyBGcmFtZSBvdXRw
dXQgc3RhdGUgbWFjaGluZS4KLXN0cnVjdCBHSUZGcmFtZUNvbnRleHQgeworc3RydWN0IEdJRkZy
YW1lQ29udGV4dDsKKworLy8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KKy8vIEZJWE1FOiBN
YWtlIHRoaXMgYSBjbGFzcyBhbmQgaGlkZSBwcml2YXRlIG1lbWJlcnMuCitjbGFzcyBHSUZMWldD
b250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBpbnQg
ZGF0YXNpemU7CisgICAgR0lGTFpXQ29udGV4dChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNs
aWVudCwgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQpCisgICAgICAgIDogc3RhY2twKDAp
CisgICAgICAgICwgY29kZXNpemUoMCkKKyAgICAgICAgLCBjb2RlbWFzaygwKQorICAgICAgICAs
IGNsZWFyQ29kZSgwKQorICAgICAgICAsIGF2YWlsKDApCisgICAgICAgICwgb2xkY29kZSgwKQor
ICAgICAgICAsIGZpcnN0Y2hhcigwKQorICAgICAgICAsIGJpdHMoMCkKKyAgICAgICAgLCBkYXR1
bSgwKQorICAgICAgICAsIGlwYXNzKDApCisgICAgICAgICwgaXJvdygwKQorICAgICAgICAsIHJv
d1Bvc2l0aW9uKDApCisgICAgICAgICwgcm93c1JlbWFpbmluZygwKQorICAgICAgICAsIG1fY2xp
ZW50KGNsaWVudCkKKyAgICAgICAgLCBtX2ZyYW1lQ29udGV4dChmcmFtZUNvbnRleHQpCisgICAg
eyB9CisKKyAgICBib29sIHByZXBhcmVUb0RlY29kZSgpOworICAgIGJvb2wgb3V0cHV0Um93KCk7
CisgICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVz
SW5CbG9jayk7CisgICAgYm9vbCBoYXNSZW1haW5pbmdSb3dzKCkgeyByZXR1cm4gcm93c1JlbWFp
bmluZzsgfQorCitwcml2YXRlOgorICAgIC8vIExaVyBkZWNvZGluZyBzdGF0ZXMgYW5kIG91dHB1
dCBzdGF0ZXMuCisgICAgc2l6ZV90IHN0YWNrcDsgLy8gQ3VycmVudCBzdGFjayBwb2ludGVyLgor
ICAgIGludCBjb2Rlc2l6ZTsKKyAgICBpbnQgY29kZW1hc2s7CisgICAgaW50IGNsZWFyQ29kZTsg
Ly8gQ29kZXdvcmQgdXNlZCB0byB0cmlnZ2VyIGRpY3Rpb25hcnkgcmVzZXQuCisgICAgaW50IGF2
YWlsOyAvLyBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGluIGRpY3Rpb25hcnkuCisgICAg
aW50IG9sZGNvZGU7CisgICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXI7CisgICAgaW50IGJpdHM7
IC8vIE51bWJlciBvZiB1bnJlYWQgYml0cyBpbiAiZGF0dW0iLgorICAgIGludCBkYXR1bTsgLy8g
MzItYml0IGlucHV0IGJ1ZmZlci4KICAgICBpbnQgaXBhc3M7IC8vIEludGVybGFjZSBwYXNzOyBS
YW5nZXMgMS00IGlmIGludGVybGFjZWQuCi0gICAgc2l6ZV90IHJvd3NSZW1haW5pbmc7IC8vIFJv
d3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dC4KICAgICBzaXplX3QgaXJvdzsgLy8gQ3VycmVudCBv
dXRwdXQgcm93LCBzdGFydGluZyBhdCB6ZXJvLgorICAgIHNpemVfdCByb3dQb3NpdGlvbjsKKyAg
ICBzaXplX3Qgcm93c1JlbWFpbmluZzsgLy8gUm93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0Lgor
CisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBwcmVmaXg7CisgICAgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+IHN1ZmZpeDsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3RhY2s7CisgICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IHJvd0J1ZmZlcjsgLy8gU2luZ2xlIHNjYW5saW5lIHRlbXBvcmFy
eSBidWZmZXIuCisKKyAgICAvLyBJbml0aWFsaXplZCBkdXJpbmcgY29uc3RydWN0aW9uIGFuZCBy
ZWFkLW9ubHkuCisgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBtX2NsaWVudDsKKyAgICBH
SUZGcmFtZUNvbnRleHQqIG1fZnJhbWVDb250ZXh0OworfTsKKworLy8gRGF0YSBzdHJ1Y3R1cmUg
Zm9yIG9uZSBMWlcgYmxvY2suCitzdHJ1Y3QgR0lGTFpXQmxvY2sgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdJRkxaV0Jsb2NrKHNpemVfdCBwb3NpdGlvbiwg
c2l6ZV90IHNpemUpCisgICAgICAgIDogYmxvY2tQb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAg
LCBibG9ja1NpemUoc2l6ZSkKKyAgICB7CisgICAgfQogCi0gICAgLy8gUGFyYW1ldGVycyBmb3Ig
aW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuCisgICAgc2l6ZV90IGJsb2NrUG9z
aXRpb247CisgICAgc2l6ZV90IGJsb2NrU2l6ZTsKK307CisKKy8vIEZyYW1lIG91dHB1dCBzdGF0
ZSBtYWNoaW5lLgorc3RydWN0IEdJRkZyYW1lQ29udGV4dCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRklYTUU6IE1vdmUgdGhlc2UgbWVtYmVycyB0byBw
cml2YXRlIHNlY3Rpb24uCisgICAgaW50IGZyYW1lSWQ7CiAgICAgdW5zaWduZWQgeE9mZnNldDsK
ICAgICB1bnNpZ25lZCB5T2Zmc2V0OyAvLyBXaXRoIHJlc3BlY3QgdG8gInNjcmVlbiIgb3JpZ2lu
LgogICAgIHVuc2lnbmVkIHdpZHRoOwpAQCAtOTMsNiArMTYxLDcgQEAgcHVibGljOgogICAgIFdl
YkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8v
IFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KICAgICBzaXplX3Qg
bG9jYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCiAgICAgaW50IGxv
Y2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LgorICAgIGlu
dCBkYXRhc2l6ZTsKICAgICAKICAgICBib29sIGlzTG9jYWxDb2xvcm1hcERlZmluZWQgOiAxOwog
ICAgIGJvb2wgcHJvZ3Jlc3NpdmVEaXNwbGF5IDogMTsgLy8gSWYgdHJ1ZSwgZG8gSGFlYmVybGkg
aW50ZXJsYWNlIGhhY2suCkBAIC0xMDEsMTEgKzE3MCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGRlbGF5VGltZTsgLy8gRGlzcGxheSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIGZvciB0aGlz
IGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGLgogCi0gICAgR0lGRnJhbWVDb250ZXh0KCkKLSAg
ICAgICAgOiBkYXRhc2l6ZSgwKQotICAgICAgICAsIGlwYXNzKDApCi0gICAgICAgICwgcm93c1Jl
bWFpbmluZygwKQotICAgICAgICAsIGlyb3coMCkKKyAgICBHSUZGcmFtZUNvbnRleHQoaW50IGlk
KQorICAgICAgICA6IGZyYW1lSWQoaWQpCiAgICAgICAgICwgeE9mZnNldCgwKQogICAgICAgICAs
IHlPZmZzZXQoMCkKICAgICAgICAgLCB3aWR0aCgwKQpAQCAtMTE0LDU0ICsxODAsMzYgQEAgcHVi
bGljOgogICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bv
c2VOb3RTcGVjaWZpZWQpCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAg
ICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKKyAgICAgICAgLCBkYXRhc2l6ZSgwKQogICAgICAg
ICAsIGlzTG9jYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCiAgICAgICAgICwgcHJvZ3Jlc3NpdmVE
aXNwbGF5KGZhbHNlKQogICAgICAgICAsIGludGVybGFjZWQoZmFsc2UpCiAgICAgICAgICwgaXNU
cmFuc3BhcmVudChmYWxzZSkKICAgICAgICAgLCBkZWxheVRpbWUoMCkKKyAgICAgICAgLCBtX2N1
cnJlbnRMendCbG9jaygwKQorICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAgICB7CiAg
ICAgfQogICAgIAogICAgIH5HSUZGcmFtZUNvbnRleHQoKQogICAgIHsKICAgICB9Ci19OwogCi0v
LyBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgotLy8gRklYTUU6IE1ha2UgdGhpcyBhIGNsYXNz
IGFuZCBoaWRlIHByaXZhdGUgbWVtYmVycy4KLXN0cnVjdCBHSUZMWldDb250ZXh0IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHSUZMWldDb250ZXh0KCkKLSAg
ICAgICAgOiBzdGFja3AoMCkKLSAgICAgICAgLCBjb2Rlc2l6ZSgwKQotICAgICAgICAsIGNvZGVt
YXNrKDApCi0gICAgICAgICwgY2xlYXJDb2RlKDApCi0gICAgICAgICwgYXZhaWwoMCkKLSAgICAg
ICAgLCBvbGRjb2RlKDApCi0gICAgICAgICwgZmlyc3RjaGFyKDApCi0gICAgICAgICwgYml0cygw
KQotICAgICAgICAsIGRhdHVtKDApCi0gICAgICAgICwgcm93UG9zaXRpb24oMCkKLSAgICB7IH0K
KyAgICB2b2lkIGFkZEx6d0Jsb2NrKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCisgICAg
eworICAgICAgICBtX2x6d0Jsb2Nrcy5hcHBlbmQoR0lGTFpXQmxvY2socG9zaXRpb24sIHNpemUp
KTsKKyAgICB9CiAKLSAgICBib29sIHByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwg
aW50IGRhdGFzaXplKTsKKyAgICBib29sIGRlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCwgYm9vbCog
ZnJhbWVEZWNvZGVkKTsKIAotICAgIHNpemVfdCBzdGFja3A7IC8vIEN1cnJlbnQgc3RhY2sgcG9p
bnRlci4KLSAgICBpbnQgY29kZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrOwotICAgIGludCBjbGVh
ckNvZGU7IC8vIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJlc2V0LgotICAg
IGludCBhdmFpbDsgLy8gSW5kZXggb2YgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiBkaWN0aW9uYXJ5
LgotICAgIGludCBvbGRjb2RlOwotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyOwotICAgIGlu
dCBiaXRzOyAvLyBOdW1iZXIgb2YgdW5yZWFkIGJpdHMgaW4gImRhdHVtIi4KLSAgICBpbnQgZGF0
dW07IC8vIDMyLWJpdCBpbnB1dCBidWZmZXIuCi0gICAgc2l6ZV90IHJvd1Bvc2l0aW9uOworICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQorICAgIHZv
aWQgc2V0Q29tcGxldGUoKSB7IG1faXNDb21wbGV0ZSA9IHRydWU7IH0KIAotICAgIFZlY3Rvcjx1
bnNpZ25lZCBzaG9ydD4gcHJlZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdWZmaXg7
Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YWNrOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiByb3dCdWZmZXI7IC8vIFNpbmdsZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyLgorcHJp
dmF0ZToKKyAgICBPd25QdHI8R0lGTFpXQ29udGV4dD4gbV9sendDb250ZXh0OworICAgIFZlY3Rv
cjxHSUZMWldCbG9jaz4gbV9sendCbG9ja3M7IC8vIExaVyBibG9ja3MgZm9yIHRoaXMgZnJhbWUu
CisgICAgc2l6ZV90IG1fY3VycmVudEx6d0Jsb2NrOworICAgIGJvb2wgbV9pc0NvbXBsZXRlOwog
fTsKIAogY2xhc3MgR0lGSW1hZ2VSZWFkZXIgewpAQCAtMTc5LDIzICsyMjcsMjEgQEAgcHVibGlj
OgogICAgICAgICAsIG1faXNHbG9iYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCiAgICAgICAgICwg
bV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcFNp
emUoMCkKLSAgICAgICAgLCBtX2ltYWdlc0RlY29kZWQoMCkKLSAgICAgICAgLCBtX2ltYWdlc0Nv
dW50KDApCiAgICAgICAgICwgbV9sb29wQ291bnQoY0xvb3BDb3VudE5vdFNlZW4pCi0gICAgICAg
ICwgbV9mcmFtZUNvbnRleHQoMCkKKyAgICAgICAgLCBtX2N1cnJlbnREZWNvZGluZ0ZyYW1lKDAp
CisgICAgICAgICwgbV9wYXJzZUZhaWxlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhcnNlQ29tcGxl
dGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICB+R0lGSW1hZ2VSZWFkZXIoKQogICAgIHsK
LSAgICAgICAgZGVsZXRlIG1fZnJhbWVDb250ZXh0OwotICAgICAgICBtX2ZyYW1lQ29udGV4dCA9
IDA7CiAgICAgfQogCiAgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiBkYXRhKSB7IG1fZGF0YSA9IGRhdGE7IH0KICAgICBib29sIGRlY29kZShXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSk7CiAKLSAg
ICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0NvdW50OyB9CisgICAg
aW50IGltYWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZXMuc2l6ZSgpOyB9CiAgICAg
aW50IGxvb3BDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcENvdW50OyB9CiAKICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0CkBAIC0yMTYsMTIgKzI2Miwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmcmFtZS0+aXNMb2NhbENvbG9ybWFwRGVmaW5l
ZCA/IGZyYW1lLT5sb2NhbENvbG9ybWFwU2l6ZSA6IDA7CiAgICAgfQogCi0gICAgY29uc3QgR0lG
RnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ29udGV4
dDsgfQorICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZXNbbV9jdXJyZW50RGVjb2RpbmdGcmFtZV0uZ2V0KCk7IH0KKworICAgIGJv
b2wgcGFyc2VGYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlRmFpbGVkOyB9CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3Qg
bGVuLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRG
cmFtZSk7Ci0gICAgYm9vbCBvdXRwdXRSb3coKTsKLSAgICBib29sIGRvTFpXKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICBib29sIHBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24s
IHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXplT25seSk7CiAgICAgdm9pZCBzZXRSZW1haW5pbmdC
eXRlcyhzaXplX3QpOwogCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YShzaXplX3QgZGF0
YVBvc2l0aW9uKSBjb25zdApAQCAtMjI5LDYgKzI3NSwxMiBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4obV9kYXRhLT5kYXRh
KCkpICsgZGF0YVBvc2l0aW9uOwogICAgIH0KIAorICAgIHZvaWQgYWRkRnJhbWVJZk5lY2Vzc2Fy
eSgpOworICAgIGJvb2wgaXNGaXJzdEZyYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2ZyYW1lcy5pc0VtcHR5KCkgfHwgKG1fZnJhbWVzLnNpemUoKSA9PSAxdSAmJiAhbV9mcmFt
ZXNbMF0tPmlzQ29tcGxldGUoKSk7CisgICAgfQorCiAgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyKiBtX2NsaWVudDsKIAogICAgIC8vIFBhcnNpbmcgc3RhdGUgbWFjaGluZS4KQEAgLTI0NCwx
NSArMjk2LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzR2xvYmFsQ29sb3JtYXBEZWZpbmVk
OwogICAgIHNpemVfdCBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb247IC8vICgzKiBNQVhfQ09MT1JT
IGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVz
IGZvciBlYWNoIGNvbG9yLgogICAgIGludCBtX2dsb2JhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBv
ZiBnbG9iYWwgY29sb3JtYXAgYXJyYXkuCi0gICAgdW5zaWduZWQgbV9pbWFnZXNEZWNvZGVkOyAv
LyBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcy4KLSAgICBpbnQgbV9p
bWFnZXNDb3VudDsgLy8gQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4gc28gZmFyIChpbmNsdWRpbmcg
aW5jb21wbGV0ZSBmcmFtZXMpLgogICAgIGludCBtX2xvb3BDb3VudDsgLy8gTmV0c2NhcGUgc3Bl
Y2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wgdGhlIG51bWJlciBvZiBhbmltYXRpb24g
bG9vcHMgYSBHSUYgcmVuZGVycy4KICAgICAKLSAgICBHSUZGcmFtZUNvbnRleHQqIG1fZnJhbWVD
b250ZXh0OwotCi0gICAgR0lGTFpXQ29udGV4dCBtX2x6d0NvbnRleHQ7CisgICAgVmVjdG9yPE93
blB0cjxHSUZGcmFtZUNvbnRleHQ+ID4gbV9mcmFtZXM7CisgICAgc2l6ZV90IG1fY3VycmVudERl
Y29kaW5nRnJhbWU7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2RhdGE7
CisgICAgYm9vbCBtX3BhcnNlRmFpbGVkOworICAgIGJvb2wgbV9wYXJzZUNvbXBsZXRlZDsKIH07
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJ
bWFnZURlY29kZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1h
Z2VEZWNvZGVyVGVzdC5jcHAKaW5kZXggYTdiZjVkNTUwZjQzYmZmOGJiYjAzYmE2NzZiZWU2ZDli
M2Q5YTE5Ny4uYWYyOTcxZDRhM2JkMGJlODVmODdjNmYxYzMyMDdhZWZmMjk1ZGMxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3Qu
Y3BwCkBAIC0xNzUsMTUgKzE3NSwxOCBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGJyb2tl
blNlY29uZEZyYW1lKQogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwogICAgIGRlY29kZXIt
PnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CiAKLSAgICBFWFBFQ1RfRVEoMXUsIGRlY29kZXIt
PmZyYW1lQ291bnQoKSk7CisgICAgLy8gVGhlcmUgYXJlIHR3byBmcmFtZXMgc2Nhbm5lZCBiZWNh
dXNlIHdlIGhhdmUgbm90IGVuY291bnRlcmVkICBhIGRlY29kaW5nCisgICAgLy8gZXJyb3IgeWV0
LgorICAgIEVYUEVDVF9FUSgydSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKIAogICAgIEltYWdl
RnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwogICAgIEVYUEVD
VF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOwogICAgIEVY
UEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CiAgICAgRVhQRUNUX0VR
KDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CiAKKyAgICAvLyBXZSBjYW4gZGVj
b2RlIHRoZSBzZWNvbmQgZnJhbWUgZXZlbiBpZiBpdCBpcyBicm9rZW4uCiAgICAgZnJhbWUgPSBk
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGZyYW1lKTsK
KyAgICBFWFBFQ1RfVFJVRShmcmFtZSk7CiAgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wT25j
ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192361</attachid>
            <date>2013-03-09 17:57:57 -0800</date>
            <delta_ts>2013-03-12 08:48:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130309175358.patch</filename>
            <type>text/plain</type>
            <size>49531</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1OTA3YmU2ZDEyNzMw
ZTMzOGZlN2E5MGQ4MDI1ZDU4MDY3OTY1Ny4uOTVkNDY1YWFhYWRmOWQzYzZhMjVhNDRiOWQ3Njdm
MTAzNzI1MGM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAzLTA5ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
Y291bnQgZnJhbWVzIGFuZCBkZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9CSkVDVElWRQorCisgICAgICAgIFRoaXMgY2hh
bmdlIGhhcyB0aGUgb2JqZWN0aXZlIG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSByZWFkaW5nIEdJ
RgorICAgICAgICBmaWxlcy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gcGFyc2UgdGhlIGVudGly
ZSBHSUYgZmlsZSBpbiBvbmUgcGFzcworICAgICAgICBhbmQgc2F2ZXMgaW5mb3JtYXRpb24gYWJv
dXQgZWFjaCBmcmFtZSwgc3VjaCB0aGF0IGRlY29kaW5nIGluIGEgbGF0ZXIKKyAgICAgICAgcGFz
cyBkb2VzIG5vdCBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlIGFnYWluLgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGZpeGVkIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIG9mIGRlY29kaW5nIEdJRiBmaWxl
cyB3aGVuCisgICAgICAgIGl0IGlzIHJlY2VpdmVkIHZlcnkgc2xvd2x5LgorCisgICAgICAgIEFM
R09SSVRITQorCisgICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gZGl2aWRlcyB0aGUgZGVjb2Rp
bmcgcHJvY2VzcyBpbnRvIHR3byBzZXBhcmF0ZQorICAgICAgICBzdGVwczogcGFyc2UgYW5kIExa
VyBkZWNvZGluZy4KKworICAgICAgICBJbiB0aGUgcGFyc2Ugc3RlcCwgdGhlIHN0YXRlIG1hY2hp
bmUgaXMgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcKKyAgICAgICAgaW1wbGVtZW50YWl0b24uIEhv
d2V2ZXIgdGhpcyBhbGdvcml0aG0gZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb2RpbmcKKyAgICAg
ICAgd2hpbGUgc2Nhbm5pbmcgdGhyb3VnaCB0aGUgZmlsZS4gSW50ZWFkIGl0IGNyZWF0ZXMgYSBu
ZXcgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgICAgZm9yIGNhY2hpbmcgYWxsIGZyYW1lIGluZm9ybWF0
aW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMWlcgYmxvY2tzLgorCisgICAgICAgIElmIGEgZnVs
bCBkZWNvZGUgaXMgcmVxdWVzdGVkIHRoZW4gTFpXIGRlY29kaW5nIGlzIHBlcmZvcm1lZC4gVGhp
cworICAgICAgICBpbXBsZW1lbnRhdGlvbiBsb29rIHRocm91Z2ggYWxsIGZyYW1lIGluZm9ybWF0
aW9uIHNhdmVkIGFuZCBkZWNvZGUKKyAgICAgICAgZWFjaCBmcmFtZSBzZXF1ZW50aWFsbHkgdW50
aWwgdGhlIHRhcmdldCBmcmFtZSBpcyByZWFjaGVkLgorCisgICAgICAgIEJlY2F1c2Ugb2YgdGhl
IHNlcGFyYXRlIG9mIHBhcnNlIGFuZCBkZWNvZGUsIGVhY2ggZnJhbWUgY2FuIGJlIGRlY29kZWQK
KyAgICAgICAgc2VwYXJhdGVseS4gVGhpcyBwYXZlcyB0aGUgd2F5IHRvIHN1cHBvcnQgc2Vla2lu
ZyBpbiBHSUYgZmlsZS4KKworICAgICAgICBURVNUSU5HCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBUaGVyZSBhcmUgYWxyZWFkeSBHSUYgdW5pdCB0ZXN0cyBmb3IgZnVuY3Rpb25hbCB0ZXN0aW5n
LgorICAgICAgICBFeGhhdXN0aXZlIHRlc3RpbmcgaXMgZG9uZSBsb2NhbGx5IHdpdGggYSBjb3Jw
dXMgb2YgNjBrIGltYWdlcy4KKyAgICAgICAgSSBtaXhlZCB0aGUgY29ycHVzIHdpdGggc29tZSBn
ZW5lcmF0ZWQgYmFkIGRhdGEgYW5kIHRydW5jYXRlZCBmaWxlcy4KKyAgICAgICAgVGhlIHJlc3Vs
dHMgd2FzIGJpdC1leGFjdCBhcyB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2l0aCBvbmx5
CisgICAgICAgIDIgY291bnRzIG9mIGRpZmZlcmVuY2VzLiBJbiB0aGVzZSB0d28gaW5zdGFuY2Vz
IHRoZSBuZXcgYWxnb3JpdGhtIGNhbgorICAgICAgICBkZWNvZGUgb25lIG1vcmUgYnJva2VuIGlt
YWdlIGF0IHRoZSBlbmQsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICBvdGhlciBp
bWFnZSB2aWV3ZXJzLCBlLmcuIFByZXZpZXcgb24gTWFjLgorCisgICAgICAgIFRoZXNlIHdlcmUg
YWxzbyBubyBjcmFzaGluZyB3aGVuIGRlY29kaW5nIHRoZSBlbnRpcmUgY29ycHVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAg
IChHSUZMWldDb250ZXh0OjpvdXRwdXRSb3cpOgorICAgICAgICAoR0lGTFpXQ29udGV4dDo6ZG9M
WlcpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1h
Z2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmFkZEZyYW1lSWZOZWNlc3NhcnkpOgorICAgICAgICAoR0lG
TFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgVGhlcmUgaXMgYSBsb3Qgb2Yg
cmVzaHVmZmxpbmcgaW4gR0lGTFpXQ29udGV4dCBhbmQgR0lGRnJhbWVDb250ZXh0LgorICAgICAg
ICBUaGVzZSBjaGFuZ2VzIGhhcyB0aGUgZ29hbCBvZiBoYXZpbmcgR0lGTFpXQ29udGV4dCBiZSBh
IHB1cmUgZGVjb2RpbmcKKyAgICAgICAgc3RhdGUgbWFjaGluZS4gR0lGRnJhbWVDb250ZXh0IGlz
IG1vc3RseSBhIHJlYWQtb25seSBjb250YWluZXIgZm9yCisgICAgICAgIGZyYW1lIGluZm9ybWF0
aW9uLiBXaXRoIGFsbCB0aGVzZSBjaGFuZ2VzIHdlIGNhbiBkZWNvZGUgZWFjaAorICAgICAgICBH
SUZGcmFtZUNvbnRleHQgaW5kZXBlbmRlbnRseS4KKworICAgICAgICBUaGUgb3duZXJzaGlwIHBh
dHRlcm4gaXM6CisgICAgICAgIEdJRkltYWdlUmVhZGVyIG93bnMgR0lGRnJhbWVDb250ZXh0IG93
bnMgR0lGTFpXQ29udGV4dC4KKworICAgICAgICAoR0lGTFpXQ29udGV4dDo6R0lGTFpXQ29udGV4
dCk6CisgICAgICAgIChHSUZMWldDb250ZXh0KToKKyAgICAgICAgKEdJRkxaV0NvbnRleHQ6Omhh
c1JlbWFpbmluZ1Jvd3MpOgorICAgICAgICBHSUZMWldDb250ZXh0IGlzIG1vdmVkIHRvIHRoZSB0
b3Agb2YgZmlsZS4KKyAgICAgICAgKEdJRkxaV0Jsb2NrKToKKyAgICAgICAgKEdJRkxaV0Jsb2Nr
OjpHSUZMWldCbG9jayk6CisgICAgICAgIE5ldyBkYXRhIHN0cnVjdHVyZSB0byBzYXZlIGJsb2Nr
IHBvc2l0aW9uIGFuZCBzaXplLgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAg
KEdJRkZyYW1lQ29udGV4dDo6R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1lQ29u
dGV4dDo6fkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmFkZEx6
d0Jsb2NrKToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6aXNDb21wbGV0ZSk6CisgICAgICAg
IChHSUZGcmFtZUNvbnRleHQ6OnNldENvbXBsZXRlKToKKyAgICAgICAgTm93IG93bnMgR0lGTFpX
Q29udGV4dCBmb3IgZGVjb2RpbmcuCisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6R0lGSW1hZ2VS
ZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6On5HSUZJbWFnZVJlYWRlcik6CisgICAg
ICAgIChHSUZJbWFnZVJlYWRlcjo6aW1hZ2VzQ291bnQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6OmZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6cGFyc2VGYWlsZWQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6Omlz
Rmlyc3RGcmFtZSk6CisgICAgICAgIE93bnMgYSBsaXN0IG9mIEdJRkZyYW1lQ29udHh0LgorCiAy
MDEzLTAzLTA3ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
RUdSRVNTSU9OKHIxNDA5MDcpOiBJbmNvcnJlY3QgYmFzZWxpbmUgZm9yIGNlbGxzIHdpdGggbWVk
aWEgY29udGVudCBkdXJpbmcgbG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5ZjQ0
NzQzMTY2NDljMDk2ZjVhNGU4YzY3MGViMWUzYzkwYjE3NDM3Li5lNmQ5ZTA2MzAzMTk4MWY1OTNi
YTI0NDUzZTA1OWUyMzFhMTYxNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDEzLTAzLTA5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gY291bnQgZnJhbWVzIGFuZCBkZWNvZGUgaW4gb25l
IHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBHSUZJbWFnZURlY29kZXJUZXN0IGR1ZSB0byBjaGFuZ2VzIGluIGRlY29kaW5nIGFsZ29y
aXRobS4KKyAgICAgICAgVGhlIG5ldyBhbGdvcml0aG0gaXMgbW9yZSB0b2xlcmFudCB0byBiYWQg
R0lGIGRhdGEuIEl0IGlzIGFibGUKKyAgICAgICAgdG8gZGVjb2RlIHRoZSBsYXN0IGJyb2tlbiBm
cmFtZSwgdXBkYXRpbmcgdW5pdCB0ZXN0IGFjY29yZGluZ2x5LgorCisgICAgICAgICogdGVzdHMv
R0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorCiAyMDEz
LTAzLTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLiAgUm9sbGVkIENocm9taXVtIERFUFMgdG8gcjE4NzAzNy4gIFJlcXVl
c3RlZCBieQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBiYjg4NDE1YmIwYzU2NThk
MDIyYTgxYWU1NDdiY2MxOTdkZWMyYzAwLi5jODIzMzA0Y2Y2MGQ1MjhhOTgwODY0ZjUzZDU1NTY5
NGE3MWZhMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSAiR0lGSW1hZ2VSZWFkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUluc3Ry
dW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSw3ICszNiw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIEdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpB
bHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbikKICAgICA6IEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCi0gICAgLCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNv
dW50KHRydWUpCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9vcE9uY2UpCiB7
CiB9CkBAIC01Miw5ICs1Miw2IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgSW1hZ2VEZWNvZGVyOjpz
ZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgaWYgKG1fcmVhZGVyKQogICAgICAg
ICBtX3JlYWRlci0+c2V0RGF0YShkYXRhKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gcmVzY2FuIHRo
ZSBmcmFtZSBjb3VudCwgYXMgdGhlIG5ldyBkYXRhIG1heSBoYXZlIGNoYW5nZWQgaXQuCi0gICAg
bV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IGZhbHNlOwogfQogCiBib29s
IEdJRkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKQEAgLTc5LDIxICs3Niw3IEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCiAKIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewotICAgIGlmICgh
bV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCkgewotICAgICAgICAvLyBGSVhN
RTogU2Nhbm5pbmcgYWxsIHRoZSBkYXRhIGhhcyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEg
d2VyZSB0bwotICAgICAgICAvLyBjb21lIGluIHJlYWxseSBzbG93bHkuICBNaWdodCBiZSBpbnRl
cmVzdGluZyB0byB0cnkgdG8gY2xvbmUgb3VyCi0gICAgICAgIC8vIGV4aXN0aW5nIHJlYWQgc2Vz
c2lvbiB0byBwcmVzZXJ2ZSBzdGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBjcmF3bAotICAgICAg
ICAvLyBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQg
SW1hZ2VJTyBkb2VzIG9uCi0gICAgICAgIC8vIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xz
IGFsbCB0aGUgZGF0YSBhZ2FpbikuCi0gICAgICAgIEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsK
LSAgICAgICAgcmVhZGVyLnNldERhdGEobV9kYXRhKTsKLSAgICAgICAgcmVhZGVyLmRlY29kZShH
SUZGcmFtZUNvdW50UXVlcnksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwotICAgICAgICBt
X2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKLSAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2VzQ291bnQoKSk7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcmVhZGVyLmltYWdlc0NvdW50KCk7ICsraSkKLSAgICAgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlB
bHBoYSk7Ci0gICAgfQotCisgICAgZGVjb2RlKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5KTsKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNh
Y2hlLnNpemUoKTsKIH0KIApAQCAtMTA3LDggKzkwLDggQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6
cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAvLyBzaG91bGQgZGVmYXVsdCB0byBsb29waW5n
IG9uY2UgKHRoZSBpbml0aWFsIHZhbHVlIGZvcgogICAgIC8vIHxtX3JlcGV0aXRpb25Db3VudHwp
LgogICAgIC8vCi0gICAgLy8gVGhlcmUgYXJlIHR3byBhZGRpdGlvbmFsIHdyaW5rbGVzIGhlcmUu
ICBGaXJzdCwgSW1hZ2VTb3VyY2U6OmNsZWFyKCkgbWF5Ci0gICAgLy8gZGVzdHJveSB0aGUgcmVh
ZGVyLCBtYWtpbmcgdGhlIHJlc3VsdCBmcm9tIHRoZSByZWFkZXIgX2xlc3NfCisgICAgLy8gVGhl
cmUgYXJlIHNvbWUgYWRkaXRpb25hbCB3cmlua2xlcyBoZXJlLiBGaXJzdCwgSW1hZ2VTb3VyY2U6
OmNsZWFyKCkKKyAgICAvLyBtYXkgZGVzdHJveSB0aGUgcmVhZGVyLCBtYWtpbmcgdGhlIHJlc3Vs
dCBmcm9tIHRoZSByZWFkZXIgX2xlc3NfCiAgICAgLy8gYXV0aG9yaXRhdGl2ZSBvbiBmdXR1cmUg
Y2FsbHMgaWYgdGhlIHJlY3JlYXRlZCByZWFkZXIgaGFzbid0IHNlZW4gdGhlCiAgICAgLy8gbG9v
cCBjb3VudC4gIFdlIGRvbid0IG5lZWQgdG8gc3BlY2lhbC1jYXNlIHRoaXMgYmVjYXVzZSBpbiB0
aGlzIGNhc2UgdGhlCiAgICAgLy8gbmV3IHJlYWRlciB3aWxsIG9uY2UgYWdhaW4gcmV0dXJuIGNM
b29wQ291bnROb3RTZWVuLCBhbmQgd2Ugd29uJ3QKQEAgLTExOCw3ICsxMDEsMTYgQEAgaW50IEdJ
RkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAvLyBzaG91bGQgY29u
dGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24uICBXZSBkb24ndCBu
ZWVkCiAgICAgLy8gc3BlY2lhbCBjb2RlIGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRoaXMgY2Fz
ZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZyb20gaXRz
IGRlZmF1bHQgdmFsdWUuCi0gICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+bG9vcENvdW50
KCkgIT0gY0xvb3BDb3VudE5vdFNlZW4pKQorICAgIC8vCisgICAgLy8gVGhpcmQsIHdlIHVzZSB0
aGUgc2FtZSBHSUZJbWFnZVJlYWRlciBmb3IgY291bnRpbmcgZnJhbWVzIGFuZCB3ZSBtaWdodAor
ICAgIC8vIHNlZSB0aGUgbG9vcCBjb3VudCBhbmQgdGhlbiBlbmNvdW50ZXIgYSBkZWNvZGluZyBl
cnJvciB3aGljaCBoYXBwZW5zCisgICAgLy8gbGF0ZXIgaW4gdGhlIHN0cmVhbS4gSXQgaXMgYWxz
byBwb3NzaWJsZSB0aGF0IG5vIGZyYW1lcyBhcmUgaW4gdGhlCisgICAgLy8gc3RyZWFtLiBJbiB0
aGVzZSBjYXNlcyB3ZSBzaG91bGQganVzdCBsb29wIG9uY2UuCisgICAgaWYgKGZhaWxlZCgpKQor
ICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IGNBbmltYXRpb25Mb29wT25jZTsKKyAgICBlbHNl
IGlmIChtX3JlYWRlciAmJiAoIW1fcmVhZGVyLT5pbWFnZXNDb3VudCgpIHx8IG1fcmVhZGVyLT5w
YXJzZUZhaWxlZCgpKSkKKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBjQW5pbWF0aW9uTG9v
cE9uY2U7CisgICAgZWxzZSBpZiAobV9yZWFkZXIgJiYgbV9yZWFkZXItPmxvb3BDb3VudCgpICE9
IGNMb29wQ291bnROb3RTZWVuKQogICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVy
LT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9CkBAIC0zMjEs
OSArMzEzLDMzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0
RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQogICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShtX2RhdGEp
OwogICAgIH0KIAotICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdl
J3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKLSAgICAvLyBoYXMgZmFpbGVkLgot
ICAgIGlmICghbV9yZWFkZXItPmRlY29kZShxdWVyeSwgaGFsdEF0RnJhbWUpICYmIGlzQWxsRGF0
YVJlY2VpdmVkKCkpCisgICAgaWYgKHF1ZXJ5ID09IEdJRlNpemVRdWVyeSkgeworICAgICAgICBp
ZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGU2l6ZVF1ZXJ5LCBoYWx0QXRGcmFtZSkpCisgICAgICAg
ICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9y
ZWFkZXItPmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIGhhbHRBdEZyYW1lKSkgeworICAgICAg
ICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGludCBv
bGRTaXplID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKKyAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGUucmVzaXplKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpKTsKKyAgICBmb3IgKGludCBpID0gb2xk
U2l6ZTsgaSA8IG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpOyArK2kpCisgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisK
KyAgICBpZiAocXVlcnkgPT0gR0lGRnJhbWVDb3VudFF1ZXJ5KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGRnVsbFF1ZXJ5LCBoYWx0QXRGcmFtZSkpIHsK
KyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJ
dCBpcyBhbHNvIGEgZmF0YWwgZXJyb3IgaWYgYWxsIGRhdGEgaXMgcmVjZWl2ZWQgYnV0IHdlIGZh
aWxlZCB0byBkZWNvZGUKKyAgICAvLyBhbGwgZnJhbWVzIGNvbXBsZXRlbHkuCisgICAgaWYgKGlz
QWxsRGF0YVJlY2VpdmVkKCkgJiYgaGFsdEF0RnJhbWUgPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNp
emUoKSAmJiBtX3JlYWRlcikKICAgICAgICAgc2V0RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuaAppbmRleCA1NWY5YjM1NjRmNDEyYzcwNzIxOTFkNzQwNjFiMTk2NzYxNmM2YjZk
Li5mOWUxYjg0ZDMxODFhYTZjNTVmYmFjMjQ4ZWIzMTJlOTU0MmI4YTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCkBAIC03Miw3ICs3Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KICAgICAg
ICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCk7CiAKLSAgICAgICAg
Ym9vbCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50OwogICAgICAgICBib29s
IG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRp
b25Db3VudDsKICAgICAgICAgT3duUHRyPEdJRkltYWdlUmVhZGVyPiBtX3JlYWRlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IGI4N2Y2ZGY1N2U3Njk1ZDU1YmQzNTc0ZTJjMjMxOTBl
ZGRmN2YzMzcuLjg3YzU5NzEzZGE2MWY2NDMxYWRlNTZjN2NkZTlkM2M0YzM5MTQ1NDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTgsMjAgKzk4LDIwIEBAIHVzaW5nIFdlYkNvcmU6
OkdJRkltYWdlRGVjb2RlcjsKICNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVsw
XSkKIAogLy8gU2VuZCB0aGUgZGF0YSB0byB0aGUgZGlzcGxheSBmcm9udC1lbmQuCi1ib29sIEdJ
RkltYWdlUmVhZGVyOjpvdXRwdXRSb3coKQorYm9vbCBHSUZMWldDb250ZXh0OjpvdXRwdXRSb3co
KQogewotICAgIGludCBkcm93U3RhcnQgPSBtX2ZyYW1lQ29udGV4dC0+aXJvdzsKLSAgICBpbnQg
ZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5pcm93OworICAgIGludCBkcm93U3RhcnQgPSBpcm93
OworICAgIGludCBkcm93RW5kID0gaXJvdzsKIAogICAgIC8vIEhhZWJlcmxpLWluc3BpcmVkIGhh
Y2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxlCiAgICAgLy8gZGlz
cGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJsaW5kIiBlZmZlY3QgYXMgdGhlIGlt
YWdlIGlzCiAgICAgLy8gbG9hZGVkLiBBZGp1c3QgcGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRv
IGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQogICAgIC8vIGltYWdlIGNyYXdsaW5nIHVwIHRo
ZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMgYXJlIGRyYXduLgotICAgIGlmIChtX2ZyYW1l
Q29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2Vk
ICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQpIHsKKyAgICBpZiAobV9mcmFtZUNvbnRleHQt
PnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFz
cyA8IDQpIHsKICAgICAgICAgdW5zaWduZWQgcm93RHVwID0gMDsKICAgICAgICAgdW5zaWduZWQg
cm93U2hpZnQgPSAwOwogCi0gICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7
CisgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg
cm93RHVwID0gNzsKICAgICAgICAgICAgIHJvd1NoaWZ0ID0gMzsKQEAgLTE0OCw4OCArMTQ4LDYz
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dFJvdygpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUgY2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVk
IGEgcm93LgotICAgIGlmIChtX2NsaWVudCAmJiBtX2ZyYW1lQ29udGV4dAotICAgICAgICAmJiAh
bV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1faW1hZ2VzQ291bnQgLSAxLCBtX2x6d0NvbnRleHQu
cm93QnVmZmVyLCBtX2ZyYW1lQ29udGV4dC0+d2lkdGgsCi0gICAgICAgICAgICBkcm93U3RhcnQs
IGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNw
bGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFz
cyA+IDEpKQorICAgIGlmICghbV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1fZnJhbWVDb250ZXh0
LT5mcmFtZUlkLCByb3dCdWZmZXIsIG1fZnJhbWVDb250ZXh0LT53aWR0aCwKKyAgICAgICAgZHJv
d1N0YXJ0LCBkcm93RW5kIC0gZHJvd1N0YXJ0ICsgMSwgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNz
aXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFzcyA+IDEpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5pbnRlcmxh
Y2VkKQotICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdysrOworICAgICAgICBpcm93Kys7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRl
eHQtPmlwYXNzKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlwYXNzKSB7CiAgICAgICAgICAgICBj
YXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsKLSAgICAg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhl
aWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSA0OworICAgICAgICAgICAg
ICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4
dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAgICAg
ICAgICAgIGlyb3cgPSA0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5pcm93ICs9IDg7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49
IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93
ID0gMjsKKyAgICAgICAgICAgICAgICBpcm93ICs9IDg7CisgICAgICAgICAgICAgICAgaWYgKGly
b3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBpcGFz
cysrOworICAgICAgICAgICAgICAgICAgICBpcm93ID0gMjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA0OwotICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwotICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+aXJvdyA9IDE7CisgICAgICAgICAgICAgICAgaXJvdyArPSA0OworICAg
ICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaXJvdyA9IDE7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIDQ6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gMjsKLSAgICAg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhl
aWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAwOworICAgICAgICAgICAg
ICAgIGlyb3cgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4
dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAgICAg
ICAgICAgIGlyb3cgPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9mcmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFt
ZUNvbnRleHQtPmhlaWdodCAtIDEpKTsKKyAgICAgICAgfSB3aGlsZSAoaXJvdyA+IChtX2ZyYW1l
Q29udGV4dC0+aGVpZ2h0IC0gMSkpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8g
UGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiti
b29sIEdJRkxaV0NvbnRleHQ6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXpl
X3QgYnl0ZXNJbkJsb2NrKQogewotICAgIGlmICghbV9mcmFtZUNvbnRleHQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCiAgICAgaW50IGNvZGU7CiAgICAgaW50IGluY29kZTsKICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpjaDsKIAotICAgIC8vIENvcHkgYWxsIHRoZSBkZWNvZGVyIHN0YXRlIHZh
cmlhYmxlcyBpbnRvIGxvY2FscyBzbyB0aGUgY29tcGlsZXIKLSAgICAvLyB3b24ndCB3b3JyeSBh
Ym91dCB0aGVtIGJlaW5nIGFsaWFzZWQuIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAotICAgIC8v
IGJhY2sgaW50byB0aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KLSAgICBp
bnQgYXZhaWwgPSBtX2x6d0NvbnRleHQuYXZhaWw7Ci0gICAgaW50IGJpdHMgPSBtX2x6d0NvbnRl
eHQuYml0czsKLSAgICBzaXplX3QgY250ID0gYnl0ZXNJbkJsb2NrOwotICAgIGludCBjb2Rlc2l6
ZSA9IG1fbHp3Q29udGV4dC5jb2Rlc2l6ZTsKLSAgICBpbnQgY29kZW1hc2sgPSBtX2x6d0NvbnRl
eHQuY29kZW1hc2s7Ci0gICAgaW50IG9sZGNvZGUgPSBtX2x6d0NvbnRleHQub2xkY29kZTsKLSAg
ICBpbnQgY2xlYXJDb2RlID0gbV9sendDb250ZXh0LmNsZWFyQ29kZTsKLSAgICB1bnNpZ25lZCBj
aGFyIGZpcnN0Y2hhciA9IG1fbHp3Q29udGV4dC5maXJzdGNoYXI7Ci0gICAgaW50IGRhdHVtID0g
bV9sendDb250ZXh0LmRhdHVtOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgcHJlZml4
ID0gbV9sendDb250ZXh0LnByZWZpeDsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHN1ZmZp
eCA9IG1fbHp3Q29udGV4dC5zdWZmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdGFj
ayA9IG1fbHp3Q29udGV4dC5zdGFjazsKLSAgICBzaXplX3Qgc3RhY2twID0gbV9sendDb250ZXh0
LnN0YWNrcDsKLSAgICBzaXplX3Qgcm93cCA9IG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbjsKLSAg
ICBzaXplX3Qgd2lkdGggPSBtX2ZyYW1lQ29udGV4dC0+d2lkdGg7Ci0gICAgc2l6ZV90IHJvd3NS
ZW1haW5pbmcgPSBtX2ZyYW1lQ29udGV4dC0+cm93c1JlbWFpbmluZzsKLQotICAgIGlmIChyb3dw
ID09IHdpZHRoKQorICAgIGlmIChyb3dQb3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogI2RlZmluZSBPVVRQVVRfUk9XIFwKQEAgLTIzNywxMyArMjEy
LDEyIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJs
b2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQogICAgICAgICBpZiAoIW91dHB1dFJvdygpKSBcCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKICAgICAgICAgcm93c1JlbWFpbmluZy0tOyBcCi0g
ICAgICAgIHJvd3AgPSAwOyBcCi0gICAgICAgIG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbiA9IDA7
IFwKKyAgICAgICAgcm93UG9zaXRpb24gPSAwOyBcCiAgICAgICAgIGlmICghcm93c1JlbWFpbmlu
ZykgXAotICAgICAgICAgICAgZ290byBFTkQ7IFwKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyBc
CiAgICAgfSB3aGlsZSAoMCkKIAotICAgIGZvciAoY2ggPSBibG9jazsgY250LS0gPiAwOyBjaCsr
KSB7CisgICAgZm9yIChjaCA9IGJsb2NrOyBieXRlc0luQmxvY2stLSA+IDA7IGNoKyspIHsKICAg
ICAgICAgLy8gRmVlZCB0aGUgbmV4dCBieXRlIGludG8gdGhlIGRlY29kZXIncyAzMi1iaXQgaW5w
dXQgYnVmZmVyLgogICAgICAgICBkYXR1bSArPSAoKGludCkgKmNoKSA8PCBiaXRzOwogICAgICAg
ICBiaXRzICs9IDg7CkBAIC0yNjksMTIgKzI0MywxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAg
ICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBh
bGwgaW1hZ2UgZGF0YS4KICAgICAgICAgICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBtX2Ns
aWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG9sZGNvZGUgPT0g
LTEpIHsKLSAgICAgICAgICAgICAgICBtX2x6d0NvbnRleHQucm93QnVmZmVyW3Jvd3ArK10gPSBz
dWZmaXhbY29kZV07Ci0gICAgICAgICAgICAgICAgaWYgKHJvd3AgPT0gd2lkdGgpCisgICAgICAg
ICAgICAgICAgcm93QnVmZmVyW3Jvd1Bvc2l0aW9uKytdID0gc3VmZml4W2NvZGVdOworICAgICAg
ICAgICAgICAgIGlmIChyb3dQb3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICAg
ICAgICAgICAgICBPVVRQVVRfUk9XOwogCiAgICAgICAgICAgICAgICAgZmlyc3RjaGFyID0gb2xk
Y29kZSA9IGNvZGU7CkBAIC0yODcsMTIgKzI2MSwxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAg
ICAgICAgICAgICAgICBjb2RlID0gb2xkY29kZTsKIAogICAgICAgICAgICAgICAgIGlmIChzdGFj
a3AgPT0gTUFYX0JZVEVTKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB3aGlsZSAoY29kZSA+PSBjbGVh
ckNvZGUpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA+PSBNQVhfQllURVMgfHwgY29kZSA9
PSBwcmVmaXhbY29kZV0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1f
Y2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhv
bGRzIGNoYXJhY3RlcnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKICAgICAgICAgICAgICAg
ICAvLyBhbGxvd2luZyBjb2RlID49IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50
IG9mIG1hbGZvcm1lZApAQCAtMzAyLDcgKzI3Niw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRv
TFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQogICAg
ICAgICAgICAgICAgIGNvZGUgPSBwcmVmaXhbY29kZV07CiAKICAgICAgICAgICAgICAgICBpZiAo
c3RhY2twID09IE1BWF9CWVRFUykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50
ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhY2tbc3RhY2twKytd
ID0gZmlyc3RjaGFyID0gc3VmZml4W2NvZGVdOwpAQCAtMzI1LDM2ICsyOTksODUgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBi
eXRlc0luQmxvY2spCiAKICAgICAgICAgICAgIC8vIENvcHkgdGhlIGRlY29kZWQgZGF0YSBvdXQg
dG8gdGhlIHNjYW5saW5lIGJ1ZmZlci4KICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICBtX2x6d0NvbnRleHQucm93QnVmZmVyW3Jvd3ArK10gPSBzdGFja1stLXN0YWNrcF07Ci0gICAg
ICAgICAgICAgICAgaWYgKHJvd3AgPT0gd2lkdGgpCisgICAgICAgICAgICAgICAgcm93QnVmZmVy
W3Jvd1Bvc2l0aW9uKytdID0gc3RhY2tbLS1zdGFja3BdOworICAgICAgICAgICAgICAgIGlmIChy
b3dQb3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBPVVRQ
VVRfUk9XOwogICAgICAgICAgICAgfSB3aGlsZSAoc3RhY2twID4gMCk7CiAgICAgICAgIH0KICAg
ICB9CiAKLUVORDoKLSAgICAvLyBIb21lIHRoZSBsb2NhbCBjb3BpZXMgb2YgdGhlIEdJRiBkZWNv
ZGVyIHN0YXRlIHZhcmlhYmxlcy4KLSAgICBtX2x6d0NvbnRleHQuYXZhaWwgPSBhdmFpbDsKLSAg
ICBtX2x6d0NvbnRleHQuYml0cyA9IGJpdHM7Ci0gICAgbV9sendDb250ZXh0LmNvZGVzaXplID0g
Y29kZXNpemU7Ci0gICAgbV9sendDb250ZXh0LmNvZGVtYXNrID0gY29kZW1hc2s7Ci0gICAgbV9s
endDb250ZXh0Lm9sZGNvZGUgPSBvbGRjb2RlOwotICAgIG1fbHp3Q29udGV4dC5maXJzdGNoYXIg
PSBmaXJzdGNoYXI7Ci0gICAgbV9sendDb250ZXh0LmRhdHVtID0gZGF0dW07Ci0gICAgbV9sendD
b250ZXh0LnN0YWNrcCA9IHN0YWNrcDsKLSAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24gPSBy
b3dwOwotICAgIG1fZnJhbWVDb250ZXh0LT5yb3dzUmVtYWluaW5nID0gcm93c1JlbWFpbmluZzsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHSUZGcmFtZUNvbnRleHQ6OmRlY29kZShjb25z
dCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXIqIGNsaWVudCwgYm9vbCogZnJhbWVEZWNvZGVkKQoreworICAgICpmcmFtZURlY29kZWQg
PSBmYWxzZTsKKyAgICBpZiAoIW1fbHp3Q29udGV4dCkgeworICAgICAgICBtX2x6d0NvbnRleHQg
PSBhZG9wdFB0cihuZXcgR0lGTFpXQ29udGV4dChjbGllbnQsIHRoaXMpKTsKKyAgICAgICAgaWYg
KCFtX2x6d0NvbnRleHQtPnByZXBhcmVUb0RlY29kZSgpKSB7CisgICAgICAgICAgICBtX2x6d0Nv
bnRleHQuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fY3VycmVudEx6d0Jsb2NrID0gMDsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3Ig
bm8gcmVtYWluaW5nIHJvd3MgY2FuIGhhbmRsZSBiYWQgR0lGIGRhdGEgd2l0aCBleHRyYSBibG9j
a3MuCisgICAgd2hpbGUgKG1fY3VycmVudEx6d0Jsb2NrIDwgbV9sendCbG9ja3Muc2l6ZSgpICYm
IG1fbHp3Q29udGV4dC0+aGFzUmVtYWluaW5nUm93cygpKSB7CisgICAgICAgIHNpemVfdCBibG9j
a1Bvc2l0aW9uID0gbV9sendCbG9ja3NbbV9jdXJyZW50THp3QmxvY2tdLmJsb2NrUG9zaXRpb247
CisgICAgICAgIHNpemVfdCBibG9ja1NpemUgPSBtX2x6d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9j
a10uYmxvY2tTaXplOworICAgICAgICBpZiAoYmxvY2tQb3NpdGlvbiA+PSBsZW5ndGggfHwgYmxv
Y2tQb3NpdGlvbiArIGJsb2NrU2l6ZSA+IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFtX2x6d0NvbnRleHQtPmRvTFpXKGRhdGEgKyBibG9ja1Bvc2l0aW9u
LCBibG9ja1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK21fY3Vy
cmVudEx6d0Jsb2NrOworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRMendCbG9jayA9PSBtX2x6
d0Jsb2Nrcy5zaXplKCkgfHwgIW1fbHp3Q29udGV4dC0+aGFzUmVtYWluaW5nUm93cygpKSB7Cisg
ICAgICAgICpmcmFtZURlY29kZWQgPSB0cnVlOworICAgICAgICBtX2x6d0NvbnRleHQuY2xlYXIo
KTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRl
Y29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFt
ZSkKIHsKICAgICBBU1NFUlQobV9ieXRlc1JlYWQgPD0gbV9kYXRhLT5zaXplKCkpOwotICAgIHJl
dHVybiBkZWNvZGVJbnRlcm5hbChtX2J5dGVzUmVhZCwgbV9kYXRhLT5zaXplKCkgLSBtX2J5dGVz
UmVhZCwgcXVlcnksIGhhbHRBdEZyYW1lKTsKKworICAgIC8vIFRyeSB0byBiZSB0b2xlcmFudCBh
bmQgZG9uJ3QgcmVwb3J0IHBhcnNpbmcgZXJyb3JzIGJ1dCB3ZSB3aWxsIG5vdCBwYXJzZSBhZ2Fp
bi4KKyAgICBpZiAoIW1fcGFyc2VGYWlsZWQgJiYgIXBhcnNlKG1fYnl0ZXNSZWFkLCBtX2RhdGEt
PnNpemUoKSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVR
dWVyeSkpCisgICAgICAgIG1fcGFyc2VGYWlsZWQgPSB0cnVlOworCisgICAgaWYgKHF1ZXJ5ICE9
IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHdoaWxlIChtX2N1cnJlbnREZWNvZGluZ0ZyYW1lIDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1f
Y3VycmVudERlY29kaW5nRnJhbWUgPCBoYWx0QXRGcmFtZSkgeworICAgICAgICBib29sIGZyYW1l
RGVjb2RlZCA9IGZhbHNlOworICAgICAgICBHSUZGcmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9
IG1fZnJhbWVzW21fY3VycmVudERlY29kaW5nRnJhbWVdLmdldCgpOworICAgICAgICBib29sIHN1
Y2Nlc3MgPSBjdXJyZW50RnJhbWUtPmRlY29kZShkYXRhKDApLCBtX2RhdGEtPnNpemUoKSwgbV9j
bGllbnQsICZmcmFtZURlY29kZWQpOworCisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBFeGl0IHRoaXMgbG9vcCBhbmQgd2FpdCBm
b3IgbW9yZSBkYXRhIHRvIGNvbnRpbnVlIGRlY29kaW5nLgorICAgICAgICBpZiAoIWZyYW1lRGVj
b2RlZCB8fCAhY3VycmVudEZyYW1lLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAoIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRlKG1fY3VycmVudERlY29kaW5n
RnJhbWUsIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lLCBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0
aG9kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKyttX2N1cnJlbnREZWNv
ZGluZ0ZyYW1lOworICAgIH0KKworICAgIC8vIEFsbCBmcmFtZXMgZGVjb2RlZC4KKyAgICBpZiAo
bV9jdXJyZW50RGVjb2RpbmdGcmFtZSA9PSBtX2ZyYW1lcy5zaXplKCkgJiYgbV9wYXJzZUNvbXBs
ZXRlZCkKKyAgICAgICAgbV9jbGllbnQtPmdpZkNvbXBsZXRlKCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vIFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBn
aWYgZGVjb2Rlci4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBk
YXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnks
IHVuc2lnbmVkIGhhbHRBdEZyYW1lKQorLy8gUGFyc2UgaW5jb21pbmcgR0lGIGRhdGEgc3RyZWFt
IGludG8gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgorLy8gUmV0dXJuIHRydWUgaWYgcGFyc2lu
ZyBoYXMgcHJvZ3Jlc3NlZCBvciB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEuCisvLyBSZXR1cm4g
ZmFsc2UgaWYgYSBmYXRhbCBlcnJvciBpcyBlbmNvdW50ZXJlZC4KK2Jvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXpl
T25seSkKIHsKICAgICBpZiAoIWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29t
ZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCkBAIC0zNjIs
MzUgKzM4NSwzMSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3Qg
ZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgIH0KIAogICAgIGlmIChs
ZW4gPCBtX2J5dGVzVG9Db25zdW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVGhpcyBsb29wIHJlYWRzIGFzIG1hbnkgY29tcG9uZW50cyBm
cm9tIHxtX2RhdGF8IGFzIHBvc3NpYmxlLgogICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgZWFj
aCBpdGVyYXRpb24sIGRhdGFQb3NpdGlvbiB3aWxsIGJlIGFkdmFuY2VkIGJ5IG1fYnl0ZXNUb0Nv
bnN1bWUgdG8KICAgICAvLyBwb2ludCB0byB0aGUgbmV4dCBjb21wb25lbnQuIGxlbiB3aWxsIGJl
IGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LgogICAgIHdoaWxlIChsZW4gPj0gbV9ieXRlc1RvQ29u
c3VtZSkgeworICAgICAgICBjb25zdCBzaXplX3QgY3VycmVudENvbXBvbmVudFBvc2l0aW9uID0g
ZGF0YVBvc2l0aW9uOworICAgICAgICBjb25zdCBzaXplX3QgY3VycmVudENvbXBvbmVudFNpemUg
PSBtX2J5dGVzVG9Db25zdW1lOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjdXJyZW50
Q29tcG9uZW50ID0gZGF0YShkYXRhUG9zaXRpb24pOwogCiAgICAgICAgIC8vIE1hcmsgdGhlIGN1
cnJlbnQgY29tcG9uZW50IGFzIGNvbnN1bWVkLiBOb3RlIHRoYXQgY3VycmVudENvbXBvbmVudCB3
aWxsIHJlbWFpbiBwb2ludGVkIGF0IHRoaXMKICAgICAgICAgLy8gY29tcG9uZW50IHVudGlsIHRo
ZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotICAgICAgICBkYXRhUG9zaXRpb24gKz0gbV9ieXRlc1Rv
Q29uc3VtZTsKLSAgICAgICAgbGVuIC09IG1fYnl0ZXNUb0NvbnN1bWU7CisgICAgICAgIGRhdGFQ
b3NpdGlvbiArPSBjdXJyZW50Q29tcG9uZW50U2l6ZTsKKyAgICAgICAgbGVuIC09IGN1cnJlbnRD
b21wb25lbnRTaXplOwogCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNl
IEdJRkxaVzoKLSAgICAgICAgICAgIC8vIG1fYnl0ZXNUb0NvbnN1bWUgaXMgdGhlIGN1cnJlbnQg
Y29tcG9uZW50IHNpemUgYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiB1cGRhdGVkLgotICAgICAgICAg
ICAgaWYgKCFkb0xaVyhjdXJyZW50Q29tcG9uZW50LCBtX2J5dGVzVG9Db25zdW1lKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJy
b3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCisgICAgICAg
ICAgICBBU1NFUlQoIW1fZnJhbWVzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX2ZyYW1lcy5s
YXN0KCktPmFkZEx6d0Jsb2NrKGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiwgY3VycmVudENvbXBv
bmVudFNpemUpOwogICAgICAgICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIEdJRkxaV1N0YXJ0OiB7Ci0gICAgICAgICAgICBpZiAo
cXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkpIHsKLSAgICAgICAgICAgICAg
ICBpbnQgZGF0YXNpemUgPSAqY3VycmVudENvbXBvbmVudDsKLSAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+ZGF0YXNpemUgPSBkYXRhc2l6ZTsKLSAgICAgICAgICAgICAgICAvLyBJbml0
aWFsaXplIExaVyBwYXJzZXIvZGVjb2Rlci4KLSAgICAgICAgICAgICAgICBpZiAoIW1fbHp3Q29u
dGV4dC5wcmVwYXJlVG9EZWNvZGUobV9zY3JlZW5XaWR0aCwgZGF0YXNpemUpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgIG1fZnJhbWVzLmxhc3QoKS0+ZGF0YXNpemUgPSAqY3VycmVudENvbXBv
bmVudDsKICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTQwMiw3ICs0MjEsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpk
ZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURl
YwogICAgICAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKWN1cnJlbnRDb21wb25lbnQs
ICJHSUY4N2EiLCA2KSkKICAgICAgICAgICAgICAgICBtX3ZlcnNpb24gPSA4NzsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBHRVROKDcsIEdJRkdsb2JhbEhlYWRlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtNDE1LDYgKzQzNCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVy
bmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAg
ICAgICBtX3NjcmVlbkhlaWdodCA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAyKTsKIAog
ICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIg
c2l6ZS4KKyAgICAgICAgICAgIC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZl
IGRpbWVuc2lvbnMgbGFyZ2VyIHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1f
c2NyZWVuSGVpZ2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ2OCw3
ICs0ODgsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0
YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgLy8gdW50aWwg
d2UgZmluZCBhbiBpbWFnZSBzZXBhcmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCiAgICAgICAg
ICAgICAvLyBhIGZpbGUgaXMgY29ycnVwdC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQu
CiAgICAgICAgICAgICBpZiAoKmN1cnJlbnRDb21wb25lbnQgIT0gJywnKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFn
ZUhlYWRlcik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUzNSwzMCArNTU1LDI2IEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVf
dCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkNvbnRyb2xF
eHRlbnNpb246IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJ
RkZyYW1lQ291bnRRdWVyeSkgewotICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4
dCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkRnJhbWVJZk5lY2Vzc2FyeSgpOwor
ICAgICAgICAgICAgR0lGRnJhbWVDb250ZXh0KiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lcy5sYXN0
KCkuZ2V0KCk7CiAKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAg
ICAgICAgIGlmICgqY3VycmVudENvbXBvbmVudCAmIDB4MSkgewotICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+dHBpeGVsID0gY3VycmVudENvbXBvbmVudFszXTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5p
c1RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIGdm
eCBjb250cm9sIGV4dGVuc2lvbgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv
LyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0
aG9kIGVudW0KLSAgICAgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNw
ZWMhCi0gICAgICAgICAgICAgICAgaW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBv
bmVudCkgPj4gMikgJiAweDc7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRpc3Bv
c2FsTWV0aG9kID0gKFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlz
cG9zYWxNZXRob2Q7Ci0KLSAgICAgICAgICAgICAgICAvLyBTb21lIHNwZWNzIHNheSAzcmQgYml0
ICh2YWx1ZSA0KSwgb3RoZXIgc3BlY3Mgc2F5IHZhbHVlIDMKLSAgICAgICAgICAgICAgICAvLyBM
ZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxhcikKLSAgICAgICAgICAgICAgICBpZiAoZGlz
cG9zYWxNZXRob2QgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRp
c3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZp
b3VzOwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kZWxheVRpbWUgPSBHRVRJTlQx
NihjdXJyZW50Q29tcG9uZW50ICsgMSkgKiAxMDsKKyAgICAgICAgICAgIGlmICgqY3VycmVudENv
bXBvbmVudCAmIDB4MSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+dHBpeGVsID0g
Y3VycmVudENvbXBvbmVudFszXTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzVHJh
bnNwYXJlbnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPmlzVHJhbnNwYXJlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBp
Z25vcmluZyBnZnggY29udHJvbCBleHRlbnNpb24KICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxN
ZXRob2QgZW51bQorICAgICAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVj
IQorICAgICAgICAgICAgaW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkg
Pj4gMikgJiAweDc7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0g
KFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxNZXRob2Q7
CisKKyAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhl
ciBzcGVjcyBzYXkgdmFsdWUgMworICAgICAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBt
b3JlIHBvcHVsYXIpCisgICAgICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKKyAgICAg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgICAgICAgY3VycmVudEZyYW1l
LT5kZWxheVRpbWUgPSBHRVRJTlQxNihjdXJyZW50Q29tcG9uZW50ICsgMSkgKiAxMDsKICAgICAg
ICAgICAgIEdFVE4oMSwgR0lGQ29uc3VtZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC02MTYsNyArNjMyLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50
ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAg
ICAgICAgICAgICBHRVROKDEsIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2spOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyAwLDMtNyBhcmUgeWV0IHRvIGJlIGRlZmlu
ZWQgbmV0c2NhcGUgZXh0ZW5zaW9uIGNvZGVzCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTYzNiw3ICs2NTIsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChz
aXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAg
ICogc2l6ZSBoYXMgd2VpcmQgd2lkdGggb3IgaGVpZ2h0LiAgV2UgYXNzdW1lIHRoYXQgR0lGODdh
CiAgICAgICAgICAgICAgKiBmaWxlcyBkb24ndCBjb250YWluIGFuaW1hdGlvbnMuCiAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGlmICghbV9pbWFnZXNEZWNvZGVkCisgICAgICAgICAgICBp
ZiAoaXNGaXJzdEZyYW1lKCkKICAgICAgICAgICAgICAgICAmJiAoKG1fc2NyZWVuSGVpZ2h0IDwg
aGVpZ2h0KSB8fCAobV9zY3JlZW5XaWR0aCA8IHdpZHRoKSB8fCAobV92ZXJzaW9uID09IDg3KSkp
IHsKICAgICAgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IGhlaWdodDsKICAgICAgICAgICAg
ICAgICBtX3NjcmVlbldpZHRoID0gd2lkdGg7CkBAIC02NTMsMTAgKzY2OSwxMCBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3Qg
bGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgICAgIGhlaWdodCA9IG1fc2NyZWVuSGVpZ2h0
OwogICAgICAgICAgICAgICAgIHdpZHRoID0gbV9zY3JlZW5XaWR0aDsKICAgICAgICAgICAgICAg
ICBpZiAoIWhlaWdodCB8fCAhd2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2Ns
aWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChxdWVyeSA9
PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBtX2ltYWdl
c0RlY29kZWQpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZVNpemVPbmx5KSB7CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIGRlY29kZXIgbmVlZHMgdG8gc3RvcC4gSGFuZCBiYWNrIHRoZSBudW1iZXIg
b2YgYnl0ZXMgd2UgY29uc3VtZWQgZnJvbQogICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBtaW51
cyA5ICh0aGUgYW1vdW50IHdlIGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCiAgICAgICAg
ICAgICAgICAgc2V0UmVtYWluaW5nQnl0ZXMobGVuICsgOSk7CkBAIC02NjQsNjIgKzY4MCw0NSBA
QCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9u
LCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX2ltYWdlc0NvdW50ID0gbV9pbWFnZXNEZWNv
ZGVkICsgMTsKKyAgICAgICAgICAgIGFkZEZyYW1lSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAg
IEdJRkZyYW1lQ29udGV4dCogY3VycmVudEZyYW1lID0gbV9mcmFtZXMubGFzdCgpLmdldCgpOwog
Ci0gICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkg
JiYgIW1fZnJhbWVDb250ZXh0KQotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3
IEdJRkZyYW1lQ29udGV4dCgpOwotCi0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsK
LSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+eE9mZnNldCA9IHhPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnlPZmZzZXQgPSB5T2Zmc2V0OwotICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPndpZHRoID0gd2lkdGg7Ci0KLSAgICAgICAgICAgICAgICAvKiBUaGlz
IGNhc2Ugd2lsbCBuZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLwot
ICAgICAgICAgICAgICAgIC8qIGJlaW5nIGRlY29kZWQuIElmIGFueSBvZiB0aGUgbGF0ZXIgaW1h
Z2VzIGFyZSBsYXJnZXIgICAgICovCi0gICAgICAgICAgICAgICAgLyogdGhhbiB0aGUgc2NyZWVu
IHNpemUsIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBidWZmZXJzLiAgICAgKi8KLSAgICAgICAgICAg
ICAgICBtX3NjcmVlbldpZHRoID0gc3RkOjptYXgobV9zY3JlZW5XaWR0aCwgd2lkdGgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0KQotICAgICAgICAgICAg
ICAgICAgICBtX3NjcmVlbkhlaWdodCA9IGhlaWdodDsKLQotICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50Q29tcG9uZW50WzhdICYgMHg0MCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aW50ZXJsYWNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVD
b250ZXh0LT5pcGFzcyA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2RlZCkKLSAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE92ZXJsYXlpbmcgaW50ZXJsYWNl
ZCwgdHJhbnNwYXJlbnQgR0lGcyBvdmVyCi0gICAgICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5n
IGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjawotICAgICAgICAgICAg
ICAgICAgICAvLyByZXF1aXJlcyBzYXZpbmcgdGhlIHVuZGVybHlpbmcgaW1hZ2UgaW4gb3JkZXIg
dG8KLSAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgamFnZ2llcyBhdCB0aGUgdHJhbnNwYXJl
bmN5IGVkZ2VzLiBXZSBhcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBk
ZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlzcGxheSBzdWNoCi0gICAgICAgICAgICAgICAgICAg
IC8vIGltYWdlcyBwcm9ncmVzc2l2ZWx5Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAgY3Vy
cmVudEZyYW1lLT55T2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+
aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT53aWR0aCA9IHdpZHRo
OwogCi0gICAgICAgICAgICAgICAgLy8gQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlLgotICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMDsKLSAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+cm93c1JlbWFpbmluZyA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQ7Cisg
ICAgICAgICAgICBtX3NjcmVlbldpZHRoID0gc3RkOjptYXgobV9zY3JlZW5XaWR0aCwgd2lkdGgp
OworICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBzdGQ6Om1heChtX3NjcmVlbkhlaWdodCwg
aGVpZ2h0KTsKIAotICAgICAgICAgICAgICAgIC8vIGJpdHMgcGVyIHBpeGVsIGlzIGN1cnJlbnRD
b21wb25lbnRbOF0mMHgwNworICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAw
eDQwKQorICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aW50ZXJsYWNlZCA9IHRydWU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pbnRlcmxhY2Vk
ID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIE9ubHkgZGlzcGxheSB0aGUgZmlyc3QgZnJhbWUg
cHJvZ3Jlc3NpdmVseS4KKyAgICAgICAgICAgIGlmIChpc0ZpcnN0RnJhbWUoKSkKKyAgICAgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPnByb2dyZXNzaXZlRGlzcGxheSA9IHRydWU7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBPdmVybGF5aW5nIGludGVybGFjZWQsIHRy
YW5zcGFyZW50IEdJRnMgb3ZlcgorICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIGltYWdlIGRh
dGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjaworICAgICAgICAgICAgICAgIC8vIHJl
cXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bworICAgICAgICAg
ICAgICAgIC8vIGF2b2lkIGphZ2dpZXMgYXQgdGhlIHRyYW5zcGFyZW5jeSBlZGdlcy4gV2UgYXJl
CisgICAgICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9u
J3QgZGlzcGxheSBzdWNoCisgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkK
KyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPnByb2dyZXNzaXZlRGlzcGxheSA9IGZhbHNl
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBiaXRzIHBlciBwaXhlbCBpcyBjdXJy
ZW50Q29tcG9uZW50WzhdJjB4MDcKKwogICAgICAgICAgICAgLy8gaGFzIGEgbG9jYWwgY29sb3Jt
YXA/CiAgICAgICAgICAgICBpZiAoY3VycmVudENvbXBvbmVudFs4XSAmIDB4ODApIHsKICAgICAg
ICAgICAgICAgICBpbnQgbnVtQ29sb3JzID0gMiA8PCAoY3VycmVudENvbXBvbmVudFs4XSAmIDB4
Nyk7CiAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxvY2FsQ29sb3JtYXBCeXRlcyA9IDMg
KiBudW1Db2xvcnM7CiAKICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBsb2Nh
bCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250
ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFw
UG9zaXRpb24gPSBkYXRhUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwU2l6ZSA9IG51bUNvbG9yczsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5sb2NhbENvbG9ybWFwUG9zaXRpb24gPSBkYXRh
UG9zaXRpb247CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5sb2NhbENvbG9ybWFwU2l6
ZSA9IG51bUNvbG9yczsKIAogICAgICAgICAgICAgICAgIGlmIChsZW4gPCBsb2NhbENvbG9ybWFw
Qnl0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCB3ZSBoYXZlIGVub3Vn
aCBieXRlcyB0byBjb25zdW1lIHRoZSBlbnRpcmUgY29sb3JtYXAgYXQgb25jZS4KQEAgLTcyNyw3
MCArNzI2LDUxIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBk
YXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1l
Q29udGV4dCkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xv
cm1hcERlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aXNMb2Nh
bENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZGF0YVBvc2l0aW9uICs9
IGxvY2FsQ29sb3JtYXBCeXRlczsKICAgICAgICAgICAgICAgICBsZW4gLT0gbG9jYWxDb2xvcm1h
cEJ5dGVzOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggYmFjayB0byB0aGUgZ2xv
YmFsIHBhbGV0dGUKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9y
bWFwRGVmaW5lZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+aXNMb2Nh
bENvbG9ybWFwRGVmaW5lZCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgR0VU
TigxLCBHSUZMWldTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgR0lGSW1hZ2VDb2xvcm1hcDogewotICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250
ZXh0KQotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIG1fZnJhbWVzLmxhc3QoKS0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7
CiAgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZTdWJCbG9jazogewotICAgICAgICAgICAgLy8g
U3RpbGwgd29ya2luZyBvbiB0aGUgc2FtZSBpbWFnZTogUHJvY2VzcyBuZXh0IExaVyBkYXRhIGJs
b2NrLgogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGJ5dGVzSW5CbG9jayA9ICpjdXJyZW50Q29t
cG9uZW50OwotICAgICAgICAgICAgaWYgKGJ5dGVzSW5CbG9jaykgewotICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEK
LSAgICAgICAgICAgICAgICAvLyBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNp
dCB0ZXJtaW5hdG9yLgotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAhbV9m
cmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBhbiBpbGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4KLSAgICAgICAgICAg
ICAgICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9j
aywgR0lGTFpXKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2Vl
IGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4KLSAgICAgICAg
ICAgICAgICBtX2ltYWdlc0RlY29kZWQrKzsKLQotICAgICAgICAgICAgICAgIC8vIENBTExCQUNL
OiBUaGUgZnJhbWUgaXMgbm93IGNvbXBsZXRlLgotICAgICAgICAgICAgICAgIGlmIChtX2NsaWVu
dCAmJiBtX2ZyYW1lQ29udGV4dCAmJiAhbV9jbGllbnQtPmZyYW1lQ29tcGxldGUobV9pbWFnZXNE
ZWNvZGVkIC0gMSwgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSwgbV9mcmFtZUNvbnRleHQtPmRp
c3Bvc2FsTWV0aG9kKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmcmFt
ZUNvbXBsZXRlKCkgaGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KLQot
ICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZyb20gdGhpcyBpbWFnZQotICAgICAgICAg
ICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRmluaXNoZWQg
cGFyc2luZyBvbmUgZnJhbWU7IFByb2Nlc3MgbmV4dCBmcmFtZS4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoIW1fZnJhbWVzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgbV9mcmFtZXMubGFz
dCgpLT5zZXRDb21wbGV0ZSgpOwogICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFy
dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgR0lGRG9uZTogewotICAgICAgICAgICAgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUs
IHdlIGNhbiBzdG9wLgotICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAg
IG1fY2xpZW50LT5naWZDb21wbGV0ZSgpOworICAgICAgICAgICAgbV9wYXJzZUNvbXBsZXRlZCA9
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KKyAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KIAogICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRl
cyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCkBAIC03OTksMjIgKzc3OSwzMSBAQCB2b2lkIEdJRklt
YWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCiAgICAg
bV9ieXRlc1JlYWQgPSBtX2RhdGEtPnNpemUoKSAtIHJlbWFpbmluZ0J5dGVzOwogfQogCi1ib29s
IEdJRkxaV0NvbnRleHQ6OnByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRh
dGFzaXplKQordm9pZCBHSUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSgpCit7Cisg
ICAgaWYgKG1fZnJhbWVzLmlzRW1wdHkoKSB8fCBtX2ZyYW1lcy5sYXN0KCktPmlzQ29tcGxldGUo
KSkKKyAgICAgICAgbV9mcmFtZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBHSUZGcmFtZUNvbnRleHQo
bV9mcmFtZXMuc2l6ZSgpKSkpOworfQorCisvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCB0byBj
bG9zZSB0byBkb0xaVygpLgorYm9vbCBHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUoKQog
ewogICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRh
c2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJp
Y3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgogICAgIC8vIFRoaXMg
c2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0bHkgYXQgNDA5NS4KLSAg
ICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQorICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+
ZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2xl
YXJDb2RlID0gMSA8PCBkYXRhc2l6ZTsKKyAgICBjbGVhckNvZGUgPSAxIDw8IG1fZnJhbWVDb250
ZXh0LT5kYXRhc2l6ZTsKICAgICBpZiAoY2xlYXJDb2RlID49IE1BWF9CWVRFUykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYXZhaWwgPSBjbGVhckNvZGUgKyAyOwogICAgIG9sZGNvZGUg
PSAtMTsKLSAgICBjb2Rlc2l6ZSA9IGRhdGFzaXplICsgMTsKKyAgICBjb2Rlc2l6ZSA9IG1fZnJh
bWVDb250ZXh0LT5kYXRhc2l6ZSArIDE7CiAgICAgY29kZW1hc2sgPSAoMSA8PCBjb2Rlc2l6ZSkg
LSAxOwogICAgIGRhdHVtID0gYml0cyA9IDA7CisgICAgaXBhc3MgPSBtX2ZyYW1lQ29udGV4dC0+
aW50ZXJsYWNlZCA/IDEgOiAwOworICAgIGlyb3cgPSAwOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgdGFibGVzIGxhemlseSwgdGhpcyBhbGxvd3MgZnJhbWUgY291bnQgcXVlcnkgdG8gdXNlIGxl
c3MgbWVtb3J5LgogICAgIHN1ZmZpeC5yZXNpemUoTUFYX0JZVEVTKTsKQEAgLTgyMiw4ICs4MTEs
OSBAQCBib29sIEdJRkxaV0NvbnRleHQ6OnByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0
aCwgaW50IGRhdGFzaXplKQogICAgIHByZWZpeC5yZXNpemUoTUFYX0JZVEVTKTsKIAogICAgIC8v
IEluaXRpYWxpemUgb3V0cHV0IHJvdyBidWZmZXIuCi0gICAgcm93QnVmZmVyLnJlc2l6ZShyb3dX
aWR0aCk7CisgICAgcm93QnVmZmVyLnJlc2l6ZShtX2ZyYW1lQ29udGV4dC0+d2lkdGgpOwogICAg
IHJvd1Bvc2l0aW9uID0gMDsKKyAgICByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPmhl
aWdodDsKIAogICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0cyB1cyBi
ZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgogICAgIHN1ZmZpeC5maWxsKDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuaAppbmRleCBhZTJhOGJiMjFjZDgzMzExNmE5ZDE3ODY4ZmFmODczOWJiZGY5
M2ZjLi5mY2I1OTUxMGYzM2ZlYTQ2MDBhNTIwYzBmYWIyYzQ4ZWY1NjFlZmNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuaApAQCAtNDIsNiArNDIsOCBAQAogLy8gc28gd2Ugd2lsbCB0b28uCiAjaW5j
bHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiAjZGVmaW5lIE1BWF9MWldfQklUUyAgICAgICAgICAxMgpAQCAt
NzUsMTYgKzc3LDgyIEBAIGVudW0gR0lGU3RhdGUgewogICAgIEdJRkNvbnN1bWVDb21tZW50CiB9
OwogCi0vLyBGcmFtZSBvdXRwdXQgc3RhdGUgbWFjaGluZS4KLXN0cnVjdCBHSUZGcmFtZUNvbnRl
eHQgeworc3RydWN0IEdJRkZyYW1lQ29udGV4dDsKKworLy8gTFpXIGRlY29kZXIgc3RhdGUgbWFj
aGluZS4KKy8vIEZJWE1FOiBNYWtlIHRoaXMgYSBjbGFzcyBhbmQgaGlkZSBwcml2YXRlIG1lbWJl
cnMuCitjbGFzcyBHSUZMWldDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBpbnQgZGF0YXNpemU7CisgICAgR0lGTFpXQ29udGV4dChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXIqIGNsaWVudCwgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQpCisg
ICAgICAgIDogc3RhY2twKDApCisgICAgICAgICwgY29kZXNpemUoMCkKKyAgICAgICAgLCBjb2Rl
bWFzaygwKQorICAgICAgICAsIGNsZWFyQ29kZSgwKQorICAgICAgICAsIGF2YWlsKDApCisgICAg
ICAgICwgb2xkY29kZSgwKQorICAgICAgICAsIGZpcnN0Y2hhcigwKQorICAgICAgICAsIGJpdHMo
MCkKKyAgICAgICAgLCBkYXR1bSgwKQorICAgICAgICAsIGlwYXNzKDApCisgICAgICAgICwgaXJv
dygwKQorICAgICAgICAsIHJvd1Bvc2l0aW9uKDApCisgICAgICAgICwgcm93c1JlbWFpbmluZygw
KQorICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX2ZyYW1lQ29udGV4dChm
cmFtZUNvbnRleHQpCisgICAgeyB9CisKKyAgICBib29sIHByZXBhcmVUb0RlY29kZSgpOworICAg
IGJvb2wgb3V0cHV0Um93KCk7CisgICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBi
bG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jayk7CisgICAgYm9vbCBoYXNSZW1haW5pbmdSb3dzKCkg
eyByZXR1cm4gcm93c1JlbWFpbmluZzsgfQorCitwcml2YXRlOgorICAgIC8vIExaVyBkZWNvZGlu
ZyBzdGF0ZXMgYW5kIG91dHB1dCBzdGF0ZXMuCisgICAgc2l6ZV90IHN0YWNrcDsgLy8gQ3VycmVu
dCBzdGFjayBwb2ludGVyLgorICAgIGludCBjb2Rlc2l6ZTsKKyAgICBpbnQgY29kZW1hc2s7Cisg
ICAgaW50IGNsZWFyQ29kZTsgLy8gQ29kZXdvcmQgdXNlZCB0byB0cmlnZ2VyIGRpY3Rpb25hcnkg
cmVzZXQuCisgICAgaW50IGF2YWlsOyAvLyBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGlu
IGRpY3Rpb25hcnkuCisgICAgaW50IG9sZGNvZGU7CisgICAgdW5zaWduZWQgY2hhciBmaXJzdGNo
YXI7CisgICAgaW50IGJpdHM7IC8vIE51bWJlciBvZiB1bnJlYWQgYml0cyBpbiAiZGF0dW0iLgor
ICAgIGludCBkYXR1bTsgLy8gMzItYml0IGlucHV0IGJ1ZmZlci4KICAgICBpbnQgaXBhc3M7IC8v
IEludGVybGFjZSBwYXNzOyBSYW5nZXMgMS00IGlmIGludGVybGFjZWQuCi0gICAgc2l6ZV90IHJv
d3NSZW1haW5pbmc7IC8vIFJvd3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dC4KICAgICBzaXplX3Qg
aXJvdzsgLy8gQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGluZyBhdCB6ZXJvLgorICAgIHNpemVf
dCByb3dQb3NpdGlvbjsKKyAgICBzaXplX3Qgcm93c1JlbWFpbmluZzsgLy8gUm93cyByZW1haW5p
bmcgdG8gYmUgb3V0cHV0LgorCisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBwcmVmaXg7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN1ZmZpeDsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hh
cj4gc3RhY2s7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJvd0J1ZmZlcjsgLy8gU2luZ2xl
IHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIuCisKKyAgICAvLyBJbml0aWFsaXplZCBkdXJpbmcg
Y29uc3RydWN0aW9uIGFuZCByZWFkLW9ubHkuCisgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
KiBtX2NsaWVudDsKKyAgICBHSUZGcmFtZUNvbnRleHQqIG1fZnJhbWVDb250ZXh0OworfTsKKwor
Ly8gRGF0YSBzdHJ1Y3R1cmUgZm9yIG9uZSBMWlcgYmxvY2suCitzdHJ1Y3QgR0lGTFpXQmxvY2sg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdJRkxaV0Jsb2Nr
KHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCisgICAgICAgIDogYmxvY2tQb3NpdGlvbihw
b3NpdGlvbikKKyAgICAgICAgLCBibG9ja1NpemUoc2l6ZSkKKyAgICB7CisgICAgfQogCi0gICAg
Ly8gUGFyYW1ldGVycyBmb3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuCisg
ICAgc2l6ZV90IGJsb2NrUG9zaXRpb247CisgICAgc2l6ZV90IGJsb2NrU2l6ZTsKK307CisKKy8v
IEZyYW1lIG91dHB1dCBzdGF0ZSBtYWNoaW5lLgorc3RydWN0IEdJRkZyYW1lQ29udGV4dCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRklYTUU6IE1vdmUg
dGhlc2UgbWVtYmVycyB0byBwcml2YXRlIHNlY3Rpb24uCisgICAgaW50IGZyYW1lSWQ7CiAgICAg
dW5zaWduZWQgeE9mZnNldDsKICAgICB1bnNpZ25lZCB5T2Zmc2V0OyAvLyBXaXRoIHJlc3BlY3Qg
dG8gInNjcmVlbiIgb3JpZ2luLgogICAgIHVuc2lnbmVkIHdpZHRoOwpAQCAtOTMsNiArMTYxLDcg
QEAgcHVibGljOgogICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2Us
IGV0Yy4KICAgICBzaXplX3QgbG9jYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2UgY29s
b3JtYXAuCiAgICAgaW50IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9y
bWFwIGFycmF5LgorICAgIGludCBkYXRhc2l6ZTsKICAgICAKICAgICBib29sIGlzTG9jYWxDb2xv
cm1hcERlZmluZWQgOiAxOwogICAgIGJvb2wgcHJvZ3Jlc3NpdmVEaXNwbGF5IDogMTsgLy8gSWYg
dHJ1ZSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2suCkBAIC0xMDEsMTEgKzE3MCw4IEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIGRlbGF5VGltZTsgLy8gRGlzcGxheSB0aW1lLCBpbiBtaWxs
aXNlY29uZHMsIGZvciB0aGlzIGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGLgogCi0gICAgR0lG
RnJhbWVDb250ZXh0KCkKLSAgICAgICAgOiBkYXRhc2l6ZSgwKQotICAgICAgICAsIGlwYXNzKDAp
Ci0gICAgICAgICwgcm93c1JlbWFpbmluZygwKQotICAgICAgICAsIGlyb3coMCkKKyAgICBHSUZG
cmFtZUNvbnRleHQoaW50IGlkKQorICAgICAgICA6IGZyYW1lSWQoaWQpCiAgICAgICAgICwgeE9m
ZnNldCgwKQogICAgICAgICAsIHlPZmZzZXQoMCkKICAgICAgICAgLCB3aWR0aCgwKQpAQCAtMTE0
LDU0ICsxODAsMzYgQEAgcHVibGljOgogICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6
OkltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpCiAgICAgICAgICwgbG9jYWxDb2xvcm1h
cFBvc2l0aW9uKDApCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKKyAgICAgICAgLCBk
YXRhc2l6ZSgwKQogICAgICAgICAsIGlzTG9jYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCiAgICAg
ICAgICwgcHJvZ3Jlc3NpdmVEaXNwbGF5KGZhbHNlKQogICAgICAgICAsIGludGVybGFjZWQoZmFs
c2UpCiAgICAgICAgICwgaXNUcmFuc3BhcmVudChmYWxzZSkKICAgICAgICAgLCBkZWxheVRpbWUo
MCkKKyAgICAgICAgLCBtX2N1cnJlbnRMendCbG9jaygwKQorICAgICAgICAsIG1faXNDb21wbGV0
ZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIAogICAgIH5HSUZGcmFtZUNvbnRleHQoKQogICAg
IHsKICAgICB9Ci19OwogCi0vLyBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgotLy8gRklYTUU6
IE1ha2UgdGhpcyBhIGNsYXNzIGFuZCBoaWRlIHByaXZhdGUgbWVtYmVycy4KLXN0cnVjdCBHSUZM
WldDb250ZXh0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBH
SUZMWldDb250ZXh0KCkKLSAgICAgICAgOiBzdGFja3AoMCkKLSAgICAgICAgLCBjb2Rlc2l6ZSgw
KQotICAgICAgICAsIGNvZGVtYXNrKDApCi0gICAgICAgICwgY2xlYXJDb2RlKDApCi0gICAgICAg
ICwgYXZhaWwoMCkKLSAgICAgICAgLCBvbGRjb2RlKDApCi0gICAgICAgICwgZmlyc3RjaGFyKDAp
Ci0gICAgICAgICwgYml0cygwKQotICAgICAgICAsIGRhdHVtKDApCi0gICAgICAgICwgcm93UG9z
aXRpb24oMCkKLSAgICB7IH0KKyAgICB2b2lkIGFkZEx6d0Jsb2NrKHNpemVfdCBwb3NpdGlvbiwg
c2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2x6d0Jsb2Nrcy5hcHBlbmQoR0lGTFpXQmxv
Y2socG9zaXRpb24sIHNpemUpKTsKKyAgICB9CiAKLSAgICBib29sIHByZXBhcmVUb0RlY29kZSh1
bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKTsKKyAgICBib29sIGRlY29kZShjb25zdCB1
bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXIqIGNsaWVudCwgYm9vbCogZnJhbWVEZWNvZGVkKTsKIAotICAgIHNpemVfdCBzdGFja3A7IC8v
IEN1cnJlbnQgc3RhY2sgcG9pbnRlci4KLSAgICBpbnQgY29kZXNpemU7Ci0gICAgaW50IGNvZGVt
YXNrOwotICAgIGludCBjbGVhckNvZGU7IC8vIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0
aW9uYXJ5IHJlc2V0LgotICAgIGludCBhdmFpbDsgLy8gSW5kZXggb2YgbmV4dCBhdmFpbGFibGUg
c2xvdCBpbiBkaWN0aW9uYXJ5LgotICAgIGludCBvbGRjb2RlOwotICAgIHVuc2lnbmVkIGNoYXIg
Zmlyc3RjaGFyOwotICAgIGludCBiaXRzOyAvLyBOdW1iZXIgb2YgdW5yZWFkIGJpdHMgaW4gImRh
dHVtIi4KLSAgICBpbnQgZGF0dW07IC8vIDMyLWJpdCBpbnB1dCBidWZmZXIuCi0gICAgc2l6ZV90
IHJvd1Bvc2l0aW9uOworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXND
b21wbGV0ZTsgfQorICAgIHZvaWQgc2V0Q29tcGxldGUoKSB7IG1faXNDb21wbGV0ZSA9IHRydWU7
IH0KIAotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gcHJlZml4OwotICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBzdWZmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YWNrOwotICAg
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiByb3dCdWZmZXI7IC8vIFNpbmdsZSBzY2FubGluZSB0ZW1w
b3JhcnkgYnVmZmVyLgorcHJpdmF0ZToKKyAgICBPd25QdHI8R0lGTFpXQ29udGV4dD4gbV9sendD
b250ZXh0OworICAgIFZlY3RvcjxHSUZMWldCbG9jaz4gbV9sendCbG9ja3M7IC8vIExaVyBibG9j
a3MgZm9yIHRoaXMgZnJhbWUuCisgICAgc2l6ZV90IG1fY3VycmVudEx6d0Jsb2NrOworICAgIGJv
b2wgbV9pc0NvbXBsZXRlOwogfTsKIAogY2xhc3MgR0lGSW1hZ2VSZWFkZXIgewpAQCAtMTc5LDIz
ICsyMjcsMjEgQEAgcHVibGljOgogICAgICAgICAsIG1faXNHbG9iYWxDb2xvcm1hcERlZmluZWQo
ZmFsc2UpCiAgICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwg
bV9nbG9iYWxDb2xvcm1hcFNpemUoMCkKLSAgICAgICAgLCBtX2ltYWdlc0RlY29kZWQoMCkKLSAg
ICAgICAgLCBtX2ltYWdlc0NvdW50KDApCiAgICAgICAgICwgbV9sb29wQ291bnQoY0xvb3BDb3Vu
dE5vdFNlZW4pCi0gICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKKyAgICAgICAgLCBtX2N1cnJl
bnREZWNvZGluZ0ZyYW1lKDApCisgICAgICAgICwgbV9wYXJzZUZhaWxlZChmYWxzZSkKKyAgICAg
ICAgLCBtX3BhcnNlQ29tcGxldGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICB+R0lGSW1h
Z2VSZWFkZXIoKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1fZnJhbWVDb250ZXh0OwotICAgICAg
ICBtX2ZyYW1lQ29udGV4dCA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBkYXRhKSB7IG1fZGF0YSA9IGRhdGE7IH0KICAgICBi
b29sIGRlY29kZShXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBo
YWx0QXRGcmFtZSk7CiAKLSAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlc0NvdW50OyB9CisgICAgaW50IGltYWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZXMuc2l6ZSgpOyB9CiAgICAgaW50IGxvb3BDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcENv
dW50OyB9CiAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0
CkBAIC0yMTYsMTIgKzI2MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmcmFtZS0+aXNM
b2NhbENvbG9ybWFwRGVmaW5lZCA/IGZyYW1lLT5sb2NhbENvbG9ybWFwU2l6ZSA6IDA7CiAgICAg
fQogCi0gICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lQ29udGV4dDsgfQorICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZXNbbV9jdXJyZW50RGVjb2RpbmdGcmFtZV0u
Z2V0KCk7IH0KKworICAgIGJvb2wgcGFyc2VGYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX3BhcnNl
RmFpbGVkOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0
YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5
LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSk7Ci0gICAgYm9vbCBvdXRwdXRSb3coKTsKLSAgICBib29s
IGRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICBib29sIHBhcnNlKHNp
emVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXplT25seSk7CiAgICAg
dm9pZCBzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QpOwogCiAgICAgY29uc3QgdW5zaWduZWQgY2hh
ciogZGF0YShzaXplX3QgZGF0YVBvc2l0aW9uKSBjb25zdApAQCAtMjI5LDYgKzI3NSwxMiBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4obV9kYXRhLT5kYXRhKCkpICsgZGF0YVBvc2l0aW9uOwogICAgIH0KIAorICAgIHZvaWQg
YWRkRnJhbWVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgaXNGaXJzdEZyYW1lKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2ZyYW1lcy5pc0VtcHR5KCkgfHwgKG1fZnJhbWVzLnNpemUo
KSA9PSAxdSAmJiAhbV9mcmFtZXNbMF0tPmlzQ29tcGxldGUoKSk7CisgICAgfQorCiAgICAgV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBtX2NsaWVudDsKIAogICAgIC8vIFBhcnNpbmcgc3RhdGUg
bWFjaGluZS4KQEAgLTI0NCwxNSArMjk2LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzR2xv
YmFsQ29sb3JtYXBEZWZpbmVkOwogICAgIHNpemVfdCBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb247
IC8vICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90
IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yLgogICAgIGludCBtX2dsb2JhbENvbG9y
bWFwU2l6ZTsgLy8gU2l6ZSBvZiBnbG9iYWwgY29sb3JtYXAgYXJyYXkuCi0gICAgdW5zaWduZWQg
bV9pbWFnZXNEZWNvZGVkOyAvLyBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQg
R0lGcy4KLSAgICBpbnQgbV9pbWFnZXNDb3VudDsgLy8gQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4g
c28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0ZSBmcmFtZXMpLgogICAgIGludCBtX2xvb3BDb3Vu
dDsgLy8gTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wgdGhlIG51
bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4KICAgICAKLSAgICBHSUZGcmFt
ZUNvbnRleHQqIG1fZnJhbWVDb250ZXh0OwotCi0gICAgR0lGTFpXQ29udGV4dCBtX2x6d0NvbnRl
eHQ7CisgICAgVmVjdG9yPE93blB0cjxHSUZGcmFtZUNvbnRleHQ+ID4gbV9mcmFtZXM7CisgICAg
c2l6ZV90IG1fY3VycmVudERlY29kaW5nRnJhbWU7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX3BhcnNlRmFpbGVkOworICAgIGJvb2wgbV9w
YXJzZUNvbXBsZXRlZDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAKaW5kZXggYTdiZjVkNTUwZjQzYmZm
OGJiYjAzYmE2NzZiZWU2ZDliM2Q5YTE5Ny4uYWYyOTcxZDRhM2JkMGJlODVmODdjNmYxYzMyMDdh
ZWZmMjk1ZGMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJ
bWFnZURlY29kZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJ
RkltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC0xNzUsMTUgKzE3NSwxOCBAQCBURVNUKEdJRkltYWdl
RGVjb2RlclRlc3QsIGJyb2tlblNlY29uZEZyYW1lKQogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0
KCkpOwogICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CiAKLSAgICBFWFBF
Q1RfRVEoMXUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgLy8gVGhlcmUgYXJlIHR3byBm
cmFtZXMgc2Nhbm5lZCBiZWNhdXNlIHdlIGhhdmUgbm90IGVuY291bnRlcmVkICBhIGRlY29kaW5n
CisgICAgLy8gZXJyb3IgeWV0LgorICAgIEVYUEVDVF9FUSgydSwgZGVjb2Rlci0+ZnJhbWVDb3Vu
dCgpKTsKIAogICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KDApOwogICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+
c3RhdHVzKCkpOwogICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgo
KSk7CiAgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CiAK
KyAgICAvLyBXZSBjYW4gZGVjb2RlIHRoZSBzZWNvbmQgZnJhbWUgZXZlbiBpZiBpdCBpcyBicm9r
ZW4uCiAgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKGZyYW1lKTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZSk7CiAgICAgRVhQRUNUX0VR
KGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192666</attachid>
            <date>2013-03-12 01:33:55 -0700</date>
            <delta_ts>2013-03-12 11:54:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130312012954.patch</filename>
            <type>text/plain</type>
            <size>58102</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzMGQxYTU5MmZjMGQ0
ODZkNWI1OTRhNDZhNjNlOGRkZDI2NjA3NC4uZmRlOGM0NjIwM2E1MDFjNWE4YWMyNzZkZTQyMGQ1
NjY0NzBiZTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wMy0xMiAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEdJRkltYWdlUmVhZGVyIHRv
IGNvdW50IGZyYW1lcyBhbmQgZGVjb2RlIGluIG9uZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPQkpFQ1RJVkUKKworICAgICAgICBUaGlzIGNo
YW5nZSBoYXMgdGhlIG9iamVjdGl2ZSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgcmVhZGluZyBH
SUYKKyAgICAgICAgZmlsZXMuIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIHBhcnNlIHRoZSBlbnRp
cmUgR0lGIGZpbGUgaW4gb25lIHBhc3MKKyAgICAgICAgYW5kIHNhdmVzIGluZm9ybWF0aW9uIGFi
b3V0IGVhY2ggZnJhbWUsIHN1Y2ggdGhhdCBkZWNvZGluZyBpbiBhIGxhdGVyCisgICAgICAgIHBh
c3MgZG9lcyBub3QgbmVlZCB0byBwYXJzZSB0aGUgZmlsZSBhZ2Fpbi4KKworICAgICAgICBUaGlz
IGNoYW5nZSBmaXhlcyB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBvZiBkZWNvZGluZyBHSUYgZmls
ZXMgd2hlbgorICAgICAgICBpdCBpcyByZWNlaXZlZCB2ZXJ5IHNsb3dseS4gRXhpc3RpbmcgaW1w
bGVtZW50YXRpb24gY3JlYXRlcyBhIG5ldworICAgICAgICBHSUZJbWFnZVJlYWRlciBmb3IgY291
bnRpbmcgZnJhbWVzIGZvciBldmVyeSBieXRlIHRoYXQgY29tZXMgaW4sIHRoaXMKKyAgICAgICAg
aGFzIE8obl4yKSBiZWhhdmlvciB3aGVuIGRhdGEgaXMgcmVjZWl2ZWQgdmVyeSBzbG93bHkuCisK
KyAgICAgICAgQUxHT1JJVEhNCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkaXZpZGVz
IHRoZSBkZWNvZGluZyBwcm9jZXNzIGludG8gdHdvIHNlcGFyYXRlCisgICAgICAgIHN0ZXBzOiBw
YXJzZSBhbmQgTFpXIGRlY29kaW5nLgorCisgICAgICAgIEluIHRoZSBwYXJzZSBzdGVwLCB0aGUg
c3RhdGUgbWFjaGluZSBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAgICAgICBpbXBsZW1l
bnRhdGlvbi4gSG93ZXZlciB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNv
ZGluZworICAgICAgICB3aGlsZSBzY2FubmluZyB0aHJvdWdoIHRoZSBmaWxlLiBJbnRlYWQgaXQg
Y3JlYXRlcyBhIG5ldyBkYXRhIHN0cnVjdHVyZQorICAgICAgICBmb3IgY2FjaGluZyBhbGwgZnJh
bWUgaW5mb3JtYXRpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExaVyBibG9ja3MuCisKKyAgICAg
ICAgSWYgYSBmdWxsIGRlY29kZSBpcyByZXF1ZXN0ZWQgdGhlbiBMWlcgZGVjb2RpbmcgaXMgcGVy
Zm9ybWVkLiBUaGlzCisgICAgICAgIGltcGxlbWVudGF0aW9uIGxvb2tzIHRocm91Z2ggYWxsIGZy
YW1lIGluZm9ybWF0aW9uIHNhdmVkIGFuZCBkZWNvZGVzCisgICAgICAgIGVhY2ggZnJhbWUgc2Vx
dWVudGlhbGx5IHVudGlsIHRoZSB0YXJnZXQgZnJhbWUgaXMgcmVhY2hlZC4KKworICAgICAgICBC
ZWNhdXNlIG9mIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnNlIGFuZCBkZWNvZGUsIGVhY2ggZnJhbWUg
Y2FuIGJlCisgICAgICAgIGRlY29kZWQgc2VwYXJhdGVseS4gVGhpcyBwYXZlcyB0aGUgd2F5IHRv
IHN1cHBvcnQgc2Vla2luZyBpbiBHSUYgZmlsZXMuCisKKyAgICAgICAgVEVTVElORworCisgICAg
ICAgIEFkZGVkIGEgbmV3IHVuaXQgdGVzdCB0byBjb3ZlciBwcm9ncmVzc2l2ZWx5IGRlY29kaW5n
IGEgR0lGIGltYWdlLgorICAgICAgICBUaGVyZSBhcmUgYWxyZWFkeSBHSUYgdW5pdCB0ZXN0cyBm
b3IgZnVuY3Rpb25hbCB0ZXN0aW5nLgorICAgICAgICBFeGhhdXN0aXZlIHRlc3Rpbmcgd2FzIGRv
bmUgbG9jYWxseSB3aXRoIGEgY29ycHVzIG9mIDYwayBpbWFnZXMuCisgICAgICAgIEkgbWl4ZWQg
dGhlIGNvcnB1cyB3aXRoIHNvbWUgZ2VuZXJhdGVkIGJhZCBkYXRhIGFuZCB0cnVuY2F0ZWQgZmls
ZXMuCisgICAgICAgIFRoZSByZXN1bHRzIHdhcyBiaXQtaWRlbnRpY2FsIHdoZW4gY29tcGFyZWQg
dG8gdGhlIHByZXZpb3VzCisgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoZXNl
IHdhcyBhbHNvIG5vIGNyYXNoaW5nIHdoZW4gZGVjb2RpbmcgdGhlIGVudGlyZSBjb3JwdXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEdJRkltYWdlRGVjb2Rlcik6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAg
ICAgICAgKEdJRkxaV0NvbnRleHQ6Om91dHB1dFJvdyk6CisgICAgICAgIChHSUZMWldDb250ZXh0
Ojpkb0xaVyk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmRlY29kZSk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6
CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICBUaGVyZSBpcyBhIGxv
dCBvZiByZXNodWZmbGluZyBpbiBHSUZMWldDb250ZXh0IGFuZCBHSUZGcmFtZUNvbnRleHQuCisg
ICAgICAgIFRoZXNlIGNoYW5nZXMgaGFzIHRoZSBnb2FsIG9mIGhhdmluZyBHSUZMWldDb250ZXh0
IGJlIGEgcHVyZSBkZWNvZGluZworICAgICAgICBzdGF0ZSBtYWNoaW5lLiBHSUZGcmFtZUNvbnRl
eHQgaXMgbW9zdGx5IGEgcmVhZC1vbmx5IGNvbnRhaW5lciBmb3IKKyAgICAgICAgZnJhbWUgaW5m
b3JtYXRpb24uIFdpdGggYWxsIHRoZXNlIGNoYW5nZXMgd2UgY2FuIGRlY29kZSBlYWNoCisgICAg
ICAgIEdJRkZyYW1lQ29udGV4dCBpbmRlcGVuZGVudGx5LgorCisgICAgICAgIFRoZSBvd25lcnNo
aXAgcGF0dGVybiBpczoKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgb3ducyBHSUZGcmFtZUNvbnRl
eHQgb3ducyBHSUZMWldDb250ZXh0LgorCisgICAgICAgIChHSUZMWldDb250ZXh0OjpHSUZMWldD
b250ZXh0KToKKyAgICAgICAgKEdJRkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGTFpXQ29udGV4
dDo6aGFzUmVtYWluaW5nUm93cyk6CisgICAgICAgIEdJRkxaV0NvbnRleHQgaXMgbW92ZWQgdG8g
dGhlIHRvcCBvZiBmaWxlLgorICAgICAgICAoR0lGTFpXQmxvY2spOgorICAgICAgICAoR0lGTFpX
QmxvY2s6OkdJRkxaV0Jsb2NrKToKKyAgICAgICAgTmV3IGRhdGEgc3RydWN0dXJlIHRvIHNhdmUg
YmxvY2sgcG9zaXRpb24gYW5kIHNpemUuCisgICAgICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAg
ICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJh
bWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
YWRkTHp3QmxvY2spOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojppc0NvbXBsZXRlKToKKyAg
ICAgICAgKEdJRkZyYW1lQ29udGV4dDo6aXNIZWFkZXJEZWZpbmVkKToKKyAgICAgICAgKEdJRkZy
YW1lQ29udGV4dDo6aXNEYXRhU2l6ZURlZmluZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0
OjpzZXRDb21wbGV0ZSk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OnNldEhlYWRlckRlZmlu
ZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpzZXREYXRhU2l6ZSk6CisgICAgICAgIE5v
dyBvd25zIEdJRkxaV0NvbnRleHQgZm9yIGRlY29kaW5nLgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6OkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+R0lGSW1hZ2VS
ZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmltYWdlc0NvdW50KToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpmcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlRmFpbGVkKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjppc0ZpcnN0RnJhbWUpOgorICAgICAgICBPd25zIGEgbGlzdCBvZiBHSUZGcmFt
ZUNvbnR4dC4KKwogMjAxMy0wMy0xMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgYXR0ZW1wdCB0byBmaXggYnVpbGQgYWZ0ZXIgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTQ1NDIxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAyODNiMzlmOGYzNjg0YWFmMmU5N2RhNTIzZjk2YTlkZDI3MjA4ZDU3Li45MDI1YjA5MzFl
NDRmOWY0NWI5ZjBjNTBjZjBlOTBlODg0OGQ0MzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMTAxLDYgKzEwMSwxOSBAQAogICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgogICAg
ICAgICAoV2ViVmlld0ltcGwpOgogCisyMDEzLTAzLTA5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gY291bnQgZnJhbWVzIGFuZCBk
ZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIGEgbmV3IEdJRiB1bml0IHRlc3QgZm9yIHByb2dyZXNzaXZlIGRlY29k
aW5nLiBUaGUgdGVzdCBpcyB0byB2ZXJpZnkKKyAgICAgICAgdGhhdCBwcm9ncmVzc2l2ZSBkZWNv
ZGluZyBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGFzIGEgdHJ1bmNhdGVkIGZpbGUuCisKKyAg
ICAgICAgKiB0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VEVTVCk6CisKIDIwMTMtMDMtMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgQ2hyb21pdW0gREVQUyB0byBy
MTg3MDM3LiAgUmVxdWVzdGVkIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGJi
ODg0MTViYjBjNTY1OGQwMjJhODFhZTU0N2JjYzE5N2RlYzJjMDAuLjU0ODg1YjBlOTAxN2Y3OTRj
MmI5YTFiZGI3MDRlYzZkYjU0NzA4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1LDcgKzM2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIo
SW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICAsIG1fYWxyZWFkeVNjYW5uZWRUaGlz
RGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRp
b25Mb29wT25jZSkKIHsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6
OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBJ
bWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBpZiAobV9y
ZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKGRhdGEpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hh
bmdlZCBpdC4KLSAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFs
c2U7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQpAQCAtNzks
MjEgKzc2LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKIAogc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgp
CiB7Ci0gICAgaWYgKCFtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBTY2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlv
ciBpZiB0aGUgZGF0YSB3ZXJlIHRvCi0gICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4g
IE1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKLSAgICAgICAgLy8gZXhp
c3RpbmcgcmVhZCBzZXNzaW9uIHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0
IGNyYXdsCi0gICAgICAgIC8vIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdv
cnNlIHRoYW4gd2hhdCBJbWFnZUlPIGRvZXMgb24KLSAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAo
aXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KLSAgICAgICAgR0lGSW1hZ2VSZWFk
ZXIgcmVhZGVyKDApOwotICAgICAgICByZWFkZXIuc2V0RGF0YShtX2RhdGEpOwotICAgICAgICBy
ZWFkZXIuZGVjb2RlKEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0x
KSk7Ci0gICAgICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSB0cnVl
OwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgp
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytp
KQotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEo
bV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9Ci0KKyAgICBkZWNvZGUoc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgIHJldHVybiBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwogfQogCkBAIC0xMDcsOCArOTAsOCBAQCBpbnQgR0lG
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBkZWZh
dWx0IHRvIGxvb3Bpbmcgb25jZSAodGhlIGluaXRpYWwgdmFsdWUgZm9yCiAgICAgLy8gfG1fcmVw
ZXRpdGlvbkNvdW50fCkuCiAgICAgLy8KLSAgICAvLyBUaGVyZSBhcmUgdHdvIGFkZGl0aW9uYWwg
d3JpbmtsZXMgaGVyZS4gIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBtYXkKLSAgICAvLyBk
ZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVz
c18KKyAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0
LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQorICAgIC8vIG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1h
a2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0
aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVjcmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0
aGUKICAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9uJ3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhp
cyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKICAgICAvLyBuZXcgcmVhZGVyIHdpbGwgb25jZSBh
Z2FpbiByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGFuZCB3ZSB3b24ndApAQCAtMTE4LDcgKzEw
MSwxNSBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAg
IC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVhdCBpdCBhcyBhICJsb29wIG9uY2UiIGFuaW1hdGlv
bi4gIFdlIGRvbid0IG5lZWQKICAgICAvLyBzcGVjaWFsIGNvZGUgaGVyZSBlaXRoZXIsIGJlY2F1
c2UgaW4gdGhpcyBjYXNlIHdlJ2xsIG5ldmVyIGNoYW5nZQogICAgIC8vIHxtX3JlcGV0aXRpb25D
b3VudHwgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICBpZiAobV9yZWFkZXIgJiYgKG1fcmVh
ZGVyLT5sb29wQ291bnQoKSAhPSBjTG9vcENvdW50Tm90U2VlbikpCisgICAgLy8KKyAgICAvLyBU
aGlyZCwgd2UgdXNlIHRoZSBzYW1lIEdJRkltYWdlUmVhZGVyIGZvciBjb3VudGluZyBmcmFtZXMg
YW5kIHdlIG1pZ2h0CisgICAgLy8gc2VlIHRoZSBsb29wIGNvdW50IGFuZCB0aGVuIGVuY291bnRl
ciBhIGRlY29kaW5nIGVycm9yIHdoaWNoIGhhcHBlbnMKKyAgICAvLyBsYXRlciBpbiB0aGUgc3Ry
ZWFtLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgbm8gZnJhbWVzIGFyZSBpbiB0aGUKKyAgICAv
LyBzdHJlYW0uIEluIHRoZXNlIGNhc2VzIHdlIHNob3VsZCBqdXN0IGxvb3Agb25jZS4KKyAgICBp
ZiAoZmFpbGVkKCkKKyAgICAgICAgfHwgKG1fcmVhZGVyICYmICghbV9yZWFkZXItPmltYWdlc0Nv
dW50KCkgfHwgbV9yZWFkZXItPnBhcnNlRmFpbGVkKCkpKSkKKyAgICAgICAgbV9yZXBldGl0aW9u
Q291bnQgPSBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgZWxzZSBpZiAobV9yZWFkZXIgJiYgbV9y
ZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29wQ291bnROb3RTZWVuKQogICAgICAgICBtX3JlcGV0
aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0
aW9uQ291bnQ7CiB9CkBAIC0zMjEsOSArMzEyLDMzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQogICAgICAgICBtX3Jl
YWRlci0+c2V0RGF0YShtX2RhdGEpOwogICAgIH0KIAotICAgIC8vIElmIHdlIGNvdWxkbid0IGRl
Y29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcK
LSAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlmICghbV9yZWFkZXItPmRlY29kZShxdWVyeSwgaGFs
dEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKHF1ZXJ5ID09IEdJRlNp
emVRdWVyeSkgeworICAgICAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGU2l6ZVF1ZXJ5LCBo
YWx0QXRGcmFtZSkpCisgICAgICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9yZWFkZXItPmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIGhh
bHRBdEZyYW1lKSkgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IHNpemVfdCBvbGRTaXplID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KTsKKyAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fcmVhZGVyLT5pbWFnZXNDb3Vu
dCgpOyArK2kpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFs
cGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisKKyAgICBpZiAocXVlcnkgPT0gR0lGRnJhbWVDb3Vu
dFF1ZXJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lG
RnVsbFF1ZXJ5LCBoYWx0QXRGcmFtZSkpIHsKKyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJdCBpcyBhbHNvIGEgZmF0YWwgZXJyb3IgaWYgYWxs
IGRhdGEgaXMgcmVjZWl2ZWQgYnV0IHdlIGZhaWxlZCB0byBkZWNvZGUKKyAgICAvLyBhbGwgZnJh
bWVzIGNvbXBsZXRlbHkuCisgICAgaWYgKGlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgaGFsdEF0RnJh
bWUgPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAmJiBtX3JlYWRlcikKICAgICAgICAgc2V0
RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA1NWY5YjM1NjRmNDEy
YzcwNzIxOTFkNzQwNjFiMTk2NzYxNmM2YjZkLi5mOWUxYjg0ZDMxODFhYTZjNTVmYmFjMjQ4ZWIz
MTJlOTU0MmI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC03Miw3ICs3Miw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsg
dGhlIGltYWdlIGFzIGZhaWxlZC4KICAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWdu
ZWQgZnJhbWVJbmRleCk7CiAKLSAgICAgICAgYm9vbCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFG
b3JGcmFtZUNvdW50OwogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAg
ICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAgT3duUHRyPEdJRklt
YWdlUmVhZGVyPiBtX3JlYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IGI4N2Y2
ZGY1N2U3Njk1ZDU1YmQzNTc0ZTJjMjMxOTBlZGRmN2YzMzcuLjI4YWIxZjY0NzBlODQwZGUyZjMz
M2RlMjJmMTEzNDY1ZmVkNDRkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTgs
MjAgKzk4LDIwIEBAIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKICNkZWZpbmUgR0VU
SU5UMTYocCkgICAoKHApWzFdPDw4fChwKVswXSkKIAogLy8gU2VuZCB0aGUgZGF0YSB0byB0aGUg
ZGlzcGxheSBmcm9udC1lbmQuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpvdXRwdXRSb3coKQorYm9v
bCBHSUZMWldDb250ZXh0OjpvdXRwdXRSb3coKQogewotICAgIGludCBkcm93U3RhcnQgPSBtX2Zy
YW1lQ29udGV4dC0+aXJvdzsKLSAgICBpbnQgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5pcm93
OworICAgIGludCBkcm93U3RhcnQgPSBpcm93OworICAgIGludCBkcm93RW5kID0gaXJvdzsKIAog
ICAgIC8vIEhhZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGlj
YXRlIGxpbmVzIHdoaWxlCiAgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0
aWFuLWJsaW5kIiBlZmZlY3QgYXMgdGhlIGltYWdlIGlzCiAgICAgLy8gbG9hZGVkLiBBZGp1c3Qg
cGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQog
ICAgIC8vIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMg
YXJlIGRyYXduLgotICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYm
IG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQp
IHsKKyAgICBpZiAobV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1l
Q29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFzcyA8IDQpIHsKICAgICAgICAgdW5zaWduZWQgcm93
RHVwID0gMDsKICAgICAgICAgdW5zaWduZWQgcm93U2hpZnQgPSAwOwogCi0gICAgICAgIHN3aXRj
aCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAg
ICAgICAgY2FzZSAxOgogICAgICAgICAgICAgcm93RHVwID0gNzsKICAgICAgICAgICAgIHJvd1No
aWZ0ID0gMzsKQEAgLTE0OCw4OCArMTQ4LDY1IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1
dFJvdygpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUg
Y2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93LgotICAgIGlmIChtX2NsaWVudCAmJiBt
X2ZyYW1lQ29udGV4dAotICAgICAgICAmJiAhbV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1faW1h
Z2VzQ291bnQgLSAxLCBtX2x6d0NvbnRleHQucm93QnVmZmVyLCBtX2ZyYW1lQ29udGV4dC0+d2lk
dGgsCi0gICAgICAgICAgICBkcm93U3RhcnQsIGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2Zy
YW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxh
Y2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA+IDEpKQorICAgIGlmICghbV9jbGllbnQtPmhh
dmVEZWNvZGVkUm93KG1fZnJhbWVDb250ZXh0LT5mcmFtZUlkLCByb3dCdWZmZXIsIG1fZnJhbWVD
b250ZXh0LT53aWR0aCwKKyAgICAgICAgZHJvd1N0YXJ0LCBkcm93RW5kIC0gZHJvd1N0YXJ0ICsg
MSwgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+
aW50ZXJsYWNlZCAmJiBpcGFzcyA+IDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIW1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkKQotICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aXJvdysrOworICAgICAgICBpcm93Kys7CiAgICAgZWxzZSB7CiAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKGlwYXNzKSB7CiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlyb3cgKz0gODsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQt
Pmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlyb3cgPSA0OworICAgICAgICAgICAgICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAg
ICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSA0OwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAyOgotICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAgICAgICBpcm93ICs9
IDg7CisgICAgICAgICAgICAgICAgaWYgKGlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkg
eworICAgICAgICAgICAgICAgICAgICBpcGFzcysrOworICAgICAgICAgICAgICAgICAgICBpcm93
ID0gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA0
OwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29u
dGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFz
cysrOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDE7CisgICAg
ICAgICAgICAgICAgaXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJh
bWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaXJvdyA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlyb3cgKz0gMjsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQt
Pmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlyb3cgPSAwOworICAgICAgICAgICAgICAgIGlyb3cgKz0gMjsKKyAgICAgICAgICAgICAg
ICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSAwOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9m
cmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFtZUNvbnRleHQtPmhlaWdodCAtIDEpKTsKKyAgICAg
ICAgfSB3aGlsZSAoaXJvdyA+IChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0gMSkpOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29k
aW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxv
Y2ssIHNpemVfdCBieXRlc0luQmxvY2spCisvLyBSZXR1cm4gdHJ1ZSBpZiBkZWNvZGluZyBibG9j
ayB3YXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIGVudGlyZSBibG9jayB3YXMgY29uc3VtZWQuCisvLyBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgd2FzIGEgY3JpdGljYWwgZGVjb2RpbmcgZXJyb3IuIFRoZSBl
cnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gY2xpZW50LgorYm9vbCBHSUZMWldDb250ZXh0Ojpk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKIHsK
LSAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIGlu
dCBjb2RlOwogICAgIGludCBpbmNvZGU7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2g7CiAK
LSAgICAvLyBDb3B5IGFsbCB0aGUgZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMgaW50byBsb2NhbHMg
c28gdGhlIGNvbXBpbGVyCi0gICAgLy8gd29uJ3Qgd29ycnkgYWJvdXQgdGhlbSBiZWluZyBhbGlh
c2VkLiBUaGUgbG9jYWxzIHdpbGwgYmUgaG9tZWQKLSAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBk
ZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCi0gICAgaW50IGF2YWlsID0gbV9sendDb250
ZXh0LmF2YWlsOwotICAgIGludCBiaXRzID0gbV9sendDb250ZXh0LmJpdHM7Ci0gICAgc2l6ZV90
IGNudCA9IGJ5dGVzSW5CbG9jazsKLSAgICBpbnQgY29kZXNpemUgPSBtX2x6d0NvbnRleHQuY29k
ZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrID0gbV9sendDb250ZXh0LmNvZGVtYXNrOwotICAgIGlu
dCBvbGRjb2RlID0gbV9sendDb250ZXh0Lm9sZGNvZGU7Ci0gICAgaW50IGNsZWFyQ29kZSA9IG1f
bHp3Q29udGV4dC5jbGVhckNvZGU7Ci0gICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXIgPSBtX2x6
d0NvbnRleHQuZmlyc3RjaGFyOwotICAgIGludCBkYXR1bSA9IG1fbHp3Q29udGV4dC5kYXR1bTsK
LQotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4mIHByZWZpeCA9IG1fbHp3Q29udGV4dC5wcmVm
aXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdWZmaXggPSBtX2x6d0NvbnRleHQuc3Vm
Zml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgc3RhY2sgPSBtX2x6d0NvbnRleHQuc3Rh
Y2s7Ci0gICAgc2l6ZV90IHN0YWNrcCA9IG1fbHp3Q29udGV4dC5zdGFja3A7Ci0gICAgc2l6ZV90
IHJvd3AgPSBtX2x6d0NvbnRleHQucm93UG9zaXRpb247Ci0gICAgc2l6ZV90IHdpZHRoID0gbV9m
cmFtZUNvbnRleHQtPndpZHRoOwotICAgIHNpemVfdCByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNv
bnRleHQtPnJvd3NSZW1haW5pbmc7Ci0KLSAgICBpZiAocm93cCA9PSB3aWR0aCkKKyAgICBpZiAo
cm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICNkZWZpbmUgT1VUUFVUX1JPVyBcCkBAIC0yMzcsMTMgKzIxNCwxMiBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5C
bG9jaykKICAgICAgICAgaWYgKCFvdXRwdXRSb3coKSkgXAogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyBcCiAgICAgICAgIHJvd3NSZW1haW5pbmctLTsgXAotICAgICAgICByb3dwID0gMDsgXAot
ICAgICAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24gPSAwOyBcCisgICAgICAgIHJvd1Bvc2l0
aW9uID0gMDsgXAogICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpIFwKLSAgICAgICAgICAgIGdv
dG8gRU5EOyBcCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXAogICAgIH0gd2hpbGUgKDApCiAK
LSAgICBmb3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsgY2grKykgeworICAgIGZvciAoY2ggPSBi
bG9jazsgYnl0ZXNJbkJsb2NrLS0gPiAwOyBjaCsrKSB7CiAgICAgICAgIC8vIEZlZWQgdGhlIG5l
eHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4KICAgICAgICAg
ZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKICAgICAgICAgYml0cyArPSA4OwpAQCAtMjY5
LDEyICsyNDUsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQg
Y2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgLy8gZW5k
LW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEuCiAgICAg
ICAgICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChvbGRjb2RlID09IC0xKSB7Ci0gICAgICAgICAgICAg
ICAgbV9sendDb250ZXh0LnJvd0J1ZmZlcltyb3dwKytdID0gc3VmZml4W2NvZGVdOwotICAgICAg
ICAgICAgICAgIGlmIChyb3dwID09IHdpZHRoKQorICAgICAgICAgICAgICAgIHJvd0J1ZmZlclty
b3dQb3NpdGlvbisrXSA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgICAgICAgICBpZiAocm93UG9z
aXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JP
VzsKIAogICAgICAgICAgICAgICAgIGZpcnN0Y2hhciA9IG9sZGNvZGUgPSBjb2RlOwpAQCAtMjg3
LDEyICsyNjMsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQg
Y2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgY29kZSA9
IG9sZGNvZGU7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IE1BWF9CWVRFUykKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgp
IDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJDb2RlKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGNvZGUgPj0gTUFYX0JZVEVTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25seSBob2xkcyBjaGFyYWN0ZXJzIHRocm91
Z2ggc3VmZml4W2F2YWlsIC0gMV0sCiAgICAgICAgICAgICAgICAgLy8gYWxsb3dpbmcgY29kZSA+
PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3JtZWQKQEAgLTMw
Miw3ICsyNzgsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAgICBjb2RlID0g
cHJlZml4W2NvZGVdOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcCA9PSBNQVhfQllURVMp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWls
ZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHN0YWNrW3N0YWNrcCsrXSA9IGZpcnN0Y2hhciA9IHN1ZmZp
eFtjb2RlXTsKQEAgLTMyNSwzNiArMzAxLDEwMCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xa
Vyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKIAogICAg
ICAgICAgICAgLy8gQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0aGUgc2NhbmxpbmUgYnVm
ZmVyLgogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG1fbHp3Q29udGV4dC5yb3dC
dWZmZXJbcm93cCsrXSA9IHN0YWNrWy0tc3RhY2twXTsKLSAgICAgICAgICAgICAgICBpZiAocm93
cCA9PSB3aWR0aCkKKyAgICAgICAgICAgICAgICByb3dCdWZmZXJbcm93UG9zaXRpb24rK10gPSBz
dGFja1stLXN0YWNrcF07CisgICAgICAgICAgICAgICAgaWYgKHJvd1Bvc2l0aW9uID09IHJvd0J1
ZmZlci5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9ST1c7CiAgICAgICAgICAg
ICB9IHdoaWxlIChzdGFja3AgPiAwKTsKICAgICAgICAgfQogICAgIH0KIAotRU5EOgotICAgIC8v
IEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29kZXIgc3RhdGUgdmFyaWFibGVz
LgotICAgIG1fbHp3Q29udGV4dC5hdmFpbCA9IGF2YWlsOwotICAgIG1fbHp3Q29udGV4dC5iaXRz
ID0gYml0czsKLSAgICBtX2x6d0NvbnRleHQuY29kZXNpemUgPSBjb2Rlc2l6ZTsKLSAgICBtX2x6
d0NvbnRleHQuY29kZW1hc2sgPSBjb2RlbWFzazsKLSAgICBtX2x6d0NvbnRleHQub2xkY29kZSA9
IG9sZGNvZGU7Ci0gICAgbV9sendDb250ZXh0LmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKLSAgICBt
X2x6d0NvbnRleHQuZGF0dW0gPSBkYXR1bTsKLSAgICBtX2x6d0NvbnRleHQuc3RhY2twID0gc3Rh
Y2twOwotICAgIG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbiA9IHJvd3A7Ci0gICAgbV9mcmFtZUNv
bnRleHQtPnJvd3NSZW1haW5pbmcgPSByb3dzUmVtYWluaW5nOwogICAgIHJldHVybiB0cnVlOwog
fQogCisvLyBQZXJmb3JtIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lLiBmcmFtZURlY29kZWQgd2ls
bCBiZSB0cnVlIGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZGVjb2RlZC4KKy8vIFJldHVybiB0cnVl
IGlmIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lIGhhcyBwcm9ncmVzc2VkLgorLy8gUmV0dXJuIGZh
bHNlIGlmIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGRlY29kaW5nIGVycm9yLiBUaGUgZXJyb3Igc2hv
dWxkIGJlIHJlcG9ydGVkIHRvIGNsaWVudC4KK2Jvb2wgR0lGRnJhbWVDb250ZXh0OjpkZWNvZGUo
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyKiBjbGllbnQsIGJvb2wqIGZyYW1lRGVjb2RlZCkKK3sKKyAgICAqZnJhbWVEZWNv
ZGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2x6d0NvbnRleHQpIHsKKyAgICAgICAgLy8gV2FpdCBm
b3IgbW9yZSBkYXRhIHRvIHByb3Blcmx5IGluaXRpYWxpemUgR0lGTFpXQ29udGV4dC4KKyAgICAg
ICAgaWYgKCFpc0RhdGFTaXplRGVmaW5lZCgpIHx8ICFpc0hlYWRlckRlZmluZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIG1fbHp3Q29udGV4dCA9IGFkb3B0UHRyKG5l
dyBHSUZMWldDb250ZXh0KGNsaWVudCwgdGhpcykpOworICAgICAgICBpZiAoIW1fbHp3Q29udGV4
dC0+cHJlcGFyZVRvRGVjb2RlKCkpIHsKKyAgICAgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJy
ZW50THp3QmxvY2sgPSAwOworICAgIH0KKworICAgIC8vIFNvbWUgYmFkIEdJRnMgaGF2ZSBleHRy
YSBibG9ja3MgYmV5b25kIHRoZSBsYXN0IHJvdywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBkZWNv
ZGUuCisgICAgd2hpbGUgKG1fY3VycmVudEx6d0Jsb2NrIDwgbV9sendCbG9ja3Muc2l6ZSgpICYm
IG1fbHp3Q29udGV4dC0+aGFzUmVtYWluaW5nUm93cygpKSB7CisgICAgICAgIHNpemVfdCBibG9j
a1Bvc2l0aW9uID0gbV9sendCbG9ja3NbbV9jdXJyZW50THp3QmxvY2tdLmJsb2NrUG9zaXRpb247
CisgICAgICAgIHNpemVfdCBibG9ja1NpemUgPSBtX2x6d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9j
a10uYmxvY2tTaXplOworICAgICAgICBpZiAoYmxvY2tQb3NpdGlvbiArIGJsb2NrU2l6ZSA+IGxl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2x6d0NvbnRl
eHQtPmRvTFpXKGRhdGEgKyBibG9ja1Bvc2l0aW9uLCBibG9ja1NpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICArK21fY3VycmVudEx6d0Jsb2NrOworICAgIH0KKworICAg
IC8vIElmIHRoaXMgZnJhbWUgaXMgZGF0YSBjb21wbGV0ZSB0aGVuIHRoZSBwcmV2aW91cyBsb29w
IG11c3QgaGF2ZSBjb21wbGV0ZWx5IGRlY29kZWQgYWxsIExaVyBibG9ja3MuCisgICAgLy8gVGhl
cmUgd2lsbCBiZSBubyBtb3JlIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lIHNvIGl0J3MgdGltZSB0
byBjbGVhbnVwLgorICAgIC8vIE5vdGUgdGhhdCBzb21lIGJyb2tlbiBHSUYgZmlsZXMgaGF2ZSBu
byBtb3JlIExaVyBibG9ja3MgYnV0IHN0aWxsIHNvbWUgcm93cyByZW1haW5pbmcuCisgICAgLy8g
V2UgdHJlYXQgaXQgYXMgZnJhbWUgY29tcGxldGUgYXMgd2VsbCwgdG8gYmUgY29uc2lzdGVudCB3
aXRoIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChpc0NvbXBsZXRlKCkpIHsKKyAg
ICAgICAgKmZyYW1lRGVjb2RlZCA9IHRydWU7CisgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigp
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRGVjb2RlIGFsbCBmcmFtZXMgYmVm
b3JlIGhhbHRBdEZyYW1lLgorLy8gVGhpcyBtZXRob2QgdXNlcyBHSUZGcmFtZUNvbnRleHQ6ZGVj
b2RlKCkgdG8gZGVjb2RlIGVhY2ggZnJhbWUsIGRlY29kaW5nIGVycm9yIGlzIHJlcG9ydGVkIHRv
IGNsaWVudCBhcyBhIGNyaXRpY2FsIGZhaWx1cmUuCisvLyBSZXR1cm4gdHJ1ZSBpZiBkZWNvZGlu
ZyBoYXMgcHJvZ3Jlc3NlZC4gcmV0dXJuIGZhbHNlOyBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQu
CiBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGUoR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBx
dWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZXNSZWFkIDw9
IG1fZGF0YS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gZGVjb2RlSW50ZXJuYWwobV9ieXRlc1JlYWQs
IG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRlc1JlYWQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7CisKKyAg
ICAvLyBUcnkgdG8gYmUgdG9sZXJhbnQgYW5kIGRvbid0IHJlcG9ydCBwYXJzaW5nIGVycm9ycyBi
dXQgd2Ugd2lsbCBub3QgcGFyc2UgYWdhaW4uCisgICAgLy8gUHJldmlvdXMgaW1wbGVtZW50YXRp
b24gdXNlZCBhIHNlcGFyYXRlIEdJRkltYWdlUmVhZGVyIHRvIGNvdW50IGZyYW1lcywgc28gcGFy
c2luZyBlcnJvciB3YXMgdG9sZXJhdGVkCisgICAgLy8gYnV0IG5vdCBkZWNvZGluZyBlcnJvci4g
RG8gYSBzZXBhcmF0ZSBjYXNlIGhlcmUgdG8gbWF0Y2ggcHJldmlvdXMgaW1wbGVtZW50YXRpb24u
CisgICAgaWYgKCFtX3BhcnNlRmFpbGVkICYmICFwYXJzZShtX2J5dGVzUmVhZCwgbV9kYXRhLT5z
aXplKCkgLSBtX2J5dGVzUmVhZCwgcXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVl
cnkpKQorICAgICAgICBtX3BhcnNlRmFpbGVkID0gdHJ1ZTsKKworICAgIGlmIChxdWVyeSAhPSBH
SUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICB3aGlsZSAobV9jdXJyZW50RGVjb2RpbmdGcmFtZSA8IHN0ZDo6bWluKG1fZnJhbWVzLnNpemUo
KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihoYWx0QXRGcmFtZSkpKSB7CisgICAgICAgIGJvb2wgZnJh
bWVEZWNvZGVkID0gZmFsc2U7CisgICAgICAgIEdJRkZyYW1lQ29udGV4dCogY3VycmVudEZyYW1l
ID0gbV9mcmFtZXNbbV9jdXJyZW50RGVjb2RpbmdGcmFtZV0uZ2V0KCk7CisKKyAgICAgICAgaWYg
KCFjdXJyZW50RnJhbWUtPmRlY29kZShkYXRhKDApLCBtX2RhdGEtPnNpemUoKSwgbV9jbGllbnQs
ICZmcmFtZURlY29kZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8v
IEV4aXQgdGhpcyBsb29wIGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gY29udGludWUgZGVjb2Rp
bmcuCisgICAgICAgIGlmICghZnJhbWVEZWNvZGVkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKCFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2N1cnJlbnREZWNvZGluZ0ZyYW1l
LCBjdXJyZW50RnJhbWUtPmRlbGF5VGltZSwgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrbV9jdXJyZW50RGVjb2RpbmdG
cmFtZTsKKyAgICB9CisKKyAgICAvLyBBbGwgZnJhbWVzIGRlY29kZWQuCisgICAgaWYgKG1fY3Vy
cmVudERlY29kaW5nRnJhbWUgPT0gbV9mcmFtZXMuc2l6ZSgpICYmIG1fcGFyc2VDb21wbGV0ZWQp
CisgICAgICAgIG1fY2xpZW50LT5naWZDb21wbGV0ZSgpOworICAgIHJldHVybiB0cnVlOwogfQog
Ci0vLyBQcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRl
Y29kZXIuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBv
c2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNp
Z25lZCBoYWx0QXRGcmFtZSkKKy8vIFBhcnNlIGluY29taW5nIEdJRiBkYXRhIHN0cmVhbSBpbnRv
IGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4KKy8vIFJldHVybiB0cnVlIGlmIHBhcnNpbmcgaGFz
IHByb2dyZXNzZWQgb3IgdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhLgorLy8gUmV0dXJuIGZhbHNl
IGlmIGEgZmF0YWwgZXJyb3IgaXMgZW5jb3VudGVyZWQuCitib29sIEdJRkltYWdlUmVhZGVyOjpw
YXJzZShzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkp
CiB7CiAgICAgaWYgKCFsZW4pIHsKICAgICAgICAgLy8gTm8gbmV3IGRhdGEgaGFzIGNvbWUgaW4g
c2luY2UgdGhlIGxhc3QgY2FsbCwganVzdCBpZ25vcmUgdGhpcyBjYWxsLgpAQCAtMzYyLDEyICs0
MDIsMTMgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICB9CiAKICAgICBpZiAobGVuIDwg
bV9ieXRlc1RvQ29uc3VtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIC8vIFRoaXMgbG9vcCByZWFkcyBhcyBtYW55IGNvbXBvbmVudHMgZnJvbSB8
bV9kYXRhfCBhcyBwb3NzaWJsZS4KICAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRl
cmF0aW9uLCBkYXRhUG9zaXRpb24gd2lsbCBiZSBhZHZhbmNlZCBieSBtX2J5dGVzVG9Db25zdW1l
IHRvCiAgICAgLy8gcG9pbnQgdG8gdGhlIG5leHQgY29tcG9uZW50LiBsZW4gd2lsbCBiZSBkZWNy
ZW1lbnRlZCBhY2NvcmRpbmdseS4KICAgICB3aGlsZSAobGVuID49IG1fYnl0ZXNUb0NvbnN1bWUp
IHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiA9IGRhdGFQ
b3NpdGlvbjsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY3VycmVudENvbXBvbmVudCA9
IGRhdGEoZGF0YVBvc2l0aW9uKTsKIAogICAgICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbXBv
bmVudCBhcyBjb25zdW1lZC4gTm90ZSB0aGF0IGN1cnJlbnRDb21wb25lbnQgd2lsbCByZW1haW4g
cG9pbnRlZCBhdCB0aGlzCkBAIC0zNzcsMjAgKzQxOCwxNSBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFn
ZURlYwogCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEdJRkxaVzoK
KyAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIC8v
IG1fYnl0ZXNUb0NvbnN1bWUgaXMgdGhlIGN1cnJlbnQgY29tcG9uZW50IHNpemUgYmVjYXVzZSBp
dCBoYXNuJ3QgYmVlbiB1cGRhdGVkLgotICAgICAgICAgICAgaWYgKCFkb0xaVyhjdXJyZW50Q29t
cG9uZW50LCBtX2J5dGVzVG9Db25zdW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxl
ZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCisgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPmFk
ZEx6d0Jsb2NrKGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiwgbV9ieXRlc1RvQ29uc3VtZSk7CiAg
ICAgICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgR0lGTFpXU3RhcnQ6IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJ
bWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSkgewotICAgICAgICAgICAgICAgIGludCBkYXRhc2l6
ZSA9ICpjdXJyZW50Q29tcG9uZW50OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5k
YXRhc2l6ZSA9IGRhdGFzaXplOwotICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgTFpXIHBh
cnNlci9kZWNvZGVyLgotICAgICAgICAgICAgICAgIGlmICghbV9sendDb250ZXh0LnByZXBhcmVU
b0RlY29kZShtX3NjcmVlbldpZHRoLCBkYXRhc2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgbV9mcmFtZXMubGFzdCgpLT5zZXREYXRhU2l6ZSgqY3VycmVudENvbXBvbmVudCk7CiAgICAg
ICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC00MDIsNyArNDM4LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJu
YWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAg
ICAgIGVsc2UgaWYgKCFzdHJuY21wKChjaGFyKiljdXJyZW50Q29tcG9uZW50LCAiR0lGODdhIiwg
NikpCiAgICAgICAgICAgICAgICAgbV92ZXJzaW9uID0gODc7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDog
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgR0VUTig3
LCBHSUZHbG9iYWxIZWFkZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQx
NSw2ICs0NTEsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3Qg
ZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgbV9zY3Jl
ZW5IZWlnaHQgPSBHRVRJTlQxNihjdXJyZW50Q29tcG9uZW50ICsgMik7CiAKICAgICAgICAgICAg
IC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCisgICAg
ICAgICAgICAvLyBOb3RlOiBBIHN1YnNlcXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBkaW1lbnNpb25z
IGxhcmdlciB0aGFuIHRoZSAic2NyZWVuIiBkaW1lbnNpb25zLgogICAgICAgICAgICAgaWYgKG1f
Y2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdo
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NjgsNyArNTA1LDcgQEAg
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwg
c2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgIC8vIHVudGlsIHdlIGZpbmQgYW4g
aW1hZ2Ugc2VwYXJhdG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAogICAgICAgICAgICAgLy8gYSBm
aWxlIGlzIGNvcnJ1cHQuIFdlIGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LgogICAgICAgICAg
ICAgaWYgKCpjdXJyZW50Q29tcG9uZW50ICE9ICcsJykKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC01MzUsMzAgKzU3MiwyMyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJ
bWFnZURlYwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZDb250cm9sRXh0ZW5zaW9uOiB7
Ci0gICAgICAgICAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50
UXVlcnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IG5ldyBHSUZGcmFtZUNvbnRleHQoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50ICYgMHgxKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOwotICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlz
VHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4
IGNvbnRyb2wgZXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRo
b2QgZW51bQotICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3Bl
YyEKLSAgICAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9u
ZW50KSA+PiAyKSAmIDB4NzsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9z
YWxNZXRob2QgPSAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNw
b3NhbE1ldGhvZDsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQg
KHZhbHVlIDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUgMwotICAgICAgICAgICAgICAgIC8vIExl
dCdzIGNob29zZSAzICh0aGUgbW9yZSBwb3B1bGFyKQotICAgICAgICAgICAgICAgIGlmIChkaXNw
b3NhbE1ldGhvZCA9PSA0KQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlz
cG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlv
dXM7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSA9IEdFVElOVDE2
KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
YWRkRnJhbWVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgR0lGRnJhbWVDb250ZXh0KiBjdXJy
ZW50RnJhbWUgPSBtX2ZyYW1lcy5sYXN0KCkuZ2V0KCk7CisgICAgICAgICAgICBjdXJyZW50RnJh
bWUtPmlzVHJhbnNwYXJlbnQgPSAqY3VycmVudENvbXBvbmVudCAmIDB4MTsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50RnJhbWUtPmlzVHJhbnNwYXJlbnQpCisgICAgICAgICAgICAgICAgY3VycmVu
dEZyYW1lLT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOworCisgICAgICAgICAgICAvLyBX
ZSBpZ25vcmUgdGhlICJ1c2VyIGlucHV0IiBiaXQuCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlz
IHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KKyAg
ICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKKyAgICAgICAgICAg
IGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRDb21wb25lbnQpID4+IDIpICYgMHg3Owor
ICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsK
KworICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBtZXRob2QgMyBp
cyAib3ZlcndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZworICAgICAgICAgICAg
Ly8gdGhlIHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlzLiBXZSBtYXAg
Ym90aCB0byB0aGUgc2FtZSB2YWx1ZS4KKyAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9
PSA0KQorICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJD
b3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7CisgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAq
IDEwOwogICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTU4Nyw4ICs2MTcsOSBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFn
ZURlYwogCiAgICAgICAgIC8vIE5ldHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246IGFuaW1h
dGlvbiBsb29waW5nLgogICAgICAgICBjYXNlIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2s6IHsK
KyAgICAgICAgICAgIC8vIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbiBhbHdheSByZWFkcyAz
IGJ5dGVzIGZyb20gdGhlIHN0cmVhbTsgV2Ugc2hvdWxkIGF0IGxlYXN0IHdhaXQgZm9yIHRoaXMg
YW1vdW50LgogICAgICAgICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50KQotICAgICAgICAgICAg
ICAgIEdFVE4oKmN1cnJlbnRDb21wb25lbnQsIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7
CisgICAgICAgICAgICAgICAgR0VUTihzdGQ6Om1heCgzLCBzdGF0aWNfY2FzdDxpbnQ+KCpjdXJy
ZW50Q29tcG9uZW50KSksIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNjE2LDcgKzY0Nyw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29k
ZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAg
ICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0byBiZSBk
ZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcwotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC02MzYsNyArNjY3LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJu
YWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAg
ICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0IEdJ
Rjg3YQogICAgICAgICAgICAgICogZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgogICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2RlZAorICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpCiAgICAgICAgICAgICAgICAgJiYgKCht
X3NjcmVlbkhlaWdodCA8IGhlaWdodCkgfHwgKG1fc2NyZWVuV2lkdGggPCB3aWR0aCkgfHwgKG1f
dmVyc2lvbiA9PSA4NykpKSB7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBoZWln
aHQ7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHdpZHRoOwpAQCAtNjUzLDEwICs2
ODQsMTAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICBoZWlnaHQg
PSBtX3NjcmVlbkhlaWdodDsKICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fc2NyZWVuV2lkdGg7
CiAgICAgICAgICAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0
RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVkKSB7CisgICAgICAgICAgICBpZiAocGFyc2VTaXplT25s
eSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3AuIEhhbmQg
YmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KICAgICAgICAgICAgICAg
ICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0byByZWFkIHRoZSBo
ZWFkZXIpLgogICAgICAgICAgICAgICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbiArIDkpOwpAQCAt
NjY0LDYyICs2OTUsNDAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6
ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9pbWFnZXNDb3Vu
dCA9IG1faW1hZ2VzRGVjb2RlZCArIDE7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJ
bWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhbV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0KCk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT54T2Zmc2V0ID0geE9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+eU9m
ZnNldCA9IHlPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmhlaWdodCA9
IGhlaWdodDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+d2lkdGggPSB3aWR0aDsK
LQotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHRha2VuIGlmIHRo
aXMgaXMgdGhlIGZpcnN0IGltYWdlICovCi0gICAgICAgICAgICAgICAgLyogYmVpbmcgZGVjb2Rl
ZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KLSAgICAgICAg
ICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRlIGJ1
ZmZlcnMuICAgICAqLwotICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSBzdGQ6Om1heCht
X3NjcmVlbldpZHRoLCB3aWR0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5IZWln
aHQgPCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0
OwotCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDQwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJs
YWNlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3Mg
PSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbV9pbWFnZXNE
ZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVE
aXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkg
ZGlzcGxheSBoYWNrCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNhdmluZyB0aGUg
dW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgICAgICAgICAvLyBhdm9p
ZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQotICAgICAgICAgICAg
ICAgICAgICAvLyB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNwbGF5
IHN1Y2gKLSAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkKLSAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9IGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZy
b20gbGFzdCBpbWFnZS4KLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7
Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSBtX2ZyYW1l
Q29udGV4dC0+aGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgLy8gYml0cyBwZXIgcGl4ZWwgaXMg
Y3VycmVudENvbXBvbmVudFs4XSYweDA3Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IGhhcyBhIGxvY2FsIGNvbG9ybWFwPwotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRb
OF0gJiAweDgwKSB7CisgICAgICAgICAgICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7CisgICAgICAg
ICAgICBHSUZGcmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3QoKS5nZXQo
KTsKKworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5zZXRIZWFkZXJEZWZpbmVkKCk7CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAgY3Vy
cmVudEZyYW1lLT55T2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+
aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT53aWR0aCA9IHdpZHRo
OworICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHN0ZDo6bWF4KG1fc2NyZWVuV2lkdGgsIHdp
ZHRoKTsKKyAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gc3RkOjptYXgobV9zY3JlZW5IZWln
aHQsIGhlaWdodCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmludGVybGFjZWQgPSBjdXJy
ZW50Q29tcG9uZW50WzhdICYgMHg0MDsKKworICAgICAgICAgICAgLy8gT3ZlcmxheWluZyBpbnRl
cmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgIC8vIGV4aXN0aW5nIGlt
YWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjaworICAgICAgICAgICAgLy8g
cmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRvCisgICAgICAg
ICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQor
ICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlz
cGxheSBzdWNoCisgICAgICAgICAgICAvLyBpbWFnZXMgcHJvZ3Jlc3NpdmVseS4gV2hpY2ggbWVh
bnMgb25seSB0aGUgZmlyc3QKKyAgICAgICAgICAgIC8vIGZyYW1lIGNhbiBiZSBwcm9ncmVzc2l2
ZWx5IGRpc3BsYXllZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBwb3NzaWJsZSB0aGF0
IGEgbm9uLXRyYW5zcGFyZW50IGZyYW1lCisgICAgICAgICAgICAvLyBjYW4gYmUgaW50ZXJsYWNl
ZCBhbmQgcHJvZ3Jlc3NpdmVseSBkaXNwbGF5ZWQuCisgICAgICAgICAgICBjdXJyZW50RnJhbWUt
PnByb2dyZXNzaXZlRGlzcGxheSA9IGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpOworCisgICAg
ICAgICAgICAvLyBiaXRzIHBlciBwaXhlbCBpcyBjdXJyZW50Q29tcG9uZW50WzhdJjB4MDcKKwor
ICAgICAgICAgICAgY29uc3QgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gY3VycmVudENv
bXBvbmVudFs4XSAmIDB4ODA7CisgICAgICAgICAgICBpZiAoaXNMb2NhbENvbG9ybWFwRGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSB0aHJlZSBsb3ctb3JkZXIgYml0cyBvZiBjdXJy
ZW50Q29tcG9uZW50WzhdIHNwZWNpZnkgdGhlIGJpdHMgcGVyIHBpeGVsLgogICAgICAgICAgICAg
ICAgIGludCBudW1Db2xvcnMgPSAyIDw8IChjdXJyZW50Q29tcG9uZW50WzhdICYgMHg3KTsKICAg
ICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbG9jYWxDb2xvcm1hcEJ5dGVzID0gMyAqIG51bUNv
bG9yczsKIAogICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0
dGUgYWZ0ZXIgaXQgbG9hZHMKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3NpdGlv
biA9IGRhdGFQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxv
Y2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3NpdGlv
bjsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplID0gbnVt
Q29sb3JzOwogCiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IGxvY2FsQ29sb3JtYXBCeXRlcykg
ewogICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGhhdmUgZW5vdWdoIGJ5dGVz
IHRvIGNvbnN1bWUgdGhlIGVudGlyZSBjb2xvcm1hcCBhdCBvbmNlLgpAQCAtNzI3LDcwICs3MzYs
NTEgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3Np
dGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0
KQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVm
aW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3Jt
YXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gbG9jYWxD
b2xvcm1hcEJ5dGVzOwogICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFwQnl0ZXM7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFs
ZXR0ZQotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3Jt
YXBEZWZpbmVkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBHRVROKDEsIEdJ
RkxaV1N0YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBHSUZJbWFnZUNvbG9ybWFwOiB7Ci0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpCi0g
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0
cnVlOworICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgbV9mcmFtZXMubGFzdCgpLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIEdFVE4oMSwgR0lGTFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7Ci0gICAgICAgICAgICAvLyBTdGlsbCB3
b3JraW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2suCiAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgYnl0ZXNJbkJsb2NrID0gKmN1cnJlbnRDb21wb25lbnQ7
Ci0gICAgICAgICAgICBpZiAoYnl0ZXNJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0YQotICAgICAg
ICAgICAgICAgIC8vIGlzIGNvcnJ1cHQsIHdlIG1heSBub3QgZ2V0IGFuIGV4cGxpY2l0IHRlcm1p
bmF0b3IuCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0ICYmICFtX2ZyYW1lQ29u
dGV4dC0+cm93c1JlbWFpbmluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGlsbGVnYWwgR0lGLCBidXQgd2UgcmVtYWluIHRvbGVyYW50LgotICAgICAgICAgICAgICAgICAg
ICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYnl0ZXNJbkJsb2NrKQogICAgICAgICAgICAgICAgIEdFVE4oYnl0ZXNJbkJsb2NrLCBHSUZM
WlcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhl
cmUgYXJlIGFueSBtb3JlIGltYWdlcyBpbiB0aGlzIHNlcXVlbmNlLgotICAgICAgICAgICAgICAg
IG1faW1hZ2VzRGVjb2RlZCsrOwotCi0gICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBm
cmFtZSBpcyBub3cgY29tcGxldGUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmIG1f
ZnJhbWVDb250ZXh0ICYmICFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2ltYWdlc0RlY29kZWQg
LSAxLCBtX2ZyYW1lQ29udGV4dC0+ZGVsYXlUaW1lLCBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxN
ZXRob2QpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxl
dGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgotCi0gICAgICAg
ICAgICAgICAgLy8gQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdlCi0gICAgICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQot
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5pc2hlZCBwYXJzaW5n
IG9uZSBmcmFtZTsgUHJvY2VzcyBuZXh0IGZyYW1lLgorICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9mcmFtZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPnNl
dENvbXBsZXRlKCk7CiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBHSUZEb25lOiB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwgd2UgY2Fu
IHN0b3AuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGll
bnQtPmdpZkNvbXBsZXRlKCk7CisgICAgICAgICAgICBtX3BhcnNlQ29tcGxldGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBzZXRSZW1haW5pbmdCeXRlcyhsZW4pOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90
IHJlbWFpbmluZ0J5dGVzKQpAQCAtNzk5LDIyICs3ODksMzMgQEAgdm9pZCBHSUZJbWFnZVJlYWRl
cjo6c2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90IHJlbWFpbmluZ0J5dGVzKQogICAgIG1fYnl0ZXNS
ZWFkID0gbV9kYXRhLT5zaXplKCkgLSByZW1haW5pbmdCeXRlczsKIH0KIAotYm9vbCBHSUZMWldD
b250ZXh0OjpwcmVwYXJlVG9EZWNvZGUodW5zaWduZWQgcm93V2lkdGgsIGludCBkYXRhc2l6ZSkK
K3ZvaWQgR0lGSW1hZ2VSZWFkZXI6OmFkZEZyYW1lSWZOZWNlc3NhcnkoKQogeworICAgIGlmICht
X2ZyYW1lcy5pc0VtcHR5KCkgfHwgbV9mcmFtZXMubGFzdCgpLT5pc0NvbXBsZXRlKCkpCisgICAg
ICAgIG1fZnJhbWVzLmFwcGVuZChhZG9wdFB0cihuZXcgR0lGRnJhbWVDb250ZXh0KG1fZnJhbWVz
LnNpemUoKSkpKTsKK30KKworLy8gRklYTUU6IE1vdmUgdGhpcyBtZXRob2QgdG8gY2xvc2UgdG8g
ZG9MWlcoKS4KK2Jvb2wgR0lGTFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKCkKK3sKKyAgICBB
U1NFUlQobV9mcmFtZUNvbnRleHQtPmlzRGF0YVNpemVEZWZpbmVkKCkgJiYgbV9mcmFtZUNvbnRl
eHQtPmlzSGVhZGVyRGVmaW5lZCgpKTsKKwogICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXpl
IG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKICAgICAvLyB0
aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2
YWx1ZSAoMTIpLgogICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFz
ayBjb3JyZWN0bHkgYXQgNDA5NS4KLSAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQor
ICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+ZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2xlYXJDb2RlID0gMSA8PCBkYXRhc2l6ZTsKKyAgICBjbGVh
ckNvZGUgPSAxIDw8IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZTsKICAgICBpZiAoY2xlYXJDb2Rl
ID49IE1BWF9CWVRFUykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXZhaWwgPSBjbGVh
ckNvZGUgKyAyOwogICAgIG9sZGNvZGUgPSAtMTsKLSAgICBjb2Rlc2l6ZSA9IGRhdGFzaXplICsg
MTsKKyAgICBjb2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSArIDE7CiAgICAgY29k
ZW1hc2sgPSAoMSA8PCBjb2Rlc2l6ZSkgLSAxOwogICAgIGRhdHVtID0gYml0cyA9IDA7CisgICAg
aXBhc3MgPSBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA/IDEgOiAwOworICAgIGlyb3cgPSAw
OwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFibGVzIGxhemlseSwgdGhpcyBhbGxvd3MgZnJh
bWUgY291bnQgcXVlcnkgdG8gdXNlIGxlc3MgbWVtb3J5LgogICAgIHN1ZmZpeC5yZXNpemUoTUFY
X0JZVEVTKTsKQEAgLTgyMiw4ICs4MjMsOSBAQCBib29sIEdJRkxaV0NvbnRleHQ6OnByZXBhcmVU
b0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQogICAgIHByZWZpeC5yZXNp
emUoTUFYX0JZVEVTKTsKIAogICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHJvdyBidWZmZXIuCi0g
ICAgcm93QnVmZmVyLnJlc2l6ZShyb3dXaWR0aCk7CisgICAgcm93QnVmZmVyLnJlc2l6ZShtX2Zy
YW1lQ29udGV4dC0+d2lkdGgpOwogICAgIHJvd1Bvc2l0aW9uID0gMDsKKyAgICByb3dzUmVtYWlu
aW5nID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodDsKIAogICAgIC8vIENsZWFyaW5nIHRoZSB3aG9s
ZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgogICAg
IHN1ZmZpeC5maWxsKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAppbmRleCBhZTJhOGJiMjFjZDgz
MzExNmE5ZDE3ODY4ZmFmODczOWJiZGY5M2ZjLi4yNGQyZWJjNTk0M2YzOGVjNjU5YjNiZjBmYjVj
MTRlZmJlZDMyODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaApAQCAtNDIsNiArNDIsOCBAQAog
Ly8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjZGVmaW5lIE1BWF9M
WldfQklUUyAgICAgICAgICAxMgpAQCAtNzUsMTYgKzc3LDgyIEBAIGVudW0gR0lGU3RhdGUgewog
ICAgIEdJRkNvbnN1bWVDb21tZW50CiB9OwogCi0vLyBGcmFtZSBvdXRwdXQgc3RhdGUgbWFjaGlu
ZS4KLXN0cnVjdCBHSUZGcmFtZUNvbnRleHQgeworc3RydWN0IEdJRkZyYW1lQ29udGV4dDsKKwor
Ly8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KKy8vIEZJWE1FOiBNYWtlIHRoaXMgYSBjbGFz
cyBhbmQgaGlkZSBwcml2YXRlIG1lbWJlcnMuCitjbGFzcyBHSUZMWldDb250ZXh0IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBpbnQgZGF0YXNpemU7CisgICAg
R0lGTFpXQ29udGV4dChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCwgR0lGRnJhbWVD
b250ZXh0KiBmcmFtZUNvbnRleHQpCisgICAgICAgIDogc3RhY2twKDApCisgICAgICAgICwgY29k
ZXNpemUoMCkKKyAgICAgICAgLCBjb2RlbWFzaygwKQorICAgICAgICAsIGNsZWFyQ29kZSgwKQor
ICAgICAgICAsIGF2YWlsKDApCisgICAgICAgICwgb2xkY29kZSgwKQorICAgICAgICAsIGZpcnN0
Y2hhcigwKQorICAgICAgICAsIGJpdHMoMCkKKyAgICAgICAgLCBkYXR1bSgwKQorICAgICAgICAs
IGlwYXNzKDApCisgICAgICAgICwgaXJvdygwKQorICAgICAgICAsIHJvd1Bvc2l0aW9uKDApCisg
ICAgICAgICwgcm93c1JlbWFpbmluZygwKQorICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAg
ICAgICAgLCBtX2ZyYW1lQ29udGV4dChmcmFtZUNvbnRleHQpCisgICAgeyB9CisKKyAgICBib29s
IHByZXBhcmVUb0RlY29kZSgpOworICAgIGJvb2wgb3V0cHV0Um93KCk7CisgICAgYm9vbCBkb0xa
Vyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jayk7CisgICAg
Ym9vbCBoYXNSZW1haW5pbmdSb3dzKCkgeyByZXR1cm4gISFyb3dzUmVtYWluaW5nOyB9CisKK3By
aXZhdGU6CisgICAgLy8gTFpXIGRlY29kaW5nIHN0YXRlcyBhbmQgb3V0cHV0IHN0YXRlcy4KKyAg
ICBzaXplX3Qgc3RhY2twOyAvLyBDdXJyZW50IHN0YWNrIHBvaW50ZXIuCisgICAgaW50IGNvZGVz
aXplOworICAgIGludCBjb2RlbWFzazsKKyAgICBpbnQgY2xlYXJDb2RlOyAvLyBDb2Rld29yZCB1
c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldC4KKyAgICBpbnQgYXZhaWw7IC8vIEluZGV4
IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlvbmFyeS4KKyAgICBpbnQgb2xkY29kZTsK
KyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKKyAgICBpbnQgYml0czsgLy8gTnVtYmVyIG9m
IHVucmVhZCBiaXRzIGluICJkYXR1bSIuCisgICAgaW50IGRhdHVtOyAvLyAzMi1iaXQgaW5wdXQg
YnVmZmVyLgogICAgIGludCBpcGFzczsgLy8gSW50ZXJsYWNlIHBhc3M7IFJhbmdlcyAxLTQgaWYg
aW50ZXJsYWNlZC4KLSAgICBzaXplX3Qgcm93c1JlbWFpbmluZzsgLy8gUm93cyByZW1haW5pbmcg
dG8gYmUgb3V0cHV0LgogICAgIHNpemVfdCBpcm93OyAvLyBDdXJyZW50IG91dHB1dCByb3csIHN0
YXJ0aW5nIGF0IHplcm8uCisgICAgc2l6ZV90IHJvd1Bvc2l0aW9uOworICAgIHNpemVfdCByb3dz
UmVtYWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQuCisKKyAgICBWZWN0b3I8
dW5zaWduZWQgc2hvcnQ+IHByZWZpeDsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3VmZml4
OworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gcm93QnVmZmVyOyAvLyBTaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZlci4KIAot
ICAgIC8vIFBhcmFtZXRlcnMgZm9yIGltYWdlIGZyYW1lIGN1cnJlbnRseSBiZWluZyBkZWNvZGVk
LgorICAgIC8vIEluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kIHJlYWQtb25seS4K
KyAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OworICAgIEdJRkZyYW1lQ29u
dGV4dCogbV9mcmFtZUNvbnRleHQ7Cit9OworCisvLyBEYXRhIHN0cnVjdHVyZSBmb3Igb25lIExa
VyBibG9jay4KK3N0cnVjdCBHSUZMWldCbG9jayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgR0lGTFpXQmxvY2soc2l6ZV90IHBvc2l0aW9uLCBzaXplX3Qgc2l6
ZSkKKyAgICAgICAgOiBibG9ja1Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAsIGJsb2NrU2l6
ZShzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3QgYmxvY2tQb3NpdGlvbjsKKyAgICBz
aXplX3QgYmxvY2tTaXplOworfTsKKworLy8gRnJhbWUgb3V0cHV0IHN0YXRlIG1hY2hpbmUuCitz
dHJ1Y3QgR0lGRnJhbWVDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSBtZW1iZXJzIHRvIHByaXZhdGUgc2VjdGlv
bi4KKyAgICBpbnQgZnJhbWVJZDsKICAgICB1bnNpZ25lZCB4T2Zmc2V0OwogICAgIHVuc2lnbmVk
IHlPZmZzZXQ7IC8vIFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4uCiAgICAgdW5zaWdu
ZWQgd2lkdGg7CkBAIC05Myw2ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0byBi
YWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVfdCBsb2NhbENvbG9ybWFw
UG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9jYWxDb2xvcm1hcFNp
emU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCisgICAgaW50IGRhdGFzaXplOwog
ICAgIAogICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5lZCA6IDE7CiAgICAgYm9vbCBwcm9n
cmVzc2l2ZURpc3BsYXkgOiAxOyAvLyBJZiB0cnVlLCBkbyBIYWViZXJsaSBpbnRlcmxhY2UgaGFj
ay4KQEAgLTEwMSwxMSArMTcwLDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZGVsYXlUaW1l
OyAvLyBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoaXMgaW1hZ2UgaW4gYSBt
dWx0aS1pbWFnZSBHSUYuCiAKLSAgICBHSUZGcmFtZUNvbnRleHQoKQotICAgICAgICA6IGRhdGFz
aXplKDApCi0gICAgICAgICwgaXBhc3MoMCkKLSAgICAgICAgLCByb3dzUmVtYWluaW5nKDApCi0g
ICAgICAgICwgaXJvdygwKQorICAgIEdJRkZyYW1lQ29udGV4dChpbnQgaWQpCisgICAgICAgIDog
ZnJhbWVJZChpZCkKICAgICAgICAgLCB4T2Zmc2V0KDApCiAgICAgICAgICwgeU9mZnNldCgwKQog
ICAgICAgICAsIHdpZHRoKDApCkBAIC0xMTQsNTQgKzE4MCw0OCBAQCBwdWJsaWM6CiAgICAgICAg
ICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmll
ZCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBsb2NhbENv
bG9ybWFwU2l6ZSgwKQorICAgICAgICAsIGRhdGFzaXplKDApCiAgICAgICAgICwgaXNMb2NhbENv
bG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAgLCBwcm9ncmVzc2l2ZURpc3BsYXkoZmFsc2Up
CiAgICAgICAgICwgaW50ZXJsYWNlZChmYWxzZSkKICAgICAgICAgLCBpc1RyYW5zcGFyZW50KGZh
bHNlKQogICAgICAgICAsIGRlbGF5VGltZSgwKQorICAgICAgICAsIG1fY3VycmVudEx6d0Jsb2Nr
KDApCisgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQorICAgICAgICAsIG1faXNIZWFkZXJE
ZWZpbmVkKGZhbHNlKQorICAgICAgICAsIG1faXNEYXRhU2l6ZURlZmluZWQoZmFsc2UpCiAgICAg
ewogICAgIH0KICAgICAKICAgICB+R0lGRnJhbWVDb250ZXh0KCkKICAgICB7CiAgICAgfQotfTsK
IAotLy8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KLS8vIEZJWE1FOiBNYWtlIHRoaXMgYSBj
bGFzcyBhbmQgaGlkZSBwcml2YXRlIG1lbWJlcnMuCi1zdHJ1Y3QgR0lGTFpXQ29udGV4dCB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR0lGTFpXQ29udGV4dCgp
Ci0gICAgICAgIDogc3RhY2twKDApCi0gICAgICAgICwgY29kZXNpemUoMCkKLSAgICAgICAgLCBj
b2RlbWFzaygwKQotICAgICAgICAsIGNsZWFyQ29kZSgwKQotICAgICAgICAsIGF2YWlsKDApCi0g
ICAgICAgICwgb2xkY29kZSgwKQotICAgICAgICAsIGZpcnN0Y2hhcigwKQotICAgICAgICAsIGJp
dHMoMCkKLSAgICAgICAgLCBkYXR1bSgwKQotICAgICAgICAsIHJvd1Bvc2l0aW9uKDApCi0gICAg
eyB9CisgICAgdm9pZCBhZGRMendCbG9jayhzaXplX3QgcG9zaXRpb24sIHNpemVfdCBzaXplKQor
ICAgIHsKKyAgICAgICAgbV9sendCbG9ja3MuYXBwZW5kKEdJRkxaV0Jsb2NrKHBvc2l0aW9uLCBz
aXplKSk7CisgICAgfQogCi0gICAgYm9vbCBwcmVwYXJlVG9EZWNvZGUodW5zaWduZWQgcm93V2lk
dGgsIGludCBkYXRhc2l6ZSk7CisgICAgYm9vbCBkZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQsIGJv
b2wqIGZyYW1lRGVjb2RlZCk7CiAKLSAgICBzaXplX3Qgc3RhY2twOyAvLyBDdXJyZW50IHN0YWNr
IHBvaW50ZXIuCi0gICAgaW50IGNvZGVzaXplOwotICAgIGludCBjb2RlbWFzazsKLSAgICBpbnQg
Y2xlYXJDb2RlOyAvLyBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldC4K
LSAgICBpbnQgYXZhaWw7IC8vIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlv
bmFyeS4KLSAgICBpbnQgb2xkY29kZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKLSAg
ICBpbnQgYml0czsgLy8gTnVtYmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1bSIuCi0gICAgaW50
IGRhdHVtOyAvLyAzMi1iaXQgaW5wdXQgYnVmZmVyLgotICAgIHNpemVfdCByb3dQb3NpdGlvbjsK
KyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKyAg
ICB2b2lkIHNldENvbXBsZXRlKCkgeyBtX2lzQ29tcGxldGUgPSB0cnVlOyB9CisgICAgYm9vbCBp
c0hlYWRlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSGVhZGVyRGVmaW5lZDsgfQorICAg
IHZvaWQgc2V0SGVhZGVyRGVmaW5lZCgpIHsgbV9pc0hlYWRlckRlZmluZWQgPSB0cnVlOyB9Cisg
ICAgYm9vbCBpc0RhdGFTaXplRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEYXRhU2l6ZURl
ZmluZWQ7IH0KKyAgICB2b2lkIHNldERhdGFTaXplKGludCBzaXplKQorICAgIHsKKyAgICAgICAg
ZGF0YXNpemUgPSBzaXplOworICAgICAgICBtX2lzRGF0YVNpemVEZWZpbmVkID0gdHJ1ZTsKKyAg
ICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHByZWZpeDsKLSAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gc3VmZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsKLSAg
ICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcm93QnVmZmVyOyAvLyBTaW5nbGUgc2NhbmxpbmUgdGVt
cG9yYXJ5IGJ1ZmZlci4KK3ByaXZhdGU6CisgICAgT3duUHRyPEdJRkxaV0NvbnRleHQ+IG1fbHp3
Q29udGV4dDsKKyAgICBWZWN0b3I8R0lGTFpXQmxvY2s+IG1fbHp3QmxvY2tzOyAvLyBMWlcgYmxv
Y2tzIGZvciB0aGlzIGZyYW1lLgorICAgIHNpemVfdCBtX2N1cnJlbnRMendCbG9jazsKKyAgICBi
b29sIG1faXNDb21wbGV0ZTsKKyAgICBib29sIG1faXNIZWFkZXJEZWZpbmVkOworICAgIGJvb2wg
bV9pc0RhdGFTaXplRGVmaW5lZDsKIH07CiAKIGNsYXNzIEdJRkltYWdlUmVhZGVyIHsKQEAgLTE3
OSwyMyArMjM5LDMwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzR2xvYmFsQ29sb3JtYXBEZWZp
bmVkKGZhbHNlKQogICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbigwKQogICAgICAg
ICAsIG1fZ2xvYmFsQ29sb3JtYXBTaXplKDApCi0gICAgICAgICwgbV9pbWFnZXNEZWNvZGVkKDAp
Ci0gICAgICAgICwgbV9pbWFnZXNDb3VudCgwKQogICAgICAgICAsIG1fbG9vcENvdW50KGNMb29w
Q291bnROb3RTZWVuKQotICAgICAgICAsIG1fZnJhbWVDb250ZXh0KDApCisgICAgICAgICwgbV9j
dXJyZW50RGVjb2RpbmdGcmFtZSgwKQorICAgICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCisg
ICAgICAgICwgbV9wYXJzZUNvbXBsZXRlZChmYWxzZSkKICAgICB7CiAgICAgfQogCiAgICAgfkdJ
RkltYWdlUmVhZGVyKCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ29udGV4dDsKLSAg
ICAgICAgbV9mcmFtZUNvbnRleHQgPSAwOwogICAgIH0KIAogICAgIHZvaWQgc2V0RGF0YShQYXNz
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9Cisg
ICAgLy8gRklYTUU6IGhhbHRBdEZyYW1lIHNob3VsZCBiZSBzaXplX3QuCiAgICAgYm9vbCBkZWNv
ZGUoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJh
bWUpOwogCi0gICAgaW50IGltYWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZXNDb3Vu
dDsgfQorICAgIHNpemVfdCBpbWFnZXNDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9mcmFtZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8g
VGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0byBtYXRjaCBiZWhhdmlvciBvZiBwcmV2aW91cyBpbXBs
ZW1lbnRhdGlvbiBvZiBHSUZJbWFnZVJlYWRlci4KKyAgICAgICAgLy8gR0lGQ29udHJvbEV4dGVu
c2lvbiBhZGRzIGEgbmV3IGZyYW1lIGJ1dCBpcyBub3QgY291bnRlZCB1bnRpbCBHSUZJbWFnZUhl
YWRlciBpcyByZWFjaGVkLgorICAgICAgICByZXR1cm4gbV9mcmFtZXMubGFzdCgpLT5pc0hlYWRl
ckRlZmluZWQoKSA/IG1fZnJhbWVzLnNpemUoKSA6IG1fZnJhbWVzLnNpemUoKSAtIDE7CisgICAg
fQogICAgIGludCBsb29wQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xvb3BDb3VudDsgfQogCiAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JtYXAoKSBjb25zdApAQCAtMjE2LDEy
ICsyODMsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnJhbWUtPmlzTG9jYWxDb2xvcm1h
cERlZmluZWQgPyBmcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUgOiAwOwogICAgIH0KIAotICAgIGNv
bnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZUNvbnRleHQ7IH0KKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50RGVjb2RpbmdGcmFtZSA8IG1fZnJh
bWVzLnNpemUoKSA/IG1fZnJhbWVzW21fY3VycmVudERlY29kaW5nRnJhbWVdLmdldCgpIDogMDsK
KyAgICB9CisKKyAgICBib29sIHBhcnNlRmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZUZh
aWxlZDsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSwg
dW5zaWduZWQgaGFsdEF0RnJhbWUpOwotICAgIGJvb2wgb3V0cHV0Um93KCk7Ci0gICAgYm9vbCBk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgYm9vbCBwYXJzZShzaXpl
X3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpOwogICAgIHZv
aWQgc2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90KTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGRhdGEoc2l6ZV90IGRhdGFQb3NpdGlvbikgY29uc3QKQEAgLTIyOSw2ICsyOTksMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KG1fZGF0YS0+ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKICAgICB9CiAKKyAgICB2b2lkIGFk
ZEZyYW1lSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZXMuaXNFbXB0eSgpIHx8IChtX2Zy
YW1lcy5zaXplKCkgPT0gMXUgJiYgIW1fZnJhbWVzWzBdLT5pc0NvbXBsZXRlKCkpOworICAgIH0K
KwogICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CiAKICAgICAvLyBQYXJz
aW5nIHN0YXRlIG1hY2hpbmUuCkBAIC0yNDQsMTUgKzMyMCwxNCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZDsKICAgICBzaXplX3QgbV9nbG9iYWxDb2xvcm1h
cFBvc2l0aW9uOyAvLyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlm
IGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4KICAgICBpbnQgbV9n
bG9iYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LgotICAg
IHVuc2lnbmVkIG1faW1hZ2VzRGVjb2RlZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9y
IGFuaW1hdGVkIEdJRnMuCi0gICAgaW50IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxsIGZy
YW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKS4KICAgICBpbnQg
bV9sb29wQ291bnQ7IC8vIE5ldHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250
cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCiAgICAgCi0g
ICAgR0lGRnJhbWVDb250ZXh0KiBtX2ZyYW1lQ29udGV4dDsKLQotICAgIEdJRkxaV0NvbnRleHQg
bV9sendDb250ZXh0OworICAgIFZlY3RvcjxPd25QdHI8R0lGRnJhbWVDb250ZXh0PiA+IG1fZnJh
bWVzOworICAgIHNpemVfdCBtX2N1cnJlbnREZWNvZGluZ0ZyYW1lOwogCiAgICAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGJvb2wgbV9wYXJzZUZhaWxlZDsKKyAg
ICBib29sIG1fcGFyc2VDb21wbGV0ZWQ7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCmluZGV4IGE3YmY1
ZDU1MGY0M2JmZjhiYmIwM2JhNjc2YmVlNmQ5YjNkOWExOTcuLmJjNmU4MTExNTljMzdlOTIyMDRk
MjNmZGZjM2FjN2U4YjFhZGYxYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1
ZGUgPHB1YmxpYy9XZWJVbml0VGVzdFN1cHBvcnQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC02Niw5ICs2OCwxOSBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQogICAgIHJl
dHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJ1ZmZlcik7CiB9CiAKK3N0YXRpYyBQYXNz
T3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gY3JlYXRlRGVjb2RlcigpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlw
bGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpOworfQorCitz
dGF0aWMgdW5zaWduZWQgaGFzaFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7Cisg
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShiaXRtYXAuZ2V0UGl4ZWxzKCksIGJp
dG1hcC5nZXRTaXplKCkpOworfQorCiBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRlY29kZVR3
b0ZyYW1lcykKIHsKLSAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRy
KG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwg
SW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBPd25QdHI8
R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7CiAKICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9y
ZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBA
IC05MSw3ICsxMDMsNyBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRlY29kZVR3b0ZyYW1l
cykKIAogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZSkKIHsKLSAgICBP
d25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29k
ZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBk
ZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
ID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQu
Z2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xMTUsNyArMTI3LDcgQEAg
VEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZSkKIAogVEVTVChHSUZJbWFn
ZURlY29kZXJUZXN0LCBwYXJzZUJ5dGVCeUJ5dGUpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVj
b2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpB
bHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFw
cGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNv
ZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5
b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIpOwogICAgIEFTU0VS
VF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtMTQwLDcgKzE1Miw3IEBAIFRFU1QoR0lGSW1hZ2VEZWNv
ZGVyVGVzdCwgcGFyc2VCeXRlQnlCeXRlKQogCiBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBh
cnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkKIHsKLSAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBk
ZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90
UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkp
KTsKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7
CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0
cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQtZ2lmLXdpdGgtb2Zmc2V0cy5naWYiKTsK
ICAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKQEAgLTE2OSw3ICsxODEsNyBAQCBURVNUKEdJ
RkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkKIC8vIFNlY29uZCBm
cmFtZSBpbiB0aGUgZmlsZSBpcyBicm9rZW4gYnV0IHRlc3QgdGhhdCBmaXJzdCBmcmFtZSBjYW4g
YmUgZGVjb2RlZC4KIFRFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJva2VuU2Vjb25kRnJhbWUp
CiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lG
SW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291
cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdl
RGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2Jyb2tlbi5naWYiKTsKICAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKQEAgLTE4Nyw2ICsx
OTksNTUgQEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBicm9rZW5TZWNvbmRGcmFtZSkKICAg
ICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQo
KSk7CiB9CiAKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcHJvZ3Jlc3NpdmVEZWNvZGUpCit7
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZnVsbERhdGEgPSByZWFkRmlsZSgiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50LmdpZiIpOworICAgIEFTU0VSVF9UUlVF
KGZ1bGxEYXRhLmdldCgpKTsKKyAgICBjb25zdCBzaXplX3QgZnVsbExlbmd0aCA9IGZ1bGxEYXRh
LT5zaXplKCk7CisKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyOworICAgIElt
YWdlRnJhbWUqIGZyYW1lOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB0cnVuY2F0ZWRIYXNoZXM7
CisgICAgVmVjdG9yPHVuc2lnbmVkPiBwcm9ncmVzc2l2ZUhhc2hlczsKKworICAgIC8vIENvbXB1
dGUgaGFzaGVzIHdoZW4gdGhlIGZpbGUgaXMgdHJ1bmNhdGVkLgorICAgIGNvbnN0IHNpemVfdCBp
bmNyZW1lbnQgPSAxOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDw9IGZ1bGxMZW5ndGg7IGkg
Kz0gaW5jcmVtZW50KSB7CisgICAgICAgIGRlY29kZXIgPSBjcmVhdGVEZWNvZGVyKCk7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmdWxs
RGF0YS0+ZGF0YSgpLCBpKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCBp
ID09IGZ1bGxMZW5ndGgpOworICAgICAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgdHJ1bmNhdGVkSGFz
aGVzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IHRydW5jYXRlZEhhc2hlcy5hcHBlbmQoaGFzaFNrQml0bWFwKGZyYW1lLT5nZXRTa0JpdG1hcCgp
KSk7CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSBoYXNoZXMgd2hlbiB0aGUgZmlsZSBpcyBwcm9n
cmVzc2l2ZWx5IGRlY29kZWQuCisgICAgZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8PSBmdWxsTGVuZ3RoOyBpICs9IGluY3JlbWVudCkgeworICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnVs
bERhdGEtPmRhdGEoKSwgaSk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwg
aSA9PSBmdWxsTGVuZ3RoKTsKKyAgICAgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0
SW5kZXgoMCk7CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIHByb2dyZXNzaXZl
SGFzaGVzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIHByb2dyZXNzaXZlSGFzaGVzLmFwcGVuZChoYXNoU2tCaXRtYXAoZnJhbWUtPmdldFNrQml0
bWFwKCkpKTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRydW5jYXRlZEhhc2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
dHJ1bmNhdGVkSGFzaGVzW2ldICE9IHByb2dyZXNzaXZlSGFzaGVzW2ldKSB7CisgICAgICAgICAg
ICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgRVhQRUNUX1RSVUUobWF0Y2gpOworfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50LmdpZiBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50LmdpZgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45MmRlMjg2ZWJiZTVkOTUzZGQ0YTIwZTY4OWQ5MjMwYjI5OWEzZDVjCkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAxMDM0CnpjbWQ2a3tabz8jMExRLXJIVT99ay1mMEFHYkF0dGo/MXBSNSk3VHkh
I3Z8WiNjcUZ8QHRQVCNZN2ImIWBGdC02Ugp6VVpmVyU5OU1WKUBnTz4ycG1eWWNaZXglVTEoQ2RE
blZee0BVMUFpY2IlJmsoNkA3bUF7UVNCNVdiRClgbE1NbjAKenVtUC10YXxgPyp2Ml9reyg/fWRn
aVVYLWIkUVZSc0tYa3AmY08kbjBGU0heNVFAcWxJNS1WUSkyeVpsP3RQWTJjCno7Y3o3P09uQ24m
ajdNTzgyYk1CNHlvdHNHYDAjYW5UI1YpLXc3aVR+MTVXS25gLT9jOGh0M0BJPStWMHlfRldqcgp6
I05iWXhQc2ZFY2pGMT5yPEkqIzU1ZzFGeGdjNHNRO1ZUKXdOeVBNJW4ycERrQ29tc19ANVQ1Kmds
al9sQio2NygKekVKeHU2QUdnQT41ezYkeGFWRz87SmxxWXk4VyhAfjtaSS11PCUxMHQ5eChBWTFE
bjdAe1FuUj5AY0opbSthb2BFCnowYEU8dSZSa2hsZVhQYihsU09OXzZtXmA9czxyQjlpcXhvNzFm
a01zTkcqTWBJIWpCY1FqYGlzUWVSSnNze08+Nwp6PTVCPnR3bW80cVZZXkpPN0AjXz1HKVdBUCM3
UU83NV4zQmU3ZVArY1QlTUZDIzdWPj07VEVBI0I+cHlHWmxSOHYKemwqTTFhNWYjYmpNQEJecFpe
ejNOXk1oNUVgO0wzUFJoRUZMcXlsP14kO3srenNENyhBamQ9JnxCQGRTVl5OWWNnCno8cl5kLSU2
Uz9PclhgeFAoVmJ+KmIqIzJ4dkFvVWZ1SGxCbzVUIUZsTWtVSyVsPGx4PCtVdnA8NiVtaH02V2A+
Tgp6M3lDfGcqIyEmX0ZQfF8oVEBYXldxNE1ZRiQpS3UmVD48PFVzQFMkPEc8aj8/SWdqc3xTejw3
YChSN3pCIWtzdE8KekJCYyZHMVd1PmZsZ1p7cHNCSTF0KF9kViRWaGoyI008WGo0a19PSlh1Nm5X
OVkmSzV+aE5sbW92ZDt7PHtySnRUCno+Pz4yeFJhU2QqY3AodXl6ejkhWUxEemM9cFpoSV83cH5p
bXRpUyNId2I3JkF5QiRsNilje0gzSShfUEorM280Sgp6akFtOHF5TjZiOV9DTEpIQ1doOVEtU3Ze
RmpsfVI8dnVCem5DelBMPFR2eUtAN35pcFBle2dYQCRWKEdSPDZ+T0EKekF1JV8xVXR6akhwS3BA
UDNwXk1fIU1jPXRLTF9zIzsxdF5PbzBlbmd6NUhRYlVkRVF7NU5DWiU7S193ZExyKXI9Cno/ZDNk
Y1ZFTzVuY3ZPMXJUNDtLSTtIKStLdUJ9OCh2WkpUWUkjMWtSayQwcTBCU3t2OCFhZWkjUV9CXkpq
bWVWaQp6Pz5eWUU3fTN1NG15ZyY8YDMhYTE8PWVOY0V8T2VjQkY3UmdqKTIxKm82MEU/YiNARzcj
YG1xJlImRzBJQ0R+aEIKYU4/bzxGWjRLPlJxNlZlTW0ocGktLTZiTHVAYnRmKnFlJkEwCgpsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192779</attachid>
            <date>2013-03-12 11:54:37 -0700</date>
            <delta_ts>2013-03-17 20:40:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130312115036.patch</filename>
            <type>text/plain</type>
            <size>58057</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzMGQxYTU5MmZjMGQ0
ODZkNWI1OTRhNDZhNjNlOGRkZDI2NjA3NC4uZmRlOGM0NjIwM2E1MDFjNWE4YWMyNzZkZTQyMGQ1
NjY0NzBiZTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wMy0xMiAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEdJRkltYWdlUmVhZGVyIHRv
IGNvdW50IGZyYW1lcyBhbmQgZGVjb2RlIGluIG9uZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPQkpFQ1RJVkUKKworICAgICAgICBUaGlzIGNo
YW5nZSBoYXMgdGhlIG9iamVjdGl2ZSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgcmVhZGluZyBH
SUYKKyAgICAgICAgZmlsZXMuIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIHBhcnNlIHRoZSBlbnRp
cmUgR0lGIGZpbGUgaW4gb25lIHBhc3MKKyAgICAgICAgYW5kIHNhdmVzIGluZm9ybWF0aW9uIGFi
b3V0IGVhY2ggZnJhbWUsIHN1Y2ggdGhhdCBkZWNvZGluZyBpbiBhIGxhdGVyCisgICAgICAgIHBh
c3MgZG9lcyBub3QgbmVlZCB0byBwYXJzZSB0aGUgZmlsZSBhZ2Fpbi4KKworICAgICAgICBUaGlz
IGNoYW5nZSBmaXhlcyB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBvZiBkZWNvZGluZyBHSUYgZmls
ZXMgd2hlbgorICAgICAgICBpdCBpcyByZWNlaXZlZCB2ZXJ5IHNsb3dseS4gRXhpc3RpbmcgaW1w
bGVtZW50YXRpb24gY3JlYXRlcyBhIG5ldworICAgICAgICBHSUZJbWFnZVJlYWRlciBmb3IgY291
bnRpbmcgZnJhbWVzIGZvciBldmVyeSBieXRlIHRoYXQgY29tZXMgaW4sIHRoaXMKKyAgICAgICAg
aGFzIE8obl4yKSBiZWhhdmlvciB3aGVuIGRhdGEgaXMgcmVjZWl2ZWQgdmVyeSBzbG93bHkuCisK
KyAgICAgICAgQUxHT1JJVEhNCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkaXZpZGVz
IHRoZSBkZWNvZGluZyBwcm9jZXNzIGludG8gdHdvIHNlcGFyYXRlCisgICAgICAgIHN0ZXBzOiBw
YXJzZSBhbmQgTFpXIGRlY29kaW5nLgorCisgICAgICAgIEluIHRoZSBwYXJzZSBzdGVwLCB0aGUg
c3RhdGUgbWFjaGluZSBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAgICAgICBpbXBsZW1l
bnRhdGlvbi4gSG93ZXZlciB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNv
ZGluZworICAgICAgICB3aGlsZSBzY2FubmluZyB0aHJvdWdoIHRoZSBmaWxlLiBJbnRlYWQgaXQg
Y3JlYXRlcyBhIG5ldyBkYXRhIHN0cnVjdHVyZQorICAgICAgICBmb3IgY2FjaGluZyBhbGwgZnJh
bWUgaW5mb3JtYXRpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExaVyBibG9ja3MuCisKKyAgICAg
ICAgSWYgYSBmdWxsIGRlY29kZSBpcyByZXF1ZXN0ZWQgdGhlbiBMWlcgZGVjb2RpbmcgaXMgcGVy
Zm9ybWVkLiBUaGlzCisgICAgICAgIGltcGxlbWVudGF0aW9uIGxvb2tzIHRocm91Z2ggYWxsIGZy
YW1lIGluZm9ybWF0aW9uIHNhdmVkIGFuZCBkZWNvZGVzCisgICAgICAgIGVhY2ggZnJhbWUgc2Vx
dWVudGlhbGx5IHVudGlsIHRoZSB0YXJnZXQgZnJhbWUgaXMgcmVhY2hlZC4KKworICAgICAgICBC
ZWNhdXNlIG9mIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnNlIGFuZCBkZWNvZGUsIGVhY2ggZnJhbWUg
Y2FuIGJlCisgICAgICAgIGRlY29kZWQgc2VwYXJhdGVseS4gVGhpcyBwYXZlcyB0aGUgd2F5IHRv
IHN1cHBvcnQgc2Vla2luZyBpbiBHSUYgZmlsZXMuCisKKyAgICAgICAgVEVTVElORworCisgICAg
ICAgIEFkZGVkIGEgbmV3IHVuaXQgdGVzdCB0byBjb3ZlciBwcm9ncmVzc2l2ZWx5IGRlY29kaW5n
IGEgR0lGIGltYWdlLgorICAgICAgICBUaGVyZSBhcmUgYWxyZWFkeSBHSUYgdW5pdCB0ZXN0cyBm
b3IgZnVuY3Rpb25hbCB0ZXN0aW5nLgorICAgICAgICBFeGhhdXN0aXZlIHRlc3Rpbmcgd2FzIGRv
bmUgbG9jYWxseSB3aXRoIGEgY29ycHVzIG9mIDYwayBpbWFnZXMuCisgICAgICAgIEkgbWl4ZWQg
dGhlIGNvcnB1cyB3aXRoIHNvbWUgZ2VuZXJhdGVkIGJhZCBkYXRhIGFuZCB0cnVuY2F0ZWQgZmls
ZXMuCisgICAgICAgIFRoZSByZXN1bHRzIHdhcyBiaXQtaWRlbnRpY2FsIHdoZW4gY29tcGFyZWQg
dG8gdGhlIHByZXZpb3VzCisgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoZXNl
IHdhcyBhbHNvIG5vIGNyYXNoaW5nIHdoZW4gZGVjb2RpbmcgdGhlIGVudGlyZSBjb3JwdXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEdJRkltYWdlRGVjb2Rlcik6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAg
ICAgICAgKEdJRkxaV0NvbnRleHQ6Om91dHB1dFJvdyk6CisgICAgICAgIChHSUZMWldDb250ZXh0
Ojpkb0xaVyk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmRlY29kZSk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6
CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICBUaGVyZSBpcyBhIGxv
dCBvZiByZXNodWZmbGluZyBpbiBHSUZMWldDb250ZXh0IGFuZCBHSUZGcmFtZUNvbnRleHQuCisg
ICAgICAgIFRoZXNlIGNoYW5nZXMgaGFzIHRoZSBnb2FsIG9mIGhhdmluZyBHSUZMWldDb250ZXh0
IGJlIGEgcHVyZSBkZWNvZGluZworICAgICAgICBzdGF0ZSBtYWNoaW5lLiBHSUZGcmFtZUNvbnRl
eHQgaXMgbW9zdGx5IGEgcmVhZC1vbmx5IGNvbnRhaW5lciBmb3IKKyAgICAgICAgZnJhbWUgaW5m
b3JtYXRpb24uIFdpdGggYWxsIHRoZXNlIGNoYW5nZXMgd2UgY2FuIGRlY29kZSBlYWNoCisgICAg
ICAgIEdJRkZyYW1lQ29udGV4dCBpbmRlcGVuZGVudGx5LgorCisgICAgICAgIFRoZSBvd25lcnNo
aXAgcGF0dGVybiBpczoKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgb3ducyBHSUZGcmFtZUNvbnRl
eHQgb3ducyBHSUZMWldDb250ZXh0LgorCisgICAgICAgIChHSUZMWldDb250ZXh0OjpHSUZMWldD
b250ZXh0KToKKyAgICAgICAgKEdJRkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGTFpXQ29udGV4
dDo6aGFzUmVtYWluaW5nUm93cyk6CisgICAgICAgIEdJRkxaV0NvbnRleHQgaXMgbW92ZWQgdG8g
dGhlIHRvcCBvZiBmaWxlLgorICAgICAgICAoR0lGTFpXQmxvY2spOgorICAgICAgICAoR0lGTFpX
QmxvY2s6OkdJRkxaV0Jsb2NrKToKKyAgICAgICAgTmV3IGRhdGEgc3RydWN0dXJlIHRvIHNhdmUg
YmxvY2sgcG9zaXRpb24gYW5kIHNpemUuCisgICAgICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAg
ICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJh
bWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
YWRkTHp3QmxvY2spOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojppc0NvbXBsZXRlKToKKyAg
ICAgICAgKEdJRkZyYW1lQ29udGV4dDo6aXNIZWFkZXJEZWZpbmVkKToKKyAgICAgICAgKEdJRkZy
YW1lQ29udGV4dDo6aXNEYXRhU2l6ZURlZmluZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0
OjpzZXRDb21wbGV0ZSk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OnNldEhlYWRlckRlZmlu
ZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpzZXREYXRhU2l6ZSk6CisgICAgICAgIE5v
dyBvd25zIEdJRkxaV0NvbnRleHQgZm9yIGRlY29kaW5nLgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6OkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+R0lGSW1hZ2VS
ZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmltYWdlc0NvdW50KToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpmcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlRmFpbGVkKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjppc0ZpcnN0RnJhbWUpOgorICAgICAgICBPd25zIGEgbGlzdCBvZiBHSUZGcmFt
ZUNvbnR4dC4KKwogMjAxMy0wMy0xMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgYXR0ZW1wdCB0byBmaXggYnVpbGQgYWZ0ZXIgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTQ1NDIxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAyODNiMzlmOGYzNjg0YWFmMmU5N2RhNTIzZjk2YTlkZDI3MjA4ZDU3Li45MDI1YjA5MzFl
NDRmOWY0NWI5ZjBjNTBjZjBlOTBlODg0OGQ0MzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMTAxLDYgKzEwMSwxOSBAQAogICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgogICAg
ICAgICAoV2ViVmlld0ltcGwpOgogCisyMDEzLTAzLTA5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gY291bnQgZnJhbWVzIGFuZCBk
ZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIGEgbmV3IEdJRiB1bml0IHRlc3QgZm9yIHByb2dyZXNzaXZlIGRlY29k
aW5nLiBUaGUgdGVzdCBpcyB0byB2ZXJpZnkKKyAgICAgICAgdGhhdCBwcm9ncmVzc2l2ZSBkZWNv
ZGluZyBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGFzIGEgdHJ1bmNhdGVkIGZpbGUuCisKKyAg
ICAgICAgKiB0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VEVTVCk6CisKIDIwMTMtMDMtMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgQ2hyb21pdW0gREVQUyB0byBy
MTg3MDM3LiAgUmVxdWVzdGVkIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGJi
ODg0MTViYjBjNTY1OGQwMjJhODFhZTU0N2JjYzE5N2RlYzJjMDAuLjU0ODg1YjBlOTAxN2Y3OTRj
MmI5YTFiZGI3MDRlYzZkYjU0NzA4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1LDcgKzM2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIo
SW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICAsIG1fYWxyZWFkeVNjYW5uZWRUaGlz
RGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRp
b25Mb29wT25jZSkKIHsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6
OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBJ
bWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBpZiAobV9y
ZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKGRhdGEpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hh
bmdlZCBpdC4KLSAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFs
c2U7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQpAQCAtNzks
MjEgKzc2LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKIAogc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgp
CiB7Ci0gICAgaWYgKCFtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBTY2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlv
ciBpZiB0aGUgZGF0YSB3ZXJlIHRvCi0gICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4g
IE1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKLSAgICAgICAgLy8gZXhp
c3RpbmcgcmVhZCBzZXNzaW9uIHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0
IGNyYXdsCi0gICAgICAgIC8vIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdv
cnNlIHRoYW4gd2hhdCBJbWFnZUlPIGRvZXMgb24KLSAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAo
aXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KLSAgICAgICAgR0lGSW1hZ2VSZWFk
ZXIgcmVhZGVyKDApOwotICAgICAgICByZWFkZXIuc2V0RGF0YShtX2RhdGEpOwotICAgICAgICBy
ZWFkZXIuZGVjb2RlKEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0x
KSk7Ci0gICAgICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSB0cnVl
OwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgp
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytp
KQotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEo
bV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9Ci0KKyAgICBkZWNvZGUoc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgIHJldHVybiBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwogfQogCkBAIC0xMDcsOCArOTAsOCBAQCBpbnQgR0lG
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBkZWZh
dWx0IHRvIGxvb3Bpbmcgb25jZSAodGhlIGluaXRpYWwgdmFsdWUgZm9yCiAgICAgLy8gfG1fcmVw
ZXRpdGlvbkNvdW50fCkuCiAgICAgLy8KLSAgICAvLyBUaGVyZSBhcmUgdHdvIGFkZGl0aW9uYWwg
d3JpbmtsZXMgaGVyZS4gIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBtYXkKLSAgICAvLyBk
ZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVz
c18KKyAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0
LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQorICAgIC8vIG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1h
a2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0
aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVjcmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0
aGUKICAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9uJ3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhp
cyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKICAgICAvLyBuZXcgcmVhZGVyIHdpbGwgb25jZSBh
Z2FpbiByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGFuZCB3ZSB3b24ndApAQCAtMTE4LDcgKzEw
MSwxNSBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAg
IC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVhdCBpdCBhcyBhICJsb29wIG9uY2UiIGFuaW1hdGlv
bi4gIFdlIGRvbid0IG5lZWQKICAgICAvLyBzcGVjaWFsIGNvZGUgaGVyZSBlaXRoZXIsIGJlY2F1
c2UgaW4gdGhpcyBjYXNlIHdlJ2xsIG5ldmVyIGNoYW5nZQogICAgIC8vIHxtX3JlcGV0aXRpb25D
b3VudHwgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICBpZiAobV9yZWFkZXIgJiYgKG1fcmVh
ZGVyLT5sb29wQ291bnQoKSAhPSBjTG9vcENvdW50Tm90U2VlbikpCisgICAgLy8KKyAgICAvLyBU
aGlyZCwgd2UgdXNlIHRoZSBzYW1lIEdJRkltYWdlUmVhZGVyIGZvciBjb3VudGluZyBmcmFtZXMg
YW5kIHdlIG1pZ2h0CisgICAgLy8gc2VlIHRoZSBsb29wIGNvdW50IGFuZCB0aGVuIGVuY291bnRl
ciBhIGRlY29kaW5nIGVycm9yIHdoaWNoIGhhcHBlbnMKKyAgICAvLyBsYXRlciBpbiB0aGUgc3Ry
ZWFtLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgbm8gZnJhbWVzIGFyZSBpbiB0aGUKKyAgICAv
LyBzdHJlYW0uIEluIHRoZXNlIGNhc2VzIHdlIHNob3VsZCBqdXN0IGxvb3Agb25jZS4KKyAgICBp
ZiAoZmFpbGVkKCkKKyAgICAgICAgfHwgKG1fcmVhZGVyICYmICghbV9yZWFkZXItPmltYWdlc0Nv
dW50KCkgfHwgbV9yZWFkZXItPnBhcnNlRmFpbGVkKCkpKSkKKyAgICAgICAgbV9yZXBldGl0aW9u
Q291bnQgPSBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgZWxzZSBpZiAobV9yZWFkZXIgJiYgbV9y
ZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29wQ291bnROb3RTZWVuKQogICAgICAgICBtX3JlcGV0
aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0
aW9uQ291bnQ7CiB9CkBAIC0zMjEsOSArMzEyLDMzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQogICAgICAgICBtX3Jl
YWRlci0+c2V0RGF0YShtX2RhdGEpOwogICAgIH0KIAotICAgIC8vIElmIHdlIGNvdWxkbid0IGRl
Y29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcK
LSAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlmICghbV9yZWFkZXItPmRlY29kZShxdWVyeSwgaGFs
dEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKHF1ZXJ5ID09IEdJRlNp
emVRdWVyeSkgeworICAgICAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGU2l6ZVF1ZXJ5LCBo
YWx0QXRGcmFtZSkpCisgICAgICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9yZWFkZXItPmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIGhh
bHRBdEZyYW1lKSkgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IHNpemVfdCBvbGRTaXplID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KTsKKyAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fcmVhZGVyLT5pbWFnZXNDb3Vu
dCgpOyArK2kpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFs
cGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisKKyAgICBpZiAocXVlcnkgPT0gR0lGRnJhbWVDb3Vu
dFF1ZXJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lG
RnVsbFF1ZXJ5LCBoYWx0QXRGcmFtZSkpIHsKKyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJdCBpcyBhbHNvIGEgZmF0YWwgZXJyb3IgaWYgYWxs
IGRhdGEgaXMgcmVjZWl2ZWQgYnV0IHdlIGZhaWxlZCB0byBkZWNvZGUKKyAgICAvLyBhbGwgZnJh
bWVzIGNvbXBsZXRlbHkuCisgICAgaWYgKGlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgaGFsdEF0RnJh
bWUgPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAmJiBtX3JlYWRlcikKICAgICAgICAgc2V0
RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA1NWY5YjM1NjRmNDEy
YzcwNzIxOTFkNzQwNjFiMTk2NzYxNmM2YjZkLi5mOWUxYjg0ZDMxODFhYTZjNTVmYmFjMjQ4ZWIz
MTJlOTU0MmI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC03Miw3ICs3Miw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsg
dGhlIGltYWdlIGFzIGZhaWxlZC4KICAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWdu
ZWQgZnJhbWVJbmRleCk7CiAKLSAgICAgICAgYm9vbCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFG
b3JGcmFtZUNvdW50OwogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAg
ICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAgT3duUHRyPEdJRklt
YWdlUmVhZGVyPiBtX3JlYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IGI4N2Y2
ZGY1N2U3Njk1ZDU1YmQzNTc0ZTJjMjMxOTBlZGRmN2YzMzcuLjI4YWIxZjY0NzBlODQwZGUyZjMz
M2RlMjJmMTEzNDY1ZmVkNDRkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTgs
MjAgKzk4LDIwIEBAIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKICNkZWZpbmUgR0VU
SU5UMTYocCkgICAoKHApWzFdPDw4fChwKVswXSkKIAogLy8gU2VuZCB0aGUgZGF0YSB0byB0aGUg
ZGlzcGxheSBmcm9udC1lbmQuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpvdXRwdXRSb3coKQorYm9v
bCBHSUZMWldDb250ZXh0OjpvdXRwdXRSb3coKQogewotICAgIGludCBkcm93U3RhcnQgPSBtX2Zy
YW1lQ29udGV4dC0+aXJvdzsKLSAgICBpbnQgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5pcm93
OworICAgIGludCBkcm93U3RhcnQgPSBpcm93OworICAgIGludCBkcm93RW5kID0gaXJvdzsKIAog
ICAgIC8vIEhhZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGlj
YXRlIGxpbmVzIHdoaWxlCiAgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0
aWFuLWJsaW5kIiBlZmZlY3QgYXMgdGhlIGltYWdlIGlzCiAgICAgLy8gbG9hZGVkLiBBZGp1c3Qg
cGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQog
ICAgIC8vIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMg
YXJlIGRyYXduLgotICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYm
IG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQp
IHsKKyAgICBpZiAobV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1l
Q29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFzcyA8IDQpIHsKICAgICAgICAgdW5zaWduZWQgcm93
RHVwID0gMDsKICAgICAgICAgdW5zaWduZWQgcm93U2hpZnQgPSAwOwogCi0gICAgICAgIHN3aXRj
aCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAg
ICAgICAgY2FzZSAxOgogICAgICAgICAgICAgcm93RHVwID0gNzsKICAgICAgICAgICAgIHJvd1No
aWZ0ID0gMzsKQEAgLTE0OCw4OCArMTQ4LDY1IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1
dFJvdygpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUg
Y2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93LgotICAgIGlmIChtX2NsaWVudCAmJiBt
X2ZyYW1lQ29udGV4dAotICAgICAgICAmJiAhbV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1faW1h
Z2VzQ291bnQgLSAxLCBtX2x6d0NvbnRleHQucm93QnVmZmVyLCBtX2ZyYW1lQ29udGV4dC0+d2lk
dGgsCi0gICAgICAgICAgICBkcm93U3RhcnQsIGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2Zy
YW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxh
Y2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA+IDEpKQorICAgIGlmICghbV9jbGllbnQtPmhh
dmVEZWNvZGVkUm93KG1fZnJhbWVDb250ZXh0LT5mcmFtZUlkLCByb3dCdWZmZXIsIG1fZnJhbWVD
b250ZXh0LT53aWR0aCwKKyAgICAgICAgZHJvd1N0YXJ0LCBkcm93RW5kIC0gZHJvd1N0YXJ0ICsg
MSwgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+
aW50ZXJsYWNlZCAmJiBpcGFzcyA+IDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIW1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkKQotICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aXJvdysrOworICAgICAgICBpcm93Kys7CiAgICAgZWxzZSB7CiAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKGlwYXNzKSB7CiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlyb3cgKz0gODsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQt
Pmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlyb3cgPSA0OworICAgICAgICAgICAgICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAg
ICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSA0OwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAyOgotICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAgICAgICBpcm93ICs9
IDg7CisgICAgICAgICAgICAgICAgaWYgKGlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkg
eworICAgICAgICAgICAgICAgICAgICBpcGFzcysrOworICAgICAgICAgICAgICAgICAgICBpcm93
ID0gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA0
OwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29u
dGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFz
cysrOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDE7CisgICAg
ICAgICAgICAgICAgaXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJh
bWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaXJvdyA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlyb3cgKz0gMjsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQt
Pmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlyb3cgPSAwOworICAgICAgICAgICAgICAgIGlyb3cgKz0gMjsKKyAgICAgICAgICAgICAg
ICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSAwOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9m
cmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFtZUNvbnRleHQtPmhlaWdodCAtIDEpKTsKKyAgICAg
ICAgfSB3aGlsZSAoaXJvdyA+IChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0gMSkpOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29k
aW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxv
Y2ssIHNpemVfdCBieXRlc0luQmxvY2spCisvLyBSZXR1cm4gdHJ1ZSBpZiBkZWNvZGluZyBibG9j
ayB3YXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIGVudGlyZSBibG9jayB3YXMgY29uc3VtZWQuCisvLyBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgd2FzIGEgY3JpdGljYWwgZGVjb2RpbmcgZXJyb3IuIFRoZSBl
cnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gY2xpZW50LgorYm9vbCBHSUZMWldDb250ZXh0Ojpk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKIHsK
LSAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIGlu
dCBjb2RlOwogICAgIGludCBpbmNvZGU7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2g7CiAK
LSAgICAvLyBDb3B5IGFsbCB0aGUgZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMgaW50byBsb2NhbHMg
c28gdGhlIGNvbXBpbGVyCi0gICAgLy8gd29uJ3Qgd29ycnkgYWJvdXQgdGhlbSBiZWluZyBhbGlh
c2VkLiBUaGUgbG9jYWxzIHdpbGwgYmUgaG9tZWQKLSAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBk
ZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCi0gICAgaW50IGF2YWlsID0gbV9sendDb250
ZXh0LmF2YWlsOwotICAgIGludCBiaXRzID0gbV9sendDb250ZXh0LmJpdHM7Ci0gICAgc2l6ZV90
IGNudCA9IGJ5dGVzSW5CbG9jazsKLSAgICBpbnQgY29kZXNpemUgPSBtX2x6d0NvbnRleHQuY29k
ZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrID0gbV9sendDb250ZXh0LmNvZGVtYXNrOwotICAgIGlu
dCBvbGRjb2RlID0gbV9sendDb250ZXh0Lm9sZGNvZGU7Ci0gICAgaW50IGNsZWFyQ29kZSA9IG1f
bHp3Q29udGV4dC5jbGVhckNvZGU7Ci0gICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXIgPSBtX2x6
d0NvbnRleHQuZmlyc3RjaGFyOwotICAgIGludCBkYXR1bSA9IG1fbHp3Q29udGV4dC5kYXR1bTsK
LQotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4mIHByZWZpeCA9IG1fbHp3Q29udGV4dC5wcmVm
aXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdWZmaXggPSBtX2x6d0NvbnRleHQuc3Vm
Zml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgc3RhY2sgPSBtX2x6d0NvbnRleHQuc3Rh
Y2s7Ci0gICAgc2l6ZV90IHN0YWNrcCA9IG1fbHp3Q29udGV4dC5zdGFja3A7Ci0gICAgc2l6ZV90
IHJvd3AgPSBtX2x6d0NvbnRleHQucm93UG9zaXRpb247Ci0gICAgc2l6ZV90IHdpZHRoID0gbV9m
cmFtZUNvbnRleHQtPndpZHRoOwotICAgIHNpemVfdCByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNv
bnRleHQtPnJvd3NSZW1haW5pbmc7Ci0KLSAgICBpZiAocm93cCA9PSB3aWR0aCkKKyAgICBpZiAo
cm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICNkZWZpbmUgT1VUUFVUX1JPVyBcCkBAIC0yMzcsMTMgKzIxNCwxMiBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5C
bG9jaykKICAgICAgICAgaWYgKCFvdXRwdXRSb3coKSkgXAogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyBcCiAgICAgICAgIHJvd3NSZW1haW5pbmctLTsgXAotICAgICAgICByb3dwID0gMDsgXAot
ICAgICAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24gPSAwOyBcCisgICAgICAgIHJvd1Bvc2l0
aW9uID0gMDsgXAogICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpIFwKLSAgICAgICAgICAgIGdv
dG8gRU5EOyBcCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXAogICAgIH0gd2hpbGUgKDApCiAK
LSAgICBmb3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsgY2grKykgeworICAgIGZvciAoY2ggPSBi
bG9jazsgYnl0ZXNJbkJsb2NrLS0gPiAwOyBjaCsrKSB7CiAgICAgICAgIC8vIEZlZWQgdGhlIG5l
eHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4KICAgICAgICAg
ZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKICAgICAgICAgYml0cyArPSA4OwpAQCAtMjY5
LDEyICsyNDUsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQg
Y2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgLy8gZW5k
LW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEuCiAgICAg
ICAgICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChvbGRjb2RlID09IC0xKSB7Ci0gICAgICAgICAgICAg
ICAgbV9sendDb250ZXh0LnJvd0J1ZmZlcltyb3dwKytdID0gc3VmZml4W2NvZGVdOwotICAgICAg
ICAgICAgICAgIGlmIChyb3dwID09IHdpZHRoKQorICAgICAgICAgICAgICAgIHJvd0J1ZmZlclty
b3dQb3NpdGlvbisrXSA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgICAgICAgICBpZiAocm93UG9z
aXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JP
VzsKIAogICAgICAgICAgICAgICAgIGZpcnN0Y2hhciA9IG9sZGNvZGUgPSBjb2RlOwpAQCAtMjg3
LDEyICsyNjMsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQg
Y2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgY29kZSA9
IG9sZGNvZGU7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IE1BWF9CWVRFUykKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgp
IDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJDb2RlKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGNvZGUgPj0gTUFYX0JZVEVTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25seSBob2xkcyBjaGFyYWN0ZXJzIHRocm91
Z2ggc3VmZml4W2F2YWlsIC0gMV0sCiAgICAgICAgICAgICAgICAgLy8gYWxsb3dpbmcgY29kZSA+
PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3JtZWQKQEAgLTMw
Miw3ICsyNzgsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAgICBjb2RlID0g
cHJlZml4W2NvZGVdOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcCA9PSBNQVhfQllURVMp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWls
ZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHN0YWNrW3N0YWNrcCsrXSA9IGZpcnN0Y2hhciA9IHN1ZmZp
eFtjb2RlXTsKQEAgLTMyNSwzNiArMzAxLDEwMCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xa
Vyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKIAogICAg
ICAgICAgICAgLy8gQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0aGUgc2NhbmxpbmUgYnVm
ZmVyLgogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIG1fbHp3Q29udGV4dC5yb3dC
dWZmZXJbcm93cCsrXSA9IHN0YWNrWy0tc3RhY2twXTsKLSAgICAgICAgICAgICAgICBpZiAocm93
cCA9PSB3aWR0aCkKKyAgICAgICAgICAgICAgICByb3dCdWZmZXJbcm93UG9zaXRpb24rK10gPSBz
dGFja1stLXN0YWNrcF07CisgICAgICAgICAgICAgICAgaWYgKHJvd1Bvc2l0aW9uID09IHJvd0J1
ZmZlci5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9ST1c7CiAgICAgICAgICAg
ICB9IHdoaWxlIChzdGFja3AgPiAwKTsKICAgICAgICAgfQogICAgIH0KIAotRU5EOgotICAgIC8v
IEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29kZXIgc3RhdGUgdmFyaWFibGVz
LgotICAgIG1fbHp3Q29udGV4dC5hdmFpbCA9IGF2YWlsOwotICAgIG1fbHp3Q29udGV4dC5iaXRz
ID0gYml0czsKLSAgICBtX2x6d0NvbnRleHQuY29kZXNpemUgPSBjb2Rlc2l6ZTsKLSAgICBtX2x6
d0NvbnRleHQuY29kZW1hc2sgPSBjb2RlbWFzazsKLSAgICBtX2x6d0NvbnRleHQub2xkY29kZSA9
IG9sZGNvZGU7Ci0gICAgbV9sendDb250ZXh0LmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKLSAgICBt
X2x6d0NvbnRleHQuZGF0dW0gPSBkYXR1bTsKLSAgICBtX2x6d0NvbnRleHQuc3RhY2twID0gc3Rh
Y2twOwotICAgIG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbiA9IHJvd3A7Ci0gICAgbV9mcmFtZUNv
bnRleHQtPnJvd3NSZW1haW5pbmcgPSByb3dzUmVtYWluaW5nOwogICAgIHJldHVybiB0cnVlOwog
fQogCisvLyBQZXJmb3JtIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lLiBmcmFtZURlY29kZWQgd2ls
bCBiZSB0cnVlIGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZGVjb2RlZC4KKy8vIFJldHVybiB0cnVl
IGlmIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lIGhhcyBwcm9ncmVzc2VkLgorLy8gUmV0dXJuIGZh
bHNlIGlmIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGRlY29kaW5nIGVycm9yLiBUaGUgZXJyb3Igc2hv
dWxkIGJlIHJlcG9ydGVkIHRvIGNsaWVudC4KK2Jvb2wgR0lGRnJhbWVDb250ZXh0OjpkZWNvZGUo
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyKiBjbGllbnQsIGJvb2wqIGZyYW1lRGVjb2RlZCkKK3sKKyAgICAqZnJhbWVEZWNv
ZGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2x6d0NvbnRleHQpIHsKKyAgICAgICAgLy8gV2FpdCBm
b3IgbW9yZSBkYXRhIHRvIHByb3Blcmx5IGluaXRpYWxpemUgR0lGTFpXQ29udGV4dC4KKyAgICAg
ICAgaWYgKCFpc0RhdGFTaXplRGVmaW5lZCgpIHx8ICFpc0hlYWRlckRlZmluZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIG1fbHp3Q29udGV4dCA9IGFkb3B0UHRyKG5l
dyBHSUZMWldDb250ZXh0KGNsaWVudCwgdGhpcykpOworICAgICAgICBpZiAoIW1fbHp3Q29udGV4
dC0+cHJlcGFyZVRvRGVjb2RlKCkpIHsKKyAgICAgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJy
ZW50THp3QmxvY2sgPSAwOworICAgIH0KKworICAgIC8vIFNvbWUgYmFkIEdJRnMgaGF2ZSBleHRy
YSBibG9ja3MgYmV5b25kIHRoZSBsYXN0IHJvdywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBkZWNv
ZGUuCisgICAgd2hpbGUgKG1fY3VycmVudEx6d0Jsb2NrIDwgbV9sendCbG9ja3Muc2l6ZSgpICYm
IG1fbHp3Q29udGV4dC0+aGFzUmVtYWluaW5nUm93cygpKSB7CisgICAgICAgIHNpemVfdCBibG9j
a1Bvc2l0aW9uID0gbV9sendCbG9ja3NbbV9jdXJyZW50THp3QmxvY2tdLmJsb2NrUG9zaXRpb247
CisgICAgICAgIHNpemVfdCBibG9ja1NpemUgPSBtX2x6d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9j
a10uYmxvY2tTaXplOworICAgICAgICBpZiAoYmxvY2tQb3NpdGlvbiArIGJsb2NrU2l6ZSA+IGxl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2x6d0NvbnRl
eHQtPmRvTFpXKGRhdGEgKyBibG9ja1Bvc2l0aW9uLCBibG9ja1NpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICArK21fY3VycmVudEx6d0Jsb2NrOworICAgIH0KKworICAg
IC8vIElmIHRoaXMgZnJhbWUgaXMgZGF0YSBjb21wbGV0ZSB0aGVuIHRoZSBwcmV2aW91cyBsb29w
IG11c3QgaGF2ZSBjb21wbGV0ZWx5IGRlY29kZWQgYWxsIExaVyBibG9ja3MuCisgICAgLy8gVGhl
cmUgd2lsbCBiZSBubyBtb3JlIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lIHNvIGl0J3MgdGltZSB0
byBjbGVhbnVwLgorICAgIC8vIE5vdGUgdGhhdCBzb21lIGJyb2tlbiBHSUYgZmlsZXMgaGF2ZSBu
byBtb3JlIExaVyBibG9ja3MgYnV0IHN0aWxsIHNvbWUgcm93cyByZW1haW5pbmcuCisgICAgLy8g
V2UgdHJlYXQgaXQgYXMgZnJhbWUgY29tcGxldGUgYXMgd2VsbCwgdG8gYmUgY29uc2lzdGVudCB3
aXRoIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChpc0NvbXBsZXRlKCkpIHsKKyAg
ICAgICAgKmZyYW1lRGVjb2RlZCA9IHRydWU7CisgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigp
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRGVjb2RlIGFsbCBmcmFtZXMgYmVm
b3JlIGhhbHRBdEZyYW1lLgorLy8gVGhpcyBtZXRob2QgdXNlcyBHSUZGcmFtZUNvbnRleHQ6ZGVj
b2RlKCkgdG8gZGVjb2RlIGVhY2ggZnJhbWUsIGRlY29kaW5nIGVycm9yIGlzIHJlcG9ydGVkIHRv
IGNsaWVudCBhcyBhIGNyaXRpY2FsIGZhaWx1cmUuCisvLyBSZXR1cm4gdHJ1ZSBpZiBkZWNvZGlu
ZyBoYXMgcHJvZ3Jlc3NlZC4gcmV0dXJuIGZhbHNlOyBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQu
CiBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGUoR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBx
dWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZXNSZWFkIDw9
IG1fZGF0YS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gZGVjb2RlSW50ZXJuYWwobV9ieXRlc1JlYWQs
IG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRlc1JlYWQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7CisKKyAg
ICAvLyBUcnkgdG8gYmUgdG9sZXJhbnQgYW5kIGRvbid0IHJlcG9ydCBwYXJzaW5nIGVycm9ycyBi
dXQgd2Ugd2lsbCBub3QgcGFyc2UgYWdhaW4uCisgICAgLy8gUHJldmlvdXMgaW1wbGVtZW50YXRp
b24gdXNlZCBhIHNlcGFyYXRlIEdJRkltYWdlUmVhZGVyIHRvIGNvdW50IGZyYW1lcywgc28gcGFy
c2luZyBlcnJvciB3YXMgdG9sZXJhdGVkCisgICAgLy8gYnV0IG5vdCBkZWNvZGluZyBlcnJvci4g
RG8gYSBzZXBhcmF0ZSBjYXNlIGhlcmUgdG8gbWF0Y2ggcHJldmlvdXMgaW1wbGVtZW50YXRpb24u
CisgICAgaWYgKCFtX3BhcnNlRmFpbGVkICYmICFwYXJzZShtX2J5dGVzUmVhZCwgbV9kYXRhLT5z
aXplKCkgLSBtX2J5dGVzUmVhZCwgcXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVl
cnkpKQorICAgICAgICBtX3BhcnNlRmFpbGVkID0gdHJ1ZTsKKworICAgIGlmIChxdWVyeSAhPSBH
SUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICB3aGlsZSAobV9jdXJyZW50RGVjb2RpbmdGcmFtZSA8IHN0ZDo6bWluKG1fZnJhbWVzLnNpemUo
KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihoYWx0QXRGcmFtZSkpKSB7CisgICAgICAgIGJvb2wgZnJh
bWVEZWNvZGVkID0gZmFsc2U7CisgICAgICAgIEdJRkZyYW1lQ29udGV4dCogY3VycmVudEZyYW1l
ID0gbV9mcmFtZXNbbV9jdXJyZW50RGVjb2RpbmdGcmFtZV0uZ2V0KCk7CisKKyAgICAgICAgaWYg
KCFjdXJyZW50RnJhbWUtPmRlY29kZShkYXRhKDApLCBtX2RhdGEtPnNpemUoKSwgbV9jbGllbnQs
ICZmcmFtZURlY29kZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8v
IEV4aXQgdGhpcyBsb29wIGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gY29udGludWUgZGVjb2Rp
bmcuCisgICAgICAgIGlmICghZnJhbWVEZWNvZGVkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKCFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2N1cnJlbnREZWNvZGluZ0ZyYW1l
LCBjdXJyZW50RnJhbWUtPmRlbGF5VGltZSwgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrbV9jdXJyZW50RGVjb2RpbmdG
cmFtZTsKKyAgICB9CisKKyAgICAvLyBBbGwgZnJhbWVzIGRlY29kZWQuCisgICAgaWYgKG1fY3Vy
cmVudERlY29kaW5nRnJhbWUgPT0gbV9mcmFtZXMuc2l6ZSgpICYmIG1fcGFyc2VDb21wbGV0ZWQp
CisgICAgICAgIG1fY2xpZW50LT5naWZDb21wbGV0ZSgpOworICAgIHJldHVybiB0cnVlOwogfQog
Ci0vLyBQcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRl
Y29kZXIuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBv
c2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNp
Z25lZCBoYWx0QXRGcmFtZSkKKy8vIFBhcnNlIGluY29taW5nIEdJRiBkYXRhIHN0cmVhbSBpbnRv
IGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4KKy8vIFJldHVybiB0cnVlIGlmIHBhcnNpbmcgaGFz
IHByb2dyZXNzZWQgb3IgdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhLgorLy8gUmV0dXJuIGZhbHNl
IGlmIGEgZmF0YWwgZXJyb3IgaXMgZW5jb3VudGVyZWQuCitib29sIEdJRkltYWdlUmVhZGVyOjpw
YXJzZShzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkp
CiB7CiAgICAgaWYgKCFsZW4pIHsKICAgICAgICAgLy8gTm8gbmV3IGRhdGEgaGFzIGNvbWUgaW4g
c2luY2UgdGhlIGxhc3QgY2FsbCwganVzdCBpZ25vcmUgdGhpcyBjYWxsLgpAQCAtMzYyLDEyICs0
MDIsMTMgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICB9CiAKICAgICBpZiAobGVuIDwg
bV9ieXRlc1RvQ29uc3VtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIC8vIFRoaXMgbG9vcCByZWFkcyBhcyBtYW55IGNvbXBvbmVudHMgZnJvbSB8
bV9kYXRhfCBhcyBwb3NzaWJsZS4KICAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRl
cmF0aW9uLCBkYXRhUG9zaXRpb24gd2lsbCBiZSBhZHZhbmNlZCBieSBtX2J5dGVzVG9Db25zdW1l
IHRvCiAgICAgLy8gcG9pbnQgdG8gdGhlIG5leHQgY29tcG9uZW50LiBsZW4gd2lsbCBiZSBkZWNy
ZW1lbnRlZCBhY2NvcmRpbmdseS4KICAgICB3aGlsZSAobGVuID49IG1fYnl0ZXNUb0NvbnN1bWUp
IHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiA9IGRhdGFQ
b3NpdGlvbjsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY3VycmVudENvbXBvbmVudCA9
IGRhdGEoZGF0YVBvc2l0aW9uKTsKIAogICAgICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbXBv
bmVudCBhcyBjb25zdW1lZC4gTm90ZSB0aGF0IGN1cnJlbnRDb21wb25lbnQgd2lsbCByZW1haW4g
cG9pbnRlZCBhdCB0aGlzCkBAIC0zNzcsMjAgKzQxOCwxNSBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFn
ZURlYwogCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEdJRkxaVzoK
KyAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIC8v
IG1fYnl0ZXNUb0NvbnN1bWUgaXMgdGhlIGN1cnJlbnQgY29tcG9uZW50IHNpemUgYmVjYXVzZSBp
dCBoYXNuJ3QgYmVlbiB1cGRhdGVkLgotICAgICAgICAgICAgaWYgKCFkb0xaVyhjdXJyZW50Q29t
cG9uZW50LCBtX2J5dGVzVG9Db25zdW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxl
ZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCisgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPmFk
ZEx6d0Jsb2NrKGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiwgbV9ieXRlc1RvQ29uc3VtZSk7CiAg
ICAgICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgR0lGTFpXU3RhcnQ6IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJ
bWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSkgewotICAgICAgICAgICAgICAgIGludCBkYXRhc2l6
ZSA9ICpjdXJyZW50Q29tcG9uZW50OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5k
YXRhc2l6ZSA9IGRhdGFzaXplOwotICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgTFpXIHBh
cnNlci9kZWNvZGVyLgotICAgICAgICAgICAgICAgIGlmICghbV9sendDb250ZXh0LnByZXBhcmVU
b0RlY29kZShtX3NjcmVlbldpZHRoLCBkYXRhc2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgbV9mcmFtZXMubGFzdCgpLT5zZXREYXRhU2l6ZSgqY3VycmVudENvbXBvbmVudCk7CiAgICAg
ICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC00MDIsNyArNDM4LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJu
YWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAg
ICAgIGVsc2UgaWYgKCFzdHJuY21wKChjaGFyKiljdXJyZW50Q29tcG9uZW50LCAiR0lGODdhIiwg
NikpCiAgICAgICAgICAgICAgICAgbV92ZXJzaW9uID0gODc7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDog
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgR0VUTig3
LCBHSUZHbG9iYWxIZWFkZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQx
NSw2ICs0NTEsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3Qg
ZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgbV9zY3Jl
ZW5IZWlnaHQgPSBHRVRJTlQxNihjdXJyZW50Q29tcG9uZW50ICsgMik7CiAKICAgICAgICAgICAg
IC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCisgICAg
ICAgICAgICAvLyBOb3RlOiBBIHN1YnNlcXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBkaW1lbnNpb25z
IGxhcmdlciB0aGFuIHRoZSAic2NyZWVuIiBkaW1lbnNpb25zLgogICAgICAgICAgICAgaWYgKG1f
Y2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdo
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NjgsNyArNTA1LDcgQEAg
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwg
c2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgIC8vIHVudGlsIHdlIGZpbmQgYW4g
aW1hZ2Ugc2VwYXJhdG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAogICAgICAgICAgICAgLy8gYSBm
aWxlIGlzIGNvcnJ1cHQuIFdlIGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LgogICAgICAgICAg
ICAgaWYgKCpjdXJyZW50Q29tcG9uZW50ICE9ICcsJykKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC01MzUsMzAgKzU3MiwyMyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJ
bWFnZURlYwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZDb250cm9sRXh0ZW5zaW9uOiB7
Ci0gICAgICAgICAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50
UXVlcnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IG5ldyBHSUZGcmFtZUNvbnRleHQoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50ICYgMHgxKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOwotICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlz
VHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4
IGNvbnRyb2wgZXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRo
b2QgZW51bQotICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3Bl
YyEKLSAgICAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9u
ZW50KSA+PiAyKSAmIDB4NzsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9z
YWxNZXRob2QgPSAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNw
b3NhbE1ldGhvZDsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQg
KHZhbHVlIDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUgMwotICAgICAgICAgICAgICAgIC8vIExl
dCdzIGNob29zZSAzICh0aGUgbW9yZSBwb3B1bGFyKQotICAgICAgICAgICAgICAgIGlmIChkaXNw
b3NhbE1ldGhvZCA9PSA0KQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlz
cG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlv
dXM7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSA9IEdFVElOVDE2
KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
YWRkRnJhbWVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgR0lGRnJhbWVDb250ZXh0KiBjdXJy
ZW50RnJhbWUgPSBtX2ZyYW1lcy5sYXN0KCkuZ2V0KCk7CisgICAgICAgICAgICBjdXJyZW50RnJh
bWUtPmlzVHJhbnNwYXJlbnQgPSAqY3VycmVudENvbXBvbmVudCAmIDB4MTsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50RnJhbWUtPmlzVHJhbnNwYXJlbnQpCisgICAgICAgICAgICAgICAgY3VycmVu
dEZyYW1lLT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOworCisgICAgICAgICAgICAvLyBX
ZSBpZ25vcmUgdGhlICJ1c2VyIGlucHV0IiBiaXQuCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlz
IHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KKyAg
ICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKKyAgICAgICAgICAg
IGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRDb21wb25lbnQpID4+IDIpICYgMHg3Owor
ICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsK
KworICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBtZXRob2QgMyBp
cyAib3ZlcndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZworICAgICAgICAgICAg
Ly8gdGhlIHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlzLiBXZSBtYXAg
Ym90aCB0byB0aGUgc2FtZSB2YWx1ZS4KKyAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9
PSA0KQorICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJD
b3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7CisgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAq
IDEwOwogICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTU4Nyw4ICs2MTcsOSBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFn
ZURlYwogCiAgICAgICAgIC8vIE5ldHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246IGFuaW1h
dGlvbiBsb29waW5nLgogICAgICAgICBjYXNlIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2s6IHsK
KyAgICAgICAgICAgIC8vIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbiBhbHdheSByZWFkcyAz
IGJ5dGVzIGZyb20gdGhlIHN0cmVhbTsgV2Ugc2hvdWxkIGF0IGxlYXN0IHdhaXQgZm9yIHRoaXMg
YW1vdW50LgogICAgICAgICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50KQotICAgICAgICAgICAg
ICAgIEdFVE4oKmN1cnJlbnRDb21wb25lbnQsIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7
CisgICAgICAgICAgICAgICAgR0VUTihzdGQ6Om1heCgzLCBzdGF0aWNfY2FzdDxpbnQ+KCpjdXJy
ZW50Q29tcG9uZW50KSksIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNjE2LDcgKzY0Nyw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29k
ZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAg
ICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0byBiZSBk
ZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcwotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC02MzYsNyArNjY3LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJu
YWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAg
ICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0IEdJ
Rjg3YQogICAgICAgICAgICAgICogZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgogICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2RlZAorICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpCiAgICAgICAgICAgICAgICAgJiYgKCht
X3NjcmVlbkhlaWdodCA8IGhlaWdodCkgfHwgKG1fc2NyZWVuV2lkdGggPCB3aWR0aCkgfHwgKG1f
dmVyc2lvbiA9PSA4NykpKSB7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBoZWln
aHQ7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHdpZHRoOwpAQCAtNjUzLDEwICs2
ODQsMTAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICBoZWlnaHQg
PSBtX3NjcmVlbkhlaWdodDsKICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fc2NyZWVuV2lkdGg7
CiAgICAgICAgICAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0
RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVkKSB7CisgICAgICAgICAgICBpZiAocGFyc2VTaXplT25s
eSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3AuIEhhbmQg
YmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KICAgICAgICAgICAgICAg
ICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0byByZWFkIHRoZSBo
ZWFkZXIpLgogICAgICAgICAgICAgICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbiArIDkpOwpAQCAt
NjY0LDYyICs2OTUsNDAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6
ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9pbWFnZXNDb3Vu
dCA9IG1faW1hZ2VzRGVjb2RlZCArIDE7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJ
bWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhbV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0KCk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT54T2Zmc2V0ID0geE9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+eU9m
ZnNldCA9IHlPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmhlaWdodCA9
IGhlaWdodDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+d2lkdGggPSB3aWR0aDsK
LQotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHRha2VuIGlmIHRo
aXMgaXMgdGhlIGZpcnN0IGltYWdlICovCi0gICAgICAgICAgICAgICAgLyogYmVpbmcgZGVjb2Rl
ZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KLSAgICAgICAg
ICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRlIGJ1
ZmZlcnMuICAgICAqLwotICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSBzdGQ6Om1heCht
X3NjcmVlbldpZHRoLCB3aWR0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5IZWln
aHQgPCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0
OwotCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDQwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJs
YWNlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3Mg
PSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbV9pbWFnZXNE
ZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVE
aXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkg
ZGlzcGxheSBoYWNrCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNhdmluZyB0aGUg
dW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgICAgICAgICAvLyBhdm9p
ZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQotICAgICAgICAgICAg
ICAgICAgICAvLyB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNwbGF5
IHN1Y2gKLSAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkKLSAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9IGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZy
b20gbGFzdCBpbWFnZS4KLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7
Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSBtX2ZyYW1l
Q29udGV4dC0+aGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgLy8gYml0cyBwZXIgcGl4ZWwgaXMg
Y3VycmVudENvbXBvbmVudFs4XSYweDA3Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IGhhcyBhIGxvY2FsIGNvbG9ybWFwPwotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRb
OF0gJiAweDgwKSB7CisgICAgICAgICAgICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7CisgICAgICAg
ICAgICBHSUZGcmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3QoKS5nZXQo
KTsKKworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5zZXRIZWFkZXJEZWZpbmVkKCk7CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAgY3Vy
cmVudEZyYW1lLT55T2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+
aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT53aWR0aCA9IHdpZHRo
OworICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHN0ZDo6bWF4KG1fc2NyZWVuV2lkdGgsIHdp
ZHRoKTsKKyAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gc3RkOjptYXgobV9zY3JlZW5IZWln
aHQsIGhlaWdodCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmludGVybGFjZWQgPSBjdXJy
ZW50Q29tcG9uZW50WzhdICYgMHg0MDsKKworICAgICAgICAgICAgLy8gT3ZlcmxheWluZyBpbnRl
cmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgIC8vIGV4aXN0aW5nIGlt
YWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjaworICAgICAgICAgICAgLy8g
cmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRvCisgICAgICAg
ICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQor
ICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlz
cGxheSBzdWNoCisgICAgICAgICAgICAvLyBpbWFnZXMgcHJvZ3Jlc3NpdmVseS4gV2hpY2ggbWVh
bnMgb25seSB0aGUgZmlyc3QKKyAgICAgICAgICAgIC8vIGZyYW1lIGNhbiBiZSBwcm9ncmVzc2l2
ZWx5IGRpc3BsYXllZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBwb3NzaWJsZSB0aGF0
IGEgbm9uLXRyYW5zcGFyZW50IGZyYW1lCisgICAgICAgICAgICAvLyBjYW4gYmUgaW50ZXJsYWNl
ZCBhbmQgcHJvZ3Jlc3NpdmVseSBkaXNwbGF5ZWQuCisgICAgICAgICAgICBjdXJyZW50RnJhbWUt
PnByb2dyZXNzaXZlRGlzcGxheSA9IGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpOworCisgICAg
ICAgICAgICAvLyBiaXRzIHBlciBwaXhlbCBpcyBjdXJyZW50Q29tcG9uZW50WzhdJjB4MDcKKwor
ICAgICAgICAgICAgY29uc3QgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gY3VycmVudENv
bXBvbmVudFs4XSAmIDB4ODA7CisgICAgICAgICAgICBpZiAoaXNMb2NhbENvbG9ybWFwRGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSB0aHJlZSBsb3ctb3JkZXIgYml0cyBvZiBjdXJy
ZW50Q29tcG9uZW50WzhdIHNwZWNpZnkgdGhlIGJpdHMgcGVyIHBpeGVsLgogICAgICAgICAgICAg
ICAgIGludCBudW1Db2xvcnMgPSAyIDw8IChjdXJyZW50Q29tcG9uZW50WzhdICYgMHg3KTsKICAg
ICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbG9jYWxDb2xvcm1hcEJ5dGVzID0gMyAqIG51bUNv
bG9yczsKIAogICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0
dGUgYWZ0ZXIgaXQgbG9hZHMKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3NpdGlv
biA9IGRhdGFQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxv
Y2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3NpdGlv
bjsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplID0gbnVt
Q29sb3JzOwogCiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IGxvY2FsQ29sb3JtYXBCeXRlcykg
ewogICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGhhdmUgZW5vdWdoIGJ5dGVz
IHRvIGNvbnN1bWUgdGhlIGVudGlyZSBjb2xvcm1hcCBhdCBvbmNlLgpAQCAtNzI3LDcwICs3MzYs
NTEgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3Np
dGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0
KQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVm
aW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3Jt
YXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gbG9jYWxD
b2xvcm1hcEJ5dGVzOwogICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFwQnl0ZXM7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFs
ZXR0ZQotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3Jt
YXBEZWZpbmVkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBHRVROKDEsIEdJ
RkxaV1N0YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBHSUZJbWFnZUNvbG9ybWFwOiB7Ci0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpCi0g
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0
cnVlOworICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgbV9mcmFtZXMubGFzdCgpLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIEdFVE4oMSwgR0lGTFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7Ci0gICAgICAgICAgICAvLyBTdGlsbCB3
b3JraW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2suCiAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgYnl0ZXNJbkJsb2NrID0gKmN1cnJlbnRDb21wb25lbnQ7
Ci0gICAgICAgICAgICBpZiAoYnl0ZXNJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0YQotICAgICAg
ICAgICAgICAgIC8vIGlzIGNvcnJ1cHQsIHdlIG1heSBub3QgZ2V0IGFuIGV4cGxpY2l0IHRlcm1p
bmF0b3IuCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0ICYmICFtX2ZyYW1lQ29u
dGV4dC0+cm93c1JlbWFpbmluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGlsbGVnYWwgR0lGLCBidXQgd2UgcmVtYWluIHRvbGVyYW50LgotICAgICAgICAgICAgICAgICAg
ICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYnl0ZXNJbkJsb2NrKQogICAgICAgICAgICAgICAgIEdFVE4oYnl0ZXNJbkJsb2NrLCBHSUZM
WlcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhl
cmUgYXJlIGFueSBtb3JlIGltYWdlcyBpbiB0aGlzIHNlcXVlbmNlLgotICAgICAgICAgICAgICAg
IG1faW1hZ2VzRGVjb2RlZCsrOwotCi0gICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBm
cmFtZSBpcyBub3cgY29tcGxldGUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmIG1f
ZnJhbWVDb250ZXh0ICYmICFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2ltYWdlc0RlY29kZWQg
LSAxLCBtX2ZyYW1lQ29udGV4dC0+ZGVsYXlUaW1lLCBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxN
ZXRob2QpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxl
dGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgotCi0gICAgICAg
ICAgICAgICAgLy8gQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdlCi0gICAgICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQot
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5pc2hlZCBwYXJzaW5n
IG9uZSBmcmFtZTsgUHJvY2VzcyBuZXh0IGZyYW1lLgorICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9mcmFtZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPnNl
dENvbXBsZXRlKCk7CiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBHSUZEb25lOiB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwgd2UgY2Fu
IHN0b3AuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGll
bnQtPmdpZkNvbXBsZXRlKCk7CisgICAgICAgICAgICBtX3BhcnNlQ29tcGxldGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBzZXRSZW1haW5pbmdCeXRlcyhsZW4pOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90
IHJlbWFpbmluZ0J5dGVzKQpAQCAtNzk5LDIyICs3ODksMzMgQEAgdm9pZCBHSUZJbWFnZVJlYWRl
cjo6c2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90IHJlbWFpbmluZ0J5dGVzKQogICAgIG1fYnl0ZXNS
ZWFkID0gbV9kYXRhLT5zaXplKCkgLSByZW1haW5pbmdCeXRlczsKIH0KIAotYm9vbCBHSUZMWldD
b250ZXh0OjpwcmVwYXJlVG9EZWNvZGUodW5zaWduZWQgcm93V2lkdGgsIGludCBkYXRhc2l6ZSkK
K3ZvaWQgR0lGSW1hZ2VSZWFkZXI6OmFkZEZyYW1lSWZOZWNlc3NhcnkoKQogeworICAgIGlmICht
X2ZyYW1lcy5pc0VtcHR5KCkgfHwgbV9mcmFtZXMubGFzdCgpLT5pc0NvbXBsZXRlKCkpCisgICAg
ICAgIG1fZnJhbWVzLmFwcGVuZChhZG9wdFB0cihuZXcgR0lGRnJhbWVDb250ZXh0KG1fZnJhbWVz
LnNpemUoKSkpKTsKK30KKworLy8gRklYTUU6IE1vdmUgdGhpcyBtZXRob2QgdG8gY2xvc2UgdG8g
ZG9MWlcoKS4KK2Jvb2wgR0lGTFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKCkKK3sKKyAgICBB
U1NFUlQobV9mcmFtZUNvbnRleHQtPmlzRGF0YVNpemVEZWZpbmVkKCkgJiYgbV9mcmFtZUNvbnRl
eHQtPmlzSGVhZGVyRGVmaW5lZCgpKTsKKwogICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXpl
IG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKICAgICAvLyB0
aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2
YWx1ZSAoMTIpLgogICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFz
ayBjb3JyZWN0bHkgYXQgNDA5NS4KLSAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQor
ICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+ZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2xlYXJDb2RlID0gMSA8PCBkYXRhc2l6ZTsKKyAgICBjbGVh
ckNvZGUgPSAxIDw8IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZTsKICAgICBpZiAoY2xlYXJDb2Rl
ID49IE1BWF9CWVRFUykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXZhaWwgPSBjbGVh
ckNvZGUgKyAyOwogICAgIG9sZGNvZGUgPSAtMTsKLSAgICBjb2Rlc2l6ZSA9IGRhdGFzaXplICsg
MTsKKyAgICBjb2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSArIDE7CiAgICAgY29k
ZW1hc2sgPSAoMSA8PCBjb2Rlc2l6ZSkgLSAxOwogICAgIGRhdHVtID0gYml0cyA9IDA7CisgICAg
aXBhc3MgPSBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA/IDEgOiAwOworICAgIGlyb3cgPSAw
OwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFibGVzIGxhemlseSwgdGhpcyBhbGxvd3MgZnJh
bWUgY291bnQgcXVlcnkgdG8gdXNlIGxlc3MgbWVtb3J5LgogICAgIHN1ZmZpeC5yZXNpemUoTUFY
X0JZVEVTKTsKQEAgLTgyMiw4ICs4MjMsOSBAQCBib29sIEdJRkxaV0NvbnRleHQ6OnByZXBhcmVU
b0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQogICAgIHByZWZpeC5yZXNp
emUoTUFYX0JZVEVTKTsKIAogICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHJvdyBidWZmZXIuCi0g
ICAgcm93QnVmZmVyLnJlc2l6ZShyb3dXaWR0aCk7CisgICAgcm93QnVmZmVyLnJlc2l6ZShtX2Zy
YW1lQ29udGV4dC0+d2lkdGgpOwogICAgIHJvd1Bvc2l0aW9uID0gMDsKKyAgICByb3dzUmVtYWlu
aW5nID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodDsKIAogICAgIC8vIENsZWFyaW5nIHRoZSB3aG9s
ZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgogICAg
IHN1ZmZpeC5maWxsKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAppbmRleCBhZTJhOGJiMjFjZDgz
MzExNmE5ZDE3ODY4ZmFmODczOWJiZGY5M2ZjLi43YmY4MWM0NTA0YWU5MjNjMmJiNGNmYjAyNDA1
MDdhNGVkN2ViMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaApAQCAtNDIsNiArNDIsOCBAQAog
Ly8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjZGVmaW5lIE1BWF9M
WldfQklUUyAgICAgICAgICAxMgpAQCAtNzUsMTYgKzc3LDgxIEBAIGVudW0gR0lGU3RhdGUgewog
ICAgIEdJRkNvbnN1bWVDb21tZW50CiB9OwogCi0vLyBGcmFtZSBvdXRwdXQgc3RhdGUgbWFjaGlu
ZS4KLXN0cnVjdCBHSUZGcmFtZUNvbnRleHQgeworc3RydWN0IEdJRkZyYW1lQ29udGV4dDsKKwor
Ly8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KK2NsYXNzIEdJRkxaV0NvbnRleHQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGludCBkYXRhc2l6ZTsKKyAg
ICBHSUZMWldDb250ZXh0KFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50LCBjb25zdCBH
SUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCkKKyAgICAgICAgOiBzdGFja3AoMCkKKyAgICAg
ICAgLCBjb2Rlc2l6ZSgwKQorICAgICAgICAsIGNvZGVtYXNrKDApCisgICAgICAgICwgY2xlYXJD
b2RlKDApCisgICAgICAgICwgYXZhaWwoMCkKKyAgICAgICAgLCBvbGRjb2RlKDApCisgICAgICAg
ICwgZmlyc3RjaGFyKDApCisgICAgICAgICwgYml0cygwKQorICAgICAgICAsIGRhdHVtKDApCisg
ICAgICAgICwgaXBhc3MoMCkKKyAgICAgICAgLCBpcm93KDApCisgICAgICAgICwgcm93UG9zaXRp
b24oMCkKKyAgICAgICAgLCByb3dzUmVtYWluaW5nKDApCisgICAgICAgICwgbV9jbGllbnQoY2xp
ZW50KQorICAgICAgICAsIG1fZnJhbWVDb250ZXh0KGZyYW1lQ29udGV4dCkKKyAgICB7IH0KKwor
ICAgIGJvb2wgcHJlcGFyZVRvRGVjb2RlKCk7CisgICAgYm9vbCBvdXRwdXRSb3coKTsKKyAgICBi
b29sIGRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2Nr
KTsKKyAgICBib29sIGhhc1JlbWFpbmluZ1Jvd3MoKSB7IHJldHVybiByb3dzUmVtYWluaW5nOyB9
CisKK3ByaXZhdGU6CisgICAgLy8gTFpXIGRlY29kaW5nIHN0YXRlcyBhbmQgb3V0cHV0IHN0YXRl
cy4KKyAgICBzaXplX3Qgc3RhY2twOyAvLyBDdXJyZW50IHN0YWNrIHBvaW50ZXIuCisgICAgaW50
IGNvZGVzaXplOworICAgIGludCBjb2RlbWFzazsKKyAgICBpbnQgY2xlYXJDb2RlOyAvLyBDb2Rl
d29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldC4KKyAgICBpbnQgYXZhaWw7IC8v
IEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlvbmFyeS4KKyAgICBpbnQgb2xk
Y29kZTsKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKKyAgICBpbnQgYml0czsgLy8gTnVt
YmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1bSIuCisgICAgaW50IGRhdHVtOyAvLyAzMi1iaXQg
aW5wdXQgYnVmZmVyLgogICAgIGludCBpcGFzczsgLy8gSW50ZXJsYWNlIHBhc3M7IFJhbmdlcyAx
LTQgaWYgaW50ZXJsYWNlZC4KLSAgICBzaXplX3Qgcm93c1JlbWFpbmluZzsgLy8gUm93cyByZW1h
aW5pbmcgdG8gYmUgb3V0cHV0LgogICAgIHNpemVfdCBpcm93OyAvLyBDdXJyZW50IG91dHB1dCBy
b3csIHN0YXJ0aW5nIGF0IHplcm8uCisgICAgc2l6ZV90IHJvd1Bvc2l0aW9uOworICAgIHNpemVf
dCByb3dzUmVtYWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQuCisKKyAgICBW
ZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHByZWZpeDsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4g
c3VmZml4OworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsKKyAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gcm93QnVmZmVyOyAvLyBTaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZl
ci4KKworICAgIC8vIEluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kIHJlYWQtb25s
eS4KKyAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OworICAgIGNvbnN0IEdJ
RkZyYW1lQ29udGV4dCogbV9mcmFtZUNvbnRleHQ7Cit9OwogCi0gICAgLy8gUGFyYW1ldGVycyBm
b3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuCisvLyBEYXRhIHN0cnVjdHVy
ZSBmb3Igb25lIExaVyBibG9jay4KK3N0cnVjdCBHSUZMWldCbG9jayB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR0lGTFpXQmxvY2soc2l6ZV90IHBvc2l0aW9u
LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBibG9ja1Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAg
ICAsIGJsb2NrU2l6ZShzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3QgYmxvY2tQb3Np
dGlvbjsKKyAgICBzaXplX3QgYmxvY2tTaXplOworfTsKKworLy8gRnJhbWUgb3V0cHV0IHN0YXRl
IG1hY2hpbmUuCitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSBtZW1iZXJzIHRvIHBy
aXZhdGUgc2VjdGlvbi4KKyAgICBpbnQgZnJhbWVJZDsKICAgICB1bnNpZ25lZCB4T2Zmc2V0Owog
ICAgIHVuc2lnbmVkIHlPZmZzZXQ7IC8vIFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4u
CiAgICAgdW5zaWduZWQgd2lkdGg7CkBAIC05Myw2ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8g
UmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVfdCBs
b2NhbENvbG9ybWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9j
YWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCisgICAgaW50
IGRhdGFzaXplOwogICAgIAogICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5lZCA6IDE7CiAg
ICAgYm9vbCBwcm9ncmVzc2l2ZURpc3BsYXkgOiAxOyAvLyBJZiB0cnVlLCBkbyBIYWViZXJsaSBp
bnRlcmxhY2UgaGFjay4KQEAgLTEwMSwxMSArMTY5LDggQEAgcHVibGljOgogCiAgICAgdW5zaWdu
ZWQgZGVsYXlUaW1lOyAvLyBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoaXMg
aW1hZ2UgaW4gYSBtdWx0aS1pbWFnZSBHSUYuCiAKLSAgICBHSUZGcmFtZUNvbnRleHQoKQotICAg
ICAgICA6IGRhdGFzaXplKDApCi0gICAgICAgICwgaXBhc3MoMCkKLSAgICAgICAgLCByb3dzUmVt
YWluaW5nKDApCi0gICAgICAgICwgaXJvdygwKQorICAgIEdJRkZyYW1lQ29udGV4dChpbnQgaWQp
CisgICAgICAgIDogZnJhbWVJZChpZCkKICAgICAgICAgLCB4T2Zmc2V0KDApCiAgICAgICAgICwg
eU9mZnNldCgwKQogICAgICAgICAsIHdpZHRoKDApCkBAIC0xMTQsNTQgKzE3OSw0OCBAQCBwdWJs
aWM6CiAgICAgICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9z
ZU5vdFNwZWNpZmllZCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAg
ICAgLCBsb2NhbENvbG9ybWFwU2l6ZSgwKQorICAgICAgICAsIGRhdGFzaXplKDApCiAgICAgICAg
ICwgaXNMb2NhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAgLCBwcm9ncmVzc2l2ZURp
c3BsYXkoZmFsc2UpCiAgICAgICAgICwgaW50ZXJsYWNlZChmYWxzZSkKICAgICAgICAgLCBpc1Ry
YW5zcGFyZW50KGZhbHNlKQogICAgICAgICAsIGRlbGF5VGltZSgwKQorICAgICAgICAsIG1fY3Vy
cmVudEx6d0Jsb2NrKDApCisgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQorICAgICAgICAs
IG1faXNIZWFkZXJEZWZpbmVkKGZhbHNlKQorICAgICAgICAsIG1faXNEYXRhU2l6ZURlZmluZWQo
ZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKICAgICB+R0lGRnJhbWVDb250ZXh0KCkKICAgICB7
CiAgICAgfQotfTsKIAotLy8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KLS8vIEZJWE1FOiBN
YWtlIHRoaXMgYSBjbGFzcyBhbmQgaGlkZSBwcml2YXRlIG1lbWJlcnMuCi1zdHJ1Y3QgR0lGTFpX
Q29udGV4dCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR0lG
TFpXQ29udGV4dCgpCi0gICAgICAgIDogc3RhY2twKDApCi0gICAgICAgICwgY29kZXNpemUoMCkK
LSAgICAgICAgLCBjb2RlbWFzaygwKQotICAgICAgICAsIGNsZWFyQ29kZSgwKQotICAgICAgICAs
IGF2YWlsKDApCi0gICAgICAgICwgb2xkY29kZSgwKQotICAgICAgICAsIGZpcnN0Y2hhcigwKQot
ICAgICAgICAsIGJpdHMoMCkKLSAgICAgICAgLCBkYXR1bSgwKQotICAgICAgICAsIHJvd1Bvc2l0
aW9uKDApCi0gICAgeyB9CisgICAgdm9pZCBhZGRMendCbG9jayhzaXplX3QgcG9zaXRpb24sIHNp
emVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9sendCbG9ja3MuYXBwZW5kKEdJRkxaV0Jsb2Nr
KHBvc2l0aW9uLCBzaXplKSk7CisgICAgfQogCi0gICAgYm9vbCBwcmVwYXJlVG9EZWNvZGUodW5z
aWduZWQgcm93V2lkdGgsIGludCBkYXRhc2l6ZSk7CisgICAgYm9vbCBkZWNvZGUoY29uc3QgdW5z
aWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
KiBjbGllbnQsIGJvb2wqIGZyYW1lRGVjb2RlZCk7CiAKLSAgICBzaXplX3Qgc3RhY2twOyAvLyBD
dXJyZW50IHN0YWNrIHBvaW50ZXIuCi0gICAgaW50IGNvZGVzaXplOwotICAgIGludCBjb2RlbWFz
azsKLSAgICBpbnQgY2xlYXJDb2RlOyAvLyBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlv
bmFyeSByZXNldC4KLSAgICBpbnQgYXZhaWw7IC8vIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNs
b3QgaW4gZGljdGlvbmFyeS4KLSAgICBpbnQgb2xkY29kZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZp
cnN0Y2hhcjsKLSAgICBpbnQgYml0czsgLy8gTnVtYmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1
bSIuCi0gICAgaW50IGRhdHVtOyAvLyAzMi1iaXQgaW5wdXQgYnVmZmVyLgotICAgIHNpemVfdCBy
b3dQb3NpdGlvbjsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29t
cGxldGU7IH0KKyAgICB2b2lkIHNldENvbXBsZXRlKCkgeyBtX2lzQ29tcGxldGUgPSB0cnVlOyB9
CisgICAgYm9vbCBpc0hlYWRlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSGVhZGVyRGVm
aW5lZDsgfQorICAgIHZvaWQgc2V0SGVhZGVyRGVmaW5lZCgpIHsgbV9pc0hlYWRlckRlZmluZWQg
PSB0cnVlOyB9CisgICAgYm9vbCBpc0RhdGFTaXplRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNEYXRhU2l6ZURlZmluZWQ7IH0KKyAgICB2b2lkIHNldERhdGFTaXplKGludCBzaXplKQorICAg
IHsKKyAgICAgICAgZGF0YXNpemUgPSBzaXplOworICAgICAgICBtX2lzRGF0YVNpemVEZWZpbmVk
ID0gdHJ1ZTsKKyAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHByZWZpeDsKLSAg
ICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3VmZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiBzdGFjazsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcm93QnVmZmVyOyAvLyBTaW5nbGUg
c2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZlci4KK3ByaXZhdGU6CisgICAgT3duUHRyPEdJRkxaV0Nv
bnRleHQ+IG1fbHp3Q29udGV4dDsKKyAgICBWZWN0b3I8R0lGTFpXQmxvY2s+IG1fbHp3QmxvY2tz
OyAvLyBMWlcgYmxvY2tzIGZvciB0aGlzIGZyYW1lLgorICAgIHNpemVfdCBtX2N1cnJlbnRMendC
bG9jazsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKKyAgICBib29sIG1faXNIZWFkZXJEZWZpbmVk
OworICAgIGJvb2wgbV9pc0RhdGFTaXplRGVmaW5lZDsKIH07CiAKIGNsYXNzIEdJRkltYWdlUmVh
ZGVyIHsKQEAgLTE3OSwyMyArMjM4LDMwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzR2xvYmFs
Q29sb3JtYXBEZWZpbmVkKGZhbHNlKQogICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlv
bigwKQogICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBTaXplKDApCi0gICAgICAgICwgbV9pbWFn
ZXNEZWNvZGVkKDApCi0gICAgICAgICwgbV9pbWFnZXNDb3VudCgwKQogICAgICAgICAsIG1fbG9v
cENvdW50KGNMb29wQ291bnROb3RTZWVuKQotICAgICAgICAsIG1fZnJhbWVDb250ZXh0KDApCisg
ICAgICAgICwgbV9jdXJyZW50RGVjb2RpbmdGcmFtZSgwKQorICAgICAgICAsIG1fcGFyc2VGYWls
ZWQoZmFsc2UpCisgICAgICAgICwgbV9wYXJzZUNvbXBsZXRlZChmYWxzZSkKICAgICB7CiAgICAg
fQogCiAgICAgfkdJRkltYWdlUmVhZGVyKCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtX2ZyYW1l
Q29udGV4dDsKLSAgICAgICAgbV9mcmFtZUNvbnRleHQgPSAwOwogICAgIH0KIAogICAgIHZvaWQg
c2V0RGF0YShQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YSkgeyBtX2RhdGEg
PSBkYXRhOyB9CisgICAgLy8gRklYTUU6IGhhbHRBdEZyYW1lIHNob3VsZCBiZSBzaXplX3QuCiAg
ICAgYm9vbCBkZWNvZGUoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSwgdW5zaWdu
ZWQgaGFsdEF0RnJhbWUpOwogCi0gICAgaW50IGltYWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZXNDb3VudDsgfQorICAgIHNpemVfdCBpbWFnZXNDb3VudCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mcmFtZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0byBtYXRjaCBiZWhhdmlvciBvZiBw
cmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiBHSUZJbWFnZVJlYWRlci4KKyAgICAgICAgLy8gR0lG
Q29udHJvbEV4dGVuc2lvbiBhZGRzIGEgbmV3IGZyYW1lIGJ1dCBpcyBub3QgY291bnRlZCB1bnRp
bCBHSUZJbWFnZUhlYWRlciBpcyByZWFjaGVkLgorICAgICAgICByZXR1cm4gbV9mcmFtZXMubGFz
dCgpLT5pc0hlYWRlckRlZmluZWQoKSA/IG1fZnJhbWVzLnNpemUoKSA6IG1fZnJhbWVzLnNpemUo
KSAtIDE7CisgICAgfQogICAgIGludCBsb29wQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xvb3BD
b3VudDsgfQogCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JtYXAoKSBjb25z
dApAQCAtMjE2LDEyICsyODIsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnJhbWUtPmlz
TG9jYWxDb2xvcm1hcERlZmluZWQgPyBmcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUgOiAwOwogICAg
IH0KIAotICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZUNvbnRleHQ7IH0KKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1l
Q29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50RGVjb2RpbmdG
cmFtZSA8IG1fZnJhbWVzLnNpemUoKSA/IG1fZnJhbWVzW21fY3VycmVudERlY29kaW5nRnJhbWVd
LmdldCgpIDogMDsKKyAgICB9CisKKyAgICBib29sIHBhcnNlRmFpbGVkKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJzZUZhaWxlZDsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZGVjb2RlSW50ZXJuYWwo
c2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpHSUZRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpOwotICAgIGJvb2wgb3V0cHV0Um93KCk7
Ci0gICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgYm9v
bCBwYXJzZShzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9u
bHkpOwogICAgIHZvaWQgc2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90KTsKIAogICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEoc2l6ZV90IGRhdGFQb3NpdGlvbikgY29uc3QKQEAgLTIyOSw2ICsy
OTgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KG1fZGF0YS0+ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKICAgICB9CiAK
KyAgICB2b2lkIGFkZEZyYW1lSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGN1cnJlbnRGcmFtZUlz
Rmlyc3RGcmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZXMuaXNFbXB0
eSgpIHx8IChtX2ZyYW1lcy5zaXplKCkgPT0gMXUgJiYgIW1fZnJhbWVzWzBdLT5pc0NvbXBsZXRl
KCkpOworICAgIH0KKwogICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CiAK
ICAgICAvLyBQYXJzaW5nIHN0YXRlIG1hY2hpbmUuCkBAIC0yNDQsMTUgKzMxOSwxNCBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZDsKICAgICBzaXplX3QgbV9n
bG9iYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0
IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4K
ICAgICBpbnQgbV9nbG9iYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFw
IGFycmF5LgotICAgIHVuc2lnbmVkIG1faW1hZ2VzRGVjb2RlZDsgLy8gQ291bnRzIGNvbXBsZXRl
ZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMuCi0gICAgaW50IG1faW1hZ2VzQ291bnQ7IC8vIENv
dW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVz
KS4KICAgICBpbnQgbV9sb29wQ291bnQ7IC8vIE5ldHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBi
bG9jayB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRl
cnMuCiAgICAgCi0gICAgR0lGRnJhbWVDb250ZXh0KiBtX2ZyYW1lQ29udGV4dDsKLQotICAgIEdJ
RkxaV0NvbnRleHQgbV9sendDb250ZXh0OworICAgIFZlY3RvcjxPd25QdHI8R0lGRnJhbWVDb250
ZXh0PiA+IG1fZnJhbWVzOworICAgIHNpemVfdCBtX2N1cnJlbnREZWNvZGluZ0ZyYW1lOwogCiAg
ICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGJvb2wgbV9wYXJz
ZUZhaWxlZDsKKyAgICBib29sIG1fcGFyc2VDb21wbGV0ZWQ7CiB9OwogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3Bw
CmluZGV4IGE3YmY1ZDU1MGY0M2JmZjhiYmIwM2JhNjc2YmVlNmQ5YjNkOWExOTcuLmJjNmU4MTEx
NTljMzdlOTIyMDRkMjNmZGZjM2FjN2U4YjFhZGYxYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtNDEsNiArNDEs
OCBAQAogI2luY2x1ZGUgPHB1YmxpYy9XZWJVbml0VGVzdFN1cHBvcnQuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
U3RyaW5nSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC02Niw5ICs2OCwxOSBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVO
YW1lKQogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJ1ZmZlcik7CiB9CiAK
K3N0YXRpYyBQYXNzT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gY3JlYXRlRGVjb2RlcigpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhh
Tm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGll
ZCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaGFzaFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBi
aXRtYXApCit7CisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShiaXRtYXAuZ2V0
UGl4ZWxzKCksIGJpdG1hcC5nZXRTaXplKCkpOworfQorCiBURVNUKEdJRkltYWdlRGVjb2RlclRl
c3QsIGRlY29kZVR3b0ZyYW1lcykKIHsKLSAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNv
ZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJl
bXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsK
KyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7CiAK
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0
YS5nZXQoKSk7CkBAIC05MSw3ICsxMDMsNyBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRl
Y29kZVR3b0ZyYW1lcykKIAogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29k
ZSkKIHsKLSAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBH
SUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBPd25QdHI8R0lGSW1h
Z2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7CiAKICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJj
ZXMvYW5pbWF0ZWQuZ2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xMTUs
NyArMTI3LDcgQEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZSkKIAog
VEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUJ5dGVCeUJ5dGUpCiB7Ci0gICAgT3duUHRy
PEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKElt
YWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENv
bG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rl
cihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJl
YWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIp
OwogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtMTQwLDcgKzE1Miw3IEBAIFRFU1Qo
R0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VCeXRlQnlCeXRlKQogCiBURVNUKEdJRkltYWdlRGVj
b2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkKIHsKLSAgICBPd25QdHI8R0lGSW1h
Z2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3Vy
Y2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9m
aWxlQXBwbGllZCkpKTsKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0
ZURlY29kZXIoKSk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUo
Ii9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQtZ2lmLXdpdGgtb2Zm
c2V0cy5naWYiKTsKICAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKQEAgLTE2OSw3ICsxODEs
NyBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkK
IC8vIFNlY29uZCBmcmFtZSBpbiB0aGUgZmlsZSBpcyBicm9rZW4gYnV0IHRlc3QgdGhhdCBmaXJz
dCBmcmFtZSBjYW4gYmUgZGVjb2RlZC4KIFRFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJva2Vu
U2Vjb25kRnJhbWUpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9w
dFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxp
ZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3du
UHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL2Jyb2tlbi5naWYiKTsKICAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsK
QEAgLTE4Nyw2ICsxOTksNTUgQEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBicm9rZW5TZWNv
bmRGcmFtZSkKICAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBl
dGl0aW9uQ291bnQoKSk7CiB9CiAKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcHJvZ3Jlc3Np
dmVEZWNvZGUpCit7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZnVsbERhdGEgPSByZWFkRmls
ZSgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50LmdpZiIpOworICAg
IEFTU0VSVF9UUlVFKGZ1bGxEYXRhLmdldCgpKTsKKyAgICBjb25zdCBzaXplX3QgZnVsbExlbmd0
aCA9IGZ1bGxEYXRhLT5zaXplKCk7CisKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNv
ZGVyOworICAgIEltYWdlRnJhbWUqIGZyYW1lOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB0cnVu
Y2F0ZWRIYXNoZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBwcm9ncmVzc2l2ZUhhc2hlczsKKwor
ICAgIC8vIENvbXB1dGUgaGFzaGVzIHdoZW4gdGhlIGZpbGUgaXMgdHJ1bmNhdGVkLgorICAgIGNv
bnN0IHNpemVfdCBpbmNyZW1lbnQgPSAxOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDw9IGZ1
bGxMZW5ndGg7IGkgKz0gaW5jcmVtZW50KSB7CisgICAgICAgIGRlY29kZXIgPSBjcmVhdGVEZWNv
ZGVyKCk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShmdWxsRGF0YS0+ZGF0YSgpLCBpKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0YShk
YXRhLmdldCgpLCBpID09IGZ1bGxMZW5ndGgpOworICAgICAgICBmcmFtZSA9IGRlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAg
dHJ1bmNhdGVkSGFzaGVzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIHRydW5jYXRlZEhhc2hlcy5hcHBlbmQoaGFzaFNrQml0bWFwKGZyYW1lLT5n
ZXRTa0JpdG1hcCgpKSk7CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSBoYXNoZXMgd2hlbiB0aGUg
ZmlsZSBpcyBwcm9ncmVzc2l2ZWx5IGRlY29kZWQuCisgICAgZGVjb2RlciA9IGNyZWF0ZURlY29k
ZXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBmdWxsTGVuZ3RoOyBpICs9IGluY3Jl
bWVudCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoZnVsbERhdGEtPmRhdGEoKSwgaSk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEo
ZGF0YS5nZXQoKSwgaSA9PSBmdWxsTGVuZ3RoKTsKKyAgICAgICAgZnJhbWUgPSBkZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAg
IHByb2dyZXNzaXZlSGFzaGVzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIHByb2dyZXNzaXZlSGFzaGVzLmFwcGVuZChoYXNoU2tCaXRtYXAoZnJh
bWUtPmdldFNrQml0bWFwKCkpKTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoID0gdHJ1ZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRydW5jYXRlZEhhc2hlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAodHJ1bmNhdGVkSGFzaGVzW2ldICE9IHByb2dyZXNzaXZlSGFzaGVzW2ldKSB7
CisgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgRVhQRUNUX1RSVUUobWF0Y2gpOworfQorCiAjZW5kaWYKIAogfSAvLyBu
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9y
YWRpZW50LmdpZiBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50Lmdp
ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MmRlMjg2ZWJiZTVkOTUzZGQ0YTIwZTY4OWQ5MjMwYjI5OWEzZDVjCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDM0CnpjbWQ2a3tabz8jMExRLXJIVT99ay1mMEFHYkF0
dGo/MXBSNSk3VHkhI3Z8WiNjcUZ8QHRQVCNZN2ImIWBGdC02Ugp6VVpmVyU5OU1WKUBnTz4ycG1e
WWNaZXglVTEoQ2REblZee0BVMUFpY2IlJmsoNkA3bUF7UVNCNVdiRClgbE1NbjAKenVtUC10YXxg
Pyp2Ml9reyg/fWRnaVVYLWIkUVZSc0tYa3AmY08kbjBGU0heNVFAcWxJNS1WUSkyeVpsP3RQWTJj
Cno7Y3o3P09uQ24majdNTzgyYk1CNHlvdHNHYDAjYW5UI1YpLXc3aVR+MTVXS25gLT9jOGh0M0BJ
PStWMHlfRldqcgp6I05iWXhQc2ZFY2pGMT5yPEkqIzU1ZzFGeGdjNHNRO1ZUKXdOeVBNJW4ycERr
Q29tc19ANVQ1Kmdsal9sQio2NygKekVKeHU2QUdnQT41ezYkeGFWRz87SmxxWXk4VyhAfjtaSS11
PCUxMHQ5eChBWTFEbjdAe1FuUj5AY0opbSthb2BFCnowYEU8dSZSa2hsZVhQYihsU09OXzZtXmA9
czxyQjlpcXhvNzFma01zTkcqTWBJIWpCY1FqYGlzUWVSSnNze08+Nwp6PTVCPnR3bW80cVZZXkpP
N0AjXz1HKVdBUCM3UU83NV4zQmU3ZVArY1QlTUZDIzdWPj07VEVBI0I+cHlHWmxSOHYKemwqTTFh
NWYjYmpNQEJecFpeejNOXk1oNUVgO0wzUFJoRUZMcXlsP14kO3srenNENyhBamQ9JnxCQGRTVl5O
WWNnCno8cl5kLSU2Uz9PclhgeFAoVmJ+KmIqIzJ4dkFvVWZ1SGxCbzVUIUZsTWtVSyVsPGx4PCtV
dnA8NiVtaH02V2A+Tgp6M3lDfGcqIyEmX0ZQfF8oVEBYXldxNE1ZRiQpS3UmVD48PFVzQFMkPEc8
aj8/SWdqc3xTejw3YChSN3pCIWtzdE8KekJCYyZHMVd1PmZsZ1p7cHNCSTF0KF9kViRWaGoyI008
WGo0a19PSlh1Nm5XOVkmSzV+aE5sbW92ZDt7PHtySnRUCno+Pz4yeFJhU2QqY3AodXl6ejkhWUxE
emM9cFpoSV83cH5pbXRpUyNId2I3JkF5QiRsNilje0gzSShfUEorM280Sgp6akFtOHF5TjZiOV9D
TEpIQ1doOVEtU3ZeRmpsfVI8dnVCem5DelBMPFR2eUtAN35pcFBle2dYQCRWKEdSPDZ+T0EKekF1
JV8xVXR6akhwS3BAUDNwXk1fIU1jPXRLTF9zIzsxdF5PbzBlbmd6NUhRYlVkRVF7NU5DWiU7S193
ZExyKXI9Cno/ZDNkY1ZFTzVuY3ZPMXJUNDtLSTtIKStLdUJ9OCh2WkpUWUkjMWtSayQwcTBCU3t2
OCFhZWkjUV9CXkpqbWVWaQp6Pz5eWUU3fTN1NG15ZyY8YDMhYTE8PWVOY0V8T2VjQkY3UmdqKTIx
Km82MEU/YiNARzcjYG1xJlImRzBJQ0R+aEIKYU4/bzxGWjRLPlJxNlZlTW0ocGktLTZiTHVAYnRm
KnFlJkEwCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193350</attachid>
            <date>2013-03-15 12:17:24 -0700</date>
            <delta_ts>2013-03-17 20:38:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130315121320.patch</filename>
            <type>text/plain</type>
            <size>57934</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzMGQxYTU5MmZjMGQ0
ODZkNWI1OTRhNDZhNjNlOGRkZDI2NjA3NC4uZmRlOGM0NjIwM2E1MDFjNWE4YWMyNzZkZTQyMGQ1
NjY0NzBiZTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wMy0xMiAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEdJRkltYWdlUmVhZGVyIHRv
IGNvdW50IGZyYW1lcyBhbmQgZGVjb2RlIGluIG9uZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPQkpFQ1RJVkUKKworICAgICAgICBUaGlzIGNo
YW5nZSBoYXMgdGhlIG9iamVjdGl2ZSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgcmVhZGluZyBH
SUYKKyAgICAgICAgZmlsZXMuIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIHBhcnNlIHRoZSBlbnRp
cmUgR0lGIGZpbGUgaW4gb25lIHBhc3MKKyAgICAgICAgYW5kIHNhdmVzIGluZm9ybWF0aW9uIGFi
b3V0IGVhY2ggZnJhbWUsIHN1Y2ggdGhhdCBkZWNvZGluZyBpbiBhIGxhdGVyCisgICAgICAgIHBh
c3MgZG9lcyBub3QgbmVlZCB0byBwYXJzZSB0aGUgZmlsZSBhZ2Fpbi4KKworICAgICAgICBUaGlz
IGNoYW5nZSBmaXhlcyB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBvZiBkZWNvZGluZyBHSUYgZmls
ZXMgd2hlbgorICAgICAgICBpdCBpcyByZWNlaXZlZCB2ZXJ5IHNsb3dseS4gRXhpc3RpbmcgaW1w
bGVtZW50YXRpb24gY3JlYXRlcyBhIG5ldworICAgICAgICBHSUZJbWFnZVJlYWRlciBmb3IgY291
bnRpbmcgZnJhbWVzIGZvciBldmVyeSBieXRlIHRoYXQgY29tZXMgaW4sIHRoaXMKKyAgICAgICAg
aGFzIE8obl4yKSBiZWhhdmlvciB3aGVuIGRhdGEgaXMgcmVjZWl2ZWQgdmVyeSBzbG93bHkuCisK
KyAgICAgICAgQUxHT1JJVEhNCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkaXZpZGVz
IHRoZSBkZWNvZGluZyBwcm9jZXNzIGludG8gdHdvIHNlcGFyYXRlCisgICAgICAgIHN0ZXBzOiBw
YXJzZSBhbmQgTFpXIGRlY29kaW5nLgorCisgICAgICAgIEluIHRoZSBwYXJzZSBzdGVwLCB0aGUg
c3RhdGUgbWFjaGluZSBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAgICAgICBpbXBsZW1l
bnRhdGlvbi4gSG93ZXZlciB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNv
ZGluZworICAgICAgICB3aGlsZSBzY2FubmluZyB0aHJvdWdoIHRoZSBmaWxlLiBJbnRlYWQgaXQg
Y3JlYXRlcyBhIG5ldyBkYXRhIHN0cnVjdHVyZQorICAgICAgICBmb3IgY2FjaGluZyBhbGwgZnJh
bWUgaW5mb3JtYXRpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExaVyBibG9ja3MuCisKKyAgICAg
ICAgSWYgYSBmdWxsIGRlY29kZSBpcyByZXF1ZXN0ZWQgdGhlbiBMWlcgZGVjb2RpbmcgaXMgcGVy
Zm9ybWVkLiBUaGlzCisgICAgICAgIGltcGxlbWVudGF0aW9uIGxvb2tzIHRocm91Z2ggYWxsIGZy
YW1lIGluZm9ybWF0aW9uIHNhdmVkIGFuZCBkZWNvZGVzCisgICAgICAgIGVhY2ggZnJhbWUgc2Vx
dWVudGlhbGx5IHVudGlsIHRoZSB0YXJnZXQgZnJhbWUgaXMgcmVhY2hlZC4KKworICAgICAgICBC
ZWNhdXNlIG9mIHRoZSBzZXBhcmF0aW9uIG9mIHBhcnNlIGFuZCBkZWNvZGUsIGVhY2ggZnJhbWUg
Y2FuIGJlCisgICAgICAgIGRlY29kZWQgc2VwYXJhdGVseS4gVGhpcyBwYXZlcyB0aGUgd2F5IHRv
IHN1cHBvcnQgc2Vla2luZyBpbiBHSUYgZmlsZXMuCisKKyAgICAgICAgVEVTVElORworCisgICAg
ICAgIEFkZGVkIGEgbmV3IHVuaXQgdGVzdCB0byBjb3ZlciBwcm9ncmVzc2l2ZWx5IGRlY29kaW5n
IGEgR0lGIGltYWdlLgorICAgICAgICBUaGVyZSBhcmUgYWxyZWFkeSBHSUYgdW5pdCB0ZXN0cyBm
b3IgZnVuY3Rpb25hbCB0ZXN0aW5nLgorICAgICAgICBFeGhhdXN0aXZlIHRlc3Rpbmcgd2FzIGRv
bmUgbG9jYWxseSB3aXRoIGEgY29ycHVzIG9mIDYwayBpbWFnZXMuCisgICAgICAgIEkgbWl4ZWQg
dGhlIGNvcnB1cyB3aXRoIHNvbWUgZ2VuZXJhdGVkIGJhZCBkYXRhIGFuZCB0cnVuY2F0ZWQgZmls
ZXMuCisgICAgICAgIFRoZSByZXN1bHRzIHdhcyBiaXQtaWRlbnRpY2FsIHdoZW4gY29tcGFyZWQg
dG8gdGhlIHByZXZpb3VzCisgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoZXNl
IHdhcyBhbHNvIG5vIGNyYXNoaW5nIHdoZW4gZGVjb2RpbmcgdGhlIGVudGlyZSBjb3JwdXMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEdJRkltYWdlRGVjb2Rlcik6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAg
ICAgICAgKEdJRkxaV0NvbnRleHQ6Om91dHB1dFJvdyk6CisgICAgICAgIChHSUZMWldDb250ZXh0
Ojpkb0xaVyk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmRlY29kZSk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6
CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSk6CisgICAgICAg
IChHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICBUaGVyZSBpcyBhIGxv
dCBvZiByZXNodWZmbGluZyBpbiBHSUZMWldDb250ZXh0IGFuZCBHSUZGcmFtZUNvbnRleHQuCisg
ICAgICAgIFRoZXNlIGNoYW5nZXMgaGFzIHRoZSBnb2FsIG9mIGhhdmluZyBHSUZMWldDb250ZXh0
IGJlIGEgcHVyZSBkZWNvZGluZworICAgICAgICBzdGF0ZSBtYWNoaW5lLiBHSUZGcmFtZUNvbnRl
eHQgaXMgbW9zdGx5IGEgcmVhZC1vbmx5IGNvbnRhaW5lciBmb3IKKyAgICAgICAgZnJhbWUgaW5m
b3JtYXRpb24uIFdpdGggYWxsIHRoZXNlIGNoYW5nZXMgd2UgY2FuIGRlY29kZSBlYWNoCisgICAg
ICAgIEdJRkZyYW1lQ29udGV4dCBpbmRlcGVuZGVudGx5LgorCisgICAgICAgIFRoZSBvd25lcnNo
aXAgcGF0dGVybiBpczoKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgb3ducyBHSUZGcmFtZUNvbnRl
eHQgb3ducyBHSUZMWldDb250ZXh0LgorCisgICAgICAgIChHSUZMWldDb250ZXh0OjpHSUZMWldD
b250ZXh0KToKKyAgICAgICAgKEdJRkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGTFpXQ29udGV4
dDo6aGFzUmVtYWluaW5nUm93cyk6CisgICAgICAgIEdJRkxaV0NvbnRleHQgaXMgbW92ZWQgdG8g
dGhlIHRvcCBvZiBmaWxlLgorICAgICAgICAoR0lGTFpXQmxvY2spOgorICAgICAgICAoR0lGTFpX
QmxvY2s6OkdJRkxaV0Jsb2NrKToKKyAgICAgICAgTmV3IGRhdGEgc3RydWN0dXJlIHRvIHNhdmUg
YmxvY2sgcG9zaXRpb24gYW5kIHNpemUuCisgICAgICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAg
ICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJh
bWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
YWRkTHp3QmxvY2spOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojppc0NvbXBsZXRlKToKKyAg
ICAgICAgKEdJRkZyYW1lQ29udGV4dDo6aXNIZWFkZXJEZWZpbmVkKToKKyAgICAgICAgKEdJRkZy
YW1lQ29udGV4dDo6aXNEYXRhU2l6ZURlZmluZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0
OjpzZXRDb21wbGV0ZSk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OnNldEhlYWRlckRlZmlu
ZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpzZXREYXRhU2l6ZSk6CisgICAgICAgIE5v
dyBvd25zIEdJRkxaV0NvbnRleHQgZm9yIGRlY29kaW5nLgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6OkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+R0lGSW1hZ2VS
ZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmltYWdlc0NvdW50KToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpmcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlRmFpbGVkKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjppc0ZpcnN0RnJhbWUpOgorICAgICAgICBPd25zIGEgbGlzdCBvZiBHSUZGcmFt
ZUNvbnR4dC4KKwogMjAxMy0wMy0xMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgYXR0ZW1wdCB0byBmaXggYnVpbGQgYWZ0ZXIgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTQ1NDIxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAyODNiMzlmOGYzNjg0YWFmMmU5N2RhNTIzZjk2YTlkZDI3MjA4ZDU3Li45MDI1YjA5MzFl
NDRmOWY0NWI5ZjBjNTBjZjBlOTBlODg0OGQ0MzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMTAxLDYgKzEwMSwxOSBAQAogICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgogICAg
ICAgICAoV2ViVmlld0ltcGwpOgogCisyMDEzLTAzLTA5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gY291bnQgZnJhbWVzIGFuZCBk
ZWNvZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIGEgbmV3IEdJRiB1bml0IHRlc3QgZm9yIHByb2dyZXNzaXZlIGRlY29k
aW5nLiBUaGUgdGVzdCBpcyB0byB2ZXJpZnkKKyAgICAgICAgdGhhdCBwcm9ncmVzc2l2ZSBkZWNv
ZGluZyBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGFzIGEgdHJ1bmNhdGVkIGZpbGUuCisKKyAg
ICAgICAgKiB0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VEVTVCk6CisKIDIwMTMtMDMtMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgQ2hyb21pdW0gREVQUyB0byBy
MTg3MDM3LiAgUmVxdWVzdGVkIGJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGJi
ODg0MTViYjBjNTY1OGQwMjJhODFhZTU0N2JjYzE5N2RlYzJjMDAuLjVlMzdiYmY2ZGZlZGFjYzYw
OTU1MWE4OGVkZGExZGJiYjY2ZTRjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1LDcgKzM2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIo
SW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICAsIG1fYWxyZWFkeVNjYW5uZWRUaGlz
RGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRp
b25Mb29wT25jZSkKIHsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6
OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBJ
bWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBpZiAobV9y
ZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKGRhdGEpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hh
bmdlZCBpdC4KLSAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFs
c2U7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQpAQCAtNzks
MjEgKzc2LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKIAogc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgp
CiB7Ci0gICAgaWYgKCFtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBTY2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlv
ciBpZiB0aGUgZGF0YSB3ZXJlIHRvCi0gICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4g
IE1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKLSAgICAgICAgLy8gZXhp
c3RpbmcgcmVhZCBzZXNzaW9uIHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0
IGNyYXdsCi0gICAgICAgIC8vIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdv
cnNlIHRoYW4gd2hhdCBJbWFnZUlPIGRvZXMgb24KLSAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAo
aXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KLSAgICAgICAgR0lGSW1hZ2VSZWFk
ZXIgcmVhZGVyKDApOwotICAgICAgICByZWFkZXIuc2V0RGF0YShtX2RhdGEpOwotICAgICAgICBy
ZWFkZXIuZGVjb2RlKEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0x
KSk7Ci0gICAgICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSB0cnVl
OwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgp
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytp
KQotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEo
bV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9Ci0KKyAgICBkZWNvZGUoc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgIHJldHVybiBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwogfQogCkBAIC0xMDcsOCArOTAsOCBAQCBpbnQgR0lG
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBkZWZh
dWx0IHRvIGxvb3Bpbmcgb25jZSAodGhlIGluaXRpYWwgdmFsdWUgZm9yCiAgICAgLy8gfG1fcmVw
ZXRpdGlvbkNvdW50fCkuCiAgICAgLy8KLSAgICAvLyBUaGVyZSBhcmUgdHdvIGFkZGl0aW9uYWwg
d3JpbmtsZXMgaGVyZS4gIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBtYXkKLSAgICAvLyBk
ZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVz
c18KKyAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0
LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQorICAgIC8vIG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1h
a2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0
aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVjcmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0
aGUKICAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9uJ3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhp
cyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKICAgICAvLyBuZXcgcmVhZGVyIHdpbGwgb25jZSBh
Z2FpbiByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGFuZCB3ZSB3b24ndApAQCAtMTE4LDcgKzEw
MSwxNCBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAg
IC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVhdCBpdCBhcyBhICJsb29wIG9uY2UiIGFuaW1hdGlv
bi4gIFdlIGRvbid0IG5lZWQKICAgICAvLyBzcGVjaWFsIGNvZGUgaGVyZSBlaXRoZXIsIGJlY2F1
c2UgaW4gdGhpcyBjYXNlIHdlJ2xsIG5ldmVyIGNoYW5nZQogICAgIC8vIHxtX3JlcGV0aXRpb25D
b3VudHwgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICBpZiAobV9yZWFkZXIgJiYgKG1fcmVh
ZGVyLT5sb29wQ291bnQoKSAhPSBjTG9vcENvdW50Tm90U2VlbikpCisgICAgLy8KKyAgICAvLyBU
aGlyZCwgd2UgdXNlIHRoZSBzYW1lIEdJRkltYWdlUmVhZGVyIGZvciBjb3VudGluZyBmcmFtZXMg
YW5kIHdlIG1pZ2h0CisgICAgLy8gc2VlIHRoZSBsb29wIGNvdW50IGFuZCB0aGVuIGVuY291bnRl
ciBhIGRlY29kaW5nIGVycm9yIHdoaWNoIGhhcHBlbnMKKyAgICAvLyBsYXRlciBpbiB0aGUgc3Ry
ZWFtLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgbm8gZnJhbWVzIGFyZSBpbiB0aGUKKyAgICAv
LyBzdHJlYW0uIEluIHRoZXNlIGNhc2VzIHdlIHNob3VsZCBqdXN0IGxvb3Agb25jZS4KKyAgICBp
ZiAoZmFpbGVkKCkgfHwgKG1fcmVhZGVyICYmICghbV9yZWFkZXItPmltYWdlc0NvdW50KCkgfHwg
bV9yZWFkZXItPnBhcnNlRmFpbGVkKCkpKSkKKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBj
QW5pbWF0aW9uTG9vcE9uY2U7CisgICAgZWxzZSBpZiAobV9yZWFkZXIgJiYgbV9yZWFkZXItPmxv
b3BDb3VudCgpICE9IGNMb29wQ291bnROb3RTZWVuKQogICAgICAgICBtX3JlcGV0aXRpb25Db3Vu
dCA9IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7
CiB9CkBAIC0zMjEsOSArMzExLDMzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5z
aWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQogICAgICAgICBtX3JlYWRlci0+c2V0
RGF0YShtX2RhdGEpOwogICAgIH0KIAotICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUg
aW1hZ2UgYnV0IHdlJ3ZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKLSAgICAvLyBo
YXMgZmFpbGVkLgotICAgIGlmICghbV9yZWFkZXItPmRlY29kZShxdWVyeSwgaGFsdEF0RnJhbWUp
ICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKHF1ZXJ5ID09IEdJRlNpemVRdWVyeSkg
eworICAgICAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGU2l6ZVF1ZXJ5LCBoYWx0QXRGcmFt
ZSkpCisgICAgICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9yZWFkZXItPmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIGhhbHRBdEZyYW1l
KSkgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNvbnN0IHNpemVfdCBvbGRTaXplID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKKyAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpOyArK2kp
CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJl
bXVsdGlwbHlBbHBoYSk7CisKKyAgICBpZiAocXVlcnkgPT0gR0lGRnJhbWVDb3VudFF1ZXJ5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGRnVsbFF1ZXJ5
LCBoYWx0QXRGcmFtZSkpIHsKKyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBJdCBpcyBhbHNvIGEgZmF0YWwgZXJyb3IgaWYgYWxsIGRhdGEgaXMg
cmVjZWl2ZWQgYnV0IHdlIGZhaWxlZCB0byBkZWNvZGUKKyAgICAvLyBhbGwgZnJhbWVzIGNvbXBs
ZXRlbHkuCisgICAgaWYgKGlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgaGFsdEF0RnJhbWUgPj0gbV9m
cmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAmJiBtX3JlYWRlcikKICAgICAgICAgc2V0RmFpbGVkKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA1NWY5YjM1NjRmNDEyYzcwNzIxOTFk
NzQwNjFiMTk2NzYxNmM2YjZkLi5mOWUxYjg0ZDMxODFhYTZjNTVmYmFjMjQ4ZWIzMTJlOTU0MmI4
YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC03Miw3ICs3Miw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdl
IGFzIGZhaWxlZC4KICAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJ
bmRleCk7CiAKLSAgICAgICAgYm9vbCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNv
dW50OwogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRh
YmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAgT3duUHRyPEdJRkltYWdlUmVhZGVy
PiBtX3JlYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IGI4N2Y2ZGY1N2U3Njk1
ZDU1YmQzNTc0ZTJjMjMxOTBlZGRmN2YzMzcuLjgwMmNhNTkyMjYxZTE0YTcwOGJjNTBjMzFlY2Q3
YjEyMGQ3ZWI0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTgsMjAgKzk4LDIw
IEBAIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKICNkZWZpbmUgR0VUSU5UMTYocCkg
ICAoKHApWzFdPDw4fChwKVswXSkKIAogLy8gU2VuZCB0aGUgZGF0YSB0byB0aGUgZGlzcGxheSBm
cm9udC1lbmQuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpvdXRwdXRSb3coKQorYm9vbCBHSUZMWldD
b250ZXh0OjpvdXRwdXRSb3coKQogewotICAgIGludCBkcm93U3RhcnQgPSBtX2ZyYW1lQ29udGV4
dC0+aXJvdzsKLSAgICBpbnQgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5pcm93OworICAgIGlu
dCBkcm93U3RhcnQgPSBpcm93OworICAgIGludCBkcm93RW5kID0gaXJvdzsKIAogICAgIC8vIEhh
ZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVz
IHdoaWxlCiAgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJsaW5k
IiBlZmZlY3QgYXMgdGhlIGltYWdlIGlzCiAgICAgLy8gbG9hZGVkLiBBZGp1c3QgcGl4ZWwgdmVy
dGljYWwgcG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQogICAgIC8vIGlt
YWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMgYXJlIGRyYXdu
LgotICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVD
b250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQpIHsKKyAgICBp
ZiAobV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+
aW50ZXJsYWNlZCAmJiBpcGFzcyA8IDQpIHsKICAgICAgICAgdW5zaWduZWQgcm93RHVwID0gMDsK
ICAgICAgICAgdW5zaWduZWQgcm93U2hpZnQgPSAwOwogCi0gICAgICAgIHN3aXRjaCAobV9mcmFt
ZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAgICAgICAgY2Fz
ZSAxOgogICAgICAgICAgICAgcm93RHVwID0gNzsKICAgICAgICAgICAgIHJvd1NoaWZ0ID0gMzsK
QEAgLTE0OCw4OCArMTQ4LDY1IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dFJvdygpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUgY2xpZW50IGtu
b3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93LgotICAgIGlmIChtX2NsaWVudCAmJiBtX2ZyYW1lQ29u
dGV4dAotICAgICAgICAmJiAhbV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1faW1hZ2VzQ291bnQg
LSAxLCBtX2x6d0NvbnRleHQucm93QnVmZmVyLCBtX2ZyYW1lQ29udGV4dC0+d2lkdGgsCi0gICAg
ICAgICAgICBkcm93U3RhcnQsIGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2ZyYW1lQ29udGV4
dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1f
ZnJhbWVDb250ZXh0LT5pcGFzcyA+IDEpKQorICAgIGlmICghbV9jbGllbnQtPmhhdmVEZWNvZGVk
Um93KG1fZnJhbWVDb250ZXh0LT5mcmFtZUlkLCByb3dCdWZmZXIsIG1fZnJhbWVDb250ZXh0LT53
aWR0aCwKKyAgICAgICAgZHJvd1N0YXJ0LCBkcm93RW5kIC0gZHJvd1N0YXJ0ICsgMSwgbV9mcmFt
ZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNl
ZCAmJiBpcGFzcyA+IDEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZnJh
bWVDb250ZXh0LT5pbnRlcmxhY2VkKQotICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdysrOwor
ICAgICAgICBpcm93Kys7CiAgICAgZWxzZSB7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHN3
aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlwYXNz
KSB7CiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
Pmlyb3cgKz0gODsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0g
bV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cg
PSA0OworICAgICAgICAgICAgICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAgICBpZiAoaXJv
dyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNz
Kys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSA0OwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAgICAgICBpcm93ICs9IDg7CisgICAg
ICAgICAgICAgICAgaWYgKGlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAg
ICAgICAgICAgICAgICBpcGFzcysrOworICAgICAgICAgICAgICAgICAgICBpcm93ID0gMjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgMzoKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA0OwotICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVp
Z2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwotICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDE7CisgICAgICAgICAgICAg
ICAgaXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250ZXh0
LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAgICAg
ICAgICAgaXJvdyA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
Pmlyb3cgKz0gMjsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0g
bV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cg
PSAwOworICAgICAgICAgICAgICAgIGlyb3cgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAoaXJv
dyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNz
Kys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSAwOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9mcmFtZUNvbnRl
eHQtPmlyb3cgPiAobV9mcmFtZUNvbnRleHQtPmhlaWdodCAtIDEpKTsKKyAgICAgICAgfSB3aGls
ZSAoaXJvdyA+IChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0gMSkpOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogLy8gUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5nLgotYm9v
bCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVf
dCBieXRlc0luQmxvY2spCisvLyBSZXR1cm5zIHRydWUgaWYgZGVjb2Rpbmcgd2FzIHN1Y2Nlc3Nm
dWwuIEluIHRoaXMgY2FzZSB0aGUgYmxvY2sgd2lsbCBoYXZlIGJlZW4gY29tcGxldGVseSBjb25z
dW1lZCBhbmQvb3Igcm93c1JlbWFpbmluZyB3aWxsIGJlIDAuCisvLyBPdGhlcndpc2UsIGRlY29k
aW5nIGZhaWxlZDsgcmV0dXJucyBmYWxzZSBpbiB0aGlzIGNhc2UsIHdoaWNoIHdpbGwgYWx3YXlz
IGNhdXNlIHRoZSBHSUZJbWFnZVJlYWRlciB0byBzZXQgdGhlICJkZWNvZGUgZmFpbGVkIiBmbGFn
LgorYm9vbCBHSUZMWldDb250ZXh0Ojpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywg
c2l6ZV90IGJ5dGVzSW5CbG9jaykKIHsKLSAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQogICAgIGludCBjb2RlOwogICAgIGludCBpbmNvZGU7CiAgICAgY29u
c3QgdW5zaWduZWQgY2hhciAqY2g7CiAKLSAgICAvLyBDb3B5IGFsbCB0aGUgZGVjb2RlciBzdGF0
ZSB2YXJpYWJsZXMgaW50byBsb2NhbHMgc28gdGhlIGNvbXBpbGVyCi0gICAgLy8gd29uJ3Qgd29y
cnkgYWJvdXQgdGhlbSBiZWluZyBhbGlhc2VkLiBUaGUgbG9jYWxzIHdpbGwgYmUgaG9tZWQKLSAg
ICAvLyBiYWNrIGludG8gdGhlIEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCi0g
ICAgaW50IGF2YWlsID0gbV9sendDb250ZXh0LmF2YWlsOwotICAgIGludCBiaXRzID0gbV9sendD
b250ZXh0LmJpdHM7Ci0gICAgc2l6ZV90IGNudCA9IGJ5dGVzSW5CbG9jazsKLSAgICBpbnQgY29k
ZXNpemUgPSBtX2x6d0NvbnRleHQuY29kZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrID0gbV9sendD
b250ZXh0LmNvZGVtYXNrOwotICAgIGludCBvbGRjb2RlID0gbV9sendDb250ZXh0Lm9sZGNvZGU7
Ci0gICAgaW50IGNsZWFyQ29kZSA9IG1fbHp3Q29udGV4dC5jbGVhckNvZGU7Ci0gICAgdW5zaWdu
ZWQgY2hhciBmaXJzdGNoYXIgPSBtX2x6d0NvbnRleHQuZmlyc3RjaGFyOwotICAgIGludCBkYXR1
bSA9IG1fbHp3Q29udGV4dC5kYXR1bTsKLQotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4mIHBy
ZWZpeCA9IG1fbHp3Q29udGV4dC5wcmVmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBz
dWZmaXggPSBtX2x6d0NvbnRleHQuc3VmZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYg
c3RhY2sgPSBtX2x6d0NvbnRleHQuc3RhY2s7Ci0gICAgc2l6ZV90IHN0YWNrcCA9IG1fbHp3Q29u
dGV4dC5zdGFja3A7Ci0gICAgc2l6ZV90IHJvd3AgPSBtX2x6d0NvbnRleHQucm93UG9zaXRpb247
Ci0gICAgc2l6ZV90IHdpZHRoID0gbV9mcmFtZUNvbnRleHQtPndpZHRoOwotICAgIHNpemVfdCBy
b3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmc7Ci0KLSAgICBpZiAo
cm93cCA9PSB3aWR0aCkKKyAgICBpZiAocm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICNkZWZpbmUgT1VUUFVUX1JPVyBcCkBAIC0yMzcsMTMg
KzIxNCwxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFy
KiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgaWYgKCFvdXRwdXRSb3coKSkg
XAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCiAgICAgICAgIHJvd3NSZW1haW5pbmctLTsg
XAotICAgICAgICByb3dwID0gMDsgXAotICAgICAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24g
PSAwOyBcCisgICAgICAgIHJvd1Bvc2l0aW9uID0gMDsgXAogICAgICAgICBpZiAoIXJvd3NSZW1h
aW5pbmcpIFwKLSAgICAgICAgICAgIGdvdG8gRU5EOyBcCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBmb3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsg
Y2grKykgeworICAgIGZvciAoY2ggPSBibG9jazsgYnl0ZXNJbkJsb2NrLS0gPiAwOyBjaCsrKSB7
CiAgICAgICAgIC8vIEZlZWQgdGhlIG5leHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0
IGlucHV0IGJ1ZmZlci4KICAgICAgICAgZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKICAg
ICAgICAgYml0cyArPSA4OwpAQCAtMjY5LDEyICsyNDUsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2sp
CiAgICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0
ZXIgYWxsIGltYWdlIGRhdGEuCiAgICAgICAgICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChvbGRjb2Rl
ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgbV9sendDb250ZXh0LnJvd0J1ZmZlcltyb3dwKytd
ID0gc3VmZml4W2NvZGVdOwotICAgICAgICAgICAgICAgIGlmIChyb3dwID09IHdpZHRoKQorICAg
ICAgICAgICAgICAgIHJvd0J1ZmZlcltyb3dQb3NpdGlvbisrXSA9IHN1ZmZpeFtjb2RlXTsKKyAg
ICAgICAgICAgICAgICBpZiAocm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAg
ICAgICAgICAgICAgICAgT1VUUFVUX1JPVzsKIAogICAgICAgICAgICAgICAgIGZpcnN0Y2hhciA9
IG9sZGNvZGUgPSBjb2RlOwpAQCAtMjg3LDEyICsyNjMsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2sp
CiAgICAgICAgICAgICAgICAgY29kZSA9IG9sZGNvZGU7CiAKICAgICAgICAgICAgICAgICBpZiAo
c3RhY2twID09IE1BWF9CWVRFUykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50
ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hpbGUgKGNvZGUgPj0g
Y2xlYXJDb2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPj0gTUFYX0JZVEVTIHx8IGNv
ZGUgPT0gcHJlZml4W2NvZGVdKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQg
PyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25s
eSBob2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWlsIC0gMV0sCiAgICAgICAgICAg
ICAgICAgLy8gYWxsb3dpbmcgY29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xl
cmFudCBvZiBtYWxmb3JtZWQKQEAgLTMwMiw3ICsyNzgsNyBAQCBib29sIEdJRkltYWdlUmVhZGVy
Ojpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykK
ICAgICAgICAgICAgICAgICBjb2RlID0gcHJlZml4W2NvZGVdOwogCiAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrcCA9PSBNQVhfQllURVMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2Ns
aWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YWNrW3N0YWNr
cCsrXSA9IGZpcnN0Y2hhciA9IHN1ZmZpeFtjb2RlXTsKQEAgLTMyNSwzNiArMzAxLDk3IEBAIGJv
b2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXpl
X3QgYnl0ZXNJbkJsb2NrKQogCiAgICAgICAgICAgICAvLyBDb3B5IHRoZSBkZWNvZGVkIGRhdGEg
b3V0IHRvIHRoZSBzY2FubGluZSBidWZmZXIuCiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAgICAgbV9sendDb250ZXh0LnJvd0J1ZmZlcltyb3dwKytdID0gc3RhY2tbLS1zdGFja3BdOwot
ICAgICAgICAgICAgICAgIGlmIChyb3dwID09IHdpZHRoKQorICAgICAgICAgICAgICAgIHJvd0J1
ZmZlcltyb3dQb3NpdGlvbisrXSA9IHN0YWNrWy0tc3RhY2twXTsKKyAgICAgICAgICAgICAgICBp
ZiAocm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAg
T1VUUFVUX1JPVzsKICAgICAgICAgICAgIH0gd2hpbGUgKHN0YWNrcCA+IDApOwogICAgICAgICB9
CiAgICAgfQogCi1FTkQ6Ci0gICAgLy8gSG9tZSB0aGUgbG9jYWwgY29waWVzIG9mIHRoZSBHSUYg
ZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMuCi0gICAgbV9sendDb250ZXh0LmF2YWlsID0gYXZhaWw7
Ci0gICAgbV9sendDb250ZXh0LmJpdHMgPSBiaXRzOwotICAgIG1fbHp3Q29udGV4dC5jb2Rlc2l6
ZSA9IGNvZGVzaXplOwotICAgIG1fbHp3Q29udGV4dC5jb2RlbWFzayA9IGNvZGVtYXNrOwotICAg
IG1fbHp3Q29udGV4dC5vbGRjb2RlID0gb2xkY29kZTsKLSAgICBtX2x6d0NvbnRleHQuZmlyc3Rj
aGFyID0gZmlyc3RjaGFyOwotICAgIG1fbHp3Q29udGV4dC5kYXR1bSA9IGRhdHVtOwotICAgIG1f
bHp3Q29udGV4dC5zdGFja3AgPSBzdGFja3A7Ci0gICAgbV9sendDb250ZXh0LnJvd1Bvc2l0aW9u
ID0gcm93cDsKLSAgICBtX2ZyYW1lQ29udGV4dC0+cm93c1JlbWFpbmluZyA9IHJvd3NSZW1haW5p
bmc7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFBlcmZvcm0gZGVjb2RpbmcgZm9yIHRoaXMg
ZnJhbWUuIGZyYW1lRGVjb2RlZCB3aWxsIGJlIHRydWUgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBk
ZWNvZGVkLgorLy8gUmV0dXJucyBmYWxzZSBpZiBhIGRlY29kaW5nIGVycm9yIG9jY3VycmVkLiBU
aGlzIGlzIGEgZmF0YWwgZXJyb3IgYW5kIGNhdXNlcyB0aGUgR0lGSW1hZ2VSZWFkZXIgdG8gc2V0
IHRoZSAiZGVjb2RlIGZhaWxlZCIgZmxhZy4KKy8vIE90aGVyd2lzZSwgZWl0aGVyIG5vdCBlbm91
Z2ggZGF0YSBpcyBhdmFpbGFibGUgdG8gZGVjb2RlIGZ1cnRoZXIgdGhhbiBiZWZvcmUsIG9yIHRo
ZSBuZXcgZGF0YSBoYXMgYmVlbiBkZWNvZGVkIHN1Y2Nlc3NmdWxseTsgcmV0dXJucyB0cnVlIGlu
IHRoaXMgY2FzZS4KK2Jvb2wgR0lGRnJhbWVDb250ZXh0OjpkZWNvZGUoY29uc3QgdW5zaWduZWQg
Y2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGll
bnQsIGJvb2wqIGZyYW1lRGVjb2RlZCkKK3sKKyAgICAqZnJhbWVEZWNvZGVkID0gZmFsc2U7Cisg
ICAgaWYgKCFtX2x6d0NvbnRleHQpIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgbW9yZSBkYXRhIHRv
IHByb3Blcmx5IGluaXRpYWxpemUgR0lGTFpXQ29udGV4dC4KKyAgICAgICAgaWYgKCFpc0RhdGFT
aXplRGVmaW5lZCgpIHx8ICFpc0hlYWRlckRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIG1fbHp3Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBHSUZMWldDb250ZXh0
KGNsaWVudCwgdGhpcykpOworICAgICAgICBpZiAoIW1fbHp3Q29udGV4dC0+cHJlcGFyZVRvRGVj
b2RlKCkpIHsKKyAgICAgICAgICAgIG1fbHp3Q29udGV4dC5jbGVhcigpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJyZW50THp3QmxvY2sgPSAw
OworICAgIH0KKworICAgIC8vIFNvbWUgYmFkIEdJRnMgaGF2ZSBleHRyYSBibG9ja3MgYmV5b25k
IHRoZSBsYXN0IHJvdywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBkZWNvZGUuCisgICAgd2hpbGUg
KG1fY3VycmVudEx6d0Jsb2NrIDwgbV9sendCbG9ja3Muc2l6ZSgpICYmIG1fbHp3Q29udGV4dC0+
aGFzUmVtYWluaW5nUm93cygpKSB7CisgICAgICAgIHNpemVfdCBibG9ja1Bvc2l0aW9uID0gbV9s
endCbG9ja3NbbV9jdXJyZW50THp3QmxvY2tdLmJsb2NrUG9zaXRpb247CisgICAgICAgIHNpemVf
dCBibG9ja1NpemUgPSBtX2x6d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9ja10uYmxvY2tTaXplOwor
ICAgICAgICBpZiAoYmxvY2tQb3NpdGlvbiArIGJsb2NrU2l6ZSA+IGxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2x6d0NvbnRleHQtPmRvTFpXKGRhdGEg
KyBibG9ja1Bvc2l0aW9uLCBibG9ja1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICArK21fY3VycmVudEx6d0Jsb2NrOworICAgIH0KKworICAgIC8vIElmIHRoaXMgZnJh
bWUgaXMgZGF0YSBjb21wbGV0ZSB0aGVuIHRoZSBwcmV2aW91cyBsb29wIG11c3QgaGF2ZSBjb21w
bGV0ZWx5IGRlY29kZWQgYWxsIExaVyBibG9ja3MuCisgICAgLy8gVGhlcmUgd2lsbCBiZSBubyBt
b3JlIGRlY29kaW5nIGZvciB0aGlzIGZyYW1lIHNvIGl0J3MgdGltZSB0byBjbGVhbnVwLgorICAg
IC8vIE5vdGUgdGhhdCBzb21lIGJyb2tlbiBHSUYgZmlsZXMgaGF2ZSBubyBtb3JlIExaVyBibG9j
a3MgYnV0IHN0aWxsIHNvbWUgcm93cyByZW1haW5pbmcsIHdlIHRyZWF0IGl0IGFzIGZyYW1lIGNv
bXBsZXRlIGFzIHdlbGwuCisgICAgaWYgKGlzQ29tcGxldGUoKSkgeworICAgICAgICAqZnJhbWVE
ZWNvZGVkID0gdHJ1ZTsKKyAgICAgICAgbV9sendDb250ZXh0LmNsZWFyKCk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCisvLyBEZWNvZGUgYWxsIGZyYW1lcyBiZWZvcmUgaGFsdEF0RnJh
bWUuCisvLyBUaGlzIG1ldGhvZCB1c2VzIEdJRkZyYW1lQ29udGV4dDpkZWNvZGUoKSB0byBkZWNv
ZGUgZWFjaCBmcmFtZSwgZGVjb2RpbmcgZXJyb3IgaXMgcmVwb3J0ZWQgdG8gY2xpZW50IGFzIGEg
Y3JpdGljYWwgZmFpbHVyZS4KKy8vIFJldHVybiB0cnVlIGlmIGRlY29kaW5nIGhhcyBwcm9ncmVz
c2VkLiByZXR1cm4gZmFsc2U7IGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25l
ZCBoYWx0QXRGcmFtZSkKIHsKICAgICBBU1NFUlQobV9ieXRlc1JlYWQgPD0gbV9kYXRhLT5zaXpl
KCkpOwotICAgIHJldHVybiBkZWNvZGVJbnRlcm5hbChtX2J5dGVzUmVhZCwgbV9kYXRhLT5zaXpl
KCkgLSBtX2J5dGVzUmVhZCwgcXVlcnksIGhhbHRBdEZyYW1lKTsKKworICAgIC8vIFRyeSB0byBi
ZSB0b2xlcmFudCBhbmQgZG9uJ3QgcmVwb3J0IHBhcnNpbmcgZXJyb3JzIGJ1dCB3ZSB3aWxsIG5v
dCBwYXJzZSBhZ2Fpbi4KKyAgICBpZiAoIW1fcGFyc2VGYWlsZWQgJiYgIXBhcnNlKG1fYnl0ZXNS
ZWFkLCBtX2RhdGEtPnNpemUoKSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSA9PSBHSUZJbWFnZURlY29k
ZXI6OkdJRlNpemVRdWVyeSkpCisgICAgICAgIG1fcGFyc2VGYWlsZWQgPSB0cnVlOworCisgICAg
aWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHdoaWxlIChtX2N1cnJlbnREZWNvZGluZ0ZyYW1lIDwgc3RkOjptaW4o
bV9mcmFtZXMuc2l6ZSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhhbHRBdEZyYW1lKSkpIHsKKyAg
ICAgICAgYm9vbCBmcmFtZURlY29kZWQgPSBmYWxzZTsKKyAgICAgICAgR0lGRnJhbWVDb250ZXh0
KiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lc1ttX2N1cnJlbnREZWNvZGluZ0ZyYW1lXS5nZXQoKTsK
KworICAgICAgICBpZiAoIWN1cnJlbnRGcmFtZS0+ZGVjb2RlKGRhdGEoMCksIG1fZGF0YS0+c2l6
ZSgpLCBtX2NsaWVudCwgJmZyYW1lRGVjb2RlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgLy8gV2UgbmVlZCBtb3JlIGRhdGEgdG8gY29udGludWUgZGVjb2RpbmcuCisg
ICAgICAgIGlmICghZnJhbWVEZWNvZGVkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKCFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2N1cnJlbnREZWNvZGluZ0ZyYW1lLCBjdXJy
ZW50RnJhbWUtPmRlbGF5VGltZSwgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrbV9jdXJyZW50RGVjb2RpbmdGcmFtZTsK
KyAgICB9CisKKyAgICAvLyBBbGwgZnJhbWVzIGRlY29kZWQuCisgICAgaWYgKG1fY3VycmVudERl
Y29kaW5nRnJhbWUgPT0gbV9mcmFtZXMuc2l6ZSgpICYmIG1fcGFyc2VDb21wbGV0ZWQpCisgICAg
ICAgIG1fY2xpZW50LT5naWZDb21wbGV0ZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBQ
cm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRlY29kZXIu
Ci1ib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9u
LCBzaXplX3QgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBo
YWx0QXRGcmFtZSkKKy8vIFBhcnNlIGluY29taW5nIEdJRiBkYXRhIHN0cmVhbSBpbnRvIGludGVy
bmFsIGRhdGEgc3RydWN0dXJlcy4KKy8vIFJldHVybiB0cnVlIGlmIHBhcnNpbmcgaGFzIHByb2dy
ZXNzZWQgb3IgdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhLgorLy8gUmV0dXJuIGZhbHNlIGlmIGEg
ZmF0YWwgZXJyb3IgaXMgZW5jb3VudGVyZWQuCitib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShz
aXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpCiB7CiAg
ICAgaWYgKCFsZW4pIHsKICAgICAgICAgLy8gTm8gbmV3IGRhdGEgaGFzIGNvbWUgaW4gc2luY2Ug
dGhlIGxhc3QgY2FsbCwganVzdCBpZ25vcmUgdGhpcyBjYWxsLgpAQCAtMzYyLDEyICszOTksMTMg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlv
biwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICB9CiAKICAgICBpZiAobGVuIDwgbV9ieXRl
c1RvQ29uc3VtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIC8vIFRoaXMgbG9vcCByZWFkcyBhcyBtYW55IGNvbXBvbmVudHMgZnJvbSB8bV9kYXRh
fCBhcyBwb3NzaWJsZS4KICAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9u
LCBkYXRhUG9zaXRpb24gd2lsbCBiZSBhZHZhbmNlZCBieSBtX2J5dGVzVG9Db25zdW1lIHRvCiAg
ICAgLy8gcG9pbnQgdG8gdGhlIG5leHQgY29tcG9uZW50LiBsZW4gd2lsbCBiZSBkZWNyZW1lbnRl
ZCBhY2NvcmRpbmdseS4KICAgICB3aGlsZSAobGVuID49IG1fYnl0ZXNUb0NvbnN1bWUpIHsKKyAg
ICAgICAgY29uc3Qgc2l6ZV90IGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiA9IGRhdGFQb3NpdGlv
bjsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY3VycmVudENvbXBvbmVudCA9IGRhdGEo
ZGF0YVBvc2l0aW9uKTsKIAogICAgICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbXBvbmVudCBh
cyBjb25zdW1lZC4gTm90ZSB0aGF0IGN1cnJlbnRDb21wb25lbnQgd2lsbCByZW1haW4gcG9pbnRl
ZCBhdCB0aGlzCkBAIC0zNzcsMjAgKzQxNSwxNSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNv
ZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwog
CiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEdJRkxaVzoKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9mcmFtZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIC8vIG1fYnl0
ZXNUb0NvbnN1bWUgaXMgdGhlIGN1cnJlbnQgY29tcG9uZW50IHNpemUgYmVjYXVzZSBpdCBoYXNu
J3QgYmVlbiB1cGRhdGVkLgotICAgICAgICAgICAgaWYgKCFkb0xaVyhjdXJyZW50Q29tcG9uZW50
LCBtX2J5dGVzVG9Db25zdW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElm
IGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZCBtX2Ns
aWVudC0+c2V0RmFpbGVkKCkuCisgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPmFkZEx6d0Js
b2NrKGN1cnJlbnRDb21wb25lbnRQb3NpdGlvbiwgbV9ieXRlc1RvQ29uc3VtZSk7CiAgICAgICAg
ICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgR0lGTFpXU3RhcnQ6IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURl
Y29kZXI6OkdJRkZ1bGxRdWVyeSkgewotICAgICAgICAgICAgICAgIGludCBkYXRhc2l6ZSA9ICpj
dXJyZW50Q29tcG9uZW50OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6
ZSA9IGRhdGFzaXplOwotICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgTFpXIHBhcnNlci9k
ZWNvZGVyLgotICAgICAgICAgICAgICAgIGlmICghbV9sendDb250ZXh0LnByZXBhcmVUb0RlY29k
ZShtX3NjcmVlbldpZHRoLCBkYXRhc2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBt
X2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9m
cmFtZXMubGFzdCgpLT5zZXREYXRhU2l6ZSgqY3VycmVudENvbXBvbmVudCk7CiAgICAgICAgICAg
ICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC00MDIsNyArNDM1LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6
ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgIGVs
c2UgaWYgKCFzdHJuY21wKChjaGFyKiljdXJyZW50Q29tcG9uZW50LCAiR0lGODdhIiwgNikpCiAg
ICAgICAgICAgICAgICAgbV92ZXJzaW9uID0gODc7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgR0VUTig3LCBHSUZH
bG9iYWxIZWFkZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQxNSw2ICs0
NDgsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBv
c2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgbV9zY3JlZW5IZWln
aHQgPSBHRVRJTlQxNihjdXJyZW50Q29tcG9uZW50ICsgMik7CiAKICAgICAgICAgICAgIC8vIENB
TExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCisgICAgICAgICAg
ICAvLyBOb3RlOiBBIHN1YnNlcXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBkaW1lbnNpb25zIGxhcmdl
ciB0aGFuIHRoZSAic2NyZWVuIiBkaW1lbnNpb25zLgogICAgICAgICAgICAgaWYgKG1fY2xpZW50
ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NjgsNyArNTAyLDcgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90
IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgIC8vIHVudGlsIHdlIGZpbmQgYW4gaW1hZ2Ug
c2VwYXJhdG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAogICAgICAgICAgICAgLy8gYSBmaWxlIGlz
IGNvcnJ1cHQuIFdlIGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LgogICAgICAgICAgICAgaWYg
KCpjdXJyZW50Q29tcG9uZW50ICE9ICcsJykKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGll
bnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MzUsMzAgKzU2OSwyMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpk
ZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURl
YwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZDb250cm9sRXh0ZW5zaW9uOiB7Ci0gICAg
ICAgICAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dCA9IG5ldyBHSUZGcmFtZUNvbnRleHQoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCpjdXJyZW50Q29tcG9uZW50ICYgMHgxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJh
bWVDb250ZXh0LT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOwotICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzVHJhbnNw
YXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4IGNvbnRy
b2wgZXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE5PVEU6
IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51
bQotICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKLSAg
ICAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+
PiAyKSAmIDB4NzsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRo
b2QgPSAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbE1l
dGhvZDsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVl
IDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUgMwotICAgICAgICAgICAgICAgIC8vIExldCdzIGNo
b29zZSAzICh0aGUgbW9yZSBwb3B1bGFyKQotICAgICAgICAgICAgICAgIGlmIChkaXNwb3NhbE1l
dGhvZCA9PSA0KQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxN
ZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7Ci0g
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1cnJl
bnRDb21wb25lbnQgKyAxKSAqIDEwOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkRnJh
bWVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgR0lGRnJhbWVDb250ZXh0KiBjdXJyZW50RnJh
bWUgPSBtX2ZyYW1lcy5sYXN0KCkuZ2V0KCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlz
VHJhbnNwYXJlbnQgPSAqY3VycmVudENvbXBvbmVudCAmIDB4MTsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50RnJhbWUtPmlzVHJhbnNwYXJlbnQpCisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1l
LT50cGl4ZWwgPSBjdXJyZW50Q29tcG9uZW50WzNdOworCisgICAgICAgICAgICAvLyBXZSBpZ25v
cmUgdGhlICJ1c2VyIGlucHV0IiBiaXQuCisKKyAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVs
aWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQorICAgICAg
ICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQorICAgICAgICAgICAgaW50
IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkgPj4gMikgJiAweDc7CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZD4oZGlzcG9zYWxNZXRob2QpOworICAg
ICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBtZXRob2QgMyBpcyAib3Zl
cndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZworICAgICAgICAgICAgLy8gdGhl
IHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlzLiBXZSBtYXAgYm90aCB0
byB0aGUgc2FtZSB2YWx1ZS4KKyAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9PSA0KQor
ICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7CisgICAgICAgICAgICBjdXJyZW50
RnJhbWUtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwog
ICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTU4Nyw4ICs2MTQsOSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNv
ZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwog
CiAgICAgICAgIC8vIE5ldHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246IGFuaW1hdGlvbiBs
b29waW5nLgogICAgICAgICBjYXNlIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2s6IHsKKyAgICAg
ICAgICAgIC8vIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbiBhbHdheXMgcmVhZHMgMyBieXRl
cyBmcm9tIHRoZSBzdHJlYW07IFdlIHNob3VsZCBhdCBsZWFzdCB3YWl0IGZvciB0aGlzIGFtb3Vu
dC4KICAgICAgICAgICAgIGlmICgqY3VycmVudENvbXBvbmVudCkKLSAgICAgICAgICAgICAgICBH
RVROKCpjdXJyZW50Q29tcG9uZW50LCBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb24pOworICAg
ICAgICAgICAgICAgIEdFVE4oc3RkOjptYXgoMywgc3RhdGljX2Nhc3Q8aW50PigqY3VycmVudENv
bXBvbmVudCkpLCBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb24pOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTYxNiw3ICs2NDQsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRl
cm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAg
ICAgICAgICAgIEdFVE4oMSwgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jayk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIDAsMy03IGFyZSB5ZXQgdG8gYmUgZGVmaW5l
ZCBuZXRzY2FwZSBleHRlbnNpb24gY29kZXMKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGll
bnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtNjM2LDcgKzY2NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNp
emVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAg
KiBzaXplIGhhcyB3ZWlyZCB3aWR0aCBvciBoZWlnaHQuICBXZSBhc3N1bWUgdGhhdCBHSUY4N2EK
ICAgICAgICAgICAgICAqIGZpbGVzIGRvbid0IGNvbnRhaW4gYW5pbWF0aW9ucy4KICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgaWYgKCFtX2ltYWdlc0RlY29kZWQKKyAgICAgICAgICAgIGlm
IChjdXJyZW50RnJhbWVJc0ZpcnN0RnJhbWUoKQogICAgICAgICAgICAgICAgICYmICgobV9zY3Jl
ZW5IZWlnaHQgPCBoZWlnaHQpIHx8IChtX3NjcmVlbldpZHRoIDwgd2lkdGgpIHx8IChtX3ZlcnNp
b24gPT0gODcpKSkgewogICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0Owog
ICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSB3aWR0aDsKQEAgLTY1MywxMCArNjgxLDEw
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRp
b24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbV9z
Y3JlZW5IZWlnaHQ7CiAgICAgICAgICAgICAgICAgd2lkdGggPSBtX3NjcmVlbldpZHRoOwogICAg
ICAgICAgICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1l
ID09IG1faW1hZ2VzRGVjb2RlZCkgeworICAgICAgICAgICAgaWYgKHBhcnNlU2l6ZU9ubHkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgZGVjb2RlciBuZWVkcyB0byBzdG9wLiBIYW5kIGJhY2sg
dGhlIG51bWJlciBvZiBieXRlcyB3ZSBjb25zdW1lZCBmcm9tCiAgICAgICAgICAgICAgICAgLy8g
YnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQgd2UgY29uc3VtZWQgdG8gcmVhZCB0aGUgaGVhZGVy
KS4KICAgICAgICAgICAgICAgICBzZXRSZW1haW5pbmdCeXRlcyhsZW4gKyA5KTsKQEAgLTY2NCw2
MiArNjkyLDM4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBk
YXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1faW1hZ2VzQ291bnQgPSBt
X2ltYWdlc0RlY29kZWQgKyAxOwotCi0gICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZGdWxsUXVlcnkgJiYgIW1fZnJhbWVDb250ZXh0KQotICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgpOwotCi0gICAgICAgICAgICBp
ZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+eE9m
ZnNldCA9IHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnlPZmZzZXQg
PSB5T2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgPSBoZWln
aHQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPndpZHRoID0gd2lkdGg7Ci0KLSAg
ICAgICAgICAgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlz
IHRoZSBmaXJzdCBpbWFnZSAqLwotICAgICAgICAgICAgICAgIC8qIGJlaW5nIGRlY29kZWQuIElm
IGFueSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJnZXIgICAgICovCi0gICAgICAgICAgICAg
ICAgLyogdGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBidWZmZXJz
LiAgICAgKi8KLSAgICAgICAgICAgICAgICBtX3NjcmVlbldpZHRoID0gc3RkOjptYXgobV9zY3Jl
ZW5XaWR0aCwgd2lkdGgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1fc2NyZWVuSGVpZ2h0IDwg
aGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IGhlaWdodDsKLQot
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29tcG9uZW50WzhdICYgMHg0MCkgewotICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA9IDE7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMDsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2Rl
ZCkKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxh
eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IE92ZXJsYXlpbmcgaW50ZXJsYWNlZCwgdHJhbnNwYXJlbnQgR0lGcyBvdmVyCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3Bs
YXkgaGFjawotICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlcyBzYXZpbmcgdGhlIHVuZGVy
bHlpbmcgaW1hZ2UgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgamFn
Z2llcyBhdCB0aGUgdHJhbnNwYXJlbmN5IGVkZ2VzLiBXZSBhcmUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlzcGxheSBzdWNo
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGltYWdlcyBwcm9ncmVzc2l2ZWx5Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIGxh
c3QgaW1hZ2UuCi0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAwOwotICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5yb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRl
eHQtPmhlaWdodDsKLQotICAgICAgICAgICAgICAgIC8vIGJpdHMgcGVyIHBpeGVsIGlzIGN1cnJl
bnRDb21wb25lbnRbOF0mMHgwNwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBoYXMg
YSBsb2NhbCBjb2xvcm1hcD8KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q29tcG9uZW50WzhdICYg
MHg4MCkgeworICAgICAgICAgICAgYWRkRnJhbWVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAg
R0lGRnJhbWVDb250ZXh0KiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lcy5sYXN0KCkuZ2V0KCk7CisK
KyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+c2V0SGVhZGVyRGVmaW5lZCgpOworICAgICAgICAg
ICAgY3VycmVudEZyYW1lLT54T2Zmc2V0ID0geE9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+eU9mZnNldCA9IHlPZmZzZXQ7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+d2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSBzdGQ6Om1heChtX3NjcmVlbldpZHRoLCB3aWR0aCk7
CisgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IHN0ZDo6bWF4KG1fc2NyZWVuSGVpZ2h0LCBo
ZWlnaHQpOworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pbnRlcmxhY2VkID0gY3VycmVudENv
bXBvbmVudFs4XSAmIDB4NDA7CisKKyAgICAgICAgICAgIC8vIE92ZXJsYXlpbmcgaW50ZXJsYWNl
ZCwgdHJhbnNwYXJlbnQgR0lGcyBvdmVyCisgICAgICAgICAgICAvLyBleGlzdGluZyBpbWFnZSBk
YXRhIHVzaW5nIHRoZSBIYWViZXJsaSBkaXNwbGF5IGhhY2sKKyAgICAgICAgICAgIC8vIHJlcXVp
cmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bworICAgICAgICAgICAg
Ly8gYXZvaWQgamFnZ2llcyBhdCB0aGUgdHJhbnNwYXJlbmN5IGVkZ2VzLiBXZSBhcmUKKyAgICAg
ICAgICAgIC8vIHVucHJlcGFyZWQgdG8gZGVhbCB3aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkg
c3VjaAorICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkuIFdoaWNoIG1lYW5zIG9u
bHkgdGhlIGZpcnN0CisgICAgICAgICAgICAvLyBmcmFtZSBjYW4gYmUgcHJvZ3Jlc3NpdmVseSBk
aXNwbGF5ZWQuCisgICAgICAgICAgICAvLyBGSVhNRTogSXQgaXMgcG9zc2libGUgdGhhdCBhIG5v
bi10cmFuc3BhcmVudCBmcmFtZQorICAgICAgICAgICAgLy8gY2FuIGJlIGludGVybGFjZWQgYW5k
IHByb2dyZXNzaXZlbHkgZGlzcGxheWVkLgorICAgICAgICAgICAgY3VycmVudEZyYW1lLT5wcm9n
cmVzc2l2ZURpc3BsYXkgPSBjdXJyZW50RnJhbWVJc0ZpcnN0RnJhbWUoKTsKKworICAgICAgICAg
ICAgY29uc3QgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gY3VycmVudENvbXBvbmVudFs4
XSAmIDB4ODA7CisgICAgICAgICAgICBpZiAoaXNMb2NhbENvbG9ybWFwRGVmaW5lZCkgeworICAg
ICAgICAgICAgICAgIC8vIFRoZSB0aHJlZSBsb3ctb3JkZXIgYml0cyBvZiBjdXJyZW50Q29tcG9u
ZW50WzhdIHNwZWNpZnkgdGhlIGJpdHMgcGVyIHBpeGVsLgogICAgICAgICAgICAgICAgIGludCBu
dW1Db2xvcnMgPSAyIDw8IChjdXJyZW50Q29tcG9uZW50WzhdICYgMHg3KTsKICAgICAgICAgICAg
ICAgICBjb25zdCBzaXplX3QgbG9jYWxDb2xvcm1hcEJ5dGVzID0gMyAqIG51bUNvbG9yczsKIAog
ICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIg
aXQgbG9hZHMKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQ
b3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3Jt
YXBTaXplID0gbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3NpdGlvbjsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOwog
CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IGxvY2FsQ29sb3JtYXBCeXRlcykgewogICAgICAg
ICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGhhdmUgZW5vdWdoIGJ5dGVzIHRvIGNvbnN1
bWUgdGhlIGVudGlyZSBjb2xvcm1hcCBhdCBvbmNlLgpAQCAtNzI3LDcwICs3MzEsNTEgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6
ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KQotICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gbG9jYWxDb2xvcm1hcEJ5
dGVzOwogICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFwQnl0ZXM7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFsZXR0ZQotICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0YXJ0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZJbWFn
ZUNvbG9ybWFwOiB7Ci0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV9mcmFt
ZXMubGFzdCgpLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIEdF
VE4oMSwgR0lGTFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7Ci0gICAgICAgICAgICAvLyBTdGlsbCB3b3JraW5nIG9u
IHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2suCiAgICAgICAgICAg
ICBjb25zdCBzaXplX3QgYnl0ZXNJbkJsb2NrID0gKmN1cnJlbnRDb21wb25lbnQ7Ci0gICAgICAg
ICAgICBpZiAoYnl0ZXNJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0YQotICAgICAgICAgICAgICAg
IC8vIGlzIGNvcnJ1cHQsIHdlIG1heSBub3QgZ2V0IGFuIGV4cGxpY2l0IHRlcm1pbmF0b3IuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0ICYmICFtX2ZyYW1lQ29udGV4dC0+cm93
c1JlbWFpbmluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlsbGVnYWwg
R0lGLCBidXQgd2UgcmVtYWluIHRvbGVyYW50LgotICAgICAgICAgICAgICAgICAgICBHRVROKDEs
IEdJRlN1YkJsb2NrKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnl0ZXNJ
bkJsb2NrKQogICAgICAgICAgICAgICAgIEdFVE4oYnl0ZXNJbkJsb2NrLCBHSUZMWlcpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFu
eSBtb3JlIGltYWdlcyBpbiB0aGlzIHNlcXVlbmNlLgotICAgICAgICAgICAgICAgIG1faW1hZ2Vz
RGVjb2RlZCsrOwotCi0gICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBmcmFtZSBpcyBu
b3cgY29tcGxldGUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmIG1fZnJhbWVDb250
ZXh0ICYmICFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2ltYWdlc0RlY29kZWQgLSAxLCBtX2Zy
YW1lQ29udGV4dC0+ZGVsYXlUaW1lLCBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxldGUoKSBoYXMg
YWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgotCi0gICAgICAgICAgICAgICAg
Ly8gQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdlCi0gICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2Fs
Q29sb3JtYXBEZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pc1RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5pc2hlZCBwYXJzaW5nIG9uZSBmcmFt
ZTsgUHJvY2VzcyBuZXh0IGZyYW1lLgorICAgICAgICAgICAgICAgIEFTU0VSVCghbV9mcmFtZXMu
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPnNldENvbXBsZXRl
KCk7CiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZEb25l
OiB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwgd2UgY2FuIHN0b3AuCi0g
ICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmdpZkNv
bXBsZXRlKCk7CisgICAgICAgICAgICBtX3BhcnNlQ29tcGxldGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzZXRSZW1h
aW5pbmdCeXRlcyhsZW4pOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90IHJlbWFpbmlu
Z0J5dGVzKQpAQCAtNzk5LDIyICs3ODQsMzMgQEAgdm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVt
YWluaW5nQnl0ZXMoc2l6ZV90IHJlbWFpbmluZ0J5dGVzKQogICAgIG1fYnl0ZXNSZWFkID0gbV9k
YXRhLT5zaXplKCkgLSByZW1haW5pbmdCeXRlczsKIH0KIAotYm9vbCBHSUZMWldDb250ZXh0Ojpw
cmVwYXJlVG9EZWNvZGUodW5zaWduZWQgcm93V2lkdGgsIGludCBkYXRhc2l6ZSkKK3ZvaWQgR0lG
SW1hZ2VSZWFkZXI6OmFkZEZyYW1lSWZOZWNlc3NhcnkoKQogeworICAgIGlmIChtX2ZyYW1lcy5p
c0VtcHR5KCkgfHwgbV9mcmFtZXMubGFzdCgpLT5pc0NvbXBsZXRlKCkpCisgICAgICAgIG1fZnJh
bWVzLmFwcGVuZChhZG9wdFB0cihuZXcgR0lGRnJhbWVDb250ZXh0KG1fZnJhbWVzLnNpemUoKSkp
KTsKK30KKworLy8gRklYTUU6IE1vdmUgdGhpcyBtZXRob2QgdG8gY2xvc2UgdG8gZG9MWlcoKS4K
K2Jvb2wgR0lGTFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKCkKK3sKKyAgICBBU1NFUlQobV9m
cmFtZUNvbnRleHQtPmlzRGF0YVNpemVEZWZpbmVkKCkgJiYgbV9mcmFtZUNvbnRleHQtPmlzSGVh
ZGVyRGVmaW5lZCgpKTsKKwogICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9y
ZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKICAgICAvLyB0aGF0IG91ciBk
YXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIp
LgogICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0
bHkgYXQgNDA5NS4KLSAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQorICAgIGlmICht
X2ZyYW1lQ29udGV4dC0+ZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgY2xlYXJDb2RlID0gMSA8PCBkYXRhc2l6ZTsKKyAgICBjbGVhckNvZGUgPSAx
IDw8IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZTsKICAgICBpZiAoY2xlYXJDb2RlID49IE1BWF9C
WVRFUykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXZhaWwgPSBjbGVhckNvZGUgKyAy
OwogICAgIG9sZGNvZGUgPSAtMTsKLSAgICBjb2Rlc2l6ZSA9IGRhdGFzaXplICsgMTsKKyAgICBj
b2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSArIDE7CiAgICAgY29kZW1hc2sgPSAo
MSA8PCBjb2Rlc2l6ZSkgLSAxOwogICAgIGRhdHVtID0gYml0cyA9IDA7CisgICAgaXBhc3MgPSBt
X2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA/IDEgOiAwOworICAgIGlyb3cgPSAwOwogCiAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgdGFibGVzIGxhemlseSwgdGhpcyBhbGxvd3MgZnJhbWUgY291bnQg
cXVlcnkgdG8gdXNlIGxlc3MgbWVtb3J5LgogICAgIHN1ZmZpeC5yZXNpemUoTUFYX0JZVEVTKTsK
QEAgLTgyMiw4ICs4MTgsOSBAQCBib29sIEdJRkxaV0NvbnRleHQ6OnByZXBhcmVUb0RlY29kZSh1
bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQogICAgIHByZWZpeC5yZXNpemUoTUFYX0JZ
VEVTKTsKIAogICAgIC8vIEluaXRpYWxpemUgb3V0cHV0IHJvdyBidWZmZXIuCi0gICAgcm93QnVm
ZmVyLnJlc2l6ZShyb3dXaWR0aCk7CisgICAgcm93QnVmZmVyLnJlc2l6ZShtX2ZyYW1lQ29udGV4
dC0+d2lkdGgpOwogICAgIHJvd1Bvc2l0aW9uID0gMDsKKyAgICByb3dzUmVtYWluaW5nID0gbV9m
cmFtZUNvbnRleHQtPmhlaWdodDsKIAogICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXgg
dGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgogICAgIHN1ZmZpeC5m
aWxsKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAppbmRleCBhZTJhOGJiMjFjZDgzMzExNmE5ZDE3
ODY4ZmFmODczOWJiZGY5M2ZjLi43YmY4MWM0NTA0YWU5MjNjMmJiNGNmYjAyNDA1MDdhNGVkN2Vi
MzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaApAQCAtNDIsNiArNDIsOCBAQAogLy8gc28gd2Ug
d2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjZGVmaW5lIE1BWF9MWldfQklUUyAg
ICAgICAgICAxMgpAQCAtNzUsMTYgKzc3LDgxIEBAIGVudW0gR0lGU3RhdGUgewogICAgIEdJRkNv
bnN1bWVDb21tZW50CiB9OwogCi0vLyBGcmFtZSBvdXRwdXQgc3RhdGUgbWFjaGluZS4KLXN0cnVj
dCBHSUZGcmFtZUNvbnRleHQgeworc3RydWN0IEdJRkZyYW1lQ29udGV4dDsKKworLy8gTFpXIGRl
Y29kZXIgc3RhdGUgbWFjaGluZS4KK2NsYXNzIEdJRkxaV0NvbnRleHQgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGludCBkYXRhc2l6ZTsKKyAgICBHSUZMWldD
b250ZXh0KFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50LCBjb25zdCBHSUZGcmFtZUNv
bnRleHQqIGZyYW1lQ29udGV4dCkKKyAgICAgICAgOiBzdGFja3AoMCkKKyAgICAgICAgLCBjb2Rl
c2l6ZSgwKQorICAgICAgICAsIGNvZGVtYXNrKDApCisgICAgICAgICwgY2xlYXJDb2RlKDApCisg
ICAgICAgICwgYXZhaWwoMCkKKyAgICAgICAgLCBvbGRjb2RlKDApCisgICAgICAgICwgZmlyc3Rj
aGFyKDApCisgICAgICAgICwgYml0cygwKQorICAgICAgICAsIGRhdHVtKDApCisgICAgICAgICwg
aXBhc3MoMCkKKyAgICAgICAgLCBpcm93KDApCisgICAgICAgICwgcm93UG9zaXRpb24oMCkKKyAg
ICAgICAgLCByb3dzUmVtYWluaW5nKDApCisgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICAgICAsIG1fZnJhbWVDb250ZXh0KGZyYW1lQ29udGV4dCkKKyAgICB7IH0KKworICAgIGJvb2wg
cHJlcGFyZVRvRGVjb2RlKCk7CisgICAgYm9vbCBvdXRwdXRSb3coKTsKKyAgICBib29sIGRvTFpX
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKTsKKyAgICBi
b29sIGhhc1JlbWFpbmluZ1Jvd3MoKSB7IHJldHVybiByb3dzUmVtYWluaW5nOyB9CisKK3ByaXZh
dGU6CisgICAgLy8gTFpXIGRlY29kaW5nIHN0YXRlcyBhbmQgb3V0cHV0IHN0YXRlcy4KKyAgICBz
aXplX3Qgc3RhY2twOyAvLyBDdXJyZW50IHN0YWNrIHBvaW50ZXIuCisgICAgaW50IGNvZGVzaXpl
OworICAgIGludCBjb2RlbWFzazsKKyAgICBpbnQgY2xlYXJDb2RlOyAvLyBDb2Rld29yZCB1c2Vk
IHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldC4KKyAgICBpbnQgYXZhaWw7IC8vIEluZGV4IG9m
IG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlvbmFyeS4KKyAgICBpbnQgb2xkY29kZTsKKyAg
ICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKKyAgICBpbnQgYml0czsgLy8gTnVtYmVyIG9mIHVu
cmVhZCBiaXRzIGluICJkYXR1bSIuCisgICAgaW50IGRhdHVtOyAvLyAzMi1iaXQgaW5wdXQgYnVm
ZmVyLgogICAgIGludCBpcGFzczsgLy8gSW50ZXJsYWNlIHBhc3M7IFJhbmdlcyAxLTQgaWYgaW50
ZXJsYWNlZC4KLSAgICBzaXplX3Qgcm93c1JlbWFpbmluZzsgLy8gUm93cyByZW1haW5pbmcgdG8g
YmUgb3V0cHV0LgogICAgIHNpemVfdCBpcm93OyAvLyBDdXJyZW50IG91dHB1dCByb3csIHN0YXJ0
aW5nIGF0IHplcm8uCisgICAgc2l6ZV90IHJvd1Bvc2l0aW9uOworICAgIHNpemVfdCByb3dzUmVt
YWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQuCisKKyAgICBWZWN0b3I8dW5z
aWduZWQgc2hvcnQ+IHByZWZpeDsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3VmZml4Owor
ICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hh
cj4gcm93QnVmZmVyOyAvLyBTaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZlci4KKworICAg
IC8vIEluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gYW5kIHJlYWQtb25seS4KKyAgICBX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OworICAgIGNvbnN0IEdJRkZyYW1lQ29u
dGV4dCogbV9mcmFtZUNvbnRleHQ7Cit9OwogCi0gICAgLy8gUGFyYW1ldGVycyBmb3IgaW1hZ2Ug
ZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuCisvLyBEYXRhIHN0cnVjdHVyZSBmb3Igb25l
IExaVyBibG9jay4KK3N0cnVjdCBHSUZMWldCbG9jayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgR0lGTFpXQmxvY2soc2l6ZV90IHBvc2l0aW9uLCBzaXplX3Qg
c2l6ZSkKKyAgICAgICAgOiBibG9ja1Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAsIGJsb2Nr
U2l6ZShzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3QgYmxvY2tQb3NpdGlvbjsKKyAg
ICBzaXplX3QgYmxvY2tTaXplOworfTsKKworLy8gRnJhbWUgb3V0cHV0IHN0YXRlIG1hY2hpbmUu
CitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSBtZW1iZXJzIHRvIHByaXZhdGUgc2Vj
dGlvbi4KKyAgICBpbnQgZnJhbWVJZDsKICAgICB1bnNpZ25lZCB4T2Zmc2V0OwogICAgIHVuc2ln
bmVkIHlPZmZzZXQ7IC8vIFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4uCiAgICAgdW5z
aWduZWQgd2lkdGg7CkBAIC05Myw2ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0
byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVfdCBsb2NhbENvbG9y
bWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9jYWxDb2xvcm1h
cFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCisgICAgaW50IGRhdGFzaXpl
OwogICAgIAogICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5lZCA6IDE7CiAgICAgYm9vbCBw
cm9ncmVzc2l2ZURpc3BsYXkgOiAxOyAvLyBJZiB0cnVlLCBkbyBIYWViZXJsaSBpbnRlcmxhY2Ug
aGFjay4KQEAgLTEwMSwxMSArMTY5LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZGVsYXlU
aW1lOyAvLyBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoaXMgaW1hZ2UgaW4g
YSBtdWx0aS1pbWFnZSBHSUYuCiAKLSAgICBHSUZGcmFtZUNvbnRleHQoKQotICAgICAgICA6IGRh
dGFzaXplKDApCi0gICAgICAgICwgaXBhc3MoMCkKLSAgICAgICAgLCByb3dzUmVtYWluaW5nKDAp
Ci0gICAgICAgICwgaXJvdygwKQorICAgIEdJRkZyYW1lQ29udGV4dChpbnQgaWQpCisgICAgICAg
IDogZnJhbWVJZChpZCkKICAgICAgICAgLCB4T2Zmc2V0KDApCiAgICAgICAgICwgeU9mZnNldCgw
KQogICAgICAgICAsIHdpZHRoKDApCkBAIC0xMTQsNTQgKzE3OSw0OCBAQCBwdWJsaWM6CiAgICAg
ICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNp
ZmllZCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBsb2Nh
bENvbG9ybWFwU2l6ZSgwKQorICAgICAgICAsIGRhdGFzaXplKDApCiAgICAgICAgICwgaXNMb2Nh
bENvbG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAgLCBwcm9ncmVzc2l2ZURpc3BsYXkoZmFs
c2UpCiAgICAgICAgICwgaW50ZXJsYWNlZChmYWxzZSkKICAgICAgICAgLCBpc1RyYW5zcGFyZW50
KGZhbHNlKQogICAgICAgICAsIGRlbGF5VGltZSgwKQorICAgICAgICAsIG1fY3VycmVudEx6d0Js
b2NrKDApCisgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQorICAgICAgICAsIG1faXNIZWFk
ZXJEZWZpbmVkKGZhbHNlKQorICAgICAgICAsIG1faXNEYXRhU2l6ZURlZmluZWQoZmFsc2UpCiAg
ICAgewogICAgIH0KICAgICAKICAgICB+R0lGRnJhbWVDb250ZXh0KCkKICAgICB7CiAgICAgfQot
fTsKIAotLy8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KLS8vIEZJWE1FOiBNYWtlIHRoaXMg
YSBjbGFzcyBhbmQgaGlkZSBwcml2YXRlIG1lbWJlcnMuCi1zdHJ1Y3QgR0lGTFpXQ29udGV4dCB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR0lGTFpXQ29udGV4
dCgpCi0gICAgICAgIDogc3RhY2twKDApCi0gICAgICAgICwgY29kZXNpemUoMCkKLSAgICAgICAg
LCBjb2RlbWFzaygwKQotICAgICAgICAsIGNsZWFyQ29kZSgwKQotICAgICAgICAsIGF2YWlsKDAp
Ci0gICAgICAgICwgb2xkY29kZSgwKQotICAgICAgICAsIGZpcnN0Y2hhcigwKQotICAgICAgICAs
IGJpdHMoMCkKLSAgICAgICAgLCBkYXR1bSgwKQotICAgICAgICAsIHJvd1Bvc2l0aW9uKDApCi0g
ICAgeyB9CisgICAgdm9pZCBhZGRMendCbG9jayhzaXplX3QgcG9zaXRpb24sIHNpemVfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgbV9sendCbG9ja3MuYXBwZW5kKEdJRkxaV0Jsb2NrKHBvc2l0aW9u
LCBzaXplKSk7CisgICAgfQogCi0gICAgYm9vbCBwcmVwYXJlVG9EZWNvZGUodW5zaWduZWQgcm93
V2lkdGgsIGludCBkYXRhc2l6ZSk7CisgICAgYm9vbCBkZWNvZGUoY29uc3QgdW5zaWduZWQgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQs
IGJvb2wqIGZyYW1lRGVjb2RlZCk7CiAKLSAgICBzaXplX3Qgc3RhY2twOyAvLyBDdXJyZW50IHN0
YWNrIHBvaW50ZXIuCi0gICAgaW50IGNvZGVzaXplOwotICAgIGludCBjb2RlbWFzazsKLSAgICBp
bnQgY2xlYXJDb2RlOyAvLyBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNl
dC4KLSAgICBpbnQgYXZhaWw7IC8vIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGlj
dGlvbmFyeS4KLSAgICBpbnQgb2xkY29kZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsK
LSAgICBpbnQgYml0czsgLy8gTnVtYmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1bSIuCi0gICAg
aW50IGRhdHVtOyAvLyAzMi1iaXQgaW5wdXQgYnVmZmVyLgotICAgIHNpemVfdCByb3dQb3NpdGlv
bjsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0K
KyAgICB2b2lkIHNldENvbXBsZXRlKCkgeyBtX2lzQ29tcGxldGUgPSB0cnVlOyB9CisgICAgYm9v
bCBpc0hlYWRlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSGVhZGVyRGVmaW5lZDsgfQor
ICAgIHZvaWQgc2V0SGVhZGVyRGVmaW5lZCgpIHsgbV9pc0hlYWRlckRlZmluZWQgPSB0cnVlOyB9
CisgICAgYm9vbCBpc0RhdGFTaXplRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEYXRhU2l6
ZURlZmluZWQ7IH0KKyAgICB2b2lkIHNldERhdGFTaXplKGludCBzaXplKQorICAgIHsKKyAgICAg
ICAgZGF0YXNpemUgPSBzaXplOworICAgICAgICBtX2lzRGF0YVNpemVEZWZpbmVkID0gdHJ1ZTsK
KyAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHByZWZpeDsKLSAgICBWZWN0b3I8
dW5zaWduZWQgY2hhcj4gc3VmZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsK
LSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcm93QnVmZmVyOyAvLyBTaW5nbGUgc2NhbmxpbmUg
dGVtcG9yYXJ5IGJ1ZmZlci4KK3ByaXZhdGU6CisgICAgT3duUHRyPEdJRkxaV0NvbnRleHQ+IG1f
bHp3Q29udGV4dDsKKyAgICBWZWN0b3I8R0lGTFpXQmxvY2s+IG1fbHp3QmxvY2tzOyAvLyBMWlcg
YmxvY2tzIGZvciB0aGlzIGZyYW1lLgorICAgIHNpemVfdCBtX2N1cnJlbnRMendCbG9jazsKKyAg
ICBib29sIG1faXNDb21wbGV0ZTsKKyAgICBib29sIG1faXNIZWFkZXJEZWZpbmVkOworICAgIGJv
b2wgbV9pc0RhdGFTaXplRGVmaW5lZDsKIH07CiAKIGNsYXNzIEdJRkltYWdlUmVhZGVyIHsKQEAg
LTE3OSwyMyArMjM4LDMwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzR2xvYmFsQ29sb3JtYXBE
ZWZpbmVkKGZhbHNlKQogICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbigwKQogICAg
ICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBTaXplKDApCi0gICAgICAgICwgbV9pbWFnZXNEZWNvZGVk
KDApCi0gICAgICAgICwgbV9pbWFnZXNDb3VudCgwKQogICAgICAgICAsIG1fbG9vcENvdW50KGNM
b29wQ291bnROb3RTZWVuKQotICAgICAgICAsIG1fZnJhbWVDb250ZXh0KDApCisgICAgICAgICwg
bV9jdXJyZW50RGVjb2RpbmdGcmFtZSgwKQorICAgICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2Up
CisgICAgICAgICwgbV9wYXJzZUNvbXBsZXRlZChmYWxzZSkKICAgICB7CiAgICAgfQogCiAgICAg
fkdJRkltYWdlUmVhZGVyKCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ29udGV4dDsK
LSAgICAgICAgbV9mcmFtZUNvbnRleHQgPSAwOwogICAgIH0KIAogICAgIHZvaWQgc2V0RGF0YShQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9
CisgICAgLy8gRklYTUU6IGhhbHRBdEZyYW1lIHNob3VsZCBiZSBzaXplX3QuCiAgICAgYm9vbCBk
ZWNvZGUoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSwgdW5zaWduZWQgaGFsdEF0
RnJhbWUpOwogCi0gICAgaW50IGltYWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZXND
b3VudDsgfQorICAgIHNpemVfdCBpbWFnZXNDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9mcmFtZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0byBtYXRjaCBiZWhhdmlvciBvZiBwcmV2aW91cyBp
bXBsZW1lbnRhdGlvbiBvZiBHSUZJbWFnZVJlYWRlci4KKyAgICAgICAgLy8gR0lGQ29udHJvbEV4
dGVuc2lvbiBhZGRzIGEgbmV3IGZyYW1lIGJ1dCBpcyBub3QgY291bnRlZCB1bnRpbCBHSUZJbWFn
ZUhlYWRlciBpcyByZWFjaGVkLgorICAgICAgICByZXR1cm4gbV9mcmFtZXMubGFzdCgpLT5pc0hl
YWRlckRlZmluZWQoKSA/IG1fZnJhbWVzLnNpemUoKSA6IG1fZnJhbWVzLnNpemUoKSAtIDE7Cisg
ICAgfQogICAgIGludCBsb29wQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xvb3BDb3VudDsgfQog
CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JtYXAoKSBjb25zdApAQCAtMjE2
LDEyICsyODIsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnJhbWUtPmlzTG9jYWxDb2xv
cm1hcERlZmluZWQgPyBmcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUgOiAwOwogICAgIH0KIAotICAg
IGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZUNvbnRleHQ7IH0KKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50RGVjb2RpbmdGcmFtZSA8IG1f
ZnJhbWVzLnNpemUoKSA/IG1fZnJhbWVzW21fY3VycmVudERlY29kaW5nRnJhbWVdLmdldCgpIDog
MDsKKyAgICB9CisKKyAgICBib29sIHBhcnNlRmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYXJz
ZUZhaWxlZDsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRh
dGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVy
eSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpOwotICAgIGJvb2wgb3V0cHV0Um93KCk7Ci0gICAgYm9v
bCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgYm9vbCBwYXJzZShz
aXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpOwogICAg
IHZvaWQgc2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90KTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEoc2l6ZV90IGRhdGFQb3NpdGlvbikgY29uc3QKQEAgLTIyOSw2ICsyOTgsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KG1fZGF0YS0+ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKICAgICB9CiAKKyAgICB2b2lk
IGFkZEZyYW1lSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFt
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZXMuaXNFbXB0eSgpIHx8ICht
X2ZyYW1lcy5zaXplKCkgPT0gMXUgJiYgIW1fZnJhbWVzWzBdLT5pc0NvbXBsZXRlKCkpOworICAg
IH0KKwogICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CiAKICAgICAvLyBQ
YXJzaW5nIHN0YXRlIG1hY2hpbmUuCkBAIC0yNDQsMTUgKzMxOSwxNCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZDsKICAgICBzaXplX3QgbV9nbG9iYWxDb2xv
cm1hcFBvc2l0aW9uOyAvLyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFw
IGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4KICAgICBpbnQg
bV9nbG9iYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5Lgot
ICAgIHVuc2lnbmVkIG1faW1hZ2VzRGVjb2RlZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMg
Zm9yIGFuaW1hdGVkIEdJRnMuCi0gICAgaW50IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxs
IGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKS4KICAgICBp
bnQgbV9sb29wQ291bnQ7IC8vIE5ldHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBj
b250cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCiAgICAg
Ci0gICAgR0lGRnJhbWVDb250ZXh0KiBtX2ZyYW1lQ29udGV4dDsKLQotICAgIEdJRkxaV0NvbnRl
eHQgbV9sendDb250ZXh0OworICAgIFZlY3RvcjxPd25QdHI8R0lGRnJhbWVDb250ZXh0PiA+IG1f
ZnJhbWVzOworICAgIHNpemVfdCBtX2N1cnJlbnREZWNvZGluZ0ZyYW1lOwogCiAgICAgUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGJvb2wgbV9wYXJzZUZhaWxlZDsK
KyAgICBib29sIG1fcGFyc2VDb21wbGV0ZWQ7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCmluZGV4IGE3
YmY1ZDU1MGY0M2JmZjhiYmIwM2JhNjc2YmVlNmQ5YjNkOWExOTcuLmJjNmU4MTExNTljMzdlOTIy
MDRkMjNmZGZjM2FjN2U4YjFhZGYxYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtNDEsNiArNDEsOCBAQAogI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJVbml0VGVzdFN1cHBvcnQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nSGFz
aGVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC02Niw5ICs2OCwxOSBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQogICAg
IHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJ1ZmZlcik7CiB9CiAKK3N0YXRpYyBQ
YXNzT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gY3JlYXRlRGVjb2RlcigpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVs
dGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpOworfQor
CitzdGF0aWMgdW5zaWduZWQgaGFzaFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7
CisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShiaXRtYXAuZ2V0UGl4ZWxzKCks
IGJpdG1hcC5nZXRTaXplKCkpOworfQorCiBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRlY29k
ZVR3b0ZyYW1lcykKIHsKLSAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0
UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGll
ZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBPd25Q
dHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7CiAKICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdl
cy9yZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7
CkBAIC05MSw3ICsxMDMsNyBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRlY29kZVR3b0Zy
YW1lcykKIAogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZSkKIHsKLSAg
ICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURl
Y29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVy
PiBkZWNvZGVyKGNyZWF0ZURlY29kZXIoKSk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0
ZWQuZ2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xMTUsNyArMTI3LDcg
QEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZSkKIAogVEVTVChHSUZJ
bWFnZURlY29kZXJUZXN0LCBwYXJzZUJ5dGVCeUJ5dGUpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdl
RGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmls
ZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVE
ZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIv
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIpOwogICAgIEFT
U0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtMTQwLDcgKzE1Miw3IEBAIFRFU1QoR0lGSW1hZ2VE
ZWNvZGVyVGVzdCwgcGFyc2VCeXRlQnlCeXRlKQogCiBURVNUKEdJRkltYWdlRGVjb2RlclRlc3Qs
IHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkKIHsKLSAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVy
PiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhh
Tm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGll
ZCkpKTsKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGNyZWF0ZURlY29kZXIo
KSk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQtZ2lmLXdpdGgtb2Zmc2V0cy5naWYi
KTsKICAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKQEAgLTE2OSw3ICsxODEsNyBAQCBURVNU
KEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkKIC8vIFNlY29u
ZCBmcmFtZSBpbiB0aGUgZmlsZSBpcyBicm9rZW4gYnV0IHRlc3QgdGhhdCBmaXJzdCBmcmFtZSBj
YW4gYmUgZGVjb2RlZC4KIFRFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJva2VuU2Vjb25kRnJh
bWUpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcg
R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRklt
YWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL2Jyb2tlbi5naWYiKTsKICAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKQEAgLTE4Nyw2
ICsxOTksNTUgQEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBicm9rZW5TZWNvbmRGcmFtZSkK
ICAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291
bnQoKSk7CiB9CiAKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcHJvZ3Jlc3NpdmVEZWNvZGUp
Cit7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZnVsbERhdGEgPSByZWFkRmlsZSgiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50LmdpZiIpOworICAgIEFTU0VSVF9U
UlVFKGZ1bGxEYXRhLmdldCgpKTsKKyAgICBjb25zdCBzaXplX3QgZnVsbExlbmd0aCA9IGZ1bGxE
YXRhLT5zaXplKCk7CisKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyOworICAg
IEltYWdlRnJhbWUqIGZyYW1lOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB0cnVuY2F0ZWRIYXNo
ZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBwcm9ncmVzc2l2ZUhhc2hlczsKKworICAgIC8vIENv
bXB1dGUgaGFzaGVzIHdoZW4gdGhlIGZpbGUgaXMgdHJ1bmNhdGVkLgorICAgIGNvbnN0IHNpemVf
dCBpbmNyZW1lbnQgPSAxOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDw9IGZ1bGxMZW5ndGg7
IGkgKz0gaW5jcmVtZW50KSB7CisgICAgICAgIGRlY29kZXIgPSBjcmVhdGVEZWNvZGVyKCk7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShm
dWxsRGF0YS0+ZGF0YSgpLCBpKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgp
LCBpID09IGZ1bGxMZW5ndGgpOworICAgICAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVy
QXRJbmRleCgwKTsKKyAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgdHJ1bmNhdGVk
SGFzaGVzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIHRydW5jYXRlZEhhc2hlcy5hcHBlbmQoaGFzaFNrQml0bWFwKGZyYW1lLT5nZXRTa0JpdG1h
cCgpKSk7CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSBoYXNoZXMgd2hlbiB0aGUgZmlsZSBpcyBw
cm9ncmVzc2l2ZWx5IGRlY29kZWQuCisgICAgZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBmdWxsTGVuZ3RoOyBpICs9IGluY3JlbWVudCkgewor
ICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZnVsbERhdGEtPmRhdGEoKSwgaSk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQo
KSwgaSA9PSBmdWxsTGVuZ3RoKTsKKyAgICAgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZl
ckF0SW5kZXgoMCk7CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIHByb2dyZXNz
aXZlSGFzaGVzLmFwcGVuZCgwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIHByb2dyZXNzaXZlSGFzaGVzLmFwcGVuZChoYXNoU2tCaXRtYXAoZnJhbWUtPmdldFNr
Qml0bWFwKCkpKTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoID0gdHJ1ZTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRydW5jYXRlZEhhc2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAodHJ1bmNhdGVkSGFzaGVzW2ldICE9IHByb2dyZXNzaXZlSGFzaGVzW2ldKSB7CisgICAgICAg
ICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgRVhQRUNUX1RSVUUobWF0Y2gpOworfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50Lmdp
ZiBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9yYWRpZW50LmdpZgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MmRlMjg2ZWJiZTVkOTUzZGQ0YTIwZTY4OWQ5MjMwYjI5OWEzZDVjCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCAxMDM0CnpjbWQ2a3tabz8jMExRLXJIVT99ay1mMEFHYkF0dGo/MXBSNSk3
VHkhI3Z8WiNjcUZ8QHRQVCNZN2ImIWBGdC02Ugp6VVpmVyU5OU1WKUBnTz4ycG1eWWNaZXglVTEo
Q2REblZee0BVMUFpY2IlJmsoNkA3bUF7UVNCNVdiRClgbE1NbjAKenVtUC10YXxgPyp2Ml9reyg/
fWRnaVVYLWIkUVZSc0tYa3AmY08kbjBGU0heNVFAcWxJNS1WUSkyeVpsP3RQWTJjCno7Y3o3P09u
Q24majdNTzgyYk1CNHlvdHNHYDAjYW5UI1YpLXc3aVR+MTVXS25gLT9jOGh0M0BJPStWMHlfRldq
cgp6I05iWXhQc2ZFY2pGMT5yPEkqIzU1ZzFGeGdjNHNRO1ZUKXdOeVBNJW4ycERrQ29tc19ANVQ1
Kmdsal9sQio2NygKekVKeHU2QUdnQT41ezYkeGFWRz87SmxxWXk4VyhAfjtaSS11PCUxMHQ5eChB
WTFEbjdAe1FuUj5AY0opbSthb2BFCnowYEU8dSZSa2hsZVhQYihsU09OXzZtXmA9czxyQjlpcXhv
NzFma01zTkcqTWBJIWpCY1FqYGlzUWVSSnNze08+Nwp6PTVCPnR3bW80cVZZXkpPN0AjXz1HKVdB
UCM3UU83NV4zQmU3ZVArY1QlTUZDIzdWPj07VEVBI0I+cHlHWmxSOHYKemwqTTFhNWYjYmpNQEJe
cFpeejNOXk1oNUVgO0wzUFJoRUZMcXlsP14kO3srenNENyhBamQ9JnxCQGRTVl5OWWNnCno8cl5k
LSU2Uz9PclhgeFAoVmJ+KmIqIzJ4dkFvVWZ1SGxCbzVUIUZsTWtVSyVsPGx4PCtVdnA8NiVtaH02
V2A+Tgp6M3lDfGcqIyEmX0ZQfF8oVEBYXldxNE1ZRiQpS3UmVD48PFVzQFMkPEc8aj8/SWdqc3xT
ejw3YChSN3pCIWtzdE8KekJCYyZHMVd1PmZsZ1p7cHNCSTF0KF9kViRWaGoyI008WGo0a19PSlh1
Nm5XOVkmSzV+aE5sbW92ZDt7PHtySnRUCno+Pz4yeFJhU2QqY3AodXl6ejkhWUxEemM9cFpoSV83
cH5pbXRpUyNId2I3JkF5QiRsNilje0gzSShfUEorM280Sgp6akFtOHF5TjZiOV9DTEpIQ1doOVEt
U3ZeRmpsfVI8dnVCem5DelBMPFR2eUtAN35pcFBle2dYQCRWKEdSPDZ+T0EKekF1JV8xVXR6akhw
S3BAUDNwXk1fIU1jPXRLTF9zIzsxdF5PbzBlbmd6NUhRYlVkRVF7NU5DWiU7S193ZExyKXI9Cno/
ZDNkY1ZFTzVuY3ZPMXJUNDtLSTtIKStLdUJ9OCh2WkpUWUkjMWtSayQwcTBCU3t2OCFhZWkjUV9C
XkpqbWVWaQp6Pz5eWUU3fTN1NG15ZyY8YDMhYTE8PWVOY0V8T2VjQkY3UmdqKTIxKm82MEU/YiNA
RzcjYG1xJlImRzBJQ0R+aEIKYU4/bzxGWjRLPlJxNlZlTW0ocGktLTZiTHVAYnRmKnFlJkEwCgps
aXRlcmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193482</attachid>
            <date>2013-03-17 20:38:42 -0700</date>
            <delta_ts>2013-03-19 12:09:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111144-20130317203435.patch</filename>
            <type>text/plain</type>
            <size>58154</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdkODdlMDMwMTA5Njg0
ODU5MGY1ODllY2ZkMmMxZGEzZmM3ZDIxOS4uZjVjNjVkZWFlYjIwYTA1NGQ5MWMwY2QwMTE3YmJl
MDdhNjQ0ZGU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxMy0wMy0xNyAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEdJRkltYWdlUmVhZGVyIHRv
IGNvdW50IGZyYW1lcyBhbmQgZGVjb2RlIGluIG9uZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPQkpFQ1RJVkUKKworICAgICAgICBUaGlzIGNo
YW5nZSBoYXMgdGhlIG9iamVjdGl2ZSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgcmVhZGluZyBH
SUYKKyAgICAgICAgZmlsZXMuIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIHBhcnNlIHRoZSBlbnRp
cmUgR0lGIGZpbGUgaW4gb25lIHBhc3MKKyAgICAgICAgYW5kIHNhdmVzIGluZm9ybWF0aW9uIGFi
b3V0IGVhY2ggZnJhbWUsIHN1Y2ggdGhhdCBkZWNvZGluZyBpbiBhIGxhdGVyCisgICAgICAgIHBh
c3MgZG9lcyBub3QgbmVlZCB0byBwYXJzZSB0aGUgZmlsZSBhZ2Fpbi4KKworICAgICAgICBUaGlz
IGNoYW5nZSBmaXhlcyB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBvZiBkZWNvZGluZyBHSUYgZmls
ZXMgd2hlbgorICAgICAgICB0aGV5IGFyZSByZWNlaXZlZCB2ZXJ5IHNsb3dseS4gRXhpc3Rpbmcg
aW1wbGVtZW50YXRpb24gY3JlYXRlcyBhIG5ldworICAgICAgICBHSUZJbWFnZVJlYWRlciBmb3Ig
Y291bnRpbmcgZnJhbWVzIGZvciBldmVyeSB0aW1lIGl0IGlzIG5vdGlmaWVkIHRoYXQKKyAgICAg
ICAgbmV3IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoaXMgaGFzIE8obl4yKSBiZWhhdmlvciB3
aGVuIGRhdGEgaXMKKyAgICAgICAgcmVjZWl2ZWQgdmVyeSBzbG93bHkuCisKKyAgICAgICAgQUxH
T1JJVEhNCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkaXZpZGVzIHRoZSBkZWNvZGlu
ZyBwcm9jZXNzIGludG8gdHdvIHNlcGFyYXRlCisgICAgICAgIHN0ZXBzOiBwYXJzZSBhbmQgTFpX
IGRlY29kaW5nLgorCisgICAgICAgIEluIHRoZSBwYXJzZSBzdGVwLCB0aGUgc3RhdGUgbWFjaGlu
ZSBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAgICAgICBpbXBsZW1lbnRhdGlvbi4gSG93
ZXZlciB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvZGluZworICAgICAg
ICB3aGlsZSBzY2FubmluZyB0aHJvdWdoIHRoZSBmaWxlLiBJbnRlYWQgaXQgY3JlYXRlcyBhIG5l
dyBkYXRhIHN0cnVjdHVyZQorICAgICAgICBmb3IgY2FjaGluZyBhbGwgZnJhbWUgaW5mb3JtYXRp
b24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExaVyBibG9ja3MuCisKKyAgICAgICAgSWYgYSBmdWxs
IGRlY29kZSBpcyByZXF1ZXN0ZWQgdGhlbiBMWlcgZGVjb2RpbmcgaXMgcGVyZm9ybWVkLiBUaGlz
CisgICAgICAgIGltcGxlbWVudGF0aW9uIGxvb2tzIHRocm91Z2ggYWxsIGZyYW1lIGluZm9ybWF0
aW9uIHNhdmVkIGFuZCBkZWNvZGVzCisgICAgICAgIGVhY2ggZnJhbWUgc2VxdWVudGlhbGx5IHVu
dGlsIHRoZSB0YXJnZXQgZnJhbWUgaXMgcmVhY2hlZC4KKworICAgICAgICBCZWNhdXNlIG9mIHRo
ZSBzZXBhcmF0aW9uIG9mIHBhcnNlIGFuZCBkZWNvZGUsIGVhY2ggZnJhbWUgY2FuIGJlCisgICAg
ICAgIGRlY29kZWQgc2VwYXJhdGVseS4gVGhpcyBwYXZlcyB0aGUgd2F5IHRvIHN1cHBvcnQgc2Vl
a2luZyBpbiBHSUYgZmlsZXMuCisKKyAgICAgICAgVEVTVElORworCisgICAgICAgIEFkZGVkIGEg
bmV3IHVuaXQgdGVzdCB0byBjb3ZlciBwcm9ncmVzc2l2ZWx5IGRlY29kaW5nIGEgR0lGIGltYWdl
LgorICAgICAgICBUaGVyZSBhcmUgYWxyZWFkeSBHSUYgdW5pdCB0ZXN0cyBmb3IgZnVuY3Rpb25h
bCB0ZXN0aW5nLgorICAgICAgICBFeGhhdXN0aXZlIHRlc3Rpbmcgd2FzIGRvbmUgbG9jYWxseSB3
aXRoIGEgY29ycHVzIG9mIDYwayBpbWFnZXMuCisgICAgICAgIEkgbWl4ZWQgdGhlIGNvcnB1cyB3
aXRoIHNvbWUgZ2VuZXJhdGVkIGJhZCBkYXRhIGFuZCB0cnVuY2F0ZWQgZmlsZXMuCisgICAgICAg
IFRoZSByZXN1bHRzIHdhcyBiaXQtaWRlbnRpY2FsIHdoZW4gY29tcGFyZWQgdG8gdGhlIHByZXZp
b3VzCisgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoZXNlIHdhcyBhbHNvIG5v
IGNyYXNoaW5nIHdoZW4gZGVjb2RpbmcgdGhlIGVudGlyZSBjb3JwdXMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKEdJRkltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKEdJRkxa
V0NvbnRleHQ6Om91dHB1dFJvdyk6CisgICAgICAgIChHSUZMWldDb250ZXh0Ojpkb0xaVyk6Cisg
ICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmRlY29kZSk6CisgICAgICAgIChHSUZJbWFnZVJlYWRl
cjo6ZGVjb2RlKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChHSUZMWldDb250
ZXh0OjpwcmVwYXJlVG9EZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICBUaGVyZSBpcyBhIGxvdCBvZiByZXNodWZm
bGluZyBpbiBHSUZMWldDb250ZXh0IGFuZCBHSUZGcmFtZUNvbnRleHQuCisgICAgICAgIFRoZXNl
IGNoYW5nZXMgaGFzIHRoZSBnb2FsIG9mIGhhdmluZyBHSUZMWldDb250ZXh0IGJlIGEgcHVyZSBk
ZWNvZGluZworICAgICAgICBzdGF0ZSBtYWNoaW5lLiBHSUZGcmFtZUNvbnRleHQgaXMgbW9zdGx5
IGEgcmVhZC1vbmx5IGNvbnRhaW5lciBmb3IKKyAgICAgICAgZnJhbWUgaW5mb3JtYXRpb24uIFdp
dGggYWxsIHRoZXNlIGNoYW5nZXMgd2UgY2FuIGRlY29kZSBlYWNoCisgICAgICAgIEdJRkZyYW1l
Q29udGV4dCBpbmRlcGVuZGVudGx5LgorCisgICAgICAgIFRoZSBvd25lcnNoaXAgcGF0dGVybiBp
czoKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgb3ducyBHSUZGcmFtZUNvbnRleHQgb3ducyBHSUZM
WldDb250ZXh0LgorCisgICAgICAgIChHSUZMWldDb250ZXh0OjpHSUZMWldDb250ZXh0KToKKyAg
ICAgICAgKEdJRkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGTFpXQ29udGV4dDo6aGFzUmVtYWlu
aW5nUm93cyk6CisgICAgICAgIEdJRkxaV0NvbnRleHQgaXMgbW92ZWQgdG8gdGhlIHRvcCBvZiBm
aWxlLgorICAgICAgICAoR0lGTFpXQmxvY2spOgorICAgICAgICAoR0lGTFpXQmxvY2s6OkdJRkxa
V0Jsb2NrKToKKyAgICAgICAgTmV3IGRhdGEgc3RydWN0dXJlIHRvIHNhdmUgYmxvY2sgcG9zaXRp
b24gYW5kIHNpemUuCisgICAgICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJh
bWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+
R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6YWRkTHp3QmxvY2sp
OgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojppc0NvbXBsZXRlKToKKyAgICAgICAgKEdJRkZy
YW1lQ29udGV4dDo6aXNIZWFkZXJEZWZpbmVkKToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
aXNEYXRhU2l6ZURlZmluZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpzZXRDb21wbGV0
ZSk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OnNldEhlYWRlckRlZmluZWQpOgorICAgICAg
ICAoR0lGRnJhbWVDb250ZXh0OjpzZXREYXRhU2l6ZSk6CisgICAgICAgIE5vdyBvd25zIEdJRkxa
V0NvbnRleHQgZm9yIGRlY29kaW5nLgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OkdJRkltYWdl
UmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+R0lGSW1hZ2VSZWFkZXIpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmltYWdlc0NvdW50KToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpmcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAo
R0lGSW1hZ2VSZWFkZXI6OnBhcnNlRmFpbGVkKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpp
c0ZpcnN0RnJhbWUpOgorICAgICAgICBPd25zIGEgbGlzdCBvZiBHSUZGcmFtZUNvbnR4dC4KKwog
MjAxMy0wMy0xNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAg
ICBFbmNhcHN1bGF0ZSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCBhIGxpdHRsZSBiZXR0ZXIg
eWV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDI4ZWY4OGYxNmM5MjZhNGIzZmY2NTYx
Y2I5MjkyOGY2OTE5MmIwYjYuLmU5NTE5NTVlMDhjODZlOTEwODEyZDZkZDVlY2IyNWEwMmIwMzg2
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDMt
MTcgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBHSUZJbWFnZVJl
YWRlciB0byBjb3VudCBmcmFtZXMgYW5kIGRlY29kZSBpbiBvbmUgcGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBuZXcgR0lGIHVuaXQg
dGVzdCBmb3IgcHJvZ3Jlc3NpdmUgZGVjb2RpbmcuIFRoZSB0ZXN0IGlzIHRvIHZlcmlmeQorICAg
ICAgICB0aGF0IGNvbnRpbnVhbGx5IHJlLWRlY29kaW5nIGFuIGltYWdlIG9uZSBhZGRpdGlvbmFs
IGJ5dGUgYXQgYSB0aW1lIHByb2R1Y2VzCisgICAgICAgIHRoZSBzYW1lIG91dHB1dHMgYXMgcmVw
ZWF0ZWRseSBkZWNvZGluZyAod2l0aCBicmFuZCBuZXcgZGVjb2RlcnMpIHRydW5jYXRlZAorICAg
ICAgICB2ZXJzaW9ucyBvZiB0aGUgaW1hZ2UgdGhhdCBhcmUgb25lIGJ5dGUgbG9uZ2VyIGVhY2gg
dGltZS4KKworICAgICAgICAqIHRlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpURVNUKToKKwogMjAxMy0wMy0xNiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2
aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0
NTg5OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggYmI4ODQxNWJiMGM1NjU4ZDAy
MmE4MWFlNTQ3YmNjMTk3ZGVjMmMwMC4uNWUzN2JiZjZkZmVkYWNjNjA5NTUxYTg4ZWRkYTFkYmJi
NjZlNGNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkdJRkltYWdlUmVhZGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1JbnN0cnVt
ZW50YXRpb24uaCIKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzUsNyArMzYsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24gYWxwaGFPcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24pCiAgICAgOiBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKQotICAgICwgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3Vu
dCh0cnVlKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbkxvb3BPbmNlKQogewog
fQpAQCAtNTIsOSArNTIsNiBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRC
dWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIEltYWdlRGVjb2Rlcjo6c2V0
RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIGlmIChtX3JlYWRlcikKICAgICAgICAg
bV9yZWFkZXItPnNldERhdGEoZGF0YSk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHJlc2NhbiB0aGUg
ZnJhbWUgY291bnQsIGFzIHRoZSBuZXcgZGF0YSBtYXkgaGF2ZSBjaGFuZ2VkIGl0LgotICAgIG1f
YWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSBmYWxzZTsKIH0KIAogYm9vbCBH
SUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCkBAIC03OSwyMSArNzYsNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KQogCiBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKIHsKLSAgICBpZiAoIW1f
YWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQpIHsKLSAgICAgICAgLy8gRklYTUU6
IFNjYW5uaW5nIGFsbCB0aGUgZGF0YSBoYXMgTyhuXjIpIGJlaGF2aW9yIGlmIHRoZSBkYXRhIHdl
cmUgdG8KLSAgICAgICAgLy8gY29tZSBpbiByZWFsbHkgc2xvd2x5LiAgTWlnaHQgYmUgaW50ZXJl
c3RpbmcgdG8gdHJ5IHRvIGNsb25lIG91cgotICAgICAgICAvLyBleGlzdGluZyByZWFkIHNlc3Np
b24gdG8gcHJlc2VydmUgc3RhdGUsIGJ1dCBmb3Igbm93IHdlIGp1c3QgY3Jhd2wKLSAgICAgICAg
Ly8gYWxsIHRoZSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm8gd29yc2UgdGhhbiB3aGF0IElt
YWdlSU8gZG9lcyBvbgotICAgICAgICAvLyBNYWMgcmlnaHQgbm93IChpdCBhbHNvIGNyYXdscyBh
bGwgdGhlIGRhdGEgYWdhaW4pLgotICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFkZXIoMCk7Ci0g
ICAgICAgIHJlYWRlci5zZXREYXRhKG1fZGF0YSk7Ci0gICAgICAgIHJlYWRlci5kZWNvZGUoR0lG
RnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKLSAgICAgICAgbV9h
bHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRydWU7Ci0gICAgICAgIG1fZnJh
bWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmltYWdlc0NvdW50KCkpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlYWRlci5pbWFnZXNDb3VudCgpOyArK2kpCi0gICAgICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxw
aGEpOwotICAgIH0KLQorICAgIGRlY29kZShzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCksIEdJRkZyYW1lQ291bnRRdWVyeSk7CiAgICAgcmV0dXJuIG1fZnJhbWVCdWZmZXJDYWNo
ZS5zaXplKCk7CiB9CiAKQEAgLTEwNyw4ICs5MCw4IEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJl
cGV0aXRpb25Db3VudCgpIGNvbnN0CiAgICAgLy8gc2hvdWxkIGRlZmF1bHQgdG8gbG9vcGluZyBv
bmNlICh0aGUgaW5pdGlhbCB2YWx1ZSBmb3IKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8KS4K
ICAgICAvLwotICAgIC8vIFRoZXJlIGFyZSB0d28gYWRkaXRpb25hbCB3cmlua2xlcyBoZXJlLiAg
Rmlyc3QsIEltYWdlU291cmNlOjpjbGVhcigpIG1heQotICAgIC8vIGRlc3Ryb3kgdGhlIHJlYWRl
ciwgbWFraW5nIHRoZSByZXN1bHQgZnJvbSB0aGUgcmVhZGVyIF9sZXNzXworICAgIC8vIFRoZXJl
IGFyZSBzb21lIGFkZGl0aW9uYWwgd3JpbmtsZXMgaGVyZS4gRmlyc3QsIEltYWdlU291cmNlOjpj
bGVhcigpCisgICAgLy8gbWF5IGRlc3Ryb3kgdGhlIHJlYWRlciwgbWFraW5nIHRoZSByZXN1bHQg
ZnJvbSB0aGUgcmVhZGVyIF9sZXNzXwogICAgIC8vIGF1dGhvcml0YXRpdmUgb24gZnV0dXJlIGNh
bGxzIGlmIHRoZSByZWNyZWF0ZWQgcmVhZGVyIGhhc24ndCBzZWVuIHRoZQogICAgIC8vIGxvb3Ag
Y291bnQuICBXZSBkb24ndCBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGlzIGJlY2F1c2UgaW4gdGhp
cyBjYXNlIHRoZQogICAgIC8vIG5ldyByZWFkZXIgd2lsbCBvbmNlIGFnYWluIHJldHVybiBjTG9v
cENvdW50Tm90U2VlbiwgYW5kIHdlIHdvbid0CkBAIC0xMTgsNyArMTAxLDE0IEBAIGludCBHSUZJ
bWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0CiAgICAgLy8gc2hvdWxkIGNvbnRp
bnVlIHRvIHRyZWF0IGl0IGFzIGEgImxvb3Agb25jZSIgYW5pbWF0aW9uLiAgV2UgZG9uJ3QgbmVl
ZAogICAgIC8vIHNwZWNpYWwgY29kZSBoZXJlIGVpdGhlciwgYmVjYXVzZSBpbiB0aGlzIGNhc2Ug
d2UnbGwgbmV2ZXIgY2hhbmdlCiAgICAgLy8gfG1fcmVwZXRpdGlvbkNvdW50fCBmcm9tIGl0cyBk
ZWZhdWx0IHZhbHVlLgotICAgIGlmIChtX3JlYWRlciAmJiAobV9yZWFkZXItPmxvb3BDb3VudCgp
ICE9IGNMb29wQ291bnROb3RTZWVuKSkKKyAgICAvLworICAgIC8vIFRoaXJkLCB3ZSB1c2UgdGhl
IHNhbWUgR0lGSW1hZ2VSZWFkZXIgZm9yIGNvdW50aW5nIGZyYW1lcyBhbmQgd2UgbWlnaHQKKyAg
ICAvLyBzZWUgdGhlIGxvb3AgY291bnQgYW5kIHRoZW4gZW5jb3VudGVyIGEgZGVjb2RpbmcgZXJy
b3Igd2hpY2ggaGFwcGVucworICAgIC8vIGxhdGVyIGluIHRoZSBzdHJlYW0uIEl0IGlzIGFsc28g
cG9zc2libGUgdGhhdCBubyBmcmFtZXMgYXJlIGluIHRoZQorICAgIC8vIHN0cmVhbS4gSW4gdGhl
c2UgY2FzZXMgd2Ugc2hvdWxkIGp1c3QgbG9vcCBvbmNlLgorICAgIGlmIChmYWlsZWQoKSB8fCAo
bV9yZWFkZXIgJiYgKCFtX3JlYWRlci0+aW1hZ2VzQ291bnQoKSB8fCBtX3JlYWRlci0+cGFyc2VG
YWlsZWQoKSkpKQorICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IGNBbmltYXRpb25Mb29wT25j
ZTsKKyAgICBlbHNlIGlmIChtX3JlYWRlciAmJiBtX3JlYWRlci0+bG9vcENvdW50KCkgIT0gY0xv
b3BDb3VudE5vdFNlZW4pCiAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gbV9yZWFkZXItPmxv
b3BDb3VudCgpOwogICAgIHJldHVybiBtX3JlcGV0aXRpb25Db3VudDsKIH0KQEAgLTMyMSw5ICsz
MTEsMzMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFt
ZSwgR0lGUXVlcnkgcXVlcnkpCiAgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKG1fZGF0YSk7CiAg
ICAgfQogCi0gICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2UndmUg
cmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwotICAgIC8vIGhhcyBmYWlsZWQuCi0gICAg
aWYgKCFtX3JlYWRlci0+ZGVjb2RlKHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVj
ZWl2ZWQoKSkKKyAgICBpZiAocXVlcnkgPT0gR0lGU2l6ZVF1ZXJ5KSB7CisgICAgICAgIGlmICgh
bV9yZWFkZXItPmRlY29kZShHSUZTaXplUXVlcnksIGhhbHRBdEZyYW1lKSkKKyAgICAgICAgICAg
IHNldEZhaWxlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3JlYWRl
ci0+ZGVjb2RlKEdJRkZyYW1lQ291bnRRdWVyeSwgaGFsdEF0RnJhbWUpKSB7CisgICAgICAgIHNl
dEZhaWxlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qgc2l6ZV90IG9s
ZFNpemUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOworICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5yZXNpemUobV9yZWFkZXItPmltYWdlc0NvdW50KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSBv
bGRTaXplOyBpIDwgbV9yZWFkZXItPmltYWdlc0NvdW50KCk7ICsraSkKKyAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsK
KworICAgIGlmIChxdWVyeSA9PSBHSUZGcmFtZUNvdW50UXVlcnkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV9yZWFkZXItPmRlY29kZShHSUZGdWxsUXVlcnksIGhhbHRBdEZyYW1lKSkg
eworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEl0IGlzIGFsc28gYSBmYXRhbCBlcnJvciBpZiBhbGwgZGF0YSBpcyByZWNlaXZlZCBidXQgd2Ug
ZmFpbGVkIHRvIGRlY29kZQorICAgIC8vIGFsbCBmcmFtZXMgY29tcGxldGVseS4KKyAgICBpZiAo
aXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiBoYWx0QXRGcmFtZSA+PSBtX2ZyYW1lQnVmZmVyQ2FjaGUu
c2l6ZSgpICYmIG1fcmVhZGVyKQogICAgICAgICBzZXRGYWlsZWQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCmluZGV4IDU1ZjliMzU2NGY0MTJjNzA3MjE5MWQ3NDA2MWIxOTY3NjE2YzZi
NmQuLmY5ZTFiODRkMzE4MWFhNmM1NWZiYWMyNDhlYjMxMmU5NTQyYjhhMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmgKQEAgLTcyLDcgKzcyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBmYWlsdXJlLCB0aGlzIHdpbGwgbWFyayB0aGUgaW1hZ2UgYXMgZmFpbGVkLgogICAg
ICAgICBib29sIGluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KTsKIAotICAgICAg
ICBib29sIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQ7CiAgICAgICAgIGJv
b2wgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGE7CiAgICAgICAgIG11dGFibGUgaW50IG1fcmVwZXRp
dGlvbkNvdW50OwogICAgICAgICBPd25QdHI8R0lGSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZVJlYWRlci5jcHAKaW5kZXggNTZjOTI0YjdhZmRhOTMxZGQ0NTU0OTRmODIwYTVj
YTU2OTNkNzNiZi4uNzJjOGZmMTVlOWRiYjk5ZGEyZTM5YzM3MTMwYjQ0ODBjMTNmNjJmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCkBAIC05OCwyMCArOTgsMjAgQEAgdXNpbmcgV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOwogI2RlZmluZSBHRVRJTlQxNihwKSAgICgocClbMV08PDh8KHAp
WzBdKQogCiAvLyBTZW5kIHRoZSBkYXRhIHRvIHRoZSBkaXNwbGF5IGZyb250LWVuZC4KLWJvb2wg
R0lGSW1hZ2VSZWFkZXI6Om91dHB1dFJvdygpCitib29sIEdJRkxaV0NvbnRleHQ6Om91dHB1dFJv
dygpCiB7Ci0gICAgaW50IGRyb3dTdGFydCA9IG1fZnJhbWVDb250ZXh0LT5pcm93OwotICAgIGlu
dCBkcm93RW5kID0gbV9mcmFtZUNvbnRleHQtPmlyb3c7CisgICAgaW50IGRyb3dTdGFydCA9IGly
b3c7CisgICAgaW50IGRyb3dFbmQgPSBpcm93OwogCiAgICAgLy8gSGFlYmVybGktaW5zcGlyZWQg
aGFjayBmb3IgaW50ZXJsYWNlZCBHSUZzOiBSZXBsaWNhdGUgbGluZXMgd2hpbGUKICAgICAvLyBk
aXNwbGF5aW5nIHRvIGRpbWluaXNoIHRoZSAidmVuZXRpYW4tYmxpbmQiIGVmZmVjdCBhcyB0aGUg
aW1hZ2UgaXMKICAgICAvLyBsb2FkZWQuIEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMg
dG8gYXZvaWQgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlCiAgICAgLy8gaW1hZ2UgY3Jhd2xpbmcgdXAg
dGhlIHNjcmVlbiBhcyBzdWNjZXNzaXZlIHBhc3NlcyBhcmUgZHJhd24uCi0gICAgaWYgKG1fZnJh
bWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFj
ZWQgJiYgbV9mcmFtZUNvbnRleHQtPmlwYXNzIDwgNCkgeworICAgIGlmIChtX2ZyYW1lQ29udGV4
dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIGlw
YXNzIDwgNCkgewogICAgICAgICB1bnNpZ25lZCByb3dEdXAgPSAwOwogICAgICAgICB1bnNpZ25l
ZCByb3dTaGlmdCA9IDA7CiAKLSAgICAgICAgc3dpdGNoIChtX2ZyYW1lQ29udGV4dC0+aXBhc3Mp
IHsKKyAgICAgICAgc3dpdGNoIChpcGFzcykgewogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAg
ICByb3dEdXAgPSA3OwogICAgICAgICAgICAgcm93U2hpZnQgPSAzOwpAQCAtMTQ4LDg4ICsxNDgs
NjUgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0Um93KCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBDQUxMQkFDSzogTGV0IHRoZSBjbGllbnQga25vdyB3ZSBoYXZlIGRlY29k
ZWQgYSByb3cuCi0gICAgaWYgKG1fY2xpZW50ICYmIG1fZnJhbWVDb250ZXh0Ci0gICAgICAgICYm
ICFtX2NsaWVudC0+aGF2ZURlY29kZWRSb3cobV9pbWFnZXNDb3VudCAtIDEsIG1fbHp3Q29udGV4
dC5yb3dCdWZmZXIsIG1fZnJhbWVDb250ZXh0LT53aWR0aCwKLSAgICAgICAgICAgIGRyb3dTdGFy
dCwgZHJvd0VuZCAtIGRyb3dTdGFydCArIDEsIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURp
c3BsYXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFtZUNvbnRleHQtPmlw
YXNzID4gMSkpCisgICAgaWYgKCFtX2NsaWVudC0+aGF2ZURlY29kZWRSb3cobV9mcmFtZUNvbnRl
eHQtPmZyYW1lSWQsIHJvd0J1ZmZlciwgbV9mcmFtZUNvbnRleHQtPndpZHRoLAorICAgICAgICBk
cm93U3RhcnQsIGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jl
c3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIGlwYXNzID4gMSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9mcmFtZUNvbnRleHQtPmludGVy
bGFjZWQpCi0gICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93Kys7CisgICAgICAgIGlyb3crKzsK
ICAgICBlbHNlIHsKICAgICAgICAgZG8gewotICAgICAgICAgICAgc3dpdGNoIChtX2ZyYW1lQ29u
dGV4dC0+aXBhc3MpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAgICAgICAgICAg
IGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA4OwotICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+
aGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwot
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDQ7CisgICAgICAgICAg
ICAgICAgaXJvdyArPSA4OworICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250
ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAg
ICAgICAgICAgaXJvdyA9IDQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlyb3cgKz0gODsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cg
Pj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aXBhc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmly
b3cgPSAyOworICAgICAgICAgICAgICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAgICBpZiAo
aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlw
YXNzKys7CisgICAgICAgICAgICAgICAgICAgIGlyb3cgPSAyOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMTsKKyAgICAgICAgICAgICAgICBpcm93ICs9IDQ7Cisg
ICAgICAgICAgICAgICAgaWYgKGlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAg
ICAgICAgICAgICAgICAgICBpcGFzcysrOworICAgICAgICAgICAgICAgICAgICBpcm93ID0gMTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgNDoKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSAyOwotICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+
aGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwot
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7CisgICAgICAgICAg
ICAgICAgaXJvdyArPSAyOworICAgICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250
ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAg
ICAgICAgICAgaXJvdyA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+IChtX2Zy
YW1lQ29udGV4dC0+aGVpZ2h0IC0gMSkpOworICAgICAgICB9IHdoaWxlIChpcm93ID4gKG1fZnJh
bWVDb250ZXh0LT5oZWlnaHQgLSAxKSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBQZXJmb3JtIExlbXBlbC1aaXYtV2VsY2ggZGVjb2RpbmcuCi1ib29sIEdJRkltYWdlUmVhZGVy
Ojpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykK
Ky8vIFJldHVybnMgdHJ1ZSBpZiBkZWNvZGluZyB3YXMgc3VjY2Vzc2Z1bC4gSW4gdGhpcyBjYXNl
IHRoZSBibG9jayB3aWxsIGhhdmUgYmVlbiBjb21wbGV0ZWx5IGNvbnN1bWVkIGFuZC9vciByb3dz
UmVtYWluaW5nIHdpbGwgYmUgMC4KKy8vIE90aGVyd2lzZSwgZGVjb2RpbmcgZmFpbGVkOyByZXR1
cm5zIGZhbHNlIGluIHRoaXMgY2FzZSwgd2hpY2ggd2lsbCBhbHdheXMgY2F1c2UgdGhlIEdJRklt
YWdlUmVhZGVyIHRvIHNldCB0aGUgImRlY29kZSBmYWlsZWQiIGZsYWcuCitib29sIEdJRkxaV0Nv
bnRleHQ6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJs
b2NrKQogewotICAgIGlmICghbV9mcmFtZUNvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwot
CiAgICAgaW50IGNvZGU7CiAgICAgaW50IGluY29kZTsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpjaDsKIAotICAgIC8vIENvcHkgYWxsIHRoZSBkZWNvZGVyIHN0YXRlIHZhcmlhYmxlcyBpbnRv
IGxvY2FscyBzbyB0aGUgY29tcGlsZXIKLSAgICAvLyB3b24ndCB3b3JyeSBhYm91dCB0aGVtIGJl
aW5nIGFsaWFzZWQuIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAotICAgIC8vIGJhY2sgaW50byB0
aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KLSAgICBpbnQgYXZhaWwgPSBt
X2x6d0NvbnRleHQuYXZhaWw7Ci0gICAgaW50IGJpdHMgPSBtX2x6d0NvbnRleHQuYml0czsKLSAg
ICBzaXplX3QgY250ID0gYnl0ZXNJbkJsb2NrOwotICAgIGludCBjb2Rlc2l6ZSA9IG1fbHp3Q29u
dGV4dC5jb2Rlc2l6ZTsKLSAgICBpbnQgY29kZW1hc2sgPSBtX2x6d0NvbnRleHQuY29kZW1hc2s7
Ci0gICAgaW50IG9sZGNvZGUgPSBtX2x6d0NvbnRleHQub2xkY29kZTsKLSAgICBpbnQgY2xlYXJD
b2RlID0gbV9sendDb250ZXh0LmNsZWFyQ29kZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hh
ciA9IG1fbHp3Q29udGV4dC5maXJzdGNoYXI7Ci0gICAgaW50IGRhdHVtID0gbV9sendDb250ZXh0
LmRhdHVtOwotCi0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiYgcHJlZml4ID0gbV9sendDb250
ZXh0LnByZWZpeDsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHN1ZmZpeCA9IG1fbHp3Q29u
dGV4dC5zdWZmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdGFjayA9IG1fbHp3Q29u
dGV4dC5zdGFjazsKLSAgICBzaXplX3Qgc3RhY2twID0gbV9sendDb250ZXh0LnN0YWNrcDsKLSAg
ICBzaXplX3Qgcm93cCA9IG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbjsKLSAgICBzaXplX3Qgd2lk
dGggPSBtX2ZyYW1lQ29udGV4dC0+d2lkdGg7Ci0gICAgc2l6ZV90IHJvd3NSZW1haW5pbmcgPSBt
X2ZyYW1lQ29udGV4dC0+cm93c1JlbWFpbmluZzsKLQotICAgIGlmIChyb3dwID09IHdpZHRoKQor
ICAgIGlmIChyb3dQb3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogI2RlZmluZSBPVVRQVVRfUk9XIFwKQEAgLTIzNywxMyArMjE0LDEyIEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3Qg
Ynl0ZXNJbkJsb2NrKQogICAgICAgICBpZiAoIW91dHB1dFJvdygpKSBcCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IFwKICAgICAgICAgcm93c1JlbWFpbmluZy0tOyBcCi0gICAgICAgIHJvd3Ag
PSAwOyBcCi0gICAgICAgIG1fbHp3Q29udGV4dC5yb3dQb3NpdGlvbiA9IDA7IFwKKyAgICAgICAg
cm93UG9zaXRpb24gPSAwOyBcCiAgICAgICAgIGlmICghcm93c1JlbWFpbmluZykgXAotICAgICAg
ICAgICAgZ290byBFTkQ7IFwKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyBcCiAgICAgfSB3aGls
ZSAoMCkKIAotICAgIGZvciAoY2ggPSBibG9jazsgY250LS0gPiAwOyBjaCsrKSB7CisgICAgZm9y
IChjaCA9IGJsb2NrOyBieXRlc0luQmxvY2stLSA+IDA7IGNoKyspIHsKICAgICAgICAgLy8gRmVl
ZCB0aGUgbmV4dCBieXRlIGludG8gdGhlIGRlY29kZXIncyAzMi1iaXQgaW5wdXQgYnVmZmVyLgog
ICAgICAgICBkYXR1bSArPSAoKGludCkgKmNoKSA8PCBiaXRzOwogICAgICAgICBiaXRzICs9IDg7
CkBAIC0yNjksMTIgKzI0NSwxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAg
ICAvLyBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBhbGwgaW1hZ2UgZGF0
YS4KICAgICAgICAgICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xp
ZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG9sZGNvZGUgPT0gLTEpIHsKLSAgICAg
ICAgICAgICAgICBtX2x6d0NvbnRleHQucm93QnVmZmVyW3Jvd3ArK10gPSBzdWZmaXhbY29kZV07
Ci0gICAgICAgICAgICAgICAgaWYgKHJvd3AgPT0gd2lkdGgpCisgICAgICAgICAgICAgICAgcm93
QnVmZmVyW3Jvd1Bvc2l0aW9uKytdID0gc3VmZml4W2NvZGVdOworICAgICAgICAgICAgICAgIGlm
IChyb3dQb3NpdGlvbiA9PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBP
VVRQVVRfUk9XOwogCiAgICAgICAgICAgICAgICAgZmlyc3RjaGFyID0gb2xkY29kZSA9IGNvZGU7
CkBAIC0yODcsMTIgKzI2MywxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAg
ICBjb2RlID0gb2xkY29kZTsKIAogICAgICAgICAgICAgICAgIGlmIChzdGFja3AgPT0gTUFYX0JZ
VEVTKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICB3aGlsZSAoY29kZSA+PSBjbGVhckNvZGUpIHsKICAg
ICAgICAgICAgICAgICBpZiAoY29kZSA+PSBNQVhfQllURVMgfHwgY29kZSA9PSBwcmVmaXhbY29k
ZV0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRG
YWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRzIGNoYXJhY3Rl
cnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKICAgICAgICAgICAgICAgICAvLyBhbGxvd2lu
ZyBjb2RlID49IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1l
ZApAQCAtMzAyLDcgKzI3OCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQogICAgICAgICAgICAgICAg
IGNvZGUgPSBwcmVmaXhbY29kZV07CiAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IE1B
WF9CWVRFUykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhY2tbc3RhY2twKytdID0gZmlyc3RjaGFy
ID0gc3VmZml4W2NvZGVdOwpAQCAtMzI1LDM2ICszMDEsOTcgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2sp
CiAKICAgICAgICAgICAgIC8vIENvcHkgdGhlIGRlY29kZWQgZGF0YSBvdXQgdG8gdGhlIHNjYW5s
aW5lIGJ1ZmZlci4KICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBtX2x6d0NvbnRl
eHQucm93QnVmZmVyW3Jvd3ArK10gPSBzdGFja1stLXN0YWNrcF07Ci0gICAgICAgICAgICAgICAg
aWYgKHJvd3AgPT0gd2lkdGgpCisgICAgICAgICAgICAgICAgcm93QnVmZmVyW3Jvd1Bvc2l0aW9u
KytdID0gc3RhY2tbLS1zdGFja3BdOworICAgICAgICAgICAgICAgIGlmIChyb3dQb3NpdGlvbiA9
PSByb3dCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUk9XOwogICAg
ICAgICAgICAgfSB3aGlsZSAoc3RhY2twID4gMCk7CiAgICAgICAgIH0KICAgICB9CiAKLUVORDoK
LSAgICAvLyBIb21lIHRoZSBsb2NhbCBjb3BpZXMgb2YgdGhlIEdJRiBkZWNvZGVyIHN0YXRlIHZh
cmlhYmxlcy4KLSAgICBtX2x6d0NvbnRleHQuYXZhaWwgPSBhdmFpbDsKLSAgICBtX2x6d0NvbnRl
eHQuYml0cyA9IGJpdHM7Ci0gICAgbV9sendDb250ZXh0LmNvZGVzaXplID0gY29kZXNpemU7Ci0g
ICAgbV9sendDb250ZXh0LmNvZGVtYXNrID0gY29kZW1hc2s7Ci0gICAgbV9sendDb250ZXh0Lm9s
ZGNvZGUgPSBvbGRjb2RlOwotICAgIG1fbHp3Q29udGV4dC5maXJzdGNoYXIgPSBmaXJzdGNoYXI7
Ci0gICAgbV9sendDb250ZXh0LmRhdHVtID0gZGF0dW07Ci0gICAgbV9sendDb250ZXh0LnN0YWNr
cCA9IHN0YWNrcDsKLSAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24gPSByb3dwOwotICAgIG1f
ZnJhbWVDb250ZXh0LT5yb3dzUmVtYWluaW5nID0gcm93c1JlbWFpbmluZzsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorLy8gUGVyZm9ybSBkZWNvZGluZyBmb3IgdGhpcyBmcmFtZS4gZnJhbWVEZWNv
ZGVkIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGRlY29kZWQuCisvLyBSZXR1
cm5zIGZhbHNlIGlmIGEgZGVjb2RpbmcgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgYSBmYXRhbCBl
cnJvciBhbmQgY2F1c2VzIHRoZSBHSUZJbWFnZVJlYWRlciB0byBzZXQgdGhlICJkZWNvZGUgZmFp
bGVkIiBmbGFnLgorLy8gT3RoZXJ3aXNlLCBlaXRoZXIgbm90IGVub3VnaCBkYXRhIGlzIGF2YWls
YWJsZSB0byBkZWNvZGUgZnVydGhlciB0aGFuIGJlZm9yZSwgb3IgdGhlIG5ldyBkYXRhIGhhcyBi
ZWVuIGRlY29kZWQgc3VjY2Vzc2Z1bGx5OyByZXR1cm5zIHRydWUgaW4gdGhpcyBjYXNlLgorYm9v
bCBHSUZGcmFtZUNvbnRleHQ6OmRlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXpl
X3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCwgYm9vbCogZnJhbWVE
ZWNvZGVkKQoreworICAgICpmcmFtZURlY29kZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fbHp3Q29u
dGV4dCkgeworICAgICAgICAvLyBXYWl0IGZvciBtb3JlIGRhdGEgdG8gcHJvcGVybHkgaW5pdGlh
bGl6ZSBHSUZMWldDb250ZXh0LgorICAgICAgICBpZiAoIWlzRGF0YVNpemVEZWZpbmVkKCkgfHwg
IWlzSGVhZGVyRGVmaW5lZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
bV9sendDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdJRkxaV0NvbnRleHQoY2xpZW50LCB0aGlzKSk7
CisgICAgICAgIGlmICghbV9sendDb250ZXh0LT5wcmVwYXJlVG9EZWNvZGUoKSkgeworICAgICAg
ICAgICAgbV9sendDb250ZXh0LmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBtX2N1cnJlbnRMendCbG9jayA9IDA7CisgICAgfQorCisgICAg
Ly8gU29tZSBiYWQgR0lGcyBoYXZlIGV4dHJhIGJsb2NrcyBiZXlvbmQgdGhlIGxhc3Qgcm93LCB3
aGljaCB3ZSBkb24ndCB3YW50IHRvIGRlY29kZS4KKyAgICB3aGlsZSAobV9jdXJyZW50THp3Qmxv
Y2sgPCBtX2x6d0Jsb2Nrcy5zaXplKCkgJiYgbV9sendDb250ZXh0LT5oYXNSZW1haW5pbmdSb3dz
KCkpIHsKKyAgICAgICAgc2l6ZV90IGJsb2NrUG9zaXRpb24gPSBtX2x6d0Jsb2Nrc1ttX2N1cnJl
bnRMendCbG9ja10uYmxvY2tQb3NpdGlvbjsKKyAgICAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IG1f
bHp3QmxvY2tzW21fY3VycmVudEx6d0Jsb2NrXS5ibG9ja1NpemU7CisgICAgICAgIGlmIChibG9j
a1Bvc2l0aW9uICsgYmxvY2tTaXplID4gbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIW1fbHp3Q29udGV4dC0+ZG9MWlcoZGF0YSArIGJsb2NrUG9zaXRpb24s
IGJsb2NrU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrbV9jdXJy
ZW50THp3QmxvY2s7CisgICAgfQorCisgICAgLy8gSWYgdGhpcyBmcmFtZSBpcyBkYXRhIGNvbXBs
ZXRlIHRoZW4gdGhlIHByZXZpb3VzIGxvb3AgbXVzdCBoYXZlIGNvbXBsZXRlbHkgZGVjb2RlZCBh
bGwgTFpXIGJsb2Nrcy4KKyAgICAvLyBUaGVyZSB3aWxsIGJlIG5vIG1vcmUgZGVjb2RpbmcgZm9y
IHRoaXMgZnJhbWUgc28gaXQncyB0aW1lIHRvIGNsZWFudXAuCisgICAgaWYgKGlzQ29tcGxldGUo
KSkgeworICAgICAgICAqZnJhbWVEZWNvZGVkID0gdHJ1ZTsKKyAgICAgICAgbV9sendDb250ZXh0
LmNsZWFyKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBEZWNvZGUgYWxsIGZy
YW1lcyBiZWZvcmUgaGFsdEF0RnJhbWUuCisvLyBUaGlzIG1ldGhvZCB1c2VzIEdJRkZyYW1lQ29u
dGV4dDpkZWNvZGUoKSB0byBkZWNvZGUgZWFjaCBmcmFtZSwgZGVjb2RpbmcgZXJyb3IgaXMgcmVw
b3J0ZWQgdG8gY2xpZW50IGFzIGEgY3JpdGljYWwgZmFpbHVyZS4KKy8vIFJldHVybiB0cnVlIGlm
IGRlY29kaW5nIGhhcyBwcm9ncmVzc2VkLiByZXR1cm4gZmFsc2U7IGlmIGFuIGVycm9yIGhhcyBv
Y2N1cnJlZC4KIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29kZXI6OkdJ
RlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIHsKICAgICBBU1NFUlQobV9ieXRl
c1JlYWQgPD0gbV9kYXRhLT5zaXplKCkpOwotICAgIHJldHVybiBkZWNvZGVJbnRlcm5hbChtX2J5
dGVzUmVhZCwgbV9kYXRhLT5zaXplKCkgLSBtX2J5dGVzUmVhZCwgcXVlcnksIGhhbHRBdEZyYW1l
KTsKKworICAgIC8vIFRyeSB0byBiZSB0b2xlcmFudCBhbmQgZG9uJ3QgcmVwb3J0IHBhcnNpbmcg
ZXJyb3JzIGJ1dCB3ZSB3aWxsIG5vdCBwYXJzZSBhZ2Fpbi4KKyAgICAvLyBUT0RPOiBSZXBvcnQg
cGFyc2luZyBlcnJvcnMgdG8gY2xpZW50LgorICAgIGlmICghbV9wYXJzZUZhaWxlZCAmJiAhcGFy
c2UobV9ieXRlc1JlYWQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRlc1JlYWQsIHF1ZXJ5ID09IEdJ
RkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5KSkKKyAgICAgICAgbV9wYXJzZUZhaWxlZCA9IHRy
dWU7CisKKyAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgd2hpbGUgKG1fY3VycmVudERlY29kaW5nRnJhbWUg
PCBzdGQ6Om1pbihtX2ZyYW1lcy5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4oaGFsdEF0RnJh
bWUpKSkgeworICAgICAgICBib29sIGZyYW1lRGVjb2RlZCA9IGZhbHNlOworICAgICAgICBHSUZG
cmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzW21fY3VycmVudERlY29kaW5nRnJh
bWVdLmdldCgpOworCisgICAgICAgIGlmICghY3VycmVudEZyYW1lLT5kZWNvZGUoZGF0YSgwKSwg
bV9kYXRhLT5zaXplKCksIG1fY2xpZW50LCAmZnJhbWVEZWNvZGVkKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAvLyBXZSBuZWVkIG1vcmUgZGF0YSB0byBjb250aW51ZSBk
ZWNvZGluZy4KKyAgICAgICAgaWYgKCFmcmFtZURlY29kZWQpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAoIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRlKG1fY3VycmVudERlY29kaW5n
RnJhbWUsIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lLCBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0
aG9kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKyttX2N1cnJlbnREZWNv
ZGluZ0ZyYW1lOworICAgIH0KKworICAgIC8vIEFsbCBmcmFtZXMgZGVjb2RlZC4KKyAgICBpZiAo
bV9jdXJyZW50RGVjb2RpbmdGcmFtZSA9PSBtX2ZyYW1lcy5zaXplKCkgJiYgbV9wYXJzZUNvbXBs
ZXRlZCkKKyAgICAgICAgbV9jbGllbnQtPmdpZkNvbXBsZXRlKCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vIFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBn
aWYgZGVjb2Rlci4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBk
YXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnks
IHVuc2lnbmVkIGhhbHRBdEZyYW1lKQorLy8gUGFyc2UgaW5jb21pbmcgR0lGIGRhdGEgc3RyZWFt
IGludG8gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgorLy8gUmV0dXJuIHRydWUgaWYgcGFyc2lu
ZyBoYXMgcHJvZ3Jlc3NlZCBvciB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEuCisvLyBSZXR1cm4g
ZmFsc2UgaWYgYSBmYXRhbCBlcnJvciBpcyBlbmNvdW50ZXJlZC4KK2Jvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXpl
T25seSkKIHsKICAgICBpZiAoIWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29t
ZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCkBAIC0zNjIs
MTIgKzM5OSwxMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3Qg
ZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgIH0KIAogICAgIGlmIChs
ZW4gPCBtX2J5dGVzVG9Db25zdW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVGhpcyBsb29wIHJlYWRzIGFzIG1hbnkgY29tcG9uZW50cyBm
cm9tIHxtX2RhdGF8IGFzIHBvc3NpYmxlLgogICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgZWFj
aCBpdGVyYXRpb24sIGRhdGFQb3NpdGlvbiB3aWxsIGJlIGFkdmFuY2VkIGJ5IG1fYnl0ZXNUb0Nv
bnN1bWUgdG8KICAgICAvLyBwb2ludCB0byB0aGUgbmV4dCBjb21wb25lbnQuIGxlbiB3aWxsIGJl
IGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LgogICAgIHdoaWxlIChsZW4gPj0gbV9ieXRlc1RvQ29u
c3VtZSkgeworICAgICAgICBjb25zdCBzaXplX3QgY3VycmVudENvbXBvbmVudFBvc2l0aW9uID0g
ZGF0YVBvc2l0aW9uOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjdXJyZW50Q29tcG9u
ZW50ID0gZGF0YShkYXRhUG9zaXRpb24pOwogCiAgICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQg
Y29tcG9uZW50IGFzIGNvbnN1bWVkLiBOb3RlIHRoYXQgY3VycmVudENvbXBvbmVudCB3aWxsIHJl
bWFpbiBwb2ludGVkIGF0IHRoaXMKQEAgLTM3NywyMCArNDE1LDE1IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJ
RkltYWdlRGVjCiAKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgR0lG
TFpXOgorICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOwogICAgICAgICAg
ICAgLy8gbV9ieXRlc1RvQ29uc3VtZSBpcyB0aGUgY3VycmVudCBjb21wb25lbnQgc2l6ZSBiZWNh
dXNlIGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCi0gICAgICAgICAgICBpZiAoIWRvTFpXKGN1cnJl
bnRDb21wb25lbnQsIG1fYnl0ZXNUb0NvbnN1bWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkg
Y2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KKyAgICAgICAgICAgIG1fZnJhbWVzLmxhc3Qo
KS0+YWRkTHp3QmxvY2soY3VycmVudENvbXBvbmVudFBvc2l0aW9uLCBtX2J5dGVzVG9Db25zdW1l
KTsKICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBHSUZMWldTdGFydDogewotICAgICAgICAgICAgaWYgKHF1ZXJ5ID09
IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7Ci0gICAgICAgICAgICAgICAgaW50IGRh
dGFzaXplID0gKmN1cnJlbnRDb21wb25lbnQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmRhdGFzaXplID0gZGF0YXNpemU7Ci0gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBM
WlcgcGFyc2VyL2RlY29kZXIuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2x6d0NvbnRleHQucHJl
cGFyZVRvRGVjb2RlKG1fc2NyZWVuV2lkdGgsIGRhdGFzaXplKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIW1fZnJhbWVzLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICBtX2ZyYW1lcy5sYXN0KCktPnNldERhdGFTaXplKCpjdXJyZW50Q29tcG9uZW50KTsK
ICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTQwMiw3ICs0MzUsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJ
bnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAg
ICAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKWN1cnJlbnRDb21wb25lbnQsICJHSUY4
N2EiLCA2KSkKICAgICAgICAgICAgICAgICBtX3ZlcnNpb24gPSA4NzsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVk
KCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBH
RVROKDcsIEdJRkdsb2JhbEhlYWRlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtNDE1LDYgKzQ0OCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNp
emVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICBt
X3NjcmVlbkhlaWdodCA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAyKTsKIAogICAgICAg
ICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4K
KyAgICAgICAgICAgIC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRpbWVu
c2lvbnMgbGFyZ2VyIHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCiAgICAgICAgICAgICBp
ZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVu
SGVpZ2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ2OCw3ICs1MDIs
NyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0
aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgLy8gdW50aWwgd2UgZmlu
ZCBhbiBpbWFnZSBzZXBhcmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCiAgICAgICAgICAgICAv
LyBhIGZpbGUgaXMgY29ycnVwdC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuCiAgICAg
ICAgICAgICBpZiAoKmN1cnJlbnRDb21wb25lbnQgIT0gJywnKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRl
cik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUyOCwzMCArNTYyLDIzIEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4s
IEdJRkltYWdlRGVjCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkNvbnRyb2xFeHRlbnNp
b246IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1l
Q291bnRRdWVyeSkgewotICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQpCi0gICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoKmN1cnJlbnRDb21wb25lbnQgJiAweDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPnRwaXhlbCA9IGN1cnJlbnRDb21wb25lbnRbM107Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+aXNUcmFuc3BhcmVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmlu
ZyBnZnggY29udHJvbCBleHRlbnNpb24KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3Nh
bE1ldGhvZCBlbnVtCi0gICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJ
RiBzcGVjIQotICAgICAgICAgICAgICAgIGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRD
b21wb25lbnQpID4+IDIpICYgMHg3OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5k
aXNwb3NhbE1ldGhvZCA9IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9k
KWRpc3Bvc2FsTWV0aG9kOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3Jk
IGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1ZSAzCi0gICAgICAgICAgICAgICAg
Ly8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCi0gICAgICAgICAgICAgICAgaWYg
KGRpc3Bvc2FsTWV0aG9kID09IDQpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91czsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGVsYXlUaW1lID0gR0VU
SU5UMTYoY3VycmVudENvbXBvbmVudCArIDEpICogMTA7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICBHSUZGcmFtZUNvbnRleHQq
IGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgIGN1cnJl
bnRGcmFtZS0+aXNUcmFuc3BhcmVudCA9ICpjdXJyZW50Q29tcG9uZW50ICYgMHgxOworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRGcmFtZS0+aXNUcmFuc3BhcmVudCkKKyAgICAgICAgICAgICAgICBj
dXJyZW50RnJhbWUtPnRwaXhlbCA9IGN1cnJlbnRDb21wb25lbnRbM107CisKKyAgICAgICAgICAg
IC8vIFdlIGlnbm9yZSB0aGUgInVzZXIgaW5wdXQiIGJpdC4KKworICAgICAgICAgICAgLy8gTk9U
RTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBl
bnVtCisgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCisgICAg
ICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+PiAyKSAm
IDB4NzsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kPihkaXNwb3NhbE1l
dGhvZCk7CisgICAgICAgICAgICAvLyBTb21lIHNwZWNzIHNheSB0aGF0IGRpc3Bvc2FsIG1ldGhv
ZCAzIGlzICJvdmVyd3JpdGUgcHJldmlvdXMiLCBvdGhlcnMgdGhhdCBzZXR0aW5nCisgICAgICAg
ICAgICAvLyB0aGUgdGhpcmQgYml0IG9mIHRoZSBmaWVsZCAoaS5lLiBtZXRob2QgNCkgaXMuIFdl
IG1hcCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLgorICAgICAgICAgICAgaWYgKGRpc3Bvc2FsTWV0
aG9kID09IDQpCisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9
IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKKyAgICAgICAg
ICAgIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lID0gR0VUSU5UMTYoY3VycmVudENvbXBvbmVudCAr
IDEpICogMTA7CiAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTgxLDggKzYwOCw5IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJ
RkltYWdlRGVjCiAKICAgICAgICAgLy8gTmV0c2NhcGUtc3BlY2lmaWMgR0lGIGV4dGVuc2lvbjog
YW5pbWF0aW9uIGxvb3BpbmcuCiAgICAgICAgIGNhc2UgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9j
azogeworICAgICAgICAgICAgLy8gR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9uIGFsd2F5cyBy
ZWFkcyAzIGJ5dGVzIGZyb20gdGhlIHN0cmVhbTsgd2Ugc2hvdWxkIGF0IGxlYXN0IHdhaXQgZm9y
IHRoaXMgYW1vdW50LgogICAgICAgICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50KQotICAgICAg
ICAgICAgICAgIEdFVE4oKmN1cnJlbnRDb21wb25lbnQsIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVu
c2lvbik7CisgICAgICAgICAgICAgICAgR0VUTihzdGQ6Om1heCgzLCBzdGF0aWNfY2FzdDxpbnQ+
KCpjdXJyZW50Q29tcG9uZW50KSksIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNjEwLDcgKzYzOCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6
OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdl
RGVjCiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0
byBiZSBkZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcwotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC02MzAsNyArNjU4LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2Rl
SW50ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAg
ICAgICAgICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0
aGF0IEdJRjg3YQogICAgICAgICAgICAgICogZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25z
LgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2RlZAorICAg
ICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpCiAgICAgICAgICAgICAgICAg
JiYgKChtX3NjcmVlbkhlaWdodCA8IGhlaWdodCkgfHwgKG1fc2NyZWVuV2lkdGggPCB3aWR0aCkg
fHwgKG1fdmVyc2lvbiA9PSA4NykpKSB7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQg
PSBoZWlnaHQ7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHdpZHRoOwpAQCAtNjQ3
LDEwICs2NzUsMTAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90
IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICBo
ZWlnaHQgPSBtX3NjcmVlbkhlaWdodDsKICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fc2NyZWVu
V2lkdGg7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwg
aGFsdEF0RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVkKSB7CisgICAgICAgICAgICBpZiAocGFyc2VT
aXplT25seSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3Au
IEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KICAgICAgICAg
ICAgICAgICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0byByZWFk
IHRoZSBoZWFkZXIpLgogICAgICAgICAgICAgICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbiArIDkp
OwpAQCAtNjU4LDYyICs2ODYsMzggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJu
YWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9pbWFn
ZXNDb3VudCA9IG1faW1hZ2VzRGVjb2RlZCArIDE7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeSA9
PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhbV9mcmFtZUNvbnRleHQpCi0gICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0KCk7Ci0KLSAg
ICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgIG1fZnJhbWVD
b250ZXh0LT54T2Zmc2V0ID0geE9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+eU9mZnNldCA9IHlPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmhl
aWdodCA9IGhlaWdodDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+d2lkdGggPSB3
aWR0aDsKLQotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHRha2Vu
IGlmIHRoaXMgaXMgdGhlIGZpcnN0IGltYWdlICovCi0gICAgICAgICAgICAgICAgLyogYmVpbmcg
ZGVjb2RlZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KLSAg
ICAgICAgICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9j
YXRlIGJ1ZmZlcnMuICAgICAqLwotICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSBzdGQ6
Om1heChtX3NjcmVlbldpZHRoLCB3aWR0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zY3Jl
ZW5IZWlnaHQgPCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0g
aGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDQw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aW50ZXJsYWNlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aXBhc3MgPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbV9p
bWFnZXNEZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jl
c3NpdmVEaXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIK
LSAgICAgICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFl
YmVybGkgZGlzcGxheSBoYWNrCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNhdmlu
ZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgICAgICAgICAv
LyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQotICAgICAg
ICAgICAgICAgICAgICAvLyB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBk
aXNwbGF5IHN1Y2gKLSAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkK
LSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0
YXRlIGZyb20gbGFzdCBpbWFnZS4KLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJv
dyA9IDA7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSBt
X2ZyYW1lQ29udGV4dC0+aGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgLy8gYml0cyBwZXIgcGl4
ZWwgaXMgY3VycmVudENvbXBvbmVudFs4XSYweDA3Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIGhhcyBhIGxvY2FsIGNvbG9ybWFwPwotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21w
b25lbnRbOF0gJiAweDgwKSB7CisgICAgICAgICAgICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgICAgICBHSUZGcmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3Qo
KS5nZXQoKTsKKworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5zZXRIZWFkZXJEZWZpbmVkKCk7
CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAg
ICAgY3VycmVudEZyYW1lLT55T2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT53aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHN0ZDo6bWF4KG1fc2NyZWVuV2lk
dGgsIHdpZHRoKTsKKyAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gc3RkOjptYXgobV9zY3Jl
ZW5IZWlnaHQsIGhlaWdodCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmludGVybGFjZWQg
PSBjdXJyZW50Q29tcG9uZW50WzhdICYgMHg0MDsKKworICAgICAgICAgICAgLy8gT3ZlcmxheWlu
ZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgIC8vIGV4aXN0
aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjaworICAgICAgICAg
ICAgLy8gcmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRvCisg
ICAgICAgICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdl
IGFyZQorICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9u
J3QgZGlzcGxheSBzdWNoCisgICAgICAgICAgICAvLyBpbWFnZXMgcHJvZ3Jlc3NpdmVseS4gV2hp
Y2ggbWVhbnMgb25seSB0aGUgZmlyc3QKKyAgICAgICAgICAgIC8vIGZyYW1lIGNhbiBiZSBwcm9n
cmVzc2l2ZWx5IGRpc3BsYXllZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBwb3NzaWJs
ZSB0aGF0IGEgbm9uLXRyYW5zcGFyZW50IGZyYW1lCisgICAgICAgICAgICAvLyBjYW4gYmUgaW50
ZXJsYWNlZCBhbmQgcHJvZ3Jlc3NpdmVseSBkaXNwbGF5ZWQuCisgICAgICAgICAgICBjdXJyZW50
RnJhbWUtPnByb2dyZXNzaXZlRGlzcGxheSA9IGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpOwor
CisgICAgICAgICAgICBjb25zdCBib29sIGlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBjdXJyZW50
Q29tcG9uZW50WzhdICYgMHg4MDsKKyAgICAgICAgICAgIGlmIChpc0xvY2FsQ29sb3JtYXBEZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHRocmVlIGxvdy1vcmRlciBiaXRzIG9mIGN1
cnJlbnRDb21wb25lbnRbOF0gc3BlY2lmeSB0aGUgYml0cyBwZXIgcGl4ZWwuCiAgICAgICAgICAg
ICAgICAgaW50IG51bUNvbG9ycyA9IDIgPDwgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDcpOwog
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsb2NhbENvbG9ybWFwQnl0ZXMgPSAzICogbnVt
Q29sb3JzOwogCiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFs
ZXR0ZSBhZnRlciBpdCBsb2FkcwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFBvc2l0
aW9uID0gZGF0YVBvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
bG9jYWxDb2xvcm1hcFNpemUgPSBudW1Db2xvcnM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGN1cnJlbnRGcmFtZS0+bG9jYWxDb2xvcm1hcFBvc2l0aW9uID0gZGF0YVBvc2l0
aW9uOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUgPSBu
dW1Db2xvcnM7CiAKICAgICAgICAgICAgICAgICBpZiAobGVuIDwgbG9jYWxDb2xvcm1hcEJ5dGVz
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgd2UgaGF2ZSBlbm91Z2ggYnl0
ZXMgdG8gY29uc3VtZSB0aGUgZW50aXJlIGNvbG9ybWFwIGF0IG9uY2UuCkBAIC03MjEsNzAgKzcy
NSw1MyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBv
c2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRl
eHQpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBE
ZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzTG9jYWxDb2xv
cm1hcERlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGRhdGFQb3NpdGlvbiArPSBsb2Nh
bENvbG9ybWFwQnl0ZXM7CiAgICAgICAgICAgICAgICAgbGVuIC09IGxvY2FsQ29sb3JtYXBCeXRl
czsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBw
YWxldHRlCi0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERl
ZmluZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzTG9jYWxDb2xv
cm1hcERlZmluZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEdFVE4oMSwg
R0lGTFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEdJRkltYWdlQ29sb3JtYXA6IHsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkK
LSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9
IHRydWU7CisgICAgICAgICAgICBBU1NFUlQoIW1fZnJhbWVzLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICBtX2ZyYW1lcy5sYXN0KCktPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOwogICAg
ICAgICAgICAgR0VUTigxLCBHSUZMWldTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgR0lGU3ViQmxvY2s6IHsKLSAgICAgICAgICAgIC8vIFN0aWxs
IHdvcmtpbmcgb24gdGhlIHNhbWUgaW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcgZGF0YSBibG9jay4K
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBieXRlc0luQmxvY2sgPSAqY3VycmVudENvbXBvbmVu
dDsKLSAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spIHsKLSAgICAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhCi0gICAg
ICAgICAgICAgICAgLy8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQgdGVy
bWluYXRvci4KLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYgIW1fZnJhbWVD
b250ZXh0LT5yb3dzUmVtYWluaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
YW4gaWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCi0gICAgICAgICAgICAgICAg
ICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgR0VUTihieXRlc0luQmxvY2ssIEdJ
RkxaVyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0
aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2VxdWVuY2UuCi0gICAgICAgICAgICAg
ICAgbV9pbWFnZXNEZWNvZGVkKys7Ci0KLSAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzogVGhl
IGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYg
bV9mcmFtZUNvbnRleHQgJiYgIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRlKG1faW1hZ2VzRGVjb2Rl
ZCAtIDEsIG1fZnJhbWVDb250ZXh0LT5kZWxheVRpbWUsIG1fZnJhbWVDb250ZXh0LT5kaXNwb3Nh
bE1ldGhvZCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJhbWVDb21w
bGV0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCi0KLSAgICAg
ICAgICAgICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2UKLSAgICAgICAgICAgICAg
ICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZpbmlzaGVkIHBhcnNp
bmcgb25lIGZyYW1lOyBQcm9jZXNzIG5leHQgZnJhbWUuCisgICAgICAgICAgICAgICAgQVNTRVJU
KCFtX2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBzb21l
IGJyb2tlbiBHSUYgZmlsZXMgZG8gbm90IGhhdmUgZW5vdWdoIExaVyBibG9ja3MgdG8gZnVsbHkK
KyAgICAgICAgICAgICAgICAvLyBkZWNvZGUgYWxsIHJvd3MgYnV0IHdlIHRyZWF0IGl0IGFzIGZy
YW1lIGNvbXBsZXRlLgorICAgICAgICAgICAgICAgIG1fZnJhbWVzLmxhc3QoKS0+c2V0Q29tcGxl
dGUoKTsKICAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkRv
bmU6IHsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIEdJRiBpcyBkb25lLCB3ZSBjYW4gc3RvcC4K
LSAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+Z2lm
Q29tcGxldGUoKTsKKyAgICAgICAgICAgIG1fcGFyc2VDb21wbGV0ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIHNldFJl
bWFpbmluZ0J5dGVzKGxlbik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QgcmVtYWlu
aW5nQnl0ZXMpCkBAIC03OTMsMjIgKzc4MCwzMyBAQCB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRS
ZW1haW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCiAgICAgbV9ieXRlc1JlYWQgPSBt
X2RhdGEtPnNpemUoKSAtIHJlbWFpbmluZ0J5dGVzOwogfQogCi1ib29sIEdJRkxaV0NvbnRleHQ6
OnByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQordm9pZCBH
SUZJbWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSgpCiB7CisgICAgaWYgKG1fZnJhbWVz
LmlzRW1wdHkoKSB8fCBtX2ZyYW1lcy5sYXN0KCktPmlzQ29tcGxldGUoKSkKKyAgICAgICAgbV9m
cmFtZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBHSUZGcmFtZUNvbnRleHQobV9mcmFtZXMuc2l6ZSgp
KSkpOworfQorCisvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCB0byBjbG9zZSB0byBkb0xaVygp
LgorYm9vbCBHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUoKQoreworICAgIEFTU0VSVCht
X2ZyYW1lQ29udGV4dC0+aXNEYXRhU2l6ZURlZmluZWQoKSAmJiBtX2ZyYW1lQ29udGV4dC0+aXNI
ZWFkZXJEZWZpbmVkKCkpOworCiAgICAgLy8gU2luY2Ugd2UgdXNlIGEgY29kZXNpemUgb2YgMSBt
b3JlIHRoYW4gdGhlIGRhdGFzaXplLCB3ZSBuZWVkIHRvIGVuc3VyZQogICAgIC8vIHRoYXQgb3Vy
IGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgx
MikuCiAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJl
Y3RseSBhdCA0MDk1LgotICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCisgICAgaWYg
KG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjbGVhckNvZGUgPSAxIDw8IGRhdGFzaXplOworICAgIGNsZWFyQ29kZSA9
IDEgPDwgbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplOwogICAgIGlmIChjbGVhckNvZGUgPj0gTUFY
X0JZVEVTKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdmFpbCA9IGNsZWFyQ29kZSAr
IDI7CiAgICAgb2xkY29kZSA9IC0xOwotICAgIGNvZGVzaXplID0gZGF0YXNpemUgKyAxOworICAg
IGNvZGVzaXplID0gbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplICsgMTsKICAgICBjb2RlbWFzayA9
ICgxIDw8IGNvZGVzaXplKSAtIDE7CiAgICAgZGF0dW0gPSBiaXRzID0gMDsKKyAgICBpcGFzcyA9
IG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID8gMSA6IDA7CisgICAgaXJvdyA9IDA7CiAKICAg
ICAvLyBJbml0aWFsaXplIHRoZSB0YWJsZXMgbGF6aWx5LCB0aGlzIGFsbG93cyBmcmFtZSBjb3Vu
dCBxdWVyeSB0byB1c2UgbGVzcyBtZW1vcnkuCiAgICAgc3VmZml4LnJlc2l6ZShNQVhfQllURVMp
OwpAQCAtODE2LDggKzgxNCw5IEBAIGJvb2wgR0lGTFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2Rl
KHVuc2lnbmVkIHJvd1dpZHRoLCBpbnQgZGF0YXNpemUpCiAgICAgcHJlZml4LnJlc2l6ZShNQVhf
QllURVMpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgcm93IGJ1ZmZlci4KLSAgICByb3dC
dWZmZXIucmVzaXplKHJvd1dpZHRoKTsKKyAgICByb3dCdWZmZXIucmVzaXplKG1fZnJhbWVDb250
ZXh0LT53aWR0aCk7CiAgICAgcm93UG9zaXRpb24gPSAwOworICAgIHJvd3NSZW1haW5pbmcgPSBt
X2ZyYW1lQ29udGV4dC0+aGVpZ2h0OwogCiAgICAgLy8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZp
eCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCiAgICAgc3VmZml4
LmZpbGwoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGFlMmE4YmIyMWNkODMzMTE2YTlk
MTc4NjhmYWY4NzM5YmJkZjkzZmMuLjc1ZjA2N2I2MDA0YzRkOGMzOWQxNDM3MmU5Y2IxOGM5MjA5
ZDY1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC00Miw2ICs0Miw4IEBACiAvLyBzbyB3
ZSB3aWxsIHRvby4KICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNkZWZpbmUgTUFYX0xaV19CSVRT
ICAgICAgICAgIDEyCkBAIC03NSwxNiArNzcsODEgQEAgZW51bSBHSUZTdGF0ZSB7CiAgICAgR0lG
Q29uc3VtZUNvbW1lbnQKIH07CiAKLS8vIEZyYW1lIG91dHB1dCBzdGF0ZSBtYWNoaW5lLgotc3Ry
dWN0IEdJRkZyYW1lQ29udGV4dCB7CitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0OworCisvLyBMWlcg
ZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgorY2xhc3MgR0lGTFpXQ29udGV4dCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgaW50IGRhdGFzaXplOworICAgIEdJRkxa
V0NvbnRleHQoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQsIGNvbnN0IEdJRkZyYW1l
Q29udGV4dCogZnJhbWVDb250ZXh0KQorICAgICAgICA6IHN0YWNrcCgwKQorICAgICAgICAsIGNv
ZGVzaXplKDApCisgICAgICAgICwgY29kZW1hc2soMCkKKyAgICAgICAgLCBjbGVhckNvZGUoMCkK
KyAgICAgICAgLCBhdmFpbCgwKQorICAgICAgICAsIG9sZGNvZGUoMCkKKyAgICAgICAgLCBmaXJz
dGNoYXIoMCkKKyAgICAgICAgLCBiaXRzKDApCisgICAgICAgICwgZGF0dW0oMCkKKyAgICAgICAg
LCBpcGFzcygwKQorICAgICAgICAsIGlyb3coMCkKKyAgICAgICAgLCByb3dQb3NpdGlvbigwKQor
ICAgICAgICAsIHJvd3NSZW1haW5pbmcoMCkKKyAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisg
ICAgICAgICwgbV9mcmFtZUNvbnRleHQoZnJhbWVDb250ZXh0KQorICAgIHsgfQorCisgICAgYm9v
bCBwcmVwYXJlVG9EZWNvZGUoKTsKKyAgICBib29sIG91dHB1dFJvdygpOworICAgIGJvb2wgZG9M
WlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spOworICAg
IGJvb2wgaGFzUmVtYWluaW5nUm93cygpIHsgcmV0dXJuIHJvd3NSZW1haW5pbmc7IH0KKworcHJp
dmF0ZToKKyAgICAvLyBMWlcgZGVjb2Rpbmcgc3RhdGVzIGFuZCBvdXRwdXQgc3RhdGVzLgorICAg
IHNpemVfdCBzdGFja3A7IC8vIEN1cnJlbnQgc3RhY2sgcG9pbnRlci4KKyAgICBpbnQgY29kZXNp
emU7CisgICAgaW50IGNvZGVtYXNrOworICAgIGludCBjbGVhckNvZGU7IC8vIENvZGV3b3JkIHVz
ZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJlc2V0LgorICAgIGludCBhdmFpbDsgLy8gSW5kZXgg
b2YgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiBkaWN0aW9uYXJ5LgorICAgIGludCBvbGRjb2RlOwor
ICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyOworICAgIGludCBiaXRzOyAvLyBOdW1iZXIgb2Yg
dW5yZWFkIGJpdHMgaW4gImRhdHVtIi4KKyAgICBpbnQgZGF0dW07IC8vIDMyLWJpdCBpbnB1dCBi
dWZmZXIuCiAgICAgaW50IGlwYXNzOyAvLyBJbnRlcmxhY2UgcGFzczsgUmFuZ2VzIDEtNCBpZiBp
bnRlcmxhY2VkLgotICAgIHNpemVfdCByb3dzUmVtYWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0
byBiZSBvdXRwdXQuCiAgICAgc2l6ZV90IGlyb3c7IC8vIEN1cnJlbnQgb3V0cHV0IHJvdywgc3Rh
cnRpbmcgYXQgemVyby4KKyAgICBzaXplX3Qgcm93UG9zaXRpb247CisgICAgc2l6ZV90IHJvd3NS
ZW1haW5pbmc7IC8vIFJvd3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dC4KKworICAgIFZlY3Rvcjx1
bnNpZ25lZCBzaG9ydD4gcHJlZml4OworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdWZmaXg7
CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YWNrOworICAgIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiByb3dCdWZmZXI7IC8vIFNpbmdsZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyLgorCisg
ICAgLy8gSW5pdGlhbGl6ZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBhbmQgcmVhZC1vbmx5LgorICAg
IFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CisgICAgY29uc3QgR0lGRnJhbWVD
b250ZXh0KiBtX2ZyYW1lQ29udGV4dDsKK307CiAKLSAgICAvLyBQYXJhbWV0ZXJzIGZvciBpbWFn
ZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZC4KKy8vIERhdGEgc3RydWN0dXJlIGZvciBv
bmUgTFpXIGJsb2NrLgorc3RydWN0IEdJRkxaV0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHSUZMWldCbG9jayhzaXplX3QgcG9zaXRpb24sIHNpemVf
dCBzaXplKQorICAgICAgICA6IGJsb2NrUG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICwgYmxv
Y2tTaXplKHNpemUpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBibG9ja1Bvc2l0aW9uOwor
ICAgIHNpemVfdCBibG9ja1NpemU7Cit9OworCisvLyBGcmFtZSBvdXRwdXQgc3RhdGUgbWFjaGlu
ZS4KK3N0cnVjdCBHSUZGcmFtZUNvbnRleHQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIG1lbWJlcnMgdG8gcHJpdmF0ZSBz
ZWN0aW9uLgorICAgIGludCBmcmFtZUlkOwogICAgIHVuc2lnbmVkIHhPZmZzZXQ7CiAgICAgdW5z
aWduZWQgeU9mZnNldDsgLy8gV2l0aCByZXNwZWN0IHRvICJzY3JlZW4iIG9yaWdpbi4KICAgICB1
bnNpZ25lZCB3aWR0aDsKQEAgLTkzLDYgKzE2MCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3Jl
IHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCiAgICAgc2l6ZV90IGxvY2FsQ29s
b3JtYXBQb3NpdGlvbjsgLy8gUGVyLWltYWdlIGNvbG9ybWFwLgogICAgIGludCBsb2NhbENvbG9y
bWFwU2l6ZTsgLy8gU2l6ZSBvZiBsb2NhbCBjb2xvcm1hcCBhcnJheS4KKyAgICBpbnQgZGF0YXNp
emU7CiAgICAgCiAgICAgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkIDogMTsKICAgICBib29s
IHByb2dyZXNzaXZlRGlzcGxheSA6IDE7IC8vIElmIHRydWUsIGRvIEhhZWJlcmxpIGludGVybGFj
ZSBoYWNrLgpAQCAtMTAxLDExICsxNjksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBkZWxh
eVRpbWU7IC8vIERpc3BsYXkgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCBmb3IgdGhpcyBpbWFnZSBp
biBhIG11bHRpLWltYWdlIEdJRi4KIAotICAgIEdJRkZyYW1lQ29udGV4dCgpCi0gICAgICAgIDog
ZGF0YXNpemUoMCkKLSAgICAgICAgLCBpcGFzcygwKQotICAgICAgICAsIHJvd3NSZW1haW5pbmco
MCkKLSAgICAgICAgLCBpcm93KDApCisgICAgR0lGRnJhbWVDb250ZXh0KGludCBpZCkKKyAgICAg
ICAgOiBmcmFtZUlkKGlkKQogICAgICAgICAsIHhPZmZzZXQoMCkKICAgICAgICAgLCB5T2Zmc2V0
KDApCiAgICAgICAgICwgd2lkdGgoMCkKQEAgLTExNCw1NCArMTc5LDQ4IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3Bl
Y2lmaWVkKQogICAgICAgICAsIGxvY2FsQ29sb3JtYXBQb3NpdGlvbigwKQogICAgICAgICAsIGxv
Y2FsQ29sb3JtYXBTaXplKDApCisgICAgICAgICwgZGF0YXNpemUoMCkKICAgICAgICAgLCBpc0xv
Y2FsQ29sb3JtYXBEZWZpbmVkKGZhbHNlKQogICAgICAgICAsIHByb2dyZXNzaXZlRGlzcGxheShm
YWxzZSkKICAgICAgICAgLCBpbnRlcmxhY2VkKGZhbHNlKQogICAgICAgICAsIGlzVHJhbnNwYXJl
bnQoZmFsc2UpCiAgICAgICAgICwgZGVsYXlUaW1lKDApCisgICAgICAgICwgbV9jdXJyZW50THp3
QmxvY2soMCkKKyAgICAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCisgICAgICAgICwgbV9pc0hl
YWRlckRlZmluZWQoZmFsc2UpCisgICAgICAgICwgbV9pc0RhdGFTaXplRGVmaW5lZChmYWxzZSkK
ICAgICB7CiAgICAgfQogICAgIAogICAgIH5HSUZGcmFtZUNvbnRleHQoKQogICAgIHsKICAgICB9
Ci19OwogCi0vLyBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgotLy8gRklYTUU6IE1ha2UgdGhp
cyBhIGNsYXNzIGFuZCBoaWRlIHByaXZhdGUgbWVtYmVycy4KLXN0cnVjdCBHSUZMWldDb250ZXh0
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHSUZMWldDb250
ZXh0KCkKLSAgICAgICAgOiBzdGFja3AoMCkKLSAgICAgICAgLCBjb2Rlc2l6ZSgwKQotICAgICAg
ICAsIGNvZGVtYXNrKDApCi0gICAgICAgICwgY2xlYXJDb2RlKDApCi0gICAgICAgICwgYXZhaWwo
MCkKLSAgICAgICAgLCBvbGRjb2RlKDApCi0gICAgICAgICwgZmlyc3RjaGFyKDApCi0gICAgICAg
ICwgYml0cygwKQotICAgICAgICAsIGRhdHVtKDApCi0gICAgICAgICwgcm93UG9zaXRpb24oMCkK
LSAgICB7IH0KKyAgICB2b2lkIGFkZEx6d0Jsb2NrKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICBtX2x6d0Jsb2Nrcy5hcHBlbmQoR0lGTFpXQmxvY2socG9zaXRp
b24sIHNpemUpKTsKKyAgICB9CiAKLSAgICBib29sIHByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCBy
b3dXaWR0aCwgaW50IGRhdGFzaXplKTsKKyAgICBib29sIGRlY29kZShjb25zdCB1bnNpZ25lZCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVu
dCwgYm9vbCogZnJhbWVEZWNvZGVkKTsKIAotICAgIHNpemVfdCBzdGFja3A7IC8vIEN1cnJlbnQg
c3RhY2sgcG9pbnRlci4KLSAgICBpbnQgY29kZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrOwotICAg
IGludCBjbGVhckNvZGU7IC8vIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJl
c2V0LgotICAgIGludCBhdmFpbDsgLy8gSW5kZXggb2YgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiBk
aWN0aW9uYXJ5LgotICAgIGludCBvbGRjb2RlOwotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFy
OwotICAgIGludCBiaXRzOyAvLyBOdW1iZXIgb2YgdW5yZWFkIGJpdHMgaW4gImRhdHVtIi4KLSAg
ICBpbnQgZGF0dW07IC8vIDMyLWJpdCBpbnB1dCBidWZmZXIuCi0gICAgc2l6ZV90IHJvd1Bvc2l0
aW9uOworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsg
fQorICAgIHZvaWQgc2V0Q29tcGxldGUoKSB7IG1faXNDb21wbGV0ZSA9IHRydWU7IH0KKyAgICBi
b29sIGlzSGVhZGVyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIZWFkZXJEZWZpbmVkOyB9
CisgICAgdm9pZCBzZXRIZWFkZXJEZWZpbmVkKCkgeyBtX2lzSGVhZGVyRGVmaW5lZCA9IHRydWU7
IH0KKyAgICBib29sIGlzRGF0YVNpemVEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0RhdGFT
aXplRGVmaW5lZDsgfQorICAgIHZvaWQgc2V0RGF0YVNpemUoaW50IHNpemUpCisgICAgeworICAg
ICAgICBkYXRhc2l6ZSA9IHNpemU7CisgICAgICAgIG1faXNEYXRhU2l6ZURlZmluZWQgPSB0cnVl
OworICAgIH0KIAotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gcHJlZml4OwotICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiBzdWZmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YWNr
OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiByb3dCdWZmZXI7IC8vIFNpbmdsZSBzY2FubGlu
ZSB0ZW1wb3JhcnkgYnVmZmVyLgorcHJpdmF0ZToKKyAgICBPd25QdHI8R0lGTFpXQ29udGV4dD4g
bV9sendDb250ZXh0OworICAgIFZlY3RvcjxHSUZMWldCbG9jaz4gbV9sendCbG9ja3M7IC8vIExa
VyBibG9ja3MgZm9yIHRoaXMgZnJhbWUuCisgICAgc2l6ZV90IG1fY3VycmVudEx6d0Jsb2NrOwor
ICAgIGJvb2wgbV9pc0NvbXBsZXRlOworICAgIGJvb2wgbV9pc0hlYWRlckRlZmluZWQ7CisgICAg
Ym9vbCBtX2lzRGF0YVNpemVEZWZpbmVkOwogfTsKIAogY2xhc3MgR0lGSW1hZ2VSZWFkZXIgewpA
QCAtMTc5LDIzICsyMzgsMzEgQEAgcHVibGljOgogICAgICAgICAsIG1faXNHbG9iYWxDb2xvcm1h
cERlZmluZWQoZmFsc2UpCiAgICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAg
ICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcFNpemUoMCkKLSAgICAgICAgLCBtX2ltYWdlc0RlY29k
ZWQoMCkKLSAgICAgICAgLCBtX2ltYWdlc0NvdW50KDApCiAgICAgICAgICwgbV9sb29wQ291bnQo
Y0xvb3BDb3VudE5vdFNlZW4pCi0gICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKKyAgICAgICAg
LCBtX2N1cnJlbnREZWNvZGluZ0ZyYW1lKDApCisgICAgICAgICwgbV9wYXJzZUZhaWxlZChmYWxz
ZSkKKyAgICAgICAgLCBtX3BhcnNlQ29tcGxldGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAg
ICB+R0lGSW1hZ2VSZWFkZXIoKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1fZnJhbWVDb250ZXh0
OwotICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBzZXREYXRh
KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBkYXRhKSB7IG1fZGF0YSA9IGRhdGE7
IH0KKyAgICAvLyBGSVhNRTogaGFsdEF0RnJhbWUgc2hvdWxkIGJlIHNpemVfdC4KICAgICBib29s
IGRlY29kZShXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0
QXRGcmFtZSk7CiAKLSAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
c0NvdW50OyB9CisgICAgc2l6ZV90IGltYWdlc0NvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2ZyYW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICAvLyBUaGlzIGF2b2lkcyBjb3VudGluZyBhbiBlbXB0eSBmcmFtZSB3aGVuIHRoZSBmaWxlIGlz
IHRydW5jYXRlZCByaWdodCBhZnRlcgorICAgICAgICAvLyBHSUZDb250cm9sRXh0ZW5zaW9uIGJ1
dCBiZWZvcmUgR0lGSW1hZ2VIZWFkZXIuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGV4dHJhIGNv
bXBsZXhpdHkgaXMgbm90IG5lY2Vzc2FyeSBhbmQgd2Ugc2hvdWxkIGp1c3QgcmVwb3J0IG1fZnJh
bWVzLnNpemUoKS4KKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzLmxhc3QoKS0+aXNIZWFkZXJEZWZp
bmVkKCkgPyBtX2ZyYW1lcy5zaXplKCkgOiBtX2ZyYW1lcy5zaXplKCkgLSAxOworICAgIH0KICAg
ICBpbnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KIAogICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9ybWFwKCkgY29uc3QKQEAgLTIxNiwxMiArMjgz
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID8gZnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplIDogMDsKICAgICB9CiAKLSAgICBjb25zdCBH
SUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250
ZXh0OyB9CisgICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudERlY29kaW5nRnJhbWUgPCBtX2ZyYW1lcy5z
aXplKCkgPyBtX2ZyYW1lc1ttX2N1cnJlbnREZWNvZGluZ0ZyYW1lXS5nZXQoKSA6IDA7CisgICAg
fQorCisgICAgYm9vbCBwYXJzZUZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VGYWlsZWQ7
IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRp
b24sIHNpemVfdCBsZW4sIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnksIHVuc2ln
bmVkIGhhbHRBdEZyYW1lKTsKLSAgICBib29sIG91dHB1dFJvdygpOwotICAgIGJvb2wgZG9MWlco
Y29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworICAgIGJvb2wgcGFyc2Uoc2l6ZV90IGRh
dGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgYm9vbCBwYXJzZVNpemVPbmx5KTsKICAgICB2b2lkIHNl
dFJlbWFpbmluZ0J5dGVzKHNpemVfdCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
KHNpemVfdCBkYXRhUG9zaXRpb24pIGNvbnN0CkBAIC0yMjksNiArMjk5LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPiht
X2RhdGEtPmRhdGEoKSkgKyBkYXRhUG9zaXRpb247CiAgICAgfQogCisgICAgdm9pZCBhZGRGcmFt
ZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBjdXJyZW50RnJhbWVJc0ZpcnN0RnJhbWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzLmlzRW1wdHkoKSB8fCAobV9mcmFtZXMu
c2l6ZSgpID09IDF1ICYmICFtX2ZyYW1lc1swXS0+aXNDb21wbGV0ZSgpKTsKKyAgICB9CisKICAg
ICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8gUGFyc2luZyBz
dGF0ZSBtYWNoaW5lLgpAQCAtMjQ0LDE1ICszMjAsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNHbG9iYWxDb2xvcm1hcERlZmluZWQ7CiAgICAgc2l6ZV90IG1fZ2xvYmFsQ29sb3JtYXBQb3Np
dGlvbjsgLy8gKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1hcCBpZiBsb2Nh
bCBub3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IuCiAgICAgaW50IG1fZ2xvYmFs
Q29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4KLSAgICB1bnNp
Z25lZCBtX2ltYWdlc0RlY29kZWQ7IC8vIENvdW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmlt
YXRlZCBHSUZzLgotICAgIGludCBtX2ltYWdlc0NvdW50OyAvLyBDb3VudGVkIGFsbCBmcmFtZXMg
c2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykuCiAgICAgaW50IG1fbG9v
cENvdW50OyAvLyBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbCB0
aGUgbnVtYmVyIG9mIGFuaW1hdGlvbiBsb29wcyBhIEdJRiByZW5kZXJzLgogICAgIAotICAgIEdJ
RkZyYW1lQ29udGV4dCogbV9mcmFtZUNvbnRleHQ7Ci0KLSAgICBHSUZMWldDb250ZXh0IG1fbHp3
Q29udGV4dDsKKyAgICBWZWN0b3I8T3duUHRyPEdJRkZyYW1lQ29udGV4dD4gPiBtX2ZyYW1lczsK
KyAgICBzaXplX3QgbV9jdXJyZW50RGVjb2RpbmdGcmFtZTsKIAogICAgIFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fcGFyc2VGYWlsZWQ7CisgICAgYm9v
bCBtX3BhcnNlQ29tcGxldGVkOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcAppbmRleCBhN2JmNWQ1NTBm
NDNiZmY4YmJiMDNiYTY3NmJlZTZkOWIzZDlhMTk3Li5iYzZlODExMTU5YzM3ZTkyMjA0ZDIzZmRm
YzNhYzdlOGIxYWRmMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlIDxw
dWJsaWMvV2ViVW5pdFRlc3RTdXBwb3J0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtNjYsOSArNjgsMTkgQEAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiByZWFkRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSkKICAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOwogfQogCitzdGF0aWMgUGFzc093blB0
cjxHSUZJbWFnZURlY29kZXI+IGNyZWF0ZURlY29kZXIoKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQs
IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKTsKK30KKworc3RhdGlj
IHVuc2lnbmVkIGhhc2hTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFwKQoreworICAgIHJl
dHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoYml0bWFwLmdldFBpeGVscygpLCBiaXRtYXAu
Z2V0U2l6ZSgpKTsKK30KKwogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBkZWNvZGVUd29GcmFt
ZXMpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcg
R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRklt
YWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3Vy
Y2VzL2FuaW1hdGVkLmdpZiIpOwogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtOTEs
NyArMTAzLDcgQEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBkZWNvZGVUd29GcmFtZXMpCiAK
IFRFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGUpCiB7Ci0gICAgT3duUHRy
PEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKElt
YWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENv
bG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rl
cihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJl
YWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIp
OwogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtMTE1LDcgKzEyNyw3IEBAIFRFU1Qo
R0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGUpCiAKIFRFU1QoR0lGSW1hZ2VEZWNv
ZGVyVGVzdCwgcGFyc2VCeXRlQnlCeXRlKQogewotICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+
IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFO
b3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVk
KSkpOworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoY3JlYXRlRGVjb2Rlcigp
KTsKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRl
c3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsKICAgICBBU1NFUlRfVFJV
RShkYXRhLmdldCgpKTsKQEAgLTE0MCw3ICsxNTIsNyBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRl
c3QsIHBhcnNlQnl0ZUJ5Qnl0ZSkKIAogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFu
ZERlY29kZUJ5dGVCeUJ5dGUpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rl
cihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11
bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7Cisg
ICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFz
dC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLWdpZi13aXRoLW9mZnNldHMuZ2lmIik7CiAgICAg
QVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xNjksNyArMTgxLDcgQEAgVEVTVChHSUZJbWFn
ZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZUJ5dGVCeUJ5dGUpCiAvLyBTZWNvbmQgZnJhbWUg
aW4gdGhlIGZpbGUgaXMgYnJva2VuIGJ1dCB0ZXN0IHRoYXQgZmlyc3QgZnJhbWUgY2FuIGJlIGRl
Y29kZWQuCiBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGJyb2tlblNlY29uZEZyYW1lKQogewot
ICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdl
RGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6
R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworICAgIE93blB0cjxHSUZJbWFnZURlY29k
ZXI+IGRlY29kZXIoY3JlYXRlRGVjb2RlcigpKTsKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGEgPSByZWFkRmlsZSgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9icm9r
ZW4uZ2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xODcsNiArMTk5LDU1
IEBAIFRFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJva2VuU2Vjb25kRnJhbWUpCiAgICAgRVhQ
RUNUX0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOwog
fQogCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHByb2dyZXNzaXZlRGVjb2RlKQoreworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZ1bGxEYXRhID0gcmVhZEZpbGUoIi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcmFkaWVudC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShmdWxs
RGF0YS5nZXQoKSk7CisgICAgY29uc3Qgc2l6ZV90IGZ1bGxMZW5ndGggPSBmdWxsRGF0YS0+c2l6
ZSgpOworCisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcjsKKyAgICBJbWFnZUZy
YW1lKiBmcmFtZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdHJ1bmNhdGVkSGFzaGVzOworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gcHJvZ3Jlc3NpdmVIYXNoZXM7CisKKyAgICAvLyBDb21wdXRlIGhh
c2hlcyB3aGVuIHRoZSBmaWxlIGlzIHRydW5jYXRlZC4KKyAgICBjb25zdCBzaXplX3QgaW5jcmVt
ZW50ID0gMTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBmdWxsTGVuZ3RoOyBpICs9IGlu
Y3JlbWVudCkgeworICAgICAgICBkZWNvZGVyID0gY3JlYXRlRGVjb2RlcigpOworICAgICAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnVsbERhdGEt
PmRhdGEoKSwgaSk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgaSA9PSBm
dWxsTGVuZ3RoKTsKKyAgICAgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
MCk7CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIHRydW5jYXRlZEhhc2hlcy5h
cHBlbmQoMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB0cnVu
Y2F0ZWRIYXNoZXMuYXBwZW5kKGhhc2hTa0JpdG1hcChmcmFtZS0+Z2V0U2tCaXRtYXAoKSkpOwor
ICAgIH0KKworICAgIC8vIENvbXB1dGUgaGFzaGVzIHdoZW4gdGhlIGZpbGUgaXMgcHJvZ3Jlc3Np
dmVseSBkZWNvZGVkLgorICAgIGRlY29kZXIgPSBjcmVhdGVEZWNvZGVyKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPD0gZnVsbExlbmd0aDsgaSArPSBpbmNyZW1lbnQpIHsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZ1bGxEYXRh
LT5kYXRhKCksIGkpOworICAgICAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIGkgPT0g
ZnVsbExlbmd0aCk7CisgICAgICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KDApOworICAgICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgICAgICBwcm9ncmVzc2l2ZUhhc2hl
cy5hcHBlbmQoMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBw
cm9ncmVzc2l2ZUhhc2hlcy5hcHBlbmQoaGFzaFNrQml0bWFwKGZyYW1lLT5nZXRTa0JpdG1hcCgp
KSk7CisgICAgfQorCisgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0cnVuY2F0ZWRIYXNoZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRydW5j
YXRlZEhhc2hlc1tpXSAhPSBwcm9ncmVzc2l2ZUhhc2hlc1tpXSkgeworICAgICAgICAgICAgbWF0
Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIEVY
UEVDVF9UUlVFKG1hdGNoKTsKK30KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcmFkaWVudC5naWYgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcmFkaWVudC5naWYKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJk
ZTI4NmViYmU1ZDk1M2RkNGEyMGU2ODlkOTIzMGIyOTlhM2Q1YwpHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMTAzNAp6Y21kNmt7Wm8/IzBMUS1ySFU/fWstZjBBR2JBdHRqPzFwUjUpN1R5ISN2fFoj
Y3FGfEB0UFQjWTdiJiFgRnQtNlIKelVaZlclOTlNVilAZ08+MnBtXlljWmV4JVUxKENkRG5WXntA
VTFBaWNiJSZrKDZAN21Be1FTQjVXYkQpYGxNTW4wCnp1bVAtdGF8YD8qdjJfa3soP31kZ2lVWC1i
JFFWUnNLWGtwJmNPJG4wRlNIXjVRQHFsSTUtVlEpMnlabD90UFkyYwp6O2N6Nz9PbkNuJmo3TU84
MmJNQjR5b3RzR2AwI2FuVCNWKS13N2lUfjE1V0tuYC0/YzhodDNAST0rVjB5X0ZXanIKeiNOYll4
UHNmRWNqRjE+cjxJKiM1NWcxRnhnYzRzUTtWVCl3TnlQTSVuMnBEa0NvbXNfQDVUNSpnbGpfbEIq
NjcoCnpFSnh1NkFHZ0E+NXs2JHhhVkc/O0pscVl5OFcoQH47WkktdTwlMTB0OXgoQVkxRG43QHtR
blI+QGNKKW0rYW9gRQp6MGBFPHUmUmtobGVYUGIobFNPTl82bV5gPXM8ckI5aXF4bzcxZmtNc05H
Kk1gSSFqQmNRamBpc1FlUkpzc3tPPjcKej01Qj50d21vNHFWWV5KTzdAI189RylXQVAjN1FPNzVe
M0JlN2VQK2NUJU1GQyM3Vj49O1RFQSNCPnB5R1psUjh2CnpsKk0xYTVmI2JqTUBCXnBaXnozTl5N
aDVFYDtMM1BSaEVGTHF5bD9eJDt7K3pzRDcoQWpkPSZ8QkBkU1ZeTlljZwp6PHJeZC0lNlM/T3JY
YHhQKFZifipiKiMyeHZBb1VmdUhsQm81VCFGbE1rVUslbDxseDwrVXZwPDYlbWh9NldgPk4KejN5
Q3xnKiMhJl9GUHxfKFRAWF5XcTRNWUYkKUt1JlQ+PDxVc0BTJDxHPGo/P0lnanN8U3o8N2AoUjd6
QiFrc3RPCnpCQmMmRzFXdT5mbGdae3BzQkkxdChfZFYkVmhqMiNNPFhqNGtfT0pYdTZuVzlZJks1
fmhObG1vdmQ7ezx7ckp0VAp6Pj8+MnhSYVNkKmNwKHV5eno5IVlMRHpjPXBaaElfN3B+aW10aVMj
SHdiNyZBeUIkbDYpY3tIM0koX1BKKzNvNEoKempBbThxeU42YjlfQ0xKSENXaDlRLVN2XkZqbH1S
PHZ1QnpuQ3pQTDxUdnlLQDd+aXBQZXtnWEAkVihHUjw2fk9BCnpBdSVfMVV0empIcEtwQFAzcF5N
XyFNYz10S0xfcyM7MXReT28wZW5nejVIUWJVZEVRezVOQ1olO0tfd2RMcilyPQp6P2QzZGNWRU81
bmN2TzFyVDQ7S0k7SCkrS3VCfTgodlpKVFlJIzFrUmskMHEwQlN7djghYWVpI1FfQl5Kam1lVmkK
ej8+XllFN30zdTRteWcmPGAzIWExPD1lTmNFfE9lY0JGN1JnaikyMSpvNjBFP2IjQEc3I2BtcSZS
JkcwSUNEfmhCCmFOP288Rlo0Sz5ScTZWZU1tKHBpLS02Ykx1QGJ0ZipxZSZBMAoKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193893</attachid>
            <date>2013-03-19 12:09:07 -0700</date>
            <delta_ts>2013-03-19 12:31:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-111144-20130319120458.patch</filename>
            <type>text/plain</type>
            <size>58151</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdkODdlMDMwMTA5Njg0
ODU5MGY1ODllY2ZkMmMxZGEzZmM3ZDIxOS4uOGM3YzQyOGI2ZmJjMjA5YmQ5MGQ1MTlhZTY3Yzgx
N2YwOThjNTlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxMy0wMy0xNyAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEdJRkltYWdlUmVhZGVyIHRv
IGNvdW50IGZyYW1lcyBhbmQgZGVjb2RlIGluIG9uZSBwYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIE9CSkVDVElWRQorCisgICAgICAgIFRoaXMgY2hh
bmdlIGhhcyB0aGUgb2JqZWN0aXZlIG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSByZWFkaW5nIEdJ
RgorICAgICAgICBmaWxlcy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gcGFyc2UgdGhlIGVudGly
ZSBHSUYgZmlsZSBpbiBvbmUgcGFzcworICAgICAgICBhbmQgc2F2ZXMgaW5mb3JtYXRpb24gYWJv
dXQgZWFjaCBmcmFtZSwgc3VjaCB0aGF0IGRlY29kaW5nIGluIGEgbGF0ZXIKKyAgICAgICAgcGFz
cyBkb2VzIG5vdCBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlIGFnYWluLgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGZpeGVzIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIG9mIGRlY29kaW5nIEdJRiBmaWxl
cyB3aGVuCisgICAgICAgIHRoZXkgYXJlIHJlY2VpdmVkIHZlcnkgc2xvd2x5LiBFeGlzdGluZyBp
bXBsZW1lbnRhdGlvbiBjcmVhdGVzIGEgbmV3CisgICAgICAgIEdJRkltYWdlUmVhZGVyIGZvciBj
b3VudGluZyBmcmFtZXMgZm9yIGV2ZXJ5IHRpbWUgaXQgaXMgbm90aWZpZWQgdGhhdAorICAgICAg
ICBuZXcgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCwgdGhpcyBoYXMgTyhuXjIpIGJlaGF2aW9yIHdo
ZW4gZGF0YSBpcworICAgICAgICByZWNlaXZlZCB2ZXJ5IHNsb3dseS4KKworICAgICAgICBBTEdP
UklUSE0KKworICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGRpdmlkZXMgdGhlIGRlY29kaW5n
IHByb2Nlc3MgaW50byB0d28gc2VwYXJhdGUKKyAgICAgICAgc3RlcHM6IHBhcnNlIGFuZCBMWlcg
ZGVjb2RpbmcuCisKKyAgICAgICAgSW4gdGhlIHBhcnNlIHN0ZXAsIHRoZSBzdGF0ZSBtYWNoaW5l
IGlzIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nCisgICAgICAgIGltcGxlbWVudGF0aW9uLiBIb3dl
dmVyIHRoaXMgYWxnb3JpdGhtIGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29kaW5nCisgICAgICAg
IHdoaWxlIHNjYW5uaW5nIHRocm91Z2ggdGhlIGZpbGUuIEludGVhZCBpdCBjcmVhdGVzIGEgbmV3
IGRhdGEgc3RydWN0dXJlCisgICAgICAgIGZvciBjYWNoaW5nIGFsbCBmcmFtZSBpbmZvcm1hdGlv
biBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTFpXIGJsb2Nrcy4KKworICAgICAgICBJZiBhIGZ1bGwg
ZGVjb2RlIGlzIHJlcXVlc3RlZCB0aGVuIExaVyBkZWNvZGluZyBpcyBwZXJmb3JtZWQuIFRoaXMK
KyAgICAgICAgaW1wbGVtZW50YXRpb24gbG9va3MgdGhyb3VnaCBhbGwgZnJhbWUgaW5mb3JtYXRp
b24gc2F2ZWQgYW5kIGRlY29kZXMKKyAgICAgICAgZWFjaCBmcmFtZSBzZXF1ZW50aWFsbHkgdW50
aWwgdGhlIHRhcmdldCBmcmFtZSBpcyByZWFjaGVkLgorCisgICAgICAgIEJlY2F1c2Ugb2YgdGhl
IHNlcGFyYXRpb24gb2YgcGFyc2UgYW5kIGRlY29kZSwgZWFjaCBmcmFtZSBjYW4gYmUKKyAgICAg
ICAgZGVjb2RlZCBzZXBhcmF0ZWx5LiBUaGlzIHBhdmVzIHRoZSB3YXkgdG8gc3VwcG9ydCBzZWVr
aW5nIGluIEdJRiBmaWxlcy4KKworICAgICAgICBURVNUSU5HCisKKyAgICAgICAgQWRkZWQgYSBu
ZXcgdW5pdCB0ZXN0IHRvIGNvdmVyIHByb2dyZXNzaXZlbHkgZGVjb2RpbmcgYSBHSUYgaW1hZ2Uu
CisgICAgICAgIFRoZXJlIGFyZSBhbHJlYWR5IEdJRiB1bml0IHRlc3RzIGZvciBmdW5jdGlvbmFs
IHRlc3RpbmcuCisgICAgICAgIEV4aGF1c3RpdmUgdGVzdGluZyB3YXMgZG9uZSBsb2NhbGx5IHdp
dGggYSBjb3JwdXMgb2YgNjBrIGltYWdlcy4KKyAgICAgICAgSSBtaXhlZCB0aGUgY29ycHVzIHdp
dGggc29tZSBnZW5lcmF0ZWQgYmFkIGRhdGEgYW5kIHRydW5jYXRlZCBmaWxlcy4KKyAgICAgICAg
VGhlIHJlc3VsdHMgd2FzIGJpdC1pZGVudGljYWwgd2hlbiBjb21wYXJlZCB0byB0aGUgcHJldmlv
dXMKKyAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGhlc2Ugd2FzIGFsc28gbm8g
Y3Jhc2hpbmcgd2hlbiBkZWNvZGluZyB0aGUgZW50aXJlIGNvcnB1cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5oOgorICAgICAgICAoR0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoR0lGTFpX
Q29udGV4dDo6b3V0cHV0Um93KToKKyAgICAgICAgKEdJRkxaV0NvbnRleHQ6OmRvTFpXKToKKyAg
ICAgICAgKEdJRkZyYW1lQ29udGV4dDo6ZGVjb2RlKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVy
OjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKToKKyAgICAgICAgKEdJ
RkltYWdlUmVhZGVyOjphZGRGcmFtZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEdJRkxaV0NvbnRl
eHQ6OnByZXBhcmVUb0RlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAgICAgIFRoZXJlIGlzIGEgbG90IG9mIHJlc2h1ZmZs
aW5nIGluIEdJRkxaV0NvbnRleHQgYW5kIEdJRkZyYW1lQ29udGV4dC4KKyAgICAgICAgVGhlc2Ug
Y2hhbmdlcyBoYXMgdGhlIGdvYWwgb2YgaGF2aW5nIEdJRkxaV0NvbnRleHQgYmUgYSBwdXJlIGRl
Y29kaW5nCisgICAgICAgIHN0YXRlIG1hY2hpbmUuIEdJRkZyYW1lQ29udGV4dCBpcyBtb3N0bHkg
YSByZWFkLW9ubHkgY29udGFpbmVyIGZvcgorICAgICAgICBmcmFtZSBpbmZvcm1hdGlvbi4gV2l0
aCBhbGwgdGhlc2UgY2hhbmdlcyB3ZSBjYW4gZGVjb2RlIGVhY2gKKyAgICAgICAgR0lGRnJhbWVD
b250ZXh0IGluZGVwZW5kZW50bHkuCisKKyAgICAgICAgVGhlIG93bmVyc2hpcCBwYXR0ZXJuIGlz
OgorICAgICAgICBHSUZJbWFnZVJlYWRlciBvd25zIEdJRkZyYW1lQ29udGV4dCBvd25zIEdJRkxa
V0NvbnRleHQuCisKKyAgICAgICAgKEdJRkxaV0NvbnRleHQ6OkdJRkxaV0NvbnRleHQpOgorICAg
ICAgICAoR0lGTFpXQ29udGV4dCk6CisgICAgICAgIChHSUZMWldDb250ZXh0OjpoYXNSZW1haW5p
bmdSb3dzKToKKyAgICAgICAgR0lGTFpXQ29udGV4dCBpcyBtb3ZlZCB0byB0aGUgdG9wIG9mIGZp
bGUuCisgICAgICAgIChHSUZMWldCbG9jayk6CisgICAgICAgIChHSUZMWldCbG9jazo6R0lGTFpX
QmxvY2spOgorICAgICAgICBOZXcgZGF0YSBzdHJ1Y3R1cmUgdG8gc2F2ZSBibG9jayBwb3NpdGlv
biBhbmQgc2l6ZS4KKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZGcmFt
ZUNvbnRleHQ6OkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6On5H
SUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjphZGRMendCbG9jayk6
CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OmlzQ29tcGxldGUpOgorICAgICAgICAoR0lGRnJh
bWVDb250ZXh0Ojppc0hlYWRlckRlZmluZWQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojpp
c0RhdGFTaXplRGVmaW5lZCk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OnNldENvbXBsZXRl
KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6c2V0SGVhZGVyRGVmaW5lZCk6CisgICAgICAg
IChHSUZGcmFtZUNvbnRleHQ6OnNldERhdGFTaXplKToKKyAgICAgICAgTm93IG93bnMgR0lGTFpX
Q29udGV4dCBmb3IgZGVjb2RpbmcuCisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6R0lGSW1hZ2VS
ZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6On5HSUZJbWFnZVJlYWRlcik6CisgICAg
ICAgIChHSUZJbWFnZVJlYWRlcjo6aW1hZ2VzQ291bnQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6OmZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6cGFyc2VGYWlsZWQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6Omlz
Rmlyc3RGcmFtZSk6CisgICAgICAgIE93bnMgYSBsaXN0IG9mIEdJRkZyYW1lQ29udHh0LgorCiAy
MDEzLTAzLTE3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAg
IEVuY2Fwc3VsYXRlIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsIGEgbGl0dGxlIGJldHRlciB5
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjhlZjg4ZjE2YzkyNmE0YjNmZjY1NjFj
YjkyOTI4ZjY5MTkyYjBiNi4uNjdmZjBmZWU0ZTIxNGI2Y2ZjN2M1NzIxZWZmNDczZmZhOGRlODA2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMy0x
NyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEdJRkltYWdlUmVh
ZGVyIHRvIGNvdW50IGZyYW1lcyBhbmQgZGVjb2RlIGluIG9uZSBwYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDQKKworICAgICAgICBSZXZp
ZXdlZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIEFkZGVkIGEgbmV3IEdJRiB1bml0IHRl
c3QgZm9yIHByb2dyZXNzaXZlIGRlY29kaW5nLiBUaGUgdGVzdCBpcyB0byB2ZXJpZnkKKyAgICAg
ICAgdGhhdCBjb250aW51YWxseSByZS1kZWNvZGluZyBhbiBpbWFnZSBvbmUgYWRkaXRpb25hbCBi
eXRlIGF0IGEgdGltZSBwcm9kdWNlcworICAgICAgICB0aGUgc2FtZSBvdXRwdXRzIGFzIHJlcGVh
dGVkbHkgZGVjb2RpbmcgKHdpdGggYnJhbmQgbmV3IGRlY29kZXJzKSB0cnVuY2F0ZWQKKyAgICAg
ICAgdmVyc2lvbnMgb2YgdGhlIGltYWdlIHRoYXQgYXJlIG9uZSBieXRlIGxvbmdlciBlYWNoIHRp
bWUuCisKKyAgICAgICAgKiB0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6VEVTVCk6CisKIDIwMTMtMDMtMTYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDU4
OTguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IGJiODg0MTViYjBjNTY1OGQwMjJh
ODFhZTU0N2JjYzE5N2RlYzJjMDAuLjVlMzdiYmY2ZGZlZGFjYzYwOTU1MWE4OGVkZGExZGJiYjY2
ZTRjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW5zdHJ1bWVu
dGF0aW9uLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1LDcgKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhh
T3B0aW9uIGFscGhhT3B0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1h
Z2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbikKLSAgICAsIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQo
dHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKIHsKIH0K
QEAgLTUyLDkgKzUyLDYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBJbWFnZURlY29kZXI6OnNldERh
dGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBpZiAobV9yZWFkZXIpCiAgICAgICAgIG1f
cmVhZGVyLT5zZXREYXRhKGRhdGEpOwotCi0gICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZy
YW1lIGNvdW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KLSAgICBtX2Fs
cmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CiB9CiAKIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQpAQCAtNzksMjEgKzc2LDcgQEAgYm9vbCBH
SUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkK
IAogc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiB7Ci0gICAgaWYgKCFtX2Fs
cmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBT
Y2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlvciBpZiB0aGUgZGF0YSB3ZXJl
IHRvCi0gICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4gIE1pZ2h0IGJlIGludGVyZXN0
aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKLSAgICAgICAgLy8gZXhpc3RpbmcgcmVhZCBzZXNzaW9u
IHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGNyYXdsCi0gICAgICAgIC8v
IGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdvcnNlIHRoYW4gd2hhdCBJbWFn
ZUlPIGRvZXMgb24KLSAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAoaXQgYWxzbyBjcmF3bHMgYWxs
IHRoZSBkYXRhIGFnYWluKS4KLSAgICAgICAgR0lGSW1hZ2VSZWFkZXIgcmVhZGVyKDApOwotICAg
ICAgICByZWFkZXIuc2V0RGF0YShtX2RhdGEpOwotICAgICAgICByZWFkZXIuZGVjb2RlKEdJRkZy
YW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSk7Ci0gICAgICAgIG1fYWxy
ZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSB0cnVlOwotICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgpKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytpKQotICAgICAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhh
KTsKLSAgICB9Ci0KKyAgICBkZWNvZGUoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUu
c2l6ZSgpOwogfQogCkBAIC0xMDcsOCArOTAsOCBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBl
dGl0aW9uQ291bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBkZWZhdWx0IHRvIGxvb3Bpbmcgb25j
ZSAodGhlIGluaXRpYWwgdmFsdWUgZm9yCiAgICAgLy8gfG1fcmVwZXRpdGlvbkNvdW50fCkuCiAg
ICAgLy8KLSAgICAvLyBUaGVyZSBhcmUgdHdvIGFkZGl0aW9uYWwgd3JpbmtsZXMgaGVyZS4gIEZp
cnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBtYXkKLSAgICAvLyBkZXN0cm95IHRoZSByZWFkZXIs
IG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVzc18KKyAgICAvLyBUaGVyZSBh
cmUgc29tZSBhZGRpdGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xl
YXIoKQorICAgIC8vIG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZy
b20gdGhlIHJlYWRlciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0aXZlIG9uIGZ1dHVyZSBjYWxs
cyBpZiB0aGUgcmVjcmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0aGUKICAgICAvLyBsb29wIGNv
dW50LiAgV2UgZG9uJ3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGluIHRoaXMg
Y2FzZSB0aGUKICAgICAvLyBuZXcgcmVhZGVyIHdpbGwgb25jZSBhZ2FpbiByZXR1cm4gY0xvb3BD
b3VudE5vdFNlZW4sIGFuZCB3ZSB3b24ndApAQCAtMTE4LDcgKzEwMSwxNCBAQCBpbnQgR0lGSW1h
Z2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBjb250aW51
ZSB0byB0cmVhdCBpdCBhcyBhICJsb29wIG9uY2UiIGFuaW1hdGlvbi4gIFdlIGRvbid0IG5lZWQK
ICAgICAvLyBzcGVjaWFsIGNvZGUgaGVyZSBlaXRoZXIsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdl
J2xsIG5ldmVyIGNoYW5nZQogICAgIC8vIHxtX3JlcGV0aXRpb25Db3VudHwgZnJvbSBpdHMgZGVm
YXVsdCB2YWx1ZS4KLSAgICBpZiAobV9yZWFkZXIgJiYgKG1fcmVhZGVyLT5sb29wQ291bnQoKSAh
PSBjTG9vcENvdW50Tm90U2VlbikpCisgICAgLy8KKyAgICAvLyBUaGlyZCwgd2UgdXNlIHRoZSBz
YW1lIEdJRkltYWdlUmVhZGVyIGZvciBjb3VudGluZyBmcmFtZXMgYW5kIHdlIG1pZ2h0CisgICAg
Ly8gc2VlIHRoZSBsb29wIGNvdW50IGFuZCB0aGVuIGVuY291bnRlciBhIGRlY29kaW5nIGVycm9y
IHdoaWNoIGhhcHBlbnMKKyAgICAvLyBsYXRlciBpbiB0aGUgc3RyZWFtLiBJdCBpcyBhbHNvIHBv
c3NpYmxlIHRoYXQgbm8gZnJhbWVzIGFyZSBpbiB0aGUKKyAgICAvLyBzdHJlYW0uIEluIHRoZXNl
IGNhc2VzIHdlIHNob3VsZCBqdXN0IGxvb3Agb25jZS4KKyAgICBpZiAoZmFpbGVkKCkgfHwgKG1f
cmVhZGVyICYmICghbV9yZWFkZXItPmltYWdlc0NvdW50KCkgfHwgbV9yZWFkZXItPnBhcnNlRmFp
bGVkKCkpKSkKKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBjQW5pbWF0aW9uTG9vcE9uY2U7
CisgICAgZWxzZSBpZiAobV9yZWFkZXIgJiYgbV9yZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29w
Q291bnROb3RTZWVuKQogICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29w
Q291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9CkBAIC0zMjEsOSArMzEx
LDMzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUs
IEdJRlF1ZXJ5IHF1ZXJ5KQogICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShtX2RhdGEpOwogICAg
IH0KIAotICAgIC8vIElmIHdlIGNvdWxkbid0IGRlY29kZSB0aGUgaW1hZ2UgYnV0IHdlJ3ZlIHJl
Y2VpdmVkIGFsbCB0aGUgZGF0YSwgZGVjb2RpbmcKLSAgICAvLyBoYXMgZmFpbGVkLgotICAgIGlm
ICghbV9yZWFkZXItPmRlY29kZShxdWVyeSwgaGFsdEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2Vp
dmVkKCkpCisgICAgaWYgKHF1ZXJ5ID09IEdJRlNpemVRdWVyeSkgeworICAgICAgICBpZiAoIW1f
cmVhZGVyLT5kZWNvZGUoR0lGU2l6ZVF1ZXJ5LCBoYWx0QXRGcmFtZSkpCisgICAgICAgICAgICBz
ZXRGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZWFkZXIt
PmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIGhhbHRBdEZyYW1lKSkgeworICAgICAgICBzZXRG
YWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBvbGRT
aXplID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKKyAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUu
cmVzaXplKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gb2xk
U2l6ZTsgaSA8IG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpOyArK2kpCisgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisK
KyAgICBpZiAocXVlcnkgPT0gR0lGRnJhbWVDb3VudFF1ZXJ5KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoR0lGRnVsbFF1ZXJ5LCBoYWx0QXRGcmFtZSkpIHsK
KyAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJ
dCBpcyBhbHNvIGEgZmF0YWwgZXJyb3IgaWYgYWxsIGRhdGEgaXMgcmVjZWl2ZWQgYnV0IHdlIGZh
aWxlZCB0byBkZWNvZGUKKyAgICAvLyBhbGwgZnJhbWVzIGNvbXBsZXRlbHkuCisgICAgaWYgKGlz
QWxsRGF0YVJlY2VpdmVkKCkgJiYgaGFsdEF0RnJhbWUgPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNp
emUoKSAmJiBtX3JlYWRlcikKICAgICAgICAgc2V0RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuaAppbmRleCA1NWY5YjM1NjRmNDEyYzcwNzIxOTFkNzQwNjFiMTk2NzYxNmM2YjZk
Li5mOWUxYjg0ZDMxODFhYTZjNTVmYmFjMjQ4ZWIzMTJlOTU0MmI4YTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCkBAIC03Miw3ICs3Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KICAgICAg
ICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCk7CiAKLSAgICAgICAg
Ym9vbCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50OwogICAgICAgICBib29s
IG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRp
b25Db3VudDsKICAgICAgICAgT3duUHRyPEdJRkltYWdlUmVhZGVyPiBtX3JlYWRlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDU2YzkyNGI3YWZkYTkzMWRkNDU1NDk0ZjgyMGE1Y2E1
NjkzZDczYmYuLjBiNzE5MjMyMmQ1YzI1ZWUyMjNjMTgzNTg1NzNkNjgxMGViNWQ3YTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTgsMjAgKzk4LDIwIEBAIHVzaW5nIFdlYkNvcmU6
OkdJRkltYWdlRGVjb2RlcjsKICNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVsw
XSkKIAogLy8gU2VuZCB0aGUgZGF0YSB0byB0aGUgZGlzcGxheSBmcm9udC1lbmQuCi1ib29sIEdJ
RkltYWdlUmVhZGVyOjpvdXRwdXRSb3coKQorYm9vbCBHSUZMWldDb250ZXh0OjpvdXRwdXRSb3co
KQogewotICAgIGludCBkcm93U3RhcnQgPSBtX2ZyYW1lQ29udGV4dC0+aXJvdzsKLSAgICBpbnQg
ZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5pcm93OworICAgIGludCBkcm93U3RhcnQgPSBpcm93
OworICAgIGludCBkcm93RW5kID0gaXJvdzsKIAogICAgIC8vIEhhZWJlcmxpLWluc3BpcmVkIGhh
Y2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxlCiAgICAgLy8gZGlz
cGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJsaW5kIiBlZmZlY3QgYXMgdGhlIGlt
YWdlIGlzCiAgICAgLy8gbG9hZGVkLiBBZGp1c3QgcGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRv
IGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQogICAgIC8vIGltYWdlIGNyYXdsaW5nIHVwIHRo
ZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMgYXJlIGRyYXduLgotICAgIGlmIChtX2ZyYW1l
Q29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2Vk
ICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQpIHsKKyAgICBpZiAobV9mcmFtZUNvbnRleHQt
PnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFz
cyA8IDQpIHsKICAgICAgICAgdW5zaWduZWQgcm93RHVwID0gMDsKICAgICAgICAgdW5zaWduZWQg
cm93U2hpZnQgPSAwOwogCi0gICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7
CisgICAgICAgIHN3aXRjaCAoaXBhc3MpIHsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg
cm93RHVwID0gNzsKICAgICAgICAgICAgIHJvd1NoaWZ0ID0gMzsKQEAgLTE0OCw4OCArMTQ4LDY1
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dFJvdygpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUgY2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVk
IGEgcm93LgotICAgIGlmIChtX2NsaWVudCAmJiBtX2ZyYW1lQ29udGV4dAotICAgICAgICAmJiAh
bV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1faW1hZ2VzQ291bnQgLSAxLCBtX2x6d0NvbnRleHQu
cm93QnVmZmVyLCBtX2ZyYW1lQ29udGV4dC0+d2lkdGgsCi0gICAgICAgICAgICBkcm93U3RhcnQs
IGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNw
bGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFz
cyA+IDEpKQorICAgIGlmICghbV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1fZnJhbWVDb250ZXh0
LT5mcmFtZUlkLCByb3dCdWZmZXIsIG1fZnJhbWVDb250ZXh0LT53aWR0aCwKKyAgICAgICAgZHJv
d1N0YXJ0LCBkcm93RW5kIC0gZHJvd1N0YXJ0ICsgMSwgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNz
aXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBpcGFzcyA+IDEpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5pbnRlcmxh
Y2VkKQotICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdysrOworICAgICAgICBpcm93Kys7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRl
eHQtPmlwYXNzKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlwYXNzKSB7CiAgICAgICAgICAgICBj
YXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsKLSAgICAg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhl
aWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSA0OworICAgICAgICAgICAg
ICAgIGlyb3cgKz0gODsKKyAgICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4
dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAgICAg
ICAgICAgIGlyb3cgPSA0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5pcm93ICs9IDg7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49
IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPmlwYXNzKys7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93
ID0gMjsKKyAgICAgICAgICAgICAgICBpcm93ICs9IDg7CisgICAgICAgICAgICAgICAgaWYgKGly
b3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBpcGFz
cysrOworICAgICAgICAgICAgICAgICAgICBpcm93ID0gMjsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA0OwotICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOwotICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+aXJvdyA9IDE7CisgICAgICAgICAgICAgICAgaXJvdyArPSA0OworICAg
ICAgICAgICAgICAgIGlmIChpcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaXJvdyA9IDE7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIDQ6Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gMjsKLSAgICAg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhl
aWdodCkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAwOworICAgICAgICAgICAg
ICAgIGlyb3cgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAoaXJvdyA+PSBtX2ZyYW1lQ29udGV4
dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGlwYXNzKys7CisgICAgICAgICAgICAg
ICAgICAgIGlyb3cgPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9mcmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFt
ZUNvbnRleHQtPmhlaWdodCAtIDEpKTsKKyAgICAgICAgfSB3aGlsZSAoaXJvdyA+IChtX2ZyYW1l
Q29udGV4dC0+aGVpZ2h0IC0gMSkpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8g
UGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCisv
LyBSZXR1cm5zIHRydWUgaWYgZGVjb2Rpbmcgd2FzIHN1Y2Nlc3NmdWwuIEluIHRoaXMgY2FzZSB0
aGUgYmxvY2sgd2lsbCBoYXZlIGJlZW4gY29tcGxldGVseSBjb25zdW1lZCBhbmQvb3Igcm93c1Jl
bWFpbmluZyB3aWxsIGJlIDAuCisvLyBPdGhlcndpc2UsIGRlY29kaW5nIGZhaWxlZDsgcmV0dXJu
cyBmYWxzZSBpbiB0aGlzIGNhc2UsIHdoaWNoIHdpbGwgYWx3YXlzIGNhdXNlIHRoZSBHSUZJbWFn
ZVJlYWRlciB0byBzZXQgdGhlICJkZWNvZGUgZmFpbGVkIiBmbGFnLgorYm9vbCBHSUZMWldDb250
ZXh0Ojpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9j
aykKIHsKLSAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQog
ICAgIGludCBjb2RlOwogICAgIGludCBpbmNvZGU7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq
Y2g7CiAKLSAgICAvLyBDb3B5IGFsbCB0aGUgZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMgaW50byBs
b2NhbHMgc28gdGhlIGNvbXBpbGVyCi0gICAgLy8gd29uJ3Qgd29ycnkgYWJvdXQgdGhlbSBiZWlu
ZyBhbGlhc2VkLiBUaGUgbG9jYWxzIHdpbGwgYmUgaG9tZWQKLSAgICAvLyBiYWNrIGludG8gdGhl
IEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCi0gICAgaW50IGF2YWlsID0gbV9s
endDb250ZXh0LmF2YWlsOwotICAgIGludCBiaXRzID0gbV9sendDb250ZXh0LmJpdHM7Ci0gICAg
c2l6ZV90IGNudCA9IGJ5dGVzSW5CbG9jazsKLSAgICBpbnQgY29kZXNpemUgPSBtX2x6d0NvbnRl
eHQuY29kZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrID0gbV9sendDb250ZXh0LmNvZGVtYXNrOwot
ICAgIGludCBvbGRjb2RlID0gbV9sendDb250ZXh0Lm9sZGNvZGU7Ci0gICAgaW50IGNsZWFyQ29k
ZSA9IG1fbHp3Q29udGV4dC5jbGVhckNvZGU7Ci0gICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXIg
PSBtX2x6d0NvbnRleHQuZmlyc3RjaGFyOwotICAgIGludCBkYXR1bSA9IG1fbHp3Q29udGV4dC5k
YXR1bTsKLQotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4mIHByZWZpeCA9IG1fbHp3Q29udGV4
dC5wcmVmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdWZmaXggPSBtX2x6d0NvbnRl
eHQuc3VmZml4OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgc3RhY2sgPSBtX2x6d0NvbnRl
eHQuc3RhY2s7Ci0gICAgc2l6ZV90IHN0YWNrcCA9IG1fbHp3Q29udGV4dC5zdGFja3A7Ci0gICAg
c2l6ZV90IHJvd3AgPSBtX2x6d0NvbnRleHQucm93UG9zaXRpb247Ci0gICAgc2l6ZV90IHdpZHRo
ID0gbV9mcmFtZUNvbnRleHQtPndpZHRoOwotICAgIHNpemVfdCByb3dzUmVtYWluaW5nID0gbV9m
cmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmc7Ci0KLSAgICBpZiAocm93cCA9PSB3aWR0aCkKKyAg
ICBpZiAocm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICNkZWZpbmUgT1VUUFVUX1JPVyBcCkBAIC0yMzcsMTMgKzIxNCwxMiBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5
dGVzSW5CbG9jaykKICAgICAgICAgaWYgKCFvdXRwdXRSb3coKSkgXAogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyBcCiAgICAgICAgIHJvd3NSZW1haW5pbmctLTsgXAotICAgICAgICByb3dwID0g
MDsgXAotICAgICAgICBtX2x6d0NvbnRleHQucm93UG9zaXRpb24gPSAwOyBcCisgICAgICAgIHJv
d1Bvc2l0aW9uID0gMDsgXAogICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpIFwKLSAgICAgICAg
ICAgIGdvdG8gRU5EOyBcCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXAogICAgIH0gd2hpbGUg
KDApCiAKLSAgICBmb3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsgY2grKykgeworICAgIGZvciAo
Y2ggPSBibG9jazsgYnl0ZXNJbkJsb2NrLS0gPiAwOyBjaCsrKSB7CiAgICAgICAgIC8vIEZlZWQg
dGhlIG5leHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4KICAg
ICAgICAgZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKICAgICAgICAgYml0cyArPSA4OwpA
QCAtMjY5LDEyICsyNDUsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5z
aWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAg
Ly8gZW5kLW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEu
CiAgICAgICAgICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVu
dC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChvbGRjb2RlID09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgbV9sendDb250ZXh0LnJvd0J1ZmZlcltyb3dwKytdID0gc3VmZml4W2NvZGVdOwot
ICAgICAgICAgICAgICAgIGlmIChyb3dwID09IHdpZHRoKQorICAgICAgICAgICAgICAgIHJvd0J1
ZmZlcltyb3dQb3NpdGlvbisrXSA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgICAgICAgICBpZiAo
cm93UG9zaXRpb24gPT0gcm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgT1VU
UFVUX1JPVzsKIAogICAgICAgICAgICAgICAgIGZpcnN0Y2hhciA9IG9sZGNvZGUgPSBjb2RlOwpA
QCAtMjg3LDEyICsyNjMsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5z
aWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAg
Y29kZSA9IG9sZGNvZGU7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IE1BWF9CWVRF
UykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZh
aWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJDb2RlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGNvZGUgPj0gTUFYX0JZVEVTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVd
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFp
bGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25seSBob2xkcyBjaGFyYWN0ZXJz
IHRocm91Z2ggc3VmZml4W2F2YWlsIC0gMV0sCiAgICAgICAgICAgICAgICAgLy8gYWxsb3dpbmcg
Y29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3JtZWQK
QEAgLTMwMiw3ICsyNzgsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNp
Z25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKICAgICAgICAgICAgICAgICBj
b2RlID0gcHJlZml4W2NvZGVdOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcCA9PSBNQVhf
QllURVMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5z
ZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YWNrW3N0YWNrcCsrXSA9IGZpcnN0Y2hhciA9
IHN1ZmZpeFtjb2RlXTsKQEAgLTMyNSwzNiArMzAxLDk3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6
OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCBzaXplX3QgYnl0ZXNJbkJsb2NrKQog
CiAgICAgICAgICAgICAvLyBDb3B5IHRoZSBkZWNvZGVkIGRhdGEgb3V0IHRvIHRoZSBzY2FubGlu
ZSBidWZmZXIuCiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgbV9sendDb250ZXh0
LnJvd0J1ZmZlcltyb3dwKytdID0gc3RhY2tbLS1zdGFja3BdOwotICAgICAgICAgICAgICAgIGlm
IChyb3dwID09IHdpZHRoKQorICAgICAgICAgICAgICAgIHJvd0J1ZmZlcltyb3dQb3NpdGlvbisr
XSA9IHN0YWNrWy0tc3RhY2twXTsKKyAgICAgICAgICAgICAgICBpZiAocm93UG9zaXRpb24gPT0g
cm93QnVmZmVyLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JPVzsKICAgICAg
ICAgICAgIH0gd2hpbGUgKHN0YWNrcCA+IDApOwogICAgICAgICB9CiAgICAgfQogCi1FTkQ6Ci0g
ICAgLy8gSG9tZSB0aGUgbG9jYWwgY29waWVzIG9mIHRoZSBHSUYgZGVjb2RlciBzdGF0ZSB2YXJp
YWJsZXMuCi0gICAgbV9sendDb250ZXh0LmF2YWlsID0gYXZhaWw7Ci0gICAgbV9sendDb250ZXh0
LmJpdHMgPSBiaXRzOwotICAgIG1fbHp3Q29udGV4dC5jb2Rlc2l6ZSA9IGNvZGVzaXplOwotICAg
IG1fbHp3Q29udGV4dC5jb2RlbWFzayA9IGNvZGVtYXNrOwotICAgIG1fbHp3Q29udGV4dC5vbGRj
b2RlID0gb2xkY29kZTsKLSAgICBtX2x6d0NvbnRleHQuZmlyc3RjaGFyID0gZmlyc3RjaGFyOwot
ICAgIG1fbHp3Q29udGV4dC5kYXR1bSA9IGRhdHVtOwotICAgIG1fbHp3Q29udGV4dC5zdGFja3Ag
PSBzdGFja3A7Ci0gICAgbV9sendDb250ZXh0LnJvd1Bvc2l0aW9uID0gcm93cDsKLSAgICBtX2Zy
YW1lQ29udGV4dC0+cm93c1JlbWFpbmluZyA9IHJvd3NSZW1haW5pbmc7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKKy8vIFBlcmZvcm0gZGVjb2RpbmcgZm9yIHRoaXMgZnJhbWUuIGZyYW1lRGVjb2Rl
ZCB3aWxsIGJlIHRydWUgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBkZWNvZGVkLgorLy8gUmV0dXJu
cyBmYWxzZSBpZiBhIGRlY29kaW5nIGVycm9yIG9jY3VycmVkLiBUaGlzIGlzIGEgZmF0YWwgZXJy
b3IgYW5kIGNhdXNlcyB0aGUgR0lGSW1hZ2VSZWFkZXIgdG8gc2V0IHRoZSAiZGVjb2RlIGZhaWxl
ZCIgZmxhZy4KKy8vIE90aGVyd2lzZSwgZWl0aGVyIG5vdCBlbm91Z2ggZGF0YSBpcyBhdmFpbGFi
bGUgdG8gZGVjb2RlIGZ1cnRoZXIgdGhhbiBiZWZvcmUsIG9yIHRoZSBuZXcgZGF0YSBoYXMgYmVl
biBkZWNvZGVkIHN1Y2Nlc3NmdWxseTsgcmV0dXJucyB0cnVlIGluIHRoaXMgY2FzZS4KK2Jvb2wg
R0lGRnJhbWVDb250ZXh0OjpkZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQsIGJvb2wqIGZyYW1lRGVj
b2RlZCkKK3sKKyAgICAqZnJhbWVEZWNvZGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2x6d0NvbnRl
eHQpIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgbW9yZSBkYXRhIHRvIHByb3Blcmx5IGluaXRpYWxp
emUgR0lGTFpXQ29udGV4dC4KKyAgICAgICAgaWYgKCFpc0RhdGFTaXplRGVmaW5lZCgpIHx8ICFp
c0hlYWRlckRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIG1f
bHp3Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBHSUZMWldDb250ZXh0KGNsaWVudCwgdGhpcykpOwor
ICAgICAgICBpZiAoIW1fbHp3Q29udGV4dC0+cHJlcGFyZVRvRGVjb2RlKCkpIHsKKyAgICAgICAg
ICAgIG1fbHp3Q29udGV4dC5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgbV9jdXJyZW50THp3QmxvY2sgPSAwOworICAgIH0KKworICAgIC8v
IFNvbWUgYmFkIEdJRnMgaGF2ZSBleHRyYSBibG9ja3MgYmV5b25kIHRoZSBsYXN0IHJvdywgd2hp
Y2ggd2UgZG9uJ3Qgd2FudCB0byBkZWNvZGUuCisgICAgd2hpbGUgKG1fY3VycmVudEx6d0Jsb2Nr
IDwgbV9sendCbG9ja3Muc2l6ZSgpICYmIG1fbHp3Q29udGV4dC0+aGFzUmVtYWluaW5nUm93cygp
KSB7CisgICAgICAgIHNpemVfdCBibG9ja1Bvc2l0aW9uID0gbV9sendCbG9ja3NbbV9jdXJyZW50
THp3QmxvY2tdLmJsb2NrUG9zaXRpb247CisgICAgICAgIHNpemVfdCBibG9ja1NpemUgPSBtX2x6
d0Jsb2Nrc1ttX2N1cnJlbnRMendCbG9ja10uYmxvY2tTaXplOworICAgICAgICBpZiAoYmxvY2tQ
b3NpdGlvbiArIGJsb2NrU2l6ZSA+IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFtX2x6d0NvbnRleHQtPmRvTFpXKGRhdGEgKyBibG9ja1Bvc2l0aW9uLCBi
bG9ja1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK21fY3VycmVu
dEx6d0Jsb2NrOworICAgIH0KKworICAgIC8vIElmIHRoaXMgZnJhbWUgaXMgZGF0YSBjb21wbGV0
ZSB0aGVuIHRoZSBwcmV2aW91cyBsb29wIG11c3QgaGF2ZSBjb21wbGV0ZWx5IGRlY29kZWQgYWxs
IExaVyBibG9ja3MuCisgICAgLy8gVGhlcmUgd2lsbCBiZSBubyBtb3JlIGRlY29kaW5nIGZvciB0
aGlzIGZyYW1lIHNvIGl0J3MgdGltZSB0byBjbGVhbnVwLgorICAgIGlmIChpc0NvbXBsZXRlKCkp
IHsKKyAgICAgICAgKmZyYW1lRGVjb2RlZCA9IHRydWU7CisgICAgICAgIG1fbHp3Q29udGV4dC5j
bGVhcigpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRGVjb2RlIGFsbCBmcmFt
ZXMgYmVmb3JlIGhhbHRBdEZyYW1lLgorLy8gVGhpcyBtZXRob2QgdXNlcyBHSUZGcmFtZUNvbnRl
eHQ6ZGVjb2RlKCkgdG8gZGVjb2RlIGVhY2ggZnJhbWU7IGRlY29kaW5nIGVycm9yIGlzIHJlcG9y
dGVkIHRvIGNsaWVudCBhcyBhIGNyaXRpY2FsIGZhaWx1cmUuCisvLyBSZXR1cm4gdHJ1ZSBpZiBk
ZWNvZGluZyBoYXMgcHJvZ3Jlc3NlZC4gUmV0dXJuIGZhbHNlIGlmIGFuIGVycm9yIGhhcyBvY2N1
cnJlZC4KIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1
ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIHsKICAgICBBU1NFUlQobV9ieXRlc1Jl
YWQgPD0gbV9kYXRhLT5zaXplKCkpOwotICAgIHJldHVybiBkZWNvZGVJbnRlcm5hbChtX2J5dGVz
UmVhZCwgbV9kYXRhLT5zaXplKCkgLSBtX2J5dGVzUmVhZCwgcXVlcnksIGhhbHRBdEZyYW1lKTsK
KworICAgIC8vIFRyeSB0byBiZSB0b2xlcmFudCBhbmQgZG9uJ3QgcmVwb3J0IHBhcnNpbmcgZXJy
b3JzIGJ1dCB3ZSB3aWxsIG5vdCBwYXJzZSBhZ2Fpbi4KKyAgICAvLyBUT0RPOiBSZXBvcnQgcGFy
c2luZyBlcnJvcnMgdG8gY2xpZW50LgorICAgIGlmICghbV9wYXJzZUZhaWxlZCAmJiAhcGFyc2Uo
bV9ieXRlc1JlYWQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRlc1JlYWQsIHF1ZXJ5ID09IEdJRklt
YWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5KSkKKyAgICAgICAgbV9wYXJzZUZhaWxlZCA9IHRydWU7
CisKKyAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgd2hpbGUgKG1fY3VycmVudERlY29kaW5nRnJhbWUgPCBz
dGQ6Om1pbihtX2ZyYW1lcy5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4oaGFsdEF0RnJhbWUp
KSkgeworICAgICAgICBib29sIGZyYW1lRGVjb2RlZCA9IGZhbHNlOworICAgICAgICBHSUZGcmFt
ZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzW21fY3VycmVudERlY29kaW5nRnJhbWVd
LmdldCgpOworCisgICAgICAgIGlmICghY3VycmVudEZyYW1lLT5kZWNvZGUoZGF0YSgwKSwgbV9k
YXRhLT5zaXplKCksIG1fY2xpZW50LCAmZnJhbWVEZWNvZGVkKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAvLyBXZSBuZWVkIG1vcmUgZGF0YSB0byBjb250aW51ZSBkZWNv
ZGluZy4KKyAgICAgICAgaWYgKCFmcmFtZURlY29kZWQpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAoIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRlKG1fY3VycmVudERlY29kaW5nRnJh
bWUsIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lLCBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9k
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKyttX2N1cnJlbnREZWNvZGlu
Z0ZyYW1lOworICAgIH0KKworICAgIC8vIEFsbCBmcmFtZXMgZGVjb2RlZC4KKyAgICBpZiAobV9j
dXJyZW50RGVjb2RpbmdGcmFtZSA9PSBtX2ZyYW1lcy5zaXplKCkgJiYgbV9wYXJzZUNvbXBsZXRl
ZCkKKyAgICAgICAgbV9jbGllbnQtPmdpZkNvbXBsZXRlKCk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLS8vIFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBnaWYg
ZGVjb2Rlci4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRh
UG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVu
c2lnbmVkIGhhbHRBdEZyYW1lKQorLy8gUGFyc2UgaW5jb21pbmcgR0lGIGRhdGEgc3RyZWFtIGlu
dG8gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgorLy8gUmV0dXJuIHRydWUgaWYgcGFyc2luZyBo
YXMgcHJvZ3Jlc3NlZCBvciB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEuCisvLyBSZXR1cm4gZmFs
c2UgaWYgYSBmYXRhbCBlcnJvciBpcyBlbmNvdW50ZXJlZC4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6
OnBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXplT25s
eSkKIHsKICAgICBpZiAoIWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBp
biBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCkBAIC0zNjIsMTIg
KzM5OSwxMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0
YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgIH0KIAogICAgIGlmIChsZW4g
PCBtX2J5dGVzVG9Db25zdW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgLy8gVGhpcyBsb29wIHJlYWRzIGFzIG1hbnkgY29tcG9uZW50cyBmcm9t
IHxtX2RhdGF8IGFzIHBvc3NpYmxlLgogICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBp
dGVyYXRpb24sIGRhdGFQb3NpdGlvbiB3aWxsIGJlIGFkdmFuY2VkIGJ5IG1fYnl0ZXNUb0NvbnN1
bWUgdG8KICAgICAvLyBwb2ludCB0byB0aGUgbmV4dCBjb21wb25lbnQuIGxlbiB3aWxsIGJlIGRl
Y3JlbWVudGVkIGFjY29yZGluZ2x5LgogICAgIHdoaWxlIChsZW4gPj0gbV9ieXRlc1RvQ29uc3Vt
ZSkgeworICAgICAgICBjb25zdCBzaXplX3QgY3VycmVudENvbXBvbmVudFBvc2l0aW9uID0gZGF0
YVBvc2l0aW9uOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjdXJyZW50Q29tcG9uZW50
ID0gZGF0YShkYXRhUG9zaXRpb24pOwogCiAgICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29t
cG9uZW50IGFzIGNvbnN1bWVkLiBOb3RlIHRoYXQgY3VycmVudENvbXBvbmVudCB3aWxsIHJlbWFp
biBwb2ludGVkIGF0IHRoaXMKQEAgLTM3NywyMCArNDE1LDE1IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRklt
YWdlRGVjCiAKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgR0lGTFpX
OgorICAgICAgICAgICAgQVNTRVJUKCFtX2ZyYW1lcy5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
Ly8gbV9ieXRlc1RvQ29uc3VtZSBpcyB0aGUgY3VycmVudCBjb21wb25lbnQgc2l6ZSBiZWNhdXNl
IGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCi0gICAgICAgICAgICBpZiAoIWRvTFpXKGN1cnJlbnRD
b21wb25lbnQsIG1fYnl0ZXNUb0NvbnN1bWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2Fs
bGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KKyAgICAgICAgICAgIG1fZnJhbWVzLmxhc3QoKS0+
YWRkTHp3QmxvY2soY3VycmVudENvbXBvbmVudFBvc2l0aW9uLCBtX2J5dGVzVG9Db25zdW1lKTsK
ICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBHSUZMWldTdGFydDogewotICAgICAgICAgICAgaWYgKHF1ZXJ5ID09IEdJ
RkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7Ci0gICAgICAgICAgICAgICAgaW50IGRhdGFz
aXplID0gKmN1cnJlbnRDb21wb25lbnQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PmRhdGFzaXplID0gZGF0YXNpemU7Ci0gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBMWlcg
cGFyc2VyL2RlY29kZXIuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2x6d0NvbnRleHQucHJlcGFy
ZVRvRGVjb2RlKG1fc2NyZWVuV2lkdGgsIGRhdGFzaXplKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIW1fZnJhbWVzLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICBtX2ZyYW1lcy5sYXN0KCktPnNldERhdGFTaXplKCpjdXJyZW50Q29tcG9uZW50KTsKICAg
ICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTQwMiw3ICs0MzUsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRl
cm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAg
ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKWN1cnJlbnRDb21wb25lbnQsICJHSUY4N2Ei
LCA2KSkKICAgICAgICAgICAgICAgICBtX3ZlcnNpb24gPSA4NzsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBHRVRO
KDcsIEdJRkdsb2JhbEhlYWRlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
NDE1LDYgKzQ0OCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVf
dCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjCiAgICAgICAgICAgICBtX3Nj
cmVlbkhlaWdodCA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAyKTsKIAogICAgICAgICAg
ICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KKyAg
ICAgICAgICAgIC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRpbWVuc2lv
bnMgbGFyZ2VyIHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCiAgICAgICAgICAgICBpZiAo
bV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVp
Z2h0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ2OCw3ICs1MDIsNyBA
QCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9u
LCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgLy8gdW50aWwgd2UgZmluZCBh
biBpbWFnZSBzZXBhcmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCiAgICAgICAgICAgICAvLyBh
IGZpbGUgaXMgY29ycnVwdC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuCiAgICAgICAg
ICAgICBpZiAoKmN1cnJlbnRDb21wb25lbnQgIT0gJywnKQotICAgICAgICAgICAgICAgIHJldHVy
biBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRlcik7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTUyOCwzMCArNTYyLDIzIEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJ
RkltYWdlRGVjCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkNvbnRyb2xFeHRlbnNpb246
IHsKLSAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291
bnRRdWVyeSkgewotICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoKmN1cnJlbnRDb21wb25lbnQgJiAweDEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPnRwaXhlbCA9IGN1cnJlbnRDb21wb25lbnRbM107Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aXNUcmFuc3BhcmVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmluZyBn
ZnggY29udHJvbCBleHRlbnNpb24KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1l
dGhvZCBlbnVtCi0gICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBz
cGVjIQotICAgICAgICAgICAgICAgIGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRDb21w
b25lbnQpID4+IDIpICYgMHg3OwotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kaXNw
b3NhbE1ldGhvZCA9IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kKWRp
c3Bvc2FsTWV0aG9kOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJp
dCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1ZSAzCi0gICAgICAgICAgICAgICAgLy8g
TGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCi0gICAgICAgICAgICAgICAgaWYgKGRp
c3Bvc2FsTWV0aG9kID09IDQpCi0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5k
aXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2
aW91czsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGVsYXlUaW1lID0gR0VUSU5U
MTYoY3VycmVudENvbXBvbmVudCArIDEpICogMTA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICBHSUZGcmFtZUNvbnRleHQqIGN1
cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+aXNUcmFuc3BhcmVudCA9ICpjdXJyZW50Q29tcG9uZW50ICYgMHgxOworICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGcmFtZS0+aXNUcmFuc3BhcmVudCkKKyAgICAgICAgICAgICAgICBjdXJy
ZW50RnJhbWUtPnRwaXhlbCA9IGN1cnJlbnRDb21wb25lbnRbM107CisKKyAgICAgICAgICAgIC8v
IFdlIGlnbm9yZSB0aGUgInVzZXIgaW5wdXQiIGJpdC4KKworICAgICAgICAgICAgLy8gTk9URTog
VGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVt
CisgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCisgICAgICAg
ICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+PiAyKSAmIDB4
NzsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kPihkaXNwb3NhbE1ldGhv
ZCk7CisgICAgICAgICAgICAvLyBTb21lIHNwZWNzIHNheSB0aGF0IGRpc3Bvc2FsIG1ldGhvZCAz
IGlzICJvdmVyd3JpdGUgcHJldmlvdXMiLCBvdGhlcnMgdGhhdCBzZXR0aW5nCisgICAgICAgICAg
ICAvLyB0aGUgdGhpcmQgYml0IG9mIHRoZSBmaWVsZCAoaS5lLiBtZXRob2QgNCkgaXMuIFdlIG1h
cCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLgorICAgICAgICAgICAgaWYgKGRpc3Bvc2FsTWV0aG9k
ID09IDQpCisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IFdl
YkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKKyAgICAgICAgICAg
IGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lID0gR0VUSU5UMTYoY3VycmVudENvbXBvbmVudCArIDEp
ICogMTA7CiAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTgxLDggKzYwOCw5IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRklt
YWdlRGVjCiAKICAgICAgICAgLy8gTmV0c2NhcGUtc3BlY2lmaWMgR0lGIGV4dGVuc2lvbjogYW5p
bWF0aW9uIGxvb3BpbmcuCiAgICAgICAgIGNhc2UgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jazog
eworICAgICAgICAgICAgLy8gR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9uIGFsd2F5cyByZWFk
cyAzIGJ5dGVzIGZyb20gdGhlIHN0cmVhbTsgd2Ugc2hvdWxkIGF0IGxlYXN0IHdhaXQgZm9yIHRo
aXMgYW1vdW50LgogICAgICAgICAgICAgaWYgKCpjdXJyZW50Q29tcG9uZW50KQotICAgICAgICAg
ICAgICAgIEdFVE4oKmN1cnJlbnRDb21wb25lbnQsIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lv
bik7CisgICAgICAgICAgICAgICAgR0VUTihzdGQ6Om1heCgzLCBzdGF0aWNfY2FzdDxpbnQ+KCpj
dXJyZW50Q29tcG9uZW50KSksIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNjEwLDcgKzYzOCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRl
Y29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVj
CiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0byBi
ZSBkZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lvbiBjb2RlcwotICAgICAgICAgICAgICAgIHJldHVy
biBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC02MzAsNyArNjU4LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50
ZXJuYWwoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAg
ICAgICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0
IEdJRjg3YQogICAgICAgICAgICAgICogZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgog
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2RlZAorICAgICAg
ICAgICAgaWYgKGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpCiAgICAgICAgICAgICAgICAgJiYg
KChtX3NjcmVlbkhlaWdodCA8IGhlaWdodCkgfHwgKG1fc2NyZWVuV2lkdGggPCB3aWR0aCkgfHwg
KG1fdmVyc2lvbiA9PSA4NykpKSB7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBo
ZWlnaHQ7CiAgICAgICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHdpZHRoOwpAQCAtNjQ3LDEw
ICs2NzUsMTAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwoc2l6ZV90IGRh
dGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAgICAgICBoZWln
aHQgPSBtX3NjcmVlbkhlaWdodDsKICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fc2NyZWVuV2lk
dGg7CiAgICAgICAgICAgICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFs
dEF0RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVkKSB7CisgICAgICAgICAgICBpZiAocGFyc2VTaXpl
T25seSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3AuIEhh
bmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KICAgICAgICAgICAg
ICAgICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0byByZWFkIHRo
ZSBoZWFkZXIpLgogICAgICAgICAgICAgICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbiArIDkpOwpA
QCAtNjU4LDYyICs2ODYsMzggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwo
c2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6ZV90IGxlbiwgR0lGSW1hZ2VEZWMKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9pbWFnZXND
b3VudCA9IG1faW1hZ2VzRGVjb2RlZCArIDE7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeSA9PSBH
SUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhbV9mcmFtZUNvbnRleHQpCi0gICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0KCk7Ci0KLSAgICAg
ICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT54T2Zmc2V0ID0geE9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
eU9mZnNldCA9IHlPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmhlaWdo
dCA9IGhlaWdodDsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+d2lkdGggPSB3aWR0
aDsKLQotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHRha2VuIGlm
IHRoaXMgaXMgdGhlIGZpcnN0IGltYWdlICovCi0gICAgICAgICAgICAgICAgLyogYmVpbmcgZGVj
b2RlZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KLSAgICAg
ICAgICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRl
IGJ1ZmZlcnMuICAgICAqLwotICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSBzdGQ6Om1h
eChtX3NjcmVlbldpZHRoLCB3aWR0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5I
ZWlnaHQgPCBoZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVp
Z2h0OwotCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDQwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50
ZXJsYWNlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBh
c3MgPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbV9pbWFn
ZXNEZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3Np
dmVEaXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKLSAg
ICAgICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVy
bGkgZGlzcGxheSBoYWNrCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNhdmluZyB0
aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgICAgICAgICAvLyBh
dm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQotICAgICAgICAg
ICAgICAgICAgICAvLyB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNw
bGF5IHN1Y2gKLSAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkKLSAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRl
IGZyb20gbGFzdCBpbWFnZS4KLSAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9
IDA7Ci0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSBtX2Zy
YW1lQ29udGV4dC0+aGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgLy8gYml0cyBwZXIgcGl4ZWwg
aXMgY3VycmVudENvbXBvbmVudFs4XSYweDA3Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIGhhcyBhIGxvY2FsIGNvbG9ybWFwPwotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25l
bnRbOF0gJiAweDgwKSB7CisgICAgICAgICAgICBhZGRGcmFtZUlmTmVjZXNzYXJ5KCk7CisgICAg
ICAgICAgICBHSUZGcmFtZUNvbnRleHQqIGN1cnJlbnRGcmFtZSA9IG1fZnJhbWVzLmxhc3QoKS5n
ZXQoKTsKKworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5zZXRIZWFkZXJEZWZpbmVkKCk7Cisg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAg
Y3VycmVudEZyYW1lLT55T2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFt
ZS0+aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgY3VycmVudEZyYW1lLT53aWR0aCA9IHdp
ZHRoOworICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHN0ZDo6bWF4KG1fc2NyZWVuV2lkdGgs
IHdpZHRoKTsKKyAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gc3RkOjptYXgobV9zY3JlZW5I
ZWlnaHQsIGhlaWdodCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmludGVybGFjZWQgPSBj
dXJyZW50Q29tcG9uZW50WzhdICYgMHg0MDsKKworICAgICAgICAgICAgLy8gT3ZlcmxheWluZyBp
bnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgIC8vIGV4aXN0aW5n
IGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjaworICAgICAgICAgICAg
Ly8gcmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRvCisgICAg
ICAgICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFy
ZQorICAgICAgICAgICAgLy8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3Qg
ZGlzcGxheSBzdWNoCisgICAgICAgICAgICAvLyBpbWFnZXMgcHJvZ3Jlc3NpdmVseS4gV2hpY2gg
bWVhbnMgb25seSB0aGUgZmlyc3QKKyAgICAgICAgICAgIC8vIGZyYW1lIGNhbiBiZSBwcm9ncmVz
c2l2ZWx5IGRpc3BsYXllZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBwb3NzaWJsZSB0
aGF0IGEgbm9uLXRyYW5zcGFyZW50IGZyYW1lCisgICAgICAgICAgICAvLyBjYW4gYmUgaW50ZXJs
YWNlZCBhbmQgcHJvZ3Jlc3NpdmVseSBkaXNwbGF5ZWQuCisgICAgICAgICAgICBjdXJyZW50RnJh
bWUtPnByb2dyZXNzaXZlRGlzcGxheSA9IGN1cnJlbnRGcmFtZUlzRmlyc3RGcmFtZSgpOworCisg
ICAgICAgICAgICBjb25zdCBib29sIGlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBjdXJyZW50Q29t
cG9uZW50WzhdICYgMHg4MDsKKyAgICAgICAgICAgIGlmIChpc0xvY2FsQ29sb3JtYXBEZWZpbmVk
KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHRocmVlIGxvdy1vcmRlciBiaXRzIG9mIGN1cnJl
bnRDb21wb25lbnRbOF0gc3BlY2lmeSB0aGUgYml0cyBwZXIgcGl4ZWwuCiAgICAgICAgICAgICAg
ICAgaW50IG51bUNvbG9ycyA9IDIgPDwgKGN1cnJlbnRDb21wb25lbnRbOF0gJiAweDcpOwogICAg
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsb2NhbENvbG9ybWFwQnl0ZXMgPSAzICogbnVtQ29s
b3JzOwogCiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0
ZSBhZnRlciBpdCBsb2FkcwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewot
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFBvc2l0aW9u
ID0gZGF0YVBvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9j
YWxDb2xvcm1hcFNpemUgPSBudW1Db2xvcnM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGN1cnJlbnRGcmFtZS0+bG9jYWxDb2xvcm1hcFBvc2l0aW9uID0gZGF0YVBvc2l0aW9u
OworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUgPSBudW1D
b2xvcnM7CiAKICAgICAgICAgICAgICAgICBpZiAobGVuIDwgbG9jYWxDb2xvcm1hcEJ5dGVzKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgd2UgaGF2ZSBlbm91Z2ggYnl0ZXMg
dG8gY29uc3VtZSB0aGUgZW50aXJlIGNvbG9ybWFwIGF0IG9uY2UuCkBAIC03MjEsNzAgKzcyNSw1
MyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0
aW9uLCBzaXplX3QgbGVuLCBHSUZJbWFnZURlYwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzTG9jYWxDb2xvcm1h
cERlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGRhdGFQb3NpdGlvbiArPSBsb2NhbENv
bG9ybWFwQnl0ZXM7CiAgICAgICAgICAgICAgICAgbGVuIC09IGxvY2FsQ29sb3JtYXBCeXRlczsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxl
dHRlCi0gICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmlu
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmlzTG9jYWxDb2xvcm1h
cERlZmluZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEdFVE4oMSwgR0lG
TFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IEdJRkltYWdlQ29sb3JtYXA6IHsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkKLSAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRy
dWU7CisgICAgICAgICAgICBBU1NFUlQoIW1fZnJhbWVzLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICBtX2ZyYW1lcy5sYXN0KCktPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOwogICAgICAg
ICAgICAgR0VUTigxLCBHSUZMWldTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgR0lGU3ViQmxvY2s6IHsKLSAgICAgICAgICAgIC8vIFN0aWxsIHdv
cmtpbmcgb24gdGhlIHNhbWUgaW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcgZGF0YSBibG9jay4KICAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBieXRlc0luQmxvY2sgPSAqY3VycmVudENvbXBvbmVudDsK
LSAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhCi0gICAgICAg
ICAgICAgICAgLy8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQgdGVybWlu
YXRvci4KLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYgIW1fZnJhbWVDb250
ZXh0LT5yb3dzUmVtYWluaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4g
aWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCi0gICAgICAgICAgICAgICAgICAg
IEdFVE4oMSwgR0lGU3ViQmxvY2spOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChieXRlc0luQmxvY2spCiAgICAgICAgICAgICAgICAgR0VUTihieXRlc0luQmxvY2ssIEdJRkxa
Vyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVy
ZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2VxdWVuY2UuCi0gICAgICAgICAgICAgICAg
bV9pbWFnZXNEZWNvZGVkKys7Ci0KLSAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZy
YW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgbV9m
cmFtZUNvbnRleHQgJiYgIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRlKG1faW1hZ2VzRGVjb2RlZCAt
IDEsIG1fZnJhbWVDb250ZXh0LT5kZWxheVRpbWUsIG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1l
dGhvZCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJhbWVDb21wbGV0
ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCi0KLSAgICAgICAg
ICAgICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2UKLSAgICAgICAgICAgICAgICBp
ZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbV9m
cmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZpbmlzaGVkIHBhcnNpbmcg
b25lIGZyYW1lOyBQcm9jZXNzIG5leHQgZnJhbWUuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFt
X2ZyYW1lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBzb21lIGJy
b2tlbiBHSUYgZmlsZXMgZG8gbm90IGhhdmUgZW5vdWdoIExaVyBibG9ja3MgdG8gZnVsbHkKKyAg
ICAgICAgICAgICAgICAvLyBkZWNvZGUgYWxsIHJvd3MgYnV0IHdlIHRyZWF0IGl0IGFzIGZyYW1l
IGNvbXBsZXRlLgorICAgICAgICAgICAgICAgIG1fZnJhbWVzLmxhc3QoKS0+c2V0Q29tcGxldGUo
KTsKICAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkRvbmU6
IHsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIEdJRiBpcyBkb25lLCB3ZSBjYW4gc3RvcC4KLSAg
ICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+Z2lmQ29t
cGxldGUoKTsKKyAgICAgICAgICAgIG1fcGFyc2VDb21wbGV0ZWQgPSB0cnVlOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIHNldFJlbWFp
bmluZ0J5dGVzKGxlbik7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5n
Qnl0ZXMpCkBAIC03OTMsMjIgKzc4MCwzMyBAQCB2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1h
aW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCiAgICAgbV9ieXRlc1JlYWQgPSBtX2Rh
dGEtPnNpemUoKSAtIHJlbWFpbmluZ0J5dGVzOwogfQogCi1ib29sIEdJRkxaV0NvbnRleHQ6OnBy
ZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dXaWR0aCwgaW50IGRhdGFzaXplKQordm9pZCBHSUZJ
bWFnZVJlYWRlcjo6YWRkRnJhbWVJZk5lY2Vzc2FyeSgpCiB7CisgICAgaWYgKG1fZnJhbWVzLmlz
RW1wdHkoKSB8fCBtX2ZyYW1lcy5sYXN0KCktPmlzQ29tcGxldGUoKSkKKyAgICAgICAgbV9mcmFt
ZXMuYXBwZW5kKGFkb3B0UHRyKG5ldyBHSUZGcmFtZUNvbnRleHQobV9mcmFtZXMuc2l6ZSgpKSkp
OworfQorCisvLyBGSVhNRTogTW92ZSB0aGlzIG1ldGhvZCB0byBjbG9zZSB0byBkb0xaVygpLgor
Ym9vbCBHSUZMWldDb250ZXh0OjpwcmVwYXJlVG9EZWNvZGUoKQoreworICAgIEFTU0VSVChtX2Zy
YW1lQ29udGV4dC0+aXNEYXRhU2l6ZURlZmluZWQoKSAmJiBtX2ZyYW1lQ29udGV4dC0+aXNIZWFk
ZXJEZWZpbmVkKCkpOworCiAgICAgLy8gU2luY2Ugd2UgdXNlIGEgY29kZXNpemUgb2YgMSBtb3Jl
IHRoYW4gdGhlIGRhdGFzaXplLCB3ZSBuZWVkIHRvIGVuc3VyZQogICAgIC8vIHRoYXQgb3VyIGRh
dGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMiku
CiAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3Rs
eSBhdCA0MDk1LgotICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCisgICAgaWYgKG1f
ZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjbGVhckNvZGUgPSAxIDw8IGRhdGFzaXplOworICAgIGNsZWFyQ29kZSA9IDEg
PDwgbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplOwogICAgIGlmIChjbGVhckNvZGUgPj0gTUFYX0JZ
VEVTKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdmFpbCA9IGNsZWFyQ29kZSArIDI7
CiAgICAgb2xkY29kZSA9IC0xOwotICAgIGNvZGVzaXplID0gZGF0YXNpemUgKyAxOworICAgIGNv
ZGVzaXplID0gbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplICsgMTsKICAgICBjb2RlbWFzayA9ICgx
IDw8IGNvZGVzaXplKSAtIDE7CiAgICAgZGF0dW0gPSBiaXRzID0gMDsKKyAgICBpcGFzcyA9IG1f
ZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID8gMSA6IDA7CisgICAgaXJvdyA9IDA7CiAKICAgICAv
LyBJbml0aWFsaXplIHRoZSB0YWJsZXMgbGF6aWx5LCB0aGlzIGFsbG93cyBmcmFtZSBjb3VudCBx
dWVyeSB0byB1c2UgbGVzcyBtZW1vcnkuCiAgICAgc3VmZml4LnJlc2l6ZShNQVhfQllURVMpOwpA
QCAtODE2LDggKzgxNCw5IEBAIGJvb2wgR0lGTFpXQ29udGV4dDo6cHJlcGFyZVRvRGVjb2RlKHVu
c2lnbmVkIHJvd1dpZHRoLCBpbnQgZGF0YXNpemUpCiAgICAgcHJlZml4LnJlc2l6ZShNQVhfQllU
RVMpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgcm93IGJ1ZmZlci4KLSAgICByb3dCdWZm
ZXIucmVzaXplKHJvd1dpZHRoKTsKKyAgICByb3dCdWZmZXIucmVzaXplKG1fZnJhbWVDb250ZXh0
LT53aWR0aCk7CiAgICAgcm93UG9zaXRpb24gPSAwOworICAgIHJvd3NSZW1haW5pbmcgPSBtX2Zy
YW1lQ29udGV4dC0+aGVpZ2h0OwogCiAgICAgLy8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0
YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCiAgICAgc3VmZml4LmZp
bGwoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGFlMmE4YmIyMWNkODMzMTE2YTlkMTc4
NjhmYWY4NzM5YmJkZjkzZmMuLjc1ZjA2N2I2MDA0YzRkOGMzOWQxNDM3MmU5Y2IxOGM5MjA5ZDY1
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC00Miw2ICs0Miw4IEBACiAvLyBzbyB3ZSB3
aWxsIHRvby4KICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNkZWZpbmUgTUFYX0xaV19CSVRTICAg
ICAgICAgIDEyCkBAIC03NSwxNiArNzcsODEgQEAgZW51bSBHSUZTdGF0ZSB7CiAgICAgR0lGQ29u
c3VtZUNvbW1lbnQKIH07CiAKLS8vIEZyYW1lIG91dHB1dCBzdGF0ZSBtYWNoaW5lLgotc3RydWN0
IEdJRkZyYW1lQ29udGV4dCB7CitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0OworCisvLyBMWlcgZGVj
b2RlciBzdGF0ZSBtYWNoaW5lLgorY2xhc3MgR0lGTFpXQ29udGV4dCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgaW50IGRhdGFzaXplOworICAgIEdJRkxaV0Nv
bnRleHQoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQsIGNvbnN0IEdJRkZyYW1lQ29u
dGV4dCogZnJhbWVDb250ZXh0KQorICAgICAgICA6IHN0YWNrcCgwKQorICAgICAgICAsIGNvZGVz
aXplKDApCisgICAgICAgICwgY29kZW1hc2soMCkKKyAgICAgICAgLCBjbGVhckNvZGUoMCkKKyAg
ICAgICAgLCBhdmFpbCgwKQorICAgICAgICAsIG9sZGNvZGUoMCkKKyAgICAgICAgLCBmaXJzdGNo
YXIoMCkKKyAgICAgICAgLCBiaXRzKDApCisgICAgICAgICwgZGF0dW0oMCkKKyAgICAgICAgLCBp
cGFzcygwKQorICAgICAgICAsIGlyb3coMCkKKyAgICAgICAgLCByb3dQb3NpdGlvbigwKQorICAg
ICAgICAsIHJvd3NSZW1haW5pbmcoMCkKKyAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAg
ICAgICwgbV9mcmFtZUNvbnRleHQoZnJhbWVDb250ZXh0KQorICAgIHsgfQorCisgICAgYm9vbCBw
cmVwYXJlVG9EZWNvZGUoKTsKKyAgICBib29sIG91dHB1dFJvdygpOworICAgIGJvb2wgZG9MWlco
Y29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNpemVfdCBieXRlc0luQmxvY2spOworICAgIGJv
b2wgaGFzUmVtYWluaW5nUm93cygpIHsgcmV0dXJuIHJvd3NSZW1haW5pbmc7IH0KKworcHJpdmF0
ZToKKyAgICAvLyBMWlcgZGVjb2Rpbmcgc3RhdGVzIGFuZCBvdXRwdXQgc3RhdGVzLgorICAgIHNp
emVfdCBzdGFja3A7IC8vIEN1cnJlbnQgc3RhY2sgcG9pbnRlci4KKyAgICBpbnQgY29kZXNpemU7
CisgICAgaW50IGNvZGVtYXNrOworICAgIGludCBjbGVhckNvZGU7IC8vIENvZGV3b3JkIHVzZWQg
dG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJlc2V0LgorICAgIGludCBhdmFpbDsgLy8gSW5kZXggb2Yg
bmV4dCBhdmFpbGFibGUgc2xvdCBpbiBkaWN0aW9uYXJ5LgorICAgIGludCBvbGRjb2RlOworICAg
IHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyOworICAgIGludCBiaXRzOyAvLyBOdW1iZXIgb2YgdW5y
ZWFkIGJpdHMgaW4gImRhdHVtIi4KKyAgICBpbnQgZGF0dW07IC8vIDMyLWJpdCBpbnB1dCBidWZm
ZXIuCiAgICAgaW50IGlwYXNzOyAvLyBJbnRlcmxhY2UgcGFzczsgUmFuZ2VzIDEtNCBpZiBpbnRl
cmxhY2VkLgotICAgIHNpemVfdCByb3dzUmVtYWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBi
ZSBvdXRwdXQuCiAgICAgc2l6ZV90IGlyb3c7IC8vIEN1cnJlbnQgb3V0cHV0IHJvdywgc3RhcnRp
bmcgYXQgemVyby4KKyAgICBzaXplX3Qgcm93UG9zaXRpb247CisgICAgc2l6ZV90IHJvd3NSZW1h
aW5pbmc7IC8vIFJvd3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dC4KKworICAgIFZlY3Rvcjx1bnNp
Z25lZCBzaG9ydD4gcHJlZml4OworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdWZmaXg7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YWNrOworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiByb3dCdWZmZXI7IC8vIFNpbmdsZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyLgorCisgICAg
Ly8gSW5pdGlhbGl6ZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBhbmQgcmVhZC1vbmx5LgorICAgIFdl
YkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CisgICAgY29uc3QgR0lGRnJhbWVDb250
ZXh0KiBtX2ZyYW1lQ29udGV4dDsKK307CiAKLSAgICAvLyBQYXJhbWV0ZXJzIGZvciBpbWFnZSBm
cmFtZSBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZC4KKy8vIERhdGEgc3RydWN0dXJlIGZvciBvbmUg
TFpXIGJsb2NrLgorc3RydWN0IEdJRkxaV0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBHSUZMWldCbG9jayhzaXplX3QgcG9zaXRpb24sIHNpemVfdCBz
aXplKQorICAgICAgICA6IGJsb2NrUG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICwgYmxvY2tT
aXplKHNpemUpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBibG9ja1Bvc2l0aW9uOworICAg
IHNpemVfdCBibG9ja1NpemU7Cit9OworCisvLyBGcmFtZSBvdXRwdXQgc3RhdGUgbWFjaGluZS4K
K3N0cnVjdCBHSUZGcmFtZUNvbnRleHQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIG1lbWJlcnMgdG8gcHJpdmF0ZSBzZWN0
aW9uLgorICAgIGludCBmcmFtZUlkOwogICAgIHVuc2lnbmVkIHhPZmZzZXQ7CiAgICAgdW5zaWdu
ZWQgeU9mZnNldDsgLy8gV2l0aCByZXNwZWN0IHRvICJzY3JlZW4iIG9yaWdpbi4KICAgICB1bnNp
Z25lZCB3aWR0aDsKQEAgLTkzLDYgKzE2MCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRv
IGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCiAgICAgc2l6ZV90IGxvY2FsQ29sb3Jt
YXBQb3NpdGlvbjsgLy8gUGVyLWltYWdlIGNvbG9ybWFwLgogICAgIGludCBsb2NhbENvbG9ybWFw
U2l6ZTsgLy8gU2l6ZSBvZiBsb2NhbCBjb2xvcm1hcCBhcnJheS4KKyAgICBpbnQgZGF0YXNpemU7
CiAgICAgCiAgICAgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkIDogMTsKICAgICBib29sIHBy
b2dyZXNzaXZlRGlzcGxheSA6IDE7IC8vIElmIHRydWUsIGRvIEhhZWJlcmxpIGludGVybGFjZSBo
YWNrLgpAQCAtMTAxLDExICsxNjksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBkZWxheVRp
bWU7IC8vIERpc3BsYXkgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCBmb3IgdGhpcyBpbWFnZSBpbiBh
IG11bHRpLWltYWdlIEdJRi4KIAotICAgIEdJRkZyYW1lQ29udGV4dCgpCi0gICAgICAgIDogZGF0
YXNpemUoMCkKLSAgICAgICAgLCBpcGFzcygwKQotICAgICAgICAsIHJvd3NSZW1haW5pbmcoMCkK
LSAgICAgICAgLCBpcm93KDApCisgICAgR0lGRnJhbWVDb250ZXh0KGludCBpZCkKKyAgICAgICAg
OiBmcmFtZUlkKGlkKQogICAgICAgICAsIHhPZmZzZXQoMCkKICAgICAgICAgLCB5T2Zmc2V0KDAp
CiAgICAgICAgICwgd2lkdGgoMCkKQEAgLTExNCw1NCArMTc5LDQ4IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lm
aWVkKQogICAgICAgICAsIGxvY2FsQ29sb3JtYXBQb3NpdGlvbigwKQogICAgICAgICAsIGxvY2Fs
Q29sb3JtYXBTaXplKDApCisgICAgICAgICwgZGF0YXNpemUoMCkKICAgICAgICAgLCBpc0xvY2Fs
Q29sb3JtYXBEZWZpbmVkKGZhbHNlKQogICAgICAgICAsIHByb2dyZXNzaXZlRGlzcGxheShmYWxz
ZSkKICAgICAgICAgLCBpbnRlcmxhY2VkKGZhbHNlKQogICAgICAgICAsIGlzVHJhbnNwYXJlbnQo
ZmFsc2UpCiAgICAgICAgICwgZGVsYXlUaW1lKDApCisgICAgICAgICwgbV9jdXJyZW50THp3Qmxv
Y2soMCkKKyAgICAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCisgICAgICAgICwgbV9pc0hlYWRl
ckRlZmluZWQoZmFsc2UpCisgICAgICAgICwgbV9pc0RhdGFTaXplRGVmaW5lZChmYWxzZSkKICAg
ICB7CiAgICAgfQogICAgIAogICAgIH5HSUZGcmFtZUNvbnRleHQoKQogICAgIHsKICAgICB9Ci19
OwogCi0vLyBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgotLy8gRklYTUU6IE1ha2UgdGhpcyBh
IGNsYXNzIGFuZCBoaWRlIHByaXZhdGUgbWVtYmVycy4KLXN0cnVjdCBHSUZMWldDb250ZXh0IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHSUZMWldDb250ZXh0
KCkKLSAgICAgICAgOiBzdGFja3AoMCkKLSAgICAgICAgLCBjb2Rlc2l6ZSgwKQotICAgICAgICAs
IGNvZGVtYXNrKDApCi0gICAgICAgICwgY2xlYXJDb2RlKDApCi0gICAgICAgICwgYXZhaWwoMCkK
LSAgICAgICAgLCBvbGRjb2RlKDApCi0gICAgICAgICwgZmlyc3RjaGFyKDApCi0gICAgICAgICwg
Yml0cygwKQotICAgICAgICAsIGRhdHVtKDApCi0gICAgICAgICwgcm93UG9zaXRpb24oMCkKLSAg
ICB7IH0KKyAgICB2b2lkIGFkZEx6d0Jsb2NrKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IHNpemUp
CisgICAgeworICAgICAgICBtX2x6d0Jsb2Nrcy5hcHBlbmQoR0lGTFpXQmxvY2socG9zaXRpb24s
IHNpemUpKTsKKyAgICB9CiAKLSAgICBib29sIHByZXBhcmVUb0RlY29kZSh1bnNpZ25lZCByb3dX
aWR0aCwgaW50IGRhdGFzaXplKTsKKyAgICBib29sIGRlY29kZShjb25zdCB1bnNpZ25lZCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCwg
Ym9vbCogZnJhbWVEZWNvZGVkKTsKIAotICAgIHNpemVfdCBzdGFja3A7IC8vIEN1cnJlbnQgc3Rh
Y2sgcG9pbnRlci4KLSAgICBpbnQgY29kZXNpemU7Ci0gICAgaW50IGNvZGVtYXNrOwotICAgIGlu
dCBjbGVhckNvZGU7IC8vIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJlc2V0
LgotICAgIGludCBhdmFpbDsgLy8gSW5kZXggb2YgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiBkaWN0
aW9uYXJ5LgotICAgIGludCBvbGRjb2RlOwotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyOwot
ICAgIGludCBiaXRzOyAvLyBOdW1iZXIgb2YgdW5yZWFkIGJpdHMgaW4gImRhdHVtIi4KLSAgICBp
bnQgZGF0dW07IC8vIDMyLWJpdCBpbnB1dCBidWZmZXIuCi0gICAgc2l6ZV90IHJvd1Bvc2l0aW9u
OworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQor
ICAgIHZvaWQgc2V0Q29tcGxldGUoKSB7IG1faXNDb21wbGV0ZSA9IHRydWU7IH0KKyAgICBib29s
IGlzSGVhZGVyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIZWFkZXJEZWZpbmVkOyB9Cisg
ICAgdm9pZCBzZXRIZWFkZXJEZWZpbmVkKCkgeyBtX2lzSGVhZGVyRGVmaW5lZCA9IHRydWU7IH0K
KyAgICBib29sIGlzRGF0YVNpemVEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0RhdGFTaXpl
RGVmaW5lZDsgfQorICAgIHZvaWQgc2V0RGF0YVNpemUoaW50IHNpemUpCisgICAgeworICAgICAg
ICBkYXRhc2l6ZSA9IHNpemU7CisgICAgICAgIG1faXNEYXRhU2l6ZURlZmluZWQgPSB0cnVlOwor
ICAgIH0KIAotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gcHJlZml4OwotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBzdWZmaXg7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YWNrOwot
ICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiByb3dCdWZmZXI7IC8vIFNpbmdsZSBzY2FubGluZSB0
ZW1wb3JhcnkgYnVmZmVyLgorcHJpdmF0ZToKKyAgICBPd25QdHI8R0lGTFpXQ29udGV4dD4gbV9s
endDb250ZXh0OworICAgIFZlY3RvcjxHSUZMWldCbG9jaz4gbV9sendCbG9ja3M7IC8vIExaVyBi
bG9ja3MgZm9yIHRoaXMgZnJhbWUuCisgICAgc2l6ZV90IG1fY3VycmVudEx6d0Jsb2NrOworICAg
IGJvb2wgbV9pc0NvbXBsZXRlOworICAgIGJvb2wgbV9pc0hlYWRlckRlZmluZWQ7CisgICAgYm9v
bCBtX2lzRGF0YVNpemVEZWZpbmVkOwogfTsKIAogY2xhc3MgR0lGSW1hZ2VSZWFkZXIgewpAQCAt
MTc5LDIzICsyMzgsMzEgQEAgcHVibGljOgogICAgICAgICAsIG1faXNHbG9iYWxDb2xvcm1hcERl
ZmluZWQoZmFsc2UpCiAgICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAg
ICAgICwgbV9nbG9iYWxDb2xvcm1hcFNpemUoMCkKLSAgICAgICAgLCBtX2ltYWdlc0RlY29kZWQo
MCkKLSAgICAgICAgLCBtX2ltYWdlc0NvdW50KDApCiAgICAgICAgICwgbV9sb29wQ291bnQoY0xv
b3BDb3VudE5vdFNlZW4pCi0gICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKKyAgICAgICAgLCBt
X2N1cnJlbnREZWNvZGluZ0ZyYW1lKDApCisgICAgICAgICwgbV9wYXJzZUZhaWxlZChmYWxzZSkK
KyAgICAgICAgLCBtX3BhcnNlQ29tcGxldGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKICAgICB+
R0lGSW1hZ2VSZWFkZXIoKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1fZnJhbWVDb250ZXh0Owot
ICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBzZXREYXRhKFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBkYXRhKSB7IG1fZGF0YSA9IGRhdGE7IH0K
KyAgICAvLyBGSVhNRTogaGFsdEF0RnJhbWUgc2hvdWxkIGJlIHNpemVfdC4KICAgICBib29sIGRl
Y29kZShXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRG
cmFtZSk7CiAKLSAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0Nv
dW50OyB9CisgICAgc2l6ZV90IGltYWdlc0NvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2ZyYW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAv
LyBUaGlzIGF2b2lkcyBjb3VudGluZyBhbiBlbXB0eSBmcmFtZSB3aGVuIHRoZSBmaWxlIGlzIHRy
dW5jYXRlZCByaWdodCBhZnRlcgorICAgICAgICAvLyBHSUZDb250cm9sRXh0ZW5zaW9uIGJ1dCBi
ZWZvcmUgR0lGSW1hZ2VIZWFkZXIuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGV4dHJhIGNvbXBs
ZXhpdHkgaXMgbm90IG5lY2Vzc2FyeSBhbmQgd2Ugc2hvdWxkIGp1c3QgcmVwb3J0IG1fZnJhbWVz
LnNpemUoKS4KKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzLmxhc3QoKS0+aXNIZWFkZXJEZWZpbmVk
KCkgPyBtX2ZyYW1lcy5zaXplKCkgOiBtX2ZyYW1lcy5zaXplKCkgLSAxOworICAgIH0KICAgICBp
bnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KIAogICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9ybWFwKCkgY29uc3QKQEAgLTIxNiwxMiArMjgzLDE1
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID8gZnJhbWUtPmxvY2FsQ29sb3JtYXBTaXplIDogMDsKICAgICB9CiAKLSAgICBjb25zdCBHSUZG
cmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250ZXh0
OyB9CisgICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudERlY29kaW5nRnJhbWUgPCBtX2ZyYW1lcy5zaXpl
KCkgPyBtX2ZyYW1lc1ttX2N1cnJlbnREZWNvZGluZ0ZyYW1lXS5nZXQoKSA6IDA7CisgICAgfQor
CisgICAgYm9vbCBwYXJzZUZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VGYWlsZWQ7IH0K
IAogcHJpdmF0ZToKLSAgICBib29sIGRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24s
IHNpemVfdCBsZW4sIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnksIHVuc2lnbmVk
IGhhbHRBdEZyYW1lKTsKLSAgICBib29sIG91dHB1dFJvdygpOwotICAgIGJvb2wgZG9MWlcoY29u
c3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworICAgIGJvb2wgcGFyc2Uoc2l6ZV90IGRhdGFQ
b3NpdGlvbiwgc2l6ZV90IGxlbiwgYm9vbCBwYXJzZVNpemVPbmx5KTsKICAgICB2b2lkIHNldFJl
bWFpbmluZ0J5dGVzKHNpemVfdCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhKHNp
emVfdCBkYXRhUG9zaXRpb24pIGNvbnN0CkBAIC0yMjksNiArMjk5LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihtX2Rh
dGEtPmRhdGEoKSkgKyBkYXRhUG9zaXRpb247CiAgICAgfQogCisgICAgdm9pZCBhZGRGcmFtZUlm
TmVjZXNzYXJ5KCk7CisgICAgYm9vbCBjdXJyZW50RnJhbWVJc0ZpcnN0RnJhbWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzLmlzRW1wdHkoKSB8fCAobV9mcmFtZXMuc2l6
ZSgpID09IDF1ICYmICFtX2ZyYW1lc1swXS0+aXNDb21wbGV0ZSgpKTsKKyAgICB9CisKICAgICBX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8gUGFyc2luZyBzdGF0
ZSBtYWNoaW5lLgpAQCAtMjQ0LDE1ICszMjAsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNH
bG9iYWxDb2xvcm1hcERlZmluZWQ7CiAgICAgc2l6ZV90IG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlv
bjsgLy8gKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1hcCBpZiBsb2NhbCBu
b3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IuCiAgICAgaW50IG1fZ2xvYmFsQ29s
b3JtYXBTaXplOyAvLyBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4KLSAgICB1bnNpZ25l
ZCBtX2ltYWdlc0RlY29kZWQ7IC8vIENvdW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRl
ZCBHSUZzLgotICAgIGludCBtX2ltYWdlc0NvdW50OyAvLyBDb3VudGVkIGFsbCBmcmFtZXMgc2Vl
biBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykuCiAgICAgaW50IG1fbG9vcENv
dW50OyAvLyBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbCB0aGUg
bnVtYmVyIG9mIGFuaW1hdGlvbiBsb29wcyBhIEdJRiByZW5kZXJzLgogICAgIAotICAgIEdJRkZy
YW1lQ29udGV4dCogbV9mcmFtZUNvbnRleHQ7Ci0KLSAgICBHSUZMWldDb250ZXh0IG1fbHp3Q29u
dGV4dDsKKyAgICBWZWN0b3I8T3duUHRyPEdJRkZyYW1lQ29udGV4dD4gPiBtX2ZyYW1lczsKKyAg
ICBzaXplX3QgbV9jdXJyZW50RGVjb2RpbmdGcmFtZTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fcGFyc2VGYWlsZWQ7CisgICAgYm9vbCBt
X3BhcnNlQ29tcGxldGVkOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcAppbmRleCBhN2JmNWQ1NTBmNDNi
ZmY4YmJiMDNiYTY3NmJlZTZkOWIzZDlhMTk3Li5iYzZlODExMTU5YzM3ZTkyMjA0ZDIzZmRmYzNh
YzdlOGIxYWRmMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJ
RkltYWdlRGVjb2RlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
R0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlIDxwdWJs
aWMvV2ViVW5pdFRlc3RTdXBwb3J0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwpAQCAtNjYsOSArNjgsMTkgQEAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiByZWFkRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSkKICAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOwogfQogCitzdGF0aWMgUGFzc093blB0cjxH
SUZJbWFnZURlY29kZXI+IGNyZWF0ZURlY29kZXIoKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKTsKK30KKworc3RhdGljIHVu
c2lnbmVkIGhhc2hTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFwKQoreworICAgIHJldHVy
biBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoYml0bWFwLmdldFBpeGVscygpLCBiaXRtYXAuZ2V0
U2l6ZSgpKTsKK30KKwogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBkZWNvZGVUd29GcmFtZXMp
CiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lG
SW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291
cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdl
RGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2Vz
L2FuaW1hdGVkLmdpZiIpOwogICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtOTEsNyAr
MTAzLDcgQEAgVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBkZWNvZGVUd29GcmFtZXMpCiAKIFRF
U1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGUpCiB7Ci0gICAgT3duUHRyPEdJ
RkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdl
U291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZUFwcGxpZWQpKSk7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rlcihj
cmVhdGVEZWNvZGVyKCkpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRG
aWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIpOwog
ICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOwpAQCAtMTE1LDcgKzEyNyw3IEBAIFRFU1QoR0lG
SW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGUpCiAKIFRFU1QoR0lGSW1hZ2VEZWNvZGVy
VGVzdCwgcGFyc2VCeXRlQnlCeXRlKQogewotICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRl
Y29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQ
cmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkp
OworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoY3JlYXRlRGVjb2RlcigpKTsK
IAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsKICAgICBBU1NFUlRfVFJVRShk
YXRhLmdldCgpKTsKQEAgLTE0MCw3ICsxNTIsNyBAQCBURVNUKEdJRkltYWdlRGVjb2RlclRlc3Qs
IHBhcnNlQnl0ZUJ5Qnl0ZSkKIAogVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERl
Y29kZUJ5dGVCeUJ5dGUpCiB7Ci0gICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rlcihh
ZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRp
cGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAg
T3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihjcmVhdGVEZWNvZGVyKCkpOwogCiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLWdpZi13aXRoLW9mZnNldHMuZ2lmIik7CiAgICAgQVNT
RVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xNjksNyArMTgxLDcgQEAgVEVTVChHSUZJbWFnZURl
Y29kZXJUZXN0LCBwYXJzZUFuZERlY29kZUJ5dGVCeUJ5dGUpCiAvLyBTZWNvbmQgZnJhbWUgaW4g
dGhlIGZpbGUgaXMgYnJva2VuIGJ1dCB0ZXN0IHRoYXQgZmlyc3QgZnJhbWUgY2FuIGJlIGRlY29k
ZWQuCiBURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGJyb2tlblNlY29uZEZyYW1lKQogewotICAg
IE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVj
b2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2Ft
bWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+
IGRlY29kZXIoY3JlYXRlRGVjb2RlcigpKTsKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEgPSByZWFkRmlsZSgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9icm9rZW4u
Z2lmIik7CiAgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CkBAIC0xODcsNiArMTk5LDU1IEBA
IFRFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJva2VuU2Vjb25kRnJhbWUpCiAgICAgRVhQRUNU
X0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOwogfQog
CitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHByb2dyZXNzaXZlRGVjb2RlKQoreworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGZ1bGxEYXRhID0gcmVhZEZpbGUoIi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcmFkaWVudC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShmdWxsRGF0
YS5nZXQoKSk7CisgICAgY29uc3Qgc2l6ZV90IGZ1bGxMZW5ndGggPSBmdWxsRGF0YS0+c2l6ZSgp
OworCisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcjsKKyAgICBJbWFnZUZyYW1l
KiBmcmFtZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdHJ1bmNhdGVkSGFzaGVzOworICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gcHJvZ3Jlc3NpdmVIYXNoZXM7CisKKyAgICAvLyBDb21wdXRlIGhhc2hl
cyB3aGVuIHRoZSBmaWxlIGlzIHRydW5jYXRlZC4KKyAgICBjb25zdCBzaXplX3QgaW5jcmVtZW50
ID0gMTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBmdWxsTGVuZ3RoOyBpICs9IGluY3Jl
bWVudCkgeworICAgICAgICBkZWNvZGVyID0gY3JlYXRlRGVjb2RlcigpOworICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnVsbERhdGEtPmRh
dGEoKSwgaSk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgaSA9PSBmdWxs
TGVuZ3RoKTsKKyAgICAgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7
CisgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgIHRydW5jYXRlZEhhc2hlcy5hcHBl
bmQoMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB0cnVuY2F0
ZWRIYXNoZXMuYXBwZW5kKGhhc2hTa0JpdG1hcChmcmFtZS0+Z2V0U2tCaXRtYXAoKSkpOworICAg
IH0KKworICAgIC8vIENvbXB1dGUgaGFzaGVzIHdoZW4gdGhlIGZpbGUgaXMgcHJvZ3Jlc3NpdmVs
eSBkZWNvZGVkLgorICAgIGRlY29kZXIgPSBjcmVhdGVEZWNvZGVyKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPD0gZnVsbExlbmd0aDsgaSArPSBpbmNyZW1lbnQpIHsKKyAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZ1bGxEYXRhLT5k
YXRhKCksIGkpOworICAgICAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIGkgPT0gZnVs
bExlbmd0aCk7CisgICAgICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDAp
OworICAgICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgICAgICBwcm9ncmVzc2l2ZUhhc2hlcy5h
cHBlbmQoMCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBwcm9n
cmVzc2l2ZUhhc2hlcy5hcHBlbmQoaGFzaFNrQml0bWFwKGZyYW1lLT5nZXRTa0JpdG1hcCgpKSk7
CisgICAgfQorCisgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0cnVuY2F0ZWRIYXNoZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRydW5jYXRl
ZEhhc2hlc1tpXSAhPSBwcm9ncmVzc2l2ZUhhc2hlc1tpXSkgeworICAgICAgICAgICAgbWF0Y2gg
PSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVD
VF9UUlVFKG1hdGNoKTsKK30KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcmFkaWVudC5naWYgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcmFkaWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJkZTI4
NmViYmU1ZDk1M2RkNGEyMGU2ODlkOTIzMGIyOTlhM2Q1YwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy
YWwgMTAzNAp6Y21kNmt7Wm8/IzBMUS1ySFU/fWstZjBBR2JBdHRqPzFwUjUpN1R5ISN2fFojY3FG
fEB0UFQjWTdiJiFgRnQtNlIKelVaZlclOTlNVilAZ08+MnBtXlljWmV4JVUxKENkRG5WXntAVTFB
aWNiJSZrKDZAN21Be1FTQjVXYkQpYGxNTW4wCnp1bVAtdGF8YD8qdjJfa3soP31kZ2lVWC1iJFFW
UnNLWGtwJmNPJG4wRlNIXjVRQHFsSTUtVlEpMnlabD90UFkyYwp6O2N6Nz9PbkNuJmo3TU84MmJN
QjR5b3RzR2AwI2FuVCNWKS13N2lUfjE1V0tuYC0/YzhodDNAST0rVjB5X0ZXanIKeiNOYll4UHNm
RWNqRjE+cjxJKiM1NWcxRnhnYzRzUTtWVCl3TnlQTSVuMnBEa0NvbXNfQDVUNSpnbGpfbEIqNjco
CnpFSnh1NkFHZ0E+NXs2JHhhVkc/O0pscVl5OFcoQH47WkktdTwlMTB0OXgoQVkxRG43QHtRblI+
QGNKKW0rYW9gRQp6MGBFPHUmUmtobGVYUGIobFNPTl82bV5gPXM8ckI5aXF4bzcxZmtNc05HKk1g
SSFqQmNRamBpc1FlUkpzc3tPPjcKej01Qj50d21vNHFWWV5KTzdAI189RylXQVAjN1FPNzVeM0Jl
N2VQK2NUJU1GQyM3Vj49O1RFQSNCPnB5R1psUjh2CnpsKk0xYTVmI2JqTUBCXnBaXnozTl5NaDVF
YDtMM1BSaEVGTHF5bD9eJDt7K3pzRDcoQWpkPSZ8QkBkU1ZeTlljZwp6PHJeZC0lNlM/T3JYYHhQ
KFZifipiKiMyeHZBb1VmdUhsQm81VCFGbE1rVUslbDxseDwrVXZwPDYlbWh9NldgPk4KejN5Q3xn
KiMhJl9GUHxfKFRAWF5XcTRNWUYkKUt1JlQ+PDxVc0BTJDxHPGo/P0lnanN8U3o8N2AoUjd6QiFr
c3RPCnpCQmMmRzFXdT5mbGdae3BzQkkxdChfZFYkVmhqMiNNPFhqNGtfT0pYdTZuVzlZJks1fmhO
bG1vdmQ7ezx7ckp0VAp6Pj8+MnhSYVNkKmNwKHV5eno5IVlMRHpjPXBaaElfN3B+aW10aVMjSHdi
NyZBeUIkbDYpY3tIM0koX1BKKzNvNEoKempBbThxeU42YjlfQ0xKSENXaDlRLVN2XkZqbH1SPHZ1
QnpuQ3pQTDxUdnlLQDd+aXBQZXtnWEAkVihHUjw2fk9BCnpBdSVfMVV0empIcEtwQFAzcF5NXyFN
Yz10S0xfcyM7MXReT28wZW5nejVIUWJVZEVRezVOQ1olO0tfd2RMcilyPQp6P2QzZGNWRU81bmN2
TzFyVDQ7S0k7SCkrS3VCfTgodlpKVFlJIzFrUmskMHEwQlN7djghYWVpI1FfQl5Kam1lVmkKej8+
XllFN30zdTRteWcmPGAzIWExPD1lTmNFfE9lY0JGN1JnaikyMSpvNjBFP2IjQEc3I2BtcSZSJkcw
SUNEfmhCCmFOP288Rlo0Sz5ScTZWZU1tKHBpLS02Ykx1QGJ0ZipxZSZBMAoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>