<?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>184418</bug_id>
          
          <creation_ts>2018-04-09 08:04:46 -0700</creation_ts>
          <short_desc>ImageFrame type used by non-Cocoa image decoder should not be the same as that used by ImageSource</short_desc>
          <delta_ts>2018-04-11 06:47:33 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=159819</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>184416</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1412875</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 08:04:46 -0700</bug_when>
    <thetext>ScalableImageDecoder uses ImageFrame class which is meant to be an implementation detail of ImageSource. There are bunch of things in the type that are only used by one or the other client. For hackability there should be an unrelated frame type for ScalableImageDecoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412877</commentid>
    <comment_count>1</comment_count>
      <attachid>337496</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 08:05:43 -0700</bug_when>
    <thetext>Created attachment 337496
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412883</commentid>
    <comment_count>2</comment_count>
      <attachid>337497</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 08:39:46 -0700</bug_when>
    <thetext>Created attachment 337497
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412884</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-09 08:41:10 -0700</bug_when>
    <thetext>Attachment 337497 did not pass style-queue:


ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412888</commentid>
    <comment_count>4</comment_count>
      <attachid>337499</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 09:06:41 -0700</bug_when>
    <thetext>Created attachment 337499
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412891</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-09 09:09:03 -0700</bug_when>
    <thetext>Attachment 337499 did not pass style-queue:


ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412895</commentid>
    <comment_count>6</comment_count>
      <attachid>337501</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 09:28:47 -0700</bug_when>
    <thetext>Created attachment 337501
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412897</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-09 09:31:39 -0700</bug_when>
    <thetext>Attachment 337501 did not pass style-queue:


ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412901</commentid>
    <comment_count>8</comment_count>
      <attachid>337504</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 09:50:19 -0700</bug_when>
    <thetext>Created attachment 337504
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412903</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-09 09:52:45 -0700</bug_when>
    <thetext>Attachment 337504 did not pass style-queue:


ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412905</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-09 09:56:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/39283050&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412909</commentid>
    <comment_count>11</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-09 10:31:24 -0700</bug_when>
    <thetext>There were two types of the ImageFrame. One was named FrameData, which is used by ImageSource. And the other was named ImageFrame, which was used by the non-Cocoa image decoders.

I tried very hard to merge both in one class named ImageFrame; see &lt;http://trac.webkit.org/changeset/206156&gt;. My goal, which I did not have time to do till now, was to have a single cached ImageFrame for all ports and remove the second copy which the non-Cocoa image decoder still keep.

And now, you are making two implementations of ImageFrame again :).

Can you please reconsider this in your patch? There is no real need to have a second copy with non-Cocoa image decoder. They are almost the same expect the one with non-Cocoa image decoder keeps the pixel data and the NativeImage while the one with the ImageSource keeps the NativeImage only.

If you do not have enough time to do that, I would suggest making ScalableImageDecoderFrame a sub-class of ImageFrame. But PLEASE do not have different implementations for the two classes. This basically roll back what I did and make it difficult to remove the double caching issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412913</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 10:41:38 -0700</bug_when>
    <thetext>&gt; I tried very hard to merge both in one class named ImageFrame; see
&gt; &lt;http://trac.webkit.org/changeset/206156&gt;. My goal, which I did not have
&gt; time to do till now, was to have a single cached ImageFrame for all ports
&gt; and remove the second copy which the non-Cocoa image decoder still keep.
&gt; 
&gt; And now, you are making two implementations of ImageFrame again :).

I don&apos;t understand why. The types share almost nothing of any relevance. Even the actual image data is kept in m_backingStore in the decoder case and in m_nativeImage in ImageSource case. 

It makes it very difficult to make any changes to BitmapImage code as some platform specific decoder always breaks. I think the refactoring to merge the types was misguided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412915</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 10:45:42 -0700</bug_when>
    <thetext>If you read the patch you&apos;ll see how much simpler both types are than the combined type. There are a whole bunch of members that are only needed in one use case. All platform specific ifdefs disappear.

ImageFrame can then be further simplified by making it non-copyable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412930</commentid>
    <comment_count>14</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-09 11:12:42 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #12)
&gt; &gt; I tried very hard to merge both in one class named ImageFrame; see
&gt; &gt; &lt;http://trac.webkit.org/changeset/206156&gt;. My goal, which I did not have
&gt; &gt; time to do till now, was to have a single cached ImageFrame for all ports
&gt; &gt; and remove the second copy which the non-Cocoa image decoder still keep.
&gt; &gt; 
&gt; &gt; And now, you are making two implementations of ImageFrame again :).
&gt; 
&gt; I don&apos;t understand why. The types share almost nothing of any relevance.
&gt; Even the actual image data is kept in m_backingStore in the decoder case and
&gt; in m_nativeImage in ImageSource case. 
&gt; 

When ImageSource asks the non CG decoder for image metadata or the NativeImage, the decoder checks first its cache. If the metadata or the NativeImage is not available, it calculates it only once and cache it in the ImageFrame. Then it sends it to the ImageSource which caches it again in the other ImageFrame. All the members which are surrounded by #if !USE(CG) and #endif are shared and used by the decoder and the ImageSource. This means all these data members are shared and have the same meaning:

    DecodingStatus m_decodingStatus { DecodingStatus::Invalid };
    IntSize m_size;

    NativeImagePtr m_nativeImage;
    SubsamplingLevel m_subsamplingLevel { SubsamplingLevel::Default };
    DecodingOptions m_decodingOptions;

    ImageOrientation m_orientation { DefaultImageOrientation };
    Seconds m_duration;
    bool m_hasAlpha { true };

&gt; It makes it very difficult to make any changes to BitmapImage code as some
&gt; platform specific decoder always breaks.

What are you trying to achieve? What difficulties does this merge prevent you from doing?

&gt; I think the refactoring to merge the types was misguided.

If you explain your goal and how the double caching can be solved in the future this will help me understand the purpose of this patch. I am just afraid that I or somebody else comes in the future may say the same thing about it: &quot;I think the refactoring to split the ImageFrame was misguided.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412941</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 11:47:07 -0700</bug_when>
    <thetext>&gt; When ImageSource asks the non CG decoder for image metadata or the
&gt; NativeImage, the decoder checks first its cache. If the metadata or the
&gt; NativeImage is not available, it calculates it only once and cache it in the
&gt; ImageFrame. Then it sends it to the ImageSource which caches it again in the
&gt; other ImageFrame. All the members which are surrounded by #if !USE(CG) and
&gt; #endif are shared and used by the decoder and the ImageSource. This means
&gt; all these data members are shared and have the same meaning:

There are no functional changes in this patch. ImageFrames for ImageSources don&apos;t use m_backingSource and other #if !USE(CG) members at all. Those are only used by the ScalableImageDecoder case. 

The patch makes ImageFrame an implementation detail of ImageSource and adds a new type ScalableImageDecoderFrame that is an implementation detail of ScalableImageDecoder. I think this is better than shared type because

1) They don&apos;t share that much data and what is shared is mostly trivial (size etc).  Most of the functions are also only needed for one case.

2) Most important things (like the actual image data) are stored differently. This 
requires ifs in code to handle. Having unused fields in both cases is confusing.

3) They define enum classes that are used only in one client (DisposalMethod and Caching)

4) ImageSource and ScalableImageDecoder are on different abstraction levels. One is generic WebCore/platform type used by all platforms while another is part of platform specific decoder implementation (cleaning up #ifs is direct benefit).

5) They could share a common base class or a common struct containing shared fields. Considering how simple both types are I don&apos;t think that would be super helpful either.

Also it is not likely that any further additions to ImageFrame would actually be relevant for the Decoder use case, piling on to the unneeded-field problem.

&gt; What are you trying to achieve? What difficulties does this merge prevent
&gt; you from doing?

I&apos;m adding global tracking for image frames so we can manage memory usage for image animations on global basis rather than per-image. Without cleanups this will end up piling on more complexity and technical debt. 

&gt; If you explain your goal and how the double caching can be solved in the
&gt; future this will help me understand the purpose of this patch. I am just
&gt; afraid that I or somebody else comes in the future may say the same thing
&gt; about it: &quot;I think the refactoring to split the ImageFrame was misguided.&quot;

Note that this patch only affects small part of your refactoring. Most of it was really useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412963</commentid>
    <comment_count>16</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-09 12:27:13 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #15)
&gt; &gt; When ImageSource asks the non CG decoder for image metadata or the
&gt; &gt; NativeImage, the decoder checks first its cache. If the metadata or the
&gt; &gt; NativeImage is not available, it calculates it only once and cache it in the
&gt; &gt; ImageFrame. Then it sends it to the ImageSource which caches it again in the
&gt; &gt; other ImageFrame. All the members which are surrounded by #if !USE(CG) and
&gt; &gt; #endif are shared and used by the decoder and the ImageSource. This means
&gt; &gt; all these data members are shared and have the same meaning:
&gt; 
&gt; There are no functional changes in this patch. ImageFrames for ImageSources
&gt; don&apos;t use m_backingSource and other #if !USE(CG) members at all. Those are
&gt; only used by the ScalableImageDecoder case. 
&gt; 

I did not merge ImageFrame and FrameData only because I felt the members can be shared and there is no need to duplicate the code. I merged them because I wanted to fix the double caching problem. If you say, we do not care about the double caching problem for the non-CG decoders, this would be a fine answer for me and I would not raise this issue again and your patch would make sense to me in this case.

&gt; The patch makes ImageFrame an implementation detail of ImageSource and adds
&gt; a new type ScalableImageDecoderFrame that is an implementation detail of
&gt; ScalableImageDecoder. I think this is better than shared type because
&gt; 
&gt; 1) They don&apos;t share that much data and what is shared is mostly trivial
&gt; (size etc).  Most of the functions are also only needed for one case.
&gt; 

I think they do. But as you mentioned the difference between the two usages of the ImageFrame is the backingStore and the disposal method. If we care about the double caching problem have then splitting the code makes it more difficult. If we do not care, then your approach or using the sub-classing is fine.

&gt; 2) Most important things (like the actual image data) are stored
&gt; differently. This 
&gt; requires ifs in code to handle. Having unused fields in both cases is
&gt; confusing.
&gt; 

You mean the backingStore and the disposal method. Right? 

&gt; 3) They define enum classes that are used only in one client (DisposalMethod
&gt; and Caching)
&gt; 

I think we agreed on the difference between the two usages differ in adding the backingStore and the disposal method for the non-CG decoders. Right?

&gt; 4) ImageSource and ScalableImageDecoder are on different abstraction levels.
&gt; One is generic WebCore/platform type used by all platforms while another is
&gt; part of platform specific decoder implementation (cleaning up #ifs is direct
&gt; benefit).
&gt; 

This is correct. This was a temporary stage and I wanted to remove this bad design by having a single cache owned by the ImageSource and accessed by the non-CG decoders.

&gt; 5) They could share a common base class or a common struct containing shared
&gt; fields. Considering how simple both types are I don&apos;t think that would be
&gt; super helpful either.
&gt; 

I explained above the purpose of merging ImageFrame and FrameData was not only because the data is shared but because I wanted to remove the double caching problem. And we are in agreement that all the data members are used by ImageSource and non-CG decoders expect the backingStore and the disposal method.

&gt; Also it is not likely that any further additions to ImageFrame would
&gt; actually be relevant for the Decoder use case, piling on to the
&gt; unneeded-field problem.
&gt; 

I doubt we will have any additions to ImageFrame in the future. And if we do, I think most likely we will be adding a new metadata member which will be calculated by the decoders. This means the non-CG decoders will be calculating it and caching it in the same new data member.

&gt; &gt; What are you trying to achieve? What difficulties does this merge prevent
&gt; &gt; you from doing?
&gt; 
&gt; I&apos;m adding global tracking for image frames so we can manage memory usage
&gt; for image animations on global basis rather than per-image. Without cleanups
&gt; this will end up piling on more complexity and technical debt. 
&gt; 

Sub classing is another solution which will still make removing the double caching solvable. Can you elaborate more what data members you expect to add, if any, to ImageFrame to finish this work?

&gt; &gt; If you explain your goal and how the double caching can be solved in the
&gt; &gt; future this will help me understand the purpose of this patch. I am just
&gt; &gt; afraid that I or somebody else comes in the future may say the same thing
&gt; &gt; about it: &quot;I think the refactoring to split the ImageFrame was misguided.&quot;
&gt; 
&gt; Note that this patch only affects small part of your refactoring. Most of it
&gt; was really useful.

I thank you for appreciating the work I did. Your comment about the merge was misguided is valuable as well. I am trying to understand why you think this was the case and to make sure we are in agreement about this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412997</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-09 13:25:43 -0700</bug_when>
    <thetext>&gt; I did not merge ImageFrame and FrameData only because I felt the members can
&gt; be shared and there is no need to duplicate the code. I merged them because
&gt; I wanted to fix the double caching problem. If you say, we do not care about
&gt; the double caching problem for the non-CG decoders, this would be a fine
&gt; answer for me and I would not raise this issue again and your patch would
&gt; make sense to me in this case.

I don&apos;t quite understand what the &quot;double caching&quot; problem you say your patches solved was (and the patch doesn&apos;t mention anything like that). My patch has no functional changes, it does not revert any fixes. 

Or do you mean that the patch was meant to be some sort of step towards solving a problem that was never completed? Maybe it wasn&apos;t the correct step?

&gt; &gt; 2) Most important things (like the actual image data) are stored
&gt; &gt; differently. This 
&gt; &gt; requires ifs in code to handle. Having unused fields in both cases is
&gt; &gt; confusing.
&gt; &gt; 
&gt; 
&gt; You mean the backingStore and the disposal method. Right? 

m_nativeImage, m_subsamplingLevel and m_decodingOptions are equally meaningless for the decoder client.

&gt; I think we agreed on the difference between the two usages differ in adding
&gt; the backingStore and the disposal method for the non-CG decoders. Right?

I don&apos;t think I have agreed anything like that. See below.

&gt; This is correct. This was a temporary stage and I wanted to remove this bad
&gt; design by having a single cache owned by the ImageSource and accessed by the
&gt; non-CG decoders.

Your refactoring was done 18 months ago. I don&apos;t think it is good for the project to leave temporary stages like that.
 
&gt; I explained above the purpose of merging ImageFrame and FrameData was not
&gt; only because the data is shared but because I wanted to remove the double
&gt; caching problem. And we are in agreement that all the data members are used
&gt; by ImageSource and non-CG decoders expect the backingStore and the disposal
&gt; method.

The following members are only used by one client:

ScalableImageDecoder:
std::unique_ptr&lt;ImageBackingStore&gt; m_backingStore;
DisposalMethod m_disposalMethod { DisposalMethod::Unspecified };

ImageSource:
NativeImagePtr m_nativeImage;
SubsamplingLevel m_subsamplingLevel { SubsamplingLevel::Default };
DecodingOptions m_decodingOptions;

There is also a ton of function that are relevant to only one client as well as the enums. See the patch.

&gt; I doubt we will have any additions to ImageFrame in the future. And if we
&gt; do, I think most likely we will be adding a new metadata member which will
&gt; be calculated by the decoders. This means the non-CG decoders will be
&gt; calculating it and caching it in the same new data member.

I&apos;d like to make ImageFrame non-copyable (see the blocked bug) to be able to efficiently and cleanly track them with maps. I&apos;ll also probably add a backpointer to ImageScource.

&gt; Sub classing is another solution which will still make removing the double
&gt; caching solvable. Can you elaborate more what data members you expect to
&gt; add, if any, to ImageFrame to finish this work?

I don&apos;t know if this is a problem worth solving nor that sharing some random implementation detail between different parts of architecture is really helpful in solving it. I gather it hasn&apos;t been solved over last 18 months so I&apos;m doubtful.

This hypothetical future fix is currently making the code less hackable than it should be, not to mention wasting our time with these unproductive discussions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413292</commentid>
    <comment_count>18</comment_count>
      <attachid>337504</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-10 09:46:45 -0700</bug_when>
    <thetext>Comment on attachment 337504
patch

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

&gt; Source/WebCore/platform/image-decoders/ScalableImageDecoderFrame.cpp:2
&gt; + * Copyright (C) 2016 Apple Inc.  All rights reserved.

2018

&gt; Source/WebCore/platform/image-decoders/ScalableImageDecoderFrame.cpp:-113
&gt;  #if !USE(CG)
&gt; -bool ImageFrame::initialize(const ImageBackingStore&amp; backingStore)

Why we still have this #ifdef? This code will not compile for CG. right?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:389
&gt; +        ScalableImageDecoderFrame::DisposalMethod prevMethod = prevBuffer-&gt;disposalMethod();

I think this can also be auto.

&gt; Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:759
&gt; +    ScalableImageDecoderFrame::DisposalMethod prevMethod = prevBuffer-&gt;disposalMethod();

I thing this can also be auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413641</commentid>
    <comment_count>19</comment_count>
      <attachid>337691</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-11 05:37:56 -0700</bug_when>
    <thetext>Created attachment 337691
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413642</commentid>
    <comment_count>20</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-11 05:39:24 -0700</bug_when>
    <thetext>Attachment 337691 did not pass style-queue:


ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413646</commentid>
    <comment_count>21</comment_count>
      <attachid>337693</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-04-11 06:00:55 -0700</bug_when>
    <thetext>Created attachment 337693
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413647</commentid>
    <comment_count>22</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-11 06:06:11 -0700</bug_when>
    <thetext>Attachment 337693 did not pass style-queue:


ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413659</commentid>
    <comment_count>23</comment_count>
      <attachid>337693</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-11 06:47:31 -0700</bug_when>
    <thetext>Comment on attachment 337693
patch

Clearing flags on attachment: 337693

Committed r230522: &lt;https://trac.webkit.org/changeset/230522&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413660</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-11 06:47:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337496</attachid>
            <date>2018-04-09 08:05:43 -0700</date>
            <delta_ts>2018-04-09 08:39:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate.patch</filename>
            <type>text/plain</type>
            <size>20794</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAKIAogICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCiAgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1Nj
YWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6
ZnJhbWVJc0NvbXBsZQogICAgIC8vIEZJWE1FKDE3NjA4OSk6IGFza2luZyB3aGV0aGVyIGVub3Vn
aCBkYXRhIGhhcyBiZWVuIGFwcGVuZGVkIGZvciBhIGRlY29kZQogICAgIC8vIG9wZXJhdGlvbiB0
byBzdWNjZWVkIHNob3VsZCBub3QgcmVxdWlyZSBkZWNvZGluZyB0aGUgZW50aXJlIGZyYW1lLgog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGltcGxlbWVudGFibGUgaW4gYSB3YXkgdGhh
dCBhbGxvd3MgY29uc3QuCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gY29uc3RfY2FzdDxTY2Fs
YWJsZUltYWdlRGVjb2Rlcio+KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAg
IGF1dG8qIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIqPih0aGlzKS0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+
aXNDb21wbGV0ZSgpOwogfQogCkBAIC0yMDUsNyArMjA1LDcgQEAgU2Vjb25kcyBTY2FsYWJsZUlt
YWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdAogICAgIC8vIEZJWE1FKDE3NjA4OSk6IGFza2luZyBmb3Ig
dGhlIGR1cmF0aW9uIG9mIGEgc3ViLWltYWdlIHNob3VsZCBub3QgcmVxdWlyZSBkZWNvZGluZwog
ICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGltcGxlbWVu
dGFibGUgaW4gYSB3YXkgdGhhdAogICAgIC8vIGFsbG93cyBjb25zdC4KLSAgICBJbWFnZUZyYW1l
KiBidWZmZXIgPSBjb25zdF9jYXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1l
QnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgYXV0byogYnVmZmVyID0gY29uc3RfY2FzdDxTY2Fs
YWJsZUltYWdlRGVjb2Rlcio+KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwogICAg
IGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+aXNJbnZhbGlkKCkpCiAgICAgICAgIHJldHVybiAwX3M7
CiAgICAgCkBAIC0yMjUsNyArMjI1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU2NhbGFibGVJbWFnZURl
Y29kZXI6OmNyZQogICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgYXV0byogYnVmZmVyID0gZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICBp
ZiAoIWJ1ZmZlciB8fCBidWZmZXItPmlzSW52YWxpZCgpIHx8ICFidWZmZXItPmhhc0JhY2tpbmdT
dG9yZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw4ICsyOSw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
I2luY2x1ZGUgIkltYWdlRnJhbWUuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTEz
NCw2ICsxMzQsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBEZWNvZGVzIGFzIG11Y2ggb2YgdGhlIHJl
cXVlc3RlZCBmcmFtZSBhcyBwb3NzaWJsZSwgYW5kIHJldHVybnMgYW4KICAgICAvLyBTY2FsYWJs
ZUltYWdlRGVjb2Rlci1vd25lZCBwb2ludGVyLgorICAgIC8vIEZJWE1FOiBKdXN0IHJlbmFtZSB0
aGlzIGV2ZXJ5d2hlcmUuCisgICAgdXNpbmcgSW1hZ2VGcmFtZSA9IFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWU7CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90KSA9IDA7CiAKICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3Bw
CShyZXZpc2lvbiAyMzAzNzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRnJhbWUuY3BwOjIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCisKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKK3sKK30KKworSW1hZ2VGcmFtZTo6fkltYWdlRnJhbWUo
KQoreworICAgIGNsZWFySW1hZ2UoKTsKK30KKworY29uc3QgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFt
ZTo6ZGVmYXVsdEZyYW1lKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2VGcmFt
ZT4gc2hhcmVkSW5zdGFuY2U7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQorCitJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCit7
CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBt
X2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1czsKKyAgICBtX3NpemUgPSBv
dGhlci5tX3NpemU7CisKKyNpZiAhVVNFKENHKQorICAgIGlmIChvdGhlci5iYWNraW5nU3RvcmUo
KSkKKyAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0b3JlKCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIG1fZGlzcG9zYWxNZXRob2Qg
PSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOworI2VuZGlmCisKKyAgICBtX25hdGl2ZUltYWdlID0g
b3RoZXIubV9uYXRpdmVJbWFnZTsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1
YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kZWNvZGluZ09wdGlvbnMgPSBvdGhlci5tX2RlY29kaW5n
T3B0aW9uczsKKworICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9uOworICAg
IG1fZHVyYXRpb24gPSBvdGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBvdGhlci5t
X2hhc0FscGhhOworICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1lOjpzZXRE
ZWNvZGluZ1N0YXR1cyhEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKK3sKKyAgICBBU1NF
UlQoZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKTsKKyAgICBtX2Rl
Y29kaW5nU3RhdHVzID0gZGVjb2RpbmdTdGF0dXM7Cit9CisKK0RlY29kaW5nU3RhdHVzIEltYWdl
RnJhbWU6OmRlY29kaW5nU3RhdHVzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kZWNvZGluZ1N0
YXR1cyAhPSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOworICAgIHJldHVybiBtX2RlY29kaW5n
U3RhdHVzOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lOjpjbGVhckltYWdlKCkKK3sKKyNpZiAh
VVNFKENHKQorICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgbV9iYWNraW5nU3Rv
cmUgPSBudWxscHRyOworI2VuZGlmCisKKyAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IHRoaXMtPmZyYW1lQnl0
ZXMoKTsKKworICAgIGNsZWFyTmF0aXZlSW1hZ2VTdWJpbWFnZXMobV9uYXRpdmVJbWFnZSk7Cisg
ICAgbV9uYXRpdmVJbWFnZSA9IG51bGxwdHI7CisgICAgbV9kZWNvZGluZ09wdGlvbnMgPSBEZWNv
ZGluZ09wdGlvbnMoKTsKKworICAgIHJldHVybiBmcmFtZUJ5dGVzOworfQorCit1bnNpZ25lZCBJ
bWFnZUZyYW1lOjpjbGVhcigpCit7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IGNsZWFySW1h
Z2UoKTsKKyAgICAqdGhpcyA9IEltYWdlRnJhbWUoKTsKKyAgICByZXR1cm4gZnJhbWVCeXRlczsK
K30KKworI2lmICFVU0UoQ0cpCitib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1h
Z2VCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKK3sKKyAgICBpZiAoJmJhY2tpbmdTdG9yZSA9
PSB0aGlzLT5iYWNraW5nU3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2Jh
Y2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoYmFja2luZ1N0b3JlKTsKKyAg
ICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKK30KKworYm9vbCBJbWFnZUZyYW1l
Ojppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkK
K3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZShzaXplLCBwcmVtdWx0
aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKK30KKyNl
bmRpZgorCitJbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAoreworI2lmICFVU0UoQ0cp
CisgICAgaWYgKGhhc0JhY2tpbmdTdG9yZSgpKQorICAgICAgICByZXR1cm4gYmFja2luZ1N0b3Jl
KCktPnNpemUoKTsKKyNlbmRpZgorICAgIHJldHVybiBtX3NpemU7Cit9CisgICAgCitib29sIElt
YWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdM
ZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmF0aXZlSW1h
Z2UgJiYgKCFzdWJzYW1wbGluZ0xldmVsIHx8ICpzdWJzYW1wbGluZ0xldmVsID49IG1fc3Vic2Ft
cGxpbmdMZXZlbCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aGFzRnVsbFNpemVOYXRpdmVJbWFn
ZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVs
KSBjb25zdAoreworICAgIHJldHVybiBoYXNOYXRpdmVJbWFnZShzdWJzYW1wbGluZ0xldmVsKSAm
JiAobV9kZWNvZGluZ09wdGlvbnMuaXNTeW5jaHJvbm91cygpIHx8IG1fZGVjb2RpbmdPcHRpb25z
Lmhhc0Z1bGxTaXplKCkpOworfQorCitib29sIEltYWdlRnJhbWU6Omhhc0RlY29kZWROYXRpdmVJ
bWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5n
TGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5n
T3B0aW9ucykgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdM
ZXZlbCkgJiYgbV9kZWNvZGluZ09wdGlvbnMuaXNBc3luY2hyb25vdXNDb21wYXRpYmxlV2l0aChk
ZWNvZGluZ09wdGlvbnMpOworfQorCitDb2xvciBJbWFnZUZyYW1lOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzTmF0aXZlSW1hZ2UoKSB8fCBtX3NpemUgIT0g
SW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICByZXR1cm4gbmF0
aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9uYXRpdmVJbWFnZSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3BwCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMjggKzI0LDIyIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRnJhbWUuaCIKKyNpbmNs
dWRlICJTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgiCiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbWFnZUZyYW1lOjpJbWFnZUZy
YW1lKCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUoKQogewogfQogCi1JbWFnZUZyYW1lOjp+SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lOjp+U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSgpCiB7CiAgICAgY2xlYXJJbWFn
ZSgpOwogfQogCi1jb25zdCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpkZWZhdWx0RnJhbWUoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZUZyYW1lPiBzaGFyZWRJbnN0YW5jZTsK
LSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Ci19Ci0KLUltYWdlRnJhbWUmIEltYWdlRnJhbWU6
Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK1NjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUmIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6Om9wZXJhdG9yPShjb25zdCBTY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAg
ICAgICAgIHJldHVybiAqdGhpczsKQEAgLTYxLDggKzU1LDYgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VG
cmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAgIG1fZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rp
c3Bvc2FsTWV0aG9kOwogI2VuZGlmCiAKLSAgICBtX25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRp
dmVJbWFnZTsKLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CiAgICAgbV9kZWNvZGluZ09wdGlvbnMgPSBvdGhlci5tX2RlY29kaW5nT3B0aW9uczsKIAog
ICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9uOwpAQCAtNzEsMTkgKzYzLDE5
IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdT
dGF0dXMgZGVjb2RpbmdTdGF0dXMpCit2b2lkIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OnNl
dERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQogewogICAgIEFT
U0VSVChkZWNvZGluZ1N0YXR1cyAhPSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwogICAgIG1f
ZGVjb2RpbmdTdGF0dXMgPSBkZWNvZGluZ1N0YXR1czsKIH0KIAotRGVjb2RpbmdTdGF0dXMgSW1h
Z2VGcmFtZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAorRGVjb2RpbmdTdGF0dXMgU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAogewogICAgIEFTU0VSVCht
X2RlY29kaW5nU3RhdHVzICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CiAgICAgcmV0dXJu
IG1fZGVjb2RpbmdTdGF0dXM7CiB9CiAKLXVuc2lnbmVkIEltYWdlRnJhbWU6OmNsZWFySW1hZ2Uo
KQordW5zaWduZWQgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6Y2xlYXJJbWFnZSgpCiB7CiAj
aWYgIVVTRShDRykKICAgICBpZiAoaGFzQmFja2luZ1N0b3JlKCkpCkBAIC0xMDIsMTUgKzk0LDE1
IEBAIHVuc2lnbmVkIEltYWdlRnJhbWU6OmNsZWFySW1hZ2UoKQogICAgIHJldHVybiBmcmFtZUJ5
dGVzOwogfQogCi11bnNpZ25lZCBJbWFnZUZyYW1lOjpjbGVhcigpCit1bnNpZ25lZCBTY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhcigpCiB7CiAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9
IGNsZWFySW1hZ2UoKTsKLSAgICAqdGhpcyA9IEltYWdlRnJhbWUoKTsKKyAgICAqdGhpcyA9IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUoKTsKICAgICByZXR1cm4gZnJhbWVCeXRlczsKIH0KIAog
I2lmICFVU0UoQ0cpCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKK2Jvb2wgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6
aW5pdGlhbGl6ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlKQogewogICAg
IGlmICgmYmFja2luZ1N0b3JlID09IHRoaXMtPmJhY2tpbmdTdG9yZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTExOSw3ICsxMTEsNyBAQCBib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUo
Y29uc3QgSW1hZ2VCCiAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlICE9IG51bGxwdHI7CiB9CiAK
LWJvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCitib29sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQogewogICAgIGlm
IChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5LDcgKzEyMSw3
IEBAIGJvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXoKIH0KICNlbmRpZgog
Ci1JbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAorSW50U2l6ZSBTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpzaXplKCkgY29uc3QKIHsKICNpZiAhVVNFKENHKQogICAgIGlmIChoYXNC
YWNraW5nU3RvcmUoKSkKQEAgLTEzNywyOCArMTI5LDUgQEAgSW50U2l6ZSBJbWFnZUZyYW1lOjpz
aXplKCkgY29uc3QKICNlbmRpZgogICAgIHJldHVybiBtX3NpemU7CiB9Ci0gICAgCi1ib29sIElt
YWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdM
ZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmF0aXZlSW1h
Z2UgJiYgKCFzdWJzYW1wbGluZ0xldmVsIHx8ICpzdWJzYW1wbGluZ0xldmVsID49IG1fc3Vic2Ft
cGxpbmdMZXZlbCk7Ci19Ci0KLWJvb2wgSW1hZ2VGcmFtZTo6aGFzRnVsbFNpemVOYXRpdmVJbWFn
ZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVs
KSBjb25zdAotewotICAgIHJldHVybiBoYXNOYXRpdmVJbWFnZShzdWJzYW1wbGluZ0xldmVsKSAm
JiAobV9kZWNvZGluZ09wdGlvbnMuaXNTeW5jaHJvbm91cygpIHx8IG1fZGVjb2RpbmdPcHRpb25z
Lmhhc0Z1bGxTaXplKCkpOwotfQotCi1ib29sIEltYWdlRnJhbWU6Omhhc0RlY29kZWROYXRpdmVJ
bWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5n
TGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5n
T3B0aW9ucykgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdM
ZXZlbCkgJiYgbV9kZWNvZGluZ09wdGlvbnMuaXNBc3luY2hyb25vdXNDb21wYXRpYmxlV2l0aChk
ZWNvZGluZ09wdGlvbnMpOwotfQotCi1Db2xvciBJbWFnZUZyYW1lOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAotewotICAgIGlmICghaGFzTmF0aXZlSW1hZ2UoKSB8fCBtX3NpemUgIT0g
SW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICByZXR1cm4gbmF0
aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9uYXRpdmVJbWFnZSk7Ci19CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oOjIzMDM3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGVjb2RpbmdPcHRpb25zLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisj
aW5jbHVkZSAiSW1hZ2VUeXBlcy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJO
YXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlU291cmNl
OworcHVibGljOgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IE1ldGFkYXRhLCBNZXRhZGF0YUFu
ZEltYWdlIH07CisKKyAgICBJbWFnZUZyYW1lKCk7CisgICAgSW1hZ2VGcmFtZShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIpOyB9CisKKyAgICB+SW1hZ2VGcmFtZSgp
OworCisgICAgc3RhdGljIGNvbnN0IEltYWdlRnJhbWUmIGRlZmF1bHRGcmFtZSgpOworCisgICAg
SW1hZ2VGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKTsKKworICAgIHVu
c2lnbmVkIGNsZWFySW1hZ2UoKTsKKyAgICB1bnNpZ25lZCBjbGVhcigpOworCisjaWYgIVVTRShD
RykKKyAgICBib29sIGluaXRpYWxpemUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUmKTsKKyAgICBi
b29sIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7Cisj
ZW5kaWYKKworICAgIHZvaWQgc2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMpOworICAg
IERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKCkgY29uc3Q7CisKKyAgICBib29sIGlzSW52
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6
OkludmFsaWQ7IH0KKyAgICBib29sIGlzUGFydGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rp
bmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7IH0KKyAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpD
b21wbGV0ZTsgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBzaXpl
UmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gIW1fb3JpZW50YXRpb24udXNl
c1dpZHRoQXNIZWlnaHQoKSA/IHNpemUoKSA6IHNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpOyB9Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdlKCkg
PyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgpIDogMDsgfQor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQorCisjaWYgIVVTRShDRykKKyAgICBlbnVtIGNsYXNzIERpc3Bv
c2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dyb3Vu
ZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKKyAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERpc3Bv
c2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CisgICAgRGlz
cG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0
aG9kOyB9CisjZW5kaWYKKworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQorCisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsg
fTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9v
cmllbnRhdGlvbjsgfQorCisgICAgdm9pZCBzZXREdXJhdGlvbihjb25zdCBTZWNvbmRzJiBkdXJh
dGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICBTZWNvbmRzIGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorCisgICAgdm9pZCBzZXRIYXNBbHBoYShib29s
IGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdCB7IHJldHVybiAhaGFzTWV0YWRhdGEoKSB8fCBtX2hhc0FscGhhOyB9CisKKyAgICBi
b29sIGhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4m
ID0geyB9KSBjb25zdDsKKyAgICBib29sIGhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3Rk
OjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pIGNvbnN0OworICAgIGJvb2wgaGFz
RGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IHN0ZDo6b3B0aW9u
YWw8U3Vic2FtcGxpbmdMZXZlbD4mLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmKSBjb25zdDsKKyAg
ICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIXNpemUoKS5pc0VtcHR5KCk7IH0K
KworI2lmICFVU0UoQ0cpCisgICAgSW1hZ2VCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxs
cHRyOyB9CisgICAgYm9vbCBoYXNCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5n
U3RvcmUoKTsgfQorI2VuZGlmCisKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBEZWNvZGluZ1N0YXR1cyBtX2RlY29kaW5nU3RhdHVzIHsg
RGVjb2RpbmdTdGF0dXM6OkludmFsaWQgfTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworI2lmICFV
U0UoQ0cpCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdT
dG9yZTsKKyAgICBEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kIHsgRGlzcG9zYWxNZXRo
b2Q6OlVuc3BlY2lmaWVkIH07CisjZW5kaWYKKworICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZl
SW1hZ2U7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1w
bGluZ0xldmVsOjpEZWZhdWx0IH07CisgICAgRGVjb2RpbmdPcHRpb25zIG1fZGVjb2RpbmdPcHRp
b25zOworCisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdl
T3JpZW50YXRpb24gfTsKKyAgICBTZWNvbmRzIG1fZHVyYXRpb247CisgICAgYm9vbCBtX2hhc0Fs
cGhhIHsgdHJ1ZSB9OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwyNyArMzYsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFnZUZy
YW1lIHsKLSAgICBmcmllbmQgY2xhc3MgSW1hZ2VTb3VyY2U7CitjbGFzcyBTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lIHsKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBNZXRhZGF0
YSwgTWV0YWRhdGFBbmRJbWFnZSB9OworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUoKTsK
KyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKGNvbnN0IFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KIAotICAgIEltYWdlRnJhbWUoKTsK
LSAgICBJbWFnZUZyYW1lKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhl
cik7IH0KKyAgICB+U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSgpOwogCi0gICAgfkltYWdlRnJh
bWUoKTsKKyAgICBzdGF0aWMgY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgZGVmYXVs
dEZyYW1lKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgSW1hZ2VGcmFtZSYgZGVmYXVsdEZyYW1lKCk7
Ci0KLSAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOwor
ICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIG9wZXJhdG9yPShjb25zdCBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lJiBvdGhlcik7CiAKICAgICB1bnNpZ25lZCBjbGVhckltYWdlKCk7CiAg
ICAgdW5zaWduZWQgY2xlYXIoKTsKIAotI2lmICFVU0UoQ0cpCiAgICAgYm9vbCBpbml0aWFsaXpl
KGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJik7CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IElu
dFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOwotI2VuZGlmCiAKICAgICB2b2lkIHNldERl
Y29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzKTsKICAgICBEZWNvZGluZ1N0YXR1cyBkZWNvZGlu
Z1N0YXR1cygpIGNvbnN0OwpAQCAtNjYsMTUgKzYxLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlz
Q29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3Rh
dHVzOjpDb21wbGV0ZTsgfQogCiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7Ci0gICAgSW50U2l6
ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gIW1fb3JpZW50YXRp
b24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUoKSA6IHNpemUoKS50cmFuc3Bvc2VkU2l6ZSgp
OyB9Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2ZUlt
YWdlKCkgPyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgpIDog
MDsgfQotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3Vic2FtcGxpbmdMZXZlbDsgfQogCi0jaWYgIVVTRShDRykKICAgICBlbnVtIGNsYXNz
IERpc3Bvc2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRvQmFj
a2dyb3VuZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9k
KERpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CiAg
ICAgRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bv
c2FsTWV0aG9kOyB9Ci0jZW5kaWYKIAogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQogCkBAIC04NywyOSArNzcsMTYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0g
aGFzQWxwaGE7IH0KICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gIWhhc01ldGFk
YXRhKCkgfHwgbV9oYXNBbHBoYTsgfQogCi0gICAgYm9vbCBoYXNOYXRpdmVJbWFnZShjb25zdCBz
dGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSkgY29uc3Q7Ci0gICAgYm9vbCBo
YXNGdWxsU2l6ZU5hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZl
bD4mID0geyB9KSBjb25zdDsKLSAgICBib29sIGhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGli
bGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJikgY29uc3Q7Ci0gICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0
IHsgcmV0dXJuICFzaXplKCkuaXNFbXB0eSgpOyB9Ci0KLSNpZiAhVVNFKENHKQogICAgIEltYWdl
QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9y
ZSA/IG1fYmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQogICAgIGJvb2wgaGFzQmFja2lu
Z1N0b3JlKCkgY29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0KLSNlbmRpZgotCi0gICAg
Q29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRGVj
b2RpbmdTdGF0dXMgbV9kZWNvZGluZ1N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkIH07
CiAgICAgSW50U2l6ZSBtX3NpemU7CiAKLSNpZiAhVVNFKENHKQogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgRGlzcG9zYWxNZXRob2Qg
bV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCB9OwotI2VuZGlm
CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBtX25hdGl2ZUltYWdlOwotICAgIFN1YnNhbXBsaW5nTGV2
ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9OwogICAg
IERlY29kaW5nT3B0aW9ucyBtX2RlY29kaW5nT3B0aW9uczsKIAogICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337497</attachid>
            <date>2018-04-09 08:39:46 -0700</date>
            <delta_ts>2018-04-09 09:06:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate-3.patch</filename>
            <type>text/plain</type>
            <size>26020</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAKIAogICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCiAgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJh
bWU6Om9wZXJhdG9yPShjb25zdCAKICAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0
b3JlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAg
IG1fZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwogI2VuZGlmCiAKICAg
ICBtX25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZyYW1lQnl0
ZXMoKSBjb25zdCB7IHJldHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5hcmVhKCkgKiBz
aXplb2YodWludDMyX3QpKS51bnNhZmVHZXQoKSA6IDA7IH0KICAgICBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0K
IAotI2lmICFVU0UoQ0cpCi0gICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IFVuc3BlY2lm
aWVkLCBEb05vdERpc3Bvc2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVUb1ByZXZpb3Vz
IH07Ci0gICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsg
bV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgIERpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQotI2VuZGlmCi0KICAg
ICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlSW1h
Z2U7IH0KIAogICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CkBAIC0xMDUsNyArOTksNiBA
QCBwcml2YXRlOgogCiAjaWYgIVVTRShDRykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxN
ZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQgfTsKICNlbmRpZgogCiAgICAgTmF0
aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIGJvb2wgU2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGUKICAg
ICAvLyBGSVhNRSgxNzYwODkpOiBhc2tpbmcgd2hldGhlciBlbm91Z2ggZGF0YSBoYXMgYmVlbiBh
cHBlbmRlZCBmb3IgYSBkZWNvZGUKICAgICAvLyBvcGVyYXRpb24gdG8gc3VjY2VlZCBzaG91bGQg
bm90IHJlcXVpcmUgZGVjb2RpbmcgdGhlIGVudGlyZSBmcmFtZS4KICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRhYmxlIGluIGEgd2F5IHRoYXQgYWxsb3dzIGNvbnN0Lgot
ICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIq
Pih0aGlzKS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBj
b25zdF9jYXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CiAgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPmlzQ29tcGxldGUoKTsKIH0K
IApAQCAtMjA1LDcgKzIwNSw3IEBAIFNlY29uZHMgU2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1l
RHVyYXQKICAgICAvLyBGSVhNRSgxNzYwODkpOiBhc2tpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiBh
IHN1Yi1pbWFnZSBzaG91bGQgbm90IHJlcXVpcmUgZGVjb2RpbmcKICAgICAvLyB0aGUgZW50aXJl
IGZyYW1lLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRhYmxlIGluIGEgd2F5IHRo
YXQKICAgICAvLyBhbGxvd3MgY29uc3QuCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gY29uc3Rf
Y2FzdDxTY2FsYWJsZUltYWdlRGVjb2Rlcio+KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOworICAgIGF1dG8qIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIq
Pih0aGlzKS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPmlzSW52YWxpZCgpKQogICAgICAgICByZXR1cm4gMF9zOwogICAgIApAQCAtMjI1LDcg
KzIyNSw3IEBAIE5hdGl2ZUltYWdlUHRyIFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmUKICAgICBp
ZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBJbWFn
ZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGF1dG8qIGJ1
ZmZlciA9IGZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CiAgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0ludmFsaWQoKSB8fCAhYnVmZmVyLT5oYXNCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2Nh
bGFibGVJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJJbWFnZUZy
YW1lLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC0xMzQsNiArMTM0LDggQEAgcHVi
bGljOgogCiAgICAgLy8gRGVjb2RlcyBhcyBtdWNoIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUgYXMg
cG9zc2libGUsIGFuZCByZXR1cm5zIGFuCiAgICAgLy8gU2NhbGFibGVJbWFnZURlY29kZXItb3du
ZWQgcG9pbnRlci4KKyAgICAvLyBGSVhNRTogSnVzdCByZW5hbWUgdGhpcyBldmVyeXdoZXJlLgor
ICAgIHVzaW5nIEltYWdlRnJhbWUgPSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOwogICAgIHZp
cnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgPSAwOwogCiAgICAg
Ym9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoy
MzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZTo6SW1hZ2VG
cmFtZSgpCit7Cit9CisKK0ltYWdlRnJhbWU6On5JbWFnZUZyYW1lKCkKK3sKKyAgICBjbGVhcklt
YWdlKCk7Cit9CisKK2NvbnN0IEltYWdlRnJhbWUmIEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlRnJhbWU+IHNoYXJlZEluc3RhbmNl
OworICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKK30KKworSW1hZ2VGcmFtZSYgSW1hZ2VGcmFt
ZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQoreworICAgIGlmICh0aGlzID09
ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9kZWNvZGluZ1N0YXR1cyA9
IG90aGVyLm1fZGVjb2RpbmdTdGF0dXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworCisj
aWYgIVVTRShDRykKKyAgICBpZiAob3RoZXIuYmFja2luZ1N0b3JlKCkpCisgICAgICAgIGluaXRp
YWxpemUoKm90aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKKyAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3Nh
bE1ldGhvZDsKKyNlbmRpZgorCisgICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1h
Z2U7CisgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOwor
ICAgIG1fZGVjb2RpbmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBt
X29yaWVudGF0aW9uID0gb3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX2R1cmF0aW9uID0gb3Ro
ZXIubV9kdXJhdGlvbjsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVj
b2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMpCit7CisgICAgQVNTRVJUKGRlY29kaW5nU3RhdHVz
ICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IGRl
Y29kaW5nU3RhdHVzOworfQorCitEZWNvZGluZ1N0YXR1cyBJbWFnZUZyYW1lOjpkZWNvZGluZ1N0
YXR1cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdT
dGF0dXM6OkRlY29kaW5nKTsKKyAgICByZXR1cm4gbV9kZWNvZGluZ1N0YXR1czsKK30KKwordW5z
aWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXJJbWFnZSgpCit7CisjaWYgIVVTRShDRykKKyAgICBpZiAo
aGFzQmFja2luZ1N0b3JlKCkpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyNl
bmRpZgorCisgICAgaWYgKCFoYXNOYXRpdmVJbWFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisKKyAgICBjbGVh
ck5hdGl2ZUltYWdlU3ViaW1hZ2VzKG1fbmF0aXZlSW1hZ2UpOworICAgIG1fbmF0aXZlSW1hZ2Ug
PSBudWxscHRyOworICAgIG1fZGVjb2RpbmdPcHRpb25zID0gRGVjb2RpbmdPcHRpb25zKCk7CisK
KyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKwordW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXIo
KQoreworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7CisgICAgKnRoaXMg
PSBJbWFnZUZyYW1lKCk7CisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKKyNpZiAhVVNFKENH
KQorYm9vbCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBi
YWNraW5nU3RvcmUpCit7CisgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFja2luZ1N0
b3JlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFn
ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKGJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIG1fYmFja2lu
Z1N0b3JlICE9IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgaWYgKHNpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9
IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
cmV0dXJuIG1fYmFja2luZ1N0b3JlICE9IG51bGxwdHI7Cit9CisjZW5kaWYKKworSW50U2l6ZSBJ
bWFnZUZyYW1lOjpzaXplKCkgY29uc3QKK3sKKyNpZiAhVVNFKENHKQorICAgIGlmIChoYXNCYWNr
aW5nU3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZSgpLT5zaXplKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gbV9zaXplOworfQorICAgIAorYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRp
dmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGlu
Z0xldmVsKSBjb25zdAoreworICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxp
bmdMZXZlbCB8fCAqc3Vic2FtcGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOworfQor
Citib29sIEltYWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRp
b25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRp
b25zLmlzU3luY2hyb25vdXMoKSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsK
K30KKworYm9vbCBJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0
aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxp
bmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhhc05hdGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2Rp
bmdPcHRpb25zLmlzQXN5bmNocm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsK
K30KKworQ29sb3IgSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sK
KyAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCisg
ICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4
ZWxTb2xpZENvbG9yKG1fbmF0aXZlSW1hZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDI4ICsyNCwyMiBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCisjaW5jbHVkZSAiU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZS5oIgogCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCkKIHsKIH0KIAotSW1h
Z2VGcmFtZTo6fkltYWdlRnJhbWUoKQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6flNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUoKQogewogICAgIGNsZWFySW1hZ2UoKTsKIH0KIAotY29uc3Qg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCkKLXsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SW1hZ2VGcmFtZT4gc2hhcmVkSW5zdGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJl
ZEluc3RhbmNlOwotfQotCi1JbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3Qg
SW1hZ2VGcmFtZSYgb3RoZXIpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjpvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRo
aXM7CkBAIC02MSw4ICs1NSw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShj
b25zdCAKICAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3NhbE1ldGhvZDsKICNl
bmRpZgogCi0gICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1hZ2U7Ci0gICAgbV9z
dWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOwogICAgIG1fZGVjb2Rp
bmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CiAKICAgICBtX29yaWVudGF0aW9u
ID0gb3RoZXIubV9vcmllbnRhdGlvbjsKQEAgLTcxLDE5ICs2MywxOSBAQCBJbWFnZUZyYW1lJiBJ
bWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lk
IEltYWdlRnJhbWU6OnNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3Rh
dHVzKQordm9pZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpzZXREZWNvZGluZ1N0YXR1cyhE
ZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKIHsKICAgICBBU1NFUlQoZGVjb2RpbmdTdGF0
dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKTsKICAgICBtX2RlY29kaW5nU3RhdHVzID0g
ZGVjb2RpbmdTdGF0dXM7CiB9CiAKLURlY29kaW5nU3RhdHVzIEltYWdlRnJhbWU6OmRlY29kaW5n
U3RhdHVzKCkgY29uc3QKK0RlY29kaW5nU3RhdHVzIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6
OmRlY29kaW5nU3RhdHVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9kZWNvZGluZ1N0YXR1cyAh
PSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwogICAgIHJldHVybiBtX2RlY29kaW5nU3RhdHVz
OwogfQogCi11bnNpZ25lZCBJbWFnZUZyYW1lOjpjbGVhckltYWdlKCkKK3Vuc2lnbmVkIFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFySW1hZ2UoKQogewogI2lmICFVU0UoQ0cpCiAgICAg
aWYgKGhhc0JhY2tpbmdTdG9yZSgpKQpAQCAtMTAyLDE1ICs5NCwxNSBAQCB1bnNpZ25lZCBJbWFn
ZUZyYW1lOjpjbGVhckltYWdlKCkKICAgICByZXR1cm4gZnJhbWVCeXRlczsKIH0KIAotdW5zaWdu
ZWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQordW5zaWduZWQgU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZTo6Y2xlYXIoKQogewogICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7Ci0g
ICAgKnRoaXMgPSBJbWFnZUZyYW1lKCk7CisgICAgKnRoaXMgPSBTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lKCk7CiAgICAgcmV0dXJuIGZyYW1lQnl0ZXM7CiB9CiAKICNpZiAhVVNFKENHKQotYm9v
bCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBiYWNraW5n
U3RvcmUpCitib29sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUoY29uc3Qg
SW1hZ2VCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKIHsKICAgICBpZiAoJmJhY2tpbmdTdG9y
ZSA9PSB0aGlzLT5iYWNraW5nU3RvcmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTks
NyArMTExLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQgogICAg
IHJldHVybiBtX2JhY2tpbmdTdG9yZSAhPSBudWxscHRyOwogfQogCi1ib29sIEltYWdlRnJhbWU6
OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQor
Ym9vbCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjppbml0aWFsaXplKGNvbnN0IEludFNpemUm
IHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOSw3ICsxMjEsNyBAQCBib29sIEltYWdlRnJh
bWU6OmluaXRpYWxpemUoY29uc3QgSW50U2l6CiB9CiAjZW5kaWYKIAotSW50U2l6ZSBJbWFnZUZy
YW1lOjpzaXplKCkgY29uc3QKK0ludFNpemUgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6c2l6
ZSgpIGNvbnN0CiB7CiAjaWYgIVVTRShDRykKICAgICBpZiAoaGFzQmFja2luZ1N0b3JlKCkpCkBA
IC0xMzcsMjggKzEyOSw1IEBAIEludFNpemUgSW1hZ2VGcmFtZTo6c2l6ZSgpIGNvbnN0CiAjZW5k
aWYKICAgICByZXR1cm4gbV9zaXplOwogfQotICAgIAotYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRp
dmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGlu
Z0xldmVsKSBjb25zdAotewotICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxp
bmdMZXZlbCB8fCAqc3Vic2FtcGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOwotfQot
Ci1ib29sIEltYWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRp
b25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRp
b25zLmlzU3luY2hyb25vdXMoKSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsK
LX0KLQotYm9vbCBJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0
aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxp
bmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc05hdGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2Rp
bmdPcHRpb25zLmlzQXN5bmNocm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsK
LX0KLQotQ29sb3IgSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKLXsK
LSAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCi0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4
ZWxTb2xpZENvbG9yKG1fbmF0aXZlSW1hZ2UpOwotfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFi
bGVJbWFnZURlY29kZXJGcmFtZS5oCShyZXZpc2lvbiAyMzAzNzQpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaDoyMzAzNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgIkRlY29kaW5nT3B0aW9ucy5oIgorI2luY2x1ZGUgIkltYWdlQmFja2luZ1N0
b3JlLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlVHlw
ZXMuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlRnJhbWUgeworICAgIGZyaWVuZCBjbGFzcyBJbWFnZVNvdXJjZTsKK3B1YmxpYzoKKyAgICBl
bnVtIGNsYXNzIENhY2hpbmcgeyBNZXRhZGF0YSwgTWV0YWRhdGFBbmRJbWFnZSB9OworCisgICAg
SW1hZ2VGcmFtZSgpOworICAgIEltYWdlRnJhbWUoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpIHsg
b3BlcmF0b3I9KG90aGVyKTsgfQorCisgICAgfkltYWdlRnJhbWUoKTsKKworICAgIHN0YXRpYyBj
b25zdCBJbWFnZUZyYW1lJiBkZWZhdWx0RnJhbWUoKTsKKworICAgIEltYWdlRnJhbWUmIG9wZXJh
dG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcik7CisKKyAgICB1bnNpZ25lZCBjbGVhckltYWdl
KCk7CisgICAgdW5zaWduZWQgY2xlYXIoKTsKKworI2lmICFVU0UoQ0cpCisgICAgYm9vbCBpbml0
aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJik7CisgICAgYm9vbCBpbml0aWFsaXplKGNv
bnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworI2VuZGlmCisKKyAgICB2b2lk
IHNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzKTsKKyAgICBEZWNvZGluZ1N0YXR1cyBk
ZWNvZGluZ1N0YXR1cygpIGNvbnN0OworCisgICAgYm9vbCBpc0ludmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOyB9CisgICAg
Ym9vbCBpc1BhcnRpYWwoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29k
aW5nU3RhdHVzOjpQYXJ0aWFsOyB9CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1
cm4gbV9kZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0KKworICAg
IEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuICFtX29yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkg
PyBzaXplKCkgOiBzaXplKCkudHJhbnNwb3NlZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5hcmVhKCkg
KiBzaXplb2YodWludDMyX3QpKS51bnNhZmVHZXQoKSA6IDA7IH0KKyAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7
IH0KKworI2lmICFVU0UoQ0cpCisgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IFVuc3Bl
Y2lmaWVkLCBEb05vdERpc3Bvc2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVUb1ByZXZp
b3VzIH07CisgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBtZXRob2Qp
IHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgIERpc3Bvc2FsTWV0aG9kIGRpc3Bv
c2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQorI2VuZGlmCisK
KyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZl
SW1hZ2U7IH0KKworICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgSW1hZ2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKwor
ICAgIHZvaWQgc2V0RHVyYXRpb24oY29uc3QgU2Vjb25kcyYgZHVyYXRpb24pIHsgbV9kdXJhdGlv
biA9IGR1cmF0aW9uOyB9CisgICAgU2Vjb25kcyBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KKworICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBoYXNBbHBoYSkgeyBtX2hh
c0FscGhhID0gaGFzQWxwaGE7IH0KKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
IWhhc01ldGFkYXRhKCkgfHwgbV9oYXNBbHBoYTsgfQorCisgICAgYm9vbCBoYXNOYXRpdmVJbWFn
ZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNGdWxsU2l6ZU5hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2Ft
cGxpbmdMZXZlbD4mID0geyB9KSBjb25zdDsKKyAgICBib29sIGhhc0RlY29kZWROYXRpdmVJbWFn
ZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2
ZWw+JiwgY29uc3QgRGVjb2RpbmdPcHRpb25zJikgY29uc3Q7CisgICAgYm9vbCBoYXNNZXRhZGF0
YSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCkuaXNFbXB0eSgpOyB9CisKKyNpZiAhVVNFKENHKQor
ICAgIEltYWdlQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgIGJvb2wg
aGFzQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0KKyNlbmRp
ZgorCisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgRGVjb2RpbmdTdGF0dXMgbV9kZWNvZGluZ1N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpJ
bnZhbGlkIH07CisgICAgSW50U2l6ZSBtX3NpemU7CisKKyNpZiAhVVNFKENHKQorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgRGlzcG9z
YWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCB9
OworI2VuZGlmCisKKyAgICBOYXRpdmVJbWFnZVB0ciBtX25hdGl2ZUltYWdlOworICAgIFN1YnNh
bXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVs
dCB9OworICAgIERlY29kaW5nT3B0aW9ucyBtX2RlY29kaW5nT3B0aW9uczsKKworICAgIEltYWdl
T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07Cisg
ICAgU2Vjb25kcyBtX2R1cmF0aW9uOworICAgIGJvb2wgbV9oYXNBbHBoYSB7IHRydWUgfTsKK307
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjcgKzM2LDIyIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VGcmFtZSB7Ci0gICAgZnJpZW5k
IGNsYXNzIEltYWdlU291cmNlOworY2xhc3MgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSB7CiBw
dWJsaWM6Ci0gICAgZW51bSBjbGFzcyBDYWNoaW5nIHsgTWV0YWRhdGEsIE1ldGFkYXRhQW5kSW1h
Z2UgfTsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCk7CisgICAgU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZShjb25zdCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBvdGhlcikgeyBv
cGVyYXRvcj0ob3RoZXIpOyB9CiAKLSAgICBJbWFnZUZyYW1lKCk7Ci0gICAgSW1hZ2VGcmFtZShj
b25zdCBJbWFnZUZyYW1lJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIpOyB9CisgICAgflNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUoKTsKIAotICAgIH5JbWFnZUZyYW1lKCk7CisgICAgc3RhdGlj
IGNvbnN0IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGRlZmF1bHRGcmFtZSgpOwogCi0gICAg
c3RhdGljIGNvbnN0IEltYWdlRnJhbWUmIGRlZmF1bHRGcmFtZSgpOwotCi0gICAgSW1hZ2VGcmFt
ZSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKTsKKyAgICBTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lJiBvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYg
b3RoZXIpOwogCiAgICAgdW5zaWduZWQgY2xlYXJJbWFnZSgpOwogICAgIHVuc2lnbmVkIGNsZWFy
KCk7CiAKLSNpZiAhVVNFKENHKQogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBJbWFnZUJhY2tp
bmdTdG9yZSYpOwogICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiwgYm9vbCBwcmVt
dWx0aXBseUFscGhhKTsKLSNlbmRpZgogCiAgICAgdm9pZCBzZXREZWNvZGluZ1N0YXR1cyhEZWNv
ZGluZ1N0YXR1cyk7CiAgICAgRGVjb2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMoKSBjb25zdDsK
QEAgLTY2LDE3ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0K
IAogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuICFtX29yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVp
Z2h0KCkgPyBzaXplKCkgOiBzaXplKCkudHJhbnNwb3NlZFNpemUoKTsgfQotICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5h
cmVhKCkgKiBzaXplb2YodWludDMyX3QpKS51bnNhZmVHZXQoKSA6IDA7IH0KLSAgICBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5n
TGV2ZWw7IH0KIAotI2lmICFVU0UoQ0cpCiAgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7
IFVuc3BlY2lmaWVkLCBEb05vdERpc3Bvc2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVU
b1ByZXZpb3VzIH07CiAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBt
ZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQogICAgIERpc3Bvc2FsTWV0aG9k
IGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQotI2Vu
ZGlmCi0KLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmF0aXZlSW1hZ2U7IH0KIAogICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CiAgICAgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247
IH0KQEAgLTg2LDMwICs3NCwxOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEhhc0FscGhhKGJv
b2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CiAgICAgYm9vbCBoYXNBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuICFoYXNNZXRhZGF0YSgpIHx8IG1faGFzQWxwaGE7IH0KLQotICAg
IGJvb2wgaGFzTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiYgPSB7IH0pIGNvbnN0OwotICAgIGJvb2wgaGFzRnVsbFNpemVOYXRpdmVJbWFnZShjb25zdCBz
dGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSkgY29uc3Q7Ci0gICAgYm9vbCBo
YXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRp
b25hbDxTdWJzYW1wbGluZ0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpIGNvbnN0Owog
ICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpLmlzRW1wdHkoKTsg
fQogCi0jaWYgIVVTRShDRykKICAgICBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51
bGxwdHI7IH0KICAgICBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tp
bmdTdG9yZSgpOyB9Ci0jZW5kaWYKLQotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIERlY29kaW5nU3RhdHVzIG1fZGVjb2RpbmdTdGF0dXMg
eyBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCB9OwogICAgIEludFNpemUgbV9zaXplOwogCi0jaWYg
IVVTRShDRykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOwogICAgIERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2QgeyBEaXNwb3NhbE1l
dGhvZDo6VW5zcGVjaWZpZWQgfTsKLSNlbmRpZgogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRp
dmVJbWFnZTsKLSAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQgfTsKICAgICBEZWNvZGluZ09wdGlvbnMgbV9kZWNvZGluZ09w
dGlvbnM7CiAKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1h
Z2VPcmllbnRhdGlvbiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDIz
MDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTEgQEAgcHVibGljOgog
CiAgICAgLy8gfHBhcmVudHwgaXMgdGhlIGRlY29kZXIgdGhhdCBvd25zIHVzLgogICAgIC8vIHxz
dGFydE9mZnNldHwgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgQk1QIHdpdGhpbiB0aGUgZmls
ZS4KLSAgICAvLyB8YnVmZmVyfCBwb2ludHMgYXQgYW4gZW1wdHkgSW1hZ2VGcmFtZSB0aGF0IHdl
J2xsIGluaXRpYWxpemUgYW5kCisgICAgLy8gfGJ1ZmZlcnwgcG9pbnRzIGF0IGFuIGVtcHR5IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUgdGhhdCB3ZSdsbCBpbml0aWFsaXplIGFuZAogICAgIC8v
IGZpbGwgd2l0aCBkZWNvZGVkIGRhdGEuCiAgICAgQk1QSW1hZ2VSZWFkZXIoU2NhbGFibGVJbWFn
ZURlY29kZXIqIHBhcmVudCwgc2l6ZV90IGRlY29kZWRBbmRIZWFkZXJPZmZzZXQsIHNpemVfdCBp
bWdEYXRhT2Zmc2V0LCBib29sIHVzZXNBbmRNYXNrKTsKIAotICAgIHZvaWQgc2V0QnVmZmVyKElt
YWdlRnJhbWUqIGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QnVm
ZmVyKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZl
cjsgfQogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpIHsgbV9kYXRhID0gZGF0
YTsgfQogCiAgICAgLy8gRG9lcyB0aGUgYWN0dWFsIGRlY29kaW5nLiBJZiB8b25seVNpemV8IGlz
IHRydWUsIGRlY29kaW5nIG9ubHkKQEAgLTI2OSw3ICsyNjksNyBAQCBwcml2YXRlOgogICAgIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyKiBtX3BhcmVudDsKIAogICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBm
b3IgdGhlIHBpeGVsIGRhdGEuCi0gICAgSW1hZ2VGcmFtZSogbV9idWZmZXI7CisgICAgU2NhbGFi
bGVJbWFnZURlY29kZXJGcmFtZSogbV9idWZmZXI7CiAKICAgICAvLyBUaGUgZmlsZSB0byBkZWNv
ZGUuCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VSZWFkZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NzYsMTEgKzU3NiwxMSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0
YVBvCiAgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRo
ZSBEaXNwb3NhbE1ldGhvZCBlbnVtCiAgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0
aGUgR0lGIHNwZWMhCiAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50
Q29tcG9uZW50KSA+PiAyKSAmIDB4NzsKLSAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9z
YWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZD4oZGlzcG9zYWxNZXRob2QpOworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1l
dGhvZCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kPihkaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgICAgICAvLyBTb21lIHNwZWNz
IHNheSB0aGF0IGRpc3Bvc2FsIG1ldGhvZCAzIGlzICJvdmVyd3JpdGUgcHJldmlvdXMiLCBvdGhl
cnMgdGhhdCBzZXR0aW5nCiAgICAgICAgICAgICAvLyB0aGUgdGhpcmQgYml0IG9mIHRoZSBmaWVs
ZCAoaS5lLiBtZXRob2QgNCkgaXMuIFdlIG1hcCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLgogICAg
ICAgICAgICAgaWYgKGRpc3Bvc2FsTWV0aG9kID09IDQpCi0gICAgICAgICAgICAgICAgY3VycmVu
dEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpSZXN0b3JlVG9QcmV2aW91czsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRp
c3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9z
YWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzOwogICAgICAgICAgICAgY3VycmVudEZyYW1lLT5k
ZWxheVRpbWUgPSBHRVRJTlQxNihjdXJyZW50Q29tcG9uZW50ICsgMSkgKiAxMDsKICAgICAgICAg
ICAgIEdFVE4oMSwgR0lGQ29uc3VtZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHdpZHRoOwogICAg
IHVuc2lnbmVkIGhlaWdodDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVu
dCBwaXhlbC4KLSAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3Nh
bE1ldGhvZDsgLy8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgor
ICAgIFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIGRp
c3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBl
dGMuCiAgICAgc2l6ZV90IGxvY2FsQ29sb3JtYXBQb3NpdGlvbjsgLy8gUGVyLWltYWdlIGNvbG9y
bWFwLgogICAgIGludCBsb2NhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBvZiBsb2NhbCBjb2xvcm1h
cCBhcnJheS4KICAgICBpbnQgZGF0YXNpemU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337499</attachid>
            <date>2018-04-09 09:06:41 -0700</date>
            <delta_ts>2018-04-09 09:28:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate-4.patch</filename>
            <type>text/plain</type>
            <size>26621</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAKIAogICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCiAgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJh
bWU6Om9wZXJhdG9yPShjb25zdCAKICAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0
b3JlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAg
IG1fZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwogI2VuZGlmCiAKICAg
ICBtX25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZyYW1lQnl0
ZXMoKSBjb25zdCB7IHJldHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5hcmVhKCkgKiBz
aXplb2YodWludDMyX3QpKS51bnNhZmVHZXQoKSA6IDA7IH0KICAgICBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0K
IAotI2lmICFVU0UoQ0cpCi0gICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IFVuc3BlY2lm
aWVkLCBEb05vdERpc3Bvc2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVUb1ByZXZpb3Vz
IH07Ci0gICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsg
bV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgIERpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQotI2VuZGlmCi0KICAg
ICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlSW1h
Z2U7IH0KIAogICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CkBAIC0xMDUsNyArOTksNiBA
QCBwcml2YXRlOgogCiAjaWYgIVVTRShDRykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxN
ZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQgfTsKICNlbmRpZgogCiAgICAgTmF0
aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIGJvb2wgU2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGUKICAg
ICAvLyBGSVhNRSgxNzYwODkpOiBhc2tpbmcgd2hldGhlciBlbm91Z2ggZGF0YSBoYXMgYmVlbiBh
cHBlbmRlZCBmb3IgYSBkZWNvZGUKICAgICAvLyBvcGVyYXRpb24gdG8gc3VjY2VlZCBzaG91bGQg
bm90IHJlcXVpcmUgZGVjb2RpbmcgdGhlIGVudGlyZSBmcmFtZS4KICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRhYmxlIGluIGEgd2F5IHRoYXQgYWxsb3dzIGNvbnN0Lgot
ICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIq
Pih0aGlzKS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBj
b25zdF9jYXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CiAgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPmlzQ29tcGxldGUoKTsKIH0K
IApAQCAtMjA1LDcgKzIwNSw3IEBAIFNlY29uZHMgU2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1l
RHVyYXQKICAgICAvLyBGSVhNRSgxNzYwODkpOiBhc2tpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiBh
IHN1Yi1pbWFnZSBzaG91bGQgbm90IHJlcXVpcmUgZGVjb2RpbmcKICAgICAvLyB0aGUgZW50aXJl
IGZyYW1lLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRhYmxlIGluIGEgd2F5IHRo
YXQKICAgICAvLyBhbGxvd3MgY29uc3QuCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gY29uc3Rf
Y2FzdDxTY2FsYWJsZUltYWdlRGVjb2Rlcio+KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOworICAgIGF1dG8qIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIq
Pih0aGlzKS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPmlzSW52YWxpZCgpKQogICAgICAgICByZXR1cm4gMF9zOwogICAgIApAQCAtMjI1LDcg
KzIyNSw3IEBAIE5hdGl2ZUltYWdlUHRyIFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmUKICAgICBp
ZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBJbWFn
ZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGF1dG8qIGJ1
ZmZlciA9IGZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CiAgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0ludmFsaWQoKSB8fCAhYnVmZmVyLT5oYXNCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2Nh
bGFibGVJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJJbWFnZUZy
YW1lLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC0xMzQsNiArMTM0LDggQEAgcHVi
bGljOgogCiAgICAgLy8gRGVjb2RlcyBhcyBtdWNoIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUgYXMg
cG9zc2libGUsIGFuZCByZXR1cm5zIGFuCiAgICAgLy8gU2NhbGFibGVJbWFnZURlY29kZXItb3du
ZWQgcG9pbnRlci4KKyAgICAvLyBGSVhNRTogSnVzdCByZW5hbWUgdGhpcyBldmVyeXdoZXJlLgor
ICAgIHVzaW5nIEltYWdlRnJhbWUgPSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOwogICAgIHZp
cnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgPSAwOwogCiAgICAg
Ym9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoy
MzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZTo6SW1hZ2VG
cmFtZSgpCit7Cit9CisKK0ltYWdlRnJhbWU6On5JbWFnZUZyYW1lKCkKK3sKKyAgICBjbGVhcklt
YWdlKCk7Cit9CisKK2NvbnN0IEltYWdlRnJhbWUmIEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlRnJhbWU+IHNoYXJlZEluc3RhbmNl
OworICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKK30KKworSW1hZ2VGcmFtZSYgSW1hZ2VGcmFt
ZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQoreworICAgIGlmICh0aGlzID09
ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9kZWNvZGluZ1N0YXR1cyA9
IG90aGVyLm1fZGVjb2RpbmdTdGF0dXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworCisj
aWYgIVVTRShDRykKKyAgICBpZiAob3RoZXIuYmFja2luZ1N0b3JlKCkpCisgICAgICAgIGluaXRp
YWxpemUoKm90aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKKyAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3Nh
bE1ldGhvZDsKKyNlbmRpZgorCisgICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1h
Z2U7CisgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOwor
ICAgIG1fZGVjb2RpbmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBt
X29yaWVudGF0aW9uID0gb3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX2R1cmF0aW9uID0gb3Ro
ZXIubV9kdXJhdGlvbjsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVj
b2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMpCit7CisgICAgQVNTRVJUKGRlY29kaW5nU3RhdHVz
ICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IGRl
Y29kaW5nU3RhdHVzOworfQorCitEZWNvZGluZ1N0YXR1cyBJbWFnZUZyYW1lOjpkZWNvZGluZ1N0
YXR1cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdT
dGF0dXM6OkRlY29kaW5nKTsKKyAgICByZXR1cm4gbV9kZWNvZGluZ1N0YXR1czsKK30KKwordW5z
aWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXJJbWFnZSgpCit7CisjaWYgIVVTRShDRykKKyAgICBpZiAo
aGFzQmFja2luZ1N0b3JlKCkpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyNl
bmRpZgorCisgICAgaWYgKCFoYXNOYXRpdmVJbWFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisKKyAgICBjbGVh
ck5hdGl2ZUltYWdlU3ViaW1hZ2VzKG1fbmF0aXZlSW1hZ2UpOworICAgIG1fbmF0aXZlSW1hZ2Ug
PSBudWxscHRyOworICAgIG1fZGVjb2RpbmdPcHRpb25zID0gRGVjb2RpbmdPcHRpb25zKCk7CisK
KyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKwordW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXIo
KQoreworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7CisgICAgKnRoaXMg
PSBJbWFnZUZyYW1lKCk7CisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKKyNpZiAhVVNFKENH
KQorYm9vbCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBi
YWNraW5nU3RvcmUpCit7CisgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFja2luZ1N0
b3JlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFn
ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKGJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIG1fYmFja2lu
Z1N0b3JlICE9IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgaWYgKHNpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9
IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
cmV0dXJuIG1fYmFja2luZ1N0b3JlICE9IG51bGxwdHI7Cit9CisjZW5kaWYKKworSW50U2l6ZSBJ
bWFnZUZyYW1lOjpzaXplKCkgY29uc3QKK3sKKyNpZiAhVVNFKENHKQorICAgIGlmIChoYXNCYWNr
aW5nU3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZSgpLT5zaXplKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gbV9zaXplOworfQorICAgIAorYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRp
dmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGlu
Z0xldmVsKSBjb25zdAoreworICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxp
bmdMZXZlbCB8fCAqc3Vic2FtcGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOworfQor
Citib29sIEltYWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRp
b25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRp
b25zLmlzU3luY2hyb25vdXMoKSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsK
K30KKworYm9vbCBJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0
aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxp
bmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhhc05hdGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2Rp
bmdPcHRpb25zLmlzQXN5bmNocm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsK
K30KKworQ29sb3IgSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sK
KyAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCisg
ICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4
ZWxTb2xpZENvbG9yKG1fbmF0aXZlSW1hZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDI4ICsyNCwyMiBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCisjaW5jbHVkZSAiU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZS5oIgogCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCkKIHsKIH0KIAotSW1h
Z2VGcmFtZTo6fkltYWdlRnJhbWUoKQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6flNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUoKQogewogICAgIGNsZWFySW1hZ2UoKTsKIH0KIAotY29uc3Qg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCkKLXsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SW1hZ2VGcmFtZT4gc2hhcmVkSW5zdGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJl
ZEluc3RhbmNlOwotfQotCi1JbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3Qg
SW1hZ2VGcmFtZSYgb3RoZXIpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjpvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRo
aXM7CkBAIC02MSw4ICs1NSw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShj
b25zdCAKICAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3NhbE1ldGhvZDsKICNl
bmRpZgogCi0gICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1hZ2U7Ci0gICAgbV9z
dWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOwogICAgIG1fZGVjb2Rp
bmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CiAKICAgICBtX29yaWVudGF0aW9u
ID0gb3RoZXIubV9vcmllbnRhdGlvbjsKQEAgLTcxLDQ2ICs2MywzMSBAQCBJbWFnZUZyYW1lJiBJ
bWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lk
IEltYWdlRnJhbWU6OnNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3Rh
dHVzKQordm9pZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpzZXREZWNvZGluZ1N0YXR1cyhE
ZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKIHsKICAgICBBU1NFUlQoZGVjb2RpbmdTdGF0
dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKTsKICAgICBtX2RlY29kaW5nU3RhdHVzID0g
ZGVjb2RpbmdTdGF0dXM7CiB9CiAKLURlY29kaW5nU3RhdHVzIEltYWdlRnJhbWU6OmRlY29kaW5n
U3RhdHVzKCkgY29uc3QKK0RlY29kaW5nU3RhdHVzIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6
OmRlY29kaW5nU3RhdHVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9kZWNvZGluZ1N0YXR1cyAh
PSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwogICAgIHJldHVybiBtX2RlY29kaW5nU3RhdHVz
OwogfQogCi11bnNpZ25lZCBJbWFnZUZyYW1lOjpjbGVhckltYWdlKCkKK3ZvaWQgU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZTo6Y2xlYXJJbWFnZSgpCiB7Ci0jaWYgIVVTRShDRykKLSAgICBpZiAo
aGFzQmFja2luZ1N0b3JlKCkpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKLSNl
bmRpZgotCi0gICAgaWYgKCFoYXNOYXRpdmVJbWFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7Ci0KLSAgICBjbGVh
ck5hdGl2ZUltYWdlU3ViaW1hZ2VzKG1fbmF0aXZlSW1hZ2UpOwotICAgIG1fbmF0aXZlSW1hZ2Ug
PSBudWxscHRyOwotICAgIG1fZGVjb2RpbmdPcHRpb25zID0gRGVjb2RpbmdPcHRpb25zKCk7Ci0K
LSAgICByZXR1cm4gZnJhbWVCeXRlczsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiB9
CiAKLXVuc2lnbmVkIEltYWdlRnJhbWU6OmNsZWFyKCkKK3ZvaWQgU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZTo6Y2xlYXIoKQogewotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdl
KCk7CisgICAgY2xlYXJJbWFnZSgpOwogICAgICp0aGlzID0gSW1hZ2VGcmFtZSgpOwotICAgIHJl
dHVybiBmcmFtZUJ5dGVzOwogfQogCiAjaWYgIVVTRShDRykKLWJvb2wgSW1hZ2VGcmFtZTo6aW5p
dGlhbGl6ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlKQorYm9vbCBTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUpCiB7CiAgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFja2lu
Z1N0b3JlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE5LDcgKzk2LDcgQEAgYm9vbCBJ
bWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQgogICAgIHJldHVybiBtX2JhY2tpbmdT
dG9yZSAhPSBudWxscHRyOwogfQogCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorYm9vbCBTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTEyOSw3ICsxMDYsNyBAQCBib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29u
c3QgSW50U2l6CiB9CiAjZW5kaWYKIAotSW50U2l6ZSBJbWFnZUZyYW1lOjpzaXplKCkgY29uc3QK
K0ludFNpemUgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6c2l6ZSgpIGNvbnN0CiB7CiAjaWYg
IVVTRShDRykKICAgICBpZiAoaGFzQmFja2luZ1N0b3JlKCkpCkBAIC0xMzcsMjggKzExNCw1IEBA
IEludFNpemUgSW1hZ2VGcmFtZTo6c2l6ZSgpIGNvbnN0CiAjZW5kaWYKICAgICByZXR1cm4gbV9z
aXplOwogfQotICAgIAotYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRpdmVJbWFnZShjb25zdCBzdGQ6
Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewot
ICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxpbmdMZXZlbCB8fCAqc3Vic2Ft
cGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOwotfQotCi1ib29sIEltYWdlRnJhbWU6
Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xl
dmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTmF0aXZlSW1h
Z2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRpb25zLmlzU3luY2hyb25vdXMo
KSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsKLX0KLQotYm9vbCBJbWFnZUZy
YW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3Rk
OjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVj
b2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc05h
dGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2RpbmdPcHRpb25zLmlzQXN5bmNo
cm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsKLX0KLQotQ29sb3IgSW1hZ2VG
cmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKLXsKLSAgICBpZiAoIWhhc05hdGl2
ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotCi0gICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKG1fbmF0
aXZlSW1hZ2UpOwotfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZS5oCShyZXZpc2lvbiAyMzAzNzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWUuaDoyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRlY29k
aW5nT3B0aW9ucy5oIgorI2luY2x1ZGUgIkltYWdlQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAi
SW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlVHlwZXMuaCIKKyNpbmNsdWRlICJJ
bnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlIDx3dGYvU2Vjb25k
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRnJhbWUgeworICAgIGZy
aWVuZCBjbGFzcyBJbWFnZVNvdXJjZTsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcg
eyBNZXRhZGF0YSwgTWV0YWRhdGFBbmRJbWFnZSB9OworCisgICAgSW1hZ2VGcmFtZSgpOworICAg
IEltYWdlRnJhbWUoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpIHsgb3BlcmF0b3I9KG90aGVyKTsg
fQorCisgICAgfkltYWdlRnJhbWUoKTsKKworICAgIHN0YXRpYyBjb25zdCBJbWFnZUZyYW1lJiBk
ZWZhdWx0RnJhbWUoKTsKKworICAgIEltYWdlRnJhbWUmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZy
YW1lJiBvdGhlcik7CisKKyAgICB1bnNpZ25lZCBjbGVhckltYWdlKCk7CisgICAgdW5zaWduZWQg
Y2xlYXIoKTsKKworI2lmICFVU0UoQ0cpCisgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IEltYWdl
QmFja2luZ1N0b3JlJik7CisgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IEludFNpemUmLCBib29s
IHByZW11bHRpcGx5QWxwaGEpOworI2VuZGlmCisKKyAgICB2b2lkIHNldERlY29kaW5nU3RhdHVz
KERlY29kaW5nU3RhdHVzKTsKKyAgICBEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cygpIGNv
bnN0OworCisgICAgYm9vbCBpc0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nU3Rh
dHVzID09IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOyB9CisgICAgYm9vbCBpc1BhcnRpYWwoKSBj
b25zdCB7IHJldHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFs
OyB9CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1
cyA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0KKworICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuICFtX29yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplKCkgOiBzaXplKCku
dHJhbnNwb3NlZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5hcmVhKCkgKiBzaXplb2YodWludDMyX3Qp
KS51bnNhZmVHZXQoKSA6IDA7IH0KKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2
ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0KKworI2lmICFVU0UoQ0cp
CisgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IFVuc3BlY2lmaWVkLCBEb05vdERpc3Bv
c2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVUb1ByZXZpb3VzIH07CisgICAgdm9pZCBz
ZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhv
ZCA9IG1ldGhvZDsgfQorICAgIERpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQorI2VuZGlmCisKKyAgICBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlSW1hZ2U7IH0KKworICAgIHZv
aWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVu
dGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKworICAgIHZvaWQgc2V0RHVyYXRp
b24oY29uc3QgU2Vjb25kcyYgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Cisg
ICAgU2Vjb25kcyBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKworICAg
IHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0gaGFzQWxwaGE7
IH0KKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gIWhhc01ldGFkYXRhKCkgfHwg
bV9oYXNBbHBoYTsgfQorCisgICAgYm9vbCBoYXNOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlv
bmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSkgY29uc3Q7CisgICAgYm9vbCBoYXNGdWxsU2l6
ZU5hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9
KSBjb25zdDsKKyAgICBib29sIGhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0
aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiwgY29uc3QgRGVjb2Rp
bmdPcHRpb25zJikgY29uc3Q7CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCkuaXNFbXB0eSgpOyB9CisKKyNpZiAhVVNFKENHKQorICAgIEltYWdlQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFj
a2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgIGJvb2wgaGFzQmFja2luZ1N0b3JlKCkg
Y29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0KKyNlbmRpZgorCisgICAgQ29sb3Igc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRGVjb2RpbmdTdGF0
dXMgbV9kZWNvZGluZ1N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkIH07CisgICAgSW50
U2l6ZSBtX3NpemU7CisKKyNpZiAhVVNFKENHKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJh
Y2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3Nh
bE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCB9OworI2VuZGlmCisKKyAgICBO
YXRpdmVJbWFnZVB0ciBtX25hdGl2ZUltYWdlOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJz
YW1wbGluZ0xldmVsIHsgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9OworICAgIERlY29kaW5n
T3B0aW9ucyBtX2RlY29kaW5nT3B0aW9uczsKKworICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU2Vjb25kcyBtX2R1cmF0
aW9uOworICAgIGJvb2wgbV9oYXNBbHBoYSB7IHRydWUgfTsKK307CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjcgKzM2LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgSW1hZ2VGcmFtZSB7Ci0gICAgZnJpZW5kIGNsYXNzIEltYWdlU291cmNl
OworY2xhc3MgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSB7CiBwdWJsaWM6Ci0gICAgZW51bSBj
bGFzcyBDYWNoaW5nIHsgTWV0YWRhdGEsIE1ldGFkYXRhQW5kSW1hZ2UgfTsKKyAgICBTY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lKCk7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZShjb25z
dCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIpOyB9
CiAKLSAgICBJbWFnZUZyYW1lKCk7Ci0gICAgSW1hZ2VGcmFtZShjb25zdCBJbWFnZUZyYW1lJiBv
dGhlcikgeyBvcGVyYXRvcj0ob3RoZXIpOyB9CisgICAgflNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUoKTsKIAotICAgIH5JbWFnZUZyYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IFNjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWUmIGRlZmF1bHRGcmFtZSgpOwogCi0gICAgc3RhdGljIGNvbnN0IEltYWdl
RnJhbWUmIGRlZmF1bHRGcmFtZSgpOworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBvdGhlcik7CiAKLSAgICBJ
bWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOworICAgIHZvaWQg
Y2xlYXJJbWFnZSgpOworICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHVuc2lnbmVkIGNsZWFySW1h
Z2UoKTsKLSAgICB1bnNpZ25lZCBjbGVhcigpOwotCi0jaWYgIVVTRShDRykKICAgICBib29sIGlu
aXRpYWxpemUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUmKTsKICAgICBib29sIGluaXRpYWxpemUo
Y29uc3QgSW50U2l6ZSYsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7Ci0jZW5kaWYKIAogICAgIHZv
aWQgc2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMpOwogICAgIERlY29kaW5nU3RhdHVz
IGRlY29kaW5nU3RhdHVzKCkgY29uc3Q7CkBAIC02NiwxNyArNjEsMTAgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CiAKICAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKLSAg
ICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9v
cmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZSgpIDogc2l6ZSgpLnRyYW5zcG9z
ZWRTaXplKCk7IH0KLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gaGFz
TmF0aXZlSW1hZ2UoKSA/IChzaXplKCkuYXJlYSgpICogc2l6ZW9mKHVpbnQzMl90KSkudW5zYWZl
R2V0KCkgOiAwOyB9Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKCkgY29u
c3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9CiAKLSNpZiAhVVNFKENHKQogICAgIGVu
dW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBVbnNwZWNpZmllZCwgRG9Ob3REaXNwb3NlLCBSZXN0
b3JlVG9CYWNrZ3JvdW5kLCBSZXN0b3JlVG9QcmV2aW91cyB9OwogICAgIHZvaWQgc2V0RGlzcG9z
YWxNZXRob2QoRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRo
b2Q7IH0KICAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcG9zYWxNZXRob2Q7IH0KLSNlbmRpZgotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlOyB9CiAKICAgICB2b2lkIHNldE9y
aWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9
IG9yaWVudGF0aW9uOyB9OwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CkBAIC04NiwzMCArNzQsMTggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNB
bHBoYTsgfQogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiAhaGFzTWV0YWRhdGEo
KSB8fCBtX2hhc0FscGhhOyB9Ci0KLSAgICBib29sIGhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9KSBjb25zdDsKLSAgICBib29sIGhhc0Z1
bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYg
PSB7IH0pIGNvbnN0OwotICAgIGJvb2wgaGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdp
dGhPcHRpb25zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mLCBjb25zdCBE
ZWNvZGluZ09wdGlvbnMmKSBjb25zdDsKICAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKS5pc0VtcHR5KCk7IH0KIAotI2lmICFVU0UoQ0cpCiAgICAgSW1hZ2VCYWNr
aW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8g
bV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgYm9vbCBoYXNCYWNraW5nU3Rv
cmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQotI2VuZGlmCi0KLSAgICBDb2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBEZWNvZGlu
Z1N0YXR1cyBtX2RlY29kaW5nU3RhdHVzIHsgRGVjb2RpbmdTdGF0dXM6OkludmFsaWQgfTsKICAg
ICBJbnRTaXplIG1fc2l6ZTsKIAotI2lmICFVU0UoQ0cpCiAgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBEaXNwb3NhbE1ldGhvZCBtX2Rp
c3Bvc2FsTWV0aG9kIHsgRGlzcG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkIH07Ci0jZW5kaWYKIAot
ICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2U7Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBt
X3N1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0IH07CiAgICAgRGVj
b2RpbmdPcHRpb25zIG1fZGVjb2RpbmdPcHRpb25zOwogCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTEgKzY0LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIHxwYXJlbnR8IGlzIHRoZSBkZWNvZGVy
IHRoYXQgb3ducyB1cy4KICAgICAvLyB8c3RhcnRPZmZzZXR8IHBvaW50cyB0byB0aGUgc3RhcnQg
b2YgdGhlIEJNUCB3aXRoaW4gdGhlIGZpbGUuCi0gICAgLy8gfGJ1ZmZlcnwgcG9pbnRzIGF0IGFu
IGVtcHR5IEltYWdlRnJhbWUgdGhhdCB3ZSdsbCBpbml0aWFsaXplIGFuZAorICAgIC8vIHxidWZm
ZXJ8IHBvaW50cyBhdCBhbiBlbXB0eSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lIHRoYXQgd2Un
bGwgaW5pdGlhbGl6ZSBhbmQKICAgICAvLyBmaWxsIHdpdGggZGVjb2RlZCBkYXRhLgogICAgIEJN
UEltYWdlUmVhZGVyKFNjYWxhYmxlSW1hZ2VEZWNvZGVyKiBwYXJlbnQsIHNpemVfdCBkZWNvZGVk
QW5kSGVhZGVyT2Zmc2V0LCBzaXplX3QgaW1nRGF0YU9mZnNldCwgYm9vbCB1c2VzQW5kTWFzayk7
CiAKLSAgICB2b2lkIHNldEJ1ZmZlcihJbWFnZUZyYW1lKiBidWZmZXIpIHsgbV9idWZmZXIgPSBi
dWZmZXI7IH0KKyAgICB2b2lkIHNldEJ1ZmZlcihTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBi
dWZmZXIpIHsgbV9idWZmZXIgPSBidWZmZXI7IH0KICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhKSB7IG1fZGF0YSA9IGRhdGE7IH0KIAogICAgIC8vIERvZXMgdGhlIGFjdHVhbCBk
ZWNvZGluZy4gSWYgfG9ubHlTaXplfCBpcyB0cnVlLCBkZWNvZGluZyBvbmx5CkBAIC0yNjksNyAr
MjY5LDcgQEAgcHJpdmF0ZToKICAgICBTY2FsYWJsZUltYWdlRGVjb2RlciogbV9wYXJlbnQ7CiAK
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBwaXhlbCBkYXRhLgotICAgIEltYWdlRnJh
bWUqIG1fYnVmZmVyOworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIG1fYnVmZmVyOwog
CiAgICAgLy8gVGhlIGZpbGUgdG8gZGVjb2RlLgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1f
ZGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc2LDExICs1NzYsMTEgQEAgYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogICAgICAgICAgICAgLy8gTk9URTogVGhpcyBy
ZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRGlzcG9zYWxNZXRob2QgZW51bQogICAgICAgICAg
ICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQogICAgICAgICAgICAgaW50IGRp
c3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkgPj4gMikgJiAweDc7Ci0gICAgICAg
ICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAgICAgICAg
IGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZD4oZGlzcG9zYWxNZXRob2QpOwog
ICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBtZXRob2QgMyBpcyAi
b3ZlcndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZwogICAgICAgICAgICAgLy8g
dGhlIHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlzLiBXZSBtYXAgYm90
aCB0byB0aGUgc2FtZSB2YWx1ZS4KICAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9PSA0
KQotICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXM7CisgICAgICAg
ICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OlNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91czsKICAg
ICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lID0gR0VUSU5UMTYoY3VycmVudENvbXBv
bmVudCArIDEpICogMTA7CiAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CiAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lvbiAy
MzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCB3aWR0aDsKICAgICB1bnNpZ25lZCBoZWlnaHQ7CiAgICAgaW50IHRwaXhl
bDsgLy8gSW5kZXggb2YgdHJhbnNwYXJlbnQgcGl4ZWwuCi0gICAgV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3Vu
ZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KKyAgICBXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0byBiYWNr
Z3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVfdCBsb2NhbENvbG9ybWFwUG9z
aXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9jYWxDb2xvcm1hcFNpemU7
IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCiAgICAgaW50IGRhdGFzaXplOwpAQCAt
MTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCB3aWR0aCgwKQogICAgICAgICAsIGhl
aWdodCgwKQogICAgICAgICAsIHRwaXhlbCgwKQotICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdl
YkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCkKKyAgICAgICAg
LCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNw
b3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQpCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFBvc2l0aW9u
KDApCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKICAgICAgICAgLCBkYXRhc2l6ZSgw
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337501</attachid>
            <date>2018-04-09 09:28:47 -0700</date>
            <delta_ts>2018-04-09 09:50:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate-5.patch</filename>
            <type>text/plain</type>
            <size>57760</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAKIAogICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCiAgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJh
bWU6Om9wZXJhdG9yPShjb25zdCAKICAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0
b3JlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAg
IG1fZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwogI2VuZGlmCiAKICAg
ICBtX25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsMTIgKzcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZyYW1lQnl0
ZXMoKSBjb25zdCB7IHJldHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5hcmVhKCkgKiBz
aXplb2YodWludDMyX3QpKS51bnNhZmVHZXQoKSA6IDA7IH0KICAgICBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0K
IAotI2lmICFVU0UoQ0cpCi0gICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IFVuc3BlY2lm
aWVkLCBEb05vdERpc3Bvc2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVUb1ByZXZpb3Vz
IH07Ci0gICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsg
bV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgIERpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQotI2VuZGlmCi0KICAg
ICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlSW1h
Z2U7IH0KIAogICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CkBAIC0xMDUsNyArOTksNiBA
QCBwcml2YXRlOgogCiAjaWYgIVVTRShDRykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNr
aW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxN
ZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQgfTsKICNlbmRpZgogCiAgICAgTmF0
aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIGJvb2wgU2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGUKICAg
ICAvLyBGSVhNRSgxNzYwODkpOiBhc2tpbmcgd2hldGhlciBlbm91Z2ggZGF0YSBoYXMgYmVlbiBh
cHBlbmRlZCBmb3IgYSBkZWNvZGUKICAgICAvLyBvcGVyYXRpb24gdG8gc3VjY2VlZCBzaG91bGQg
bm90IHJlcXVpcmUgZGVjb2RpbmcgdGhlIGVudGlyZSBmcmFtZS4KICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRhYmxlIGluIGEgd2F5IHRoYXQgYWxsb3dzIGNvbnN0Lgot
ICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIq
Pih0aGlzKS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBj
b25zdF9jYXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CiAgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPmlzQ29tcGxldGUoKTsKIH0K
IApAQCAtMjA1LDcgKzIwNSw3IEBAIFNlY29uZHMgU2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1l
RHVyYXQKICAgICAvLyBGSVhNRSgxNzYwODkpOiBhc2tpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiBh
IHN1Yi1pbWFnZSBzaG91bGQgbm90IHJlcXVpcmUgZGVjb2RpbmcKICAgICAvLyB0aGUgZW50aXJl
IGZyYW1lLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbXBsZW1lbnRhYmxlIGluIGEgd2F5IHRo
YXQKICAgICAvLyBhbGxvd3MgY29uc3QuCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gY29uc3Rf
Y2FzdDxTY2FsYWJsZUltYWdlRGVjb2Rlcio+KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOworICAgIGF1dG8qIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIq
Pih0aGlzKS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPmlzSW52YWxpZCgpKQogICAgICAgICByZXR1cm4gMF9zOwogICAgIApAQCAtMjI1LDcg
KzIyNSw3IEBAIE5hdGl2ZUltYWdlUHRyIFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmUKICAgICBp
ZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBJbWFn
ZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGF1dG8qIGJ1
ZmZlciA9IGZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CiAgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0ludmFsaWQoKSB8fCAhYnVmZmVyLT5oYXNCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2Nh
bGFibGVJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJJbWFnZUZy
YW1lLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC00MSw3ICs0MSw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIGlzIGEgYmFzZSBmb3Ig
YWxsIGZvcm1hdC1zcGVjaWZpYyBkZWNvZGVycwotLy8gKGUuZy4gSlBFR0ltYWdlRGVjb2Rlciku
IFRoaXMgYmFzZSBtYW5hZ2VzIHRoZSBJbWFnZUZyYW1lIGNhY2hlLgorLy8gKGUuZy4gSlBFR0lt
YWdlRGVjb2RlcikuIFRoaXMgYmFzZSBtYW5hZ2VzIHRoZSBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lIGNhY2hlLgogCiBjbGFzcyBTY2FsYWJsZUltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURl
Y29kZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjYWxhYmxlSW1hZ2VEZWNvZGVyKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gRGVjb2RlcyBhcyBtdWNoIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUgYXMgcG9zc2libGUs
IGFuZCByZXR1cm5zIGFuCiAgICAgLy8gU2NhbGFibGVJbWFnZURlY29kZXItb3duZWQgcG9pbnRl
ci4KLSAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpID0g
MDsKKyAgICB2aXJ0dWFsIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QpID0gMDsKIAogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXpl
X3QpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0yMDUsNyArMjA1LDcgQEAgcHJvdGVjdGVkOgogICAg
IGludCBzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CiAKICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCi0gICAgVmVjdG9y
PEltYWdlRnJhbWUsIDE+IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICBWZWN0b3I8U2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZSwgMT4gbV9mcmFtZUJ1ZmZlckNhY2hlOwogICAgIG11dGFibGUgTG9j
ayBtX211dGV4OwogICAgIGJvb2wgbV9zY2FsZWQgeyBmYWxzZSB9OwogICAgIFZlY3RvcjxpbnQ+
IG1fc2NhbGVkQ29sdW1uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUuY3BwCShyZXZpc2lvbiAyMzAzNzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRnJhbWUuY3BwOjIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lLmgi
CisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKK3sKK30KKworSW1hZ2VGcmFtZTo6fkltYWdl
RnJhbWUoKQoreworICAgIGNsZWFySW1hZ2UoKTsKK30KKworY29uc3QgSW1hZ2VGcmFtZSYgSW1h
Z2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1h
Z2VGcmFtZT4gc2hhcmVkSW5zdGFuY2U7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQor
CitJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3Ro
ZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisK
KyAgICBtX2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1czsKKyAgICBtX3Np
emUgPSBvdGhlci5tX3NpemU7CisKKyNpZiAhVVNFKENHKQorICAgIGlmIChvdGhlci5iYWNraW5n
U3RvcmUoKSkKKyAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0b3JlKCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIG1fZGlzcG9zYWxN
ZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOworI2VuZGlmCisKKyAgICBtX25hdGl2ZUlt
YWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhl
ci5tX3N1YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kZWNvZGluZ09wdGlvbnMgPSBvdGhlci5tX2Rl
Y29kaW5nT3B0aW9uczsKKworICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9u
OworICAgIG1fZHVyYXRpb24gPSBvdGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBv
dGhlci5tX2hhc0FscGhhOworICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1l
OjpzZXREZWNvZGluZ1N0YXR1cyhEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKK3sKKyAg
ICBBU1NFUlQoZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKTsKKyAg
ICBtX2RlY29kaW5nU3RhdHVzID0gZGVjb2RpbmdTdGF0dXM7Cit9CisKK0RlY29kaW5nU3RhdHVz
IEltYWdlRnJhbWU6OmRlY29kaW5nU3RhdHVzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kZWNv
ZGluZ1N0YXR1cyAhPSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOworICAgIHJldHVybiBtX2Rl
Y29kaW5nU3RhdHVzOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lOjpjbGVhckltYWdlKCkKK3sK
KyNpZiAhVVNFKENHKQorICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgbV9iYWNr
aW5nU3RvcmUgPSBudWxscHRyOworI2VuZGlmCisKKyAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IHRoaXMtPmZy
YW1lQnl0ZXMoKTsKKworICAgIGNsZWFyTmF0aXZlSW1hZ2VTdWJpbWFnZXMobV9uYXRpdmVJbWFn
ZSk7CisgICAgbV9uYXRpdmVJbWFnZSA9IG51bGxwdHI7CisgICAgbV9kZWNvZGluZ09wdGlvbnMg
PSBEZWNvZGluZ09wdGlvbnMoKTsKKworICAgIHJldHVybiBmcmFtZUJ5dGVzOworfQorCit1bnNp
Z25lZCBJbWFnZUZyYW1lOjpjbGVhcigpCit7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IGNs
ZWFySW1hZ2UoKTsKKyAgICAqdGhpcyA9IEltYWdlRnJhbWUoKTsKKyAgICByZXR1cm4gZnJhbWVC
eXRlczsKK30KKworI2lmICFVU0UoQ0cpCitib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29u
c3QgSW1hZ2VCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKK3sKKyAgICBpZiAoJmJhY2tpbmdT
dG9yZSA9PSB0aGlzLT5iYWNraW5nU3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoYmFja2luZ1N0b3Jl
KTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKK30KKworYm9vbCBJbWFn
ZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZShzaXplLCBw
cmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsK
K30KKyNlbmRpZgorCitJbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAoreworI2lmICFV
U0UoQ0cpCisgICAgaWYgKGhhc0JhY2tpbmdTdG9yZSgpKQorICAgICAgICByZXR1cm4gYmFja2lu
Z1N0b3JlKCktPnNpemUoKTsKKyNlbmRpZgorICAgIHJldHVybiBtX3NpemU7Cit9CisgICAgCiti
b29sIEltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2Ft
cGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmF0
aXZlSW1hZ2UgJiYgKCFzdWJzYW1wbGluZ0xldmVsIHx8ICpzdWJzYW1wbGluZ0xldmVsID49IG1f
c3Vic2FtcGxpbmdMZXZlbCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aGFzRnVsbFNpemVOYXRp
dmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGlu
Z0xldmVsKSBjb25zdAoreworICAgIHJldHVybiBoYXNOYXRpdmVJbWFnZShzdWJzYW1wbGluZ0xl
dmVsKSAmJiAobV9kZWNvZGluZ09wdGlvbnMuaXNTeW5jaHJvbm91cygpIHx8IG1fZGVjb2RpbmdP
cHRpb25zLmhhc0Z1bGxTaXplKCkpOworfQorCitib29sIEltYWdlRnJhbWU6Omhhc0RlY29kZWRO
YXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNh
bXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRl
Y29kaW5nT3B0aW9ucykgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2Ft
cGxpbmdMZXZlbCkgJiYgbV9kZWNvZGluZ09wdGlvbnMuaXNBc3luY2hyb25vdXNDb21wYXRpYmxl
V2l0aChkZWNvZGluZ09wdGlvbnMpOworfQorCitDb2xvciBJbWFnZUZyYW1lOjpzaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzTmF0aXZlSW1hZ2UoKSB8fCBtX3Np
emUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICByZXR1
cm4gbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9uYXRpdmVJbWFnZSk7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuY3BwCShyZXZpc2lv
biAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMjggKzI0LDIy
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRnJhbWUuaCIK
KyNpbmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgiCiAKICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbWFnZUZyYW1lOjpJ
bWFnZUZyYW1lKCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUoKQogewogfQogCi1JbWFnZUZyYW1lOjp+SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjp+U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSgpCiB7CiAgICAgY2xl
YXJJbWFnZSgpOwogfQogCi1jb25zdCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpkZWZhdWx0RnJh
bWUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZUZyYW1lPiBzaGFyZWRJbnN0
YW5jZTsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Ci19Ci0KLUltYWdlRnJhbWUmIEltYWdl
RnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUmIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6Om9wZXJhdG9yPShjb25zdCBT
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3Ro
ZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTYxLDggKzU1LDYgQEAgSW1hZ2VGcmFtZSYg
SW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAgIG1fZGlzcG9zYWxNZXRob2QgPSBvdGhl
ci5tX2Rpc3Bvc2FsTWV0aG9kOwogI2VuZGlmCiAKLSAgICBtX25hdGl2ZUltYWdlID0gb3RoZXIu
bV9uYXRpdmVJbWFnZTsKLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBs
aW5nTGV2ZWw7CiAgICAgbV9kZWNvZGluZ09wdGlvbnMgPSBvdGhlci5tX2RlY29kaW5nT3B0aW9u
czsKIAogICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9uOwpAQCAtNzEsNDYg
KzYzLDMxIEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVj
b2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMpCit2b2lkIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWU6OnNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQogewog
ICAgIEFTU0VSVChkZWNvZGluZ1N0YXR1cyAhPSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwog
ICAgIG1fZGVjb2RpbmdTdGF0dXMgPSBkZWNvZGluZ1N0YXR1czsKIH0KIAotRGVjb2RpbmdTdGF0
dXMgSW1hZ2VGcmFtZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAorRGVjb2RpbmdTdGF0dXMgU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAogewogICAgIEFT
U0VSVChtX2RlY29kaW5nU3RhdHVzICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CiAgICAg
cmV0dXJuIG1fZGVjb2RpbmdTdGF0dXM7CiB9CiAKLXVuc2lnbmVkIEltYWdlRnJhbWU6OmNsZWFy
SW1hZ2UoKQordm9pZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhckltYWdlKCkKIHsK
LSNpZiAhVVNFKENHKQotICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgbV9iYWNr
aW5nU3RvcmUgPSBudWxscHRyOwotI2VuZGlmCi0KLSAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IHRoaXMtPmZy
YW1lQnl0ZXMoKTsKLQotICAgIGNsZWFyTmF0aXZlSW1hZ2VTdWJpbWFnZXMobV9uYXRpdmVJbWFn
ZSk7Ci0gICAgbV9uYXRpdmVJbWFnZSA9IG51bGxwdHI7Ci0gICAgbV9kZWNvZGluZ09wdGlvbnMg
PSBEZWNvZGluZ09wdGlvbnMoKTsKLQotICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAgIG1fYmFj
a2luZ1N0b3JlID0gbnVsbHB0cjsKIH0KIAotdW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQor
dm9pZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhcigpCiB7Ci0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlcyA9IGNsZWFySW1hZ2UoKTsKLSAgICAqdGhpcyA9IEltYWdlRnJhbWUoKTsKLSAg
ICByZXR1cm4gZnJhbWVCeXRlczsKKyAgICBjbGVhckltYWdlKCk7CisgICAgKnRoaXMgPSBTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lKCk7CiB9CiAKICNpZiAhVVNFKENHKQotYm9vbCBJbWFnZUZy
YW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUpCiti
b29sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKIHsKICAgICBpZiAoJmJhY2tpbmdTdG9yZSA9PSB0aGlz
LT5iYWNraW5nU3RvcmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTksNyArOTYsNyBA
QCBib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCCiAgICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlICE9IG51bGxwdHI7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6
ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCitib29sIFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhKQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTI5LDcgKzEwNiw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6aW5pdGlh
bGl6ZShjb25zdCBJbnRTaXoKIH0KICNlbmRpZgogCi1JbnRTaXplIEltYWdlRnJhbWU6OnNpemUo
KSBjb25zdAorSW50U2l6ZSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpzaXplKCkgY29uc3QK
IHsKICNpZiAhVVNFKENHKQogICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkKQEAgLTEzNywyOCAr
MTE0LDUgQEAgSW50U2l6ZSBJbWFnZUZyYW1lOjpzaXplKCkgY29uc3QKICNlbmRpZgogICAgIHJl
dHVybiBtX3NpemU7CiB9Ci0gICAgCi1ib29sIEltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKGNv
bnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2UgJiYgKCFzdWJzYW1wbGluZ0xldmVsIHx8
ICpzdWJzYW1wbGluZ0xldmVsID49IG1fc3Vic2FtcGxpbmdMZXZlbCk7Ci19Ci0KLWJvb2wgSW1h
Z2VGcmFtZTo6aGFzRnVsbFNpemVOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNh
bXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAgIHJldHVybiBoYXNO
YXRpdmVJbWFnZShzdWJzYW1wbGluZ0xldmVsKSAmJiAobV9kZWNvZGluZ09wdGlvbnMuaXNTeW5j
aHJvbm91cygpIHx8IG1fZGVjb2RpbmdPcHRpb25zLmhhc0Z1bGxTaXplKCkpOwotfQotCi1ib29s
IEltYWdlRnJhbWU6Omhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhj
b25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBj
b25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgY29uc3QKLXsKLSAgICByZXR1
cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgbV9kZWNvZGluZ09wdGlvbnMu
aXNBc3luY2hyb25vdXNDb21wYXRpYmxlV2l0aChkZWNvZGluZ09wdGlvbnMpOwotfQotCi1Db2xv
ciBJbWFnZUZyYW1lOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAotewotICAgIGlmICgh
aGFzTmF0aXZlSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0
dXJuIENvbG9yKCk7Ci0KLSAgICByZXR1cm4gbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29s
b3IobV9uYXRpdmVJbWFnZSk7Ci19CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oOjIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiRGVjb2RpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VUeXBlcy5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgPHd0
Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZSB7
CisgICAgZnJpZW5kIGNsYXNzIEltYWdlU291cmNlOworcHVibGljOgorICAgIGVudW0gY2xhc3Mg
Q2FjaGluZyB7IE1ldGFkYXRhLCBNZXRhZGF0YUFuZEltYWdlIH07CisKKyAgICBJbWFnZUZyYW1l
KCk7CisgICAgSW1hZ2VGcmFtZShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikgeyBvcGVyYXRvcj0o
b3RoZXIpOyB9CisKKyAgICB+SW1hZ2VGcmFtZSgpOworCisgICAgc3RhdGljIGNvbnN0IEltYWdl
RnJhbWUmIGRlZmF1bHRGcmFtZSgpOworCisgICAgSW1hZ2VGcmFtZSYgb3BlcmF0b3I9KGNvbnN0
IEltYWdlRnJhbWUmIG90aGVyKTsKKworICAgIHVuc2lnbmVkIGNsZWFySW1hZ2UoKTsKKyAgICB1
bnNpZ25lZCBjbGVhcigpOworCisjaWYgIVVTRShDRykKKyAgICBib29sIGluaXRpYWxpemUoY29u
c3QgSW1hZ2VCYWNraW5nU3RvcmUmKTsKKyAgICBib29sIGluaXRpYWxpemUoY29uc3QgSW50U2l6
ZSYsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CisjZW5kaWYKKworICAgIHZvaWQgc2V0RGVjb2Rp
bmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMpOworICAgIERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3Rh
dHVzKCkgY29uc3Q7CisKKyAgICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVj
b2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQ7IH0KKyAgICBib29sIGlzUGFy
dGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6
OlBhcnRpYWw7IH0KKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29k
aW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorCisgICAgSW50U2l6ZSBz
aXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29u
c3QgeyByZXR1cm4gIW1fb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUoKSA6
IHNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpOyB9CisgICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNv
bnN0IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdlKCkgPyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1
aW50MzJfdCkpLnVuc2FmZUdldCgpIDogMDsgfQorICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2Ft
cGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic2FtcGxpbmdMZXZlbDsgfQorCisjaWYg
IVVTRShDRykKKyAgICBlbnVtIGNsYXNzIERpc3Bvc2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERv
Tm90RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dyb3VuZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKKyAg
ICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bv
c2FsTWV0aG9kID0gbWV0aG9kOyB9CisgICAgRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CisjZW5kaWYKKworICAgIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQor
CisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7
IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorCisgICAgdm9pZCBz
ZXREdXJhdGlvbihjb25zdCBTZWNvbmRzJiBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRp
b247IH0KKyAgICBTZWNvbmRzIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsg
fQorCisgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBo
YXNBbHBoYTsgfQorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiAhaGFzTWV0YWRh
dGEoKSB8fCBtX2hhc0FscGhhOyB9CisKKyAgICBib29sIGhhc05hdGl2ZUltYWdlKGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9KSBjb25zdDsKKyAgICBib29sIGhh
c0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiYgPSB7IH0pIGNvbnN0OworICAgIGJvb2wgaGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJs
ZVdpdGhPcHRpb25zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mLCBjb25z
dCBEZWNvZGluZ09wdGlvbnMmKSBjb25zdDsKKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3Qg
eyByZXR1cm4gIXNpemUoKS5pc0VtcHR5KCk7IH0KKworI2lmICFVU0UoQ0cpCisgICAgSW1hZ2VC
YWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3Jl
ID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgYm9vbCBoYXNCYWNraW5n
U3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQorI2VuZGlmCisKKyAgICBD
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBEZWNv
ZGluZ1N0YXR1cyBtX2RlY29kaW5nU3RhdHVzIHsgRGVjb2RpbmdTdGF0dXM6OkludmFsaWQgfTsK
KyAgICBJbnRTaXplIG1fc2l6ZTsKKworI2lmICFVU0UoQ0cpCisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBEaXNwb3NhbE1ldGhvZCBt
X2Rpc3Bvc2FsTWV0aG9kIHsgRGlzcG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkIH07CisjZW5kaWYK
KworICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2U7CisgICAgU3Vic2FtcGxpbmdMZXZl
bCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0IH07CisgICAg
RGVjb2RpbmdPcHRpb25zIG1fZGVjb2RpbmdPcHRpb25zOworCisgICAgSW1hZ2VPcmllbnRhdGlv
biBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKKyAgICBTZWNvbmRz
IG1fZHVyYXRpb247CisgICAgYm9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9OworfTsKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAkocmV2aXNpb24gMjMwMzc0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyNyArMzYsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFnZUZyYW1lIHsKLSAgICBmcmllbmQgY2xhc3MgSW1h
Z2VTb3VyY2U7CitjbGFzcyBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lIHsKIHB1YmxpYzoKLSAg
ICBlbnVtIGNsYXNzIENhY2hpbmcgeyBNZXRhZGF0YSwgTWV0YWRhdGFBbmRJbWFnZSB9OworICAg
IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUoKTsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lKGNvbnN0IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIG90aGVyKSB7IG9wZXJhdG9yPShv
dGhlcik7IH0KIAotICAgIEltYWdlRnJhbWUoKTsKLSAgICBJbWFnZUZyYW1lKGNvbnN0IEltYWdl
RnJhbWUmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KKyAgICB+U2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZSgpOwogCi0gICAgfkltYWdlRnJhbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZSYgZGVmYXVsdEZyYW1lKCk7CiAKLSAgICBzdGF0aWMgY29u
c3QgSW1hZ2VGcmFtZSYgZGVmYXVsdEZyYW1lKCk7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZSYgb3BlcmF0b3I9KGNvbnN0IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIG90aGVyKTsK
IAotICAgIEltYWdlRnJhbWUmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcik7Cisg
ICAgdm9pZCBjbGVhckltYWdlKCk7CisgICAgdm9pZCBjbGVhcigpOwogCi0gICAgdW5zaWduZWQg
Y2xlYXJJbWFnZSgpOwotICAgIHVuc2lnbmVkIGNsZWFyKCk7Ci0KLSNpZiAhVVNFKENHKQogICAg
IGJvb2wgaW5pdGlhbGl6ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYpOwogICAgIGJvb2wgaW5p
dGlhbGl6ZShjb25zdCBJbnRTaXplJiwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKLSNlbmRpZgog
CiAgICAgdm9pZCBzZXREZWNvZGluZ1N0YXR1cyhEZWNvZGluZ1N0YXR1cyk7CiAgICAgRGVjb2Rp
bmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMoKSBjb25zdDsKQEAgLTY2LDE3ICs2MSwxMCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1
cyA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0KIAogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OwotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuICFtX29yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplKCkgOiBzaXplKCku
dHJhbnNwb3NlZFNpemUoKTsgfQotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBoYXNOYXRpdmVJbWFnZSgpID8gKHNpemUoKS5hcmVhKCkgKiBzaXplb2YodWludDMyX3Qp
KS51bnNhZmVHZXQoKSA6IDA7IH0KLSAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2
ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0KIAotI2lmICFVU0UoQ0cp
CiAgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IFVuc3BlY2lmaWVkLCBEb05vdERpc3Bv
c2UsIFJlc3RvcmVUb0JhY2tncm91bmQsIFJlc3RvcmVUb1ByZXZpb3VzIH07CiAgICAgdm9pZCBz
ZXREaXNwb3NhbE1ldGhvZChEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhv
ZCA9IG1ldGhvZDsgfQogICAgIERpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQotI2VuZGlmCi0KLSAgICBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlSW1hZ2U7IH0KIAogICAgIHZv
aWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVu
dGF0aW9uID0gb3JpZW50YXRpb247IH07CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KQEAgLTg2LDMwICs3NCwxOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBo
YSA9IGhhc0FscGhhOyB9CiAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuICFoYXNN
ZXRhZGF0YSgpIHx8IG1faGFzQWxwaGE7IH0KLQotICAgIGJvb2wgaGFzTmF0aXZlSW1hZ2UoY29u
c3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pIGNvbnN0OwotICAgIGJv
b2wgaGFzRnVsbFNpemVOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5n
TGV2ZWw+JiA9IHsgfSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21w
YXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYs
IGNvbnN0IERlY29kaW5nT3B0aW9ucyYpIGNvbnN0OwogICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBj
b25zdCB7IHJldHVybiAhc2l6ZSgpLmlzRW1wdHkoKTsgfQogCi0jaWYgIVVTRShDRykKICAgICBJ
bWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5n
U3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KICAgICBib29sIGhhc0Jh
Y2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9Ci0jZW5kaWYKLQot
ICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IERlY29kaW5nU3RhdHVzIG1fZGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6SW52YWxp
ZCB9OwogICAgIEludFNpemUgbV9zaXplOwogCi0jaWYgIVVTRShDRykKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogICAgIERpc3Bvc2FsTWV0
aG9kIG1fZGlzcG9zYWxNZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQgfTsKLSNl
bmRpZgogCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQgfTsK
ICAgICBEZWNvZGluZ09wdGlvbnMgbV9kZWNvZGluZ09wdGlvbnM7CiAKICAgICBJbWFnZU9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpzZXRE
YXRhKFNoYXJlZEJ1ZmYKICAgICAgICAgbV9yZWFkZXItPnNldERhdGEoJmRhdGEpOwogfQogCi1J
bWFnZUZyYW1lKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5k
ZXgpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQogICAgICAgICByZXR1
cm4gMDsKQEAgLTY0LDcgKzY0LDcgQEAgSW1hZ2VGcmFtZSogQk1QSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlcgogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGUuZ3JvdygxKTsKIAotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9ICZt
X2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKKyAgICBhdXRvKiBidWZmZXIgPSAmbV9mcmFtZUJ1
ZmZlckNhY2hlLmZpcnN0KCk7CiAgICAgaWYgKCFidWZmZXItPmlzQ29tcGxldGUoKSkKICAgICAg
ICAgZGVjb2RlKGZhbHNlLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKICAgICByZXR1cm4gYnVmZmVy
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICAvLyBTY2FsYWJs
ZUltYWdlRGVjb2RlcgogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYm1wIik7IH0KICAgICB2b2lkIHNldERhdGEoU2hhcmVk
QnVmZmVyJiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIGZpbmFsOwotICAgIEltYWdlRnJhbWUqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIGZpbmFsOworICAgIFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIGZpbmFsOwogICAg
IC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gQmUgY2FyZWZ1bCB0
byBhdm9pZAogICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVu
IGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQogICAgIC8vIEJNUEltYWdlUmVhZGVyIQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCwxMSArNjQsMTEgQEAgcHVibGljOgogCiAgICAgLy8gfHBhcmVudHwgaXMgdGhl
IGRlY29kZXIgdGhhdCBvd25zIHVzLgogICAgIC8vIHxzdGFydE9mZnNldHwgcG9pbnRzIHRvIHRo
ZSBzdGFydCBvZiB0aGUgQk1QIHdpdGhpbiB0aGUgZmlsZS4KLSAgICAvLyB8YnVmZmVyfCBwb2lu
dHMgYXQgYW4gZW1wdHkgSW1hZ2VGcmFtZSB0aGF0IHdlJ2xsIGluaXRpYWxpemUgYW5kCisgICAg
Ly8gfGJ1ZmZlcnwgcG9pbnRzIGF0IGFuIGVtcHR5IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUg
dGhhdCB3ZSdsbCBpbml0aWFsaXplIGFuZAogICAgIC8vIGZpbGwgd2l0aCBkZWNvZGVkIGRhdGEu
CiAgICAgQk1QSW1hZ2VSZWFkZXIoU2NhbGFibGVJbWFnZURlY29kZXIqIHBhcmVudCwgc2l6ZV90
IGRlY29kZWRBbmRIZWFkZXJPZmZzZXQsIHNpemVfdCBpbWdEYXRhT2Zmc2V0LCBib29sIHVzZXNB
bmRNYXNrKTsKIAotICAgIHZvaWQgc2V0QnVmZmVyKEltYWdlRnJhbWUqIGJ1ZmZlcikgeyBtX2J1
ZmZlciA9IGJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QnVmZmVyKFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUqIGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQogICAgIHZvaWQgc2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQogCiAgICAgLy8gRG9lcyB0aGUg
YWN0dWFsIGRlY29kaW5nLiBJZiB8b25seVNpemV8IGlzIHRydWUsIGRlY29kaW5nIG9ubHkKQEAg
LTI2OSw3ICsyNjksNyBAQCBwcml2YXRlOgogICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyKiBtX3Bh
cmVudDsKIAogICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBpeGVsIGRhdGEuCi0gICAg
SW1hZ2VGcmFtZSogbV9idWZmZXI7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogbV9i
dWZmZXI7CiAKICAgICAvLyBUaGUgZmlsZSB0byBkZWNvZGUuCiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbV9kYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBz
aXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RSZXF1aXJlCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IGZyYW1lSW5kZXg7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaSAtIDFdOworICAgICAg
ICBhdXRvJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpIC0gMV07CiAKICAgICAgICAgLy8g
RnJhbWVzIHdpdGggZGlzcG9zYWwgbWV0aG9kIFJlc3RvcmVUb1ByZXZpb3VzIGFyZSB1c2VsZXNz
LCBza2lwIHRoZW0uCi0gICAgICAgIGlmIChmcmFtZS5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdl
RnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykKKyAgICAgICAgaWYgKGZy
YW1lLmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9z
YWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGlzcG9zYWwgbWV0aG9kIGNhbiBiZSBVbnNwZWNp
ZmllZCwgRG9Ob3REaXNwb3NlIG9yIFJlc3RvcmVUb0JhY2tncm91bmQuCkBAIC0xMTksNyArMTE5
LDcgQEAgc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWlyZQogCiAgICAgICAg
IC8vIElmIHRoZSBkaXNwb3NhbCBtZXRob2Qgb2YgdGhpcyBmcmFtZSBpcyBSZXN0b3JlVG9CYWNr
Z3JvdW5kIGFuZCBpdCBmaWxscyB0aGUgd2hvbGUgYXJlYSwKICAgICAgICAgLy8gdGhlIG5leHQg
ZnJhbWUncyBiYWNraW5nIHN0b3JlIGlzIGluaXRpYWxpemVkIHRvIHRyYW5zcGFyZW50LCBzbyB3
ZSBzdGFydCBkZWNvZGluZyB3aXRoIGl0LgotICAgICAgICBpZiAoZnJhbWUuZGlzcG9zYWxNZXRo
b2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkg
eworICAgICAgICBpZiAoZnJhbWUuZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgewogICAgICAg
ICAgICAgLy8gV2UgY2Fubm90IHVzZSBmcmFtZS5iYWNraW5nU3RvcmUoKS0+ZnJhbWVSZWN0KCkg
aGVyZSwgYmVjYXVzZSBpdCBoYXMgYmVlbiBjbGVhcmVkCiAgICAgICAgICAgICAvLyB3aGVuIHRo
ZSBmcmFtZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4gV2UgbmVlZCB0byBnZXQgdGhlIHZh
bHVlcyBmcm9tIHRoZQogICAgICAgICAgICAgLy8gcmVhZGVyIGNvbnRleHQuCkBAIC0xMzcsMTIg
KzEzNywxMiBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RSZXF1aXJlCiAgICAg
cmV0dXJuIDA7CiB9CiAKLUltYWdlRnJhbWUqIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIEdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEltYWdlRnJhbWUm
IGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBhdXRvJiBmcmFtZSA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkpIHsK
ICAgICAgICAgZm9yIChhdXRvIGkgPSBmaW5kRmlyc3RSZXF1aXJlZEZyYW1lVG9EZWNvZGUoaW5k
ZXgpOyBpIDw9IGluZGV4OyBpKyspCiAgICAgICAgICAgICBkZWNvZGUoaSArIDEsIEdJRkZ1bGxR
dWVyeSwgaXNBbGxEYXRhUmVjZWl2ZWQoKSk7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBHSUZJ
bWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYQogICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VT
b3VyY2U6OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4K
ICAgICAvLyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFy
QmVmb3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4o
KSArIGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IFZlY3RvcjxTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xl
YXJCZWZvcmVGcmFtZSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNo
IHRoYXQ6CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHxlbmR8CkBAIC0xOTMsMTQgKzE5Mywx
NCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAgICAgLy8gICAq
IElmIHRoZSBmcmFtZSBpcyBwYXJ0aWFsLCB3ZSdyZSBkZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xl
YXIgaXQ7IGlmIGl0CiAgICAgLy8gICAgIGhhcyBhIGRpc3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFu
IERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cywgc3RvcAogICAgIC8vICAgICBzY2Fu
bmluZywgYXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJhbWUgd2hlbiBkZWNvZGluZyB0aGUgbmV4
dCBvbmUuCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBpKGVuZCk7Ci0gICAgZm9y
ICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoaS0+aXNJbnZhbGlkKCkg
fHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJl
c3RvcmVUb1ByZXZpb3VzKSk7IC0taSkgeworICAgIFZlY3RvcjxTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVy
Q2FjaGUuYmVnaW4oKSkgJiYgKGktPmlzSW52YWxpZCgpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgp
ID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9Q
cmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKGktPmlzQ29tcGxldGUoKSAmJiAoaSAhPSBl
bmQpKQogICAgICAgICAgICAgaS0+Y2xlYXIoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8IGhv
bGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZyYW1l
cy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVy
Q2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChWZWN0b3I8U2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkp
OyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoIWotPmlzUGFydGlhbCgpKTsKICAgICAg
ICAgaWYgKCFqLT5pc0ludmFsaWQoKSkKICAgICAgICAgICAgIGotPmNsZWFyKCk7CkBAIC0yMzcs
NyArMjM3LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVucwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vz
c2FyeS4KLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJ
bmRleF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhd
OwogICAgIGlmICgoYnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJ
bmRleCkpIHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMjcwLDExICsyNzAsMTEgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KHVucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKK2Jvb2wgR0lGSW1h
Z2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZy
YW1lRHVyYXRpb24sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIGRp
c3Bvc2FsTWV0aG9kKQogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2Fy
eS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2gg
Y2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUu
Ci0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhd
OworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAg
ICBpZiAoYnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkgaGFzIGFscmVhZHkg
Y2FsbGVkIHNldEZhaWxlZCgpLgogCkBAIC0yOTgsOCArMjk4LDggQEAgYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAgICAgICAgLy8gRmlyc3Qgc2tpcCBvdmVy
IHByaW9yIERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyBmcmFtZXMgKHNpbmNlIHRo
ZXkKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBm
cmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVCdWZm
ZXIoKS4KLSAgICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRl
eCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3Nh
bE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpKQorICAgICAgICAgICAgY29uc3QgYXV0byogcHJl
dkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAgICAgICAgICAg
IHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91
cykpCiAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1m
cmFtZUluZGV4XTsKIAogICAgICAgICAgICAgLy8gTm93LCBpZiB3ZSdyZSBhdCBhIERpc3Bvc2Fs
TWV0aG9kOjpVbnNwZWNpZmllZCBvciBEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3NlIGZyYW1l
LCB0aGVuCkBAIC0zMTEsNyArMzExLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29t
cGxldGUodW5zaQogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3Qg
aXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3Qs
IHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgogICAgICAgICAgICAgSW50
UmVjdCBwcmV2UmVjdCA9IHByZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsK
LSAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZy
YW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgJiYgIXByZXZCdWZmZXIt
Pmhhc0FscGhhKCkgJiYgcmVjdC5jb250YWlucyhwcmV2UmVjdCkpCisgICAgICAgICAgICBpZiAo
KHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpICYmICFwcmV2QnVmZmVyLT5o
YXNBbHBoYSgpICYmIHJlY3QuY29udGFpbnMocHJldlJlY3QpKQogICAgICAgICAgICAgICAgIGJ1
ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzAsNyArMzcw
LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBjb25zdCBHSUZGcmFt
ZUNvbnRleHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoKTsKICAgICBJ
bnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRleHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9m
ZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwgZnJhbWVDb250ZXh0LT5oZWlnaHQpOwotICAgIElt
YWdlRnJhbWUqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
CisgICAgYXV0byogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCkBAIC0z
ODUsMTYgKzM4NSwxNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
CiAgICAgICAgIC8vIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNv
IHNraXAgb3ZlciB0aGVtLiAgKElmIHRoZQogICAgICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZp
ZXMgdGhpcyBtZXRob2QsIGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQogICAgICAgICAvLyBEaXNw
b3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCBiZWxvdyBhbmQgcmVzZXQgdG8gYSBjb21w
bGV0ZWx5IGVtcHR5IGltYWdlLikKLSAgICAgICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgSW1hZ2VGcmFt
ZTo6RGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCk7Ci0gICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IEltYWdlRnJh
bWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKKyAgICAgICAgY29uc3Qg
YXV0byogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAg
ICAgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJldk1ldGhv
ZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgICAgIHdoaWxlIChmcmFtZUlu
ZGV4ICYmIChwcmV2TWV0aG9kID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2Fs
TWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAm
bV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAgICAgICAgICBwcmV2TWV0aG9k
ID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVChwcmV2QnVmZmVyLT5pc0NvbXBsZXRlKCkpOwogCi0gICAgICAgIGlmICgocHJldk1ldGhv
ZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQpIHx8IChwcmV2TWV0
aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpKSB7CisgICAg
ICAgIGlmICgocHJldk1ldGhvZCA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3Nh
bE1ldGhvZDo6VW5zcGVjaWZpZWQpIHx8IChwcmV2TWV0aG9kID09IFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpKSB7CiAgICAgICAgICAgICAv
LyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMg
ZnJhbWUuCiAgICAgICAgICAgICBpZiAoIXByZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgpIHx8ICFi
dWZmZXItPmluaXRpYWxpemUoKnByZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5o
CShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcg
QEAgcHVibGljOgogICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7CiAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdCBmaW5hbDsKICAgICBSZXBldGl0aW9uQ291bnQgcmVw
ZXRpdGlvbkNvdW50KCkgY29uc3QgZmluYWw7Ci0gICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCkgZmluYWw7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgZmluYWw7CiAgICAgLy8gQ0FVVElP
Tjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiBCZSBjYXJlZnVsIHRvIGF2b2lkCiAg
ICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0
aGlzIGZyb20gaW5zaWRlCiAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCkBAIC01OSw3ICs1OSw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgogICAgIGJv
b2wgaGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+JiByb3dCdWZmZXIsIHNpemVfdCB3aWR0aCwgc2l6ZV90IHJvd051bWJlciwgdW5z
aWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscyk7Ci0gICAgYm9v
bCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRp
b24sIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kKTsKKyAgICBib29sIGZyYW1lQ29tcGxldGUo
dW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2QpOwogICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gMjMw
Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc2LDExICs1NzYsMTEgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogICAgICAgICAgICAgLy8gTk9URTog
VGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRGlzcG9zYWxNZXRob2QgZW51bQogICAg
ICAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQogICAgICAgICAgICAg
aW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkgPj4gMikgJiAweDc7Ci0g
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZD4oZGlzcG9zYWxNZXRo
b2QpOwogICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBtZXRob2Qg
MyBpcyAib3ZlcndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZwogICAgICAgICAg
ICAgLy8gdGhlIHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlzLiBXZSBt
YXAgYm90aCB0byB0aGUgc2FtZSB2YWx1ZS4KICAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhv
ZCA9PSA0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXM7Cisg
ICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OlNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91
czsKICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lID0gR0VUSU5UMTYoY3VycmVu
dENvbXBvbmVudCArIDEpICogMTA7CiAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCShyZXZp
c2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCB3aWR0aDsKICAgICB1bnNpZ25lZCBoZWlnaHQ7CiAgICAgaW50
IHRwaXhlbDsgLy8gSW5kZXggb2YgdHJhbnNwYXJlbnQgcGl4ZWwuCi0gICAgV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFj
a2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KKyAgICBXZWJDb3JlOjpTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0
byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVfdCBsb2NhbENvbG9y
bWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9jYWxDb2xvcm1h
cFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCiAgICAgaW50IGRhdGFzaXpl
OwpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCB3aWR0aCgwKQogICAgICAg
ICAsIGhlaWdodCgwKQogICAgICAgICAsIHRwaXhlbCgwKQotICAgICAgICAsIGRpc3Bvc2FsTWV0
aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCkKKyAg
ICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
OjpEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQpCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFBv
c2l0aW9uKDApCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKICAgICAgICAgLCBkYXRh
c2l6ZSgwKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNv
L0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTMgQEAgc2l6ZV90IElD
T0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpIGNvbgogICAgIHJldHVybiBtX2ZyYW1lQnVmZmVy
Q2FjaGUuc2l6ZSgpOwogfQogCi1JbWFnZUZyYW1lKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBJQ09J
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgLy8g
RW5zdXJlIHxpbmRleHwgaXMgdmFsaWQuCiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSAmbV9mcmFtZUJ1
ZmZlckNhY2hlW2luZGV4XTsKKyAgICBhdXRvKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hl
W2luZGV4XTsKICAgICBpZiAoIWJ1ZmZlci0+aXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUo
aW5kZXgsIGZhbHNlLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKICAgICByZXR1cm4gYnVmZmVyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdl
RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIGZyYW1l
U2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdCBmaW5hbDsKICAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwogICAgIHNpemVfdCBmcmFtZUNvdW50
KCkgY29uc3QgZmluYWw7Ci0gICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCkgZmluYWw7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCkgZmluYWw7CiAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyBh
bGwgcmVhZGVycyBhbmQgZGVjb2RlcnMuIEJlIGNhcmVmdWwgdG8KICAgICAvLyBhdm9pZCBhY2Nl
c3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbQog
ICAgIC8vIGluc2lkZSBCTVBJbWFnZVJlYWRlciEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTExLDcgKzUxMSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJ
bnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW1hZ2VGcmFtZSogSlBFR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7
CiAgICAgaWYgKGluZGV4KQogICAgICAgICByZXR1cm4gMDsKQEAgLTUxOSw3ICs1MTksNyBAQCBJ
bWFnZUZyYW1lKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlCiAgICAgaWYgKG1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5ncm93KDEp
OwogCi0gICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAg
YXV0byYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKCFmcmFtZS5pc0Nv
bXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSwgaXNBbGxEYXRhUmVjZWl2ZWQoKSk7CiAg
ICAgcmV0dXJuICZmcmFtZTsKQEAgLTUzMiw3ICs1MzIsNyBAQCBib29sIEpQRUdJbWFnZURlY29k
ZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+
Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgdWludDMyX3QqIGN1cnJlbnRBZGRy
ZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCit2b2lkIHNldFBpeGVsKFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGJ1ZmZlciwgdWludDMyX3QqIGN1cnJlbnRBZGRyZXNzLCBK
U0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9
ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApA
QCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCB1aW50
MzIKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZSwgYm9vbCBpc1NjYWxl
ZD4KLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEltYWdlRnJhbWUmIGJ1
ZmZlcikKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWUmIGJ1ZmZlcikKIHsKICAgICBKU0FNUEFSUkFZIHNhbXBsZXMgPSBtX3Jl
YWRlci0+c2FtcGxlcygpOwogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3Jl
YWRlci0+aW5mbygpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
b3V0cHV0U2NhbmxpbmVzKEkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFj
ZT4KLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEltYWdlRnJhbWUmIGJ1
ZmZlcikKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWUmIGJ1ZmZlcikKIHsKICAgICByZXR1cm4gbV9zY2FsZWQgPyBvdXRwdXRT
Y2FubGluZXM8Y29sb3JTcGFjZSwgdHJ1ZT4oYnVmZmVyKSA6IG91dHB1dFNjYW5saW5lczxjb2xv
clNwYWNlLCBmYWxzZT4oYnVmZmVyKTsKIH0KQEAgLTU5Niw3ICs1OTYsNyBAQCBib29sIEpQRUdJ
bWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KLSAgICBJbWFnZUZy
YW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgYXV0byYgYnVmZmVyID0g
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlkKCkpIHsKICAg
ICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzY2FsZWRTaXplKCksIG1fcHJlbXVsdGlwbHlB
bHBoYSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CkBAIC02NDIsNyArNjQyLDcg
QEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUoKQogCiAgICAgLy8gSGFuZCBi
YWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgYnVmZmVyLCBldmVuIGlmIHRoZSBpbWFnZSBlbmRl
ZCB1cCBiZWluZwogICAgIC8vIGVtcHR5LgotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKKyAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF07CiAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICBidWZmZXIuc2V0RGVjb2Rp
bmdTdGF0dXMoRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFNjYWxh
YmxlSW1hZ2VEZWNvZGVyCiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgianBnIik7IH0KICAgICAgICAgYm9vbCBz
ZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICAgICAgSW1hZ2VGcmFtZSogZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7CisgICAgICAgIFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJy
aWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwu
ICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9y
eSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQogICAgICAgICAvLyBK
UEVHSW1hZ2VSZWFkZXIhCkBAIC04MCwxMCArODAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGRlY29kZShib29sIG9ubHlTaXplLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CiAKICAgICAgICAgdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZT4KLSAgICAgICAg
Ym9vbCBvdXRwdXRTY2FubGluZXMoSW1hZ2VGcmFtZSYgYnVmZmVyKTsKKyAgICAgICAgYm9vbCBv
dXRwdXRTY2FubGluZXMoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKTsKIAogICAg
ICAgICB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlLCBib29sIGlzU2NhbGVkPgot
ICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpOworICAgICAg
ICBib29sIG91dHB1dFNjYW5saW5lcyhTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIp
OwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxKUEVHSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIFBOR0lt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUlt
YWdlRnJhbWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICNpZiBFTkFCTEUoQVBORykKICAgICBpZiAoU2Nh
bGFibGVJbWFnZURlY29kZXI6OmVuY29kZWREYXRhU3RhdHVzKCkgPCBFbmNvZGVkRGF0YVN0YXR1
czo6U2l6ZUF2YWlsYWJsZSkKQEAgLTI2OSw3ICsyNjksNyBAQCBJbWFnZUZyYW1lKiBQTkdJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5ncm93KDEpOwogCi0gICAgSW1hZ2VGcmFt
ZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOworICAgIGF1dG8mIGZyYW1lID0g
bV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKICAgICBpZiAoIWZyYW1lLmlzQ29tcGxldGUoKSkK
ICAgICAgICAgZGVjb2RlKGZhbHNlLCBpbmRleCwgaXNBbGxEYXRhUmVjZWl2ZWQoKSk7CiAgICAg
cmV0dXJuICZmcmFtZTsKQEAgLTQyOCw3ICs0MjgsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgaWYgKG1fY3VycmVudEZyYW1lID49IGZyYW1lQ291bnQo
KSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCi0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9m
cmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKKyAgICBhdXRvJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlk
KCkpIHsKICAgICAgICAgcG5nX3N0cnVjdHAgcG5nID0gbV9yZWFkZXItPnBuZ1B0cigpOwogICAg
ICAgICBpZiAoIWJ1ZmZlci5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwgbV9wcmVtdWx0aXBseUFs
cGhhKSkgewpAQCAtNjMyLDcgKzYzMiw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyZWFkQ2h1
bmtzKHBuZ191bmsKICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5ncm93KDEpOwogCiAg
ICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkpIHsK
LSAgICAgICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1
cnJlbnRGcmFtZV07CisgICAgICAgICAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbbV9jdXJyZW50RnJhbWVdOwogCiAgICAgICAgICAgICBpZiAoIW1fZGVsYXlEZW5vbWluYXRv
cikKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0RHVyYXRpb24oU2Vjb25kczo6ZnJvbU1pbGxp
c2Vjb25kcyhtX2RlbGF5TnVtZXJhdG9yICogMTApKTsKQEAgLTY0MCwxMSArNjQwLDExIEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjpyZWFkQ2h1bmtzKHBuZ191bmsKICAgICAgICAgICAgICAgICBi
dWZmZXIuc2V0RHVyYXRpb24oU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhtX2RlbGF5TnVtZXJh
dG9yICogMTAwMCAvIG1fZGVsYXlEZW5vbWluYXRvcikpOwogCiAgICAgICAgICAgICBpZiAobV9k
aXNwb3NlID09IDIpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKElt
YWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyk7CisgICAgICAgICAg
ICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyk7CiAgICAgICAgICAgICBlbHNlIGlm
IChtX2Rpc3Bvc2UgPT0gMSkKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRo
b2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpOworICAg
ICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJh
bWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpOworICAgICAgICAgICAgICAgIGJ1ZmZl
ci5zZXREaXNwb3NhbE1ldGhvZChTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1l
dGhvZDo6RG9Ob3REaXNwb3NlKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZnJhbWVJbmZvID0g
dHJ1ZTsKQEAgLTcyNCwxNiArNzI0LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpjbGVhckZy
YW1lQnVmZmVyQ2EKIAogICAgIC8vIFNlZSBHSUZJbWFnZURlY29kZXIgZm9yIGZ1bGwgZXhwbGFu
YXRpb24uCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFyQmVmb3JlRnJhbWUs
IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBWZWN0b3I8SW1hZ2VG
cmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNsZWFyQmVm
b3JlRnJhbWUpOworICAgIGNvbnN0IFZlY3RvcjxTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lPjo6
aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZvcmVGcmFt
ZSk7CiAKLSAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKLSAgICBmb3Ig
KDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5pc0ludmFsaWQoKSB8
fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVz
dG9yZVRvUHJldmlvdXMpKTsgLS1pKSB7CisgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWU+OjppdGVyYXRvciBpKGVuZCk7CisgICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJD
YWNoZS5iZWdpbigpKSAmJiAoaS0+aXNJbnZhbGlkKCkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkg
PT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1By
ZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoaS0+aXNDb21wbGV0ZSgpICYmIChpICE9IGVu
ZCkpCiAgICAgICAgICAgICBpLT5jbGVhcigpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9s
ZHMgdGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVz
LgotICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJD
YWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKKyAgICBmb3IgKFZlY3RvcjxTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7
IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVCghai0+aXNQYXJ0aWFsKCkpOwogICAgICAg
ICBpZiAoai0+aXNJbnZhbGlkKCkpCiAgICAgICAgICAgICBqLT5jbGVhcigpOwpAQCAtNzQ1LDcg
Kzc0NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICBp
ZiAoZnJhbWVJbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIElt
YWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAgICBh
dXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAKICAgICAvLyBU
aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMg
ZnJhbWUncwogICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KQEAgLTc1NSw5ICs3NTUsOSBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpCiAgICAgLy8gdGhlIHN0YXJ0aW5n
IHN0YXRlIG9mIHRoZSBwcmV2aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhl
CiAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0
cmVhdGVkIGxpa2UKICAgICAvLyBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBiZWxvdyBhbmQgcmVz
ZXQgdG8gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLikKLSAgICBjb25zdCBJbWFnZUZyYW1lKiBw
cmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgIEltYWdl
RnJhbWU6OkRpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1l
dGhvZCgpOwotICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IEltYWdlRnJh
bWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKKyAgICBjb25zdCBhdXRv
KiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOworICAgIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2
QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOworICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2
TWV0aG9kID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0
b3JlVG9QcmV2aW91cykpIHsKICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbLS1mcmFtZUluZGV4XTsKICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bv
c2FsTWV0aG9kKCk7CiAgICAgfQpAQCAtNzY1LDcgKzc2NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+
cG5nUHRyKCk7CiAgICAgQVNTRVJUKHByZXZCdWZmZXItPmlzQ29tcGxldGUoKSk7CiAKLSAgICBp
ZiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3Nl
KSB7CisgICAgaWYgKHByZXZNZXRob2QgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlz
cG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFz
dCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCiAgICAgICAgIGlm
ICghcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCkgfHwgIWJ1ZmZlci5pbml0aWFsaXplKCpwcmV2
QnVmZmVyLT5iYWNraW5nU3RvcmUoKSkpCiAgICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcp
LCAxKTsKQEAgLTgwOSw3ICs4MDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21w
bGV0ZSgpCiAgICAgaWYgKG1fZnJhbWVJc0hpZGRlbiB8fCBtX2N1cnJlbnRGcmFtZSA+PSBmcmFt
ZUNvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CisgICAgYXV0byYgYnVmZmVyID0gbV9m
cmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKICAgICBidWZmZXIuc2V0RGVjb2RpbmdT
dGF0dXMoRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKIAogICAgIHBuZ19ieXRlcCBpbnRlcmxh
Y2VCdWZmZXIgPSBtX3JlYWRlci0+aW50ZXJsYWNlQnVmZmVyKCk7CkBAIC04NDMsMTIgKzg0Mywx
MiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIHNpemVfdCBmcmFtZUluZGV4ID0gbV9jdXJyZW50RnJhbWU7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVb
LS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJl
dkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6
UmVzdG9yZVRvUHJldmlvdXMpKQorICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8qIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CisgICAgICAgICAgICAgICAg
d2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3Vz
KSkKICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVb
LS1mcmFtZUluZGV4XTsKIAogICAgICAgICAgICAgICAgIEludFJlY3QgcHJldlJlY3QgPSBwcmV2
QnVmZmVyLT5iYWNraW5nU3RvcmUoKS0+ZnJhbWVSZWN0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBy
ZWN0LmNvbnRhaW5zKHByZXZSZWN0KSkKKyAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXIt
PmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxN
ZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYm
IHJlY3QuY29udGFpbnMocHJldlJlY3QpKQogICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0
SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFtX2Js
ZW5kICYmICFidWZmZXIuaGFzQWxwaGEoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJ
KHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9u
Q291bnQoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogICAgICAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKKyAgICAgICAgU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7CiAgICAg
ICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVm
dWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lh
bGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIFBOR0ltYWdlUmVh
ZGVyIQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9X
RUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJ
bWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIFJlcGV0aXRp
b25Db3VudCBXRUJQSW1hZ2VEZWNvZGVyOjpyZXBldGkKICAgICByZXR1cm4gbV9yZXBldGl0aW9u
Q291bnQgPyBtX3JlcGV0aXRpb25Db3VudCA6IFJlcGV0aXRpb25Db3VudEluZmluaXRlOwogfQog
Ci1JbWFnZUZyYW1lKiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogV0VCUEltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVD
b3VudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTExNyw3ICsxMTcsNyBAQCBzaXplX3QgV0VC
UEltYWdlRGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWlyCiAgICAgICAgIC8vIFRoaXMgZnJhbWUgY292
ZXJzIHRoZSB3aG9sZSBhcmVhIGFuZCBpdHMgZGlzcG9zYWxNZXRob2QgaXMgUmVzdG9yZVRvQmFj
a2dyb3VuZCwgd2hpY2ggbWVhbnMKICAgICAgICAgLy8gdGhhdCB0aGUgbmV4dCBmcmFtZSB3aWxs
IGJlIHJlbmRlcmVkIG9uIHRvcCBvZiBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQsIGFuZCBjYW4g
YmUgZGVjb2RlZAogICAgICAgICAvLyB3aXRob3V0IGRlcGVuZGVuY2llcy4gVGhpcyBjYW4gb25s
eSBiZSBjaGVja2VkIGZvciBmcmFtZXMgcHJpb3IgdG8gZnJhbWVJbmRleC4KLSAgICAgICAgaWYg
KGZpcnN0SW5kZXBlbmRlbnRGcmFtZSA8IGZyYW1lSW5kZXggJiYgbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZpcnN0SW5kZXBlbmRlbnRGcmFtZV0uZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkKKyAgICAgICAgaWYgKGZpcnN0SW5k
ZXBlbmRlbnRGcmFtZSA8IGZyYW1lSW5kZXggJiYgbV9mcmFtZUJ1ZmZlckNhY2hlW2ZpcnN0SW5k
ZXBlbmRlbnRGcmFtZV0uZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkKICAgICAgICAgICAgIHJl
dHVybiBmaXJzdEluZGVwZW5kZW50RnJhbWUgKyAxOwogICAgIH0KIApAQCAtMTcwLDkgKzE3MCw5
IEBAIHZvaWQgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlRnJhbWUoc2l6ZV8KICAgICBib29sIGJs
ZW5kID0gd2VicEZyYW1lLmJsZW5kX21ldGhvZCA9PSBXRUJQX01VWF9CTEVORCA/IHRydWUgOiBm
YWxzZTsKIAogICAgIEFTU0VSVChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gZnJhbWVJbmRl
eCk7Ci0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5k
ZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsK
ICAgICBidWZmZXIuc2V0RHVyYXRpb24oU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh3ZWJwRnJh
bWUuZHVyYXRpb24pKTsKLSAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2Qod2VicEZyYW1lLmRp
c3Bvc2VfbWV0aG9kID09IFdFQlBfTVVYX0RJU1BPU0VfQkFDS0dST1VORCA/IEltYWdlRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kIDogSW1hZ2VGcmFtZTo6RGlzcG9z
YWxNZXRob2Q6OkRvTm90RGlzcG9zZSk7CisgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKHdl
YnBGcmFtZS5kaXNwb3NlX21ldGhvZCA9PSBXRUJQX01VWF9ESVNQT1NFX0JBQ0tHUk9VTkQgPyBT
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dy
b3VuZCA6IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERp
c3Bvc2UpOwogICAgIEFTU0VSVCghYnVmZmVyLmlzQ29tcGxldGUoKSk7CiAKICAgICBpZiAoYnVm
ZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCwgJndlYnBGcmFt
ZSkpIHsKQEAgLTIyMyw3ICsyMjMsNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmluaXRGcmFt
ZUJ1ZmZlcihzCiAgICAgaWYgKGZyYW1lSW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbZnJhbWVJbmRleF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2Zy
YW1lSW5kZXhdOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVm
ZmVyLgogICAgIEludFJlY3QgZnJhbWVSZWN0KHdlYnBGcmFtZS0+eF9vZmZzZXQsIHdlYnBGcmFt
ZS0+eV9vZmZzZXQsIHdlYnBGcmFtZS0+d2lkdGgsIHdlYnBGcmFtZS0+aGVpZ2h0KTsKQEAgLTIz
NiwxNCArMjM2LDE0IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHMK
ICAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzaXplKCksIG1fcHJlbXVsdGlwbHlBbHBo
YSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29u
c3QgSW1hZ2VGcmFtZSYgcHJldkJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
IC0gMV07CisgICAgICAgIGNvbnN0IGF1dG8mIHByZXZCdWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbZnJhbWVJbmRleCAtIDFdOwogICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci5pc0NvbXBsZXRl
KCkpOwogCiAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGlu
ZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4KICAgICAgICAgaWYgKCFwcmV2QnVmZmVyLmJhY2tpbmdT
dG9yZSgpIHx8ICFidWZmZXIuaW5pdGlhbGl6ZSgqcHJldkJ1ZmZlci5iYWNraW5nU3RvcmUoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHByZXZCdWZmZXIuZGlz
cG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFj
a2dyb3VuZCkgeworICAgICAgICBpZiAocHJldkJ1ZmZlci5kaXNwb3NhbE1ldGhvZCgpID09IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3Jv
dW5kKSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFt
ZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVs
cyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCiAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXIuYmFja2luZ1N0b3JlKCktPmZyYW1lUmVjdCgp
OwpAQCAtMjU5LDcgKzI1OSw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKHMKIAogdm9pZCBXRUJQSW1hZ2VEZWNvZGVyOjphcHBseVBvc3RQcm9jZXNzaW5nKHNpemVf
dCBmcmFtZUluZGV4LCBXZWJQSURlY29kZXIqIGRlY29kZXIsIFdlYlBEZWNCdWZmZXImIGRlY29k
ZXJCdWZmZXIsIGJvb2wgYmxlbmQpCiB7Ci0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBpbnQgZGVjb2RlZFdpZHRoID0gMDsKICAgICBpbnQg
ZGVjb2RlZEhlaWdodCA9IDA7CiAgICAgaWYgKCFXZWJQSURlY0dldFJHQihkZWNvZGVyLCAmZGVj
b2RlZEhlaWdodCwgJmRlY29kZWRXaWR0aCwgMCwgMCkpCkBAIC0zNTIsNyArMzUyLDcgQEAgdm9p
ZCBXRUJQSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQwogICAgIC8vIEluIFdFQlAgZXZl
cnkgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgb25lIG9yIG5vbmUuIFRoYXQgbWVhbnMg
dGhhdCBmcmFtZXMgYWZ0ZXIgY2xlYXJCZWZvcmVGcmFtZQogICAgIC8vIHdvbid0IG5lZWQgYW55
IGZyYW1lIGJlZm9yZSB0aGVtIHRvIHJlbmRlciwgc28gd2UgY2FuIGNsZWFyIHRoZW0gYWxsLgog
ICAgIGZvciAoaW50IGkgPSBjbGVhckJlZm9yZUZyYW1lIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAg
ICAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ldOworICAgICAg
ICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV07CiAgICAgICAgIGlmICghYnVm
ZmVyLmlzSW52YWxpZCgpKQogICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
d2VicCIpOyB9CiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYsIGJvb2wpIGZpbmFsOwot
ICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRl
OworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpIG92ZXJyaWRlOwogICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQo
KSBjb25zdCBvdmVycmlkZTsKICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fZnJhbWVDb3VudDsgfQogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KHNpemVfdCkgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337504</attachid>
            <date>2018-04-09 09:50:19 -0700</date>
            <delta_ts>2018-04-11 05:37:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate-6.patch</filename>
            <type>text/plain</type>
            <size>67690</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDQ0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNiBAQAorMjAxOC0wNC0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2VGcmFtZSB0eXBlIHVz
ZWQgYnkgbm9uLUNvY29hIGltYWdlIGRlY29kZXIgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyB0
aGF0IHVzZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDQxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIHVzZXMgSW1hZ2VGcmFtZSBjbGFz
cyB3aGljaCBpcyBtZWFudCB0byBiZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgSW1hZ2VT
b3VyY2UuCisgICAgICAgIFRoZXJlIGFyZSBidW5jaCBvZiBmaWVsZHMgYW5kIG1ldGhvZHMgaW4g
dGhlIHR5cGUgdGhhdCBhcmUgb25seSB1c2VkIGJ5IG9uZSBvciB0aGUgb3RoZXIgY2xpZW50LiBG
b3IgaGFja2FiaWxpdHkKKyAgICAgICAgdGhlcmUgc2hvdWxkIGJlIGFuIHVucmVsYXRlZCBmcmFt
ZSB0eXBlIGZvciBTY2FsYWJsZUltYWdlRGVjb2Rlci4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHMgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSB0eXBlIHVzZWQgaW4gU2NhbGFibGVJbWFnZURl
Y29kZXIgb25seS4gSXQgdGhlbiBjbGVhbnMgdXAKKyAgICAgICAgdW5uZWVkZWQgdGhpbmdzIGZy
b20gYm90aCBJbWFnZUZyYW1lIGFuZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLgorCisgICAg
ICAgICogcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhckltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0
RGlzcG9zYWxNZXRob2QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
ZGlzcG9zYWxNZXRob2QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6YmFja2luZ1N0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRp
b25BdEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVy
OjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6On5TY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lOjpzZXREZWNvZGluZ1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lOjpkZWNvZGluZ1N0YXR1cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhckltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6On5JbWFnZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpvcGVyYXRvcj0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGVjb2RpbmdTdGF0dXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6Y2xlYXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojppbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNp
emUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzTmF0
aXZlSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
aGFzRnVsbFNpemVOYXRpdmVJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2luZ2xlUGl4
ZWxTb2xpZENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6ZGlzcG9zYWxNZXRo
b2QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6
aGFzQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZTo6aGFzQmFja2luZ1N0b3JlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkltYWdlRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
aXNJbnZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OmlzUGFydGlhbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojppc0NvbXBsZXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6ZnJhbWVCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzdWJzYW1wbGluZ0xldmVsIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldERpc3Bvc2FsTWV0aG9kKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpc3Bvc2FsTWV0aG9kIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9yaWVudGF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9yaWVudGF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldER1cmF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmR1cmF0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0FscGhhIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZl
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzTWV0YWRh
dGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFja2lu
Z1N0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhh
c0JhY2tpbmdTdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VSZWFkZXI6OnNldEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXI6OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRl
cjo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5oOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpK
UEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1h
Z2VEZWNvZGVyOjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rl
cjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rl
cjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dl
YnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVj
b2Rlcjo6ZmluZEZpcnN0UmVxdWlyZWRGcmFtZVRvRGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OmRlY29kZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldFQlBJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXRUJQSW1h
Z2VEZWNvZGVyOjphcHBseVBvc3RQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldFQlBJ
bWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTgtMDQtMDMgIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW09wZW5W
Ul1bV2ViVlJdIFJldHJpZXZlIEZyYW1lRGF0YSBpbiBXZWJWUidzIHJBRgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZURlY29kZXJzLmNtYWtlCShyZXZpc2lvbiAyMzAzNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZURlY29kZXJzLmNtYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJF
Q1RPUklFUwogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAogCiAgICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDE0ICs1Myw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdCAKICAgICBtX2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1czsK
ICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CiAKLSNpZiAhVVNFKENHKQotICAgIGlmIChvdGhl
ci5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0b3Jl
KCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAgIG1f
ZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwotI2VuZGlmCi0KICAgICBt
X25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKICAgICBtX3N1YnNhbXBsaW5nTGV2
ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2ZWw7CiAgICAgbV9kZWNvZGluZ09wdGlvbnMgPSBv
dGhlci5tX2RlY29kaW5nT3B0aW9uczsKQEAgLTg1LDExICs3Nyw2IEBAIERlY29kaW5nU3RhdHVz
IEltYWdlRnJhbWU6OmRlY29kaW5nU3RhdHUKIAogdW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXJJ
bWFnZSgpCiB7Ci0jaWYgIVVTRShDRykKLSAgICBpZiAoaGFzQmFja2luZ1N0b3JlKCkpCi0gICAg
ICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKLSNlbmRpZgotCiAgICAgaWYgKCFoYXNOYXRp
dmVJbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTA5LDMyICs5Niw4IEBAIHVuc2ln
bmVkIEltYWdlRnJhbWU6OmNsZWFyKCkKICAgICByZXR1cm4gZnJhbWVCeXRlczsKIH0KIAotI2lm
ICFVU0UoQ0cpCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCYWNraW5n
U3RvcmUmIGJhY2tpbmdTdG9yZSkKLXsKLSAgICBpZiAoJmJhY2tpbmdTdG9yZSA9PSB0aGlzLT5i
YWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX2JhY2tpbmdTdG9y
ZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoYmFja2luZ1N0b3JlKTsKLSAgICByZXR1cm4g
bV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjppbml0aWFs
aXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKLXsKLSAgICBp
ZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYmFja2lu
Z1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZShzaXplLCBwcmVtdWx0aXBseUFscGhh
KTsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKLX0KLSNlbmRpZgotCiBJ
bnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAogewotI2lmICFVU0UoQ0cpCi0gICAgaWYg
KGhhc0JhY2tpbmdTdG9yZSgpKQotICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlKCktPnNpemUo
KTsKLSNlbmRpZgogICAgIHJldHVybiBtX3NpemU7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCShyZXZpc2lvbiAyMzAzNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDExICs1Myw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjbGVhcklt
YWdlKCk7CiAgICAgdW5zaWduZWQgY2xlYXIoKTsKIAotI2lmICFVU0UoQ0cpCi0gICAgYm9vbCBp
bml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJik7Ci0gICAgYm9vbCBpbml0aWFsaXpl
KGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOwotI2VuZGlmCi0KICAgICB2
b2lkIHNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzKTsKICAgICBEZWNvZGluZ1N0YXR1
cyBkZWNvZGluZ1N0YXR1cygpIGNvbnN0OwogCkBAIC03MCwxMiArNjUsNiBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdlKCkg
PyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgpIDogMDsgfQog
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQogCi0jaWYgIVVTRShDRykKLSAgICBlbnVtIGNsYXNzIERpc3Bv
c2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dyb3Vu
ZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKLSAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERpc3Bv
c2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9Ci0gICAgRGlz
cG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0
aG9kOyB9Ci0jZW5kaWYKLQogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQogCiAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsg
fTsKQEAgLTkyLDIyICs4MSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNEZWNvZGVkTmF0aXZl
SW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGlu
Z0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpIGNvbnN0OwogICAgIGJvb2wgaGFzTWV0
YWRhdGEoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpLmlzRW1wdHkoKTsgfQogCi0jaWYgIVVTRShD
RykKLSAgICBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KLSAgICBi
b29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9Ci0j
ZW5kaWYKLQogICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIERlY29kaW5nU3RhdHVzIG1fZGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0YXR1
czo6SW52YWxpZCB9OwogICAgIEludFNpemUgbV9zaXplOwogCi0jaWYgIVVTRShDRykKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIERp
c3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZp
ZWQgfTsKLSNlbmRpZgotCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKICAgICBT
dWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRl
ZmF1bHQgfTsKICAgICBEZWNvZGluZ09wdGlvbnMgbV9kZWNvZGluZ09wdGlvbnM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpmcmFtZUlzQ29tcGxlCiAgICAgLy8gRklYTUUoMTc2MDg5KTogYXNraW5nIHdoZXRoZXIg
ZW5vdWdoIGRhdGEgaGFzIGJlZW4gYXBwZW5kZWQgZm9yIGEgZGVjb2RlCiAgICAgLy8gb3BlcmF0
aW9uIHRvIHN1Y2NlZWQgc2hvdWxkIG5vdCByZXF1aXJlIGRlY29kaW5nIHRoZSBlbnRpcmUgZnJh
bWUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50YWJsZSBpbiBhIHdh
eSB0aGF0IGFsbG93cyBjb25zdC4KLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBjb25zdF9jYXN0
PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7
CisgICAgYXV0byogYnVmZmVyID0gY29uc3RfY2FzdDxTY2FsYWJsZUltYWdlRGVjb2Rlcio+KHRo
aXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBidWZmZXIgJiYgYnVm
ZmVyLT5pc0NvbXBsZXRlKCk7CiB9CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBTZWNvbmRzIFNjYWxh
YmxlSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0CiAgICAgLy8gRklYTUUoMTc2MDg5KTogYXNraW5n
IGZvciB0aGUgZHVyYXRpb24gb2YgYSBzdWItaW1hZ2Ugc2hvdWxkIG5vdCByZXF1aXJlIGRlY29k
aW5nCiAgICAgLy8gdGhlIGVudGlyZSBmcmFtZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW1w
bGVtZW50YWJsZSBpbiBhIHdheSB0aGF0CiAgICAgLy8gYWxsb3dzIGNvbnN0LgotICAgIEltYWdl
RnJhbWUqIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIqPih0aGlzKS0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBjb25zdF9jYXN0
PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7
CiAgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5pc0ludmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IDBfczsKICAgICAKQEAgLTIyNSw3ICsyMjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBTY2FsYWJsZUlt
YWdlRGVjb2Rlcjo6Y3JlCiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwog
ICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+aXNJbnZhbGlkKCkgfHwgIWJ1ZmZlci0+aGFzQmFj
a2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxl
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDggKzI5LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpA
QCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBTY2FsYWJsZUltYWdl
RGVjb2RlciBpcyBhIGJhc2UgZm9yIGFsbCBmb3JtYXQtc3BlY2lmaWMgZGVjb2RlcnMKLS8vIChl
LmcuIEpQRUdJbWFnZURlY29kZXIpLiBUaGlzIGJhc2UgbWFuYWdlcyB0aGUgSW1hZ2VGcmFtZSBj
YWNoZS4KKy8vIChlLmcuIEpQRUdJbWFnZURlY29kZXIpLiBUaGlzIGJhc2UgbWFuYWdlcyB0aGUg
U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSBjYWNoZS4KIAogY2xhc3MgU2NhbGFibGVJbWFnZURl
Y29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
Y2FsYWJsZUltYWdlRGVjb2Rlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM0LDcg
KzEzNCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIERlY29kZXMgYXMgbXVjaCBvZiB0aGUgcmVxdWVz
dGVkIGZyYW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgogICAgIC8vIFNjYWxhYmxlSW1h
Z2VEZWNvZGVyLW93bmVkIHBvaW50ZXIuCi0gICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKICAgICBib29sIGZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMjA1LDcgKzIw
NSw3IEBAIHByb3RlY3RlZDoKICAgICBpbnQgc2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hT
dGFydCA9IDApOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5j
b2RlZCBkYXRhLgotICAgIFZlY3RvcjxJbWFnZUZyYW1lLCAxPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7
CisgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUsIDE+IG1fZnJhbWVCdWZmZXJD
YWNoZTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICBib29sIG1fc2NhbGVkIHsgZmFs
c2UgfTsKICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9T
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoyMzAzNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCit7Cit9
CisKK0ltYWdlRnJhbWU6On5JbWFnZUZyYW1lKCkKK3sKKyAgICBjbGVhckltYWdlKCk7Cit9CisK
K2NvbnN0IEltYWdlRnJhbWUmIEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEltYWdlRnJhbWU+IHNoYXJlZEluc3RhbmNlOworICAgIHJldHVy
biBzaGFyZWRJbnN0YW5jZTsKK30KKworSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9
KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IG90aGVyLm1fZGVj
b2RpbmdTdGF0dXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworCisjaWYgIVVTRShDRykK
KyAgICBpZiAob3RoZXIuYmFja2luZ1N0b3JlKCkpCisgICAgICAgIGluaXRpYWxpemUoKm90aGVy
LmJhY2tpbmdTdG9yZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKKyAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3NhbE1ldGhvZDsKKyNl
bmRpZgorCisgICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1hZ2U7CisgICAgbV9z
dWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZGVjb2Rp
bmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBtX29yaWVudGF0aW9u
ID0gb3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX2R1cmF0aW9uID0gb3RoZXIubV9kdXJhdGlv
bjsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMg
ZGVjb2RpbmdTdGF0dXMpCit7CisgICAgQVNTRVJUKGRlY29kaW5nU3RhdHVzICE9IERlY29kaW5n
U3RhdHVzOjpEZWNvZGluZyk7CisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IGRlY29kaW5nU3RhdHVz
OworfQorCitEZWNvZGluZ1N0YXR1cyBJbWFnZUZyYW1lOjpkZWNvZGluZ1N0YXR1cygpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1fZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29k
aW5nKTsKKyAgICByZXR1cm4gbV9kZWNvZGluZ1N0YXR1czsKK30KKwordW5zaWduZWQgSW1hZ2VG
cmFtZTo6Y2xlYXJJbWFnZSgpCit7CisjaWYgIVVTRShDRykKKyAgICBpZiAoaGFzQmFja2luZ1N0
b3JlKCkpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyNlbmRpZgorCisgICAg
aWYgKCFoYXNOYXRpdmVJbWFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisKKyAgICBjbGVhck5hdGl2ZUltYWdl
U3ViaW1hZ2VzKG1fbmF0aXZlSW1hZ2UpOworICAgIG1fbmF0aXZlSW1hZ2UgPSBudWxscHRyOwor
ICAgIG1fZGVjb2RpbmdPcHRpb25zID0gRGVjb2RpbmdPcHRpb25zKCk7CisKKyAgICByZXR1cm4g
ZnJhbWVCeXRlczsKK30KKwordW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQoreworICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7CisgICAgKnRoaXMgPSBJbWFnZUZyYW1l
KCk7CisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKKyNpZiAhVVNFKENHKQorYm9vbCBJbWFn
ZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUp
Cit7CisgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFja2luZ1N0b3JlKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKGJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlICE9IG51
bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFja2lu
Z1N0b3JlOjpjcmVhdGUoc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fYmFj
a2luZ1N0b3JlICE9IG51bGxwdHI7Cit9CisjZW5kaWYKKworSW50U2l6ZSBJbWFnZUZyYW1lOjpz
aXplKCkgY29uc3QKK3sKKyNpZiAhVVNFKENHKQorICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkK
KyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZSgpLT5zaXplKCk7CisjZW5kaWYKKyAgICByZXR1
cm4gbV9zaXplOworfQorICAgIAorYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRpdmVJbWFnZShjb25z
dCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBjb25z
dAoreworICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxpbmdMZXZlbCB8fCAq
c3Vic2FtcGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOworfQorCitib29sIEltYWdl
RnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1w
bGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTmF0
aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRpb25zLmlzU3luY2hy
b25vdXMoKSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsKK30KKworYm9vbCBJ
bWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29u
c3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc05hdGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2RpbmdPcHRpb25zLmlz
QXN5bmNocm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsKK30KKworQ29sb3Ig
SW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWhh
c05hdGl2ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVy
biBDb2xvcigpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9y
KG1fbmF0aXZlSW1hZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDI4ICsyNCwyMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbWFnZUZyYW1lLmgiCisjaW5jbHVkZSAiU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZS5oIgogCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCkKIHsKIH0KIAotSW1hZ2VGcmFtZTo6fklt
YWdlRnJhbWUoKQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6flNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUoKQogewogICAgIGNsZWFySW1hZ2UoKTsKIH0KIAotY29uc3QgSW1hZ2VGcmFtZSYg
SW1hZ2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SW1hZ2VGcmFtZT4gc2hhcmVkSW5zdGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwot
fQotCi1JbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYg
b3RoZXIpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lOjpvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIpCiB7
CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC01Mywx
NyArNDcsMTEgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAg
IG1fZGVjb2RpbmdTdGF0dXMgPSBvdGhlci5tX2RlY29kaW5nU3RhdHVzOwogICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKIAotI2lmICFVU0UoQ0cpCiAgICAgaWYgKG90aGVyLmJhY2tpbmdTdG9y
ZSgpKQogICAgICAgICBpbml0aWFsaXplKCpvdGhlci5iYWNraW5nU3RvcmUoKSk7CiAgICAgZWxz
ZQogICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9kaXNwb3NhbE1ldGhv
ZCA9IG90aGVyLm1fZGlzcG9zYWxNZXRob2Q7Ci0jZW5kaWYKLQotICAgIG1fbmF0aXZlSW1hZ2Ug
PSBvdGhlci5tX25hdGl2ZUltYWdlOwotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IG90aGVyLm1f
c3Vic2FtcGxpbmdMZXZlbDsKLSAgICBtX2RlY29kaW5nT3B0aW9ucyA9IG90aGVyLm1fZGVjb2Rp
bmdPcHRpb25zOwogCiAgICAgbV9vcmllbnRhdGlvbiA9IG90aGVyLm1fb3JpZW50YXRpb247CiAg
ICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CkBAIC03MSw0NiArNTksMzEgQEAgSW1h
Z2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAgIHJldHVybiAqdGhpczsK
IH0KIAotdm9pZCBJbWFnZUZyYW1lOjpzZXREZWNvZGluZ1N0YXR1cyhEZWNvZGluZ1N0YXR1cyBk
ZWNvZGluZ1N0YXR1cykKK3ZvaWQgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6c2V0RGVjb2Rp
bmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMpCiB7CiAgICAgQVNTRVJUKGRl
Y29kaW5nU3RhdHVzICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CiAgICAgbV9kZWNvZGlu
Z1N0YXR1cyA9IGRlY29kaW5nU3RhdHVzOwogfQogCi1EZWNvZGluZ1N0YXR1cyBJbWFnZUZyYW1l
OjpkZWNvZGluZ1N0YXR1cygpIGNvbnN0CitEZWNvZGluZ1N0YXR1cyBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lOjpkZWNvZGluZ1N0YXR1cygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGVjb2Rp
bmdTdGF0dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKTsKICAgICByZXR1cm4gbV9kZWNv
ZGluZ1N0YXR1czsKIH0KIAotdW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXJJbWFnZSgpCit2b2lk
IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFySW1hZ2UoKQogewotI2lmICFVU0UoQ0cp
Ci0gICAgaWYgKGhhc0JhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51
bGxwdHI7Ci0jZW5kaWYKLQotICAgIGlmICghaGFzTmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRlcygpOwot
Ci0gICAgY2xlYXJOYXRpdmVJbWFnZVN1YmltYWdlcyhtX25hdGl2ZUltYWdlKTsKLSAgICBtX25h
dGl2ZUltYWdlID0gbnVsbHB0cjsKLSAgICBtX2RlY29kaW5nT3B0aW9ucyA9IERlY29kaW5nT3B0
aW9ucygpOwotCi0gICAgcmV0dXJuIGZyYW1lQnl0ZXM7CisgICAgbV9iYWNraW5nU3RvcmUgPSBu
dWxscHRyOwogfQogCi11bnNpZ25lZCBJbWFnZUZyYW1lOjpjbGVhcigpCit2b2lkIFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFyKCkKIHsKLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0g
Y2xlYXJJbWFnZSgpOwotICAgICp0aGlzID0gSW1hZ2VGcmFtZSgpOwotICAgIHJldHVybiBmcmFt
ZUJ5dGVzOworICAgIGNsZWFySW1hZ2UoKTsKKyAgICAqdGhpcyA9IFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUoKTsKIH0KIAogI2lmICFVU0UoQ0cpCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxp
emUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKK2Jvb2wgU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgYmFj
a2luZ1N0b3JlKQogewogICAgIGlmICgmYmFja2luZ1N0b3JlID09IHRoaXMtPmJhY2tpbmdTdG9y
ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOSw3ICs5Miw3IEBAIGJvb2wgSW1hZ2VG
cmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbWFnZUIKICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUg
IT0gbnVsbHB0cjsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK2Jvb2wgU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5
QWxwaGEpCiB7CiAgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMjksNyArMTAyLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IElu
dFNpegogfQogI2VuZGlmCiAKLUludFNpemUgSW1hZ2VGcmFtZTo6c2l6ZSgpIGNvbnN0CitJbnRT
aXplIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OnNpemUoKSBjb25zdAogewogI2lmICFVU0Uo
Q0cpCiAgICAgaWYgKGhhc0JhY2tpbmdTdG9yZSgpKQpAQCAtMTM3LDI4ICsxMTAsNSBAQCBJbnRT
aXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAogI2VuZGlmCiAgICAgcmV0dXJuIG1fc2l6ZTsK
IH0KLSAgICAKLWJvb2wgSW1hZ2VGcmFtZTo6aGFzTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRp
b25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9uYXRpdmVJbWFnZSAmJiAoIXN1YnNhbXBsaW5nTGV2ZWwgfHwgKnN1YnNhbXBsaW5n
TGV2ZWwgPj0gbV9zdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpoYXNG
dWxsU2l6ZU5hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4m
IHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc05hdGl2ZUltYWdlKHN1
YnNhbXBsaW5nTGV2ZWwpICYmIChtX2RlY29kaW5nT3B0aW9ucy5pc1N5bmNocm9ub3VzKCkgfHwg
bV9kZWNvZGluZ09wdGlvbnMuaGFzRnVsbFNpemUoKSk7Ci19Ci0KLWJvb2wgSW1hZ2VGcmFtZTo6
aGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IHN0ZDo6b3B0
aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5n
T3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdAotewotICAgIHJldHVybiBoYXNOYXRpdmVJ
bWFnZShzdWJzYW1wbGluZ0xldmVsKSAmJiBtX2RlY29kaW5nT3B0aW9ucy5pc0FzeW5jaHJvbm91
c0NvbXBhdGlibGVXaXRoKGRlY29kaW5nT3B0aW9ucyk7Ci19Ci0KLUNvbG9yIEltYWdlRnJhbWU6
OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNOYXRpdmVJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LQotICAgIHJldHVybiBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihtX25hdGl2ZUlt
YWdlKTsKLX0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAko
cmV2aXNpb24gMjMwMzc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lLmg6MjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEZWNvZGluZ09w
dGlvbnMuaCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbWFnZVR5cGVzLmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUZyYW1lIHsKKyAgICBmcmllbmQg
Y2xhc3MgSW1hZ2VTb3VyY2U7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDYWNoaW5nIHsgTWV0
YWRhdGEsIE1ldGFkYXRhQW5kSW1hZ2UgfTsKKworICAgIEltYWdlRnJhbWUoKTsKKyAgICBJbWFn
ZUZyYW1lKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KKwor
ICAgIH5JbWFnZUZyYW1lKCk7CisKKyAgICBzdGF0aWMgY29uc3QgSW1hZ2VGcmFtZSYgZGVmYXVs
dEZyYW1lKCk7CisKKyAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYg
b3RoZXIpOworCisgICAgdW5zaWduZWQgY2xlYXJJbWFnZSgpOworICAgIHVuc2lnbmVkIGNsZWFy
KCk7CisKKyNpZiAhVVNFKENHKQorICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBJbWFnZUJhY2tp
bmdTdG9yZSYpOworICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiwgYm9vbCBwcmVt
dWx0aXBseUFscGhhKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXREZWNvZGluZ1N0YXR1cyhEZWNv
ZGluZ1N0YXR1cyk7CisgICAgRGVjb2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMoKSBjb25zdDsK
KworICAgIGJvb2wgaXNJbnZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1cyA9
PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZDsgfQorICAgIGJvb2wgaXNQYXJ0aWFsKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsgfQor
ICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0g
RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsK
KyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiAh
bV9vcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZSgpIDogc2l6ZSgpLnRyYW5z
cG9zZWRTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
aGFzTmF0aXZlSW1hZ2UoKSA/IChzaXplKCkuYXJlYSgpICogc2l6ZW9mKHVpbnQzMl90KSkudW5z
YWZlR2V0KCkgOiAwOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKCkg
Y29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9CisKKyNpZiAhVVNFKENHKQorICAg
IGVudW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBVbnNwZWNpZmllZCwgRG9Ob3REaXNwb3NlLCBS
ZXN0b3JlVG9CYWNrZ3JvdW5kLCBSZXN0b3JlVG9QcmV2aW91cyB9OworICAgIHZvaWQgc2V0RGlz
cG9zYWxNZXRob2QoRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBt
ZXRob2Q7IH0KKyAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KKyNlbmRpZgorCisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUltYWdlOyB9CisKKyAgICB2b2lkIHNl
dE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlv
biA9IG9yaWVudGF0aW9uOyB9OworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBj
b25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisKKyAgICB2b2lkIHNldER1cmF0aW9uKGNv
bnN0IFNlY29uZHMmIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAgIFNl
Y29uZHMgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisKKyAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9Cisg
ICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuICFoYXNNZXRhZGF0YSgpIHx8IG1faGFz
QWxwaGE7IH0KKworICAgIGJvb2wgaGFzTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxT
dWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pIGNvbnN0OworICAgIGJvb2wgaGFzRnVsbFNpemVOYXRp
dmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSkgY29u
c3Q7CisgICAgYm9vbCBoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMo
Y29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0
aW9ucyYpIGNvbnN0OworICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhc2l6
ZSgpLmlzRW1wdHkoKTsgfQorCisjaWYgIVVTRShDRykKKyAgICBJbWFnZUJhY2tpbmdTdG9yZSog
YmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdT
dG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9CisjZW5kaWYKKworICAgIENvbG9yIHNpbmdsZVBp
eGVsU29saWRDb2xvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIERlY29kaW5nU3RhdHVzIG1f
ZGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCB9OworICAgIEludFNpemUg
bV9zaXplOworCisjaWYgIVVTRShDRykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5n
U3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRo
b2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQgfTsKKyNlbmRpZgorCisgICAgTmF0aXZl
SW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxp
bmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQgfTsKKyAgICBEZWNvZGluZ09wdGlv
bnMgbV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRp
b24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OworICAgIFNlY29uZHMgbV9kdXJhdGlvbjsK
KyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZS5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDI3ICszNiwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEltYWdlRnJhbWUgewotICAgIGZyaWVuZCBjbGFzcyBJbWFnZVNvdXJjZTsKK2Ns
YXNzIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUgewogcHVibGljOgotICAgIGVudW0gY2xhc3Mg
Q2FjaGluZyB7IE1ldGFkYXRhLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZSgpOworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUoY29uc3QgU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIpIHsgb3BlcmF0b3I9KG90aGVyKTsgfQogCi0g
ICAgSW1hZ2VGcmFtZSgpOwotICAgIEltYWdlRnJhbWUoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIp
IHsgb3BlcmF0b3I9KG90aGVyKTsgfQorICAgIH5TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCk7
CiAKLSAgICB+SW1hZ2VGcmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lJiBkZWZhdWx0RnJhbWUoKTsKIAotICAgIHN0YXRpYyBjb25zdCBJbWFnZUZyYW1l
JiBkZWZhdWx0RnJhbWUoKTsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBvcGVyYXRv
cj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIpOwogCi0gICAgSW1hZ2VG
cmFtZSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKTsKKyAgICB2b2lkIGNsZWFy
SW1hZ2UoKTsKKyAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICB1bnNpZ25lZCBjbGVhckltYWdlKCk7
Ci0gICAgdW5zaWduZWQgY2xlYXIoKTsKLQotI2lmICFVU0UoQ0cpCiAgICAgYm9vbCBpbml0aWFs
aXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJik7CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0
IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOwotI2VuZGlmCiAKICAgICB2b2lkIHNl
dERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzKTsKICAgICBEZWNvZGluZ1N0YXR1cyBkZWNv
ZGluZ1N0YXR1cygpIGNvbnN0OwpAQCAtNjYsMTcgKzYxLDEwIEBAIHB1YmxpYzoKICAgICBib29s
IGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29kaW5n
U3RhdHVzOjpDb21wbGV0ZTsgfQogCiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7Ci0gICAgSW50
U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gIW1fb3JpZW50
YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUoKSA6IHNpemUoKS50cmFuc3Bvc2VkU2l6
ZSgpOyB9Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2
ZUltYWdlKCkgPyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgp
IDogMDsgfQotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3Vic2FtcGxpbmdMZXZlbDsgfQogCi0jaWYgIVVTRShDRykKICAgICBlbnVtIGNs
YXNzIERpc3Bvc2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRv
QmFja2dyb3VuZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKICAgICB2b2lkIHNldERpc3Bvc2FsTWV0
aG9kKERpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9
CiAgICAgRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rp
c3Bvc2FsTWV0aG9kOyB9Ci0jZW5kaWYKLQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQogCiAgICAgdm9pZCBzZXRPcmllbnRh
dGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmll
bnRhdGlvbjsgfTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmllbnRhdGlvbjsgfQpAQCAtODYsMzEgKzc0LDE3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0gaGFzQWxwaGE7
IH0KICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gIWhhc01ldGFkYXRhKCkgfHwg
bV9oYXNBbHBoYTsgfQotCi0gICAgYm9vbCBoYXNOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlv
bmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNGdWxsU2l6
ZU5hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9
KSBjb25zdDsKLSAgICBib29sIGhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0
aW9ucyhjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiwgY29uc3QgRGVjb2Rp
bmdPcHRpb25zJikgY29uc3Q7CiAgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCkuaXNFbXB0eSgpOyB9CiAKLSNpZiAhVVNFKENHKQogICAgIEltYWdlQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFj
a2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQogICAgIGJvb2wgaGFzQmFja2luZ1N0b3JlKCkg
Y29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0KLSNlbmRpZgotCi0gICAgQ29sb3Igc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRGVjb2RpbmdTdGF0
dXMgbV9kZWNvZGluZ1N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkIH07CiAgICAgSW50
U2l6ZSBtX3NpemU7CiAKLSNpZiAhVVNFKENHKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJh
Y2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3Nh
bE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCB9OwotI2VuZGlmCi0KLSAgICBO
YXRpdmVJbWFnZVB0ciBtX25hdGl2ZUltYWdlOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJz
YW1wbGluZ0xldmVsIHsgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9OwotICAgIERlY29kaW5n
T3B0aW9ucyBtX2RlY29kaW5nT3B0aW9uczsKIAogICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CiAgICAgU2Vjb25kcyBtX2R1cmF0
aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgQk1QSW1hZ2VE
ZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmYKICAgICAgICAgbV9yZWFkZXItPnNldERhdGEoJmRh
dGEpOwogfQogCi1JbWFnZUZyYW1lKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBCTVBJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTY0LDcgKzY0LDcgQEAgSW1hZ2VGcmFtZSogQk1QSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmZlcgogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
KQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZ3JvdygxKTsKIAotICAgIEltYWdlRnJhbWUq
IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKKyAgICBhdXRvKiBidWZmZXIg
PSAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7CiAgICAgaWYgKCFidWZmZXItPmlzQ29tcGxl
dGUoKSkKICAgICAgICAgZGVjb2RlKGZhbHNlLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKICAgICBy
ZXR1cm4gYnVmZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMw
Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAg
ICAvLyBTY2FsYWJsZUltYWdlRGVjb2RlcgogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYm1wIik7IH0KICAgICB2b2lkIHNl
dERhdGEoU2hhcmVkQnVmZmVyJiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIGZpbmFsOwotICAgIElt
YWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIGZpbmFsOworICAgIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
IGZpbmFsOwogICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4g
QmUgY2FyZWZ1bCB0byBhdm9pZAogICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNw
ZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQogICAgIC8vIEJNUEltYWdlUmVh
ZGVyIQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTEgQEAgcHVibGljOgogCiAgICAgLy8gfHBh
cmVudHwgaXMgdGhlIGRlY29kZXIgdGhhdCBvd25zIHVzLgogICAgIC8vIHxzdGFydE9mZnNldHwg
cG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgQk1QIHdpdGhpbiB0aGUgZmlsZS4KLSAgICAvLyB8
YnVmZmVyfCBwb2ludHMgYXQgYW4gZW1wdHkgSW1hZ2VGcmFtZSB0aGF0IHdlJ2xsIGluaXRpYWxp
emUgYW5kCisgICAgLy8gfGJ1ZmZlcnwgcG9pbnRzIGF0IGFuIGVtcHR5IFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUgdGhhdCB3ZSdsbCBpbml0aWFsaXplIGFuZAogICAgIC8vIGZpbGwgd2l0aCBk
ZWNvZGVkIGRhdGEuCiAgICAgQk1QSW1hZ2VSZWFkZXIoU2NhbGFibGVJbWFnZURlY29kZXIqIHBh
cmVudCwgc2l6ZV90IGRlY29kZWRBbmRIZWFkZXJPZmZzZXQsIHNpemVfdCBpbWdEYXRhT2Zmc2V0
LCBib29sIHVzZXNBbmRNYXNrKTsKIAotICAgIHZvaWQgc2V0QnVmZmVyKEltYWdlRnJhbWUqIGJ1
ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QnVmZmVyKFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWUqIGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQogICAgIHZv
aWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQogCiAgICAg
Ly8gRG9lcyB0aGUgYWN0dWFsIGRlY29kaW5nLiBJZiB8b25seVNpemV8IGlzIHRydWUsIGRlY29k
aW5nIG9ubHkKQEAgLTI2OSw3ICsyNjksNyBAQCBwcml2YXRlOgogICAgIFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyKiBtX3BhcmVudDsKIAogICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBpeGVs
IGRhdGEuCi0gICAgSW1hZ2VGcmFtZSogbV9idWZmZXI7CisgICAgU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZSogbV9idWZmZXI7CiAKICAgICAvLyBUaGUgZmlsZSB0byBkZWNvZGUuCiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5j
cHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTAg
KzEwNiwxMCBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RSZXF1aXJlCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgZm9yIChzaXplX3QgaSA9IGZyYW1lSW5kZXg7IGkgPiAwOyAt
LWkpIHsKLSAgICAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaSAt
IDFdOworICAgICAgICBhdXRvJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpIC0gMV07CiAK
ICAgICAgICAgLy8gRnJhbWVzIHdpdGggZGlzcG9zYWwgbWV0aG9kIFJlc3RvcmVUb1ByZXZpb3Vz
IGFyZSB1c2VsZXNzLCBza2lwIHRoZW0uCi0gICAgICAgIGlmIChmcmFtZS5kaXNwb3NhbE1ldGhv
ZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykKKyAg
ICAgICAgaWYgKGZyYW1lLmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGlzcG9zYWwgbWV0aG9kIGNh
biBiZSBVbnNwZWNpZmllZCwgRG9Ob3REaXNwb3NlIG9yIFJlc3RvcmVUb0JhY2tncm91bmQuCkBA
IC0xMTksNyArMTE5LDcgQEAgc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWly
ZQogCiAgICAgICAgIC8vIElmIHRoZSBkaXNwb3NhbCBtZXRob2Qgb2YgdGhpcyBmcmFtZSBpcyBS
ZXN0b3JlVG9CYWNrZ3JvdW5kIGFuZCBpdCBmaWxscyB0aGUgd2hvbGUgYXJlYSwKICAgICAgICAg
Ly8gdGhlIG5leHQgZnJhbWUncyBiYWNraW5nIHN0b3JlIGlzIGluaXRpYWxpemVkIHRvIHRyYW5z
cGFyZW50LCBzbyB3ZSBzdGFydCBkZWNvZGluZyB3aXRoIGl0LgotICAgICAgICBpZiAoZnJhbWUu
ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRv
QmFja2dyb3VuZCkgeworICAgICAgICBpZiAoZnJhbWUuZGlzcG9zYWxNZXRob2QoKSA9PSBTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3Vu
ZCkgewogICAgICAgICAgICAgLy8gV2UgY2Fubm90IHVzZSBmcmFtZS5iYWNraW5nU3RvcmUoKS0+
ZnJhbWVSZWN0KCkgaGVyZSwgYmVjYXVzZSBpdCBoYXMgYmVlbiBjbGVhcmVkCiAgICAgICAgICAg
ICAvLyB3aGVuIHRoZSBmcmFtZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4gV2UgbmVlZCB0
byBnZXQgdGhlIHZhbHVlcyBmcm9tIHRoZQogICAgICAgICAgICAgLy8gcmVhZGVyIGNvbnRleHQu
CkBAIC0xMzcsMTIgKzEzNywxMiBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RS
ZXF1aXJlCiAgICAgcmV0dXJuIDA7CiB9CiAKLUltYWdlRnJhbWUqIEdJRkltYWdlRGVjb2Rlcjo6
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWUqIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
ICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBhdXRv
JiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKCFmcmFtZS5pc0Nv
bXBsZXRlKCkpIHsKICAgICAgICAgZm9yIChhdXRvIGkgPSBmaW5kRmlyc3RSZXF1aXJlZEZyYW1l
VG9EZWNvZGUoaW5kZXgpOyBpIDw9IGluZGV4OyBpKyspCiAgICAgICAgICAgICBkZWNvZGUoaSAr
IDEsIEdJRkZ1bGxRdWVyeSwgaXNBbGxEYXRhUmVjZWl2ZWQoKSk7CkBAIC0xNzMsNyArMTczLDcg
QEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYQogICAgIC8vIGFsd2F5
cyB1c2UgSW1hZ2VTb3VyY2U6OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRo
ZSBtZW1vcnkgaW4KICAgICAvLyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0
ZDo6bWluKGNsZWFyQmVmb3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsK
LSAgICBjb25zdCBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVy
Q2FjaGUuYmVnaW4oKSArIGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IFZlY3RvcjxTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5i
ZWdpbigpICsgY2xlYXJCZWZvcmVGcmFtZSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZl
IGZyYW1lcyBzdWNoIHRoYXQ6CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHxlbmR8CkBAIC0x
OTMsMTQgKzE5MywxNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNh
CiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBwYXJ0aWFsLCB3ZSdyZSBkZWNvZGluZyBpdCwg
c28gZG9uJ3QgY2xlYXIgaXQ7IGlmIGl0CiAgICAgLy8gICAgIGhhcyBhIGRpc3Bvc2FsIG1ldGhv
ZCBvdGhlciB0aGFuIERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cywgc3RvcAogICAg
IC8vICAgICBzY2FubmluZywgYXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJhbWUgd2hlbiBkZWNv
ZGluZyB0aGUgbmV4dCBvbmUuCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBpKGVu
ZCk7Ci0gICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoaS0+
aXNJbnZhbGlkKCkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9z
YWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSk7IC0taSkgeworICAgIFZlY3RvcjxTY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOworICAgIGZvciAoOyAoaSAhPSBt
X2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKGktPmlzSW52YWxpZCgpIHx8IChpLT5kaXNw
b3NhbE1ldGhvZCgpID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9k
OjpSZXN0b3JlVG9QcmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKGktPmlzQ29tcGxldGUo
KSAmJiAoaSAhPSBlbmQpKQogICAgICAgICAgICAgaS0+Y2xlYXIoKTsKICAgICB9CiAKICAgICAv
LyBOb3cgfGl8IGhvbGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFy
IHByaW9yIGZyYW1lcy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3Igaiht
X2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChWZWN0
b3I8U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNh
Y2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoIWotPmlzUGFydGlh
bCgpKTsKICAgICAgICAgaWYgKCFqLT5pc0ludmFsaWQoKSkKICAgICAgICAgICAgIGotPmNsZWFy
KCk7CkBAIC0yMzcsNyArMjM3LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVk
Um93KHVucwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZy
YW1lIGlmIG5lY2Vzc2FyeS4KLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbZnJhbWVJbmRleF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZyYW1lSW5kZXhdOwogICAgIGlmICgoYnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVC
dWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMjcwLDExICsyNzAsMTEgQEAgYm9vbCBHSUZJbWFnZURlY29k
ZXI6OmhhdmVEZWNvZGVkUm93KHVucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdJRklt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBm
cmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkK
K2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bv
c2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1l
IGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBmcmFtZXMsCiAgICAg
Ly8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2RlZFJvdygpIGJlZm9yZSBn
ZXR0aW5nIGhlcmUuCi0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZyYW1lSW5kZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFt
ZUluZGV4XTsKICAgICBpZiAoYnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIo
ZnJhbWVJbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkg
aGFzIGFscmVhZHkgY2FsbGVkIHNldEZhaWxlZCgpLgogCkBAIC0yOTgsOCArMjk4LDggQEAgYm9v
bCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAgICAgICAgLy8gRmly
c3Qgc2tpcCBvdmVyIHByaW9yIERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyBmcmFt
ZXMgKHNpbmNlIHRoZXkKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3Rh
dGUgb2YgdGhpcyBmcmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBp
bml0RnJhbWVCdWZmZXIoKS4KLSAgICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICB3aGls
ZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZy
YW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpKQorICAgICAgICAgICAgY29u
c3QgYXV0byogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsK
KyAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1l
dGhvZCgpID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0
b3JlVG9QcmV2aW91cykpCiAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVm
ZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKIAogICAgICAgICAgICAgLy8gTm93LCBpZiB3ZSdyZSBh
dCBhIERpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCBvciBEaXNwb3NhbE1ldGhvZDo6RG9Ob3RE
aXNwb3NlIGZyYW1lLCB0aGVuCkBAIC0zMTEsNyArMzExLDcgQEAgYm9vbCBHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBh
bmQgaXRzIHJlY3QgaXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAg
ICAgIC8vIHJlY3QsIHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgogICAg
ICAgICAgICAgSW50UmVjdCBwcmV2UmVjdCA9IHByZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgpLT5m
cmFtZVJlY3QoKTsKLSAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgJiYg
IXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgcmVjdC5jb250YWlucyhwcmV2UmVjdCkpCisgICAg
ICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpICYmICFw
cmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIHJlY3QuY29udGFpbnMocHJldlJlY3QpKQogICAgICAg
ICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0zNzAsNyArMzcwLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1
bgogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBj
b25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRl
eHQoKTsKICAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRleHQtPnhPZmZzZXQsIGZyYW1l
Q29udGV4dC0+eU9mZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwgZnJhbWVDb250ZXh0LT5oZWln
aHQpOwotICAgIEltYWdlRnJhbWUqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVb
ZnJhbWVJbmRleF07CisgICAgYXV0byogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVtmcmFtZUluZGV4XTsKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3Vz
IGRhdGEuCkBAIC0zODUsMTYgKzM4NSwxNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuCiAgICAgICAgIC8vIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlv
dXMgZnJhbWUsIHNvIHNraXAgb3ZlciB0aGVtLiAgKElmIHRoZQogICAgICAgICAvLyBmaXJzdCBm
cmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2QsIGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQogICAg
ICAgICAvLyBEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCBiZWxvdyBhbmQgcmVz
ZXQgdG8gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLikKLSAgICAgICAgY29uc3QgSW1hZ2VGcmFt
ZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAg
ICAgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRp
c3Bvc2FsTWV0aG9kKCk7Ci0gICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9k
ID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKKyAg
ICAgICAgY29uc3QgYXV0byogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFt
ZUluZGV4XTsKKyAgICAgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRo
b2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgICAgIHdo
aWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKICAgICAgICAgICAgIHBy
ZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAgICAgICAg
ICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKICAgICAgICAgfQog
CiAgICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5pc0NvbXBsZXRlKCkpOwogCi0gICAgICAgIGlm
ICgocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQp
IHx8IChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bv
c2UpKSB7CisgICAgICAgIGlmICgocHJldk1ldGhvZCA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lOjpEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQpIHx8IChwcmV2TWV0aG9kID09IFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpKSB7CiAg
ICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3Rh
dGUgZm9yIHRoaXMgZnJhbWUuCiAgICAgICAgICAgICBpZiAoIXByZXZCdWZmZXItPmJhY2tpbmdT
dG9yZSgpIHx8ICFidWZmZXItPmluaXRpYWxpemUoKnByZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikg
ZmluYWw7CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdCBmaW5hbDsKICAgICBSZXBldGl0
aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgZmluYWw7Ci0gICAgSW1hZ2VGcmFtZSog
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgZmluYWw7CisgICAgU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgZmluYWw7CiAg
ICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiBCZSBjYXJlZnVs
IHRvIGF2b2lkCiAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdo
ZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVh
ZGVyLgogICAgIGJvb2wgaGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkIGNoYXI+JiByb3dCdWZmZXIsIHNpemVfdCB3aWR0aCwgc2l6ZV90IHJv
d051bWJlciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVs
cyk7Ci0gICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVk
IGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kKTsKKyAgICBib29sIGZy
YW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwg
U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2QpOwogICAgIHZvaWQgZ2lm
Q29tcGxldGUoKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAko
cmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc2LDExICs1NzYs
MTEgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogICAgICAgICAg
ICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRGlzcG9zYWxNZXRo
b2QgZW51bQogICAgICAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQog
ICAgICAgICAgICAgaW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqY3VycmVudENvbXBvbmVudCkgPj4g
MikgJiAweDc7Ci0gICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0
aG9kKTsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZD4o
ZGlzcG9zYWxNZXRob2QpOwogICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNw
b3NhbCBtZXRob2QgMyBpcyAib3ZlcndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGlu
ZwogICAgICAgICAgICAgLy8gdGhlIHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9k
IDQpIGlzLiBXZSBtYXAgYm90aCB0byB0aGUgc2FtZSB2YWx1ZS4KICAgICAgICAgICAgIGlmIChk
aXNwb3NhbE1ldGhvZCA9PSA0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9z
YWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRv
UHJldmlvdXM7CisgICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9
IFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0
b3JlVG9QcmV2aW91czsKICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1lID0gR0VU
SU5UMTYoY3VycmVudENvbXBvbmVudCArIDEpICogMTA7CiAgICAgICAgICAgICBHRVROKDEsIEdJ
RkNvbnN1bWVCbG9jayk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcg
KzE1NCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB3aWR0aDsKICAgICB1bnNpZ25lZCBoZWln
aHQ7CiAgICAgaW50IHRwaXhlbDsgLy8gSW5kZXggb2YgdHJhbnNwYXJlbnQgcGl4ZWwuCi0gICAg
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJl
c3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KKyAgICBXZWJDb3JlOjpT
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsg
Ly8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVf
dCBsb2NhbENvbG9ybWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQg
bG9jYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCiAgICAg
aW50IGRhdGFzaXplOwpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCB3aWR0
aCgwKQogICAgICAgICAsIGhlaWdodCgwKQogICAgICAgICAsIHRwaXhlbCgwKQotICAgICAgICAs
IGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpVbnNw
ZWNpZmllZCkKKyAgICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQpCiAgICAgICAgICwgbG9j
YWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKICAg
ICAgICAgLCBkYXRhc2l6ZSgwKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTMg
QEAgc2l6ZV90IElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpIGNvbgogICAgIHJldHVybiBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwogfQogCi1JbWFnZUZyYW1lKiBJQ09JbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCitTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
CiB7CiAgICAgLy8gRW5zdXJlIHxpbmRleHwgaXMgdmFsaWQuCiAgICAgaWYgKGluZGV4ID49IGZy
YW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbWFnZUZyYW1lKiBidWZmZXIg
PSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBhdXRvKiBidWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlW2luZGV4XTsKICAgICBpZiAoIWJ1ZmZlci0+aXNDb21wbGV0ZSgpKQogICAg
ICAgICBkZWNvZGUoaW5kZXgsIGZhbHNlLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKICAgICByZXR1
cm4gYnVmZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMwMzc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBJ
bnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdCBm
aW5hbDsKICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwogICAgIHNpemVf
dCBmcmFtZUNvdW50KCkgY29uc3QgZmluYWw7Ci0gICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCkgZmluYWw7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCkgZmluYWw7CiAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVk
KCkgZGVsZXRlcyBhbGwgcmVhZGVycyBhbmQgZGVjb2RlcnMuIEJlIGNhcmVmdWwgdG8KICAgICAv
LyBhdm9pZCBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5n
IHRoaXMgZnJvbQogICAgIC8vIGluc2lkZSBCTVBJbWFnZVJlYWRlciEKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTExLDcgKzUxMSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0
U2l6ZShjb25zdCBJbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW1hZ2VGcmFtZSogSlBFR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQogICAgICAgICByZXR1cm4gMDsKQEAgLTUxOSw3
ICs1MTksNyBAQCBJbWFnZUZyYW1lKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlCiAgICAg
aWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5ncm93KDEpOwogCi0gICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF07CisgICAgYXV0byYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYg
KCFmcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSwgaXNBbGxEYXRhUmVj
ZWl2ZWQoKSk7CiAgICAgcmV0dXJuICZmcmFtZTsKQEAgLTUzMiw3ICs1MzIsNyBAQCBib29sIEpQ
RUdJbWFnZURlY29kZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNF
IGNvbG9yU3BhY2U+Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgdWludDMyX3Qq
IGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCit2b2lkIHNl
dFBpeGVsKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGJ1ZmZlciwgdWludDMyX3QqIGN1cnJl
bnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBM
RSoganNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/
IDMgOiA0KTsKIApAQCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYg
YnVmZmVyLCB1aW50MzIKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZSwg
Ym9vbCBpc1NjYWxlZD4KLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKElt
YWdlRnJhbWUmIGJ1ZmZlcikKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVz
KFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGJ1ZmZlcikKIHsKICAgICBKU0FNUEFSUkFZIHNh
bXBsZXMgPSBtX3JlYWRlci0+c2FtcGxlcygpOwogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3Qq
IGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIGJvb2wgSlBFR0lt
YWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BB
Q0UgY29sb3JTcGFjZT4KLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKElt
YWdlRnJhbWUmIGJ1ZmZlcikKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVz
KFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGJ1ZmZlcikKIHsKICAgICByZXR1cm4gbV9zY2Fs
ZWQgPyBvdXRwdXRTY2FubGluZXM8Y29sb3JTcGFjZSwgdHJ1ZT4oYnVmZmVyKSA6IG91dHB1dFNj
YW5saW5lczxjb2xvclNwYWNlLCBmYWxzZT4oYnVmZmVyKTsKIH0KQEAgLTU5Niw3ICs1OTYsNyBA
QCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4K
LSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgYXV0
byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuaXNJbnZh
bGlkKCkpIHsKICAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzY2FsZWRTaXplKCksIG1f
cHJlbXVsdGlwbHlBbHBoYSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CkBAIC02
NDIsNyArNjQyLDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUoKQogCiAg
ICAgLy8gSGFuZCBiYWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgYnVmZmVyLCBldmVuIGlmIHRo
ZSBpbWFnZSBlbmRlZCB1cCBiZWluZwogICAgIC8vIGVtcHR5LgotICAgIEltYWdlRnJhbWUmIGJ1
ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF07CiAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICBidWZm
ZXIuc2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIFNjYWxhYmxlSW1hZ2VEZWNvZGVyCiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgianBnIik7IH0KICAg
ICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKLSAgICAgICAgSW1h
Z2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7CisgICAg
ICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVz
IHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBk
ZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQog
ICAgICAgICAvLyBKUEVHSW1hZ2VSZWFkZXIhCkBAIC04MCwxMCArODAsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGRlY29kZShib29sIG9ubHlTaXplLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CiAKICAgICAgICAgdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFj
ZT4KLSAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoSW1hZ2VGcmFtZSYgYnVmZmVyKTsKKyAg
ICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVm
ZmVyKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlLCBib29s
IGlzU2NhbGVkPgotICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcyhJbWFnZUZyYW1lJiBidWZm
ZXIpOworICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcyhTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lJiBidWZmZXIpOwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxKUEVHSW1hZ2VSZWFkZXI+
IG1fcmVhZGVyOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBA
QCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUltYWdlRnJhbWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIFBOR0ltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICNpZiBFTkFCTEUoQVBORykK
ICAgICBpZiAoU2NhbGFibGVJbWFnZURlY29kZXI6OmVuY29kZWREYXRhU3RhdHVzKCkgPCBFbmNv
ZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKQEAgLTI2OSw3ICsyNjksNyBAQCBJbWFnZUZy
YW1lKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5ncm93KDEpOwogCi0g
ICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOworICAgIGF1
dG8mIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKICAgICBpZiAoIWZyYW1lLmlz
Q29tcGxldGUoKSkKICAgICAgICAgZGVjb2RlKGZhbHNlLCBpbmRleCwgaXNBbGxEYXRhUmVjZWl2
ZWQoKSk7CiAgICAgcmV0dXJuICZmcmFtZTsKQEAgLTQyOCw3ICs0MjgsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgaWYgKG1fY3VycmVudEZyYW1lID49
IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCi0gICAgSW1hZ2VGcmFtZSYg
YnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKKyAgICBhdXRvJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwogICAgIGlmIChidWZm
ZXIuaXNJbnZhbGlkKCkpIHsKICAgICAgICAgcG5nX3N0cnVjdHAgcG5nID0gbV9yZWFkZXItPnBu
Z1B0cigpOwogICAgICAgICBpZiAoIWJ1ZmZlci5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwgbV9w
cmVtdWx0aXBseUFscGhhKSkgewpAQCAtNjMyLDcgKzYzMiw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpyZWFkQ2h1bmtzKHBuZ191bmsKICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5n
cm93KDEpOwogCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA8IG1fZnJhbWVCdWZmZXJDYWNo
ZS5zaXplKCkpIHsKLSAgICAgICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CisgICAgICAgICAgICBhdXRvJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwogCiAgICAgICAgICAgICBpZiAoIW1fZGVs
YXlEZW5vbWluYXRvcikKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0RHVyYXRpb24oU2Vjb25k
czo6ZnJvbU1pbGxpc2Vjb25kcyhtX2RlbGF5TnVtZXJhdG9yICogMTApKTsKQEAgLTY0MCwxMSAr
NjQwLDExIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyZWFkQ2h1bmtzKHBuZ191bmsKICAgICAg
ICAgICAgICAgICBidWZmZXIuc2V0RHVyYXRpb24oU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyht
X2RlbGF5TnVtZXJhdG9yICogMTAwMCAvIG1fZGVsYXlEZW5vbWluYXRvcikpOwogCiAgICAgICAg
ICAgICBpZiAobV9kaXNwb3NlID09IDIpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bv
c2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyk7
CisgICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChtX2Rpc3Bvc2UgPT0gMSkKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0
RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tn
cm91bmQpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChTY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0
aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpOworICAgICAgICAg
ICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
OjpEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3NlKTsKICAgICAgICAgfQogCiAgICAgICAgIG1f
ZnJhbWVJbmZvID0gdHJ1ZTsKQEAgLTcyNCwxNiArNzI0LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKIAogICAgIC8vIFNlZSBHSUZJbWFnZURlY29kZXIgZm9y
IGZ1bGwgZXhwbGFuYXRpb24uCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFy
QmVmb3JlRnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4o
KSArIGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IFZlY3RvcjxTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xl
YXJCZWZvcmVGcmFtZSk7CiAKLSAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5k
KTsKLSAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5p
c0ludmFsaWQoKSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3Nh
bE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpKTsgLS1pKSB7CisgICAgVmVjdG9yPFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWU+OjppdGVyYXRvciBpKGVuZCk7CisgICAgZm9yICg7IChpICE9IG1f
ZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoaS0+aXNJbnZhbGlkKCkgfHwgKGktPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6
OlJlc3RvcmVUb1ByZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoaS0+aXNDb21wbGV0ZSgp
ICYmIChpICE9IGVuZCkpCiAgICAgICAgICAgICBpLT5jbGVhcigpOwogICAgIH0KIAogICAgIC8v
IE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIg
cHJpb3IgZnJhbWVzLgotICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1f
ZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKKyAgICBmb3IgKFZlY3Rv
cjxTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2Fj
aGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVCghai0+aXNQYXJ0aWFs
KCkpOwogICAgICAgICBpZiAoai0+aXNJbnZhbGlkKCkpCiAgICAgICAgICAgICBqLT5jbGVhcigp
OwpAQCAtNzQ1LDcgKzc0NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZm
ZXIoc2kKICAgICBpZiAoZnJhbWVJbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUlu
ZGV4XTsKKyAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
CiAKICAgICAvLyBUaGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0
aGUgcHJldmlvdXMgZnJhbWUncwogICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KQEAgLTc1NSw5ICs3
NTUsOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpCiAgICAgLy8g
dGhlIHN0YXJ0aW5nIHN0YXRlIG9mIHRoZSBwcmV2aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRo
ZW0uICAoSWYgdGhlCiAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBp
dCB3aWxsIGdldCB0cmVhdGVkIGxpa2UKICAgICAvLyBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBi
ZWxvdyBhbmQgcmVzZXQgdG8gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLikKLSAgICBjb25zdCBJ
bWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhd
OwotICAgIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVy
LT5kaXNwb3NhbE1ldGhvZCgpOwotICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9k
ID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKKyAg
ICBjb25zdCBhdXRvKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5k
ZXhdOworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIHByZXZN
ZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOworICAgIHdoaWxlIChmcmFtZUlu
ZGV4ICYmIChwcmV2TWV0aG9kID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2Fs
TWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgfQpAQCAtNzY1LDcgKzc2NSw3IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICBwbmdfc3RydWN0cCBwbmcg
PSBtX3JlYWRlci0+cG5nUHRyKCk7CiAgICAgQVNTRVJUKHByZXZCdWZmZXItPmlzQ29tcGxldGUo
KSk7CiAKLSAgICBpZiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6
RG9Ob3REaXNwb3NlKSB7CisgICAgaWYgKHByZXZNZXRob2QgPT0gU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSkgewogICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUu
CiAgICAgICAgIGlmICghcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCkgfHwgIWJ1ZmZlci5pbml0
aWFsaXplKCpwcmV2QnVmZmVyLT5iYWNraW5nU3RvcmUoKSkpCiAgICAgICAgICAgICBsb25nam1w
KEpNUEJVRihwbmcpLCAxKTsKQEAgLTgwOSw3ICs4MDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgaWYgKG1fZnJhbWVJc0hpZGRlbiB8fCBtX2N1cnJlbnRG
cmFtZSA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRnJhbWUm
IGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CisgICAgYXV0byYg
YnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKICAgICBidWZmZXIu
c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKIAogICAgIHBuZ19i
eXRlcCBpbnRlcmxhY2VCdWZmZXIgPSBtX3JlYWRlci0+aW50ZXJsYWNlQnVmZmVyKCk7CkBAIC04
NDMsMTIgKzg0MywxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAg
ICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgIHNpemVfdCBmcmFtZUluZGV4ID0gbV9jdXJyZW50RnJhbWU7
Ci0gICAgICAgICAgICAgICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1l
QnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJ
bmRleCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNw
b3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpKQorICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8qIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CisgICAg
ICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3Rv
cmVUb1ByZXZpb3VzKSkKICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1l
QnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKIAogICAgICAgICAgICAgICAgIEludFJlY3QgcHJl
dlJlY3QgPSBwcmV2QnVmZmVyLT5iYWNraW5nU3RvcmUoKS0+ZnJhbWVSZWN0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kKSAmJiAhcHJldkJ1ZmZlci0+aGFz
QWxwaGEoKSAmJiByZWN0LmNvbnRhaW5zKHByZXZSZWN0KSkKKyAgICAgICAgICAgICAgICBpZiAo
KHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpICYmICFwcmV2QnVmZmVyLT5o
YXNBbHBoYSgpICYmIHJlY3QuY29udGFpbnMocHJldlJlY3QpKQogICAgICAgICAgICAgICAgICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKCFtX2JsZW5kICYmICFidWZmZXIuaGFzQWxwaGEoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlcGV0aXRpb25Db3Vu
dCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogICAgICAgICBib29s
IHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgICAgICBJbWFnZUZyYW1lKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKKyAgICAgICAgU2NhbGFi
bGVJbWFnZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3Zl
cnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVy
fC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVt
b3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8v
IFBOR0ltYWdlUmVhZGVyIQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCShy
ZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBAIFJlcGV0aXRpb25Db3VudCBXRUJQSW1hZ2VEZWNvZGVyOjpyZXBldGkKICAgICByZXR1cm4g
bV9yZXBldGl0aW9uQ291bnQgPyBtX3JlcGV0aXRpb25Db3VudCA6IFJlcGV0aXRpb25Db3VudElu
ZmluaXRlOwogfQogCi1JbWFnZUZyYW1lKiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogV0VCUEltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTExNyw3ICsxMTcsNyBA
QCBzaXplX3QgV0VCUEltYWdlRGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWlyCiAgICAgICAgIC8vIFRo
aXMgZnJhbWUgY292ZXJzIHRoZSB3aG9sZSBhcmVhIGFuZCBpdHMgZGlzcG9zYWxNZXRob2QgaXMg
UmVzdG9yZVRvQmFja2dyb3VuZCwgd2hpY2ggbWVhbnMKICAgICAgICAgLy8gdGhhdCB0aGUgbmV4
dCBmcmFtZSB3aWxsIGJlIHJlbmRlcmVkIG9uIHRvcCBvZiBhIHRyYW5zcGFyZW50IGJhY2tncm91
bmQsIGFuZCBjYW4gYmUgZGVjb2RlZAogICAgICAgICAvLyB3aXRob3V0IGRlcGVuZGVuY2llcy4g
VGhpcyBjYW4gb25seSBiZSBjaGVja2VkIGZvciBmcmFtZXMgcHJpb3IgdG8gZnJhbWVJbmRleC4K
LSAgICAgICAgaWYgKGZpcnN0SW5kZXBlbmRlbnRGcmFtZSA8IGZyYW1lSW5kZXggJiYgbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ZpcnN0SW5kZXBlbmRlbnRGcmFtZV0uZGlzcG9zYWxNZXRob2QoKSA9PSBJ
bWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkKKyAgICAgICAg
aWYgKGZpcnN0SW5kZXBlbmRlbnRGcmFtZSA8IGZyYW1lSW5kZXggJiYgbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ZpcnN0SW5kZXBlbmRlbnRGcmFtZV0uZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkKICAg
ICAgICAgICAgIHJldHVybiBmaXJzdEluZGVwZW5kZW50RnJhbWUgKyAxOwogICAgIH0KIApAQCAt
MTcwLDkgKzE3MCw5IEBAIHZvaWQgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlRnJhbWUoc2l6ZV8K
ICAgICBib29sIGJsZW5kID0gd2VicEZyYW1lLmJsZW5kX21ldGhvZCA9PSBXRUJQX01VWF9CTEVO
RCA/IHRydWUgOiBmYWxzZTsKIAogICAgIEFTU0VSVChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgp
ID4gZnJhbWVJbmRleCk7Ci0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ZyYW1lSW5kZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtm
cmFtZUluZGV4XTsKICAgICBidWZmZXIuc2V0RHVyYXRpb24oU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcyh3ZWJwRnJhbWUuZHVyYXRpb24pKTsKLSAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2Qo
d2VicEZyYW1lLmRpc3Bvc2VfbWV0aG9kID09IFdFQlBfTVVYX0RJU1BPU0VfQkFDS0dST1VORCA/
IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kIDogSW1hZ2VG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSk7CisgICAgYnVmZmVyLnNldERpc3Bv
c2FsTWV0aG9kKHdlYnBGcmFtZS5kaXNwb3NlX21ldGhvZCA9PSBXRUJQX01VWF9ESVNQT1NFX0JB
Q0tHUk9VTkQgPyBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVz
dG9yZVRvQmFja2dyb3VuZCA6IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpEb05vdERpc3Bvc2UpOwogICAgIEFTU0VSVCghYnVmZmVyLmlzQ29tcGxldGUoKSk7CiAK
ICAgICBpZiAoYnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRl
eCwgJndlYnBGcmFtZSkpIHsKQEAgLTIyMyw3ICsyMjMsNyBAQCBib29sIFdFQlBJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcihzCiAgICAgaWYgKGZyYW1lSW5kZXggPj0gZnJhbWVDb3VudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVj
dCBpbiBvdXIgYnVmZmVyLgogICAgIEludFJlY3QgZnJhbWVSZWN0KHdlYnBGcmFtZS0+eF9vZmZz
ZXQsIHdlYnBGcmFtZS0+eV9vZmZzZXQsIHdlYnBGcmFtZS0+d2lkdGgsIHdlYnBGcmFtZS0+aGVp
Z2h0KTsKQEAgLTIzNiwxNCArMjM2LDE0IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHMKICAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzaXplKCksIG1fcHJl
bXVsdGlwbHlBbHBoYSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgY29uc3QgSW1hZ2VGcmFtZSYgcHJldkJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtmcmFtZUluZGV4IC0gMV07CisgICAgICAgIGNvbnN0IGF1dG8mIHByZXZCdWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleCAtIDFdOwogICAgICAgICBBU1NFUlQocHJldkJ1ZmZl
ci5pc0NvbXBsZXRlKCkpOwogCiAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFz
IHRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4KICAgICAgICAgaWYgKCFwcmV2QnVm
ZmVyLmJhY2tpbmdTdG9yZSgpIHx8ICFidWZmZXIuaW5pdGlhbGl6ZSgqcHJldkJ1ZmZlci5iYWNr
aW5nU3RvcmUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHBy
ZXZCdWZmZXIuZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6
UmVzdG9yZVRvQmFja2dyb3VuZCkgeworICAgICAgICBpZiAocHJldkJ1ZmZlci5kaXNwb3NhbE1l
dGhvZCgpID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0
b3JlVG9CYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBw
cmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZm
ZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCiAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXIuYmFja2luZ1N0b3JlKCkt
PmZyYW1lUmVjdCgpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6
aW5pdEZyYW1lQnVmZmVyKHMKIAogdm9pZCBXRUJQSW1hZ2VEZWNvZGVyOjphcHBseVBvc3RQcm9j
ZXNzaW5nKHNpemVfdCBmcmFtZUluZGV4LCBXZWJQSURlY29kZXIqIGRlY29kZXIsIFdlYlBEZWNC
dWZmZXImIGRlY29kZXJCdWZmZXIsIGJvb2wgYmxlbmQpCiB7Ci0gICAgSW1hZ2VGcmFtZSYgYnVm
ZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9
IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBpbnQgZGVjb2RlZFdpZHRoID0g
MDsKICAgICBpbnQgZGVjb2RlZEhlaWdodCA9IDA7CiAgICAgaWYgKCFXZWJQSURlY0dldFJHQihk
ZWNvZGVyLCAmZGVjb2RlZEhlaWdodCwgJmRlY29kZWRXaWR0aCwgMCwgMCkpCkBAIC0zNTIsNyAr
MzUyLDcgQEAgdm9pZCBXRUJQSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQwogICAgIC8v
IEluIFdFQlAgZXZlcnkgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgb25lIG9yIG5vbmUu
IFRoYXQgbWVhbnMgdGhhdCBmcmFtZXMgYWZ0ZXIgY2xlYXJCZWZvcmVGcmFtZQogICAgIC8vIHdv
bid0IG5lZWQgYW55IGZyYW1lIGJlZm9yZSB0aGVtIHRvIHJlbmRlciwgc28gd2UgY2FuIGNsZWFy
IHRoZW0gYWxsLgogICAgIGZvciAoaW50IGkgPSBjbGVhckJlZm9yZUZyYW1lIC0gMTsgaSA+PSAw
OyBpLS0pIHsKLSAgICAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ldOworICAgICAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV07CiAgICAg
ICAgIGlmICghYnVmZmVyLmlzSW52YWxpZCgpKQogICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2Vi
cC9XRUJQSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUElt
YWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAog
ICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgid2VicCIpOyB9CiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYsIGJv
b2wpIGZpbmFsOwotICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5k
ZXgpIG92ZXJyaWRlOworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgIFJlcGV0aXRpb25Db3VudCByZXBl
dGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZTsKICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZnJhbWVDb3VudDsgfQogICAgIHZvaWQgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKHNpemVfdCkgb3ZlcnJpZGU7Cg==
</data>
<flag name="review"
          id="355898"
          type_id="1"
          status="+"
          setter="sabouhallawa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337691</attachid>
            <date>2018-04-11 05:37:56 -0700</date>
            <delta_ts>2018-04-11 06:00:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate-7.patch</filename>
            <type>text/plain</type>
            <size>67541</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDQ0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNiBAQAorMjAxOC0wNC0xMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2VGcmFtZSB0eXBlIHVz
ZWQgYnkgbm9uLUNvY29hIGltYWdlIGRlY29kZXIgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyB0
aGF0IHVzZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDQxOAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhaWQgQWJvdS1I
YWxsYXdhLgorCisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIHVzZXMgSW1hZ2VGcmFtZSBj
bGFzcyB3aGljaCBpcyBtZWFudCB0byBiZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgSW1h
Z2VTb3VyY2UuCisgICAgICAgIFRoZXJlIGFyZSBidW5jaCBvZiBmaWVsZHMgYW5kIG1ldGhvZHMg
aW4gdGhlIHR5cGUgdGhhdCBhcmUgb25seSB1c2VkIGJ5IG9uZSBvciB0aGUgb3RoZXIgY2xpZW50
LiBGb3IgaGFja2FiaWxpdHkKKyAgICAgICAgdGhlcmUgc2hvdWxkIGJlIGFuIHVucmVsYXRlZCBm
cmFtZSB0eXBlIGZvciBTY2FsYWJsZUltYWdlRGVjb2Rlci4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSB0eXBlIHVzZWQgaW4gU2NhbGFibGVJbWFn
ZURlY29kZXIgb25seS4gSXQgdGhlbiBjbGVhbnMgdXAKKyAgICAgICAgdW5uZWVkZWQgdGhpbmdz
IGZyb20gYm90aCBJbWFnZUZyYW1lIGFuZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLgorCisg
ICAgICAgICogcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhckltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
c2V0RGlzcG9zYWxNZXRob2QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6ZGlzcG9zYWxNZXRob2QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6YmFja2luZ1N0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lRHVy
YXRpb25BdEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6On5TY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpzZXREZWNvZGluZ1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lOjpkZWNvZGluZ1N0YXR1cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6On5JbWFnZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpvcGVyYXRvcj0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZGVjb2RpbmdTdGF0dXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjppbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFz
TmF0aXZlSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6aGFzRnVsbFNpemVOYXRpdmVJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlv
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6ZGlzcG9zYWxN
ZXRob2QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZTo6aGFzQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZTo6aGFzQmFja2luZ1N0b3JlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OkltYWdlRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6aXNJbnZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmlzUGFydGlhbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjppc0NvbXBsZXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6ZnJhbWVCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzdWJzYW1wbGluZ0xldmVsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldERpc3Bvc2FsTWV0aG9kKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpc3Bvc2FsTWV0aG9kIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9yaWVudGF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9yaWVudGF0aW9u
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldER1cmF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmR1cmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0FscGhhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0
aXZlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzTWV0
YWRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFj
a2luZ1N0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Omhhc0JhY2tpbmdTdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnNldEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJl
YWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29k
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5H
SW1hZ2VEZWNvZGVyOjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdl
RGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWlyZWRGcmFtZVRvRGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldF
QlBJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXRUJQ
SW1hZ2VEZWNvZGVyOjphcHBseVBvc3RQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldF
QlBJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTgtMDQtMDMg
IFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW09w
ZW5WUl1bV2ViVlJdIFJldHJpZXZlIEZyYW1lRGF0YSBpbiBXZWJWUidzIHJBRgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZURlY29kZXJzLmNtYWtlCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZURlY29kZXJzLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9E
SVJFQ1RPUklFUwogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAogCiAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDE0ICs1Myw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJh
dG9yPShjb25zdCAKICAgICBtX2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1
czsKICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CiAKLSNpZiAhVVNFKENHKQotICAgIGlmIChv
dGhlci5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0
b3JlKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAg
IG1fZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwotI2VuZGlmCi0KICAg
ICBtX25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKICAgICBtX3N1YnNhbXBsaW5n
TGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2ZWw7CiAgICAgbV9kZWNvZGluZ09wdGlvbnMg
PSBvdGhlci5tX2RlY29kaW5nT3B0aW9uczsKQEAgLTg1LDExICs3Nyw2IEBAIERlY29kaW5nU3Rh
dHVzIEltYWdlRnJhbWU6OmRlY29kaW5nU3RhdHUKIAogdW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xl
YXJJbWFnZSgpCiB7Ci0jaWYgIVVTRShDRykKLSAgICBpZiAoaGFzQmFja2luZ1N0b3JlKCkpCi0g
ICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKLSNlbmRpZgotCiAgICAgaWYgKCFoYXNO
YXRpdmVJbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTA5LDMyICs5Niw4IEBAIHVu
c2lnbmVkIEltYWdlRnJhbWU6OmNsZWFyKCkKICAgICByZXR1cm4gZnJhbWVCeXRlczsKIH0KIAot
I2lmICFVU0UoQ0cpCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKLXsKLSAgICBpZiAoJmJhY2tpbmdTdG9yZSA9PSB0aGlz
LT5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX2JhY2tpbmdT
dG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoYmFja2luZ1N0b3JlKTsKLSAgICByZXR1
cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjppbml0
aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKLXsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYmFj
a2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZShzaXplLCBwcmVtdWx0aXBseUFs
cGhhKTsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKLX0KLSNlbmRpZgot
CiBJbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAogewotI2lmICFVU0UoQ0cpCi0gICAg
aWYgKGhhc0JhY2tpbmdTdG9yZSgpKQotICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlKCktPnNp
emUoKTsKLSNlbmRpZgogICAgIHJldHVybiBtX3NpemU7CiB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjbGVh
ckltYWdlKCk7CiAgICAgdW5zaWduZWQgY2xlYXIoKTsKIAotI2lmICFVU0UoQ0cpCi0gICAgYm9v
bCBpbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJik7Ci0gICAgYm9vbCBpbml0aWFs
aXplKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOwotI2VuZGlmCi0KICAg
ICB2b2lkIHNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzKTsKICAgICBEZWNvZGluZ1N0
YXR1cyBkZWNvZGluZ1N0YXR1cygpIGNvbnN0OwogCkBAIC03MCwxMiArNjUsNiBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdl
KCkgPyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgpIDogMDsg
fQogICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3Vic2FtcGxpbmdMZXZlbDsgfQogCi0jaWYgIVVTRShDRykKLSAgICBlbnVtIGNsYXNzIERp
c3Bvc2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dy
b3VuZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKLSAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERp
c3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9Ci0gICAg
RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2Fs
TWV0aG9kOyB9Ci0jZW5kaWYKLQogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQogCiAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlv
bjsgfTsKQEAgLTkyLDIyICs4MSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1w
bGluZ0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpIGNvbnN0OwogICAgIGJvb2wgaGFz
TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpLmlzRW1wdHkoKTsgfQogCi0jaWYgIVVT
RShDRykKLSAgICBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KLSAg
ICBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9
Ci0jZW5kaWYKLQogICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIERlY29kaW5nU3RhdHVzIG1fZGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0
YXR1czo6SW52YWxpZCB9OwogICAgIEludFNpemUgbV9zaXplOwogCi0jaWYgIVVTRShDRykKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAg
IERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVj
aWZpZWQgfTsKLSNlbmRpZgotCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKICAg
ICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6
OkRlZmF1bHQgfTsKICAgICBEZWNvZGluZ09wdGlvbnMgbV9kZWNvZGluZ09wdGlvbnM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjpmcmFtZUlzQ29tcGxlCiAgICAgLy8gRklYTUUoMTc2MDg5KTogYXNraW5nIHdoZXRo
ZXIgZW5vdWdoIGRhdGEgaGFzIGJlZW4gYXBwZW5kZWQgZm9yIGEgZGVjb2RlCiAgICAgLy8gb3Bl
cmF0aW9uIHRvIHN1Y2NlZWQgc2hvdWxkIG5vdCByZXF1aXJlIGRlY29kaW5nIHRoZSBlbnRpcmUg
ZnJhbWUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50YWJsZSBpbiBh
IHdheSB0aGF0IGFsbG93cyBjb25zdC4KLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBjb25zdF9j
YXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgYXV0byogYnVmZmVyID0gY29uc3RfY2FzdDxTY2FsYWJsZUltYWdlRGVjb2Rlcio+
KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBidWZmZXIgJiYg
YnVmZmVyLT5pc0NvbXBsZXRlKCk7CiB9CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBTZWNvbmRzIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0CiAgICAgLy8gRklYTUUoMTc2MDg5KTogYXNr
aW5nIGZvciB0aGUgZHVyYXRpb24gb2YgYSBzdWItaW1hZ2Ugc2hvdWxkIG5vdCByZXF1aXJlIGRl
Y29kaW5nCiAgICAgLy8gdGhlIGVudGlyZSBmcmFtZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg
aW1wbGVtZW50YWJsZSBpbiBhIHdheSB0aGF0CiAgICAgLy8gYWxsb3dzIGNvbnN0LgotICAgIElt
YWdlRnJhbWUqIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIqPih0aGlz
KS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBjb25zdF9j
YXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CiAgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5pc0ludmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIDBfczsKICAgICAKQEAgLTIyNSw3ICsyMjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBTY2FsYWJs
ZUltYWdlRGVjb2Rlcjo6Y3JlCiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVCdWZmZXJBdElu
ZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
OwogICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+aXNJbnZhbGlkKCkgfHwgIWJ1ZmZlci0+aGFz
QmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxh
YmxlSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDggKzI5LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgpAQCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBTY2FsYWJsZUlt
YWdlRGVjb2RlciBpcyBhIGJhc2UgZm9yIGFsbCBmb3JtYXQtc3BlY2lmaWMgZGVjb2RlcnMKLS8v
IChlLmcuIEpQRUdJbWFnZURlY29kZXIpLiBUaGlzIGJhc2UgbWFuYWdlcyB0aGUgSW1hZ2VGcmFt
ZSBjYWNoZS4KKy8vIChlLmcuIEpQRUdJbWFnZURlY29kZXIpLiBUaGlzIGJhc2UgbWFuYWdlcyB0
aGUgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSBjYWNoZS4KIAogY2xhc3MgU2NhbGFibGVJbWFn
ZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTY2FsYWJsZUltYWdlRGVjb2Rlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM0
LDcgKzEzNCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIERlY29kZXMgYXMgbXVjaCBvZiB0aGUgcmVx
dWVzdGVkIGZyYW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgogICAgIC8vIFNjYWxhYmxl
SW1hZ2VEZWNvZGVyLW93bmVkIHBvaW50ZXIuCi0gICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKICAgICBib29sIGZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMjA1LDcg
KzIwNSw3IEBAIHByb3RlY3RlZDoKICAgICBpbnQgc2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFy
Y2hTdGFydCA9IDApOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUg
ZW5jb2RlZCBkYXRhLgotICAgIFZlY3RvcjxJbWFnZUZyYW1lLCAxPiBtX2ZyYW1lQnVmZmVyQ2Fj
aGU7CisgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUsIDE+IG1fZnJhbWVCdWZm
ZXJDYWNoZTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICBib29sIG1fc2NhbGVkIHsg
ZmFsc2UgfTsKICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoyMzAzNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCit7
Cit9CisKK0ltYWdlRnJhbWU6On5JbWFnZUZyYW1lKCkKK3sKKyAgICBjbGVhckltYWdlKCk7Cit9
CisKK2NvbnN0IEltYWdlRnJhbWUmIEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlRnJhbWU+IHNoYXJlZEluc3RhbmNlOworICAgIHJl
dHVybiBzaGFyZWRJbnN0YW5jZTsKK30KKworSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikK
KyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IG90aGVyLm1f
ZGVjb2RpbmdTdGF0dXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworCisjaWYgIVVTRShD
RykKKyAgICBpZiAob3RoZXIuYmFja2luZ1N0b3JlKCkpCisgICAgICAgIGluaXRpYWxpemUoKm90
aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKKyAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3NhbE1ldGhvZDsK
KyNlbmRpZgorCisgICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1hZ2U7CisgICAg
bV9zdWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZGVj
b2RpbmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBtX29yaWVudGF0
aW9uID0gb3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX2R1cmF0aW9uID0gb3RoZXIubV9kdXJh
dGlvbjsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0
dXMgZGVjb2RpbmdTdGF0dXMpCit7CisgICAgQVNTRVJUKGRlY29kaW5nU3RhdHVzICE9IERlY29k
aW5nU3RhdHVzOjpEZWNvZGluZyk7CisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IGRlY29kaW5nU3Rh
dHVzOworfQorCitEZWNvZGluZ1N0YXR1cyBJbWFnZUZyYW1lOjpkZWNvZGluZ1N0YXR1cygpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRl
Y29kaW5nKTsKKyAgICByZXR1cm4gbV9kZWNvZGluZ1N0YXR1czsKK30KKwordW5zaWduZWQgSW1h
Z2VGcmFtZTo6Y2xlYXJJbWFnZSgpCit7CisjaWYgIVVTRShDRykKKyAgICBpZiAoaGFzQmFja2lu
Z1N0b3JlKCkpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyNlbmRpZgorCisg
ICAgaWYgKCFoYXNOYXRpdmVJbWFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2ln
bmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisKKyAgICBjbGVhck5hdGl2ZUlt
YWdlU3ViaW1hZ2VzKG1fbmF0aXZlSW1hZ2UpOworICAgIG1fbmF0aXZlSW1hZ2UgPSBudWxscHRy
OworICAgIG1fZGVjb2RpbmdPcHRpb25zID0gRGVjb2RpbmdPcHRpb25zKCk7CisKKyAgICByZXR1
cm4gZnJhbWVCeXRlczsKK30KKwordW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQoreworICAg
IHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7CisgICAgKnRoaXMgPSBJbWFnZUZy
YW1lKCk7CisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKKyNpZiAhVVNFKENHKQorYm9vbCBJ
bWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUpCit7CisgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFja2luZ1N0b3JlKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdT
dG9yZTo6Y3JlYXRlKGJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlICE9
IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFj
a2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlICE9IG51bGxwdHI7Cit9CisjZW5kaWYKKworSW50U2l6ZSBJbWFnZUZyYW1l
OjpzaXplKCkgY29uc3QKK3sKKyNpZiAhVVNFKENHKQorICAgIGlmIChoYXNCYWNraW5nU3RvcmUo
KSkKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZSgpLT5zaXplKCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gbV9zaXplOworfQorICAgIAorYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRpdmVJbWFnZShj
b25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBj
b25zdAoreworICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxpbmdMZXZlbCB8
fCAqc3Vic2FtcGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOworfQorCitib29sIElt
YWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJz
YW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
TmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRpb25zLmlzU3lu
Y2hyb25vdXMoKSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsKK30KKworYm9v
bCBJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMo
Y29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwg
Y29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc05hdGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2RpbmdPcHRpb25z
LmlzQXN5bmNocm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsKK30KKworQ29s
b3IgSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IWhhc05hdGl2ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJl
dHVybiBDb2xvcigpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENv
bG9yKG1fbmF0aXZlSW1hZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDQ2ICsyNCwzMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCisjaW5jbHVkZSAiU2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZS5oIgogCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCkKIHsKIH0KIAotSW1hZ2VGcmFtZTo6
fkltYWdlRnJhbWUoKQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6flNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUoKQogewotICAgIGNsZWFySW1hZ2UoKTsKIH0KIAotY29uc3QgSW1hZ2VGcmFt
ZSYgSW1hZ2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SW1hZ2VGcmFtZT4gc2hhcmVkSW5zdGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNl
OwotfQotCi1JbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIp
CiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAg
ICBtX2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1czsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CiAKLSNpZiAhVVNFKENHKQogICAgIGlmIChvdGhlci5iYWNraW5nU3Rv
cmUoKSkKICAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0b3JlKCkpOwogICAgIGVs
c2UKICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fZGlzcG9zYWxNZXRo
b2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwotI2VuZGlmCi0KLSAgICBtX25hdGl2ZUltYWdl
ID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5t
X3N1YnNhbXBsaW5nTGV2ZWw7Ci0gICAgbV9kZWNvZGluZ09wdGlvbnMgPSBvdGhlci5tX2RlY29k
aW5nT3B0aW9uczsKIAogICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9uOwog
ICAgIG1fZHVyYXRpb24gPSBvdGhlci5tX2R1cmF0aW9uOwpAQCAtNzEsNDYgKzU3LDI4IEBAIElt
YWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMg
ZGVjb2RpbmdTdGF0dXMpCit2b2lkIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OnNldERlY29k
aW5nU3RhdHVzKERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQogewogICAgIEFTU0VSVChk
ZWNvZGluZ1N0YXR1cyAhPSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwogICAgIG1fZGVjb2Rp
bmdTdGF0dXMgPSBkZWNvZGluZ1N0YXR1czsKIH0KIAotRGVjb2RpbmdTdGF0dXMgSW1hZ2VGcmFt
ZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAorRGVjb2RpbmdTdGF0dXMgU2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAogewogICAgIEFTU0VSVChtX2RlY29k
aW5nU3RhdHVzICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CiAgICAgcmV0dXJuIG1fZGVj
b2RpbmdTdGF0dXM7CiB9CiAKLXVuc2lnbmVkIEltYWdlRnJhbWU6OmNsZWFySW1hZ2UoKQordm9p
ZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhckltYWdlKCkKIHsKLSNpZiAhVVNFKENH
KQotICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBu
dWxscHRyOwotI2VuZGlmCi0KLSAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IHRoaXMtPmZyYW1lQnl0ZXMoKTsK
LQotICAgIGNsZWFyTmF0aXZlSW1hZ2VTdWJpbWFnZXMobV9uYXRpdmVJbWFnZSk7Ci0gICAgbV9u
YXRpdmVJbWFnZSA9IG51bGxwdHI7Ci0gICAgbV9kZWNvZGluZ09wdGlvbnMgPSBEZWNvZGluZ09w
dGlvbnMoKTsKLQotICAgIHJldHVybiBmcmFtZUJ5dGVzOwogfQogCi11bnNpZ25lZCBJbWFnZUZy
YW1lOjpjbGVhcigpCit2b2lkIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFyKCkKIHsK
LSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gY2xlYXJJbWFnZSgpOwotICAgICp0aGlzID0gSW1h
Z2VGcmFtZSgpOwotICAgIHJldHVybiBmcmFtZUJ5dGVzOworICAgICp0aGlzID0gU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZSgpOwogfQogCi0jaWYgIVVTRShDRykKLWJvb2wgSW1hZ2VGcmFtZTo6
aW5pdGlhbGl6ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlKQorYm9vbCBT
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0
b3JlJiBiYWNraW5nU3RvcmUpCiB7CiAgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFj
a2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE5LDcgKzg3LDcgQEAgYm9v
bCBJbWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQgogICAgIHJldHVybiBtX2JhY2tp
bmdTdG9yZSAhPSBudWxscHRyOwogfQogCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorYm9vbCBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjppbml0aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEyNywzOCArOTUsMTIgQEAgYm9vbCBJbWFnZUZyYW1lOjppbml0aWFsaXpl
KGNvbnN0IEludFNpegogICAgIG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNy
ZWF0ZShzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUg
IT0gbnVsbHB0cjsKIH0KLSNlbmRpZgogCi1JbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25z
dAorSW50U2l6ZSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpzaXplKCkgY29uc3QKIHsKLSNp
ZiAhVVNFKENHKQogICAgIGlmIChoYXNCYWNraW5nU3RvcmUoKSkKICAgICAgICAgcmV0dXJuIGJh
Y2tpbmdTdG9yZSgpLT5zaXplKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbV9zaXplOwotfQotICAg
IAotYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1
YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAgIHJldHVybiBt
X25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxpbmdMZXZlbCB8fCAqc3Vic2FtcGxpbmdMZXZlbCA+
PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOwotfQotCi1ib29sIEltYWdlRnJhbWU6Omhhc0Z1bGxTaXpl
TmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2Ft
cGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTmF0aXZlSW1hZ2Uoc3Vic2FtcGxp
bmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRpb25zLmlzU3luY2hyb25vdXMoKSB8fCBtX2RlY29k
aW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpoYXNEZWNv
ZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxT
dWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25z
JiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc05hdGl2ZUltYWdlKHN1
YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2RpbmdPcHRpb25zLmlzQXN5bmNocm9ub3VzQ29tcGF0
aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsKLX0KLQotQ29sb3IgSW1hZ2VGcmFtZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKLXsKLSAgICBpZiAoIWhhc05hdGl2ZUltYWdlKCkgfHwg
bV9zaXplICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAg
cmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKG1fbmF0aXZlSW1hZ2UpOwor
ICAgIHJldHVybiB7IH07CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lLmgJKHJldmlzaW9uIDIzMDM3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZS5oOjIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
RGVjb2RpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VUeXBlcy5oIgorI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZSB7Cisg
ICAgZnJpZW5kIGNsYXNzIEltYWdlU291cmNlOworcHVibGljOgorICAgIGVudW0gY2xhc3MgQ2Fj
aGluZyB7IE1ldGFkYXRhLCBNZXRhZGF0YUFuZEltYWdlIH07CisKKyAgICBJbWFnZUZyYW1lKCk7
CisgICAgSW1hZ2VGcmFtZShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikgeyBvcGVyYXRvcj0ob3Ro
ZXIpOyB9CisKKyAgICB+SW1hZ2VGcmFtZSgpOworCisgICAgc3RhdGljIGNvbnN0IEltYWdlRnJh
bWUmIGRlZmF1bHRGcmFtZSgpOworCisgICAgSW1hZ2VGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IElt
YWdlRnJhbWUmIG90aGVyKTsKKworICAgIHVuc2lnbmVkIGNsZWFySW1hZ2UoKTsKKyAgICB1bnNp
Z25lZCBjbGVhcigpOworCisjaWYgIVVTRShDRykKKyAgICBib29sIGluaXRpYWxpemUoY29uc3Qg
SW1hZ2VCYWNraW5nU3RvcmUmKTsKKyAgICBib29sIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CisjZW5kaWYKKworICAgIHZvaWQgc2V0RGVjb2RpbmdT
dGF0dXMoRGVjb2RpbmdTdGF0dXMpOworICAgIERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVz
KCkgY29uc3Q7CisKKyAgICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rp
bmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQ7IH0KKyAgICBib29sIGlzUGFydGlh
bCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OlBh
cnRpYWw7IH0KKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5n
U3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorCisgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gIW1fb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUoKSA6IHNp
emUoKS50cmFuc3Bvc2VkU2l6ZSgpOyB9CisgICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0
IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdlKCkgPyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50
MzJfdCkpLnVuc2FmZUdldCgpIDogMDsgfQorICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic2FtcGxpbmdMZXZlbDsgfQorCisjaWYgIVVT
RShDRykKKyAgICBlbnVtIGNsYXNzIERpc3Bvc2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90
RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dyb3VuZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKKyAgICB2
b2lkIHNldERpc3Bvc2FsTWV0aG9kKERpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2Fs
TWV0aG9kID0gbWV0aG9kOyB9CisgICAgRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBj
b25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CisjZW5kaWYKKworICAgIE5hdGl2ZUlt
YWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQorCisg
ICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1f
b3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorCisgICAgdm9pZCBzZXRE
dXJhdGlvbihjb25zdCBTZWNvbmRzJiBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247
IH0KKyAgICBTZWNvbmRzIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQor
CisgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNB
bHBoYTsgfQorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiAhaGFzTWV0YWRhdGEo
KSB8fCBtX2hhc0FscGhhOyB9CisKKyAgICBib29sIGhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9KSBjb25zdDsKKyAgICBib29sIGhhc0Z1
bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYg
PSB7IH0pIGNvbnN0OworICAgIGJvb2wgaGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdp
dGhPcHRpb25zKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mLCBjb25zdCBE
ZWNvZGluZ09wdGlvbnMmKSBjb25zdDsKKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKS5pc0VtcHR5KCk7IH0KKworI2lmICFVU0UoQ0cpCisgICAgSW1hZ2VCYWNr
aW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8g
bV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgYm9vbCBoYXNCYWNraW5nU3Rv
cmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQorI2VuZGlmCisKKyAgICBDb2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBEZWNvZGlu
Z1N0YXR1cyBtX2RlY29kaW5nU3RhdHVzIHsgRGVjb2RpbmdTdGF0dXM6OkludmFsaWQgfTsKKyAg
ICBJbnRTaXplIG1fc2l6ZTsKKworI2lmICFVU0UoQ0cpCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBEaXNwb3NhbE1ldGhvZCBtX2Rp
c3Bvc2FsTWV0aG9kIHsgRGlzcG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkIH07CisjZW5kaWYKKwor
ICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2U7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBt
X3N1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0IH07CisgICAgRGVj
b2RpbmdPcHRpb25zIG1fZGVjb2RpbmdPcHRpb25zOworCisgICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKKyAgICBTZWNvbmRzIG1f
ZHVyYXRpb247CisgICAgYm9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9OworfTsKKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUuaAkocmV2aXNpb24gMjMwMzc0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyNyArMzYsMTkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBJbWFnZUZyYW1lIHsKLSAgICBmcmllbmQgY2xhc3MgSW1hZ2VT
b3VyY2U7CitjbGFzcyBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lIHsKIHB1YmxpYzoKLSAgICBl
bnVtIGNsYXNzIENhY2hpbmcgeyBNZXRhZGF0YSwgTWV0YWRhdGFBbmRJbWFnZSB9OworICAgIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUoKTsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
KGNvbnN0IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhl
cik7IH0KIAotICAgIEltYWdlRnJhbWUoKTsKLSAgICBJbWFnZUZyYW1lKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KKyAgICB+U2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZSgpOwogCi0gICAgfkltYWdlRnJhbWUoKTsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lJiBvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIp
OwogCi0gICAgc3RhdGljIGNvbnN0IEltYWdlRnJhbWUmIGRlZmF1bHRGcmFtZSgpOworICAgIHZv
aWQgY2xlYXIoKTsKIAotICAgIEltYWdlRnJhbWUmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1l
JiBvdGhlcik7Ci0KLSAgICB1bnNpZ25lZCBjbGVhckltYWdlKCk7Ci0gICAgdW5zaWduZWQgY2xl
YXIoKTsKLQotI2lmICFVU0UoQ0cpCiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IEltYWdlQmFj
a2luZ1N0b3JlJik7CiAgICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IEludFNpemUmLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpOwotI2VuZGlmCiAKICAgICB2b2lkIHNldERlY29kaW5nU3RhdHVzKERl
Y29kaW5nU3RhdHVzKTsKICAgICBEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cygpIGNvbnN0
OwpAQCAtNjYsMTcgKzU4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25z
dCB7IHJldHVybiBtX2RlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsg
fQogCiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gIW1fb3JpZW50YXRpb24udXNlc1dpZHRoQXNI
ZWlnaHQoKSA/IHNpemUoKSA6IHNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpOyB9Ci0gICAgdW5zaWdu
ZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdlKCkgPyAoc2l6ZSgp
LmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgpIDogMDsgfQotICAgIFN1YnNh
bXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic2FtcGxp
bmdMZXZlbDsgfQogCi0jaWYgIVVTRShDRykKICAgICBlbnVtIGNsYXNzIERpc3Bvc2FsTWV0aG9k
IHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dyb3VuZCwgUmVzdG9y
ZVRvUHJldmlvdXMgfTsKICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERpc3Bvc2FsTWV0aG9k
IG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CiAgICAgRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9Ci0j
ZW5kaWYKLQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9uYXRpdmVJbWFnZTsgfQogCiAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfTsKICAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlv
bjsgfQpAQCAtODYsMzEgKzcxLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SGFzQWxwaGEo
Ym9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0gaGFzQWxwaGE7IH0KICAgICBib29sIGhhc0Fs
cGhhKCkgY29uc3QgeyByZXR1cm4gIWhhc01ldGFkYXRhKCkgfHwgbV9oYXNBbHBoYTsgfQotCi0g
ICAgYm9vbCBoYXNOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2
ZWw+JiA9IHsgfSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNGdWxsU2l6ZU5hdGl2ZUltYWdlKGNvbnN0
IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9KSBjb25zdDsKLSAgICBib29s
IGhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6Om9w
dGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiwgY29uc3QgRGVjb2RpbmdPcHRpb25zJikgY29uc3Q7
CiAgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCkuaXNFbXB0eSgp
OyB9CiAKLSNpZiAhVVNFKENHKQogICAgIEltYWdlQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLmdldCgpIDog
bnVsbHB0cjsgfQogICAgIGJvb2wgaGFzQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gYmFj
a2luZ1N0b3JlKCk7IH0KLSNlbmRpZgotCi0gICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRGVjb2RpbmdTdGF0dXMgbV9kZWNvZGluZ1N0YXR1
cyB7IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkIH07Ci0gICAgSW50U2l6ZSBtX3NpemU7CiAKLSNp
ZiAhVVNFKENHKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7CiAgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2Fs
TWV0aG9kOjpVbnNwZWNpZmllZCB9OwotI2VuZGlmCi0KLSAgICBOYXRpdmVJbWFnZVB0ciBtX25h
dGl2ZUltYWdlOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgU3Vi
c2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9OwotICAgIERlY29kaW5nT3B0aW9ucyBtX2RlY29kaW5n
T3B0aW9uczsKIAogICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJ
bWFnZU9yaWVudGF0aW9uIH07CiAgICAgU2Vjb25kcyBtX2R1cmF0aW9uOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNo
YXJlZEJ1ZmYKICAgICAgICAgbV9yZWFkZXItPnNldERhdGEoJmRhdGEpOwogfQogCi1JbWFnZUZy
YW1lKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCitT
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQogICAgICAgICByZXR1cm4gMDsK
QEAgLTY0LDcgKzY0LDcgQEAgSW1hZ2VGcmFtZSogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
cgogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUuZ3JvdygxKTsKIAotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1l
QnVmZmVyQ2FjaGUuZmlyc3QoKTsKKyAgICBhdXRvKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNh
Y2hlLmZpcnN0KCk7CiAgICAgaWYgKCFidWZmZXItPmlzQ29tcGxldGUoKSkKICAgICAgICAgZGVj
b2RlKGZhbHNlLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKICAgICByZXR1cm4gYnVmZmVyOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICAvLyBTY2FsYWJsZUltYWdl
RGVjb2RlcgogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiYm1wIik7IH0KICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVy
JiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIGZpbmFsOwotICAgIEltYWdlRnJhbWUqIGZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIGZpbmFsOworICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIGZpbmFsOwogICAgIC8vIENB
VVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gQmUgY2FyZWZ1bCB0byBhdm9p
ZAogICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxp
bmcgdGhpcyBmcm9tIGluc2lkZQogICAgIC8vIEJNUEltYWdlUmVhZGVyIQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwxMSArNjQsMTEgQEAgcHVibGljOgogCiAgICAgLy8gfHBhcmVudHwgaXMgdGhlIGRlY29k
ZXIgdGhhdCBvd25zIHVzLgogICAgIC8vIHxzdGFydE9mZnNldHwgcG9pbnRzIHRvIHRoZSBzdGFy
dCBvZiB0aGUgQk1QIHdpdGhpbiB0aGUgZmlsZS4KLSAgICAvLyB8YnVmZmVyfCBwb2ludHMgYXQg
YW4gZW1wdHkgSW1hZ2VGcmFtZSB0aGF0IHdlJ2xsIGluaXRpYWxpemUgYW5kCisgICAgLy8gfGJ1
ZmZlcnwgcG9pbnRzIGF0IGFuIGVtcHR5IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUgdGhhdCB3
ZSdsbCBpbml0aWFsaXplIGFuZAogICAgIC8vIGZpbGwgd2l0aCBkZWNvZGVkIGRhdGEuCiAgICAg
Qk1QSW1hZ2VSZWFkZXIoU2NhbGFibGVJbWFnZURlY29kZXIqIHBhcmVudCwgc2l6ZV90IGRlY29k
ZWRBbmRIZWFkZXJPZmZzZXQsIHNpemVfdCBpbWdEYXRhT2Zmc2V0LCBib29sIHVzZXNBbmRNYXNr
KTsKIAotICAgIHZvaWQgc2V0QnVmZmVyKEltYWdlRnJhbWUqIGJ1ZmZlcikgeyBtX2J1ZmZlciA9
IGJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QnVmZmVyKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUq
IGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRC
dWZmZXIqIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQogCiAgICAgLy8gRG9lcyB0aGUgYWN0dWFs
IGRlY29kaW5nLiBJZiB8b25seVNpemV8IGlzIHRydWUsIGRlY29kaW5nIG9ubHkKQEAgLTI2OSw3
ICsyNjksNyBAQCBwcml2YXRlOgogICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyKiBtX3BhcmVudDsK
IAogICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBpeGVsIGRhdGEuCi0gICAgSW1hZ2VG
cmFtZSogbV9idWZmZXI7CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogbV9idWZmZXI7
CiAKICAgICAvLyBUaGUgZmlsZSB0byBkZWNvZGUuCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV9kYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBzaXplX3Qg
R0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RSZXF1aXJlCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IGZyYW1lSW5kZXg7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgSW1h
Z2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaSAtIDFdOworICAgICAgICBhdXRv
JiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpIC0gMV07CiAKICAgICAgICAgLy8gRnJhbWVz
IHdpdGggZGlzcG9zYWwgbWV0aG9kIFJlc3RvcmVUb1ByZXZpb3VzIGFyZSB1c2VsZXNzLCBza2lw
IHRoZW0uCi0gICAgICAgIGlmIChmcmFtZS5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykKKyAgICAgICAgaWYgKGZyYW1lLmRp
c3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRo
b2Q6OlJlc3RvcmVUb1ByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB0aGUgZGlzcG9zYWwgbWV0aG9kIGNhbiBiZSBVbnNwZWNpZmllZCwg
RG9Ob3REaXNwb3NlIG9yIFJlc3RvcmVUb0JhY2tncm91bmQuCkBAIC0xMTksNyArMTE5LDcgQEAg
c2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWlyZQogCiAgICAgICAgIC8vIElm
IHRoZSBkaXNwb3NhbCBtZXRob2Qgb2YgdGhpcyBmcmFtZSBpcyBSZXN0b3JlVG9CYWNrZ3JvdW5k
IGFuZCBpdCBmaWxscyB0aGUgd2hvbGUgYXJlYSwKICAgICAgICAgLy8gdGhlIG5leHQgZnJhbWUn
cyBiYWNraW5nIHN0b3JlIGlzIGluaXRpYWxpemVkIHRvIHRyYW5zcGFyZW50LCBzbyB3ZSBzdGFy
dCBkZWNvZGluZyB3aXRoIGl0LgotICAgICAgICBpZiAoZnJhbWUuZGlzcG9zYWxNZXRob2QoKSA9
PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgeworICAg
ICAgICBpZiAoZnJhbWUuZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgewogICAgICAgICAgICAg
Ly8gV2UgY2Fubm90IHVzZSBmcmFtZS5iYWNraW5nU3RvcmUoKS0+ZnJhbWVSZWN0KCkgaGVyZSwg
YmVjYXVzZSBpdCBoYXMgYmVlbiBjbGVhcmVkCiAgICAgICAgICAgICAvLyB3aGVuIHRoZSBmcmFt
ZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4gV2UgbmVlZCB0byBnZXQgdGhlIHZhbHVlcyBm
cm9tIHRoZQogICAgICAgICAgICAgLy8gcmVhZGVyIGNvbnRleHQuCkBAIC0xMzcsMTIgKzEzNywx
MiBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RSZXF1aXJlCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUltYWdlRnJhbWUqIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIEdJRkltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0g
ZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEltYWdlRnJhbWUmIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fZnJhbWVC
dWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkpIHsKICAgICAg
ICAgZm9yIChhdXRvIGkgPSBmaW5kRmlyc3RSZXF1aXJlZEZyYW1lVG9EZWNvZGUoaW5kZXgpOyBp
IDw9IGluZGV4OyBpKyspCiAgICAgICAgICAgICBkZWNvZGUoaSArIDEsIEdJRkZ1bGxRdWVyeSwg
aXNBbGxEYXRhUmVjZWl2ZWQoKSk7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYQogICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VTb3VyY2U6
OmNsZWFyKHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4KICAgICAv
LyB0aGlzIGNhc2UuCiAgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFyQmVmb3Jl
RnJhbWUsIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKLSAgICBjb25zdCBWZWN0b3I8
SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNs
ZWFyQmVmb3JlRnJhbWUpOworICAgIGNvbnN0IFZlY3RvcjxTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZv
cmVGcmFtZSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6
CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHxlbmR8CkBAIC0xOTMsMTQgKzE5MywxNCBAQCB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAgICAgLy8gICAqIElmIHRo
ZSBmcmFtZSBpcyBwYXJ0aWFsLCB3ZSdyZSBkZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xlYXIgaXQ7
IGlmIGl0CiAgICAgLy8gICAgIGhhcyBhIGRpc3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFuIERpc3Bv
c2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cywgc3RvcAogICAgIC8vICAgICBzY2FubmluZywg
YXMgd2UnbGwgb25seSBuZWVkIHRoaXMgZnJhbWUgd2hlbiBkZWNvZGluZyB0aGUgbmV4dCBvbmUu
Ci0gICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBpKGVuZCk7Ci0gICAgZm9yICg7IChp
ICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoaS0+aXNJbnZhbGlkKCkgfHwgKGkt
PmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVU
b1ByZXZpb3VzKSk7IC0taSkgeworICAgIFZlY3RvcjxTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
Pjo6aXRlcmF0b3IgaShlbmQpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUu
YmVnaW4oKSkgJiYgKGktPmlzSW52YWxpZCgpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91
cykpOyAtLWkpIHsKICAgICAgICAgaWYgKGktPmlzQ29tcGxldGUoKSAmJiAoaSAhPSBlbmQpKQog
ICAgICAgICAgICAgaS0+Y2xlYXIoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8IGhvbGRzIHRo
ZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZyYW1lcy4KLSAg
ICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUu
YmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgZm9yIChWZWN0b3I8U2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9
IGk7ICsraikgewogICAgICAgICBBU1NFUlQoIWotPmlzUGFydGlhbCgpKTsKICAgICAgICAgaWYg
KCFqLT5pc0ludmFsaWQoKSkKICAgICAgICAgICAgIGotPmNsZWFyKCk7CkBAIC0yMzcsNyArMjM3
LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVucwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4K
LSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogICAg
IGlmICgoYnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMjcwLDExICsyNzAsMTEgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93
KHVucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBJbWFn
ZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKK2Jvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVy
YXRpb24sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKQogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNv
bWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3
ZSBuZXZlciByZWFjaCBoYXZlRGVjb2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCi0gICAg
SW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAg
IGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBpZiAo
YnVmZmVyLmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkgaGFzIGFscmVhZHkgY2FsbGVk
IHNldEZhaWxlZCgpLgogCkBAIC0yOTgsOCArMjk4LDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6
OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAgICAgICAgLy8gRmlyc3Qgc2tpcCBvdmVyIHByaW9y
IERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cyBmcmFtZXMgKHNpbmNlIHRoZXkKICAg
ICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkg
dGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKS4K
LSAgICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZl
ckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAo
cHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6UmVzdG9yZVRvUHJldmlvdXMpKQorICAgICAgICAgICAgY29uc3QgYXV0byogcHJldkJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAgICAgICAgICAgIHdoaWxl
IChmcmFtZUluZGV4ICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpCiAg
ICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUlu
ZGV4XTsKIAogICAgICAgICAgICAgLy8gTm93LCBpZiB3ZSdyZSBhdCBhIERpc3Bvc2FsTWV0aG9k
OjpVbnNwZWNpZmllZCBvciBEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3NlIGZyYW1lLCB0aGVu
CkBAIC0zMTEsNyArMzExLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUo
dW5zaQogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3QgaXMgY29u
dGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3QsIHdlIGtu
b3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgogICAgICAgICAgICAgSW50UmVjdCBw
cmV2UmVjdCA9IHByZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsKLSAgICAg
ICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgJiYgIXByZXZCdWZmZXItPmhhc0Fs
cGhhKCkgJiYgcmVjdC5jb250YWlucyhwcmV2UmVjdCkpCisgICAgICAgICAgICBpZiAoKHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlz
cG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBo
YSgpICYmIHJlY3QuY29udGFpbnMocHJldlJlY3QpKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5z
ZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzAsNyArMzcwLDcgQEAg
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBjb25zdCBHSUZGcmFtZUNvbnRl
eHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoKTsKICAgICBJbnRSZWN0
IGZyYW1lUmVjdChmcmFtZUNvbnRleHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9mZnNldCwg
ZnJhbWVDb250ZXh0LT53aWR0aCwgZnJhbWVDb250ZXh0LT5oZWlnaHQpOwotICAgIEltYWdlRnJh
bWUqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisgICAg
YXV0byogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKIAog
ICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBmcmFt
ZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCkBAIC0zODUsMTYg
KzM4NSwxNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAg
ICAgIC8vIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNvIHNraXAg
b3ZlciB0aGVtLiAgKElmIHRoZQogICAgICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhp
cyBtZXRob2QsIGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQogICAgICAgICAvLyBEaXNwb3NhbE1l
dGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCBiZWxvdyBhbmQgcmVzZXQgdG8gYSBjb21wbGV0ZWx5
IGVtcHR5IGltYWdlLikKLSAgICAgICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgSW1hZ2VGcmFtZTo6RGlz
cG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7Ci0g
ICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpIHsKKyAgICAgICAgY29uc3QgYXV0byog
cHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAgICAgICAg
YXV0byBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKKyAgICAgICAg
d2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZNZXRob2QgPT0gU2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSkgewogICAgICAgICAgICAg
cHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKICAgICAgICAg
ICAgIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwogICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKHByZXZCdWZmZXItPmlzQ29tcGxldGUoKSk7CiAKLSAgICAgICAg
aWYgKChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmll
ZCkgfHwgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlz
cG9zZSkpIHsKKyAgICAgICAgaWYgKChwcmV2TWV0aG9kID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCkgfHwgKHByZXZNZXRob2QgPT0gU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSkpIHsK
ICAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBz
dGF0ZSBmb3IgdGhpcyBmcmFtZS4KICAgICAgICAgICAgIGlmICghcHJldkJ1ZmZlci0+YmFja2lu
Z1N0b3JlKCkgfHwgIWJ1ZmZlci0+aW5pdGlhbGl6ZSgqcHJldkJ1ZmZlci0+YmFja2luZ1N0b3Jl
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUm
KSBmaW5hbDsKICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsOwogICAgIFJlcGV0
aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbWFnZUZyYW1l
KiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBmaW5hbDsKKyAgICBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBmaW5hbDsK
ICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuIEJlIGNhcmVm
dWwgdG8gYXZvaWQKICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkg
d2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKICAgICAvLyBHSUZJbWFnZVJlYWRlciEKQEAg
LTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiBy
ZWFkZXIuCiAgICAgYm9vbCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCBjb25z
dCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHJvd0J1ZmZlciwgc2l6ZV90IHdpZHRoLCBzaXplX3Qg
cm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4
ZWxzKTsKLSAgICBib29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QpOworICAgIGJvb2wg
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZCk7CiAgICAgdm9pZCBn
aWZDb21wbGV0ZSgpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3Bw
CShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsMTEgKzU3
NiwxMSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0YVBvCiAgICAgICAg
ICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBEaXNwb3NhbE1l
dGhvZCBlbnVtCiAgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMh
CiAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+
PiAyKSAmIDB4NzsKLSAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZD4oZGlzcG9zYWxN
ZXRob2QpOworICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9k
PihkaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgICAgICAvLyBTb21lIHNwZWNzIHNheSB0aGF0IGRp
c3Bvc2FsIG1ldGhvZCAzIGlzICJvdmVyd3JpdGUgcHJldmlvdXMiLCBvdGhlcnMgdGhhdCBzZXR0
aW5nCiAgICAgICAgICAgICAvLyB0aGUgdGhpcmQgYml0IG9mIHRoZSBmaWVsZCAoaS5lLiBtZXRo
b2QgNCkgaXMuIFdlIG1hcCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLgogICAgICAgICAgICAgaWYg
KGRpc3Bvc2FsTWV0aG9kID09IDQpCi0gICAgICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNw
b3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3Jl
VG9QcmV2aW91czsKKyAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9k
ID0gV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJl
c3RvcmVUb1ByZXZpb3VzOwogICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kZWxheVRpbWUgPSBH
RVRJTlQxNihjdXJyZW50Q29tcG9uZW50ICsgMSkgKiAxMDsKICAgICAgICAgICAgIEdFVE4oMSwg
R0lGQ29uc3VtZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQs
NyArMTU0LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHdpZHRoOwogICAgIHVuc2lnbmVkIGhl
aWdodDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVudCBwaXhlbC4KLSAg
ICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8g
UmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgorICAgIFdlYkNvcmU6
OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9k
OyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCiAgICAgc2l6
ZV90IGxvY2FsQ29sb3JtYXBQb3NpdGlvbjsgLy8gUGVyLWltYWdlIGNvbG9ybWFwLgogICAgIGlu
dCBsb2NhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBvZiBsb2NhbCBjb2xvcm1hcCBhcnJheS4KICAg
ICBpbnQgZGF0YXNpemU7CkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogICAgICAgICAsIHdp
ZHRoKDApCiAgICAgICAgICwgaGVpZ2h0KDApCiAgICAgICAgICwgdHBpeGVsKDApCi0gICAgICAg
ICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlVu
c3BlY2lmaWVkKQorICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OlNjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpVbnNwZWNpZmllZCkKICAgICAgICAgLCBs
b2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwU2l6ZSgwKQog
ICAgICAgICAsIGRhdGFzaXplKDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEzICs5MCwx
MyBAQCBzaXplX3QgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkgY29uCiAgICAgcmV0dXJu
IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7CiB9CiAKLUltYWdlRnJhbWUqIElDT0ltYWdlRGVj
b2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKIHsKICAgICAvLyBFbnN1cmUgfGluZGV4fCBpcyB2YWxpZC4KICAgICBpZiAoaW5kZXggPj0g
ZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEltYWdlRnJhbWUqIGJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOworICAgIGF1dG8qIGJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwogICAgIGlmICghYnVmZmVyLT5pc0NvbXBsZXRlKCkpCiAg
ICAgICAgIGRlY29kZShpbmRleCwgZmFsc2UsIGlzQWxsRGF0YVJlY2VpdmVkKCkpOwogICAgIHJl
dHVybiBidWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1h
Z2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAg
IEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0
IGZpbmFsOwogICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7CiAgICAgc2l6
ZV90IGZyYW1lQ291bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90KSBmaW5hbDsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSBmaW5hbDsKICAgICAvLyBDQVVUSU9OOiBzZXRGYWls
ZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gQmUgY2FyZWZ1bCB0bwogICAg
IC8vIGF2b2lkIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxp
bmcgdGhpcyBmcm9tCiAgICAgLy8gaW5zaWRlIEJNUEltYWdlUmVhZGVyIQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MTEsNyArNTExLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKGNvbnN0IEludAogICAgIHJldHVybiB0cnVlOwogfQogCi1JbWFnZUZyYW1lKiBKUEVH
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZSogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTE5
LDcgKzUxOSw3IEBAIEltYWdlRnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmUKICAg
ICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlLmdyb3coMSk7CiAKLSAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBp
ZiAoIWZyYW1lLmlzQ29tcGxldGUoKSkKICAgICAgICAgZGVjb2RlKGZhbHNlLCBpc0FsbERhdGFS
ZWNlaXZlZCgpKTsKICAgICByZXR1cm4gJmZyYW1lOwpAQCAtNTMyLDcgKzUzMiw3IEBAIGJvb2wg
SlBFR0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BB
Q0UgY29sb3JTcGFjZT4KLXZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCB1aW50MzJf
dCogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQg
c2V0UGl4ZWwoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVmZmVyLCB1aW50MzJfdCogY3Vy
cmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FN
UExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdC
ID8gMyA6IDQpOwogCkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1l
JiBidWZmZXIsIHVpbnQzMgogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNl
LCBib29sIGlzU2NhbGVkPgotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMo
SW1hZ2VGcmFtZSYgYnVmZmVyKQorYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKQogewogICAgIEpTQU1QQVJSQVkg
c2FtcGxlcyA9IG1fcmVhZGVyLT5zYW1wbGVzKCk7CiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVj
dCogaW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7CkBAIC01ODUsNyArNTg1LDcgQEAgYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoSQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9T
UEFDRSBjb2xvclNwYWNlPgotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMo
SW1hZ2VGcmFtZSYgYnVmZmVyKQorYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKQogewogICAgIHJldHVybiBtX3Nj
YWxlZCA/IG91dHB1dFNjYW5saW5lczxjb2xvclNwYWNlLCB0cnVlPihidWZmZXIpIDogb3V0cHV0
U2NhbmxpbmVzPGNvbG9yU3BhY2UsIGZhbHNlPihidWZmZXIpOwogfQpAQCAtNTk2LDcgKzU5Niw3
IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVk
LgotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBh
dXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5pc0lu
dmFsaWQoKSkgewogICAgICAgICBpZiAoIWJ1ZmZlci5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwg
bV9wcmVtdWx0aXBseUFscGhhKSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKQEAg
LTY0Miw3ICs2NDIsNyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSgpCiAK
ICAgICAvLyBIYW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBidWZmZXIsIGV2ZW4gaWYg
dGhlIGltYWdlIGVuZGVkIHVwIGJlaW5nCiAgICAgLy8gZW1wdHkuCi0gICAgSW1hZ2VGcmFtZSYg
YnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgIGJ1
ZmZlci5zZXREZWNvZGluZ1N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gU2NhbGFibGVJbWFnZURlY29kZXIKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQVNDSUlMaXRlcmFsKCJqcGciKTsgfQog
ICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgICAgICBJ
bWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKKyAg
ICAgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0
ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5n
IGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRl
CiAgICAgICAgIC8vIEpQRUdJbWFnZVJlYWRlciEKQEAgLTgwLDEwICs4MCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVjb2RlKGJvb2wgb25seVNpemUsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNw
YWNlPgotICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpOwor
ICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcyhTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBi
dWZmZXIpOwogCiAgICAgICAgIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2UsIGJv
b2wgaXNTY2FsZWQ+Ci0gICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKEltYWdlRnJhbWUmIGJ1
ZmZlcik7CisgICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUmIGJ1ZmZlcik7CiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEpQRUdJbWFnZVJlYWRl
cj4gbV9yZWFkZXI7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShy
ZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3
IEBAIGJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotSW1hZ2VGcmFtZSogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogUE5HSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogI2lmIEVOQUJMRShBUE5H
KQogICAgIGlmIChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6ZW5jb2RlZERhdGFTdGF0dXMoKSA8IEVu
Y29kZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlKQpAQCAtMjY5LDcgKzI2OSw3IEBAIEltYWdl
RnJhbWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXIKICAgICBpZiAobV9mcmFtZUJ1ZmZl
ckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmdyb3coMSk7CiAK
LSAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CisgICAg
YXV0byYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwogICAgIGlmICghZnJhbWUu
aXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoZmFsc2UsIGluZGV4LCBpc0FsbERhdGFSZWNl
aXZlZCgpKTsKICAgICByZXR1cm4gJmZyYW1lOwpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBpZiAobV9jdXJyZW50RnJhbWUg
Pj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKLSAgICBJbWFnZUZyYW1l
JiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOworICAgIGF1dG8m
IGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CiAgICAgaWYgKGJ1
ZmZlci5pc0ludmFsaWQoKSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+
cG5nUHRyKCk7CiAgICAgICAgIGlmICghYnVmZmVyLmluaXRpYWxpemUoc2NhbGVkU2l6ZSgpLCBt
X3ByZW11bHRpcGx5QWxwaGEpKSB7CkBAIC02MzIsNyArNjMyLDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnJlYWRDaHVua3MocG5nX3VuawogICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
Lmdyb3coMSk7CiAKICAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lIDwgbV9mcmFtZUJ1ZmZlckNh
Y2hlLnNpemUoKSkgewotICAgICAgICAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKKyAgICAgICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CiAKICAgICAgICAgICAgIGlmICghbV9k
ZWxheURlbm9taW5hdG9yKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREdXJhdGlvbihTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKG1fZGVsYXlOdW1lcmF0b3IgKiAxMCkpOwpAQCAtNjQwLDEx
ICs2NDAsMTEgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MocG5nX3VuawogICAg
ICAgICAgICAgICAgIGJ1ZmZlci5zZXREdXJhdGlvbihTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KG1fZGVsYXlOdW1lcmF0b3IgKiAxMDAwIC8gbV9kZWxheURlbm9taW5hdG9yKSk7CiAKICAgICAg
ICAgICAgIGlmIChtX2Rpc3Bvc2UgPT0gMikKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlz
cG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3Vz
KTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKG1fZGlzcG9zZSA9PSAxKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5z
ZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFj
a2dyb3VuZCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5k
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxN
ZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSk7CisgICAgICAg
ICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJh
bWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpOwogICAgICAgICB9CiAKICAgICAgICAg
bV9mcmFtZUluZm8gPSB0cnVlOwpAQCAtNzI0LDE2ICs3MjQsMTYgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYQogCiAgICAgLy8gU2VlIEdJRkltYWdlRGVjb2RlciBm
b3IgZnVsbCBleHBsYW5hdGlvbi4KICAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xl
YXJCZWZvcmVGcmFtZSwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0
IFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdp
bigpICsgY2xlYXJCZWZvcmVGcmFtZSk7CisgICAgY29uc3QgVmVjdG9yPFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBj
bGVhckJlZm9yZUZyYW1lKTsKIAotICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShl
bmQpOwotICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKGkt
PmlzSW52YWxpZCgpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bv
c2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpOyAtLWkpIHsKKyAgICBWZWN0b3I8U2NhbGFi
bGVJbWFnZURlY29kZXJGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKKyAgICBmb3IgKDsgKGkgIT0g
bV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5pc0ludmFsaWQoKSB8fCAoaS0+ZGlz
cG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6UmVzdG9yZVRvUHJldmlvdXMpKTsgLS1pKSB7CiAgICAgICAgIGlmIChpLT5pc0NvbXBsZXRl
KCkgJiYgKGkgIT0gZW5kKSkKICAgICAgICAgICAgIGktPmNsZWFyKCk7CiAgICAgfQogCiAgICAg
Ly8gTm93IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVh
ciBwcmlvciBmcmFtZXMuCi0gICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoo
bV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgeworICAgIGZvciAoVmVj
dG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJD
YWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKICAgICAgICAgQVNTRVJUKCFqLT5pc1BhcnRp
YWwoKSk7CiAgICAgICAgIGlmIChqLT5pc0ludmFsaWQoKSkKICAgICAgICAgICAgIGotPmNsZWFy
KCk7CkBAIC03NDUsNyArNzQ1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcihzaQogICAgIGlmIChmcmFtZUluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1l
SW5kZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKIAogICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9u
IHRoZSBwcmV2aW91cyBmcmFtZSdzCiAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgpAQCAtNzU1LDkg
Kzc1NSw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICAv
LyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIg
dGhlbS4gIChJZiB0aGUKICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2Qs
IGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQogICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9y
IGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQotICAgIGNvbnN0
IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRl
eF07Ci0gICAgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCk7Ci0gICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZNZXRo
b2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSkgewor
ICAgIGNvbnN0IGF1dG8qIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJ
bmRleF07CisgICAgYXV0byBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KTsKKyAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpKSB7CiAgICAg
ICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAg
ICAgIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwogICAgIH0KQEAg
LTc2NSw3ICs3NjUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNp
CiAgICAgcG5nX3N0cnVjdHAgcG5nID0gbV9yZWFkZXItPnBuZ1B0cigpOwogICAgIEFTU0VSVChw
cmV2QnVmZmVyLT5pc0NvbXBsZXRlKCkpOwogCi0gICAgaWYgKHByZXZNZXRob2QgPT0gSW1hZ2VG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSkgeworICAgIGlmIChwcmV2TWV0aG9k
ID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bv
c2UpIHsKICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3QgZnJhbWUgYXMgdGhlIHN0YXJ0aW5n
IHN0YXRlIGZvciB0aGlzIGZyYW1lLgogICAgICAgICBpZiAoIXByZXZCdWZmZXItPmJhY2tpbmdT
dG9yZSgpIHx8ICFidWZmZXIuaW5pdGlhbGl6ZSgqcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCkp
KQogICAgICAgICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CkBAIC04MDksNyArODA5LDcg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgIGlmIChtX2ZyYW1l
SXNIaWRkZW4gfHwgbV9jdXJyZW50RnJhbWUgPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJy
ZW50RnJhbWVdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJl
bnRGcmFtZV07CiAgICAgYnVmZmVyLnNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzOjpD
b21wbGV0ZSk7CiAKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmlu
dGVybGFjZUJ1ZmZlcigpOwpAQCAtODQzLDEyICs4NDMsMTIgQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShm
YWxzZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzaXplX3QgZnJhbWVJ
bmRleCA9IG1fY3VycmVudEZyYW1lOwotICAgICAgICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUq
IHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAg
ICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSkKKyAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOworICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAg
IHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAKICAgICAg
ICAgICAgICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCkt
PmZyYW1lUmVjdCgpOwotICAgICAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxN
ZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3Vu
ZCkgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgcmVjdC5jb250YWlucyhwcmV2UmVjdCkp
CisgICAgICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3Jv
dW5kKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiByZWN0LmNvbnRhaW5zKHByZXZSZWN0
KSkKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghbV9ibGVuZCAmJiAhYnVmZmVyLmhhc0FscGhh
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7
CiAjZW5kaWYKICAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsK
LSAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3Zl
cnJpZGU7CisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWls
ZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8v
IGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBm
cm9tIGluc2lkZQogICAgICAgICAvLyBQTkdJbWFnZVJlYWRlciEKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9X
RUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBSZXBldGl0aW9uQ291bnQgV0VCUEltYWdlRGVjb2Rl
cjo6cmVwZXRpCiAgICAgcmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50ID8gbV9yZXBldGl0aW9uQ291
bnQgOiBSZXBldGl0aW9uQ291bnRJbmZpbml0ZTsKIH0KIAotSW1hZ2VGcmFtZSogV0VCUEltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUqIFdFQlBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0xMTcsNyArMTE3LDcgQEAgc2l6ZV90IFdFQlBJbWFnZURlY29kZXI6OmZpbmRGaXJz
dFJlcXVpcgogICAgICAgICAvLyBUaGlzIGZyYW1lIGNvdmVycyB0aGUgd2hvbGUgYXJlYSBhbmQg
aXRzIGRpc3Bvc2FsTWV0aG9kIGlzIFJlc3RvcmVUb0JhY2tncm91bmQsIHdoaWNoIG1lYW5zCiAg
ICAgICAgIC8vIHRoYXQgdGhlIG5leHQgZnJhbWUgd2lsbCBiZSByZW5kZXJlZCBvbiB0b3Agb2Yg
YSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLCBhbmQgY2FuIGJlIGRlY29kZWQKICAgICAgICAgLy8g
d2l0aG91dCBkZXBlbmRlbmNpZXMuIFRoaXMgY2FuIG9ubHkgYmUgY2hlY2tlZCBmb3IgZnJhbWVz
IHByaW9yIHRvIGZyYW1lSW5kZXguCi0gICAgICAgIGlmIChmaXJzdEluZGVwZW5kZW50RnJhbWUg
PCBmcmFtZUluZGV4ICYmIG1fZnJhbWVCdWZmZXJDYWNoZVtmaXJzdEluZGVwZW5kZW50RnJhbWVd
LmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVU
b0JhY2tncm91bmQpCisgICAgICAgIGlmIChmaXJzdEluZGVwZW5kZW50RnJhbWUgPCBmcmFtZUlu
ZGV4ICYmIG1fZnJhbWVCdWZmZXJDYWNoZVtmaXJzdEluZGVwZW5kZW50RnJhbWVdLmRpc3Bvc2Fs
TWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJl
c3RvcmVUb0JhY2tncm91bmQpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RJbmRlcGVuZGVudEZy
YW1lICsgMTsKICAgICB9CiAKQEAgLTE3MCw5ICsxNzAsOSBAQCB2b2lkIFdFQlBJbWFnZURlY29k
ZXI6OmRlY29kZUZyYW1lKHNpemVfCiAgICAgYm9vbCBibGVuZCA9IHdlYnBGcmFtZS5ibGVuZF9t
ZXRob2QgPT0gV0VCUF9NVVhfQkxFTkQgPyB0cnVlIDogZmFsc2U7CiAKICAgICBBU1NFUlQobV9m
cmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA+IGZyYW1lSW5kZXgpOwotICAgIEltYWdlRnJhbWUmIGJ1
ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAgICBhdXRvJiBidWZmZXIg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgYnVmZmVyLnNldER1cmF0aW9u
KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMod2VicEZyYW1lLmR1cmF0aW9uKSk7Ci0gICAgYnVm
ZmVyLnNldERpc3Bvc2FsTWV0aG9kKHdlYnBGcmFtZS5kaXNwb3NlX21ldGhvZCA9PSBXRUJQX01V
WF9ESVNQT1NFX0JBQ0tHUk9VTkQgPyBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9y
ZVRvQmFja2dyb3VuZCA6IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2Up
OworICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZCh3ZWJwRnJhbWUuZGlzcG9zZV9tZXRob2Qg
PT0gV0VCUF9NVVhfRElTUE9TRV9CQUNLR1JPVU5EID8gU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQgOiBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3NlKTsKICAgICBBU1NFUlQoIWJ1
ZmZlci5pc0NvbXBsZXRlKCkpOwogCiAgICAgaWYgKGJ1ZmZlci5pc0ludmFsaWQoKSAmJiAhaW5p
dEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgsICZ3ZWJwRnJhbWUpKSB7CkBAIC0yMjMsNyArMjIzLDcg
QEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIocwogICAgIGlmIChmcmFt
ZUluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1h
Z2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGF1
dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKIAogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBJbnRSZWN0IGZyYW1l
UmVjdCh3ZWJwRnJhbWUtPnhfb2Zmc2V0LCB3ZWJwRnJhbWUtPnlfb2Zmc2V0LCB3ZWJwRnJhbWUt
PndpZHRoLCB3ZWJwRnJhbWUtPmhlaWdodCk7CkBAIC0yMzYsMTQgKzIzNiwxNCBAQCBib29sIFdF
QlBJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzCiAgICAgICAgIGlmICghYnVmZmVyLmlu
aXRpYWxpemUoc2l6ZSgpLCBtX3ByZW11bHRpcGx5QWxwaGEpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IEltYWdlRnJhbWUmIHByZXZCdWZm
ZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleCAtIDFdOworICAgICAgICBjb25zdCBh
dXRvJiBwcmV2QnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXggLSAxXTsKICAg
ICAgICAgQVNTRVJUKHByZXZCdWZmZXIuaXNDb21wbGV0ZSgpKTsKIAogICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUu
CiAgICAgICAgIGlmICghcHJldkJ1ZmZlci5iYWNraW5nU3RvcmUoKSB8fCAhYnVmZmVyLmluaXRp
YWxpemUoKnByZXZCdWZmZXIuYmFja2luZ1N0b3JlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIGlmIChwcmV2QnVmZmVyLmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQpIHsKKyAgICAgICAgaWYg
KHByZXZCdWZmZXIuZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
OjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgewogICAgICAgICAgICAgLy8g
V2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhv
dXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUg
b2YgdGhlIGZyYW1lLgogICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2
QnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsKQEAgLTI1OSw3ICsyNTksNyBAQCBi
b29sIFdFQlBJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzCiAKIHZvaWQgV0VCUEltYWdl
RGVjb2Rlcjo6YXBwbHlQb3N0UHJvY2Vzc2luZyhzaXplX3QgZnJhbWVJbmRleCwgV2ViUElEZWNv
ZGVyKiBkZWNvZGVyLCBXZWJQRGVjQnVmZmVyJiBkZWNvZGVyQnVmZmVyLCBib29sIGJsZW5kKQog
ewotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKKyAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAg
ICAgaW50IGRlY29kZWRXaWR0aCA9IDA7CiAgICAgaW50IGRlY29kZWRIZWlnaHQgPSAwOwogICAg
IGlmICghV2ViUElEZWNHZXRSR0IoZGVjb2RlciwgJmRlY29kZWRIZWlnaHQsICZkZWNvZGVkV2lk
dGgsIDAsIDApKQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgV0VCUEltYWdlRGVjb2Rlcjo6Y2xl
YXJGcmFtZUJ1ZmZlckMKICAgICAvLyBJbiBXRUJQIGV2ZXJ5IGZyYW1lIGRlcGVuZHMgb24gdGhl
IHByZXZpb3VzIG9uZSBvciBub25lLiBUaGF0IG1lYW5zIHRoYXQgZnJhbWVzIGFmdGVyIGNsZWFy
QmVmb3JlRnJhbWUKICAgICAvLyB3b24ndCBuZWVkIGFueSBmcmFtZSBiZWZvcmUgdGhlbSB0byBy
ZW5kZXIsIHNvIHdlIGNhbiBjbGVhciB0aGVtIGFsbC4KICAgICBmb3IgKGludCBpID0gY2xlYXJC
ZWZvcmVGcmFtZSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZl
ciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpXTsKKyAgICAgICAgYXV0byYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlci5pc0ludmFsaWQoKSkKICAgICAg
ICAgICAgIGJ1ZmZlci5jbGVhcigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVj
b2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBBU0NJSUxpdGVyYWwoIndlYnAiKTsgfQogICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXImLCBib29sKSBmaW5hbDsKLSAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKKyAgICBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAg
ICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZyYW1lQ291bnQ7
IH0KICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIG92ZXJyaWRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337693</attachid>
            <date>2018-04-11 06:00:55 -0700</date>
            <delta_ts>2018-04-11 06:47:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>imageframe-decoder-separate-8.patch</filename>
            <type>text/plain</type>
            <size>67495</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDQ0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNiBAQAorMjAxOC0wNC0xMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1hZ2VGcmFtZSB0eXBlIHVz
ZWQgYnkgbm9uLUNvY29hIGltYWdlIGRlY29kZXIgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyB0
aGF0IHVzZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NDQxOAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhaWQgQWJvdS1I
YWxsYXdhLgorCisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIHVzZXMgSW1hZ2VGcmFtZSBj
bGFzcyB3aGljaCBpcyBtZWFudCB0byBiZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgSW1h
Z2VTb3VyY2UuCisgICAgICAgIFRoZXJlIGFyZSBidW5jaCBvZiBmaWVsZHMgYW5kIG1ldGhvZHMg
aW4gdGhlIHR5cGUgdGhhdCBhcmUgb25seSB1c2VkIGJ5IG9uZSBvciB0aGUgb3RoZXIgY2xpZW50
LiBGb3IgaGFja2FiaWxpdHkKKyAgICAgICAgdGhlcmUgc2hvdWxkIGJlIGFuIHVucmVsYXRlZCBm
cmFtZSB0eXBlIGZvciBTY2FsYWJsZUltYWdlRGVjb2Rlci4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSB0eXBlIHVzZWQgaW4gU2NhbGFibGVJbWFn
ZURlY29kZXIgb25seS4gSXQgdGhlbiBjbGVhbnMgdXAKKyAgICAgICAgdW5uZWVkZWQgdGhpbmdz
IGZyb20gYm90aCBJbWFnZUZyYW1lIGFuZCBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLgorCisg
ICAgICAgICogcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhckltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
c2V0RGlzcG9zYWxNZXRob2QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6ZGlzcG9zYWxNZXRob2QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6YmFja2luZ1N0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OmZyYW1lRHVy
YXRpb25BdEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6On5TY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpzZXREZWNvZGluZ1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lOjpkZWNvZGluZ1N0YXR1cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpjbGVhckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6On5JbWFnZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpvcGVyYXRvcj0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZGVjb2RpbmdTdGF0dXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjppbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFz
TmF0aXZlSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6aGFzRnVsbFNpemVOYXRpdmVJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlv
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6ZGlzcG9zYWxN
ZXRob2QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZTo6aGFzQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29k
ZXJGcmFtZTo6aGFzQmFja2luZ1N0b3JlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OkltYWdlRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6aXNJbnZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmlzUGFydGlhbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjppc0NvbXBsZXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6ZnJhbWVCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzdWJzYW1wbGluZ0xldmVsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldERpc3Bvc2FsTWV0aG9kKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpc3Bvc2FsTWV0aG9kIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9yaWVudGF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9yaWVudGF0aW9u
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldER1cmF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmR1cmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0FscGhhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0
aXZlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzTWV0
YWRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFj
a2luZ1N0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Omhhc0JhY2tpbmdTdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnNldEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJl
YWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29k
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5H
SW1hZ2VEZWNvZGVyOjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdl
RGVjb2Rlcjo6ZmluZEZpcnN0UmVxdWlyZWRGcmFtZVRvRGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldF
QlBJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXRUJQ
SW1hZ2VEZWNvZGVyOjphcHBseVBvc3RQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldF
QlBJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTgtMDQtMDMg
IFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW09w
ZW5WUl1bV2ViVlJdIFJldHJpZXZlIEZyYW1lRGF0YSBpbiBXZWJWUidzIHJBRgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZURlY29kZXJzLmNtYWtlCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZURlY29kZXJzLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9E
SVJFQ1RPUklFUwogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAogCiAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDE0ICs1Myw2IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJh
dG9yPShjb25zdCAKICAgICBtX2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1
czsKICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CiAKLSNpZiAhVVNFKENHKQotICAgIGlmIChv
dGhlci5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0
b3JlKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAg
IG1fZGlzcG9zYWxNZXRob2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwotI2VuZGlmCi0KICAg
ICBtX25hdGl2ZUltYWdlID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKICAgICBtX3N1YnNhbXBsaW5n
TGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2ZWw7CiAgICAgbV9kZWNvZGluZ09wdGlvbnMg
PSBvdGhlci5tX2RlY29kaW5nT3B0aW9uczsKQEAgLTg1LDExICs3Nyw2IEBAIERlY29kaW5nU3Rh
dHVzIEltYWdlRnJhbWU6OmRlY29kaW5nU3RhdHUKIAogdW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xl
YXJJbWFnZSgpCiB7Ci0jaWYgIVVTRShDRykKLSAgICBpZiAoaGFzQmFja2luZ1N0b3JlKCkpCi0g
ICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKLSNlbmRpZgotCiAgICAgaWYgKCFoYXNO
YXRpdmVJbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTA5LDMyICs5Niw4IEBAIHVu
c2lnbmVkIEltYWdlRnJhbWU6OmNsZWFyKCkKICAgICByZXR1cm4gZnJhbWVCeXRlczsKIH0KIAot
I2lmICFVU0UoQ0cpCi1ib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKLXsKLSAgICBpZiAoJmJhY2tpbmdTdG9yZSA9PSB0aGlz
LT5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX2JhY2tpbmdT
dG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoYmFja2luZ1N0b3JlKTsKLSAgICByZXR1
cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjppbml0
aWFsaXplKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKLXsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYmFj
a2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZShzaXplLCBwcmVtdWx0aXBseUFs
cGhhKTsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKLX0KLSNlbmRpZgot
CiBJbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAogewotI2lmICFVU0UoQ0cpCi0gICAg
aWYgKGhhc0JhY2tpbmdTdG9yZSgpKQotICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlKCktPnNp
emUoKTsKLSNlbmRpZgogICAgIHJldHVybiBtX3NpemU7CiB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCShyZXZpc2lvbiAyMzAz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjbGVh
ckltYWdlKCk7CiAgICAgdW5zaWduZWQgY2xlYXIoKTsKIAotI2lmICFVU0UoQ0cpCi0gICAgYm9v
bCBpbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJik7Ci0gICAgYm9vbCBpbml0aWFs
aXplKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOwotI2VuZGlmCi0KICAg
ICB2b2lkIHNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzKTsKICAgICBEZWNvZGluZ1N0
YXR1cyBkZWNvZGluZ1N0YXR1cygpIGNvbnN0OwogCkBAIC03MCwxMiArNjUsNiBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc05hdGl2ZUltYWdl
KCkgPyAoc2l6ZSgpLmFyZWEoKSAqIHNpemVvZih1aW50MzJfdCkpLnVuc2FmZUdldCgpIDogMDsg
fQogICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3Vic2FtcGxpbmdMZXZlbDsgfQogCi0jaWYgIVVTRShDRykKLSAgICBlbnVtIGNsYXNzIERp
c3Bvc2FsTWV0aG9kIHsgVW5zcGVjaWZpZWQsIERvTm90RGlzcG9zZSwgUmVzdG9yZVRvQmFja2dy
b3VuZCwgUmVzdG9yZVRvUHJldmlvdXMgfTsKLSAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERp
c3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9Ci0gICAg
RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2Fs
TWV0aG9kOyB9Ci0jZW5kaWYKLQogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9uYXRpdmVJbWFnZTsgfQogCiAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlv
bjsgfTsKQEAgLTkyLDIyICs4MSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1w
bGluZ0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpIGNvbnN0OwogICAgIGJvb2wgaGFz
TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpLmlzRW1wdHkoKTsgfQogCi0jaWYgIVVT
RShDRykKLSAgICBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KLSAg
ICBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9
Ci0jZW5kaWYKLQogICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIERlY29kaW5nU3RhdHVzIG1fZGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0
YXR1czo6SW52YWxpZCB9OwogICAgIEludFNpemUgbV9zaXplOwogCi0jaWYgIVVTRShDRykKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAg
IERpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVj
aWZpZWQgfTsKLSNlbmRpZgotCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKICAg
ICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6
OkRlZmF1bHQgfTsKICAgICBEZWNvZGluZ09wdGlvbnMgbV9kZWNvZGluZ09wdGlvbnM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjpmcmFtZUlzQ29tcGxlCiAgICAgLy8gRklYTUUoMTc2MDg5KTogYXNraW5nIHdoZXRo
ZXIgZW5vdWdoIGRhdGEgaGFzIGJlZW4gYXBwZW5kZWQgZm9yIGEgZGVjb2RlCiAgICAgLy8gb3Bl
cmF0aW9uIHRvIHN1Y2NlZWQgc2hvdWxkIG5vdCByZXF1aXJlIGRlY29kaW5nIHRoZSBlbnRpcmUg
ZnJhbWUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50YWJsZSBpbiBh
IHdheSB0aGF0IGFsbG93cyBjb25zdC4KLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBjb25zdF9j
YXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgYXV0byogYnVmZmVyID0gY29uc3RfY2FzdDxTY2FsYWJsZUltYWdlRGVjb2Rlcio+
KHRoaXMpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwogICAgIHJldHVybiBidWZmZXIgJiYg
YnVmZmVyLT5pc0NvbXBsZXRlKCk7CiB9CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBTZWNvbmRzIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0CiAgICAgLy8gRklYTUUoMTc2MDg5KTogYXNr
aW5nIGZvciB0aGUgZHVyYXRpb24gb2YgYSBzdWItaW1hZ2Ugc2hvdWxkIG5vdCByZXF1aXJlIGRl
Y29kaW5nCiAgICAgLy8gdGhlIGVudGlyZSBmcmFtZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg
aW1wbGVtZW50YWJsZSBpbiBhIHdheSB0aGF0CiAgICAgLy8gYWxsb3dzIGNvbnN0LgotICAgIElt
YWdlRnJhbWUqIGJ1ZmZlciA9IGNvbnN0X2Nhc3Q8U2NhbGFibGVJbWFnZURlY29kZXIqPih0aGlz
KS0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBjb25zdF9j
YXN0PFNjYWxhYmxlSW1hZ2VEZWNvZGVyKj4odGhpcyktPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CiAgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5pc0ludmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIDBfczsKICAgICAKQEAgLTIyNSw3ICsyMjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBTY2FsYWJs
ZUltYWdlRGVjb2Rlcjo6Y3JlCiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVCdWZmZXJBdElu
ZGV4KGluZGV4KTsKKyAgICBhdXRvKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
OwogICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+aXNJbnZhbGlkKCkgfHwgIWJ1ZmZlci0+aGFz
QmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxh
YmxlSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDggKzI5LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgpAQCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBTY2FsYWJsZUlt
YWdlRGVjb2RlciBpcyBhIGJhc2UgZm9yIGFsbCBmb3JtYXQtc3BlY2lmaWMgZGVjb2RlcnMKLS8v
IChlLmcuIEpQRUdJbWFnZURlY29kZXIpLiBUaGlzIGJhc2UgbWFuYWdlcyB0aGUgSW1hZ2VGcmFt
ZSBjYWNoZS4KKy8vIChlLmcuIEpQRUdJbWFnZURlY29kZXIpLiBUaGlzIGJhc2UgbWFuYWdlcyB0
aGUgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSBjYWNoZS4KIAogY2xhc3MgU2NhbGFibGVJbWFn
ZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTY2FsYWJsZUltYWdlRGVjb2Rlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTM0
LDcgKzEzNCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIERlY29kZXMgYXMgbXVjaCBvZiB0aGUgcmVx
dWVzdGVkIGZyYW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgogICAgIC8vIFNjYWxhYmxl
SW1hZ2VEZWNvZGVyLW93bmVkIHBvaW50ZXIuCi0gICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBTY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKICAgICBib29sIGZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMjA1LDcg
KzIwNSw3IEBAIHByb3RlY3RlZDoKICAgICBpbnQgc2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFy
Y2hTdGFydCA9IDApOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUg
ZW5jb2RlZCBkYXRhLgotICAgIFZlY3RvcjxJbWFnZUZyYW1lLCAxPiBtX2ZyYW1lQnVmZmVyQ2Fj
aGU7CisgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUsIDE+IG1fZnJhbWVCdWZm
ZXJDYWNoZTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICBib29sIG1fc2NhbGVkIHsg
ZmFsc2UgfTsKICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcDoyMzAzNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVj
b2RlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCit7
Cit9CisKK0ltYWdlRnJhbWU6On5JbWFnZUZyYW1lKCkKK3sKKyAgICBjbGVhckltYWdlKCk7Cit9
CisKK2NvbnN0IEltYWdlRnJhbWUmIEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlRnJhbWU+IHNoYXJlZEluc3RhbmNlOworICAgIHJl
dHVybiBzaGFyZWRJbnN0YW5jZTsKK30KKworSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikK
KyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IG90aGVyLm1f
ZGVjb2RpbmdTdGF0dXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworCisjaWYgIVVTRShD
RykKKyAgICBpZiAob3RoZXIuYmFja2luZ1N0b3JlKCkpCisgICAgICAgIGluaXRpYWxpemUoKm90
aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKKyAgICBtX2Rpc3Bvc2FsTWV0aG9kID0gb3RoZXIubV9kaXNwb3NhbE1ldGhvZDsK
KyNlbmRpZgorCisgICAgbV9uYXRpdmVJbWFnZSA9IG90aGVyLm1fbmF0aXZlSW1hZ2U7CisgICAg
bV9zdWJzYW1wbGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZGVj
b2RpbmdPcHRpb25zID0gb3RoZXIubV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBtX29yaWVudGF0
aW9uID0gb3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX2R1cmF0aW9uID0gb3RoZXIubV9kdXJh
dGlvbjsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0
dXMgZGVjb2RpbmdTdGF0dXMpCit7CisgICAgQVNTRVJUKGRlY29kaW5nU3RhdHVzICE9IERlY29k
aW5nU3RhdHVzOjpEZWNvZGluZyk7CisgICAgbV9kZWNvZGluZ1N0YXR1cyA9IGRlY29kaW5nU3Rh
dHVzOworfQorCitEZWNvZGluZ1N0YXR1cyBJbWFnZUZyYW1lOjpkZWNvZGluZ1N0YXR1cygpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fZGVjb2RpbmdTdGF0dXMgIT0gRGVjb2RpbmdTdGF0dXM6OkRl
Y29kaW5nKTsKKyAgICByZXR1cm4gbV9kZWNvZGluZ1N0YXR1czsKK30KKwordW5zaWduZWQgSW1h
Z2VGcmFtZTo6Y2xlYXJJbWFnZSgpCit7CisjaWYgIVVTRShDRykKKyAgICBpZiAoaGFzQmFja2lu
Z1N0b3JlKCkpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyNlbmRpZgorCisg
ICAgaWYgKCFoYXNOYXRpdmVJbWFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2ln
bmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisKKyAgICBjbGVhck5hdGl2ZUlt
YWdlU3ViaW1hZ2VzKG1fbmF0aXZlSW1hZ2UpOworICAgIG1fbmF0aXZlSW1hZ2UgPSBudWxscHRy
OworICAgIG1fZGVjb2RpbmdPcHRpb25zID0gRGVjb2RpbmdPcHRpb25zKCk7CisKKyAgICByZXR1
cm4gZnJhbWVCeXRlczsKK30KKwordW5zaWduZWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQoreworICAg
IHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7CisgICAgKnRoaXMgPSBJbWFnZUZy
YW1lKCk7CisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKKyNpZiAhVVNFKENHKQorYm9vbCBJ
bWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUpCit7CisgICAgaWYgKCZiYWNraW5nU3RvcmUgPT0gdGhpcy0+YmFja2luZ1N0b3JlKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdT
dG9yZTo6Y3JlYXRlKGJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlICE9
IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZTo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgaWYgKHNpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFj
a2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlICE9IG51bGxwdHI7Cit9CisjZW5kaWYKKworSW50U2l6ZSBJbWFnZUZyYW1l
OjpzaXplKCkgY29uc3QKK3sKKyNpZiAhVVNFKENHKQorICAgIGlmIChoYXNCYWNraW5nU3RvcmUo
KSkKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZSgpLT5zaXplKCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gbV9zaXplOworfQorICAgIAorYm9vbCBJbWFnZUZyYW1lOjpoYXNOYXRpdmVJbWFnZShj
b25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBj
b25zdAoreworICAgIHJldHVybiBtX25hdGl2ZUltYWdlICYmICghc3Vic2FtcGxpbmdMZXZlbCB8
fCAqc3Vic2FtcGxpbmdMZXZlbCA+PSBtX3N1YnNhbXBsaW5nTGV2ZWwpOworfQorCitib29sIElt
YWdlRnJhbWU6Omhhc0Z1bGxTaXplTmF0aXZlSW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJz
YW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
TmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgKG1fZGVjb2RpbmdPcHRpb25zLmlzU3lu
Y2hyb25vdXMoKSB8fCBtX2RlY29kaW5nT3B0aW9ucy5oYXNGdWxsU2l6ZSgpKTsKK30KKworYm9v
bCBJbWFnZUZyYW1lOjpoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMo
Y29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwg
Y29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc05hdGl2ZUltYWdlKHN1YnNhbXBsaW5nTGV2ZWwpICYmIG1fZGVjb2RpbmdPcHRpb25z
LmlzQXN5bmNocm9ub3VzQ29tcGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsKK30KKworQ29s
b3IgSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IWhhc05hdGl2ZUltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJl
dHVybiBDb2xvcigpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENv
bG9yKG1fbmF0aXZlSW1hZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDQ2ICsyNCwzMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCisjaW5jbHVkZSAiU2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZS5oIgogCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCitTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCkKIHsKIH0KIAotSW1hZ2VGcmFtZTo6
fkltYWdlRnJhbWUoKQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6flNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUoKQogewotICAgIGNsZWFySW1hZ2UoKTsKIH0KIAotY29uc3QgSW1hZ2VGcmFt
ZSYgSW1hZ2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SW1hZ2VGcmFtZT4gc2hhcmVkSW5zdGFuY2U7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNl
OwotfQotCi1JbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpvcGVyYXRvcj0oY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIp
CiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAg
ICBtX2RlY29kaW5nU3RhdHVzID0gb3RoZXIubV9kZWNvZGluZ1N0YXR1czsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CiAKLSNpZiAhVVNFKENHKQogICAgIGlmIChvdGhlci5iYWNraW5nU3Rv
cmUoKSkKICAgICAgICAgaW5pdGlhbGl6ZSgqb3RoZXIuYmFja2luZ1N0b3JlKCkpOwogICAgIGVs
c2UKICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fZGlzcG9zYWxNZXRo
b2QgPSBvdGhlci5tX2Rpc3Bvc2FsTWV0aG9kOwotI2VuZGlmCi0KLSAgICBtX25hdGl2ZUltYWdl
ID0gb3RoZXIubV9uYXRpdmVJbWFnZTsKLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5t
X3N1YnNhbXBsaW5nTGV2ZWw7Ci0gICAgbV9kZWNvZGluZ09wdGlvbnMgPSBvdGhlci5tX2RlY29k
aW5nT3B0aW9uczsKIAogICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9uOwog
ICAgIG1fZHVyYXRpb24gPSBvdGhlci5tX2R1cmF0aW9uOwpAQCAtNzEsNDYgKzU3LDI0IEBAIElt
YWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6c2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMg
ZGVjb2RpbmdTdGF0dXMpCit2b2lkIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OnNldERlY29k
aW5nU3RhdHVzKERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQogewogICAgIEFTU0VSVChk
ZWNvZGluZ1N0YXR1cyAhPSBEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwogICAgIG1fZGVjb2Rp
bmdTdGF0dXMgPSBkZWNvZGluZ1N0YXR1czsKIH0KIAotRGVjb2RpbmdTdGF0dXMgSW1hZ2VGcmFt
ZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAorRGVjb2RpbmdTdGF0dXMgU2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZTo6ZGVjb2RpbmdTdGF0dXMoKSBjb25zdAogewogICAgIEFTU0VSVChtX2RlY29k
aW5nU3RhdHVzICE9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZyk7CiAgICAgcmV0dXJuIG1fZGVj
b2RpbmdTdGF0dXM7CiB9CiAKLXVuc2lnbmVkIEltYWdlRnJhbWU6OmNsZWFySW1hZ2UoKQotewot
I2lmICFVU0UoQ0cpCi0gICAgaWYgKGhhc0JhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX2JhY2tp
bmdTdG9yZSA9IG51bGxwdHI7Ci0jZW5kaWYKLQotICAgIGlmICghaGFzTmF0aXZlSW1hZ2UoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJh
bWVCeXRlcygpOwotCi0gICAgY2xlYXJOYXRpdmVJbWFnZVN1YmltYWdlcyhtX25hdGl2ZUltYWdl
KTsKLSAgICBtX25hdGl2ZUltYWdlID0gbnVsbHB0cjsKLSAgICBtX2RlY29kaW5nT3B0aW9ucyA9
IERlY29kaW5nT3B0aW9ucygpOwotCi0gICAgcmV0dXJuIGZyYW1lQnl0ZXM7Ci19Ci0KLXVuc2ln
bmVkIEltYWdlRnJhbWU6OmNsZWFyKCkKK3ZvaWQgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6
Y2xlYXIoKQogewotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBjbGVhckltYWdlKCk7Ci0gICAg
KnRoaXMgPSBJbWFnZUZyYW1lKCk7Ci0gICAgcmV0dXJuIGZyYW1lQnl0ZXM7CisgICAgKnRoaXMg
PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKCk7CiB9CiAKLSNpZiAhVVNFKENHKQotYm9vbCBJ
bWFnZUZyYW1lOjppbml0aWFsaXplKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUpCitib29sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1h
Z2VCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKIHsKICAgICBpZiAoJmJhY2tpbmdTdG9yZSA9
PSB0aGlzLT5iYWNraW5nU3RvcmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTksNyAr
ODMsNyBAQCBib29sIEltYWdlRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW1hZ2VCCiAgICAgcmV0
dXJuIG1fYmFja2luZ1N0b3JlICE9IG51bGxwdHI7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6aW5p
dGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCitib29s
IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OmluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI3LDM4ICs5MSwxMiBAQCBib29sIEltYWdlRnJhbWU6
OmluaXRpYWxpemUoY29uc3QgSW50U2l6CiAgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tp
bmdTdG9yZTo6Y3JlYXRlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpOwogICAgIHJldHVybiBtX2Jh
Y2tpbmdTdG9yZSAhPSBudWxscHRyOwogfQotI2VuZGlmCiAKLUludFNpemUgSW1hZ2VGcmFtZTo6
c2l6ZSgpIGNvbnN0CitJbnRTaXplIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OnNpemUoKSBj
b25zdAogewotI2lmICFVU0UoQ0cpCiAgICAgaWYgKGhhc0JhY2tpbmdTdG9yZSgpKQogICAgICAg
ICByZXR1cm4gYmFja2luZ1N0b3JlKCktPnNpemUoKTsKLSNlbmRpZgotICAgIHJldHVybiBtX3Np
emU7Ci19Ci0gICAgCi1ib29sIEltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2UgJiYgKCFzdWJzYW1wbGluZ0xldmVsIHx8ICpzdWJzYW1w
bGluZ0xldmVsID49IG1fc3Vic2FtcGxpbmdMZXZlbCk7Ci19Ci0KLWJvb2wgSW1hZ2VGcmFtZTo6
aGFzRnVsbFNpemVOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2
ZWw+JiBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAotewotICAgIHJldHVybiBoYXNOYXRpdmVJbWFn
ZShzdWJzYW1wbGluZ0xldmVsKSAmJiAobV9kZWNvZGluZ09wdGlvbnMuaXNTeW5jaHJvbm91cygp
IHx8IG1fZGVjb2RpbmdPcHRpb25zLmhhc0Z1bGxTaXplKCkpOwotfQotCi1ib29sIEltYWdlRnJh
bWU6Omhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBzdGQ6
Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNv
ZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTmF0
aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCkgJiYgbV9kZWNvZGluZ09wdGlvbnMuaXNBc3luY2hy
b25vdXNDb21wYXRpYmxlV2l0aChkZWNvZGluZ09wdGlvbnMpOwotfQotCi1Db2xvciBJbWFnZUZy
YW1lOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAotewotICAgIGlmICghaGFzTmF0aXZl
SW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9y
KCk7Ci0KLSAgICByZXR1cm4gbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9uYXRp
dmVJbWFnZSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWUuaAkocmV2aXNpb24gMjMwMzc0KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmg6MjMwMzc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJEZWNvZGluZ09wdGlvbnMuaCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbWFnZVR5cGVz
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5j
bHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUZyYW1lIHsKKyAgICBmcmllbmQgY2xhc3MgSW1hZ2VTb3VyY2U7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBDYWNoaW5nIHsgTWV0YWRhdGEsIE1ldGFkYXRhQW5kSW1hZ2UgfTsKKworICAgIElt
YWdlRnJhbWUoKTsKKyAgICBJbWFnZUZyYW1lKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKSB7IG9w
ZXJhdG9yPShvdGhlcik7IH0KKworICAgIH5JbWFnZUZyYW1lKCk7CisKKyAgICBzdGF0aWMgY29u
c3QgSW1hZ2VGcmFtZSYgZGVmYXVsdEZyYW1lKCk7CisKKyAgICBJbWFnZUZyYW1lJiBvcGVyYXRv
cj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOworCisgICAgdW5zaWduZWQgY2xlYXJJbWFnZSgp
OworICAgIHVuc2lnbmVkIGNsZWFyKCk7CisKKyNpZiAhVVNFKENHKQorICAgIGJvb2wgaW5pdGlh
bGl6ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYpOworICAgIGJvb2wgaW5pdGlhbGl6ZShjb25z
dCBJbnRTaXplJiwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyNlbmRpZgorCisgICAgdm9pZCBz
ZXREZWNvZGluZ1N0YXR1cyhEZWNvZGluZ1N0YXR1cyk7CisgICAgRGVjb2RpbmdTdGF0dXMgZGVj
b2RpbmdTdGF0dXMoKSBjb25zdDsKKworICAgIGJvb2wgaXNJbnZhbGlkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZDsgfQorICAgIGJv
b2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6UGFydGlhbDsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CisKKyAgICBJ
bnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiAhbV9vcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8g
c2l6ZSgpIDogc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBmcmFtZUJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gaGFzTmF0aXZlSW1hZ2UoKSA/IChzaXplKCkuYXJlYSgpICog
c2l6ZW9mKHVpbnQzMl90KSkudW5zYWZlR2V0KCkgOiAwOyB9CisgICAgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9
CisKKyNpZiAhVVNFKENHKQorICAgIGVudW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBVbnNwZWNp
ZmllZCwgRG9Ob3REaXNwb3NlLCBSZXN0b3JlVG9CYWNrZ3JvdW5kLCBSZXN0b3JlVG9QcmV2aW91
cyB9OworICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7
IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KKyAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3Nh
bE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KKyNlbmRpZgorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUlt
YWdlOyB9CisKKyAgICB2b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50
YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9OworICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisKKyAg
ICB2b2lkIHNldER1cmF0aW9uKGNvbnN0IFNlY29uZHMmIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24g
PSBkdXJhdGlvbjsgfQorICAgIFNlY29uZHMgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9CisKKyAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNB
bHBoYSA9IGhhc0FscGhhOyB9CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuICFo
YXNNZXRhZGF0YSgpIHx8IG1faGFzQWxwaGE7IH0KKworICAgIGJvb2wgaGFzTmF0aXZlSW1hZ2Uo
Y29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pIGNvbnN0OworICAg
IGJvb2wgaGFzRnVsbFNpemVOYXRpdmVJbWFnZShjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBs
aW5nTGV2ZWw+JiA9IHsgfSkgY29uc3Q7CisgICAgYm9vbCBoYXNEZWNvZGVkTmF0aXZlSW1hZ2VD
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiYsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpIGNvbnN0OworICAgIGJvb2wgaGFzTWV0YWRhdGEo
KSBjb25zdCB7IHJldHVybiAhc2l6ZSgpLmlzRW1wdHkoKTsgfQorCisjaWYgIVVTRShDRykKKyAg
ICBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
aW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICBib29sIGhh
c0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9CisjZW5kaWYK
KworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIERlY29kaW5nU3RhdHVzIG1fZGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6SW52
YWxpZCB9OworICAgIEludFNpemUgbV9zaXplOworCisjaWYgIVVTRShDRykKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIERpc3Bvc2Fs
TWV0aG9kIG1fZGlzcG9zYWxNZXRob2QgeyBEaXNwb3NhbE1ldGhvZDo6VW5zcGVjaWZpZWQgfTsK
KyNlbmRpZgorCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZTsKKyAgICBTdWJzYW1w
bGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQg
fTsKKyAgICBEZWNvZGluZ09wdGlvbnMgbV9kZWNvZGluZ09wdGlvbnM7CisKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OworICAg
IFNlY29uZHMgbV9kdXJhdGlvbjsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9Owor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZS5oCShyZXZpc2lvbiAy
MzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDI3ICszNiwxOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEltYWdlRnJhbWUgewotICAgIGZyaWVuZCBj
bGFzcyBJbWFnZVNvdXJjZTsKK2NsYXNzIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUgewogcHVi
bGljOgotICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IE1ldGFkYXRhLCBNZXRhZGF0YUFuZEltYWdl
IH07CisgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSgpOworICAgIFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUoY29uc3QgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgb3RoZXIpIHsgb3Bl
cmF0b3I9KG90aGVyKTsgfQogCi0gICAgSW1hZ2VGcmFtZSgpOwotICAgIEltYWdlRnJhbWUoY29u
c3QgSW1hZ2VGcmFtZSYgb3RoZXIpIHsgb3BlcmF0b3I9KG90aGVyKTsgfQorICAgIH5TY2FsYWJs
ZUltYWdlRGVjb2RlckZyYW1lKCk7CiAKLSAgICB+SW1hZ2VGcmFtZSgpOworICAgIFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWUmIG9wZXJhdG9yPShjb25zdCBTY2FsYWJsZUltYWdlRGVjb2RlckZy
YW1lJiBvdGhlcik7CiAKLSAgICBzdGF0aWMgY29uc3QgSW1hZ2VGcmFtZSYgZGVmYXVsdEZyYW1l
KCk7CisgICAgdm9pZCBjbGVhcigpOwogCi0gICAgSW1hZ2VGcmFtZSYgb3BlcmF0b3I9KGNvbnN0
IEltYWdlRnJhbWUmIG90aGVyKTsKLQotICAgIHVuc2lnbmVkIGNsZWFySW1hZ2UoKTsKLSAgICB1
bnNpZ25lZCBjbGVhcigpOwotCi0jaWYgIVVTRShDRykKICAgICBib29sIGluaXRpYWxpemUoY29u
c3QgSW1hZ2VCYWNraW5nU3RvcmUmKTsKICAgICBib29sIGluaXRpYWxpemUoY29uc3QgSW50U2l6
ZSYsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7Ci0jZW5kaWYKIAogICAgIHZvaWQgc2V0RGVjb2Rp
bmdTdGF0dXMoRGVjb2RpbmdTdGF0dXMpOwogICAgIERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3Rh
dHVzKCkgY29uc3Q7CkBAIC02NiwxNyArNTgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDb21w
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6
OkNvbXBsZXRlOyB9CiAKICAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKLSAgICBJbnRTaXplIHNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9vcmllbnRhdGlvbi51
c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZSgpIDogc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCk7IH0K
LSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gaGFzTmF0aXZlSW1hZ2Uo
KSA/IChzaXplKCkuYXJlYSgpICogc2l6ZW9mKHVpbnQzMl90KSkudW5zYWZlR2V0KCkgOiAwOyB9
Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4g
bV9zdWJzYW1wbGluZ0xldmVsOyB9CiAKLSNpZiAhVVNFKENHKQogICAgIGVudW0gY2xhc3MgRGlz
cG9zYWxNZXRob2QgeyBVbnNwZWNpZmllZCwgRG9Ob3REaXNwb3NlLCBSZXN0b3JlVG9CYWNrZ3Jv
dW5kLCBSZXN0b3JlVG9QcmV2aW91cyB9OwogICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRGlz
cG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KICAgICBE
aXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxN
ZXRob2Q7IH0KLSNlbmRpZgotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX25hdGl2ZUltYWdlOyB9CiAKICAgICB2b2lkIHNldE9yaWVudGF0aW9uKElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9u
OyB9OwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBt
X29yaWVudGF0aW9uOyB9CkBAIC04NiwzMSArNzEsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQogICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiAhaGFzTWV0YWRhdGEoKSB8fCBtX2hhc0Fs
cGhhOyB9Ci0KLSAgICBib29sIGhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vi
c2FtcGxpbmdMZXZlbD4mID0geyB9KSBjb25zdDsKLSAgICBib29sIGhhc0Z1bGxTaXplTmF0aXZl
SW1hZ2UoY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pIGNvbnN0
OwotICAgIGJvb2wgaGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNv
bnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mLCBjb25zdCBEZWNvZGluZ09wdGlv
bnMmKSBjb25zdDsKICAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIXNpemUo
KS5pc0VtcHR5KCk7IH0KIAotI2lmICFVU0UoQ0cpCiAgICAgSW1hZ2VCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3Rv
cmUuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgYm9vbCBoYXNCYWNraW5nU3RvcmUoKSBjb25zdCB7
IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQotI2VuZGlmCi0KLSAgICBDb2xvciBzaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBEZWNvZGluZ1N0YXR1cyBtX2Rl
Y29kaW5nU3RhdHVzIHsgRGVjb2RpbmdTdGF0dXM6OkludmFsaWQgfTsKLSAgICBJbnRTaXplIG1f
c2l6ZTsKIAotI2lmICFVU0UoQ0cpCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0
b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAgICBEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9k
IHsgRGlzcG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkIH07Ci0jZW5kaWYKLQotICAgIE5hdGl2ZUlt
YWdlUHRyIG1fbmF0aXZlSW1hZ2U7Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5n
TGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0IH07Ci0gICAgRGVjb2RpbmdPcHRpb25z
IG1fZGVjb2RpbmdPcHRpb25zOwogCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9u
IHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKICAgICBTZWNvbmRzIG1fZHVyYXRpb247Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjMwMzc0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6
OnNldERhdGEoU2hhcmVkQnVmZgogICAgICAgICBtX3JlYWRlci0+c2V0RGF0YSgmZGF0YSk7CiB9
CiAKLUltYWdlRnJhbWUqIEJNUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCkKK1NjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIEJNUEltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXgpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtNjQsNyArNjQsNyBAQCBJbWFnZUZyYW1lKiBCTVBJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAg
ICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5ncm93KDEpOwogCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVy
ID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOworICAgIGF1dG8qIGJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKICAgICBpZiAoIWJ1ZmZlci0+aXNDb21wbGV0ZSgpKQog
ICAgICAgICBkZWNvZGUoZmFsc2UsIGlzQWxsRGF0YVJlY2VpdmVkKCkpOwogICAgIHJldHVybiBi
dWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMzAzNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIC8vIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyCiAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gQVNDSUlMaXRlcmFsKCJibXAiKTsgfQogICAgIHZvaWQgc2V0RGF0YShT
aGFyZWRCdWZmZXImLCBib29sIGFsbERhdGFSZWNlaXZlZCkgZmluYWw7Ci0gICAgSW1hZ2VGcmFt
ZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgZmluYWw7CisgICAgU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgZmluYWw7
CiAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiBCZSBjYXJl
ZnVsIHRvIGF2b2lkCiAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5
IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgLy8gQk1QSW1hZ2VSZWFkZXIhCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VS
ZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDExICs2NCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyB8cGFyZW50fCBp
cyB0aGUgZGVjb2RlciB0aGF0IG93bnMgdXMuCiAgICAgLy8gfHN0YXJ0T2Zmc2V0fCBwb2ludHMg
dG8gdGhlIHN0YXJ0IG9mIHRoZSBCTVAgd2l0aGluIHRoZSBmaWxlLgotICAgIC8vIHxidWZmZXJ8
IHBvaW50cyBhdCBhbiBlbXB0eSBJbWFnZUZyYW1lIHRoYXQgd2UnbGwgaW5pdGlhbGl6ZSBhbmQK
KyAgICAvLyB8YnVmZmVyfCBwb2ludHMgYXQgYW4gZW1wdHkgU2NhbGFibGVJbWFnZURlY29kZXJG
cmFtZSB0aGF0IHdlJ2xsIGluaXRpYWxpemUgYW5kCiAgICAgLy8gZmlsbCB3aXRoIGRlY29kZWQg
ZGF0YS4KICAgICBCTVBJbWFnZVJlYWRlcihTY2FsYWJsZUltYWdlRGVjb2RlciogcGFyZW50LCBz
aXplX3QgZGVjb2RlZEFuZEhlYWRlck9mZnNldCwgc2l6ZV90IGltZ0RhdGFPZmZzZXQsIGJvb2wg
dXNlc0FuZE1hc2spOwogCi0gICAgdm9pZCBzZXRCdWZmZXIoSW1hZ2VGcmFtZSogYnVmZmVyKSB7
IG1fYnVmZmVyID0gYnVmZmVyOyB9CisgICAgdm9pZCBzZXRCdWZmZXIoU2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZSogYnVmZmVyKSB7IG1fYnVmZmVyID0gYnVmZmVyOyB9CiAgICAgdm9pZCBzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CiAKICAgICAvLyBEb2Vz
IHRoZSBhY3R1YWwgZGVjb2RpbmcuIElmIHxvbmx5U2l6ZXwgaXMgdHJ1ZSwgZGVjb2Rpbmcgb25s
eQpAQCAtMjY5LDcgKzI2OSw3IEBAIHByaXZhdGU6CiAgICAgU2NhbGFibGVJbWFnZURlY29kZXIq
IG1fcGFyZW50OwogCiAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcGl4ZWwgZGF0YS4K
LSAgICBJbWFnZUZyYW1lKiBtX2J1ZmZlcjsKKyAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1l
KiBtX2J1ZmZlcjsKIAogICAgIC8vIFRoZSBmaWxlIHRvIGRlY29kZS4KICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBtX2RhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2
aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMCArMTA2LDEw
IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmUKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBmb3IgKHNpemVfdCBpID0gZnJhbWVJbmRleDsgaSA+IDA7IC0taSkgewot
ICAgICAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpIC0gMV07Cisg
ICAgICAgIGF1dG8mIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2kgLSAxXTsKIAogICAgICAg
ICAvLyBGcmFtZXMgd2l0aCBkaXNwb3NhbCBtZXRob2QgUmVzdG9yZVRvUHJldmlvdXMgYXJlIHVz
ZWxlc3MsIHNraXAgdGhlbS4KLSAgICAgICAgaWYgKGZyYW1lLmRpc3Bvc2FsTWV0aG9kKCkgPT0g
SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKQorICAgICAgICBp
ZiAoZnJhbWUuZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBkaXNwb3NhbCBtZXRob2QgY2FuIGJlIFVu
c3BlY2lmaWVkLCBEb05vdERpc3Bvc2Ugb3IgUmVzdG9yZVRvQmFja2dyb3VuZC4KQEAgLTExOSw3
ICsxMTksNyBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmaW5kRmlyc3RSZXF1aXJlCiAKICAg
ICAgICAgLy8gSWYgdGhlIGRpc3Bvc2FsIG1ldGhvZCBvZiB0aGlzIGZyYW1lIGlzIFJlc3RvcmVU
b0JhY2tncm91bmQgYW5kIGl0IGZpbGxzIHRoZSB3aG9sZSBhcmVhLAogICAgICAgICAvLyB0aGUg
bmV4dCBmcmFtZSdzIGJhY2tpbmcgc3RvcmUgaXMgaW5pdGlhbGl6ZWQgdG8gdHJhbnNwYXJlbnQs
IHNvIHdlIHN0YXJ0IGRlY29kaW5nIHdpdGggaXQuCi0gICAgICAgIGlmIChmcmFtZS5kaXNwb3Nh
bE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3Jv
dW5kKSB7CisgICAgICAgIGlmIChmcmFtZS5kaXNwb3NhbE1ldGhvZCgpID09IFNjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kKSB7CiAg
ICAgICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIGZyYW1lLmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJl
Y3QoKSBoZXJlLCBiZWNhdXNlIGl0IGhhcyBiZWVuIGNsZWFyZWQKICAgICAgICAgICAgIC8vIHdo
ZW4gdGhlIGZyYW1lIHdhcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlLiBXZSBuZWVkIHRvIGdldCB0
aGUgdmFsdWVzIGZyb20gdGhlCiAgICAgICAgICAgICAvLyByZWFkZXIgY29udGV4dC4KQEAgLTEz
NywxMiArMTM3LDEyIEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmUK
ICAgICByZXR1cm4gMDsKIH0KIAotSW1hZ2VGcmFtZSogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogR0lG
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlm
IChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSW1hZ2VG
cmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOworICAgIGF1dG8mIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKICAgICBpZiAoIWZyYW1lLmlzQ29tcGxldGUo
KSkgewogICAgICAgICBmb3IgKGF1dG8gaSA9IGZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29k
ZShpbmRleCk7IGkgPD0gaW5kZXg7IGkrKykKICAgICAgICAgICAgIGRlY29kZShpICsgMSwgR0lG
RnVsbFF1ZXJ5LCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAgICAgLy8gYWx3YXlzIHVzZSBJ
bWFnZVNvdXJjZTo6Y2xlYXIodHJ1ZSwgLi4uKSB0byBjb21wbGV0ZWx5IGZyZWUgdGhlIG1lbW9y
eSBpbgogICAgIC8vIHRoaXMgY2FzZS4KICAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4o
Y2xlYXJCZWZvcmVGcmFtZSwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNv
bnN0IFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5i
ZWdpbigpICsgY2xlYXJCZWZvcmVGcmFtZSk7CisgICAgY29uc3QgVmVjdG9yPFNjYWxhYmxlSW1h
Z2VEZWNvZGVyRnJhbWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkg
KyBjbGVhckJlZm9yZUZyYW1lKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgZnJhbWVz
IHN1Y2ggdGhhdDoKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgfGVuZHwKQEAgLTE5MywxNCAr
MTkzLDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICAv
LyAgICogSWYgdGhlIGZyYW1lIGlzIHBhcnRpYWwsIHdlJ3JlIGRlY29kaW5nIGl0LCBzbyBkb24n
dCBjbGVhciBpdDsgaWYgaXQKICAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVy
IHRoYW4gRGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAg
IHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRo
ZSBuZXh0IG9uZS4KLSAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKLSAg
ICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5pc0ludmFs
aWQoKSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6UmVzdG9yZVRvUHJldmlvdXMpKTsgLS1pKSB7CisgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWU+OjppdGVyYXRvciBpKGVuZCk7CisgICAgZm9yICg7IChpICE9IG1fZnJhbWVC
dWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoaS0+aXNJbnZhbGlkKCkgfHwgKGktPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3Rv
cmVUb1ByZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoaS0+aXNDb21wbGV0ZSgpICYmIChp
ICE9IGVuZCkpCiAgICAgICAgICAgICBpLT5jbGVhcigpOwogICAgIH0KIAogICAgIC8vIE5vdyB8
aXwgaG9sZHMgdGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3Ig
ZnJhbWVzLgotICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVC
dWZmZXJDYWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKKyAgICBmb3IgKFZlY3RvcjxTY2Fs
YWJsZUltYWdlRGVjb2RlckZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVn
aW4oKSk7IGogIT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVCghai0+aXNQYXJ0aWFsKCkpOwog
ICAgICAgICBpZiAoIWotPmlzSW52YWxpZCgpKQogICAgICAgICAgICAgai0+Y2xlYXIoKTsKQEAg
LTIzNyw3ICsyMzcsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5z
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYg
bmVjZXNzYXJ5LgotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtm
cmFtZUluZGV4XTsKKyAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJ
bmRleF07CiAgICAgaWYgKChidWZmZXIuaXNJbnZhbGlkKCkgJiYgIWluaXRGcmFtZUJ1ZmZlcihm
cmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNCYWNraW5nU3RvcmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0yNzAsMTEgKzI3MCwxMSBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2
ZURlY29kZWRSb3codW5zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVy
YXRpb24sIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgZnJhbWVEdXJhdGlvbiwgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVj
ZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3
aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcg
aGVyZS4KLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJ
bmRleF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhd
OwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlkKCkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxy
ZWFkeSBjYWxsZWQgc2V0RmFpbGVkKCkuCiAKQEAgLTI5OCw4ICsyOTgsOCBAQCBib29sIEdJRklt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBGaXJzdCBza2lw
IG92ZXIgcHJpb3IgRGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzIGZyYW1lcyAoc2lu
Y2UgdGhleQogICAgICAgICAgICAgLy8gZG9uJ3QgYWZmZWN0IHRoZSBzdGFydCBzdGF0ZSBvZiB0
aGlzIGZyYW1lKSB0aGUgc2FtZSB3YXkgd2UgZG8gaW4KICAgICAgICAgICAgIC8vIGluaXRGcmFt
ZUJ1ZmZlcigpLgotICAgICAgICAgICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgIHdoaWxlIChmcmFt
ZUluZGV4ICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpCisgICAgICAgICAgICBjb25zdCBhdXRv
KiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOworICAgICAg
ICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkg
PT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1By
ZXZpb3VzKSkKICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOwogCiAgICAgICAgICAgICAvLyBOb3csIGlmIHdlJ3JlIGF0IGEgRGlz
cG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkIG9yIERpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2Ug
ZnJhbWUsIHRoZW4KQEAgLTMxMSw3ICszMTEsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMg
cmVjdCBpcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8g
cmVjdCwgd2Uga25vdyB0aGUgY3VycmVudCBmcmFtZSBoYXMgbm8gYWxwaGEuCiAgICAgICAgICAg
ICBJbnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCktPmZyYW1lUmVj
dCgpOwotICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IElt
YWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kKSAmJiAhcHJldkJ1
ZmZlci0+aGFzQWxwaGEoKSAmJiByZWN0LmNvbnRhaW5zKHByZXZSZWN0KSkKKyAgICAgICAgICAg
IGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2Rl
ckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgJiYgIXByZXZCdWZm
ZXItPmhhc0FscGhhKCkgJiYgcmVjdC5jb250YWlucyhwcmV2UmVjdCkpCiAgICAgICAgICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3MCw3
ICszNzAsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVmZmVyLgogICAgIGNvbnN0IEdJ
RkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0ID0gbV9yZWFkZXItPmZyYW1lQ29udGV4dCgpOwog
ICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lQ29udGV4dC0+eE9mZnNldCwgZnJhbWVDb250ZXh0
LT55T2Zmc2V0LCBmcmFtZUNvbnRleHQtPndpZHRoLCBmcmFtZUNvbnRleHQtPmhlaWdodCk7Ci0g
ICAgSW1hZ2VGcmFtZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUlu
ZGV4XTsKKyAgICBhdXRvKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1l
SW5kZXhdOwogCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4K
QEAgLTM4NSwxNiArMzg1LDE2IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZm
ZXIodW4KICAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIHRoZSBwcmV2aW91cyBmcmFt
ZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhlCiAgICAgICAgIC8vIGZpcnN0IGZyYW1lIHNw
ZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCiAgICAgICAgIC8v
IERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kIGJlbG93IGFuZCByZXNldCB0byBh
IGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQotICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2
QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICBJbWFn
ZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxN
ZXRob2QoKTsKLSAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZNZXRob2QgPT0gSW1h
Z2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhd
OworICAgICAgICBhdXRvIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgp
OworICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBTY2FsYWJsZUlt
YWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMpKSB7CiAg
ICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhd
OwogICAgICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7
CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+aXNDb21wbGV0ZSgpKTsK
IAotICAgICAgICBpZiAoKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6
OlVuc3BlY2lmaWVkKSB8fCAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6RG9Ob3REaXNwb3NlKSkgeworICAgICAgICBpZiAoKHByZXZNZXRob2QgPT0gU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkKSB8fCAocHJldk1l
dGhvZCA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6RG9Ob3RE
aXNwb3NlKSkgewogICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3QgZnJhbWUgYXMgdGhl
IHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lLgogICAgICAgICAgICAgaWYgKCFwcmV2QnVm
ZmVyLT5iYWNraW5nU3RvcmUoKSB8fCAhYnVmZmVyLT5pbml0aWFsaXplKCpwcmV2QnVmZmVyLT5i
YWNraW5nU3RvcmUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYpIGZpbmFsOwogICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3QgZmluYWw7
CiAgICAgUmVwZXRpdGlvbkNvdW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IGZpbmFsOwotICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIGZpbmFsOworICAg
IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5k
ZXgpIGZpbmFsOwogICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVy
fC4gQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwg
ZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQogICAgIC8vIEdJRkltYWdl
UmVhZGVyIQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsYmFja3MgZnJv
bSB0aGUgR0lGIHJlYWRlci4KICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1l
SW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgcm93QnVmZmVyLCBzaXplX3Qgd2lk
dGgsIHNpemVfdCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJh
bnNwYXJlbnRQaXhlbHMpOwotICAgIGJvb2wgZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUlu
ZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCk7
CisgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZy
YW1lRHVyYXRpb24sIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kKTsK
ICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3NiwxMSArNTc2LDExIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRh
UG8KICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhl
IERpc3Bvc2FsTWV0aG9kIGVudW0KICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRo
ZSBHSUYgc3BlYyEKICAgICAgICAgICAgIGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRD
b21wb25lbnQpID4+IDIpICYgMHg3OwotICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3Nh
bE1ldGhvZCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9k
PihkaXNwb3NhbE1ldGhvZCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0
aG9kID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlz
cG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mg
c2F5IHRoYXQgZGlzcG9zYWwgbWV0aG9kIDMgaXMgIm92ZXJ3cml0ZSBwcmV2aW91cyIsIG90aGVy
cyB0aGF0IHNldHRpbmcKICAgICAgICAgICAgIC8vIHRoZSB0aGlyZCBiaXQgb2YgdGhlIGZpZWxk
IChpLmUuIG1ldGhvZCA0KSBpcy4gV2UgbWFwIGJvdGggdG8gdGhlIHNhbWUgdmFsdWUuCiAgICAg
ICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKLSAgICAgICAgICAgICAgICBjdXJyZW50
RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRo
b2Q6OlJlc3RvcmVUb1ByZXZpb3VzOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlz
cG9zYWxNZXRob2QgPSBXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3Nh
bE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXM7CiAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRl
bGF5VGltZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwogICAgICAgICAg
ICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuaAkocmV2aXNpb24gMjMwMzc0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgd2lkdGg7CiAgICAg
dW5zaWduZWQgaGVpZ2h0OwogICAgIGludCB0cGl4ZWw7IC8vIEluZGV4IG9mIHRyYW5zcGFyZW50
IHBpeGVsLgotICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCisg
ICAgV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0
Yy4KICAgICBzaXplX3QgbG9jYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2UgY29sb3Jt
YXAuCiAgICAgaW50IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFw
IGFycmF5LgogICAgIGludCBkYXRhc2l6ZTsKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgd2lkdGgoMCkKICAgICAgICAgLCBoZWlnaHQoMCkKICAgICAgICAgLCB0cGl4ZWwo
MCkKLSAgICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3Nh
bE1ldGhvZDo6VW5zcGVjaWZpZWQpCisgICAgICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6
U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkKQog
ICAgICAgICAsIGxvY2FsQ29sb3JtYXBQb3NpdGlvbigwKQogICAgICAgICAsIGxvY2FsQ29sb3Jt
YXBTaXplKDApCiAgICAgICAgICwgZGF0YXNpemUoMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTAsMTMgKzkwLDEzIEBAIHNpemVfdCBJQ09JbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb24K
ICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKIH0KIAotSW1hZ2VGcmFtZSog
SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorU2NhbGFi
bGVJbWFnZURlY29kZXJGcmFtZSogSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KQogewogICAgIC8vIEVuc3VyZSB8aW5kZXh8IGlzIHZhbGlkLgogICAgIGlm
IChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSW1hZ2VG
cmFtZSogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CisgICAgYXV0byogYnVm
ZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKCFidWZmZXItPmlzQ29t
cGxldGUoKSkKICAgICAgICAgZGVjb2RlKGluZGV4LCBmYWxzZSwgaXNBbGxEYXRhUmVjZWl2ZWQo
KSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHJl
dmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBw
dWJsaWM6CiAgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBmaW5h
bDsKICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEltYWdlRnJhbWUq
IGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpIGZpbmFsOworICAgIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpIGZpbmFsOwogICAgIC8vIENBVVRJ
T046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxsIHJlYWRlcnMgYW5kIGRlY29kZXJzLiBCZSBjYXJl
ZnVsIHRvCiAgICAgLy8gYXZvaWQgYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5
IHdoZW4gY2FsbGluZyB0aGlzIGZyb20KICAgICAvLyBpbnNpZGUgQk1QSW1hZ2VSZWFkZXIhCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw3ICs1MTEsNyBAQCBib29sIEpQRUdJbWFn
ZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUltYWdl
RnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
CitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC01MTksNyArNTE5LDcgQEAgSW1hZ2VGcmFtZSogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZQogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGUuZ3JvdygxKTsKIAotICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGF1dG8mIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdOwogICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoZmFsc2Us
IGlzQWxsRGF0YVJlY2VpdmVkKCkpOwogICAgIHJldHVybiAmZnJhbWU7CkBAIC01MzIsNyArNTMy
LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8
Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZm
ZXIsIHVpbnQzMl90KiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29s
dW1uKQordm9pZCBzZXRQaXhlbChTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIsIHVp
bnQzMl90KiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQog
ewogICAgIEpTQU1QTEUqIGpzYW1wbGUgPSAqc2FtcGxlcyArIGNvbHVtbiAqIChjb2xvclNwYWNl
ID09IEpDU19SR0IgPyAzIDogNCk7CiAKQEAgLTU1Nyw3ICs1NTcsNyBAQCB2b2lkIHNldFBpeGVs
KEltYWdlRnJhbWUmIGJ1ZmZlciwgdWludDMyCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNF
IGNvbG9yU3BhY2UsIGJvb2wgaXNTY2FsZWQ+Ci1ib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpCitib29sIEpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcyhTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIpCiB7CiAgICAg
SlNBTVBBUlJBWSBzYW1wbGVzID0gbV9yZWFkZXItPnNhbXBsZXMoKTsKICAgICBqcGVnX2RlY29t
cHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKQEAgLTU4NSw3ICs1ODUsNyBA
QCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyhJCiB9CiAKIHRlbXBsYXRl
IDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci1ib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpCitib29sIEpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcyhTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIpCiB7CiAgICAg
cmV0dXJuIG1fc2NhbGVkID8gb3V0cHV0U2NhbmxpbmVzPGNvbG9yU3BhY2UsIHRydWU+KGJ1ZmZl
cikgOiBvdXRwdXRTY2FubGluZXM8Y29sb3JTcGFjZSwgZmFsc2U+KGJ1ZmZlcik7CiB9CkBAIC01
OTYsNyArNTk2LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZl
ciBpZiBuZWVkZWQuCi0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAo
YnVmZmVyLmlzSW52YWxpZCgpKSB7CiAgICAgICAgIGlmICghYnVmZmVyLmluaXRpYWxpemUoc2Nh
bGVkU2l6ZSgpLCBtX3ByZW11bHRpcGx5QWxwaGEpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwpAQCAtNjQyLDcgKzY0Miw3IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0Nv
bXBsZXRlKCkKIAogICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZl
ciwgZXZlbiBpZiB0aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcKICAgICAvLyBlbXB0eS4KLSAgICBJ
bWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgYXV0byYgYnVm
ZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxz
ZSk7CiAgICAgYnVmZmVyLnNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzOjpDb21wbGV0
ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjMwMzc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBTY2FsYWJsZUltYWdlRGVjb2RlcgogICAgICAgICBTdHJpbmcg
ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBU0NJSUxpdGVyYWwo
ImpwZyIpOyB9CiAgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7
Ci0gICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92
ZXJyaWRlOworICAgICAgICBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFp
bGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAv
LyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMg
ZnJvbSBpbnNpZGUKICAgICAgICAgLy8gSlBFR0ltYWdlUmVhZGVyIQpAQCAtODAsMTAgKzgwLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBvbmx5U2l6
ZSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCiAgICAgICAgIHRlbXBsYXRlIDxKX0NPTE9SX1NQ
QUNFIGNvbG9yU3BhY2U+Ci0gICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKEltYWdlRnJhbWUm
IGJ1ZmZlcik7CisgICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyRnJhbWUmIGJ1ZmZlcik7CiAKICAgICAgICAgdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29s
b3JTcGFjZSwgYm9vbCBpc1NjYWxlZD4KLSAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoSW1h
Z2VGcmFtZSYgYnVmZmVyKTsKKyAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKTsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlBF
R0ltYWdlUmVhZGVyPiBtX3JlYWRlcjsKICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHAJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTMsNyArMjUzLDcgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50Uwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1JbWFnZUZyYW1lKiBQTkdJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCitTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBQ
TkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAjaWYg
RU5BQkxFKEFQTkcpCiAgICAgaWYgKFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjplbmNvZGVkRGF0YVN0
YXR1cygpIDwgRW5jb2RlZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCkBAIC0yNjksNyArMjY5
LDcgQEAgSW1hZ2VGcmFtZSogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlcgogICAgIGlmICht
X2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUu
Z3JvdygxKTsKIAotICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2lu
ZGV4XTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAg
aWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSwgaW5kZXgsIGlz
QWxsRGF0YVJlY2VpdmVkKCkpOwogICAgIHJldHVybiAmZnJhbWU7CkBAIC00MjgsNyArNDI4LDcg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIGlmIChtX2N1
cnJlbnRGcmFtZSA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgotICAg
IEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07
CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsK
ICAgICBpZiAoYnVmZmVyLmlzSW52YWxpZCgpKSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9
IG1fcmVhZGVyLT5wbmdQdHIoKTsKICAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzY2Fs
ZWRTaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpIHsKQEAgLTYzMiw3ICs2MzIsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6cmVhZENodW5rcyhwbmdfdW5rCiAgICAgICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUuZ3JvdygxKTsKIAogICAgICAgICBpZiAobV9jdXJyZW50RnJhbWUgPCBtX2Zy
YW1lQnVmZmVyQ2FjaGUuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBJbWFnZUZyYW1lJiBidWZmZXIg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOworICAgICAgICAgICAgYXV0byYg
YnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKIAogICAgICAgICAg
ICAgaWYgKCFtX2RlbGF5RGVub21pbmF0b3IpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldER1
cmF0aW9uKFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMobV9kZWxheU51bWVyYXRvciAqIDEwKSk7
CkBAIC02NDAsMTEgKzY0MCwxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cmVhZENodW5rcyhw
bmdfdW5rCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldER1cmF0aW9uKFNlY29uZHM6OmZyb21N
aWxsaXNlY29uZHMobV9kZWxheU51bWVyYXRvciAqIDEwMDAgLyBtX2RlbGF5RGVub21pbmF0b3Ip
KTsKIAogICAgICAgICAgICAgaWYgKG1fZGlzcG9zZSA9PSAyKQotICAgICAgICAgICAgICAgIGJ1
ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9y
ZVRvUHJldmlvdXMpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChT
Y2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlv
dXMpOwogICAgICAgICAgICAgZWxzZSBpZiAobV9kaXNwb3NlID09IDEpCi0gICAgICAgICAgICAg
ICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpS
ZXN0b3JlVG9CYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxN
ZXRob2QoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVU
b0JhY2tncm91bmQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci5z
ZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3Nl
KTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBtX2ZyYW1lSW5mbyA9IHRydWU7CkBAIC03MjQsMTYgKzcyNCwxNiBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAKICAgICAvLyBTZWUgR0lGSW1h
Z2VEZWNvZGVyIGZvciBmdWxsIGV4cGxhbmF0aW9uLgogICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBz
dGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7
Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZl
ckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lKTsKKyAgICBjb25zdCBWZWN0b3I8U2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUu
YmVnaW4oKSArIGNsZWFyQmVmb3JlRnJhbWUpOwogCi0gICAgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBpKGVuZCk7Ci0gICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdp
bigpKSAmJiAoaS0+aXNJbnZhbGlkKCkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSk7IC0taSkgeworICAgIFZl
Y3RvcjxTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOworICAgIGZv
ciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKGktPmlzSW52YWxpZCgp
IHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cykpOyAtLWkpIHsKICAgICAgICAgaWYgKGkt
PmlzQ29tcGxldGUoKSAmJiAoaSAhPSBlbmQpKQogICAgICAgICAgICAgaS0+Y2xlYXIoKTsKICAg
ICB9CiAKICAgICAvLyBOb3cgfGl8IGhvbGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJl
c2VydmU7IGNsZWFyIHByaW9yIGZyYW1lcy4KLSAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6
aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7Cisg
ICAgZm9yIChWZWN0b3I8U2NhbGFibGVJbWFnZURlY29kZXJGcmFtZT46Oml0ZXJhdG9yIGoobV9m
cmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQo
IWotPmlzUGFydGlhbCgpKTsKICAgICAgICAgaWYgKGotPmlzSW52YWxpZCgpKQogICAgICAgICAg
ICAgai0+Y2xlYXIoKTsKQEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
aW5pdEZyYW1lQnVmZmVyKHNpCiAgICAgaWYgKGZyYW1lSW5kZXggPj0gZnJhbWVDb3VudCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbZnJhbWVJbmRleF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZyYW1lSW5kZXhdOwogCiAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1l
IGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAvLyBkaXNwb3NhbCBtZXRob2Qu
CkBAIC03NTUsOSArNzU1LDkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZl
cihzaQogICAgIC8vIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNv
IHNraXAgb3ZlciB0aGVtLiAgKElmIHRoZQogICAgIC8vIGZpcnN0IGZyYW1lIHNwZWNpZmllcyB0
aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCiAgICAgLy8gRGlzcG9zZU92ZXJ3
cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4p
Ci0gICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVb
LS1mcmFtZUluZGV4XTsKLSAgICBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9k
ID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKLSAgICB3aGlsZSAoZnJhbWVJbmRleCAm
JiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJl
dmlvdXMpKSB7CisgICAgY29uc3QgYXV0byogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbLS1mcmFtZUluZGV4XTsKKyAgICBhdXRvIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNw
b3NhbE1ldGhvZCgpOworICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91
cykpIHsKICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUlu
ZGV4XTsKICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7
CiAgICAgfQpAQCAtNzY1LDcgKzc2NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJh
bWVCdWZmZXIoc2kKICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7CiAg
ICAgQVNTRVJUKHByZXZCdWZmZXItPmlzQ29tcGxldGUoKSk7CiAKLSAgICBpZiAocHJldk1ldGhv
ZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6RG9Ob3REaXNwb3NlKSB7CisgICAgaWYg
KHByZXZNZXRob2QgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6
OkRvTm90RGlzcG9zZSkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0
aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCiAgICAgICAgIGlmICghcHJldkJ1ZmZl
ci0+YmFja2luZ1N0b3JlKCkgfHwgIWJ1ZmZlci5pbml0aWFsaXplKCpwcmV2QnVmZmVyLT5iYWNr
aW5nU3RvcmUoKSkpCiAgICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKQEAgLTgw
OSw3ICs4MDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAg
aWYgKG1fZnJhbWVJc0hpZGRlbiB8fCBtX2N1cnJlbnRGcmFtZSA+PSBmcmFtZUNvdW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVttX2N1cnJlbnRGcmFtZV07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNh
Y2hlW21fY3VycmVudEZyYW1lXTsKICAgICBidWZmZXIuc2V0RGVjb2RpbmdTdGF0dXMoRGVjb2Rp
bmdTdGF0dXM6OkNvbXBsZXRlKTsKIAogICAgIHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIgPSBt
X3JlYWRlci0+aW50ZXJsYWNlQnVmZmVyKCk7CkBAIC04NDMsMTIgKzg0MywxMiBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNl
dEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHNp
emVfdCBmcmFtZUluZGV4ID0gbV9jdXJyZW50RnJhbWU7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
SW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4
XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1ZmZlci0+ZGlz
cG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJl
dmlvdXMpKQorICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8qIHByZXZCdWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1l
SW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gU2NhbGFibGVJbWFnZURl
Y29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzKSkKICAgICAgICAg
ICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4
XTsKIAogICAgICAgICAgICAgICAgIEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5iYWNr
aW5nU3RvcmUoKS0+ZnJhbWVSZWN0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVy
LT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3Jl
VG9CYWNrZ3JvdW5kKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiByZWN0LmNvbnRhaW5z
KHByZXZSZWN0KSkKKyAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJlc3Rv
cmVUb0JhY2tncm91bmQpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIHJlY3QuY29udGFp
bnMocHJldlJlY3QpKQogICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFs
c2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFtX2JsZW5kICYmICFidWZm
ZXIuaGFzQWxwaGEoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIz
MDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25z
dCBvdmVycmlkZTsKICNlbmRpZgogICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYp
IG92ZXJyaWRlOwotICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KSBvdmVycmlkZTsKKyAgICAgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJ
T046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQK
ICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2Fs
bGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIFBOR0ltYWdlUmVhZGVyIQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMzAzNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIFJlcGV0aXRpb25Db3VudCBXRUJQ
SW1hZ2VEZWNvZGVyOjpyZXBldGkKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQgPyBtX3Jl
cGV0aXRpb25Db3VudCA6IFJlcGV0aXRpb25Db3VudEluZmluaXRlOwogfQogCi1JbWFnZUZyYW1l
KiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZSogV0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTExNyw3ICsxMTcsNyBAQCBzaXplX3QgV0VCUEltYWdlRGVjb2Rl
cjo6ZmluZEZpcnN0UmVxdWlyCiAgICAgICAgIC8vIFRoaXMgZnJhbWUgY292ZXJzIHRoZSB3aG9s
ZSBhcmVhIGFuZCBpdHMgZGlzcG9zYWxNZXRob2QgaXMgUmVzdG9yZVRvQmFja2dyb3VuZCwgd2hp
Y2ggbWVhbnMKICAgICAgICAgLy8gdGhhdCB0aGUgbmV4dCBmcmFtZSB3aWxsIGJlIHJlbmRlcmVk
IG9uIHRvcCBvZiBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQsIGFuZCBjYW4gYmUgZGVjb2RlZAog
ICAgICAgICAvLyB3aXRob3V0IGRlcGVuZGVuY2llcy4gVGhpcyBjYW4gb25seSBiZSBjaGVja2Vk
IGZvciBmcmFtZXMgcHJpb3IgdG8gZnJhbWVJbmRleC4KLSAgICAgICAgaWYgKGZpcnN0SW5kZXBl
bmRlbnRGcmFtZSA8IGZyYW1lSW5kZXggJiYgbV9mcmFtZUJ1ZmZlckNhY2hlW2ZpcnN0SW5kZXBl
bmRlbnRGcmFtZV0uZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkKKyAgICAgICAgaWYgKGZpcnN0SW5kZXBlbmRlbnRGcmFt
ZSA8IGZyYW1lSW5kZXggJiYgbV9mcmFtZUJ1ZmZlckNhY2hlW2ZpcnN0SW5kZXBlbmRlbnRGcmFt
ZV0uZGlzcG9zYWxNZXRob2QoKSA9PSBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lOjpEaXNwb3Nh
bE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmaXJzdElu
ZGVwZW5kZW50RnJhbWUgKyAxOwogICAgIH0KIApAQCAtMTcwLDkgKzE3MCw5IEBAIHZvaWQgV0VC
UEltYWdlRGVjb2Rlcjo6ZGVjb2RlRnJhbWUoc2l6ZV8KICAgICBib29sIGJsZW5kID0gd2VicEZy
YW1lLmJsZW5kX21ldGhvZCA9PSBXRUJQX01VWF9CTEVORCA/IHRydWUgOiBmYWxzZTsKIAogICAg
IEFTU0VSVChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gZnJhbWVJbmRleCk7Ci0gICAgSW1h
Z2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGF1
dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBidWZmZXIu
c2V0RHVyYXRpb24oU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh3ZWJwRnJhbWUuZHVyYXRpb24p
KTsKLSAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2Qod2VicEZyYW1lLmRpc3Bvc2VfbWV0aG9k
ID09IFdFQlBfTVVYX0RJU1BPU0VfQkFDS0dST1VORCA/IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kIDogSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OkRv
Tm90RGlzcG9zZSk7CisgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKHdlYnBGcmFtZS5kaXNw
b3NlX21ldGhvZCA9PSBXRUJQX01VWF9ESVNQT1NFX0JBQ0tHUk9VTkQgPyBTY2FsYWJsZUltYWdl
RGVjb2RlckZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCA6IFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2UpOwogICAg
IEFTU0VSVCghYnVmZmVyLmlzQ29tcGxldGUoKSk7CiAKICAgICBpZiAoYnVmZmVyLmlzSW52YWxp
ZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCwgJndlYnBGcmFtZSkpIHsKQEAgLTIy
Myw3ICsyMjMsNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzCiAg
ICAgaWYgKGZyYW1lSW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRl
eF07CisgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwog
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVmZmVyLgogICAgIElu
dFJlY3QgZnJhbWVSZWN0KHdlYnBGcmFtZS0+eF9vZmZzZXQsIHdlYnBGcmFtZS0+eV9vZmZzZXQs
IHdlYnBGcmFtZS0+d2lkdGgsIHdlYnBGcmFtZS0+aGVpZ2h0KTsKQEAgLTIzNiwxNCArMjM2LDE0
IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHMKICAgICAgICAgaWYg
KCFidWZmZXIuaW5pdGlhbGl6ZShzaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgSW1hZ2VGcmFt
ZSYgcHJldkJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4IC0gMV07CisgICAg
ICAgIGNvbnN0IGF1dG8mIHByZXZCdWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRl
eCAtIDFdOwogICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci5pc0NvbXBsZXRlKCkpOwogCiAgICAg
ICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0ZSBmb3Ig
dGhpcyBmcmFtZS4KICAgICAgICAgaWYgKCFwcmV2QnVmZmVyLmJhY2tpbmdTdG9yZSgpIHx8ICFi
dWZmZXIuaW5pdGlhbGl6ZSgqcHJldkJ1ZmZlci5iYWNraW5nU3RvcmUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHByZXZCdWZmZXIuZGlzcG9zYWxNZXRob2Qo
KSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvQmFja2dyb3VuZCkgewor
ICAgICAgICBpZiAocHJldkJ1ZmZlci5kaXNwb3NhbE1ldGhvZCgpID09IFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9CYWNrZ3JvdW5kKSB7CiAgICAg
ICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3Bh
cmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1h
Z2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCiAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2
UmVjdCA9IHByZXZCdWZmZXIuYmFja2luZ1N0b3JlKCktPmZyYW1lUmVjdCgpOwpAQCAtMjU5LDcg
KzI1OSw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHMKIAogdm9p
ZCBXRUJQSW1hZ2VEZWNvZGVyOjphcHBseVBvc3RQcm9jZXNzaW5nKHNpemVfdCBmcmFtZUluZGV4
LCBXZWJQSURlY29kZXIqIGRlY29kZXIsIFdlYlBEZWNCdWZmZXImIGRlY29kZXJCdWZmZXIsIGJv
b2wgYmxlbmQpCiB7Ci0gICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZyYW1lSW5kZXhdOworICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFt
ZUluZGV4XTsKICAgICBpbnQgZGVjb2RlZFdpZHRoID0gMDsKICAgICBpbnQgZGVjb2RlZEhlaWdo
dCA9IDA7CiAgICAgaWYgKCFXZWJQSURlY0dldFJHQihkZWNvZGVyLCAmZGVjb2RlZEhlaWdodCwg
JmRlY29kZWRXaWR0aCwgMCwgMCkpCkBAIC0zNTIsNyArMzUyLDcgQEAgdm9pZCBXRUJQSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQwogICAgIC8vIEluIFdFQlAgZXZlcnkgZnJhbWUgZGVw
ZW5kcyBvbiB0aGUgcHJldmlvdXMgb25lIG9yIG5vbmUuIFRoYXQgbWVhbnMgdGhhdCBmcmFtZXMg
YWZ0ZXIgY2xlYXJCZWZvcmVGcmFtZQogICAgIC8vIHdvbid0IG5lZWQgYW55IGZyYW1lIGJlZm9y
ZSB0aGVtIHRvIHJlbmRlciwgc28gd2UgY2FuIGNsZWFyIHRoZW0gYWxsLgogICAgIGZvciAoaW50
IGkgPSBjbGVhckJlZm9yZUZyYW1lIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgSW1hZ2VG
cmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ldOworICAgICAgICBhdXRvJiBidWZm
ZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV07CiAgICAgICAgIGlmICghYnVmZmVyLmlzSW52YWxp
ZCgpKQogICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9X
RUJQSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIzMDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgid2VicCIpOyB9CiAg
ICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYsIGJvb2wpIGZpbmFsOwotICAgIEltYWdlRnJh
bWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFNjYWxh
YmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92
ZXJyaWRlOwogICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVy
cmlkZTsKICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZnJhbWVDb3VudDsgfQogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgb3Zl
cnJpZGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>