<?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>225554</bug_id>
          
          <creation_ts>2021-05-07 20:08:35 -0700</creation_ts>
          <short_desc>Factor out pixel buffer from DOM specific ImageData class</short_desc>
          <delta_ts>2021-05-08 18:30:15 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758147</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 20:08:35 -0700</bug_when>
    <thetext>Factor out pixel buffer from DOM specific ImageData class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758148</commentid>
    <comment_count>1</comment_count>
      <attachid>428075</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 20:09:40 -0700</bug_when>
    <thetext>Created attachment 428075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758188</commentid>
    <comment_count>2</comment_count>
      <attachid>428086</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 09:30:41 -0700</bug_when>
    <thetext>Created attachment 428086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758189</commentid>
    <comment_count>3</comment_count>
      <attachid>428087</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 09:38:04 -0700</bug_when>
    <thetext>Created attachment 428087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758202</commentid>
    <comment_count>4</comment_count>
      <attachid>428090</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 12:30:32 -0700</bug_when>
    <thetext>Created attachment 428090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758204</commentid>
    <comment_count>5</comment_count>
      <attachid>428090</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-08 12:46:36 -0700</bug_when>
    <thetext>Comment on attachment 428090
Patch

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

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1085
&gt; +        RefPtr&lt;ArrayBuffer&gt; arrayBuffer = imageData-&gt;data().possiblySharedBuffer();

We could either do auto/makeRefPtr, or just say RefPtr instead of RefPtr&lt;ArrayBuffer&gt;, adding deduction guides to RefPtr if needed. The future of RefPtr is now!

&gt; Source/WebCore/html/ImageData.h:56
&gt; +    ImageData(PixelBuffer&amp;&amp;);

explicit

&gt; Source/WebCore/platform/graphics/PixelBuffer.h:31
&gt; +#include &lt;JavaScriptCore/Uint8ClampedArray.h&gt;

Do we really need to include this header? Can we do a forward-declaration instead?

&gt; Source/WebCore/platform/graphics/PixelBuffer.h:39
&gt; +    ~PixelBuffer();

If the only thing this does is decrement the Uint8ClampedArray reference count, then maybe we can just use the default and not write this at all.

&gt; Source/WebCore/platform/graphics/ShadowBlur.cpp:912
&gt; +    auto&amp; blurPixelArray = layerData-&gt;data();
&gt; +    blurLayerImage(blurPixelArray.data(), blurRect.size(), blurRect.width() * 4);

Seems like we don’t need the local at all.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:482
&gt; +    auto&amp; resutPixelArray = resultImage-&gt;data();

Existing typo, &quot;resut&quot;, that you should fix.

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:250
&gt; +    auto&amp; dstPixelArray = resultImage-&gt;data();

Do we have to do the &quot;dst&quot; thing? Maybe write out the whole destination word.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:204
&gt; +    Uint8ClampedArray&amp; imageArray = m_premultipliedImageResult-&gt;data();

auto&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758225</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 16:55:08 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 428090 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428090&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1085
&gt; &gt; +        RefPtr&lt;ArrayBuffer&gt; arrayBuffer = imageData-&gt;data().possiblySharedBuffer();
&gt; 
&gt; We could either do auto/makeRefPtr, or just say RefPtr instead of
&gt; RefPtr&lt;ArrayBuffer&gt;, adding deduction guides to RefPtr if needed. The future
&gt; of RefPtr is now!

I went with auto/makeRefPtr, but I ashamed. `RefPtr arrayBuffer = foo();` looks just too weird for me :). I&apos;ll get used to it though.

&gt; 
&gt; &gt; Source/WebCore/html/ImageData.h:56
&gt; &gt; +    ImageData(PixelBuffer&amp;&amp;);
&gt; 
&gt; explicit

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PixelBuffer.h:31
&gt; &gt; +#include &lt;JavaScriptCore/Uint8ClampedArray.h&gt;
&gt; 
&gt; Do we really need to include this header? Can we do a forward-declaration
&gt; instead?

The forward declaration for these types is non-trivial to say the least. Something like:

namespace JSC {

struct Uint8ClampedAdaptor;
template&lt;typename Adaptor&gt; class GenericTypedArrayView;
typedef GenericTypedArrayView&lt;Uint8ClampedAdaptor&gt; Uint8ClampedArray;

}

but getting that building everywhere is quite a challenge. I think PixelBuffer will evolve to use ArrayBuffer directly at some point, at which point it should be a bit easier and I will attempt it then.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PixelBuffer.h:39
&gt; &gt; +    ~PixelBuffer();
&gt; 
&gt; If the only thing this does is decrement the Uint8ClampedArray reference
&gt; count, then maybe we can just use the default and not write this at all.

I wanted it out of line to avoid including all the inline header inclusion that would be required due to JSC header fun.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ShadowBlur.cpp:912
&gt; &gt; +    auto&amp; blurPixelArray = layerData-&gt;data();
&gt; &gt; +    blurLayerImage(blurPixelArray.data(), blurRect.size(), blurRect.width() * 4);
&gt; 
&gt; Seems like we don’t need the local at all.

Agreed. Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:482
&gt; &gt; +    auto&amp; resutPixelArray = resultImage-&gt;data();
&gt; 
&gt; Existing typo, &quot;resut&quot;, that you should fix.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:250
&gt; &gt; +    auto&amp; dstPixelArray = resultImage-&gt;data();
&gt; 
&gt; Do we have to do the &quot;dst&quot; thing? Maybe write out the whole destination word.

Fixed. Used `destinationPixelArray`.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:204
&gt; &gt; +    Uint8ClampedArray&amp; imageArray = m_premultipliedImageResult-&gt;data();
&gt; 
&gt; auto&amp;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758228</commentid>
    <comment_count>7</comment_count>
      <attachid>428098</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 16:58:09 -0700</bug_when>
    <thetext>Created attachment 428098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758229</commentid>
    <comment_count>8</comment_count>
      <attachid>428099</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 17:02:07 -0700</bug_when>
    <thetext>Created attachment 428099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758230</commentid>
    <comment_count>9</comment_count>
      <attachid>428100</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-08 17:06:20 -0700</bug_when>
    <thetext>Created attachment 428100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758241</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-08 17:43:00 -0700</bug_when>
    <thetext>Patch 428098 does not build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758257</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-08 18:29:45 -0700</bug_when>
    <thetext>Committed r277237 (237506@main): &lt;https://commits.webkit.org/237506@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428100.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758258</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-08 18:30:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/77702646&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428075</attachid>
            <date>2021-05-07 20:09:40 -0700</date>
            <delta_ts>2021-05-08 09:30:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210507200939.patch</filename>
            <type>text/plain</type>
            <size>56237</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTA1LTA3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3Igb3V0IHBpeGVsIGJ1ZmZl
ciBmcm9tIERPTSBzcGVjaWZpYyBJbWFnZURhdGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTU1NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAgICAgKiBIZWFkZXJzLmNt
YWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVTZXJpYWxpemVyOjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKToKKyAgICAg
ICAgKiBodG1sL0ltYWdlRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OkltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURhdGE6OmRlZXBDbG9uZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBodG1sL0ltYWdlRGF0YS5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEYXRhOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0
YTo6d2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpoZWlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpkYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGF0YTo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURhdGE6OmZvcm1hdCBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVFbXB0
eUltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFy
cmF5Rm9ySW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFj
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRv
THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBpeGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVlcENsb25lIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBpeGVsQnVmZmVyOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBpeGVsQnVmZmVyOjpmb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZm
ZXI6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmRhdGEgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVz
dWx0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRU
b0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1
ZmZlclRvRGVzdGluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVy
U2hhcGUpOgorCiAyMDIxLTA1LTA3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2Nzcy1mbGV4Ym94XSBGbGV4IGl0ZW0gY29uc3RydWN0aW9uIG1heSBhZmZlY3Qg
c2libGluZyBmbGV4IGl0ZW0gaGVpZ2h0IGNvbXB1dGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTEyODgsNiArMTI4OCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGl4ZWxGb3JtYXQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxh
eS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTIwMTIsNiArMjAxMiw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDUsNiArNDE0NSw3IEBACiAJCUJDRTY1
OUE5MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U2NTlBODBFQTkyN0I5MDA3RTQ1MzMgLyogVGhl
bWVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNjU5RTUwRUE5MkZCMjAwN0U0NTMz
IC8qIFRoZW1lTWFjLmggKi87IH07CiAJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5n
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTY1
QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0U2OTFFNTI2NDYzN0ZDMDBFQkRDM0EgLyogUGl4
ZWxCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhlbEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRTc4OTE2MTEyMEQ2MDgwMDYw
RUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFNzg5MTUxMTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9y
LmggKi87IH07CiAJCUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U3ODk4NTExMjBFN0E2
MDA2MEVDRTUgLyogQmlkaVJ1bi5oICovOyB9OwogCQlCQ0U5M0Y0NTE1MTdDNTY3MDA4Q0NGNzQg
LyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ0MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldC5oICovOyB9OwpAQCAtMTQxNTQsNiArMTQxNTUsOCBAQAogCQlC
QzQ2QzFGOTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NQYWdlUnVsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NQYWdlUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzQ2QzIwNDBDMEREQ0ExMDAyMENGQzMgLyogSlNDU1NTdHlsZVJ1bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ1NTU3R5bGVSdWxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0NkMyMDUwQzBERENBMTAwMjBDRkMz
IC8qIEpTQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NTU1N0eWxlUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzQ4MzlCQTI2
NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGl4ZWxCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM0ODM5QkIyNjQ2MTgxQTAwQTI4
QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpeGVsQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0OTE4QzAwQkZFQTA1MDAwOUQ2MzE2
IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNIVE1MRnJhbWVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkM0OTE4QzEwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRnJhbWVFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDkxOEMyMEJGRUEwNTAwMDlENjMxNiAvKiBK
U0hUTUxJRnJhbWVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI3MDI1LDYgKzI3MDI4LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyog
UGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICov
LAorCQkJCUJDNDgzOUJCMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhlbEJ1ZmZlci5jcHAgKi8sCisJ
CQkJQkM0ODM5QkEyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmggKi8sCiAJCQkJQkNB
NTU5MTIyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0LmggKi8sCiAJCQkJNzI2RDU2RTEy
NTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQk3MkJBQzNBNjIzRTE3
MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLApAQCAtMzQ0MzMsNiArMzQ0
MzgsNyBAQAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJl
V2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzU4NTk3QzIzQTFGQ0YzMDBDNzQ1NzIgLyog
UGluLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMEZGMkE1RTExRjhDNDVBMDA3RTc0RTAgLyogUGlu
Z0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNjkxRTUyNjQ2MzdGQzAwRUJEQzNBIC8q
IFBpeGVsQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDdEMzM0NDFDN0ExMjNGMDAwNDEy
OTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBNTU5
MTQyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
REVGQTIyODFFNzY2OUU4MDAwQUU5OUMgLyogUGxhdGZvcm1BdWRpb0RhdGEuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvKiBkYXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7
CisgICAgYXV0byYgZGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgIGF1dG8qIHdyYXBwZXIg
PSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltYWdlRGF0
YSkpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2bSwgZGF0YU5hbWUsIHRvSlMobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBkYXRhKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIC8vIEZJWE1F
OiBBZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFuZCBzd2l0Y2ggdG8gcmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjU5NQotICAgIHZtLmhlYXAuZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5
KGRhdGEtPmxlbmd0aCgpKTsKKyAgICB2bS5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9y
eShkYXRhLmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Miw3ICsxMDgyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFnZURhdGEtPmRhdGEoKS0+cG9zc2li
bHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZl
ciA9IGltYWdlRGF0YS0+ZGF0YSgpLnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAgICAgICAgIGlm
ICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIyNiw4ICsx
MjI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3cml0ZShJbWFnZURhdGFUYWcpOwog
ICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPndpZHRoKCkpOwogICAgICAgICAgICAgICAgIHdy
aXRlKGRhdGEtPmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCkt
Pmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCktPmRhdGEoKSwg
ZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0
YSgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCkuZGF0YSgp
LCBkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF1dG8qIHJlZ0V4cCA9IGpzRHluYW1pY0Nh
c3Q8UmVnRXhwT2JqZWN0Kj4odm0sIG9iaikpIHsKQEAgLTMzOTAsOSArMzM5MCw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+ZGF0
YSgpLT5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIG1lbWNweShyZXN1
bHQtPmRhdGEoKS5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLT56ZXJvRmlsbCgpOworICAgICAgICAgICAgICAg
IHJlc3VsdC0+ZGF0YSgpLnplcm9GaWxsKCk7CiAgICAgICAgICAgICBtX3B0ciArPSBsZW5ndGg7
CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShyZXN1bHQuZ2V0KCkpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkocmV2aXNpb24gMjc3MjA5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4Miw3ICs3ODIsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4
CiAgICAgLy8gICAgICBpbnRlcm5hbCBzbG90LgogICAgIC8vIDYuMi4gSWYgSXNEZXRhY2hlZEJ1
ZmZlcihidWZmZXIpIGlzIHRydWUsIHRoZW4gcmV0dXJuIHAgcmVqZWN0ZWQgd2l0aCBhbgogICAg
IC8vICAgICAgIkludmFsaWRTdGF0ZUVycm9yIiBET01FeGNlcHRpb24uCi0gICAgaWYgKGltYWdl
RGF0YS0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAgICBpZiAoaW1hZ2VEYXRhLT5kYXRhKCku
aXNEZXRhY2hlZCgpKSB7CiAgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9y
LCAiSW1hZ2VEYXRhJ3Mgdmlld2VkIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmNwcAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFn
ZURhdGE6OmMKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJhbmdlRXJyb3IsICJPdXQgb2Yg
bWVtb3J5Il9zIH07CiAgICAgfQogICAgIGJ5dGVBcnJheS0+emVyb0ZpbGwoKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6ZSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxs
KCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc2l6ZSwgYnl0ZUFycmF5LnJlbGVh
c2VOb25OdWxsKCkgfSkpOwogfQogCiBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0
ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtNjgsNyArNjgsNyBAQCBSZWZQdHI8SW1hZ2VEYXRh
PiBJbWFnZURhdGE6OmNyZWF0ZShjb25zCiAgICAgYXV0byBieXRlQXJyYXkgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChkYXRhU2l6ZS51bnNhZmVHZXQoKSk7CiAg
ICAgaWYgKCFieXRlQXJyYXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEltYWdlRGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YSh7IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzaXplLCBieXRlQXJyYXkucmVsZWFzZU5v
bk51bGwoKSB9KSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXkpCkBA
IC03Niw3ICs3Niw4IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnMK
ICAgICBhdXRvIGRhdGFTaXplID0gSW1hZ2VEYXRhOjpkYXRhU2l6ZShzaXplKTsKICAgICBpZiAo
ZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGRhdGFTaXplLnVuc2FmZUdldCgpID4gYnl0ZUFy
cmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSkpOworCisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAK
IEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmNyZWF0ZShSZWY8VWludDhD
bGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5LCB1bnNpZ25lZCBzdywgT3B0aW9uYWw8dW5zaWduZWQ+
IHNoKQpAQCAtOTksMjIgKzEwMCwyMiBAQCBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4gSW1h
Z2VEYXRhOjpjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1JbWFn
ZURhdGE6OkltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8VWludDhDbGFtcGVkQXJy
YXk+JiYgYnl0ZUFycmF5KQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX2RhdGEoV1RGTW92
ZShieXRlQXJyYXkpKQorSW1hZ2VEYXRhOjpJbWFnZURhdGEoUGl4ZWxCdWZmZXImJiBwaXhlbEJ1
ZmZlcikKKyAgICA6IG1fcGl4ZWxCdWZmZXIoV1RGTW92ZShwaXhlbEJ1ZmZlcikpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigoc2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKIH0KIAorSW1hZ2VEYXRhOjp+SW1h
Z2VEYXRhKCkgPSBkZWZhdWx0OworCiBSZWY8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmRlZXBDbG9u
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKG1fc2l6ZSwg
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5sZW5ndGgo
KSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEobV9waXhlbEJ1ZmZlci5k
ZWVwQ2xvbmUoKSkpOwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSkKIHsKICAgICAvLyBQcmludCBvdXQgdGhlIGFk
ZHJlc3Mgb2YgdGhlIHBpeGVsIGRhdGEgYXJyYXkKLSAgICByZXR1cm4gdHMgPDwgaW1hZ2VEYXRh
LmRhdGEoKTsKKyAgICByZXR1cm4gdHMgPDwgJmltYWdlRGF0YS5kYXRhKCk7CiB9CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5ICsyOSw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJQ
aXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDIxICszOSwyNSBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNy
ZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJ
bWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+
IGNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1
bnNpZ25lZD4gc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZURhdGEoKTsKIAotICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgaW50IGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3BpeGVsQnVmZmVyLnNpemUoKTsgfQorICAgIGludCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuc2l6ZSgpLndpZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7IH0KIAotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnB0cigpOyB9
CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVm
ZmVyLmRhdGEoKTsgfQogCiAgICAgUmVmPEltYWdlRGF0YT4gZGVlcENsb25lKCkgY29uc3Q7CiAK
KyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CisgICAgUGl4ZWxGb3JtYXQgZm9ybWF0KCkgY29u
c3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsgfQorCiBwcml2YXRlOgotICAgIElt
YWdlRGF0YShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBJ
bWFnZURhdGEoUGl4ZWxCdWZmZXImJik7CisKICAgICBzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplKGNvbnN0IEludFNpemUmKTsKIAotICAgIEludFNpemUg
bV9zaXplOwotICAgIFJlZjxVaW50OENsYW1wZWRBcnJheT4gbV9kYXRhOworICAgIFBpeGVsQnVm
ZmVyIG1fcGl4ZWxCdWZmZXI7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSW1hZ2VEYXRhJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVF
bXB0eUltYWcKIHsKICAgICBhdXRvIGRhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzaXplKTsKICAg
ICBpZiAoZGF0YSkKLSAgICAgICAgZGF0YS0+ZGF0YSgpLT56ZXJvRmlsbCgpOworICAgICAgICBk
YXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKICAgICByZXR1cm4gZGF0YTsKIH0KIApAQCAtMjIyMCw3
ICsyMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWRhdGEuZGF0YSgpIHx8
IGRhdGEuZGF0YSgpLT5pc0RldGFjaGVkKCkpCisgICAgaWYgKGRhdGEuZGF0YSgpLmlzRGV0YWNo
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRpcnR5V2lkdGggPCAwKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NDksNyArNDc0OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEIKICAgICAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlvbklELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIGZhbHNlLCBi
aXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0bWFwLT5mb3JjaWJseVByZW11bHRpcGx5QWxw
aGEoKSwgc291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VIZWlnaHQpOwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SW1hZ2VEYXRhPiYgcGl4ZWxz
KSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAgICAgIGlmIChwaXhlbHMtPmRhdGEoKS0+aXNE
ZXRhY2hlZCgpKSB7CisgICAgICAgIGlmIChwaXhlbHMtPmRhdGEoKS5pc0RldGFjaGVkKCkpIHsK
ICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJUaGUgc291cmNlIGRhdGEgaGFzIGJlZW4gZGV0YWNoZWQu
Iik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CkBAIC00Nzc4LDcgKzQ3Nzgs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAgICAgICAgIC8v
IE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFu
ZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRp
b24gaXMgcmVxdWlyZWQuCiAgICAgICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiB0
eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYmICFzZWxlY3RpbmdTdWJS
ZWN0YW5nbGUgJiYgZGVwdGggPT0gMSkgewogICAgICAgICAgICAgbmVlZENvbnZlcnNpb24gPSBm
YWxzZTsKLSAgICAgICAgICAgIGJ5dGVMZW5ndGggPSBwaXhlbHMtPmRhdGEoKS0+Ynl0ZUxlbmd0
aCgpOworICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHBpeGVscy0+ZGF0YSgpLmJ5dGVMZW5ndGgo
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWKSB7CiAgICAgICAgICAgICAgICAg
Ly8gVGhlIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgdHlwZSBwYWNrL3VucGFjayBpc24n
dCBpbXBsZW1lbnRlZC4KQEAgLTQ3OTQsMjMgKzQ3OTQsMjMgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFn
ZUZ1bmN0aW9uSUQ6OlRleEltYWdlMkQpIHsKICAgICAgICAgICAgIHRleEltYWdlMkRCYXNlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgIGFkanVzdGVkU291
cmNlSW1hZ2VSZWN0LndpZHRoKCksIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LmhlaWdodCgpLCAw
LAotICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkpOworICAgICAgICAgICAg
ICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25J
RCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1YkltYWdlMkQpIHsKICAgICAgICAgICAgIHRl
eFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAg
ICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGJ5dGVMZW5ndGgsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEo
KS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgYnl0ZUxl
bmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNFKEFOR0xFKQogICAgICAgICAgICAgLy8gM0Qg
ZnVuY3Rpb25zLgogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSUQgPT0gVGV4SW1hZ2VGdW5jdGlv
bklEOjpUZXhJbWFnZTNEKSB7CiAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTNE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBhZGp1
c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0aCgpLCBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5oZWln
aHQoKSwgZGVwdGgsIDAsCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdD
R0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0
YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFr
ZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS5k
YXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGZ1bmN0aW9uSUQgPT0gVGV4SW1hZ2VGdW5jdGlvbklEOjpUZXhTdWJJbWFnZTNE
KTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgYWRqdXN0
ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0
KCksIGRlcHRoLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3Bh
bihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwg
Ynl0ZUxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dM
U3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCkuZGF0YSgp
LCBieXRlTGVuZ3RoKSk7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAgICAgICAgICAgLy8gV2Vi
R0wgMi4wIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIEFOR0xFIGJhY2tlbmQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkocmV2aXNpb24g
Mjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NTksOCArMTQ1OSw4IEBAIFJlZjxKU09OOjpBcnJheU9mPEpT
T046OlZhbHVlPj4gSW5zcGVjdG8KIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5z
cGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9ySW1hZ2VEYXRhKGNvbnN0IEltYWdlRGF0YSYgaW1h
Z2VEYXRhKQogewogICAgIGF1dG8gZGF0YSA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbWFnZURhdGEuZGF0YSgpLT5sZW5ndGgoKTsg
KytpKQotICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0YS5kYXRhKCktPml0ZW0oaSkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1hZ2VEYXRhLmRhdGEoKS5sZW5ndGgoKTsgKytp
KQorICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0YS5kYXRhKCkuaXRlbShpKSk7CiAKICAg
ICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogICAg
IGFycmF5LT5hZGRJdGVtKFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzksNyArNzc5LDcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0
LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhh
T3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKKyAgICBpZiAoIXBhY2tQaXhlbHMo
aW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDog
QWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24g
Mjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzczLDE4IEBAIHZvaWQgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgo
KTsKKyAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbE9mZnNldCArIDMpOwogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCArIDIpOworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxP
ZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZz
ZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsT2Zm
c2V0ICsgMik7CiAKICAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcx
NTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVs
QXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBzcmNQaXhlbEFycmF5
LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAogICAgIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2lj
YWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwpAQCAtMjQxLDEwICsyNDEsMTAgQEAgUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpnZQogICAgICAgICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVkLnko
KSk7CiAKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgpKQot
ICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwoKTsKKyAgICAgICAgaW1hZ2VEYXRh
LT5kYXRhKCkuemVyb0ZpbGwoKTsKIAogICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQg
KiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dFJlY3QueCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgp
LmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAq
IDQ7CiAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CiAgICAg
dWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgc3Jj
UmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0
OwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWwKICAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICog
NDsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXplKCku
d2lkdGgoKTsKLSAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgp
ICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54
KCkgKiA0OworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSAr
IHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgp
ICogNDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKICAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BpeGVs
QnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4mJiBkYXRhKQorICAgIDogbV9jb2xvclNwYWNlIHsgY29sb3JTcGFjZSB9CisgICAg
LCBtX2Zvcm1hdCB7IGZvcm1hdCB9CisgICAgLCBtX3NpemUgeyBzaXplIH0KKyAgICAsIG1fZGF0
YSB7IFdURk1vdmUoZGF0YSkgfQoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oKG1fc2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxl
bmd0aCgpKTsKK30KKworUGl4ZWxCdWZmZXI6On5QaXhlbEJ1ZmZlcigpID0gZGVmYXVsdDsKKwor
UGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9uZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHsgbV9jb2xvclNwYWNlLCBtX2Zvcm1hdCwgbV9zaXplLCBVaW50OENsYW1wZWRBcnJheTo6Y3Jl
YXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxlbmd0aCgpKSB9OworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2lu
Y2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQaXhlbEJ1ZmZlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOworcHVibGljOgorICAgIFBp
eGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNp
emUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7CisgICAgflBpeGVsQnVmZmVyKCk7
CisKKyAgICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CisgICAgUGl4ZWxC
dWZmZXImIG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CisKKyAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsg
fQorICAgIFBpeGVsRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9Cisg
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEpT
Qzo6VWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7
IH0KKworICAgIFBpeGVsQnVmZmVyIGRlZXBDbG9uZSgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisgICAgUGl4ZWxGb3JtYXQgbV9m
b3JtYXQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgUmVmPEpTQzo6VWludDhDbGFtcGVkQXJy
YXk+IG1fZGF0YTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTA4LDggKzkwOCw4IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUIK
ICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogYmx1clBp
eGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEoKTsKLSAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4
ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsK
KyAgICBhdXRvJiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgpOworICAgIGJsdXJM
YXllckltYWdlKGJsdXJQaXhlbEFycmF5LmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVj
dC53aWR0aCgpICogNCk7CiAgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCShyZXZpc2lvbiAyNzcyMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTQgKzkwLDE0IEBAIFJlZlB0cjxJ
bWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VN
b2RlIHBhY2tTa2lwUGl4ZWxzKEdMX1BBQ0tfU0tJUF9QSVhFTFMsIDAsIG1faXNGb3JXZWJHTDIp
OwogICAgIFNjb3BlZEJ1ZmZlckJpbmRpbmcgc2NvcGVkUGl4ZWxQYWNrQnVmZmVyUmVzZXQoR0xf
UElYRUxfUEFDS19CVUZGRVIsIDAsIG1faXNGb3JXZWJHTDIpOwogCi0gICAgZ2w6OlJlYWRuUGl4
ZWxzUm9idXN0QU5HTEUoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdo
dCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxl
bmd0aCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0
YSgpKTsKKyAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBpbWFnZURhdGEtPndp
ZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlt
YWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwg
aW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKICAgICAvLyBGSVhNRTogUmVuZGVyaW5nIHRvIEdM
X1JHQiB0ZXh0dXJlcyB3aXRoIGEgSU9TdXJmYWNlIGJvdW5kIHRvIHRoZSB0ZXh0dXJlIGltYWdl
IGxlYXZlcwogICAgIC8vIHRoZSBhbHBoYSBpbiB0aGUgSU9TdXJmYWNlIGluIGluY29ycmVjdCBz
dGF0ZS4gQWxzbyBBTkdMRSBnbDo6UmVhZFBpeGVscyB3aWxsIGluIHNvbWUKICAgICAvLyBjYXNl
cyBleHBvc2UgdGhlIG5vbi0yNTUgdmFsdWVzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU4MDQKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLmFscGhhKQotICAgICAg
ICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0
YS0+aGVpZ2h0KCksIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkpOworICAgICAgICB3aXBlQWxw
aGFDaGFubmVsRnJvbVBpeGVscyhpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0
KCksIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gaW1hZ2VE
YXRhOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0R0xDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGFpbnRUb0NhbgogICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VEYXRhLT5z
aXplKCk7CiAgICAgaW50IHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OwogICAgICAg
ICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKLSAgICB1
aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgdWlu
dDhfdCogaW1hZ2VQaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CiAgICAgICAgIHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goaW1hZ2VQaXhlbHMsIGRhdGFTaXplKTsKICAgICBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmaW1hZ2VEYXRhLmxlYWtSZWYoKSwgaW1hZ2VQaXhlbHMs
IGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcg
KzE4NCw2IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAgICBB
U1NFUlQodXRpKTsKIAogICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OwogCiAgICAgaWYgKENGRXF1YWwo
dXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9m
IGJsYWNrLgpAQCAtMTkyLDcgKzE5MSw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVm
ZmVyQ0dCYWNrZW4KICAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFn
ZURhdGEtPmRhdGEoKSk7CisgICAgICAgIGF1dG8gcHJvdGVjdGVkUGl4ZWxBcnJheSA9IG1ha2VS
ZWYoaW1hZ2VEYXRhLT5kYXRhKCkpOwogICAgICAgICBzaXplX3QgZGF0YVNpemUgPSBwcm90ZWN0
ZWRQaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgIEludFNpemUgcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYsNyArMTI2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAog
ICAgIEFTU0VSVCh1dGkpOwogCiAgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0g
a0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRh
KCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS5kYXRh
KCk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwogCiAgICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJ
KHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3ICsyOTAsNyBA
QCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgaWYgKCFpbWFn
ZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURh
dGEtPmRhdGEoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAg
ICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOwogCiAg
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKQEAg
LTI5OSwxNiArMjk5LDE2IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXIKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4oKnBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURTogCi0gICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPigqcGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25z
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
OgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KCpwaXhl
bEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklY
X1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4oKnBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURp
bWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKICAg
ICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDExIEBAIHZvaWQgRkVDb21wb25l
bnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVMKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAKICAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VS
ZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICgh
aW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBp
bWFnZVJlc3VsdC0+ZGF0YSgpOworCiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7CiAgICAgTG9v
a3VwVGFibGUgZ3JlZW5UYWJsZTsKICAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7CkBAIC0xMjAs
OSArMTIxLDkgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5UwogICAg
IGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxw
aGFUYWJsZSk7CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5n
dGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS0+ZGF0YSgpOworICAgIGluLT5j
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5
Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKICAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdID0gcmVk
VGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMV0g
PSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw5ICsyMzAsMTAg
QEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogCiAgICAgaWYgKG1f
dHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7CiAgICAgICAgIGF1dG8q
IHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgICAg
IGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkg
OiBudWxscHRyOwotICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCisgICAgICAgIGlmICghcmVz
dWx0SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBhdXRvJiBk
c3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKIAogICAgICAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CkBAIC0yNDAsOSArMjQxLDkgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QkRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpkc3RQ
aXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Cisg
ICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0
QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogCi0gICAgICAgIHBsYXRmb3Jt
QXJpdGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFycmF5LCAqZHN0UGl4ZWxBcnJheSwgbV9rMSwg
bV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpz
cmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCShy
ZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsMTAgKzM3Niwx
MiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0CiAgICAgICAgIHJl
c3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBlbHNlCiAg
ICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorCisgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5kYXRhKCk7CisKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKICAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJyYXk7CkBAIC0zOTUsNyArMzk3
LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdAogCiAgICAgUGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNyY1BpeGVsQXJyYXksCi0gICAg
ICAgICpkc3RQaXhlbEFycmF5LAorICAgICAgICBkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWlu
dFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2Jp
YXMgKiAyNTUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkocmV2aXNpb24gMjc3
MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDExIEBAIHZvaWQg
RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICBBU1NFUlQobV95Q2hhbm5l
bFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlm
ICghZHN0UGl4ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47
CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAg
IEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0byBpbnB1dEltYWdlID0gaW4t
PnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIApAQCAtMTQwLDcgKzE0
MSw3IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICAgICAg
ICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNw
bGFjZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNj
YWxlZE9mZnNldFgpOwogICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50
PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlz
cGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAKLSAgICAgICAgICAgIHVuc2ln
bmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFy
cmF5LT5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCogZHN0UGl4ZWxQ
dHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBk
c3RJbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUu
d2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewogICAg
ICAgICAgICAgICAgICpkc3RQaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw4ICsxMDUsOCBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBjb250ZXh0U2hhZG93
LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCks
IDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBhdXRvJiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShz
cmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNp
emUoKS53aWR0aCgpKTsKICAgICAKICAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNoYWRvd0FyZWEp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyNCwxNCArNTI0LDE1IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OnBsYXRmb3JtQXBwbHlTb2Z0d2EKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdElt
YWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghZHN0UGl4ZWxBcnJheSkKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBo
YUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5j
b3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTQ0
LDcgKzU0NSw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2EKICAg
ICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1BcHBs
eSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJu
ZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoZHN0UGl4ZWxB
cnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdo
dCgpLCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRz
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc2LDIxICs0NzYsMjIgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAog
ICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+
ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3V0UGl4ZWxBcnJheSkKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiByZXN1dFBpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKIAog
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1h
Z2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKnJlc3V0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KHJlc3V0UGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgLy8g
RklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlz
c3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNl
IGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UK
ICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5v
dCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJp
eCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKICAgICBJbnRTaXplIGFic29s
dXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0
aW5nKCpyZXN1dFBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRl
UGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICBkcmF3TGlnaHRpbmcocmVzdXRQaXhlbEFycmF5LCBh
YnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHJldmlz
aW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDE2ICsyNDQsMTcgQEAgdm9p
ZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhl
bEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZSht
X3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSgq
ZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMu
aGVpZ2h0KCkpKQorICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkc3RQaXhlbEFycmF5
LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CkBA
IC0yNjUsMTIgKzI2NiwxMiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlCiAgICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgp
IC0gMSwgcmFkaXVzLndpZHRoKCkpOwogICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0
RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwogCi0gICAgaWYgKHBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwg
cmFkaXVzWCwgcmFkaXVzWSkpCisgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRzdFBp
eGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5n
RGF0YS5kc3RQaXhlbEFycmF5ID0gZHN0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSA9ICZkc3RQaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNl
aWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAg
ICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgp
ICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2Vp
bGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDE1ICszOTcs
MTYgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbAogdm9pZCBGRVR1
cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgYXV0byogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIHBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlm
ICghcGl4ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAK
KyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIEludFNp
emUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgcmVzdWx0U2l6
ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChyZXN1bHRTaXplLmlz
RW1wdHkoKSkgewotICAgICAgICBwaXhlbEFycmF5LT56ZXJvRmlsbCgpOworICAgICAgICBwaXhl
bEFycmF5Lnplcm9GaWxsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ0MCw3ICs0
NDEsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0
ZXIoaSk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSBwaXhlbEFycmF5OworICAgICAgICAgICAgICAgIHBh
cmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBh
aW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRj
aERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFy
dFk7CkBAIC00NTYsNyArNDU3LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZQogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2Rl
IGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBp
cyB0b28gc21hbGwuCi0gICAgZmlsbFJlZ2lvbigqcGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdpb24ocGl4ZWxBcnJheSwgcGFpbnRp
bmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAxLDkgKzIwMSw5IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGkK
ICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0
YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7Cisg
ICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgp
OworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKIAogICAg
IC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVs
cwogICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CkBAIC00NjQsNyArNDY0LDcg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZgogICAgIGF1dG8gY29u
dmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3Bh
Y2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEp
CiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcygqY29udmVydGVkSW1hZ2VEYXRh
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoY29u
dmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CiB9CiAKIHZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQpAQCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQg
RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXQKICAgICBhdXRvIGNvbnZlcnRlZElt
YWdlRGF0YSA9IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgaW1hZ2VE
YXRhLCBvdXRwdXRGb3JtYXQpOwogICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZElt
YWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkKQEAgLTUwMCwxNCArNTAwLDE0IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWwKICAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7
CisgICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5w
dXRTaXplKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAgICAgICBjb3B5Q29udmVydGVkSW1h
Z2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IHJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBj
b3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwg
T3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQpAQCAtNTMzLDcgKzUz
Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3UKICAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRT
aXplKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEo
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlp
bmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTU0MSw3ICs1NDEsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
CiAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
LCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBjb3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwg
ZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIq
IEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDEsMTEgKzIwMSwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVS
YXN0CiAgICAgCiAgICAgLy8gV2UgY291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VEYXRh
IGNvdWxkIGJlIG51bGxwdHIuIEEgY2FzZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2Us
IGltYWdlRGF0YTo6Y3JlYXRlCiAgICAgLy8gY2FuIHJldHVybiBhIG51bGxwdHIgYmVjYXVzZSBk
YXRhIHNpemUgaGFzIG92ZXJmbG93ZWQuIFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Ci0g
ICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0YSgpKQorICAgIGlmICghaW1hZ2VE
YXRhKQogICAgICAgICByZXR1cm4gY3JlYXRlU2hhcGUoKTsKIAotICAgIGF1dG8qIHBpeGVsQXJy
YXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlz
IGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEp
ICogMjU1LjBmKSk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+
IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgICAgIGZvciAoaW50IHkgPSBtaW5CdWZmZXJZOyB5IDwg
bWF4QnVmZmVyWTsgKyt5KSB7CiAgICAgICAgICAgICBpbnQgc3RhcnRYID0gLTE7CiAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gsIHBpeGVsQXJy
YXlPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBwaXhlbEFy
cmF5LT5pdGVtKHBpeGVsQXJyYXlPZmZzZXQpOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxw
aGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxBcnJheU9mZnNldCk7CiAgICAgICAgICAgICAgICAg
Ym9vbCBhbHBoYUFib3ZlVGhyZXNob2xkID0gYWxwaGEgPiBhbHBoYVBpeGVsVGhyZXNob2xkOwog
ICAgICAgICAgICAgICAgIGlmIChzdGFydFggPT0gLTEgJiYgYWxwaGFBYm92ZVRocmVzaG9sZCkg
ewogICAgICAgICAgICAgICAgICAgICBzdGFydFggPSB4Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428086</attachid>
            <date>2021-05-08 09:30:41 -0700</date>
            <delta_ts>2021-05-08 09:41:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210508093040.patch</filename>
            <type>text/plain</type>
            <size>60882</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wNS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZm
ZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJlIHRvIGZpeCBsYXllcmluZyB2aW9s
YXRpbmcgdXNlIG9mIERPTSBsZXZlbCBJbWFnZURhdGEgYmVpbmcKKyAgICAgICAgdXNlZCBieSBw
bGF0Zm9ybSBjb2RlIGJ5IGZhY3RvcmluZyBvdXQgdGhlIHBpeGVsIHN0b3JhZ2UgaW50byBhIG5l
dworICAgICAgICBQaXhlbEJ1ZmZlciBjbGFzcy4gU2luY2UgaXQgd2lsbCBiZSBhIGxpdHRsZSBt
b3JlIGdlbmVyYWwgdGhhdCAKKyAgICAgICAgSW1hZ2VEYXRhIGlzIG5vdyAodGhvdWdoIEltYWdl
RGF0YSB3aWxsIG5lZWQgdG8gZ2FpbiB0aGVzZSBzb29uKQorICAgICAgICBQaXhlbEJ1ZmZlciBh
bHNvIGNhcHR1cmVzIHRoZSBwaXhlbCBmb3JtYXQgYW5kIGNvbG9yIHNwYWNlIHRoZSBwaXhlbAor
ICAgICAgICBkYXRhIHJlcHJlc2VudHMuCisKKyAgICAgICAgV2hpbGUgaGVyZSwgdXBkYXRlIElt
YWdlRGF0YTo6ZGF0YSgpIHRvIHJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbgorICAgICAg
ICBhIHBvaW50ZXIgdG8gaW5kaWNhdGUgaXQgaXMgbmV2ZXIgbnVsbCBhbmQgdXBkYXRlIGFsbCB0
aGUgY2FsbGVycy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJ
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRl
cm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWlu
YWwpOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6
ZGVlcENsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAqIGh0bWwvSW1hZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpj
b2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Zm9ybWF0IGNv
bnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5SW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhl
bHBlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
eGVsQnVmZmVyOjpkZWVwQ2xvbmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmZvcm1hdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9z
aXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rl
c3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjEtMDUtMDcg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbY3NzLWZsZXhib3hd
IEZsZXggaXRlbSBjb25zdHJ1Y3Rpb24gbWF5IGFmZmVjdCBzaWJsaW5nIGZsZXggaXRlbSBoZWln
aHQgY29tcHV0YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjc3MjA5KQor
KysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTI4OCw2
ICsxMjg4LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEZvcm1hdC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzcyMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjAxMiw2
ICsyMDEyLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDE0NSw2ICs0MTQ1LDcgQEAKIAkJQkNFNjU5QTkwRUE5MjdCOTAwN0U0NTMzIC8q
IFRoZW1lVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRTY1OUE4MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFNjU5RTYwRUE5MkZCMjAw
N0U0NTMzIC8qIFRoZW1lTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0U2NTlFNTBFQTkyRkIyMDA3RTQ1MzMgLyogVGhlbWVNYWMuaCAqLzsgfTsK
IAkJQkNFNjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNjVCRTkwRUFDREYxNjAwN0U0NTMzIC8q
IExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUJDRTY5MUU1MjY0NjM3RkMwMEVCREMzQSAvKiBQaXhlbEJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0ODM5QkEyNjQ2MTgxQTAwQTI4
QjYyIC8qIFBpeGVsQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFNzg5MTYxMTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U3ODkx
NTExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCAqLzsgfTsKIAkJQkNFNzg5ODYx
MTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTc4OTg1MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmgg
Ki87IH07CiAJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRh
aW5lclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0Lmgg
Ki87IH07CkBAIC0xNDE1NCw2ICsxNDE1NSw4IEBACiAJCUJDNDZDMUY5MEMwRERDOEYwMDIwQ0ZD
MyAvKiBKU0NTU1BhZ2VSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NTU1BhZ2VSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDZDMjA0MEMw
RERDQTEwMDIwQ0ZDMyAvKiBKU0NTU1N0eWxlUnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZVJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzQ2QzIwNTBDMEREQ0ExMDAyMENGQzMgLyogSlNDU1NTdHlsZVJ1bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTU3R5bGVSdWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhl
bEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzQ4MzlCQjI2NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGl4ZWxCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzQ5MThDMDBCRkVBMDUwMDA5RDYzMTYgLyogSlNIVE1MRnJhbWVFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGcmFtZUVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ5MThDMTBCRkVBMDUw
MDA5RDYzMTYgLyogSlNIVE1MRnJhbWVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0hUTUxGcmFtZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkM0OTE4QzIwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTElGcmFtZUVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTElGcmFtZUVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwMjUsNiArMjcwMjgsOCBA
QAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJ
CQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2
RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJQkM0ODM5QkIyNjQ2MTgx
QTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLywKKwkJCQlCQzQ4MzlCQTI2NDYxODFBMDBB
MjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAqLywKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMg
LyogUGl4ZWxGb3JtYXQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxh
dGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCkBAIC0zNDQzMyw2ICszNDQzOCw3IEBACiAJCQkJMUQyRjhFMDYy
MzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3NTg1OTdDMjNBMUZDRjMwMEM3NDU3MiAvKiBQaW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQ0U2OTFFNTI2NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNEN0QzMzQ0MUM3QTEyM0YwMDA0MTI5MyAvKiBQaXhlbEJ1ZmZlckNvbmZv
cm1lckNWLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E1NTkxNDI2M0RCRDc5MDA3RjE5QjMgLyog
UGl4ZWxGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERUZBMjI4MUU3NjY5RTgwMDBBRTk5
QyAvKiBQbGF0Zm9ybUF1ZGlvRGF0YS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8SW1hZ2VEYXRhPiYm
IGltYWdlRGF0YSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwot
ICAgIGF1dG8qIGRhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBhdXRvJiBkYXRhID0gaW1h
Z2VEYXRhLT5kYXRhKCk7CiAgICAgYXV0byogd3JhcHBlciA9IGNyZWF0ZVdyYXBwZXI8SW1hZ2VE
YXRhPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1hZ2VEYXRhKSk7CiAgICAgSWRlbnRpZmllciBk
YXRhTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkYXRhIik7CiAgICAgd3JhcHBl
ci0+cHV0RGlyZWN0KHZtLCBkYXRhTmFtZSwgdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIGRhdGEpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1Ci0gICAg
dm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkoZGF0YS0+bGVuZ3RoKCkpOworICAg
IHZtLmhlYXAuZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEubGVuZ3RoKCkpOwogICAg
IAogICAgIHJldHVybiB3cmFwcGVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyNzcyMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgyLDcgKzEwODIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJh
eUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAg
ICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCku
cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAg
ICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjI2LDggKzEyMjYsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHdyaXRlKEltYWdlRGF0YVRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUo
ZGF0YS0+d2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+aGVpZ2h0KCkpOwot
ICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPmRhdGEoKS0+bGVuZ3RoKCkpOwotICAgICAgICAg
ICAgICAgIHdyaXRlKGRhdGEtPmRhdGEoKS0+ZGF0YSgpLCBkYXRhLT5kYXRhKCktPmxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgIHdyaXRlKGRhdGEtPmRhdGEoKS5kYXRhKCksIGRhdGEtPmRhdGEoKS5sZW5ndGgo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoYXV0byogcmVnRXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwg
b2JqKSkgewpAQCAtMzM5MCw5ICszMzkwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGxlbmd0aCkK
LSAgICAgICAgICAgICAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCktPmRhdGEoKSwgbV9wdHIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLmRhdGEoKSwgbV9w
dHIsIGxlbmd0aCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5k
YXRhKCktPnplcm9GaWxsKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5kYXRhKCkuemVyb0Zp
bGwoKTsKICAgICAgICAgICAgIG1fcHRyICs9IGxlbmd0aDsKICAgICAgICAgICAgIHJldHVybiBn
ZXRKU1ZhbHVlKHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDcgKzc4Miw3IEBAIHZvaWQg
SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyAgICAgIGludGVybmFs
IHNsb3QuCiAgICAgLy8gNi4yLiBJZiBJc0RldGFjaGVkQnVmZmVyKGJ1ZmZlcikgaXMgdHJ1ZSwg
dGhlbiByZXR1cm4gcCByZWplY3RlZCB3aXRoIGFuCiAgICAgLy8gICAgICAiSW52YWxpZFN0YXRl
RXJyb3IiIERPTUV4Y2VwdGlvbi4KLSAgICBpZiAoaW1hZ2VEYXRhLT5kYXRhKCktPmlzRGV0YWNo
ZWQoKSkgeworICAgIGlmIChpbWFnZURhdGEtPmRhdGEoKS5pc0RldGFjaGVkKCkpIHsKICAgICAg
ICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IsICJJbWFnZURhdGEncyB2aWV3ZWQg
YnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6YwogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgUmFuZ2VFcnJvciwgIk91dCBvZiBtZW1vcnkiX3MgfTsKICAgICB9CiAg
ICAgYnl0ZUFycmF5LT56ZXJvRmlsbCgpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdl
RGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEltYWdlRGF0YSh7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9KSk7CiB9CiAK
IFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUp
CkBAIC02OCw3ICs2OCw3IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNv
bnMKICAgICBhdXRvIGJ5dGVBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGRhdGFTaXplLnVuc2FmZUdldCgpKTsKICAgICBpZiAoIWJ5dGVBcnJheSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRh
KHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKIH0KIAogUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVm
PFVpbnQ4Q2xhbXBlZEFycmF5PiYmIGJ5dGVBcnJheSkKQEAgLTc2LDcgKzc2LDggQEAgUmVmUHRy
PEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoY29ucwogICAgIGF1dG8gZGF0YVNpemUgPSBJ
bWFnZURhdGE6OmRhdGFTaXplKHNpemUpOwogICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2Vk
KCkgfHwgZGF0YVNpemUudW5zYWZlR2V0KCkgPiBieXRlQXJyYXktPmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6
ZSwgV1RGTW92ZShieXRlQXJyYXkpKSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFn
ZURhdGEoeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
c2l6ZSwgV1RGTW92ZShieXRlQXJyYXkpIH0pKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPEltYWdl
RGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJy
YXksIHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1bnNpZ25lZD4gc2gpCkBAIC05OSwyMiArMTAwLDIy
IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmMKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLUltYWdlRGF0YTo6SW1hZ2VEYXRhKGNvbnN0
IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXkpCi0gICAg
OiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZGF0YShXVEZNb3ZlKGJ5dGVBcnJheSkpCitJbWFnZURh
dGE6OkltYWdlRGF0YShQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyKQorICAgIDogbV9waXhlbEJ1
ZmZlcihXVEZNb3ZlKHBpeGVsQnVmZmVyKSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKChzaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpIDw9IG1fZGF0
YS0+bGVuZ3RoKCkpOwogfQogCitJbWFnZURhdGE6On5JbWFnZURhdGEoKSA9IGRlZmF1bHQ7CisK
IFJlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6ZGVlcENsb25lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEobV9zaXplLCBVaW50OENsYW1wZWRBcnJheTo6Y3Jl
YXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxlbmd0aCgpKSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEltYWdlRGF0YShtX3BpeGVsQnVmZmVyLmRlZXBDbG9uZSgpKSk7CiB9CiAKIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEltYWdlRGF0YSYgaW1h
Z2VEYXRhKQogewogICAgIC8vIFByaW50IG91dCB0aGUgYWRkcmVzcyBvZiB0aGUgcGl4ZWwgZGF0
YSBhcnJheQotICAgIHJldHVybiB0cyA8PCBpbWFnZURhdGEuZGF0YSgpOworICAgIHJldHVybiB0
cyA8PCAmaW1hZ2VEYXRhLmRhdGEoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0
YS5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMjEgKzM5LDI1IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlKGNvbnN0IEludFNpemUmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlKGNvbnN0
IEludFNpemUmLCBSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4gY3JlYXRlKFJlZjxVaW50OENsYW1w
ZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFsPHVuc2lnbmVkPiBzaCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCi0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndp
ZHRoKCk7IH0KLSAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgp
OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZm
ZXIuc2l6ZSgpOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZl
ci5zaXplKCkud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Bp
eGVsQnVmZmVyLnNpemUoKS5oZWlnaHQoKTsgfQogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHRyKCk7IH0KKyAgICBVaW50OENsYW1wZWRBcnJh
eSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuZGF0YSgpOyB9CiAKICAgICBS
ZWY8SW1hZ2VEYXRhPiBkZWVwQ2xvbmUoKSBjb25zdDsKIAorICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5jb2xvclNwYWNl
KCk7IH0KKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVm
ZmVyLmZvcm1hdCgpOyB9CisKIHByaXZhdGU6Ci0gICAgSW1hZ2VEYXRhKGNvbnN0IEludFNpemUm
LCBSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYpOworICAgIEltYWdlRGF0YShQaXhlbEJ1ZmZlciYm
KTsKKwogICAgIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gZGF0YVNp
emUoY29uc3QgSW50U2l6ZSYpOwogCi0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVmPFVpbnQ4
Q2xhbXBlZEFycmF5PiBtX2RhdGE7CisgICAgUGl4ZWxCdWZmZXIgbV9waXhlbEJ1ZmZlcjsKIH07
CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBJbWFnZURhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShy
ZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1NSw3ICsyMTU1LDcg
QEAgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUVtcHR5SW1hZwogewogICAgIGF1dG8g
ZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUpOwogICAgIGlmIChkYXRhKQotICAgICAgICBk
YXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisgICAgICAgIGRhdGEtPmRhdGEoKS56ZXJvRmlsbCgp
OwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC0yMjIwLDcgKzIyMjAsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghZGF0YS5kYXRhKCkgfHwgZGF0YS5kYXRhKCktPmlzRGV0YWNo
ZWQoKSkKKyAgICBpZiAoZGF0YS5kYXRhKCkuaXNEZXRhY2hlZCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoZGlydHlXaWR0aCA8IDApIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZp
c2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc0OSw3ICs0NzQ5LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICAgICAgdGV4SW1h
Z2VJbXBsKGZ1bmN0aW9uSUQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgZmFsc2UsIGJpdG1hcC0+cHJlbXVsdGlwbHlBbHBo
YSgpLCBiaXRtYXAtPmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpLCBzb3VyY2VJbWFnZVJlY3Qs
IGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSwg
WyZdKGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+JiBwaXhlbHMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+
IHsKLSAgICAgICAgaWYgKHBpeGVscy0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAgICAgICAg
aWYgKHBpeGVscy0+ZGF0YSgpLmlzRGV0YWNoZWQoKSkgewogICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IlRoZSBzb3VyY2UgZGF0YSBoYXMgYmVlbiBkZXRhY2hlZC4iKTsKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0KQEAgLTQ3NzgsNyArNDc3OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KICAgICAg
ICAgaWYgKCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUgJiYgIXNlbGVjdGluZ1N1YlJlY3RhbmdsZSAmJiBkZXB0aCA9PSAx
KSB7CiAgICAgICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYnl0
ZUxlbmd0aCA9IHBpeGVscy0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgICAgICBieXRl
TGVuZ3RoID0gcGl4ZWxzLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8x
MEZfMTFGXzExRl9SRVYpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgpAQCAtNDc5
NCwyMyArNDc5NCwyMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
CiAgICAgICAgIGlmIChmdW5jdGlvbklEID09IFRleEltYWdlRnVuY3Rpb25JRDo6VGV4SW1hZ2Uy
RCkgewogICAgICAgICAgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsCiAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwg
YWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksIDAsCi0gICAgICAgICAgICAgICAgZm9y
bWF0LCB0eXBlLCBieXRlTGVuZ3RoLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4
ZWxzLT5kYXRhKCktPmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBieXRl
TGVuZ3RoLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCkuZGF0
YSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbklEID09IFRleEltYWdlRnVuY3Rpb25J
RDo6VGV4U3ViSW1hZ2UyRCkgewogICAgICAgICAgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKICAgICAgICAgICAgICAgICBhZGp1c3RlZFNvdXJj
ZUltYWdlUmVjdC53aWR0aCgpLCBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZl
cnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkpOworICAgICAgICAg
ICAgICAgIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBieXRlTGVuZ3RoLCBuZWVkQ29udmVyc2lvbiA/
IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCkuZGF0YSgpKTsKICAgICAgICAgfSBlbHNlIHsK
ICNpZiBVU0UoQU5HTEUpCiAgICAgICAgICAgICAvLyAzRCBmdW5jdGlvbnMuCiAgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleEltYWdlM0QpIHsKICAg
ICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0Lndp
ZHRoKCksIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LmhlaWdodCgpLCBkZXB0aCwgMCwKLSAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4obmVlZENvbnZlcnNpb24g
PyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4obmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSwgYnl0ZUxlbmd0aCkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb25JRCA9
PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1YkltYWdlM0QpOwogICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0
aCgpLCBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKSwgZGVwdGgsCi0gICAgICAgICAg
ICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8g
ZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAg
ICAgICAgIH0KICNlbHNlCiAgICAgICAgICAgICAvLyBXZWJHTCAyLjAgaXMgb25seSBzdXBwb3J0
ZWQgd2l0aCB0aGUgQU5HTEUgYmFja2VuZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
OSw4ICsxNDU5LDggQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0bwog
UmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJy
YXlGb3JJbWFnZURhdGEoY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEpCiB7CiAgICAgYXV0byBk
YXRhID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGltYWdlRGF0YS5kYXRhKCktPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGRhdGEtPmFk
ZEl0ZW0oaW1hZ2VEYXRhLmRhdGEoKS0+aXRlbShpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbWFnZURhdGEuZGF0YSgpLmxlbmd0aCgpOyArK2kpCisgICAgICAgIGRhdGEtPmFkZEl0
ZW0oaW1hZ2VEYXRhLmRhdGEoKS5pdGVtKGkpKTsKIAogICAgIGF1dG8gYXJyYXkgPSBKU09OOjpB
cnJheU9mPEpTT046OlZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgYXJyYXktPmFkZEl0ZW0oV1RGTW92
ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3OSw3ICs3NzksNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0
SW1hZ2VEYXRhCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkYXRhLnJlc2l6ZShwYWNrZWRT
aXplKTsKIAotICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBz
b3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
ZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxw
aGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRh
dGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS5kYXRh
KCksIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUltYWdlU3ViUmVjdGFu
Z2xlLCBkZXB0aCwgMCwgdW5wYWNrSW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlw
bHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVsdGlwbHkgOiBBbHBoYU9wOjpEb05vdGhpbmcsIGRh
dGEuZGF0YSgpLCBmbGlwWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MywxOCArNzMsMTggQEAgdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRU
b0x1bWluYQogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
KiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGF1dG8mIHNyY1BpeGVs
QXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0
ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7
Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAz
KTsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsT2Zmc2V0ICsg
Myk7CiAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50
OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhf
dCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisgICAgICAgIHVp
bnQ4X3QgciA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4
X3QgZyA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKIAogICAgICAgICBk
b3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChk
b3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0
ICsgMywgbHVtYSk7CisgICAgICAgIHNyY1BpeGVsQXJyYXkuc2V0KHBpeGVsT2Zmc2V0ICsgMywg
bHVtYSk7CiAgICAgfQogCiAgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onpl
cm8oKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CkBAIC0yNDEsMTAg
KzI0MSwxMCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdlCiAgICAg
ICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsKIAogICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdFNjYWxlZC5zaXplKCkpCi0gICAgICAgIGltYWdlRGF0YS0+ZGF0
YSgpLT56ZXJvRmlsbCgpOworICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS56ZXJvRmlsbCgpOwog
CiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworICAgIHVp
bnQ4X3QqIGRlc3RSb3dzID0gaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpICsgZGVzdFJlY3QueSgp
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKIAogICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKICAgICB1aW50OF90KiBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNC
eXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CkBAIC0yNzgsNyArMjc4LDcgQEAg
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbAogICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0UmVjdC55KCkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OwogCiAgICAgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkg
KiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisgICAgdWludDhfdCog
c3JjUm93cyA9IGltYWdlRGF0YS5kYXRhKCkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICog
c3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdl
UGl4ZWxzKAogICAgICAgICBpbnB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzcmNCeXRl
c1BlclJvdywgc3JjUm93cywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QaXhlbEJ1ZmZlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0
IEludFNpemUmIHNpemUsIFJlZjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiYmIGRhdGEpCisgICAg
OiBtX2NvbG9yU3BhY2UgeyBjb2xvclNwYWNlIH0KKyAgICAsIG1fZm9ybWF0IHsgZm9ybWF0IH0K
KyAgICAsIG1fc2l6ZSB7IHNpemUgfQorICAgICwgbV9kYXRhIHsgV1RGTW92ZShkYXRhKSB9Cit7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigobV9zaXplLmFy
ZWEoKSAqIDQpLnVuc2FmZUdldCgpIDw9IG1fZGF0YS0+bGVuZ3RoKCkpOworfQorCitQaXhlbEJ1
ZmZlcjo6flBpeGVsQnVmZmVyKCkgPSBkZWZhdWx0OworCitQaXhlbEJ1ZmZlciBQaXhlbEJ1ZmZl
cjo6ZGVlcENsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4geyBtX2NvbG9yU3BhY2UsIG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9y
U3BhY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGl4ZWxGb3JtYXQuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBpeGVsQnVmZmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQaXhlbEJ1ZmZlcik7CitwdWJsaWM6CisgICAgUGl4ZWxCdWZmZXIoRGVzdGluYXRpb25D
b2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIFJlZjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiYmKTsKKyAgICB+UGl4ZWxCdWZmZXIoKTsKKworICAgIFBpeGVsQnVmZmVyKFBp
eGVsQnVmZmVyJiYpID0gZGVmYXVsdDsKKyAgICBQaXhlbEJ1ZmZlciYgb3BlcmF0b3I9KFBpeGVs
QnVmZmVyJiYpID0gZGVmYXVsdDsKKworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisgICAgUGl4ZWxGb3JtYXQgZm9y
bWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KKyAgICBjb25zdCBJbnRTaXplJiBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgSlNDOjpVaW50OENsYW1wZWRBcnJheSYg
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCisgICAgUGl4ZWxCdWZmZXIg
ZGVlcENsb25lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNl
IG1fY29sb3JTcGFjZTsKKyAgICBQaXhlbEZvcm1hdCBtX2Zvcm1hdDsKKyAgICBJbnRTaXplIG1f
c2l6ZTsKKyAgICBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gbV9kYXRhOworfTsKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDgsOCArOTA4LDggQEAgdm9pZCBT
aGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKEltYWdlQgogICAgIGlmICghbGF5ZXJEYXRhKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+
ZGF0YSgpOwotICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGF1dG8mIGJsdXJQaXhlbEFy
cmF5ID0gbGF5ZXJEYXRhLT5kYXRhKCk7CisgICAgYmx1ckxheWVySW1hZ2UoYmx1clBpeGVsQXJy
YXkuZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKICAgICBs
YXllckltYWdlLnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MCwxNCArOTAsMTQgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuRwogICAgIFNjb3BlZFBpeGVsU3RvcmFnZU1vZGUgcGFja1NraXBQaXhlbHMoR0xf
UEFDS19TS0lQX1BJWEVMUywgMCwgbV9pc0ZvcldlYkdMMik7CiAgICAgU2NvcGVkQnVmZmVyQmlu
ZGluZyBzY29wZWRQaXhlbFBhY2tCdWZmZXJSZXNldChHTF9QSVhFTF9QQUNLX0JVRkZFUiwgMCwg
bV9pc0ZvcldlYkdMMik7CiAKLSAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBp
bWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCksIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkpOworICAgIGdsOjpSZWFkblBp
eGVsc1JvYnVzdEFOR0xFKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxl
bmd0aCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRh
KCkpOwogICAgIC8vIEZJWE1FOiBSZW5kZXJpbmcgdG8gR0xfUkdCIHRleHR1cmVzIHdpdGggYSBJ
T1N1cmZhY2UgYm91bmQgdG8gdGhlIHRleHR1cmUgaW1hZ2UgbGVhdmVzCiAgICAgLy8gdGhlIGFs
cGhhIGluIHRoZSBJT1N1cmZhY2UgaW4gaW5jb3JyZWN0IHN0YXRlLiBBbHNvIEFOR0xFIGdsOjpS
ZWFkUGl4ZWxzIHdpbGwgaW4gc29tZQogICAgIC8vIGNhc2VzIGV4cG9zZSB0aGUgbm9uLTI1NSB2
YWx1ZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTgwNAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAo
IWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpCi0gICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9t
UGl4ZWxzKGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRh
LT5kYXRhKCktPmRhdGEoKSk7CisgICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGlt
YWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT5kYXRhKCku
ZGF0YSgpKTsKICNlbmRpZgogICAgIHJldHVybiBpbWFnZURhdGE7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyOSw3ICs1MjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2Fu
CiAgICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICBpbnQgcm93Qnl0
ZXMgPSBpbWFnZVNpemUud2lkdGgoKSAqIDQ7CiAgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJv
d0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0g
aW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGlt
YWdlRGF0YS0+ZGF0YSgpLmRhdGEoKTsKICAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOwogICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRl
clJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KCZpbWFnZURhdGEubGVha1JlZigpLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIHJlbGVhc2VJbWFn
ZURhdGEpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDYgQEAgUmV0YWluUHRyPENG
RGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbgogICAgIEFTU0VSVCh1dGkpOwogCiAgICAgUGxh
dGZvcm1JbWFnZVB0ciBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3Rl
Y3RlZFBpeGVsQXJyYXk7CiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkp
IHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBo
YXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCkBAIC0xOTIsNyArMTkx
LDcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbgogICAgICAgICBp
ZiAoIWltYWdlRGF0YSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHBy
b3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAg
ICAgYXV0byBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZihpbWFnZURhdGEtPmRhdGEoKSk7
CiAgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5n
dGgoKTsKICAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+
c2l6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkocmV2aXNpb24gMjc3
MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMg
UmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAgICAgQVNTRVJUKHV0aSk7CiAKICAg
ICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2ln
bmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLmRhdGEoKTsKICAgICBWZWN0b3I8dWludDhf
dD4gcHJlbXVsdGlwbGllZERhdGE7CiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdV
VEkoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGF1dG8m
IHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICBJbnRTaXplIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwpAQCAtMjk5LDE2ICsyOTksMTYgQEAgdm9p
ZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcgogICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYPigqcGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklY
X1RZUEVfU0FUVVJBVEU+KCpwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25z
KTsKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVs
QXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4oKnBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
OgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
PigqcGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwogICAgICAgICBzZXRJc0FscGhhSW1hZ2Uo
dHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDEwICsxMDksMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5UwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8q
IGltYWdlUmVzdWx0ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRv
KiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0
cjsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgaWYgKCFpbWFnZVJlc3VsdCkKICAgICAgICAg
cmV0dXJuOwogCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0LT5kYXRhKCk7CisK
ICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwog
ICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKQEAgLTEyMCw5ICsxMjEsOSBAQCB2b2lkIEZFQ29t
cG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTCiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAogICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxB
cnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRh
dGEgPSBwaXhlbEFycmF5LT5kYXRhKCk7CisgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQo
cGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhf
dCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZz
ZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQp
IHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhl
bE9mZnNldCArIDFdXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkgKzIzMCwxMCBAQCB2b2lkIEZFQ29tcG9zaXRlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoCiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpIHsKICAgICAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgICAgIGlm
ICghZHN0UGl4ZWxBcnJheSkKKyAgICAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+ZGF0YSgpOwogCiAgICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAg
ICAgICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVj
dEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKQEAgLTI0MCw5ICsyNDEsOSBA
QCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAg
IGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdEJEcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgaW4yLT5jb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNy
Y1BpeGVsQXJyYXksICpkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKKyAg
ICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNyY1BpeGVsQXJyYXksIGRzdFBpeGVs
QXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NiwxMCArMzc2LDEyIEBAIHZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnQKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRvKiBkc3RQaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAo
IWRzdFBpeGVsQXJyYXkpCisKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47
CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAg
IEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gc3JjUGl4ZWxBcnJheTsKQEAgLTM5NSw3ICszOTcsNyBAQCB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
ID0gewogICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAgICAgKmRzdFBpeGVsQXJyYXksCisg
ICAgICAgIGRzdFBpeGVsQXJyYXksCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAg
ICBwYWludFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fYmlhcyAqIDI1NSwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsMTEgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxh
dGZvcm1BcHBseVNvZgogICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9V
TktOT1dOKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVz
dWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAg
IGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRzdFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKICAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3RBRHJhd2luZ1JlY3QpOwogCkBAIC0xNDAsNyArMTQxLDcgQEAgdm9pZCBGRURpc3BsYWNl
bWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZgogICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRz
dEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CiAgICAgICAg
ICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlz
cGxhY2VtZW50SW1hZ2UtPml0ZW0oZHN0SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBz
Y2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRzdFBpeGVsUHRyID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXktPmRhdGEoKSArIGRzdEluZGV4
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIGRzdEluZGV4KTsKICAgICAgICAgICAg
IGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8
IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CiAgICAgICAgICAgICAgICAgKmRzdFBpeGVs
UHRyID0gMDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDggKzEwNSw4
IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICBpZiAoIWlt
YWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4
ZWxBcnJheS0+ZGF0YSgpLCBpbWFnZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgp
LndpZHRoKCkpOworICAgIGF1dG8mIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
KyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXkuZGF0YSgpLCBp
bWFnZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOwogICAgIAog
ICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc2hhZG93QXJlYSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI0
LDE0ICs1MjQsMTUgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YQog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJlc3Vs
dEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7
Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
OworCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDQsNyArNTQ1LDcgQEAgdm9pZCBGRUdh
dXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpkc3RQaXhlbEFycmF5LCAqdG1w
SW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseShkc3RQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBr
ZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CiB9CiAK
IEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsMjEgKzQ3
NiwyMiBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRvKiByZXN1dFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAg
IGlmICghcmVzdXRQaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGF1dG8mIHJlc3V0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7
CisKICAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcmVzdXRQaXhlbEFy
cmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbi0+
Y29weVByZW11bHRpcGxpZWRSZXN1bHQocmVzdXRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxV
bml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBX
MwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBi
cm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFy
aW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFi
bGUuCiAgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUg
aW1wbGVtZW50YXRpb24KIAogICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRpbmcoKnJlc3V0UGl4ZWxBcnJheSwg
YWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOwor
ICAgIGRyYXdMaWdodGluZyhyZXN1dFBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRo
KCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDQsMTYgKzI0NCwxNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
CiAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+
ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUg
cmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7
Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKCpkc3RQaXhlbEFycmF5LCBlZmZlY3RE
cmF3aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgaWYgKHBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKQEAgLTI2NSwxMiArMjY2LDEyIEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICBpbnQgcmFkaXVzWCA9
IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7
CiAgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAt
IDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUo
KmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAg
ICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2lu
Z1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9
IHNyY1BpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSBk
c3RQaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRzdFBpeGVs
QXJyYXk7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qu
d2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0
ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gMjc3MjA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsMTUgKzM5NywxNiBAQCB2b2lkIEZFVHVyYnVsZW5j
ZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKIHsKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVz
dWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIHBpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRl
clNjYWxlKCkpOwogCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBp
eGVsQXJyYXktPnplcm9GaWxsKCk7CisgICAgICAgIHBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQwLDcgKzQ0MSw3IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKICAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAg
ICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJh
eSA9IHBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4
ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5n
RGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1Niw3ICs0NTcsNyBA
QCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgfQogCiAgICAg
Ly8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBm
b3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxs
UmVnaW9uKCpwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7
CisgICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAs
IGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsOSArMjAxLDkgQEAgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaQogICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1
aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJy
YXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSYg
aW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CisgICAgdWlu
dDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlM
ZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwogCiAgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIg
Ynl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCiAgICAgQVNTRVJUKCEocGl4ZWxB
cnJheUxlbmd0aCAlIDQpKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6
Y29weUNvbnZlcnRlZEltYWdlQnVmCiAgICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252
ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1
bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9y
bWF0KTsKICAgICBpZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAg
IGNvcHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24s
IGRlc3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252
ZXJ0ZWRJbWFnZURhdAogICAgIGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBpbWFnZURhdGEsIG91dHB1dEZvcm1hdCk7CiAg
ICAgaWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1h
Z2VCeXRlcygqY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7CisgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3Rp
bmF0aW9uLCBkZXN0UmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBs
aWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYg
cmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQpAQCAtNTAw
LDE0ICs1MDAsMTQgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bAog
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRl
KGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlVbnBy
ZW11bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9y
U3BhY2UpKSB7CiAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiB2b2lk
IEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBAIC01MzMsNyArNTMzLDcgQEAgdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwg
aW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQg
RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3UKICAgICAgICAgY29weUNvbnZlcnRl
ZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIHJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Cisg
ICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVz
dGluYXRpb24sIHJlY3QpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMSArMjAxLDExIEBAIHN0
ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAgICAKICAgICAvLyBXZSBj
b3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBpbWFnZURhdGEgY291bGQgYmUgbnVsbHB0ci4gQSBj
YXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgaW1hZ2VEYXRhOjpjcmVhdGUKICAg
ICAvLyBjYW4gcmV0dXJuIGEgbnVsbHB0ciBiZWNhdXNlIGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dl
ZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQKLSAgICBpZiAoIWltYWdlRGF0YSB8fCAh
aW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBj
cmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsK
KyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcGl4
ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAg
ICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihscm91
bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUuMGYpKTsKIApAQCAtMjE2
LDcgKzIxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAg
ICAgICAgZm9yIChpbnQgeSA9IG1pbkJ1ZmZlclk7IHkgPCBtYXhCdWZmZXJZOyArK3kpIHsKICAg
ICAgICAgICAgIGludCBzdGFydFggPSAtMTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCwgcGl4ZWxBcnJheU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHBpeGVsQXJyYXktPml0ZW0ocGl4ZWxBcnJheU9m
ZnNldCk7CisgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShw
aXhlbEFycmF5T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBib29sIGFscGhhQWJvdmVUaHJlc2hv
bGQgPSBhbHBoYSA+IGFscGhhUGl4ZWxUaHJlc2hvbGQ7CiAgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0WCA9PSAtMSAmJiBhbHBoYUFib3ZlVGhyZXNob2xkKSB7CiAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0WCA9IHg7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MjI4KQorKysgU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNS0w
OCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBw
aXhlbCBidWZmZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgZm9yIEltYWdlRGF0
YTo6ZGF0YSgpIHJldHVybmluZyBhIHJlZmVyZW5jZS4KKworICAgICAgICAqIEdQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KToK
KyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
CiAyMDIxLTA1LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbU09VUF0gVXNlIHRoZSBuZXcgbGlic291cCBuZXR3b3JrIG1ldHJpY3MgQVBJ
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnBvcHVsYXRlR2V0CiB7CiAgICAgTUVTU0FHRV9DSEVDSyhtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRJbWFnZURhdGEgd2l0aG91dCBhIGJ1ZmZlciB0
byB3cml0ZSBpbnRvIik7CiAKLSAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0YSgp
KSB7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgo
KSA8PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCAiU2htZW0gZm9yIHJldHVy
biBvZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7Ci0gICAgICAgIG1lbWNweShtX2dldElt
YWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBp
bWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBpZiAoaW1hZ2VEYXRhKSB7Cisg
ICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpIDw9IG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCksICJTaG1lbSBmb3IgcmV0dXJuIG9mIGdl
dEltYWdlRGF0YSBpcyB0b28gc21hbGwiKTsKKyAgICAgICAgbWVtY3B5KG1fZ2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgaW1hZ2VEYXRh
LT5kYXRhKCkuYnl0ZUxlbmd0aCgpKTsKICAgICB9IGVsc2UKICAgICAgICAgbWVtc2V0KG1fZ2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAsIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5LT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMTksOSAr
MzExOSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXQKIHsKICAg
ICBlbmNvZGVyIDw8IGltYWdlRGF0YS0+c2l6ZSgpOwogCi0gICAgYXV0byByYXdEYXRhID0gaW1h
Z2VEYXRhLT5kYXRhKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmF3
RGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
YXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7CisgICAgYXV0byYgcmF3
RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHJhd0RhdGEuYnl0ZUxlbmd0aCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyYXdEYXRhLmRhdGEoKSwgcmF3RGF0YS5ieXRlTGVuZ3RoKCksIDEpOwogfQogCiB0
ZW1wbGF0ZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgJKHJldmlzaW9uIDI3NzIw
OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOSArMjAwLDkgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgYXV0byBpbWFnZURhdGEg
PSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7Ci0gICAgICAgIGlm
ICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAgaWYgKCFpbWFnZURh
dGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgc2l6ZV90IGRhdGFTaXpl
ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgc2l6ZV90IGRhdGFT
aXplID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwogCiAgICAgICAgIElQQzo6VGlt
ZW91dCB0aW1lb3V0ID0gNV9zOwogICAgICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeSA9
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURh
dGEoZGF0YVNpemUsIHRpbWVvdXQpOwpAQCAtMjE0LDkgKzIxNCw5IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7CiAKICAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53YWl0Rm9yR2V0SW1hZ2VEYXRhVG9D
b21wbGV0ZSh0aW1lb3V0KSkKLSAgICAgICAgICAgIG1lbWNweShpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICAgICAgbWVt
Y3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRhdGFT
aXplKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtc2V0KGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCksIDAsIGRhdGFTaXplKTsKKyAgICAgICAgICAgIG1lbXNldChpbWFnZURhdGEtPmRh
dGEoKS5kYXRhKCksIDAsIGRhdGFTaXplKTsKICAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKICAg
ICB9CiAK
</data>
<flag name="commit-queue"
          id="448902"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428087</attachid>
            <date>2021-05-08 09:38:04 -0700</date>
            <delta_ts>2021-05-08 12:30:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210508093803.patch</filename>
            <type>text/plain</type>
            <size>62959</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wNS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZm
ZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJlIHRvIGZpeCBsYXllcmluZyB2aW9s
YXRpbmcgdXNlIG9mIERPTSBsZXZlbCBJbWFnZURhdGEgYmVpbmcKKyAgICAgICAgdXNlZCBieSBw
bGF0Zm9ybSBjb2RlIGJ5IGZhY3RvcmluZyBvdXQgdGhlIHBpeGVsIHN0b3JhZ2UgaW50byBhIG5l
dworICAgICAgICBQaXhlbEJ1ZmZlciBjbGFzcy4gU2luY2UgaXQgd2lsbCBiZSBhIGxpdHRsZSBt
b3JlIGdlbmVyYWwgdGhhdCAKKyAgICAgICAgSW1hZ2VEYXRhIGlzIG5vdyAodGhvdWdoIEltYWdl
RGF0YSB3aWxsIG5lZWQgdG8gZ2FpbiB0aGVzZSBzb29uKQorICAgICAgICBQaXhlbEJ1ZmZlciBh
bHNvIGNhcHR1cmVzIHRoZSBwaXhlbCBmb3JtYXQgYW5kIGNvbG9yIHNwYWNlIHRoZSBwaXhlbAor
ICAgICAgICBkYXRhIHJlcHJlc2VudHMuCisKKyAgICAgICAgV2hpbGUgaGVyZSwgdXBkYXRlIElt
YWdlRGF0YTo6ZGF0YSgpIHRvIHJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbgorICAgICAg
ICBhIHBvaW50ZXIgdG8gaW5kaWNhdGUgaXQgaXMgbmV2ZXIgbnVsbCBhbmQgdXBkYXRlIGFsbCB0
aGUgY2FsbGVycy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJ
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRl
cm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWlu
YWwpOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6
ZGVlcENsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAqIGh0bWwvSW1hZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpj
b2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Zm9ybWF0IGNv
bnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5SW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhl
bHBlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
eGVsQnVmZmVyOjpkZWVwQ2xvbmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmZvcm1hdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9z
aXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rl
c3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjEtMDUtMDcg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbY3NzLWZsZXhib3hd
IEZsZXggaXRlbSBjb25zdHJ1Y3Rpb24gbWF5IGFmZmVjdCBzaWJsaW5nIGZsZXggaXRlbSBoZWln
aHQgY29tcHV0YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjc3MjA5KQor
KysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTI4OCw2
ICsxMjg4LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEZvcm1hdC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzcyMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjAxMiw2
ICsyMDEyLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDE0NSw2ICs0MTQ1LDcgQEAKIAkJQkNFNjU5QTkwRUE5MjdCOTAwN0U0NTMzIC8q
IFRoZW1lVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRTY1OUE4MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFNjU5RTYwRUE5MkZCMjAw
N0U0NTMzIC8qIFRoZW1lTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0U2NTlFNTBFQTkyRkIyMDA3RTQ1MzMgLyogVGhlbWVNYWMuaCAqLzsgfTsK
IAkJQkNFNjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNjVCRTkwRUFDREYxNjAwN0U0NTMzIC8q
IExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUJDRTY5MUU1MjY0NjM3RkMwMEVCREMzQSAvKiBQaXhlbEJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0ODM5QkEyNjQ2MTgxQTAwQTI4
QjYyIC8qIFBpeGVsQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFNzg5MTYxMTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U3ODkx
NTExMjBENjA4MDA2MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCAqLzsgfTsKIAkJQkNFNzg5ODYx
MTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTc4OTg1MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmgg
Ki87IH07CiAJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRh
aW5lclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0Lmgg
Ki87IH07CkBAIC0xNDE1NCw2ICsxNDE1NSw4IEBACiAJCUJDNDZDMUY5MEMwRERDOEYwMDIwQ0ZD
MyAvKiBKU0NTU1BhZ2VSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NTU1BhZ2VSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDZDMjA0MEMw
RERDQTEwMDIwQ0ZDMyAvKiBKU0NTU1N0eWxlUnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZVJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzQ2QzIwNTBDMEREQ0ExMDAyMENGQzMgLyogSlNDU1NTdHlsZVJ1bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTU3R5bGVSdWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhl
bEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzQ4MzlCQjI2NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGl4ZWxCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzQ5MThDMDBCRkVBMDUwMDA5RDYzMTYgLyogSlNIVE1MRnJhbWVFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGcmFtZUVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ5MThDMTBCRkVBMDUw
MDA5RDYzMTYgLyogSlNIVE1MRnJhbWVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0hUTUxGcmFtZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkM0OTE4QzIwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTElGcmFtZUVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTElGcmFtZUVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwMjUsNiArMjcwMjgsOCBA
QAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJ
CQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2
RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJQkM0ODM5QkIyNjQ2MTgx
QTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLywKKwkJCQlCQzQ4MzlCQTI2NDYxODFBMDBB
MjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAqLywKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMg
LyogUGl4ZWxGb3JtYXQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxh
dGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCkBAIC0zNDQzMyw2ICszNDQzOCw3IEBACiAJCQkJMUQyRjhFMDYy
MzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3NTg1OTdDMjNBMUZDRjMwMEM3NDU3MiAvKiBQaW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQ0U2OTFFNTI2NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNEN0QzMzQ0MUM3QTEyM0YwMDA0MTI5MyAvKiBQaXhlbEJ1ZmZlckNvbmZv
cm1lckNWLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E1NTkxNDI2M0RCRDc5MDA3RjE5QjMgLyog
UGl4ZWxGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERUZBMjI4MUU3NjY5RTgwMDBBRTk5
QyAvKiBQbGF0Zm9ybUF1ZGlvRGF0YS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAy
NzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8SW1hZ2VEYXRhPiYm
IGltYWdlRGF0YSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwot
ICAgIGF1dG8qIGRhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBhdXRvJiBkYXRhID0gaW1h
Z2VEYXRhLT5kYXRhKCk7CiAgICAgYXV0byogd3JhcHBlciA9IGNyZWF0ZVdyYXBwZXI8SW1hZ2VE
YXRhPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1hZ2VEYXRhKSk7CiAgICAgSWRlbnRpZmllciBk
YXRhTmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkYXRhIik7CiAgICAgd3JhcHBl
ci0+cHV0RGlyZWN0KHZtLCBkYXRhTmFtZSwgdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIGRhdGEpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1Ci0gICAg
dm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkoZGF0YS0+bGVuZ3RoKCkpOworICAg
IHZtLmhlYXAuZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEubGVuZ3RoKCkpOwogICAg
IAogICAgIHJldHVybiB3cmFwcGVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyNzcyMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgyLDcgKzEwODIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJh
eUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAg
ICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCku
cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAg
ICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjI2LDggKzEyMjYsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHdyaXRlKEltYWdlRGF0YVRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUo
ZGF0YS0+d2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+aGVpZ2h0KCkpOwot
ICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPmRhdGEoKS0+bGVuZ3RoKCkpOwotICAgICAgICAg
ICAgICAgIHdyaXRlKGRhdGEtPmRhdGEoKS0+ZGF0YSgpLCBkYXRhLT5kYXRhKCktPmxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgIHdyaXRlKGRhdGEtPmRhdGEoKS5kYXRhKCksIGRhdGEtPmRhdGEoKS5sZW5ndGgo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoYXV0byogcmVnRXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwg
b2JqKSkgewpAQCAtMzM5MCw5ICszMzkwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGxlbmd0aCkK
LSAgICAgICAgICAgICAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCktPmRhdGEoKSwgbV9wdHIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLmRhdGEoKSwgbV9w
dHIsIGxlbmd0aCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5k
YXRhKCktPnplcm9GaWxsKCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5kYXRhKCkuemVyb0Zp
bGwoKTsKICAgICAgICAgICAgIG1fcHRyICs9IGxlbmd0aDsKICAgICAgICAgICAgIHJldHVybiBn
ZXRKU1ZhbHVlKHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDcgKzc4Miw3IEBAIHZvaWQg
SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyAgICAgIGludGVybmFs
IHNsb3QuCiAgICAgLy8gNi4yLiBJZiBJc0RldGFjaGVkQnVmZmVyKGJ1ZmZlcikgaXMgdHJ1ZSwg
dGhlbiByZXR1cm4gcCByZWplY3RlZCB3aXRoIGFuCiAgICAgLy8gICAgICAiSW52YWxpZFN0YXRl
RXJyb3IiIERPTUV4Y2VwdGlvbi4KLSAgICBpZiAoaW1hZ2VEYXRhLT5kYXRhKCktPmlzRGV0YWNo
ZWQoKSkgeworICAgIGlmIChpbWFnZURhdGEtPmRhdGEoKS5pc0RldGFjaGVkKCkpIHsKICAgICAg
ICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IsICJJbWFnZURhdGEncyB2aWV3ZWQg
YnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6YwogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgUmFuZ2VFcnJvciwgIk91dCBvZiBtZW1vcnkiX3MgfTsKICAgICB9CiAg
ICAgYnl0ZUFycmF5LT56ZXJvRmlsbCgpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdl
RGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEltYWdlRGF0YSh7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9KSk7CiB9CiAK
IFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUp
CkBAIC02OCw3ICs2OCw3IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNv
bnMKICAgICBhdXRvIGJ5dGVBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGRhdGFTaXplLnVuc2FmZUdldCgpKTsKICAgICBpZiAoIWJ5dGVBcnJheSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRh
KHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKIH0KIAogUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVm
PFVpbnQ4Q2xhbXBlZEFycmF5PiYmIGJ5dGVBcnJheSkKQEAgLTc2LDcgKzc2LDggQEAgUmVmUHRy
PEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoY29ucwogICAgIGF1dG8gZGF0YVNpemUgPSBJ
bWFnZURhdGE6OmRhdGFTaXplKHNpemUpOwogICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2Vk
KCkgfHwgZGF0YVNpemUudW5zYWZlR2V0KCkgPiBieXRlQXJyYXktPmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6
ZSwgV1RGTW92ZShieXRlQXJyYXkpKSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFn
ZURhdGEoeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
c2l6ZSwgV1RGTW92ZShieXRlQXJyYXkpIH0pKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPEltYWdl
RGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJy
YXksIHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1bnNpZ25lZD4gc2gpCkBAIC05OSwyMiArMTAwLDIy
IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmMKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLUltYWdlRGF0YTo6SW1hZ2VEYXRhKGNvbnN0
IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXkpCi0gICAg
OiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZGF0YShXVEZNb3ZlKGJ5dGVBcnJheSkpCitJbWFnZURh
dGE6OkltYWdlRGF0YShQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyKQorICAgIDogbV9waXhlbEJ1
ZmZlcihXVEZNb3ZlKHBpeGVsQnVmZmVyKSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKChzaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpIDw9IG1fZGF0
YS0+bGVuZ3RoKCkpOwogfQogCitJbWFnZURhdGE6On5JbWFnZURhdGEoKSA9IGRlZmF1bHQ7CisK
IFJlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6ZGVlcENsb25lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEobV9zaXplLCBVaW50OENsYW1wZWRBcnJheTo6Y3Jl
YXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxlbmd0aCgpKSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEltYWdlRGF0YShtX3BpeGVsQnVmZmVyLmRlZXBDbG9uZSgpKSk7CiB9CiAKIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEltYWdlRGF0YSYgaW1h
Z2VEYXRhKQogewogICAgIC8vIFByaW50IG91dCB0aGUgYWRkcmVzcyBvZiB0aGUgcGl4ZWwgZGF0
YSBhcnJheQotICAgIHJldHVybiB0cyA8PCBpbWFnZURhdGEuZGF0YSgpOworICAgIHJldHVybiB0
cyA8PCAmaW1hZ2VEYXRhLmRhdGEoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0
YS5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMjEgKzM5LDI1IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlKGNvbnN0IEludFNpemUmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlKGNvbnN0
IEludFNpemUmLCBSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4gY3JlYXRlKFJlZjxVaW50OENsYW1w
ZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFsPHVuc2lnbmVkPiBzaCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCi0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndp
ZHRoKCk7IH0KLSAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgp
OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZm
ZXIuc2l6ZSgpOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZl
ci5zaXplKCkud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Bp
eGVsQnVmZmVyLnNpemUoKS5oZWlnaHQoKTsgfQogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHRyKCk7IH0KKyAgICBVaW50OENsYW1wZWRBcnJh
eSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuZGF0YSgpOyB9CiAKICAgICBS
ZWY8SW1hZ2VEYXRhPiBkZWVwQ2xvbmUoKSBjb25zdDsKIAorICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5jb2xvclNwYWNl
KCk7IH0KKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVm
ZmVyLmZvcm1hdCgpOyB9CisKIHByaXZhdGU6Ci0gICAgSW1hZ2VEYXRhKGNvbnN0IEludFNpemUm
LCBSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYpOworICAgIEltYWdlRGF0YShQaXhlbEJ1ZmZlciYm
KTsKKwogICAgIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gZGF0YVNp
emUoY29uc3QgSW50U2l6ZSYpOwogCi0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVmPFVpbnQ4
Q2xhbXBlZEFycmF5PiBtX2RhdGE7CisgICAgUGl4ZWxCdWZmZXIgbV9waXhlbEJ1ZmZlcjsKIH07
CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBJbWFnZURhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShy
ZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1NSw3ICsyMTU1LDcg
QEAgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUVtcHR5SW1hZwogewogICAgIGF1dG8g
ZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUpOwogICAgIGlmIChkYXRhKQotICAgICAgICBk
YXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisgICAgICAgIGRhdGEtPmRhdGEoKS56ZXJvRmlsbCgp
OwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC0yMjIwLDcgKzIyMjAsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghZGF0YS5kYXRhKCkgfHwgZGF0YS5kYXRhKCktPmlzRGV0YWNo
ZWQoKSkKKyAgICBpZiAoZGF0YS5kYXRhKCkuaXNEZXRhY2hlZCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoZGlydHlXaWR0aCA8IDApIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZp
c2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc0OSw3ICs0NzQ5LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICAgICAgdGV4SW1h
Z2VJbXBsKGZ1bmN0aW9uSUQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgZmFsc2UsIGJpdG1hcC0+cHJlbXVsdGlwbHlBbHBo
YSgpLCBiaXRtYXAtPmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpLCBzb3VyY2VJbWFnZVJlY3Qs
IGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSwg
WyZdKGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+JiBwaXhlbHMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+
IHsKLSAgICAgICAgaWYgKHBpeGVscy0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAgICAgICAg
aWYgKHBpeGVscy0+ZGF0YSgpLmlzRGV0YWNoZWQoKSkgewogICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IlRoZSBzb3VyY2UgZGF0YSBoYXMgYmVlbiBkZXRhY2hlZC4iKTsKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0KQEAgLTQ3NzgsNyArNDc3OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KICAgICAg
ICAgaWYgKCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUgJiYgIXNlbGVjdGluZ1N1YlJlY3RhbmdsZSAmJiBkZXB0aCA9PSAx
KSB7CiAgICAgICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYnl0
ZUxlbmd0aCA9IHBpeGVscy0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgICAgICBieXRl
TGVuZ3RoID0gcGl4ZWxzLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8x
MEZfMTFGXzExRl9SRVYpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgpAQCAtNDc5
NCwyMyArNDc5NCwyMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
CiAgICAgICAgIGlmIChmdW5jdGlvbklEID09IFRleEltYWdlRnVuY3Rpb25JRDo6VGV4SW1hZ2Uy
RCkgewogICAgICAgICAgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsCiAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwg
YWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksIDAsCi0gICAgICAgICAgICAgICAgZm9y
bWF0LCB0eXBlLCBieXRlTGVuZ3RoLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4
ZWxzLT5kYXRhKCktPmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBieXRl
TGVuZ3RoLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCkuZGF0
YSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbklEID09IFRleEltYWdlRnVuY3Rpb25J
RDo6VGV4U3ViSW1hZ2UyRCkgewogICAgICAgICAgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwKICAgICAgICAgICAgICAgICBhZGp1c3RlZFNvdXJj
ZUltYWdlUmVjdC53aWR0aCgpLCBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZl
cnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkpOworICAgICAgICAg
ICAgICAgIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBieXRlTGVuZ3RoLCBuZWVkQ29udmVyc2lvbiA/
IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCkuZGF0YSgpKTsKICAgICAgICAgfSBlbHNlIHsK
ICNpZiBVU0UoQU5HTEUpCiAgICAgICAgICAgICAvLyAzRCBmdW5jdGlvbnMuCiAgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleEltYWdlM0QpIHsKICAg
ICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0Lndp
ZHRoKCksIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LmhlaWdodCgpLCBkZXB0aCwgMCwKLSAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4obmVlZENvbnZlcnNpb24g
PyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4obmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSwgYnl0ZUxlbmd0aCkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZnVuY3Rpb25JRCA9
PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1YkltYWdlM0QpOwogICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0
aCgpLCBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKSwgZGVwdGgsCi0gICAgICAgICAg
ICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8g
ZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAg
ICAgICAgIH0KICNlbHNlCiAgICAgICAgICAgICAvLyBXZWJHTCAyLjAgaXMgb25seSBzdXBwb3J0
ZWQgd2l0aCB0aGUgQU5HTEUgYmFja2VuZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
OSw4ICsxNDU5LDggQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0bwog
UmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJy
YXlGb3JJbWFnZURhdGEoY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEpCiB7CiAgICAgYXV0byBk
YXRhID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGltYWdlRGF0YS5kYXRhKCktPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGRhdGEtPmFk
ZEl0ZW0oaW1hZ2VEYXRhLmRhdGEoKS0+aXRlbShpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbWFnZURhdGEuZGF0YSgpLmxlbmd0aCgpOyArK2kpCisgICAgICAgIGRhdGEtPmFkZEl0
ZW0oaW1hZ2VEYXRhLmRhdGEoKS5pdGVtKGkpKTsKIAogICAgIGF1dG8gYXJyYXkgPSBKU09OOjpB
cnJheU9mPEpTT046OlZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgYXJyYXktPmFkZEl0ZW0oV1RGTW92
ZShkYXRhKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3OSw3ICs3NzksNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0
SW1hZ2VEYXRhCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkYXRhLnJlc2l6ZShwYWNrZWRT
aXplKTsKIAotICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBz
b3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
ZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxw
aGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRh
dGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS5kYXRh
KCksIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZUltYWdlU3ViUmVjdGFu
Z2xlLCBkZXB0aCwgMCwgdW5wYWNrSW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlw
bHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVsdGlwbHkgOiBBbHBoYU9wOjpEb05vdGhpbmcsIGRh
dGEuZGF0YSgpLCBmbGlwWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MywxOCArNzMsMTggQEAgdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRU
b0x1bWluYQogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
KiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGF1dG8mIHNyY1BpeGVs
QXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0
ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7
Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAz
KTsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsT2Zmc2V0ICsg
Myk7CiAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50
OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhf
dCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisgICAgICAgIHVp
bnQ4X3QgciA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4
X3QgZyA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKIAogICAgICAgICBk
b3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChk
b3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0
ICsgMywgbHVtYSk7CisgICAgICAgIHNyY1BpeGVsQXJyYXkuc2V0KHBpeGVsT2Zmc2V0ICsgMywg
bHVtYSk7CiAgICAgfQogCiAgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onpl
cm8oKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CkBAIC0yNDEsMTAg
KzI0MSwxMCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdlCiAgICAg
ICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsKIAogICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdFNjYWxlZC5zaXplKCkpCi0gICAgICAgIGltYWdlRGF0YS0+ZGF0
YSgpLT56ZXJvRmlsbCgpOworICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS56ZXJvRmlsbCgpOwog
CiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworICAgIHVp
bnQ4X3QqIGRlc3RSb3dzID0gaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpICsgZGVzdFJlY3QueSgp
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKIAogICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKICAgICB1aW50OF90KiBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNC
eXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CkBAIC0yNzgsNyArMjc4LDcgQEAg
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbAogICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0UmVjdC55KCkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OwogCiAgICAgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkg
KiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisgICAgdWludDhfdCog
c3JjUm93cyA9IGltYWdlRGF0YS5kYXRhKCkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICog
c3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdl
UGl4ZWxzKAogICAgICAgICBpbnB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzcmNCeXRl
c1BlclJvdywgc3JjUm93cywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QaXhlbEJ1ZmZlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0
IEludFNpemUmIHNpemUsIFJlZjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiYmIGRhdGEpCisgICAg
OiBtX2NvbG9yU3BhY2UgeyBjb2xvclNwYWNlIH0KKyAgICAsIG1fZm9ybWF0IHsgZm9ybWF0IH0K
KyAgICAsIG1fc2l6ZSB7IHNpemUgfQorICAgICwgbV9kYXRhIHsgV1RGTW92ZShkYXRhKSB9Cit7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigobV9zaXplLmFy
ZWEoKSAqIDQpLnVuc2FmZUdldCgpIDw9IG1fZGF0YS0+bGVuZ3RoKCkpOworfQorCitQaXhlbEJ1
ZmZlcjo6flBpeGVsQnVmZmVyKCkgPSBkZWZhdWx0OworCitQaXhlbEJ1ZmZlciBQaXhlbEJ1ZmZl
cjo6ZGVlcENsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4geyBtX2NvbG9yU3BhY2UsIG1fZm9y
bWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+bGVuZ3RoKCkpIH07Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9y
U3BhY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGl4ZWxGb3JtYXQuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBpeGVsQnVmZmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQaXhlbEJ1ZmZlcik7CitwdWJsaWM6CisgICAgUGl4ZWxCdWZmZXIoRGVzdGluYXRpb25D
b2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIFJlZjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiYmKTsKKyAgICB+UGl4ZWxCdWZmZXIoKTsKKworICAgIFBpeGVsQnVmZmVyKFBp
eGVsQnVmZmVyJiYpID0gZGVmYXVsdDsKKyAgICBQaXhlbEJ1ZmZlciYgb3BlcmF0b3I9KFBpeGVs
QnVmZmVyJiYpID0gZGVmYXVsdDsKKworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisgICAgUGl4ZWxGb3JtYXQgZm9y
bWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KKyAgICBjb25zdCBJbnRTaXplJiBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgSlNDOjpVaW50OENsYW1wZWRBcnJheSYg
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCisgICAgUGl4ZWxCdWZmZXIg
ZGVlcENsb25lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNl
IG1fY29sb3JTcGFjZTsKKyAgICBQaXhlbEZvcm1hdCBtX2Zvcm1hdDsKKyAgICBJbnRTaXplIG1f
c2l6ZTsKKyAgICBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gbV9kYXRhOworfTsKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDgsOCArOTA4LDggQEAgdm9pZCBT
aGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKEltYWdlQgogICAgIGlmICghbGF5ZXJEYXRhKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+
ZGF0YSgpOwotICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGF1dG8mIGJsdXJQaXhlbEFy
cmF5ID0gbGF5ZXJEYXRhLT5kYXRhKCk7CisgICAgYmx1ckxheWVySW1hZ2UoYmx1clBpeGVsQXJy
YXkuZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKICAgICBs
YXllckltYWdlLnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MCwxNCArOTAsMTQgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuRwogICAgIFNjb3BlZFBpeGVsU3RvcmFnZU1vZGUgcGFja1NraXBQaXhlbHMoR0xf
UEFDS19TS0lQX1BJWEVMUywgMCwgbV9pc0ZvcldlYkdMMik7CiAgICAgU2NvcGVkQnVmZmVyQmlu
ZGluZyBzY29wZWRQaXhlbFBhY2tCdWZmZXJSZXNldChHTF9QSVhFTF9QQUNLX0JVRkZFUiwgMCwg
bV9pc0ZvcldlYkdMMik7CiAKLSAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBp
bWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCksIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkpOworICAgIGdsOjpSZWFkblBp
eGVsc1JvYnVzdEFOR0xFKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxl
bmd0aCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRh
KCkpOwogICAgIC8vIEZJWE1FOiBSZW5kZXJpbmcgdG8gR0xfUkdCIHRleHR1cmVzIHdpdGggYSBJ
T1N1cmZhY2UgYm91bmQgdG8gdGhlIHRleHR1cmUgaW1hZ2UgbGVhdmVzCiAgICAgLy8gdGhlIGFs
cGhhIGluIHRoZSBJT1N1cmZhY2UgaW4gaW5jb3JyZWN0IHN0YXRlLiBBbHNvIEFOR0xFIGdsOjpS
ZWFkUGl4ZWxzIHdpbGwgaW4gc29tZQogICAgIC8vIGNhc2VzIGV4cG9zZSB0aGUgbm9uLTI1NSB2
YWx1ZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTgwNAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAo
IWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpCi0gICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9t
UGl4ZWxzKGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRh
LT5kYXRhKCktPmRhdGEoKSk7CisgICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGlt
YWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT5kYXRhKCku
ZGF0YSgpKTsKICNlbmRpZgogICAgIHJldHVybiBpbWFnZURhdGE7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FuCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENvbnZlcnQgUkdC
QSB0byBCR1JBLiBCR1JBIGlzIENBSVJPX0ZPUk1BVF9BUkdCMzIgb24gbGl0dGxlLWVuZGlhbiBh
cmNoaXRlY3R1cmVzLgotICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gaW1hZ2VEYXRhLT5kYXRhKCkt
PmJ5dGVMZW5ndGgoKTsKLSAgICB1aW50OF90KiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxl
bmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKICAgICAgICAg
c3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CiAKQEAgLTEyOSw3ICsxMjksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FuCiAgICAgYXV0byBpbWFn
ZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKIAogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9k
YXRhKAotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBDQUlST19GT1JNQVRfQVJH
QjMyLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIGltYWdlRGF0YS0+
d2lkdGgoKSAqIDQpKTsKKyAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBDQUlST19G
T1JNQVRfQVJHQjMyLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIGlt
YWdlRGF0YS0+d2lkdGgoKSAqIDQpKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2VTdXJmYWNlKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDcgKzUy
OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBhdXRv
IGltYWdlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgIGludCByb3dCeXRlcyA9IGltYWdl
U2l6ZS53aWR0aCgpICogNDsKICAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcm93Qnl0ZXMgKiBp
bWFnZVNpemUuaGVpZ2h0KCk7Ci0gICAgdWludDhfdCogaW1hZ2VQaXhlbHMgPSBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0gaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpOwogICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGltYWdl
UGl4ZWxzLCBkYXRhU2l6ZSk7CiAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRh
UHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoJmltYWdlRGF0
YS5sZWFrUmVmKCksIGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0YSkpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNiBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJ
bWFnZUJ1ZmZlckNHQmFja2VuCiAgICAgQVNTRVJUKHV0aSk7CiAKICAgICBQbGF0Zm9ybUltYWdl
UHRyIGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJvdGVjdGVkUGl4ZWxB
cnJheTsKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAg
ICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFu
dWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KQEAgLTE5Miw3ICsxOTEsNyBAQCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAgICAgICAgIGlmICghaW1hZ2VE
YXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgcHJvdGVjdGVkUGl4
ZWxBcnJheSA9IG1ha2VSZWZQdHIoaW1hZ2VEYXRhLT5kYXRhKCkpOworICAgICAgICBhdXRvIHBy
b3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmKGltYWdlRGF0YS0+ZGF0YSgpKTsKICAgICAgICAg
c2l6ZV90IGRhdGFTaXplID0gcHJvdGVjdGVkUGl4ZWxBcnJheS0+Ynl0ZUxlbmd0aCgpOwogICAg
ICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKICAgICBBU1NFUlQodXRpKTsKIAogICAgIENHSW1hZ2VB
bHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OwotICAgIHVuc2lnbmVk
IGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgdW5zaWduZWQgY2hhciog
ZGF0YSA9IHNvdXJjZS5kYXRhKCkuZGF0YSgpOwogICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0
aXBsaWVkRGF0YTsKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcgogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgcGl4ZWxBcnJh
eSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBpbWFnZURhdGEtPnNpemUoKTsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFs
aXplZEZsb2F0cyhtX3ZhbHVlcyk7CkBAIC0yOTksMTYgKzI5OSwxNiBAQCB2b2lkIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTjoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KCpwaXhl
bEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJy
YXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfU0FUVVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRV
UkFURT4oKnBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAg
ICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFs
dWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFPigqcGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KCpwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgZWZmZWN0VHlwZTxG
RUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBw
aXhlbEFycmF5RGltZW5zaW9ucyk7CiAgICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3Bw
CShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTAg
KzEwOSwxMSBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTCiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byogaW1hZ2VSZXN1
bHQgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIHBpeGVsQXJy
YXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlm
ICghcGl4ZWxBcnJheSkKKyAgICBpZiAoIWltYWdlUmVzdWx0KQogICAgICAgICByZXR1cm47CiAK
KyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQtPmRhdGEoKTsKKwogICAgIExvb2t1
cFRhYmxlIHJlZFRhYmxlOwogICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7CiAgICAgTG9va3Vw
VGFibGUgYmx1ZVRhYmxlOwpAQCAtMTIwLDkgKzEyMSw5IEBAIHZvaWQgRkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVMKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBn
cmVlblRhYmxlLCBibHVlVGFibGUsIGFscGhhVGFibGUpOwogCiAgICAgSW50UmVjdCBkcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCBkcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgdWludDhfdCogZGF0YSA9IHBpeGVs
QXJyYXktPmRhdGEoKTsKKyAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChwaXhlbEFycmF5
LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0g
cGl4ZWxBcnJheS5kYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBp
eGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewogICAgICAg
ICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKICAgICAg
ICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsg
MV1dOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzAsOSArMjMwLDEwIEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQykgewogICAgICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwotICAgICAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICAgICAgaWYgKCFkc3RQaXhl
bEFycmF5KQorICAgICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCk7CiAKICAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAgICAgYXV0
byBzcmNQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwpAQCAtMjQwLDkgKzI0MSw5IEBAIHZvaWQgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCgqZHN0UGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKIAotICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc3JjUGl4ZWxBcnJh
eSwgKmRzdFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgbV9r
MSwgbV9rMiwgbV9rMywgbV9rNCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzc2LDEwICszNzYsMTIgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdAogICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghZHN0UGl4ZWxB
cnJheSkKKworICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwogCiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzcmNQ
aXhlbEFycmF5OwpAQCAtMzk1LDcgKzM5Nyw3IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnQKIAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAg
ICAgICpzcmNQaXhlbEFycmF5LAotICAgICAgICAqZHN0UGl4ZWxBcnJheSwKKyAgICAgICAgZHN0
UGl4ZWxBcnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6
ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsMTAgKzEwMCwxMSBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mCiAgICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwog
CiAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+
ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwog
ICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3
aW5nUmVjdCk7CiAKQEAgLTE0MCw3ICsxNDEsNyBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpw
bGF0Zm9ybUFwcGx5U29mCiAgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZHN0SW5kZXggKyBk
aXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKICAgICAgICAgICAgIGludCBz
cmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJ
bWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNl
dFkpOwogCi0gICAgICAgICAgICB1bnNpZ25lZCogZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS0+ZGF0YSgpICsgZHN0SW5kZXgpOworICAgICAg
ICAgICAgdW5zaWduZWQqIGRzdFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgZHN0SW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1gg
PCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBw
YWludFNpemUuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAqZHN0UGl4ZWxQdHIgPSAwOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsOCArMTA1LDggQEAgdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIGlmICghaW1hZ2VEYXRhKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5k
YXRhKCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7
CisgICAgYXV0byYgc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGNvbnRl
eHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS5kYXRhKCksIGltYWdlRGF0YS0+
c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7CiAgICAgCiAgICAgcmVzdWx0
SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJ
KHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsMTQgKzUyNCwx
NSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhCiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRvKiBkc3RQaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAo
IWRzdFBpeGVsQXJyYXkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBz
ZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlu
LT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTU0NCw3ICs1NDUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhCiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHBsYXRmb3JtQXBwbHkoKmRzdFBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEs
IGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKKyAg
ICBwbGF0Zm9ybUFwcGx5KGRzdFBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUu
d2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0
cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJl
dmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NiwyMSArNDc2LDIyIEBAIHZv
aWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIHJlc3V0UGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1
dFBpeGVsQXJyYXkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgYXV0byYgcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNl
dElzQWxwaGFJbWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1dFBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGluLT5jb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChyZXN1dFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhz
IG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8g
c3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChs
aWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5l
bFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAv
LyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRh
dGlvbgogCiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOwotICAgIGRyYXdMaWdodGluZygqcmVzdXRQaXhlbEFycmF5LCBhYnNvbHV0ZVBh
aW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgZHJhd0xp
Z2h0aW5nKHJlc3V0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1
dGVQYWludFNpemUuaGVpZ2h0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0NCwxNiArMjQ0LDE3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRv
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1
dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBu
dWxscHRyOwotICAgIGlmICghZHN0UGl4ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ut
PmRhdGEoKTsKKwogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAg
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFn
ZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCiAgICAgSW50U2l6ZSByYWRpdXMgPSBm
bG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKLSAgICBpZiAo
cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoKmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0
LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBpZiAocGxhdGZvcm1BcHBs
eURlZ2VuZXJhdGUoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0
aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBGaWx0ZXImIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOwpAQCAtMjY1LDEyICsyNjYsMTIgQEAgdm9pZCBGRU1vcnBo
b2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4o
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQg
cmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVz
LmhlaWdodCgpKTsKIAotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSgqZHN0UGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgIGlmIChwbGF0
Zm9ybUFwcGx5RGVnZW5lcmF0ZShkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFk
aXVzWCwgcmFkaXVzWSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhOwogICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc3JjUGl4ZWxB
cnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9IGRzdFBpeGVsQXJy
YXk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZHN0UGl4ZWxBcnJheTsKICAg
ICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICog
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihl
ZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBw
YWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1ggKiBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NywxNSArMzk3LDE2IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uV29ya2VyKEZpbGwKIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogewogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+
ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5kYXRhKCk7CisKICAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
CiAKICAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGl4ZWxBcnJheS0+
emVyb0ZpbGwoKTsKKyAgICAgICAgcGl4ZWxBcnJheS56ZXJvRmlsbCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC00NDAsNyArNDQxLDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJh
bXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwogICAgICAgICAgICAgICAgIHBhcmFtcy5m
aWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gcGl4ZWxB
cnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5Owog
ICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAg
ICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDU2LDcgKzQ1Nyw3IEBAIHZvaWQgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICB9CiAKICAgICAvLyBGYWxsYmFj
ayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0
aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZpbGxSZWdpb24oKnBp
eGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBmaWxs
UmVnaW9uKHBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsK
IH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1
bGVuY2VUeXBlIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAyNzcyMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw5ICsyMDEsOSBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJy
YXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBp
eGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9
IGltYWdlQXJyYXktPmxlbmd0aCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5
ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhl
bERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGlt
YWdlQXJyYXkubGVuZ3RoKCk7CiAKICAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIg
cGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKICAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3Ro
ICUgNCkpOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVy
dGVkSW1hZ2VCdWYKICAgICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZUJ1
ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwogICAg
IGlmICghY29udmVydGVkSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdl
Qnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3Qp
OworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZElt
YWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkK
QEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdl
RGF0CiAgICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xv
clNwYWNlKGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0KTsKICAgICBpZiAoIWNv
bnZlcnRlZEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKCpj
b252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKKyAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRl
c3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQo
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBPcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBAIC01MDAsMTQgKzUwMCwx
NCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsCiAgICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXpl
KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
ICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBk
ZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
Y29sb3JTcGFjZSkKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOworICAg
ICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VEYXRh
VG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAq
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1h
Z2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
cmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAJ
KHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HCiAgICAg
ICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogCi0gICAgOjpnbFJl
YWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpKTsKKyAg
ICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVp
Z2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEo
KSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4
ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDEsMTEgKzIwMSwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVh
dGVSYXN0CiAgICAgCiAgICAgLy8gV2UgY291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VE
YXRhIGNvdWxkIGJlIG51bGxwdHIuIEEgY2FzZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1
Z2UsIGltYWdlRGF0YTo6Y3JlYXRlCiAgICAgLy8gY2FuIHJldHVybiBhIG51bGxwdHIgYmVjYXVz
ZSBkYXRhIHNpemUgaGFzIG92ZXJmbG93ZWQuIFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0
Ci0gICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0YSgpKQorICAgIGlmICghaW1h
Z2VEYXRhKQogICAgICAgICByZXR1cm4gY3JlYXRlU2hhcGUoKTsKIAotICAgIGF1dG8qIHBpeGVs
QXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0
YS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxl
bmd0aCgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVs
IGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAs
IDEpICogMjU1LjBmKSk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hh
cGU+IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgICAgIGZvciAoaW50IHkgPSBtaW5CdWZmZXJZOyB5
IDwgbWF4QnVmZmVyWTsgKyt5KSB7CiAgICAgICAgICAgICBpbnQgc3RhcnRYID0gLTE7CiAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlUmVjdC53aWR0aCgpOyArK3gsIHBpeGVs
QXJyYXlPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBwaXhl
bEFycmF5LT5pdGVtKHBpeGVsQXJyYXlPZmZzZXQpOworICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxBcnJheU9mZnNldCk7CiAgICAgICAgICAgICAg
ICAgYm9vbCBhbHBoYUFib3ZlVGhyZXNob2xkID0gYWxwaGEgPiBhbHBoYVBpeGVsVGhyZXNob2xk
OwogICAgICAgICAgICAgICAgIGlmIChzdGFydFggPT0gLTEgJiYgYWxwaGFBYm92ZVRocmVzaG9s
ZCkgewogICAgICAgICAgICAgICAgICAgICBzdGFydFggPSB4OwpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3NzIyOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMjEtMDUtMDggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIEZhY3RvciBvdXQgcGl4ZWwgYnVmZmVyIGZyb20gRE9NIHNwZWNpZmljIElt
YWdlRGF0YSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI1NTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXBkYXRlIGZvciBJbWFnZURhdGE6OmRhdGEoKSByZXR1cm5pbmcgYSByZWZlcmVuY2Uu
CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6Oklt
YWdlRGF0YT4+OjplbmNvZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKwogMjAyMS0wNS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFVzZSB0aGUgbmV3IGxp
YnNvdXAgbmV0d29yayBtZXRyaWNzIEFQSQpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOSArMzY3LDkg
QEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldAogewogICAgIE1FU1NB
R0VfQ0hFQ0sobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnksICJXZSBjYW4ndCBydW4gZ2V0SW1h
Z2VEYXRhIHdpdGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOwogCi0gICAgaWYgKGltYWdl
RGF0YSAmJiBpbWFnZURhdGEtPmRhdGEoKSkgewotICAgICAgICBNRVNTQUdFX0NIRUNLKGltYWdl
RGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkgPD0gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkt
PnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2YgZ2V0SW1hZ2VEYXRhIGlzIHRvbyBzbWFsbCIp
OwotICAgICAgICBtZW1jcHkobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSk7
CisgICAgaWYgKGltYWdlRGF0YSkgeworICAgICAgICBNRVNTQUdFX0NIRUNLKGltYWdlRGF0YS0+
ZGF0YSgpLmJ5dGVMZW5ndGgoKSA8PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgp
LCAiU2htZW0gZm9yIHJldHVybiBvZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7CisgICAg
ICAgIG1lbWNweShtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURhdGEt
PmRhdGEoKS5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIG1lbXNldChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAw
LCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzcy
MDkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTE5LDkgKzMxMTksOSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVm
PFdlYkNvcmU6OkltYWdlRGF0CiB7CiAgICAgZW5jb2RlciA8PCBpbWFnZURhdGEtPnNpemUoKTsK
IAotICAgIGF1dG8gcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEtPmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmF3RGF0YS0+ZGF0YSgpLCByYXdEYXRhLT5ieXRlTGVu
Z3RoKCksIDEpOworICAgIGF1dG8mIHJhd0RhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYXdEYXRhLmJ5dGVMZW5ndGgoKSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmF3RGF0YS5kYXRhKCksIHJhd0RhdGEu
Ynl0ZUxlbmd0aCgpLCAxKTsKIH0KIAogdGVtcGxhdGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjAwLDkgKzIwMCw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gV2ViQ29yZTo6SW1hZ2VEYXRhOjpjcmVhdGUoc3Jj
UmVjdC5zaXplKCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRh
KCkpCisgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3Ro
KCk7CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5n
dGgoKTsKIAogICAgICAgICBJUEM6OlRpbWVvdXQgdGltZW91dCA9IDVfczsKICAgICAgICAgU2hh
cmVkTWVtb3J5KiBzaGFyZWRNZW1vcnkgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGRhdGFTaXplLCB0aW1lb3V0KTsKQEAgLTIxNCw5
ICsyMTQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0Nv
bnRleHRBc3luYygpOwogCiAgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS0+d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUodGltZW91dCkpCi0gICAgICAgICAgICBt
ZW1jcHkoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRh
dGFTaXplKTsKKyAgICAgICAgICAgIG1lbWNweShpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIHNo
YXJlZE1lbW9yeS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1lbXNldChpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCAwLCBkYXRhU2l6ZSk7CisgICAgICAg
ICAgICBtZW1zZXQoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCAwLCBkYXRhU2l6ZSk7CiAgICAg
ICAgIHJldHVybiBpbWFnZURhdGE7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428090</attachid>
            <date>2021-05-08 12:30:32 -0700</date>
            <delta_ts>2021-05-08 16:58:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210508123031.patch</filename>
            <type>text/plain</type>
            <size>64171</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wNS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZm
ZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJlIHRvIGZpeCBsYXllcmluZyB2aW9s
YXRpbmcgdXNlIG9mIERPTSBsZXZlbCBJbWFnZURhdGEgYmVpbmcKKyAgICAgICAgdXNlZCBieSBw
bGF0Zm9ybSBjb2RlIGJ5IGZhY3RvcmluZyBvdXQgdGhlIHBpeGVsIHN0b3JhZ2UgaW50byBhIG5l
dworICAgICAgICBQaXhlbEJ1ZmZlciBjbGFzcy4gU2luY2UgaXQgd2lsbCBiZSBhIGxpdHRsZSBt
b3JlIGdlbmVyYWwgdGhhdCAKKyAgICAgICAgSW1hZ2VEYXRhIGlzIG5vdyAodGhvdWdoIEltYWdl
RGF0YSB3aWxsIG5lZWQgdG8gZ2FpbiB0aGVzZSBzb29uKQorICAgICAgICBQaXhlbEJ1ZmZlciBh
bHNvIGNhcHR1cmVzIHRoZSBwaXhlbCBmb3JtYXQgYW5kIGNvbG9yIHNwYWNlIHRoZSBwaXhlbAor
ICAgICAgICBkYXRhIHJlcHJlc2VudHMuCisKKyAgICAgICAgV2hpbGUgaGVyZSwgdXBkYXRlIElt
YWdlRGF0YTo6ZGF0YSgpIHRvIHJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbgorICAgICAg
ICBhIHBvaW50ZXIgdG8gaW5kaWNhdGUgaXQgaXMgbmV2ZXIgbnVsbCBhbmQgdXBkYXRlIGFsbCB0
aGUgY2FsbGVycy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJ
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRl
cm1pbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWlu
YWwpOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6
ZGVlcENsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAqIGh0bWwvSW1hZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpj
b2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Zm9ybWF0IGNv
bnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5SW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhl
bHBlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
eGVsQnVmZmVyOjpkZWVwQ2xvbmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmZvcm1hdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9z
aXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rl
c3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjEtMDUtMDgg
IFJpY2t5IE1vbmRlbGxvICA8cm1vbmRlbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0
eXBvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyODgsNiArMTI4OCw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxGb3JtYXQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMTIsNiArMjAxMiw3IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVy
c2FsU3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eUJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQx
NDUsNiArNDE0NSw3IEBACiAJCUJDRTY1OUE5MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U2NTlB
ODBFQTkyN0I5MDA3RTQ1MzMgLyogVGhlbWVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBU
aGVtZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNFNjU5RTUwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggKi87IH07CiAJCUJDRTY1QkVC
MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0U2OTFF
NTI2NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhl
bEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5MTUxMTIwRDYwODAw
NjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi87IH07CiAJCUJDRTc4OTg2MTEyMEU3QTYwMDYw
RUNFNSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oICovOyB9OwogCQlC
Q0U5M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ0MTUx
N0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oICovOyB9OwpAQCAt
MTQxNTQsNiArMTQxNTUsOCBAQAogCQlCQzQ2QzFGOTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NQ
YWdlUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NQYWdlUnVs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ2QzIwNDBDMEREQ0ExMDAyMENG
QzMgLyogSlNDU1NTdHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ1NTU3R5bGVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM0NkMyMDUwQzBERENBMTAwMjBDRkMzIC8qIEpTQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NTU1N0eWxlUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzQ4MzlCQTI2NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGl4ZWxCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkM0ODM5QkIyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBpeGVsQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM0OTE4QzAwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRnJhbWVFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0OTE4QzEwQkZFQTA1MDAwOUQ2MzE2IC8q
IEpTSFRNTEZyYW1lRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNIVE1MRnJhbWVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDkx
OEMyMEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MDI1LDYgKzI3MDI4LDggQEAKIAkJCQkyRDUw
MDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVD
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVE
MDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCUJDNDgzOUJCMjY0NjE4MUEwMEEyOEI2MiAv
KiBQaXhlbEJ1ZmZlci5jcHAgKi8sCisJCQkJQkM0ODM5QkEyNjQ2MTgxQTAwQTI4QjYyIC8qIFBp
eGVsQnVmZmVyLmggKi8sCiAJCQkJQkNBNTU5MTIyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9y
bWF0LmggKi8sCiAJCQkJNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCAqLywKIAkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oICovLApAQCAtMzQ0MzMsNiArMzQ0MzgsNyBAQAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5
M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzU4
NTk3QzIzQTFGQ0YzMDBDNzQ1NzIgLyogUGluLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMEZGMkE1
RTExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNF
NjkxRTUyNjQ2MzdGQzAwRUJEQzNBIC8qIFBpeGVsQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRDdEMzM0NDFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNBNTU5MTQyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREVGQTIyODFFNzY2OUU4MDAwQUU5OUMgLyogUGxhdGZv
cm1BdWRpb0RhdGEuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCwxMyArNDAsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEp
CiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvKiBk
YXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgZGF0YSA9IGltYWdlRGF0YS0+ZGF0
YSgpOwogICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltYWdlRGF0YSkpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVj
dCh2bSwgZGF0YU5hbWUsIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBk
YXRhKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpOwogICAgIC8vIEZJWE1FOiBBZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQs
IGFuZCBzd2l0Y2ggdG8gcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQotICAgIHZtLmhlYXAuZGVw
cmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEtPmxlbmd0aCgpKTsKKyAgICB2bS5oZWFwLmRl
cHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1
cm4gd3JhcHBlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBp
bWFnZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLnBvc3NpYmx5U2hh
cmVkQnVmZmVyKCk7CiAgICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNv
ZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTIyNiw4ICsxMjI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICB3cml0ZShJbWFnZURhdGFUYWcpOwogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPndpZHRo
KCkpOwogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPmhlaWdodCgpKTsKLSAgICAgICAgICAg
ICAgICB3cml0ZShkYXRhLT5kYXRhKCktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB3cml0
ZShkYXRhLT5kYXRhKCktPmRhdGEoKSwgZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAg
ICAgICAgICAgd3JpdGUoZGF0YS0+ZGF0YSgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB3
cml0ZShkYXRhLT5kYXRhKCkuZGF0YSgpLCBkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF1
dG8qIHJlZ0V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwT2JqZWN0Kj4odm0sIG9iaikpIHsKQEAg
LTMzOTAsOSArMzM5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAg
ICAgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOworICAg
ICAgICAgICAgICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKS5kYXRhKCksIG1fcHRyLCBsZW5ndGgp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLT56ZXJv
RmlsbCgpOworICAgICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLnplcm9GaWxsKCk7CiAgICAg
ICAgICAgICBtX3B0ciArPSBsZW5ndGg7CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShy
ZXN1bHQuZ2V0KCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3ODIsNyBAQCB2b2lkIEltYWdlQml0bWFw
OjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4CiAgICAgLy8gICAgICBpbnRlcm5hbCBzbG90LgogICAg
IC8vIDYuMi4gSWYgSXNEZXRhY2hlZEJ1ZmZlcihidWZmZXIpIGlzIHRydWUsIHRoZW4gcmV0dXJu
IHAgcmVqZWN0ZWQgd2l0aCBhbgogICAgIC8vICAgICAgIkludmFsaWRTdGF0ZUVycm9yIiBET01F
eGNlcHRpb24uCi0gICAgaWYgKGltYWdlRGF0YS0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAg
ICBpZiAoaW1hZ2VEYXRhLT5kYXRhKCkuaXNEZXRhY2hlZCgpKSB7CiAgICAgICAgIHByb21pc2Uu
cmVqZWN0KEludmFsaWRTdGF0ZUVycm9yLCAiSW1hZ2VEYXRhJ3Mgdmlld2VkIGJ1ZmZlciBoYXMg
YmVlbiBkZXRhY2hlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSW1hZ2VEYXRhLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmMKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFJhbmdlRXJyb3IsICJPdXQgb2YgbWVtb3J5Il9zIH07CiAgICAgfQogICAgIGJ5dGVBcnJh
eS0+emVyb0ZpbGwoKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6ZSwg
Ynl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bWFnZURhdGEoeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgc2l6ZSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCkgfSkpOwogfQogCiBSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtNjgsNyAr
NjgsNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zCiAgICAgYXV0
byBieXRlQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChk
YXRhU2l6ZS51bnNhZmVHZXQoKSk7CiAgICAgaWYgKCFieXRlQXJyYXkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YShzaXplLCBieXRl
QXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdl
RGF0YSh7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBz
aXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9KSk7CiB9CiAKIFJlZlB0cjxJbWFnZURh
dGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1w
ZWRBcnJheT4mJiBieXRlQXJyYXkpCkBAIC03Niw3ICs3Niw4IEBAIFJlZlB0cjxJbWFnZURhdGE+
IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnMKICAgICBhdXRvIGRhdGFTaXplID0gSW1hZ2VEYXRhOjpk
YXRhU2l6ZShzaXplKTsKICAgICBpZiAoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGRhdGFT
aXplLnVuc2FmZUdldCgpID4gYnl0ZUFycmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHNpemUsIFdURk1vdmUo
Ynl0ZUFycmF5KSkpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdURk1v
dmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFn
ZURhdGE6OmNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5LCB1bnNpZ25l
ZCBzdywgT3B0aW9uYWw8dW5zaWduZWQ+IHNoKQpAQCAtOTksMjIgKzEwMCwyMiBAQCBFeGNlcHRp
b25PcjxSZWY8SW1hZ2VEYXRhPj4gSW1hZ2VEYXRhOjpjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOwogfQogCi1JbWFnZURhdGE6OkltYWdlRGF0YShjb25zdCBJbnRTaXplJiBz
aXplLCBSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5KQotICAgIDogbV9zaXplKHNp
emUpCi0gICAgLCBtX2RhdGEoV1RGTW92ZShieXRlQXJyYXkpKQorSW1hZ2VEYXRhOjpJbWFnZURh
dGEoUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlcikKKyAgICA6IG1fcGl4ZWxCdWZmZXIoV1RGTW92
ZShwaXhlbEJ1ZmZlcikpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTigoc2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgp
KTsKIH0KIAorSW1hZ2VEYXRhOjp+SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OworCiBSZWY8SW1hZ2VE
YXRhPiBJbWFnZURhdGE6OmRlZXBDbG9uZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1hZ2VEYXRhKG1fc2l6ZSwgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEt
PmRhdGEoKSwgbV9kYXRhLT5sZW5ndGgoKSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bWFnZURhdGEobV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkpOwogfQogCiBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSkKIHsK
ICAgICAvLyBQcmludCBvdXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHBpeGVsIGRhdGEgYXJyYXkKLSAg
ICByZXR1cm4gdHMgPDwgaW1hZ2VEYXRhLmRhdGEoKTsKKyAgICByZXR1cm4gdHMgPDwgJmltYWdl
RGF0YS5kYXRhKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw5ICsyOSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbk9yLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQxLDIxICszOSwyNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwg
UmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhj
ZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYs
IHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1bnNpZ25lZD4gc2gpOworICAgIFdFQkNPUkVfRVhQT1JU
IH5JbWFnZURhdGEoKTsKIAotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQotICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0g
ICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIGNv
bnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyLnNpemUoKTsg
fQorICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuc2l6ZSgpLndp
ZHRoKCk7IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5z
aXplKCkuaGVpZ2h0KCk7IH0KIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLnB0cigpOyB9CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyLmRhdGEoKTsgfQogCiAgICAgUmVmPEltYWdlRGF0
YT4gZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CisgICAg
UGl4ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQo
KTsgfQorCiBwcml2YXRlOgotICAgIEltYWdlRGF0YShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4
Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBJbWFnZURhdGEoUGl4ZWxCdWZmZXImJik7CisKICAgICBz
dGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplKGNvbnN0IElu
dFNpemUmKTsKIAotICAgIEludFNpemUgbV9zaXplOwotICAgIFJlZjxVaW50OENsYW1wZWRBcnJh
eT4gbV9kYXRhOworICAgIFBpeGVsQnVmZmVyIG1fcGl4ZWxCdWZmZXI7CiB9OwogCiBXRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgSW1hZ2VEYXRhJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjc3
MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBS
ZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVFbXB0eUltYWcKIHsKICAgICBhdXRvIGRhdGEgPSBJbWFn
ZURhdGE6OmNyZWF0ZShzaXplKTsKICAgICBpZiAoZGF0YSkKLSAgICAgICAgZGF0YS0+ZGF0YSgp
LT56ZXJvRmlsbCgpOworICAgICAgICBkYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKICAgICByZXR1
cm4gZGF0YTsKIH0KIApAQCAtMjIyMCw3ICsyMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIWRhdGEuZGF0YSgpIHx8IGRhdGEuZGF0YSgpLT5pc0RldGFjaGVkKCkpCisgICAg
aWYgKGRhdGEuZGF0YSgpLmlzRGV0YWNoZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KGRpcnR5V2lkdGggPCAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjMw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NDksNyArNDc0OSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgIHRleEltYWdlSW1wbChmdW5j
dGlvbklELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwg
em9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRP
TVNvdXJjZTo6SW1hZ2UsIGZhbHNlLCBiaXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0bWFw
LT5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSwgc291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5w
YWNrSW1hZ2VIZWlnaHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBS
ZWZQdHI8SW1hZ2VEYXRhPiYgcGl4ZWxzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAgICAg
IGlmIChwaXhlbHMtPmRhdGEoKS0+aXNEZXRhY2hlZCgpKSB7CisgICAgICAgIGlmIChwaXhlbHMt
PmRhdGEoKS5pc0RldGFjaGVkKCkpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJUaGUgc291cmNl
IGRhdGEgaGFzIGJlZW4gZGV0YWNoZWQuIik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAg
ICAgICB9CkBAIC00Nzc4LDcgKzQ3NzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCCiAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3Rp
bmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxp
cCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCiAgICAgICAgIGlmICghbV91
bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFICYmICFzZWxlY3RpbmdTdWJSZWN0YW5nbGUgJiYgZGVwdGggPT0gMSkgewogICAgICAg
ICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJ5dGVMZW5ndGggPSBw
aXhlbHMtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHBp
eGVscy0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZf
UkVWKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9S
RVYgdHlwZSBwYWNrL3VucGFjayBpc24ndCBpbXBsZW1lbnRlZC4KQEAgLTQ3OTQsMjMgKzQ3OTQs
MjMgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICBp
ZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleEltYWdlMkQpIHsKICAgICAg
ICAgICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAg
ICAgICAgICAgICAgIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LndpZHRoKCksIGFkanVzdGVkU291
cmNlSW1hZ2VSZWN0LmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwg
Ynl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVl
ZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1Yklt
YWdlMkQpIHsKICAgICAgICAgICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qu
d2lkdGgoKSwgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAg
ICAgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGJ5dGVMZW5ndGgsIG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNFKEFO
R0xFKQogICAgICAgICAgICAgLy8gM0QgZnVuY3Rpb25zLgogICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uSUQgPT0gVGV4SW1hZ2VGdW5jdGlvbklEOjpUZXhJbWFnZTNEKSB7CiAgICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0aCgpLCBhZGp1
c3RlZFNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKSwgZGVwdGgsIDAsCi0gICAgICAgICAgICAgICAg
ICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRh
KCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5k
YXRhKCkgOiBwaXhlbHMtPmRhdGEoKS5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSUQgPT0gVGV4SW1hZ2VG
dW5jdGlvbklEOjpUZXhTdWJJbWFnZTNEKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwKICAg
ICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwgYWRqdXN0
ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksIGRlcHRoLAotICAgICAgICAgICAgICAgICAgICBm
b3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDog
cGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgYnl0ZUxlbmd0aCkpOworICAgICAgICAgICAgICAgICAg
ICBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgp
IDogcGl4ZWxzLT5kYXRhKCkuZGF0YSgpLCBieXRlTGVuZ3RoKSk7CiAgICAgICAgICAgICB9CiAj
ZWxzZQogICAgICAgICAgICAgLy8gV2ViR0wgMi4wIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhl
IEFOR0xFIGJhY2tlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksOCArMTQ1OSw4
IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG8KIFJlZjxKU09OOjpB
cnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9ySW1hZ2VE
YXRhKGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhKQogewogICAgIGF1dG8gZGF0YSA9IEpTT046
OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbWFn
ZURhdGEuZGF0YSgpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdl
RGF0YS5kYXRhKCktPml0ZW0oaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1hZ2VE
YXRhLmRhdGEoKS5sZW5ndGgoKTsgKytpKQorICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0
YS5kYXRhKCkuaXRlbShpKSk7CiAKICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXlPZjxKU09O
OjpWYWx1ZT46OmNyZWF0ZSgpOwogICAgIGFycmF5LT5hZGRJdGVtKFdURk1vdmUoZGF0YSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NzksNyArNzc5LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAg
ICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1
bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFP
cDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZ
KSkKKyAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzb3VyY2VE
YXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgs
IDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBB
bHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwg
ZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMs
MTggKzczLDE4IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAg
ICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogc3JjUGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXkubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVs
T2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1
aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOwogICAgICAg
ICBpZiAoIWEpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3Jj
UGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1Bp
eGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3Jj
UGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICB1aW50OF90IHIgPSBz
cmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQ
aXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3Jj
UGl4ZWxBcnJheS5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CiAKICAgICAgICAgZG91YmxlIGx1bWEg
PSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAy
NTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEp
OworICAgICAgICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAg
IH0KIAogICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwpAQCAtMjQxLDEwICsyNDEsMTAgQEAg
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZQogICAgICAgICBkZXN0UmVj
dC5zZXRZKC1zcmNSZWN0U2NhbGVkLnkoKSk7CiAKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3RTY2FsZWQuc2l6ZSgpKQotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0Zp
bGwoKTsKKyAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKIAogICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7Ci0gICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgp
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0
Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRl
c1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CiAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93KCk7CiAgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cg
KyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWwKICAgICB1aW50OF90KiBkZXN0Um93cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKLSAgICB1aW50OF90KiBzcmNSb3dzID0g
aW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQ
ZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBp
bWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVy
Um93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKICAg
ICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BpeGVsQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1BpeGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
aXplLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJiBkYXRhKQorICAgIDogbV9jb2xvclNw
YWNlIHsgY29sb3JTcGFjZSB9CisgICAgLCBtX2Zvcm1hdCB7IGZvcm1hdCB9CisgICAgLCBtX3Np
emUgeyBzaXplIH0KKyAgICAsIG1fZGF0YSB7IFdURk1vdmUoZGF0YSkgfQoreworICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oKG1fc2l6ZS5hcmVhKCkgKiA0KS51
bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKK30KKworUGl4ZWxCdWZmZXI6On5QaXhl
bEJ1ZmZlcigpID0gZGVmYXVsdDsKKworUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9u
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgbV9jb2xvclNwYWNlLCBtX2Zvcm1hdCwgbV9zaXpl
LCBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxlbmd0
aCgpKSB9OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
aXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBQaXhlbEJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxC
dWZmZXIpOworcHVibGljOgorICAgIFBpeGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQsIGNvbnN0IEludFNpemUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4m
Jik7CisgICAgflBpeGVsQnVmZmVyKCk7CisKKyAgICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYm
KSA9IGRlZmF1bHQ7CisgICAgUGl4ZWxCdWZmZXImIG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9
IGRlZmF1bHQ7CisKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorICAgIFBpeGVsRm9ybWF0IGZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9ybWF0OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgIEpTQzo6VWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KKworICAgIFBpeGVsQnVmZmVyIGRlZXBDbG9uZSgp
IGNvbnN0OworCitwcml2YXRlOgorICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3Bh
Y2U7CisgICAgUGl4ZWxGb3JtYXQgbV9mb3JtYXQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAg
UmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IG1fZGF0YTsKK307CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lv
biAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA4LDggKzkwOCw4IEBAIHZvaWQgU2hhZG93Qmx1cjo6
Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUIKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEoKTsKLSAg
ICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCks
IGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBhdXRvJiBibHVyUGl4ZWxBcnJheSA9IGxheWVy
RGF0YS0+ZGF0YSgpOworICAgIGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LmRhdGEoKSwg
Ymx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7CiAgICAgbGF5ZXJJbWFnZS5w
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTAsMTQgKzkwLDE0IEBAIFJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcK
ICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tTa2lwUGl4ZWxzKEdMX1BBQ0tfU0tJUF9Q
SVhFTFMsIDAsIG1faXNGb3JXZWJHTDIpOwogICAgIFNjb3BlZEJ1ZmZlckJpbmRpbmcgc2NvcGVk
UGl4ZWxQYWNrQnVmZmVyUmVzZXQoR0xfUElYRUxfUEFDS19CVUZGRVIsIDAsIG1faXNGb3JXZWJH
TDIpOwogCi0gICAgZ2w6OlJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoMCwgMCwgaW1hZ2VEYXRhLT53
aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBp
bWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RB
TkdMRSgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKICAgICAv
LyBGSVhNRTogUmVuZGVyaW5nIHRvIEdMX1JHQiB0ZXh0dXJlcyB3aXRoIGEgSU9TdXJmYWNlIGJv
dW5kIHRvIHRoZSB0ZXh0dXJlIGltYWdlIGxlYXZlcwogICAgIC8vIHRoZSBhbHBoYSBpbiB0aGUg
SU9TdXJmYWNlIGluIGluY29ycmVjdCBzdGF0ZS4gQWxzbyBBTkdMRSBnbDo6UmVhZFBpeGVscyB3
aWxsIGluIHNvbWUKICAgICAvLyBjYXNlcyBleHBvc2UgdGhlIG5vbi0yNTUgdmFsdWVzLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU4MDQKICNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKCFjb250ZXh0QXR0
cmlidXRlcygpLmFscGhhKQotICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbWFn
ZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIGltYWdlRGF0YS0+ZGF0YSgpLT5k
YXRhKCkpOworICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbWFnZURhdGEtPndp
ZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAj
ZW5kaWYKICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0R0xDYWlyby5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsOCArMTEzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRUb0NhbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDb252ZXJ0IFJHQkEgdG8gQkdSQS4g
QkdSQSBpcyBDQUlST19GT1JNQVRfQVJHQjMyIG9uIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJl
cy4KLSAgICBzaXplX3QgdG90YWxCeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3Ro
KCk7Ci0gICAgdWludDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAg
ICBzaXplX3QgdG90YWxCeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKKyAg
ICB1aW50OF90KiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChw
aXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwogCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbgogICAgIGF1dG8gaW1hZ2VTaXplID0gaW1h
Z2VEYXRhLT5zaXplKCk7CiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZh
Y2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAg
ICAgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VE
YXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPndpZHRoKCkgKiA0
KSk7CisgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPndp
ZHRoKCkgKiA0KSk7CiAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShXVEZN
b3ZlKGltYWdlU3VyZmFjZSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0R0xDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FuCiAgICAgYXV0byBpbWFnZVNpemUg
PSBpbWFnZURhdGEtPnNpemUoKTsKICAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVNpemUud2lkdGgo
KSAqIDQ7CiAgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJvd0J5dGVzICogaW1hZ2VTaXplLmhl
aWdodCgpOwotICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKTsKKyAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEo
KTsKICAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChpbWFnZVBpeGVscywgZGF0
YVNpemUpOwogICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZpbWFnZURhdGEubGVha1JlZigp
LCBpbWFnZVBpeGVscywgZGF0YVNpemUsIHJlbGVhc2VJbWFnZURhdGEpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODQsNyArMTg0LDYgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJD
R0JhY2tlbgogICAgIEFTU0VSVCh1dGkpOwogCiAgICAgUGxhdGZvcm1JbWFnZVB0ciBpbWFnZTsK
LSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVsQXJyYXk7CiAKICAg
ICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3Mg
ZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBv
c2l0ZSBvbiB0b3Agb2YgYmxhY2suCkBAIC0xOTIsNyArMTkxLDcgQEAgUmV0YWluUHRyPENGRGF0
YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbgogICAgICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBt
YWtlUmVmUHRyKGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBwcm90ZWN0ZWRQaXhl
bEFycmF5ID0gbWFrZVJlZihpbWFnZURhdGEtPmRhdGEoKSk7CiAgICAgICAgIHNpemVfdCBkYXRh
U2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgSW50U2l6
ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4g
Y2ZEYXRhKGNvbnN0CiAgICAgQVNTRVJUKHV0aSk7CiAKICAgICBDR0ltYWdlQWxwaGFJbmZvIGRh
dGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
ID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3Vy
Y2UuZGF0YSgpLmRhdGEoKTsKICAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7
CiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDcgKzI5MCw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIK
ICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogcGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBpbWFnZURh
dGEtPmRhdGEoKTsKICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRh
LT5zaXplKCk7CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMo
bV92YWx1ZXMpOwpAQCAtMjk5LDE2ICsyOTksMTYgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcgogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAg
ICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPigqcGl4ZWxBcnJheSwgdmFs
dWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9u
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KCpwaXhl
bEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURT4oKnBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAg
ICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPigqcGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURp
bWVuc2lvbnMpOwogICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkocmV2aXNpb24g
Mjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTEgQEAg
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5UwogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VS
ZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXBpeGVsQXJy
YXkpCisgICAgaWYgKCFpbWFnZVJlc3VsdCkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYg
cGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0LT5kYXRhKCk7CisKICAgICBMb29rdXBUYWJsZSByZWRU
YWJsZTsKICAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwogICAgIExvb2t1cFRhYmxlIGJsdWVU
YWJsZTsKQEAgLTEyMCw5ICsxMjEsOSBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRm
b3JtQXBwbHlTCiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwg
Ymx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAogICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1
ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBp
eGVsQXJyYXktPmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LT5kYXRh
KCk7CisgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQocGl4ZWxBcnJheSwgZHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0
aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXku
ZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8
IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgZGF0YVtwaXhl
bE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CiAgICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMwLDkgKzIzMCwxMCBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsK
ICAgICAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICAgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0
SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgICAgIGlmICghZHN0UGl4ZWxBcnJheSkKKyAg
ICAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOwogCiAgICAg
ICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgICAgIGF1dG8gc3JjUGl4ZWxB
cnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKQEAgLTI0MCw5ICsyNDEsOSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgSW50
UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKKyAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAg
ICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNyY1BpeGVsQXJyYXksICpkc3RQaXhl
bEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICAgICAgcGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoKnNyY1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1f
azMsIG1fazQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3NiwxMCArMzc2LDEyIEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnQKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1
bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCisKKyAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKIAogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3JjUGl4ZWxBcnJheTsK
QEAgLTM5NSw3ICszOTcsNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc3JjUGl4
ZWxBcnJheSwKLSAgICAgICAgKmRzdFBpeGVsQXJyYXksCisgICAgICAgIGRzdFBpeGVsQXJyYXks
CiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWludFNpemUuaGVpZ2h0KCks
CiAgICAgICAgIG1fYmlhcyAqIDI1NSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
CShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsx
MDAsMTEgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZgogICAgIEFT
U0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAogICAgIGF1dG8q
IHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0
byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51
bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+
ZGF0YSgpOworCiAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwog
CkBAIC0xNDAsNyArMTQxLDcgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBs
eVNvZgogICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZv
ckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CiAgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBz
dGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0o
ZHN0SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAg
ICAgICAgICAgdW5zaWduZWQqIGRzdFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KGRzdFBpeGVsQXJyYXktPmRhdGEoKSArIGRzdEluZGV4KTsKKyAgICAgICAgICAgIHVuc2ln
bmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFy
cmF5LmRhdGEoKSArIGRzdEluZGV4KTsKICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNY
ID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhl
aWdodCgpKSB7CiAgICAgICAgICAgICAgICAgKmRzdFBpeGVsUHRyID0gMDsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHJldmlzaW9uIDI3NzIzMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDggKzEwNSw4IEBAIHZvaWQgRkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBpbWFn
ZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIGF1dG8m
IHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJs
dXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXkuZGF0YSgpLCBpbWFnZURhdGEtPnNpemUoKSwgNCAq
IGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOwogICAgIAogICAgIHJlc3VsdEltYWdlLT5wdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0
YSwgc2hhZG93QXJlYSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiAy
NzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI0LDE0ICs1MjQsMTUgQEAgdm9pZCBG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YQogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFy
cmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8m
IGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgc2V0SXNBbHBoYUlt
YWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbi0+Y29weVByZW11
bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC01NDQsNyArNTQ1LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBwbGF0Zm9ybUFwcGx5KCpkc3RQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXpl
LndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1B
cHBseShkc3RQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CiB9CiAKIEludE91dHNldHMgRkVHYXVzc2lh
bkJsdXI6Om91dHNldHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNzcy
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsMjEgKzQ3NiwyMiBAQCB2b2lkIEZFTGlnaHRp
bmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwogCiAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/
IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdXRQaXhlbEFycmF5
KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIHJl
c3V0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBzZXRJc0FscGhhSW1h
Z2UoZmFsc2UpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5j
b3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcmVzdXRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1
bHQocmVzdXRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFu
ICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhh
cyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94
KSBoYXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Ro
cywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBm
ZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAogICAg
IEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsK
LSAgICBkcmF3TGlnaHRpbmcoKnJlc3V0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lk
dGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGluZyhyZXN1
dFBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXpl
LmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTYg
KzI0NCwxNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCiAgICAgYXV0byogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBhdXRvKiBkc3RQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAg
ICBpZiAoIWRzdFBpeGVsQXJyYXkpCisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisK
ICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNp
emUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBw
bHlEZWdlbmVyYXRlKCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndp
ZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRl
KGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKQEAgLTI2NSwxMiArMjY2LDEyIEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBz
dGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7
CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoKmRzdFBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAgICBpZiAocGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1
c1kpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7
Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSBkc3RQaXhlbEFycmF5OworICAgIHBh
aW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRzdFBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdE
YXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2lu
Z1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgcGFpbnRpbmdEYXRh
LnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTcsMTUgKzM5NywxNiBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihG
aWxsCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBh
dXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
YXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51
bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGF1dG8mIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
OworCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsK
ICAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgaWYg
KHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBpeGVsQXJyYXktPnplcm9GaWxsKCk7
CisgICAgICAgIHBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDQwLDcgKzQ0MSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kp
IHsKICAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhp
czsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9IHBpeGVsQXJyYXk7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKICAgICAgICAgICAg
ICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1z
LnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1Niw3ICs0NTcsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xl
IHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRo
ZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKCpwaXhlbEFycmF5LCBw
YWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgZmlsbFJlZ2lvbihwaXhl
bEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CiB9CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0
eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDEsOSArMjAxLDkgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFs
aWRQcmVNdWx0aXBsaQogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBp
bWFnZUFycmF5LT5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5
LT5sZW5ndGgoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1h
Z2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxl
bmd0aCgpOwogCiAgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQg
Y29tcGxldGUgcGl4ZWxzCiAgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKQEAg
LTQ2NCw3ICs0NjQsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVm
CiAgICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKICAgICBpZiAoIWNvbnZl
cnRlZEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKCpjb252
ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKKyAgICBjb3B5
SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RS
ZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rl
c3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCkBAIC00NzQsNyAr
NDc0LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdAogICAgIGF1
dG8gY29udmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBpbWFnZURhdGEsIG91dHB1dEZvcm1hdCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRJbWFn
ZURhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcygqY29udmVydGVkSW1h
Z2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CisgICAgY29weUltYWdlQnl0
ZXMoY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CiB9
CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQpAQCAtNTAwLDE0ICs1MDAsMTQgQEAgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bAogICAgICAgICAgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAg
ICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChyZXF1aXJl
c0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CiAgICAgICAgIGNv
cHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29weUlt
YWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24s
IHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2Up
CkBAIC01MzMsNyArNTMzLDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVk
UmVzdQogICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVs
dGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNv
cHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3UKICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRp
b24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQog
CiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2
LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAgICAgICBt
dXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAotICAgIDo6Z2xSZWFkUGl4
ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSk7CisgICAgOjpn
bFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgp
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCkpOwog
CiAgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3Rv
cmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBSZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVu
dCA9IHRydWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53
aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBp
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFn
ZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQ
YWNrQWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQs
IHBhY2tBbGlnbm1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTEgKzIwMSwxMSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgCiAgICAgLy8gV2UgY291
bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VEYXRhIGNvdWxkIGJlIG51bGxwdHIuIEEgY2Fz
ZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2UsIGltYWdlRGF0YTo6Y3JlYXRlCiAgICAg
Ly8gY2FuIHJldHVybiBhIG51bGxwdHIgYmVjYXVzZSBkYXRhIHNpemUgaGFzIG92ZXJmbG93ZWQu
IFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Ci0gICAgaWYgKCFpbWFnZURhdGEgfHwgIWlt
YWdlRGF0YS0+ZGF0YSgpKQorICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4gY3Jl
YXRlU2hhcGUoKTsKIAotICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
LSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7Cisg
ICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHBp
eGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAg
dWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5k
ZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBmKSk7CiAKQEAgLTIxNiw3
ICsyMTYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAg
ICAgIGZvciAoaW50IHkgPSBtaW5CdWZmZXJZOyB5IDwgbWF4QnVmZmVyWTsgKyt5KSB7CiAgICAg
ICAgICAgICBpbnQgc3RhcnRYID0gLTE7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGltYWdlUmVjdC53aWR0aCgpOyArK3gsIHBpeGVsQXJyYXlPZmZzZXQgKz0gNCkgewotICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBwaXhlbEFycmF5LT5pdGVtKHBpeGVsQXJyYXlPZmZz
ZXQpOworICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxBcnJheU9mZnNldCk7CiAgICAgICAgICAgICAgICAgYm9vbCBhbHBoYUFib3ZlVGhyZXNob2xk
ID0gYWxwaGEgPiBhbHBoYVBpeGVsVGhyZXNob2xkOwogICAgICAgICAgICAgICAgIGlmIChzdGFy
dFggPT0gLTEgJiYgYWxwaGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgICAgICBz
dGFydFggPSB4OwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDUtMDgg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEZhY3RvciBvdXQgcGl4
ZWwgYnVmZmVyIGZyb20gRE9NIHNwZWNpZmljIEltYWdlRGF0YSBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NTU0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGZvciBJbWFnZURhdGE6
OmRhdGEoKSByZXR1cm5pbmcgYSByZWZlcmVuY2UuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6Cisg
ICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKwog
MjAyMS0wNS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW1NPVVBdIFVzZSB0aGUgbmV3IGxpYnNvdXAgbmV0d29yayBtZXRyaWNzIEFQSQpJ
bmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjcsOSArMzY3LDkgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpwb3B1bGF0ZUdldAogewogICAgIE1FU1NBR0VfQ0hFQ0sobV9nZXRJbWFnZURhdGFTaGFy
ZWRNZW1vcnksICJXZSBjYW4ndCBydW4gZ2V0SW1hZ2VEYXRhIHdpdGhvdXQgYSBidWZmZXIgdG8g
d3JpdGUgaW50byIpOwogCi0gICAgaWYgKGltYWdlRGF0YSAmJiBpbWFnZURhdGEtPmRhdGEoKSkg
ewotICAgICAgICBNRVNTQUdFX0NIRUNLKGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCkg
PD0gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4g
b2YgZ2V0SW1hZ2VEYXRhIGlzIHRvbyBzbWFsbCIpOwotICAgICAgICBtZW1jcHkobV9nZXRJbWFn
ZURhdGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgaW1h
Z2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKGltYWdlRGF0YSkgeworICAg
ICAgICBNRVNTQUdFX0NIRUNLKGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSA8PSBtX2dl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCAiU2htZW0gZm9yIHJldHVybiBvZiBnZXRJ
bWFnZURhdGEgaXMgdG9vIHNtYWxsIik7CisgICAgICAgIG1lbWNweShtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIGltYWdlRGF0YS0+
ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1lbXNldChtX2dldElt
YWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9y
eS0+c2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE5LDkgKzMx
MTksOSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0CiB7CiAgICAg
ZW5jb2RlciA8PCBpbWFnZURhdGEtPnNpemUoKTsKIAotICAgIGF1dG8gcmF3RGF0YSA9IGltYWdl
RGF0YS0+ZGF0YSgpOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0Rh
dGEtPmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmF3
RGF0YS0+ZGF0YSgpLCByYXdEYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworICAgIGF1dG8mIHJhd0Rh
dGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihyYXdEYXRhLmJ5dGVMZW5ndGgoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmF3RGF0YS5kYXRhKCksIHJhd0RhdGEuYnl0ZUxlbmd0aCgpLCAxKTsKIH0KIAogdGVt
cGxhdGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lvbiAyNzcyMzAp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDkgKzIwMCw5IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0g
V2ViQ29yZTo6SW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdC5zaXplKCkpOwotICAgICAgICBpZiAo
IWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAgIGlmICghaW1hZ2VEYXRh
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9
IGltYWdlRGF0YS0+ZGF0YSgpLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIHNpemVfdCBkYXRhU2l6
ZSA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKIAogICAgICAgICBJUEM6OlRpbWVv
dXQgdGltZW91dCA9IDVfczsKICAgICAgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnkgPSBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRh
KGRhdGFTaXplLCB0aW1lb3V0KTsKQEAgLTIxNCw5ICsyMTQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCiAgICAgICAgIGlm
IChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZvckdldEltYWdlRGF0YVRvQ29t
cGxldGUodGltZW91dCkpCi0gICAgICAgICAgICBtZW1jcHkoaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgICAgIG1lbWNw
eShpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBkYXRhU2l6
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lbXNldChpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpLCAwLCBkYXRhU2l6ZSk7CisgICAgICAgICAgICBtZW1zZXQoaW1hZ2VEYXRhLT5kYXRh
KCkuZGF0YSgpLCAwLCBkYXRhU2l6ZSk7CiAgICAgICAgIHJldHVybiBpbWFnZURhdGE7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCShyZXZp
c2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQ
YWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428098</attachid>
            <date>2021-05-08 16:58:09 -0700</date>
            <delta_ts>2021-05-08 17:14:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210508165808.patch</filename>
            <type>text/plain</type>
            <size>64242</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wNS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZm
ZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBQcmVwYXJlIHRvIGZpeCBsYXllcmluZyB2aW9sYXRp
bmcgdXNlIG9mIERPTSBsZXZlbCBJbWFnZURhdGEgYmVpbmcKKyAgICAgICAgdXNlZCBieSBwbGF0
Zm9ybSBjb2RlIGJ5IGZhY3RvcmluZyBvdXQgdGhlIHBpeGVsIHN0b3JhZ2UgaW50byBhIG5ldwor
ICAgICAgICBQaXhlbEJ1ZmZlciBjbGFzcy4gU2luY2UgaXQgd2lsbCBiZSBhIGxpdHRsZSBtb3Jl
IGdlbmVyYWwgdGhhdCAKKyAgICAgICAgSW1hZ2VEYXRhIGlzIG5vdyAodGhvdWdoIEltYWdlRGF0
YSB3aWxsIG5lZWQgdG8gZ2FpbiB0aGVzZSBzb29uKQorICAgICAgICBQaXhlbEJ1ZmZlciBhbHNv
IGNhcHR1cmVzIHRoZSBwaXhlbCBmb3JtYXQgYW5kIGNvbG9yIHNwYWNlIHRoZSBwaXhlbAorICAg
ICAgICBkYXRhIHJlcHJlc2VudHMuCisKKyAgICAgICAgV2hpbGUgaGVyZSwgdXBkYXRlIEltYWdl
RGF0YTo6ZGF0YSgpIHRvIHJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbgorICAgICAgICBh
IHBvaW50ZXIgdG8gaW5kaWNhdGUgaXQgaXMgbmV2ZXIgbnVsbCBhbmQgdXBkYXRlIGFsbCB0aGUg
Y2FsbGVycy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFn
ZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1p
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6ZGVl
cENsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAq
IGh0bWwvSW1hZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OnNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjp3aWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURhdGE6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpjb2xv
clNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Zm9ybWF0IGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5SW1hZ2VEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBl
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBpeGVs
QnVmZmVyOjpkZWVwQ2xvbmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bp
eGVsQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmNvbG9y
U3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmZvcm1hdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpi
bHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3Rp
bmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjEtMDUtMDggIFJp
Y2t5IE1vbmRlbGxvICA8cm1vbmRlbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBv
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyODgsNiArMTI4OCw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxGb3JtYXQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMTIsNiArMjAxMiw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2Fs
U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDUs
NiArNDE0NSw3IEBACiAJCUJDRTY1OUE5MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U2NTlBODBF
QTkyN0I5MDA3RTQ1MzMgLyogVGhlbWVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVt
ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
NjU5RTUwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggKi87IH07CiAJCUJDRTY1QkVCMEVB
Q0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0U2OTFFNTI2
NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhlbEJ1
ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5MTUxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi87IH07CiAJCUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNF
NSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oICovOyB9OwogCQlCQ0U5
M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ0MTUxN0M1
NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oICovOyB9OwpAQCAtMTQx
NTQsNiArMTQxNTUsOCBAQAogCQlCQzQ2QzFGOTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NQYWdl
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NQYWdlUnVsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ2QzIwNDBDMEREQ0ExMDAyMENGQzMg
LyogSlNDU1NTdHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ1NTU3R5bGVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
NkMyMDUwQzBERENBMTAwMjBDRkMzIC8qIEpTQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NTU1N0eWxlUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQzQ4MzlCQTI2NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGl4ZWxCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM0ODM5QkIyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBpeGVsQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
OTE4QzAwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRnJhbWVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0OTE4QzEwQkZFQTA1MDAwOUQ2MzE2IC8qIEpT
SFRNTEZyYW1lRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNI
VE1MRnJhbWVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDkxOEMy
MEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MDI1LDYgKzI3MDI4LDggQEAKIAkJCQkyRDUwMDJG
QTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0
Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCUJDNDgzOUJCMjY0NjE4MUEwMEEyOEI2MiAvKiBQ
aXhlbEJ1ZmZlci5jcHAgKi8sCisJCQkJQkM0ODM5QkEyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVs
QnVmZmVyLmggKi8sCiAJCQkJQkNBNTU5MTIyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0
LmggKi8sCiAJCQkJNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAq
LywKIAkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
ICovLApAQCAtMzQ0MzMsNiArMzQ0MzgsNyBAQAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2
OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzU4NTk3
QzIzQTFGQ0YzMDBDNzQ1NzIgLyogUGluLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMEZGMkE1RTEx
RjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNjkx
RTUyNjQ2MzdGQzAwRUJEQzNBIC8qIFBpeGVsQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDdEMzM0NDFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNBNTU5MTQyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREVGQTIyODFFNzY2OUU4MDAwQUU5OUMgLyogUGxhdGZvcm1B
dWRpb0RhdGEuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxMyArNDAsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEpCiB7
CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvKiBkYXRh
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgZGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwogICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4oZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltYWdlRGF0YSkpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2
bSwgZGF0YU5hbWUsIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBkYXRh
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpOwogICAgIC8vIEZJWE1FOiBBZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFu
ZCBzd2l0Y2ggdG8gcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQotICAgIHZtLmhlYXAuZGVwcmVj
YXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEtPmxlbmd0aCgpKTsKKyAgICB2bS5oZWFwLmRlcHJl
Y2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1cm4g
d3JhcHBlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJh
eUJ1ZmZlciA9IG1ha2VSZWZQdHIoaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFyZWRCdWZm
ZXIoKSk7CiAgICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBT
ZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTIyNiw4ICsxMjI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3cml0
ZShJbWFnZURhdGFUYWcpOwogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPndpZHRoKCkpOwog
ICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICB3
cml0ZShkYXRhLT5kYXRhKCktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRh
LT5kYXRhKCktPmRhdGEoKSwgZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAg
ICAgd3JpdGUoZGF0YS0+ZGF0YSgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShk
YXRhLT5kYXRhKCkuZGF0YSgpLCBkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF1dG8qIHJl
Z0V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwT2JqZWN0Kj4odm0sIG9iaikpIHsKQEAgLTMzOTAs
OSArMzM5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICAgICAg
bWVtY3B5KHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOworICAgICAgICAg
ICAgICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKS5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLT56ZXJvRmlsbCgp
OworICAgICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLnplcm9GaWxsKCk7CiAgICAgICAgICAg
ICBtX3B0ciArPSBsZW5ndGg7CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShyZXN1bHQu
Z2V0KCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3ODIsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVh
dGVQcm9taXNlKFNjcmlwdEV4CiAgICAgLy8gICAgICBpbnRlcm5hbCBzbG90LgogICAgIC8vIDYu
Mi4gSWYgSXNEZXRhY2hlZEJ1ZmZlcihidWZmZXIpIGlzIHRydWUsIHRoZW4gcmV0dXJuIHAgcmVq
ZWN0ZWQgd2l0aCBhbgogICAgIC8vICAgICAgIkludmFsaWRTdGF0ZUVycm9yIiBET01FeGNlcHRp
b24uCi0gICAgaWYgKGltYWdlRGF0YS0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAgICBpZiAo
aW1hZ2VEYXRhLT5kYXRhKCkuaXNEZXRhY2hlZCgpKSB7CiAgICAgICAgIHByb21pc2UucmVqZWN0
KEludmFsaWRTdGF0ZUVycm9yLCAiSW1hZ2VEYXRhJ3Mgdmlld2VkIGJ1ZmZlciBoYXMgYmVlbiBk
ZXRhY2hlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VEYXRhLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmMKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJh
bmdlRXJyb3IsICJPdXQgb2YgbWVtb3J5Il9zIH07CiAgICAgfQogICAgIGJ5dGVBcnJheS0+emVy
b0ZpbGwoKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6ZSwgYnl0ZUFy
cmF5LnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURh
dGEoeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc2l6
ZSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCkgfSkpOwogfQogCiBSZWZQdHI8SW1hZ2VEYXRh
PiBJbWFnZURhdGE6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtNjgsNyArNjgsNyBA
QCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zCiAgICAgYXV0byBieXRl
QXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChkYXRhU2l6
ZS51bnNhZmVHZXQoKSk7CiAgICAgaWYgKCFieXRlQXJyYXkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YShzaXplLCBieXRlQXJyYXku
cmVsZWFzZU5vbk51bGwoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YSh7
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzaXplLCBi
eXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9KSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IElt
YWdlRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJh
eT4mJiBieXRlQXJyYXkpCkBAIC03Niw3ICs3Niw4IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdl
RGF0YTo6Y3JlYXRlKGNvbnMKICAgICBhdXRvIGRhdGFTaXplID0gSW1hZ2VEYXRhOjpkYXRhU2l6
ZShzaXplKTsKICAgICBpZiAoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGRhdGFTaXplLnVu
c2FmZUdldCgpID4gYnl0ZUFycmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHNpemUsIFdURk1vdmUoYnl0ZUFy
cmF5KSkpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdURk1vdmUoYnl0
ZUFycmF5KSB9KSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6
OmNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5LCB1bnNpZ25lZCBzdywg
T3B0aW9uYWw8dW5zaWduZWQ+IHNoKQpAQCAtOTksMjIgKzEwMCwyMiBAQCBFeGNlcHRpb25PcjxS
ZWY8SW1hZ2VEYXRhPj4gSW1hZ2VEYXRhOjpjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOwogfQogCi1JbWFnZURhdGE6OkltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBS
ZWY8VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5KQotICAgIDogbV9zaXplKHNpemUpCi0g
ICAgLCBtX2RhdGEoV1RGTW92ZShieXRlQXJyYXkpKQorSW1hZ2VEYXRhOjpJbWFnZURhdGEoUGl4
ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlcikKKyAgICA6IG1fcGl4ZWxCdWZmZXIoV1RGTW92ZShwaXhl
bEJ1ZmZlcikpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tigoc2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKIH0K
IAorSW1hZ2VEYXRhOjp+SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OworCiBSZWY8SW1hZ2VEYXRhPiBJ
bWFnZURhdGE6OmRlZXBDbG9uZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW1hZ2VEYXRhKG1fc2l6ZSwgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEo
KSwgbV9kYXRhLT5sZW5ndGgoKSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURh
dGEobV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkpOwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSkKIHsKICAgICAv
LyBQcmludCBvdXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHBpeGVsIGRhdGEgYXJyYXkKLSAgICByZXR1
cm4gdHMgPDwgaW1hZ2VEYXRhLmRhdGEoKTsKKyAgICByZXR1cm4gdHMgPDwgJmltYWdlRGF0YS5k
YXRhKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3
MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSw5ICsyOSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQxLDIxICszOSwyNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgUmVmPFVp
bnQ4Q2xhbXBlZEFycmF5PiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhjZXB0aW9u
T3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2ln
bmVkIHN3LCBPcHRpb25hbDx1bnNpZ25lZD4gc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFn
ZURhdGEoKTsKIAotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgaW50
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIGNvbnN0IElu
dFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyLnNpemUoKTsgfQorICAg
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuc2l6ZSgpLndpZHRoKCk7
IH0KKyAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5zaXplKCku
aGVpZ2h0KCk7IH0KIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLnB0cigpOyB9CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX3BpeGVsQnVmZmVyLmRhdGEoKTsgfQogCiAgICAgUmVmPEltYWdlRGF0YT4gZGVl
cENsb25lKCkgY29uc3Q7CiAKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CisgICAgUGl4ZWxG
b3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsgfQor
CiBwcml2YXRlOgotICAgIEltYWdlRGF0YShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBl
ZEFycmF5PiYmKTsKKyAgICBleHBsaWNpdCBJbWFnZURhdGEoUGl4ZWxCdWZmZXImJik7CisKICAg
ICBzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplKGNvbnN0
IEludFNpemUmKTsKIAotICAgIEludFNpemUgbV9zaXplOwotICAgIFJlZjxVaW50OENsYW1wZWRB
cnJheT4gbV9kYXRhOworICAgIFBpeGVsQnVmZmVyIG1fcGl4ZWxCdWZmZXI7CiB9OwogCiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgSW1hZ2VEYXRhJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24g
Mjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRp
YyBSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVFbXB0eUltYWcKIHsKICAgICBhdXRvIGRhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShzaXplKTsKICAgICBpZiAoZGF0YSkKLSAgICAgICAgZGF0YS0+ZGF0
YSgpLT56ZXJvRmlsbCgpOworICAgICAgICBkYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKICAgICBy
ZXR1cm4gZGF0YTsKIH0KIApAQCAtMjIyMCw3ICsyMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIWRhdGEuZGF0YSgpIHx8IGRhdGEuZGF0YSgpLT5pc0RldGFjaGVkKCkpCisg
ICAgaWYgKGRhdGEuZGF0YSgpLmlzRGV0YWNoZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGRpcnR5V2lkdGggPCAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjc3
MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NDksNyArNDc0OSw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgIHRleEltYWdlSW1wbChm
dW5jdGlvbklELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNl
dCwgem9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6
OkRPTVNvdXJjZTo6SW1hZ2UsIGZhbHNlLCBiaXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0
bWFwLT5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSwgc291cmNlSW1hZ2VSZWN0LCBkZXB0aCwg
dW5wYWNrSW1hZ2VIZWlnaHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25z
dCBSZWZQdHI8SW1hZ2VEYXRhPiYgcGl4ZWxzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAg
ICAgIGlmIChwaXhlbHMtPmRhdGEoKS0+aXNEZXRhY2hlZCgpKSB7CisgICAgICAgIGlmIChwaXhl
bHMtPmRhdGEoKS5pc0RldGFjaGVkKCkpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJUaGUgc291
cmNlIGRhdGEgaGFzIGJlZW4gZGV0YWNoZWQuIik7CiAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICB9CkBAIC00Nzc4LDcgKzQ3NzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCCiAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRl
c3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8g
RmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCiAgICAgICAgIGlmICgh
bV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9CWVRFICYmICFzZWxlY3RpbmdTdWJSZWN0YW5nbGUgJiYgZGVwdGggPT0gMSkgewogICAg
ICAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJ5dGVMZW5ndGgg
PSBwaXhlbHMtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAgYnl0ZUxlbmd0aCA9
IHBpeGVscy0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8x
MUZfUkVWKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzEx
Rl9SRVYgdHlwZSBwYWNrL3VucGFjayBpc24ndCBpbXBsZW1lbnRlZC4KQEAgLTQ3OTQsMjMgKzQ3
OTQsMjMgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAg
ICBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleEltYWdlMkQpIHsKICAg
ICAgICAgICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAog
ICAgICAgICAgICAgICAgIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LndpZHRoKCksIGFkanVzdGVk
U291cmNlSW1hZ2VSZWN0LmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0
YSgpLT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwg
bmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1
YkltYWdlMkQpIHsKICAgICAgICAgICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJl
Y3Qud2lkdGgoKSwgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGJ5dGVMZW5ndGgsIG5lZWRDb252ZXJzaW9uID8g
ZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBm
b3JtYXQsIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRh
dGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNF
KEFOR0xFKQogICAgICAgICAgICAgLy8gM0QgZnVuY3Rpb25zLgogICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uSUQgPT0gVGV4SW1hZ2VGdW5jdGlvbklEOjpUZXhJbWFnZTNEKSB7CiAgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0aCgpLCBh
ZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5oZWlnaHQoKSwgZGVwdGgsIDAsCi0gICAgICAgICAgICAg
ICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5k
YXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSUQgPT0gVGV4SW1h
Z2VGdW5jdGlvbklEOjpUZXhTdWJJbWFnZTNEKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PnRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwK
ICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwgYWRq
dXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksIGRlcHRoLAotICAgICAgICAgICAgICAgICAg
ICBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgp
IDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgYnl0ZUxlbmd0aCkpOworICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0
YSgpIDogcGl4ZWxzLT5kYXRhKCkuZGF0YSgpLCBieXRlTGVuZ3RoKSk7CiAgICAgICAgICAgICB9
CiAjZWxzZQogICAgICAgICAgICAgLy8gV2ViR0wgMi4wIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGgg
dGhlIEFOR0xFIGJhY2tlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksOCArMTQ1
OSw4IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG8KIFJlZjxKU09O
OjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9ySW1h
Z2VEYXRhKGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhKQogewogICAgIGF1dG8gZGF0YSA9IEpT
T046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bWFnZURhdGEuZGF0YSgpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBkYXRhLT5hZGRJdGVtKGlt
YWdlRGF0YS5kYXRhKCktPml0ZW0oaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1h
Z2VEYXRhLmRhdGEoKS5sZW5ndGgoKTsgKytpKQorICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdl
RGF0YS5kYXRhKCkuaXRlbShpKSk7CiAKICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXlPZjxK
U09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogICAgIGFycmF5LT5hZGRJdGVtKFdURk1vdmUoZGF0YSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NzksNyArNzc5LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0
YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAK
LSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0
YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAw
LCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxw
aGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZs
aXBZKSkKKyAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzb3Vy
Y2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVw
dGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEg
PyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEo
KSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsMTggKzczLDE4IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEK
ICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogc3JjUGl4
ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5n
dGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0g
aW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1Bp
eGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBp
eGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAg
ICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAg
ICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOwogICAg
ICAgICBpZiAoIWEpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0g
c3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0g
c3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICB1aW50OF90IHIg
PSBzcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBz
cmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0g
c3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CiAKICAgICAgICAgZG91YmxlIGx1
bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEg
LyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1
bWEpOworICAgICAgICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwog
ICAgIH0KIAogICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwpAQCAtMjQxLDEwICsyNDEsMTAg
QEAgUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZQogICAgICAgICBkZXN0
UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVkLnkoKSk7CiAKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgp
ICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgpKQotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVy
b0ZpbGwoKTsKKyAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKIAogICAgIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7Ci0gICAg
dWludDhfdCogZGVzdFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3Qu
eSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICB1aW50OF90KiBk
ZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CiAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CiAgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWwKICAgICB1aW50OF90KiBkZXN0Um93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKLSAgICB1aW50OF90KiBzcmNSb3dz
ID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0
ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworICAgIHVpbnQ4X3QqIHNyY1Jvd3Mg
PSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVz
UGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygK
ICAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGl4ZWxCdWZmZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1BpeGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzaXplLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJiBkYXRhKQorICAgIDogbV9jb2xv
clNwYWNlIHsgY29sb3JTcGFjZSB9CisgICAgLCBtX2Zvcm1hdCB7IGZvcm1hdCB9CisgICAgLCBt
X3NpemUgeyBzaXplIH0KKyAgICAsIG1fZGF0YSB7IFdURk1vdmUoZGF0YSkgfQoreworICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oKG1fc2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKK30KKworUGl4ZWxCdWZmZXI6On5Q
aXhlbEJ1ZmZlcigpID0gZGVmYXVsdDsKKworUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBD
bG9uZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgbV9jb2xvclNwYWNlLCBtX2Zvcm1hdCwgbV9z
aXplLCBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxl
bmd0aCgpKSB9OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BpeGVsQnVmZmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIEpTQyB7
Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50
OENsYW1wZWRBcnJheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQaXhlbEJ1
ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOworcHVibGljOgor
ICAgIFBpeGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQsIGNvbnN0
IEludFNpemUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7CisgICAgflBpeGVsQnVm
ZmVyKCk7CisKKyAgICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CisgICAg
UGl4ZWxCdWZmZXImIG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CisKKyAgICBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JT
cGFjZTsgfQorICAgIFBpeGVsRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0
OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
ICAgIEpTQzo6VWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
Z2V0KCk7IH0KKworICAgIFBpeGVsQnVmZmVyIGRlZXBDbG9uZSgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisgICAgUGl4ZWxGb3Jt
YXQgbV9mb3JtYXQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgUmVmPEpTQzo6VWludDhDbGFt
cGVkQXJyYXk+IG1fZGF0YTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTA4LDggKzkwOCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJ
bWFnZUIKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byog
Ymx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEoKTsKLSAgICBibHVyTGF5ZXJJbWFnZShi
bHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkg
KiA0KTsKKyAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKS5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwogICAgIGxheWVySW1hZ2UucHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0
YSwgYmx1clJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNw
cAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE0
ICs5MCwxNCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HCiAgICAg
U2NvcGVkUGl4ZWxTdG9yYWdlTW9kZSBwYWNrU2tpcFBpeGVscyhHTF9QQUNLX1NLSVBfUElYRUxT
LCAwLCBtX2lzRm9yV2ViR0wyKTsKICAgICBTY29wZWRCdWZmZXJCaW5kaW5nIHNjb3BlZFBpeGVs
UGFja0J1ZmZlclJlc2V0KEdMX1BJWEVMX1BBQ0tfQlVGRkVSLCAwLCBtX2lzRm9yV2ViR0wyKTsK
IAotICAgIGdsOjpSZWFkblBpeGVsc1JvYnVzdEFOR0xFKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgo
KSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VE
YXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKSk7CisgICAgZ2w6OlJlYWRuUGl4ZWxzUm9idXN0QU5HTEUo
MCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCksIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgLy8gRklY
TUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3VyZmFjZSBib3VuZCB0
byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEgaW4gdGhlIElPU3Vy
ZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQaXhlbHMgd2lsbCBp
biBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVlcy4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0CiAjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29udGV4dEF0dHJpYnV0
ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW1hZ2VEYXRh
LT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
KTsKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW1hZ2VEYXRhLT53aWR0aCgp
LCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCkpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdM
Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEzLDggKzExMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9D
YW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29udmVydCBSR0JBIHRvIEJHUkEuIEJHUkEg
aXMgQ0FJUk9fRk9STUFUX0FSR0IzMiBvbiBsaXR0bGUtZW5kaWFuIGFyY2hpdGVjdHVyZXMuCi0g
ICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpOwot
ICAgIHVpbnQ4X3QqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgc2l6
ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCk7CisgICAgdWlu
dDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsKIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlRGF0
YS0+c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdlRGF0YS0+
d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT53aWR0aCgpICogNCkpOwor
ICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGlt
YWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT53aWR0aCgp
ICogNCkpOwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShp
bWFnZVN1cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJKHJldmlzaW9uIDI3
NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dEdMQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbgogICAgIGF1dG8gaW1hZ2VTaXplID0gaW1h
Z2VEYXRhLT5zaXplKCk7CiAgICAgaW50IHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0
OwogICAgICAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQo
KTsKLSAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7
CisgICAgdWludDhfdCogaW1hZ2VQaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CiAg
ICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goaW1hZ2VQaXhlbHMsIGRhdGFTaXpl
KTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmaW1hZ2VEYXRhLmxlYWtSZWYoKSwgaW1h
Z2VQaXhlbHMsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg0LDcgKzE4NCw2IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNr
ZW4KICAgICBBU1NFUlQodXRpKTsKIAogICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0gICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OwogCiAgICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgpAQCAtMTkyLDcgKzE5MSw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+
IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJl
ZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIGF1dG8gcHJvdGVjdGVkUGl4ZWxBcnJh
eSA9IG1ha2VSZWYoaW1hZ2VEYXRhLT5kYXRhKCkpOwogICAgICAgICBzaXplX3QgZGF0YVNpemUg
PSBwcm90ZWN0ZWRQaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgIEludFNpemUgcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0
YShjb25zdAogICAgIEFTU0VSVCh1dGkpOwogCiAgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxw
aGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNv
dXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRh
dGEoKS5kYXRhKCk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwogCiAg
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3
ICsyOTAsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAg
aWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIHBpeGVsQXJyYXkg
PSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7CiAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6
ZSgpOwogCiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFs
dWVzKTsKQEAgLTI5OSwxNiArMjk5LDE2IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXIKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4oKnBpeGVsQXJyYXksIHZhbHVlcywg
cGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURTogCi0g
ICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPigqcGl4ZWxBcnJh
eSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVmZmVjdFR5cGU8RkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlE
aW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU+KCpwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAg
ZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1
ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNP
TE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4oKnBpeGVsQXJyYXksIHZhbHVlcywgcGl4
ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNp
b25zKTsKICAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDI3NzIz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDExIEBAIHZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVMKICAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0
ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQor
ICAgIGlmICghaW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIHBpeGVs
QXJyYXkgPSBpbWFnZVJlc3VsdC0+ZGF0YSgpOworCiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7
CiAgICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsKICAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7
CkBAIC0xMjAsOSArMTIxLDkgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5UwogICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVU
YWJsZSwgYWxwaGFUYWJsZSk7CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4t
PmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFy
cmF5LT5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS0+ZGF0YSgpOwor
ICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBw
aXhlbEFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEo
KTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZz
ZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw5
ICsyMzAsMTAgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogCiAg
ICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7CiAgICAg
ICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdl
LT5kYXRhKCkgOiBudWxscHRyOwotICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCisgICAgICAg
IGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKIAogICAgICAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICBhdXRvIHNyY1BpeGVsQXJyYXkg
PSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CkBAIC0yNDAsOSArMjQxLDkgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEludFJlY3Qg
ZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjIt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CisgICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJh
eSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogCi0gICAgICAg
IHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFycmF5LCAqZHN0UGl4ZWxBcnJh
eSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1Nv
ZnR3YXJlKCpzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBt
X2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYs
MTAgKzM3NiwxMiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0CiAg
ICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAg
ICBlbHNlCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1h
Z2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorCisgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJyYXk7CkBAIC0z
OTUsNyArMzk3LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdAog
CiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNyY1BpeGVsQXJy
YXksCi0gICAgICAgICpkc3RQaXhlbEFycmF5LAorICAgICAgICBkc3RQaXhlbEFycmF5LAogICAg
ICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAg
ICAgICBtX2JpYXMgKiAyNTUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkocmV2
aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMCArMTAwLDEx
IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICBBU1NFUlQo
bV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKICAgICBhdXRvKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRz
dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRy
OwotICAgIGlmICghZHN0UGl4ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEo
KTsKKwogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0byBpbnB1dElt
YWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIApAQCAt
MTQwLDcgKzE0MSw3IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YK
ICAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xv
clggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5u
ZWxYKSArIHNjYWxlZE9mZnNldFgpOwogICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdElu
ZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAKLSAgICAgICAg
ICAgIHVuc2lnbmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihk
c3RQaXhlbEFycmF5LT5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCog
ZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5k
YXRhKCkgKyBkc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBw
YWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQo
KSkgewogICAgICAgICAgICAgICAgICpkc3RQaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRh
LT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBhdXRvJiBzcmNQ
aXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5
ZXJJbWFnZShzcmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFn
ZURhdGEtPnNpemUoKS53aWR0aCgpKTsKICAgICAKICAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNo
YWRvd0FyZWEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gMjc3MjMw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNCwxNCArNTI0LDE1IEBAIHZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2EKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/
IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghZHN0UGl4ZWxBcnJheSkK
KyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQ
aXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNTQ0LDcgKzU0NSw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2EKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxh
dGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0
aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHko
ZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVy
OjpvdXRzZXRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjc3MjMwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDIxICs0NzYsMjIgQEAgdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1
bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3V0UGl4ZWxBcnJheSkKKyAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiByZXN1bHRQ
aXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxwaGFJbWFnZShm
YWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1dFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChy
ZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgx
LDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBu
byB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBo
YXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Rocywg
YW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNv
bnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAogICAgIElu
dFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBkcmF3TGlnaHRpbmcoKnJlc3V0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgo
KSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGluZyhyZXN1bHRQ
aXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5o
ZWlnaHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDE2ICsy
NDQsMTcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdl
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAg
aWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCk7CisKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3Jl
ZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRm
b3JtQXBwbHlEZWdlbmVyYXRlKCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFk
aXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53
aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwpAQCAtMjY1LDEyICsyNjYsMTIgQEAgdm9pZCBGRU1v
cnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIGludCByYWRpdXNYID0gc3RkOjpt
aW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBp
bnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFk
aXVzLmhlaWdodCgpKTsKIAotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSgqZHN0UGl4
ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgIGlmIChw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkg
PSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0g
ZHN0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5h
dGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJh
d2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBwYWludGluZ0Rh
dGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICog
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24g
Mjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsMTUgKzM5NywxNiBAQCB2b2lkIEZF
VHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhlbEFycmF5
KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIHBp
eGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSByZXN1bHRTaXpl
KGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRl
cigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHBpeGVsQXJyYXktPnplcm9GaWxsKCk7CisgICAgICAgIHBpeGVsQXJyYXkuemVyb0Zp
bGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQwLDcgKzQ0MSw3IEBAIHZvaWQg
RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKICAgICAgICAgICAgICAgICBGaWxsUmVn
aW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAg
ICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
cGl4ZWxBcnJheSA9IHBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJy
YXkgPSAmcGl4ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0g
JnBhaW50aW5nRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRj
aERhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1Niw3
ICs0NTcsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAg
fQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMg
bm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4K
LSAgICBmaWxsUmVnaW9uKCpwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAs
IGhlaWdodCk7CisgICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIDAsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsOSArMjAxLDkg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaQogICAgIGlmICghbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7Ci0gICAgaW50
IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBpbWFn
ZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICB1aW50OF90
KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0
aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CiAKICAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRl
cyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKICAgICBBU1NFUlQoIShwaXhlbEFycmF5
TGVuZ3RoICUgNCkpOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkSW1hZ2VCdWYKICAgICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwg
eyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQp
OwogICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47Ci0gICAgY29w
eUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVz
dFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBk
ZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZl
cnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0
UmVjdCkKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRl
ZEltYWdlRGF0CiAgICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VEYXRh
VG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0KTsKICAgICBp
ZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5
dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsK
KyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRp
b24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBAIC01MDAsMTQg
KzUwMCwxNCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsCiAgICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5w
dXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0Fs
cGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVVucHJlbXVs
dGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFj
ZSkpIHsKICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVzdGlu
YXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIHZvaWQgRmls
dGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6
Y29weVByZW11bHRpcGxpZWRSZXN1CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUp
OworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1
dFNpemUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAgICAgICBjb3B5Q29udmVydGVkSW1h
Z2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
cmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBj
b3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQog
Ci0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEt
PmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGlt
YWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+
ZGF0YSgpLmRhdGEoKSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAg
ICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAkocmV2aXNpb24g
Mjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBA
IFJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICAgICAgbXVzdFJl
c3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICA6OmdsUmVhZFBpeGVscygw
LCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkpOworICAgIDo6Z2xSZWFk
UGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKIAogICAg
IGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShH
TF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwx
MSArMjAxLDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAg
ICAKICAgICAvLyBXZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBpbWFnZURhdGEgY291bGQg
YmUgbnVsbHB0ci4gQSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgaW1hZ2VE
YXRhOjpjcmVhdGUKICAgICAvLyBjYW4gcmV0dXJuIGEgbnVsbHB0ciBiZWNhdXNlIGRhdGEgc2l6
ZSBoYXMgb3ZlcmZsb3dlZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQKLSAgICBpZiAo
IWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byogcGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFy
cmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7
CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CiAg
ICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBi
eXRlczogUkdCQS4KICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUu
MGYpKTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6
OmNyZWF0ZVJhc3QKICAgICAgICAgZm9yIChpbnQgeSA9IG1pbkJ1ZmZlclk7IHkgPCBtYXhCdWZm
ZXJZOyArK3kpIHsKICAgICAgICAgICAgIGludCBzdGFydFggPSAtMTsKICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCwgcGl4ZWxBcnJheU9mZnNl
dCArPSA0KSB7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHBpeGVsQXJyYXktPml0
ZW0ocGl4ZWxBcnJheU9mZnNldCk7CisgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHBp
eGVsQXJyYXkuaXRlbShwaXhlbEFycmF5T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBib29sIGFs
cGhhQWJvdmVUaHJlc2hvbGQgPSBhbHBoYSA+IGFscGhhUGl4ZWxUaHJlc2hvbGQ7CiAgICAgICAg
ICAgICAgICAgaWYgKHN0YXJ0WCA9PSAtMSAmJiBhbHBoYUFib3ZlVGhyZXNob2xkKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0WCA9IHg7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MjMw
KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OCBAQAorMjAyMS0wNS0wOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgRmFjdG9yIG91dCBwaXhlbCBidWZmZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
NTQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBVcGRhdGUg
Zm9yIEltYWdlRGF0YTo6ZGF0YSgpIHJldHVybmluZyBhIHJlZmVyZW5jZS4KKworICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVu
Y29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oOgorCiAyMDIxLTA1LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gVXNlIHRoZSBuZXcgbGlic291cCBuZXR3b3Jr
IG1ldHJpY3MgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcy
MzApCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0CiB7CiAgICAgTUVTU0FHRV9DSEVDSyhtX2dl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRJbWFnZURhdGEgd2l0aG91
dCBhIGJ1ZmZlciB0byB3cml0ZSBpbnRvIik7CiAKLSAgICBpZiAoaW1hZ2VEYXRhICYmIGltYWdl
RGF0YS0+ZGF0YSgpKSB7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRhLT5kYXRhKCkt
PmJ5dGVMZW5ndGgoKSA8PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCAiU2ht
ZW0gZm9yIHJldHVybiBvZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7Ci0gICAgICAgIG1l
bWNweShtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEo
KS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBpZiAoaW1h
Z2VEYXRhKSB7CisgICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxl
bmd0aCgpIDw9IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCksICJTaG1lbSBmb3Ig
cmV0dXJuIG9mIGdldEltYWdlRGF0YSBpcyB0b28gc21hbGwiKTsKKyAgICAgICAgbWVtY3B5KG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEo
KSwgaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpKTsKICAgICB9IGVsc2UKICAgICAgICAg
bWVtc2V0KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAsIG1fZ2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5LT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxMTksOSArMzExOSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1h
Z2VEYXQKIHsKICAgICBlbmNvZGVyIDw8IGltYWdlRGF0YS0+c2l6ZSgpOwogCi0gICAgYXV0byBy
YXdEYXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4ocmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVk
TGVuZ3RoRGF0YShyYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7Cisg
ICAgYXV0byYgcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEuYnl0ZUxlbmd0aCgpKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLmRhdGEoKSwgcmF3RGF0YS5ieXRlTGVuZ3RoKCks
IDEpOwogfQogCiB0ZW1wbGF0ZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgJKHJl
dmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOSArMjAwLDkg
QEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7
Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAg
aWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgc2l6
ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAg
c2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwogCiAgICAg
ICAgIElQQzo6VGltZW91dCB0aW1lb3V0ID0gNV9zOwogICAgICAgICBTaGFyZWRNZW1vcnkqIHNo
YXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEoZGF0YVNpemUsIHRpbWVvdXQpOwpAQCAtMjE0LDkgKzIxNCw5IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4dEFzeW5jKCk7
CiAKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53YWl0Rm9yR2V0
SW1hZ2VEYXRhVG9Db21wbGV0ZSh0aW1lb3V0KSkKLSAgICAgICAgICAgIG1lbWNweShpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOworICAg
ICAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5k
YXRhKCksIGRhdGFTaXplKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtc2V0KGltYWdl
RGF0YS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRhdGFTaXplKTsKKyAgICAgICAgICAgIG1lbXNldChp
bWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFTaXplKTsKICAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAK
</data>
<flag name="commit-queue"
          id="448917"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428099</attachid>
            <date>2021-05-08 17:02:07 -0700</date>
            <delta_ts>2021-05-08 17:06:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210508170206.patch</filename>
            <type>text/plain</type>
            <size>64137</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wNS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZm
ZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBQcmVwYXJlIHRvIGZpeCBsYXllcmluZyB2aW9sYXRp
bmcgdXNlIG9mIERPTSBsZXZlbCBJbWFnZURhdGEgYmVpbmcKKyAgICAgICAgdXNlZCBieSBwbGF0
Zm9ybSBjb2RlIGJ5IGZhY3RvcmluZyBvdXQgdGhlIHBpeGVsIHN0b3JhZ2UgaW50byBhIG5ldwor
ICAgICAgICBQaXhlbEJ1ZmZlciBjbGFzcy4gU2luY2UgaXQgd2lsbCBiZSBhIGxpdHRsZSBtb3Jl
IGdlbmVyYWwgdGhhdCAKKyAgICAgICAgSW1hZ2VEYXRhIGlzIG5vdyAodGhvdWdoIEltYWdlRGF0
YSB3aWxsIG5lZWQgdG8gZ2FpbiB0aGVzZSBzb29uKQorICAgICAgICBQaXhlbEJ1ZmZlciBhbHNv
IGNhcHR1cmVzIHRoZSBwaXhlbCBmb3JtYXQgYW5kIGNvbG9yIHNwYWNlIHRoZSBwaXhlbAorICAg
ICAgICBkYXRhIHJlcHJlc2VudHMuCisKKyAgICAgICAgV2hpbGUgaGVyZSwgdXBkYXRlIEltYWdl
RGF0YTo6ZGF0YSgpIHRvIHJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbgorICAgICAgICBh
IHBvaW50ZXIgdG8gaW5kaWNhdGUgaXQgaXMgbmV2ZXIgbnVsbCBhbmQgdXBkYXRlIGFsbCB0aGUg
Y2FsbGVycy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFn
ZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1p
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6ZGVl
cENsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAq
IGh0bWwvSW1hZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OnNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjp3aWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURhdGE6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpjb2xv
clNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Zm9ybWF0IGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5SW1hZ2VEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBl
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBpeGVs
QnVmZmVyOjpkZWVwQ2xvbmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bp
eGVsQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmNvbG9y
U3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmZvcm1hdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpi
bHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3Rp
bmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjEtMDUtMDggIFJp
Y2t5IE1vbmRlbGxvICA8cm1vbmRlbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBv
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyODgsNiArMTI4OCw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxGb3JtYXQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMTIsNiArMjAxMiw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2Fs
U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDUs
NiArNDE0NSw3IEBACiAJCUJDRTY1OUE5MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U2NTlBODBF
QTkyN0I5MDA3RTQ1MzMgLyogVGhlbWVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVt
ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
NjU5RTUwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggKi87IH07CiAJCUJDRTY1QkVCMEVB
Q0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0U2OTFFNTI2
NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhlbEJ1
ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5MTUxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi87IH07CiAJCUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNF
NSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oICovOyB9OwogCQlCQ0U5
M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ0MTUxN0M1
NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oICovOyB9OwpAQCAtMTQx
NTQsNiArMTQxNTUsOCBAQAogCQlCQzQ2QzFGOTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NQYWdl
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NQYWdlUnVsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ2QzIwNDBDMEREQ0ExMDAyMENGQzMg
LyogSlNDU1NTdHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ1NTU3R5bGVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
NkMyMDUwQzBERENBMTAwMjBDRkMzIC8qIEpTQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NTU1N0eWxlUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQzQ4MzlCQTI2NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGl4ZWxCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM0ODM5QkIyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBpeGVsQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
OTE4QzAwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRnJhbWVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0OTE4QzEwQkZFQTA1MDAwOUQ2MzE2IC8qIEpT
SFRNTEZyYW1lRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNI
VE1MRnJhbWVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDkxOEMy
MEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MDI1LDYgKzI3MDI4LDggQEAKIAkJCQkyRDUwMDJG
QTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0
Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCUJDNDgzOUJCMjY0NjE4MUEwMEEyOEI2MiAvKiBQ
aXhlbEJ1ZmZlci5jcHAgKi8sCisJCQkJQkM0ODM5QkEyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVs
QnVmZmVyLmggKi8sCiAJCQkJQkNBNTU5MTIyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0
LmggKi8sCiAJCQkJNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAq
LywKIAkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
ICovLApAQCAtMzQ0MzMsNiArMzQ0MzgsNyBAQAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2
OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzU4NTk3
QzIzQTFGQ0YzMDBDNzQ1NzIgLyogUGluLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMEZGMkE1RTEx
RjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNjkx
RTUyNjQ2MzdGQzAwRUJEQzNBIC8qIFBpeGVsQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDdEMzM0NDFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNBNTU5MTQyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREVGQTIyODFFNzY2OUU4MDAwQUU5OUMgLyogUGxhdGZvcm1B
dWRpb0RhdGEuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxMyArNDAsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEpCiB7
CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvKiBkYXRh
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgZGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwogICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4oZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltYWdlRGF0YSkpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2
bSwgZGF0YU5hbWUsIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBkYXRh
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpOwogICAgIC8vIEZJWE1FOiBBZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFu
ZCBzd2l0Y2ggdG8gcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQotICAgIHZtLmhlYXAuZGVwcmVj
YXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEtPmxlbmd0aCgpKTsKKyAgICB2bS5oZWFwLmRlcHJl
Y2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1cm4g
d3JhcHBlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJh
eUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAgICAg
ICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIy
Niw4ICsxMjI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3cml0ZShJbWFnZURhdGFU
YWcpOwogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPndpZHRoKCkpOwogICAgICAgICAgICAg
ICAgIHdyaXRlKGRhdGEtPmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5k
YXRhKCktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCktPmRh
dGEoKSwgZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgd3JpdGUoZGF0
YS0+ZGF0YSgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCku
ZGF0YSgpLCBkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF1dG8qIHJlZ0V4cCA9IGpzRHlu
YW1pY0Nhc3Q8UmVnRXhwT2JqZWN0Kj4odm0sIG9iaikpIHsKQEAgLTMzOTAsOSArMzM5MCw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlc3Vs
dC0+ZGF0YSgpLT5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIG1lbWNw
eShyZXN1bHQtPmRhdGEoKS5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLT56ZXJvRmlsbCgpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC0+ZGF0YSgpLnplcm9GaWxsKCk7CiAgICAgICAgICAgICBtX3B0ciArPSBs
ZW5ndGg7CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShyZXN1bHQuZ2V0KCkpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkocmV2aXNpb24gMjc3
MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4Miw3ICs3ODIsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNj
cmlwdEV4CiAgICAgLy8gICAgICBpbnRlcm5hbCBzbG90LgogICAgIC8vIDYuMi4gSWYgSXNEZXRh
Y2hlZEJ1ZmZlcihidWZmZXIpIGlzIHRydWUsIHRoZW4gcmV0dXJuIHAgcmVqZWN0ZWQgd2l0aCBh
bgogICAgIC8vICAgICAgIkludmFsaWRTdGF0ZUVycm9yIiBET01FeGNlcHRpb24uCi0gICAgaWYg
KGltYWdlRGF0YS0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAgICBpZiAoaW1hZ2VEYXRhLT5k
YXRhKCkuaXNEZXRhY2hlZCgpKSB7CiAgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0
ZUVycm9yLCAiSW1hZ2VEYXRhJ3Mgdmlld2VkIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+
PiBJbWFnZURhdGE6OmMKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJhbmdlRXJyb3IsICJP
dXQgb2YgbWVtb3J5Il9zIH07CiAgICAgfQogICAgIGJ5dGVBcnJheS0+emVyb0ZpbGwoKTsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6ZSwgYnl0ZUFycmF5LnJlbGVhc2VO
b25OdWxsKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoeyBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc2l6ZSwgYnl0ZUFycmF5
LnJlbGVhc2VOb25OdWxsKCkgfSkpOwogfQogCiBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6
OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtNjgsNyArNjgsNyBAQCBSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zCiAgICAgYXV0byBieXRlQXJyYXkgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChkYXRhU2l6ZS51bnNhZmVHZXQo
KSk7CiAgICAgaWYgKCFieXRlQXJyYXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51
bGwoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YSh7IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzaXplLCBieXRlQXJyYXkucmVs
ZWFzZU5vbk51bGwoKSB9KSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJy
YXkpCkBAIC03Niw3ICs3Niw4IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRl
KGNvbnMKICAgICBhdXRvIGRhdGFTaXplID0gSW1hZ2VEYXRhOjpkYXRhU2l6ZShzaXplKTsKICAg
ICBpZiAoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGRhdGFTaXplLnVuc2FmZUdldCgpID4g
Ynl0ZUFycmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSkpOworCisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSB9KSk7
CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmNyZWF0ZShSZWY8
VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5LCB1bnNpZ25lZCBzdywgT3B0aW9uYWw8dW5z
aWduZWQ+IHNoKQpAQCAtOTksMjIgKzEwMCwyMiBAQCBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gSW1hZ2VEYXRhOjpjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogfQog
Ci1JbWFnZURhdGE6OkltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8VWludDhDbGFt
cGVkQXJyYXk+JiYgYnl0ZUFycmF5KQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX2RhdGEo
V1RGTW92ZShieXRlQXJyYXkpKQorSW1hZ2VEYXRhOjpJbWFnZURhdGEoUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlcikKKyAgICA6IG1fcGl4ZWxCdWZmZXIoV1RGTW92ZShwaXhlbEJ1ZmZlcikpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigoc2l6ZS5hcmVh
KCkgKiA0KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKIH0KIAorSW1hZ2VEYXRh
Ojp+SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OworCiBSZWY8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmRl
ZXBDbG9uZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKG1f
c2l6ZSwgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5s
ZW5ndGgoKSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEobV9waXhlbEJ1
ZmZlci5kZWVwQ2xvbmUoKSkpOwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSkKIHsKICAgICAvLyBQcmludCBvdXQg
dGhlIGFkZHJlc3Mgb2YgdGhlIHBpeGVsIGRhdGEgYXJyYXkKLSAgICByZXR1cm4gdHMgPDwgaW1h
Z2VEYXRhLmRhdGEoKTsKKyAgICByZXR1cm4gdHMgPDwgJmltYWdlRGF0YS5kYXRhKCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5ICsy
OSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDIxICsz
OSwyNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFy
cmF5PiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdl
RGF0YT4+IGNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIHN3LCBPcHRp
b25hbDx1bnNpZ25lZD4gc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZURhdGEoKTsKIAot
ICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGludCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgaW50IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyLnNpemUoKTsgfQorICAgIGludCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuc2l6ZSgpLndpZHRoKCk7IH0KKyAgICBpbnQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7IH0K
IAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnB0
cigpOyB9CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Bp
eGVsQnVmZmVyLmRhdGEoKTsgfQogCiAgICAgUmVmPEltYWdlRGF0YT4gZGVlcENsb25lKCkgY29u
c3Q7CiAKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CisgICAgUGl4ZWxGb3JtYXQgZm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsgfQorCiBwcml2YXRlOgot
ICAgIEltYWdlRGF0YShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsK
KyAgICBleHBsaWNpdCBJbWFnZURhdGEoUGl4ZWxCdWZmZXImJik7CisKICAgICBzdGF0aWMgQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplKGNvbnN0IEludFNpemUmKTsK
IAotICAgIEludFNpemUgbV9zaXplOwotICAgIFJlZjxVaW50OENsYW1wZWRBcnJheT4gbV9kYXRh
OworICAgIFBpeGVsQnVmZmVyIG1fcGl4ZWxCdWZmZXI7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSW1hZ2VE
YXRhJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBSZWZQdHI8SW1h
Z2VEYXRhPiBjcmVhdGVFbXB0eUltYWcKIHsKICAgICBhdXRvIGRhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShzaXplKTsKICAgICBpZiAoZGF0YSkKLSAgICAgICAgZGF0YS0+ZGF0YSgpLT56ZXJvRmls
bCgpOworICAgICAgICBkYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKICAgICByZXR1cm4gZGF0YTsK
IH0KIApAQCAtMjIyMCw3ICsyMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IWRhdGEuZGF0YSgpIHx8IGRhdGEuZGF0YSgpLT5pc0RldGFjaGVkKCkpCisgICAgaWYgKGRhdGEu
ZGF0YSgpLmlzRGV0YWNoZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRpcnR5V2lk
dGggPCAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3NDksNyArNDc0OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlvbklELCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
SW1hZ2UsIGZhbHNlLCBiaXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0bWFwLT5mb3JjaWJs
eVByZW11bHRpcGx5QWxwaGEoKSwgc291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VI
ZWlnaHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SW1h
Z2VEYXRhPiYgcGl4ZWxzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAgICAgIGlmIChwaXhl
bHMtPmRhdGEoKS0+aXNEZXRhY2hlZCgpKSB7CisgICAgICAgIGlmIChwaXhlbHMtPmRhdGEoKS5p
c0RldGFjaGVkKCkpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJUaGUgc291cmNlIGRhdGEgaGFz
IGJlZW4gZGV0YWNoZWQuIik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CkBA
IC00Nzc4LDcgKzQ3NzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCCiAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZv
cm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVt
dWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCiAgICAgICAgIGlmICghbV91bnBhY2tGbGlw
WSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYm
ICFzZWxlY3RpbmdTdWJSZWN0YW5nbGUgJiYgZGVwdGggPT0gMSkgewogICAgICAgICAgICAgbmVl
ZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJ5dGVMZW5ndGggPSBwaXhlbHMtPmRh
dGEoKS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHBpeGVscy0+ZGF0
YSgpLmJ5dGVMZW5ndGgoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh0eXBl
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgdHlwZSBw
YWNrL3VucGFjayBpc24ndCBpbXBsZW1lbnRlZC4KQEAgLTQ3OTQsMjMgKzQ3OTQsMjMgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICBpZiAoZnVuY3Rp
b25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleEltYWdlMkQpIHsKICAgICAgICAgICAgIHRl
eEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAg
ICAgIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LndpZHRoKCksIGFkanVzdGVkU291cmNlSW1hZ2VS
ZWN0LmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0
aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1YkltYWdlMkQpIHsK
ICAgICAgICAgICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsCiAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwg
YWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgZm9ybWF0
LCBmb3JtYXQsIHR5cGUsIGJ5dGVMZW5ndGgsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkg
OiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVs
cy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNFKEFOR0xFKQogICAg
ICAgICAgICAgLy8gM0QgZnVuY3Rpb25zLgogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSUQgPT0g
VGV4SW1hZ2VGdW5jdGlvbklEOjpUZXhJbWFnZTNEKSB7CiAgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0aCgpLCBhZGp1c3RlZFNvdXJj
ZUltYWdlUmVjdC5oZWlnaHQoKSwgZGVwdGgsIDAsCi0gICAgICAgICAgICAgICAgICAgIGZvcm1h
dCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhl
bHMtPmRhdGEoKS0+ZGF0YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBw
aXhlbHMtPmRhdGEoKS5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSUQgPT0gVGV4SW1hZ2VGdW5jdGlvbklE
OjpUZXhTdWJJbWFnZTNEKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdl
M0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QuaGVpZ2h0KCksIGRlcHRoLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5
cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5k
YXRhKCktPmRhdGEoKSwgYnl0ZUxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBmb3JtYXQs
IHR5cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxz
LT5kYXRhKCkuZGF0YSgpLCBieXRlTGVuZ3RoKSk7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAg
ICAgICAgICAgLy8gV2ViR0wgMi4wIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIEFOR0xFIGJh
Y2tlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksOCArMTQ1OSw4IEBAIFJlZjxK
U09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG8KIFJlZjxKU09OOjpBcnJheU9mPEpT
T046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9ySW1hZ2VEYXRhKGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhKQogewogICAgIGF1dG8gZGF0YSA9IEpTT046OkFycmF5T2Y8
aW50Pjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbWFnZURhdGEuZGF0
YSgpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0YS5kYXRh
KCktPml0ZW0oaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1hZ2VEYXRhLmRhdGEo
KS5sZW5ndGgoKTsgKytpKQorICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0YS5kYXRhKCku
aXRlbShpKSk7CiAKICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46
OmNyZWF0ZSgpOwogICAgIGFycmF5LT5hZGRJdGVtKFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzksNyArNzc5
LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBh
Y2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1bnBhY2tJbWFn
ZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVt
dWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKKyAgICBp
ZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFj
a0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpE
b1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzczLDE4
IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICBpZiAoIWlt
YWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhl
bEFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkubGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIHVpbnQ4X3Qg
YSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOwogICAgICAgICBpZiAoIWEp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5
Lml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CiAKICAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAu
MjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0g
ICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAogICAg
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOwpAQCAtMjQxLDEwICsyNDEsMTAgQEAgUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZQogICAgICAgICBkZXN0UmVjdC5zZXRZKC1z
cmNSZWN0U2NhbGVkLnkoKSk7CiAKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RT
Y2FsZWQuc2l6ZSgpKQotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwoKTsKKyAg
ICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKIAogICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVz
dFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGlt
YWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CiAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CiAgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0
Q2xpcHBlZC54KCkgKiA0OwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoQWwKICAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsg
ZGVzdFJlY3QueCgpICogNDsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGlt
YWdlRGF0YS5zaXplKCkud2lkdGgoKTsKLSAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRh
LmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBz
cmNSZWN0Q2xpcHBlZC54KCkgKiA0OworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEu
ZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKICAgICAgICAgaW5w
dXRGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bp
eGVsQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1BpeGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8
SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJiBkYXRhKQorICAgIDogbV9jb2xvclNwYWNlIHsgY29s
b3JTcGFjZSB9CisgICAgLCBtX2Zvcm1hdCB7IGZvcm1hdCB9CisgICAgLCBtX3NpemUgeyBzaXpl
IH0KKyAgICAsIG1fZGF0YSB7IFdURk1vdmUoZGF0YSkgfQoreworICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oKG1fc2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQo
KSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKK30KKworUGl4ZWxCdWZmZXI6On5QaXhlbEJ1ZmZlcigp
ID0gZGVmYXVsdDsKKworUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9uZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHsgbV9jb2xvclNwYWNlLCBtX2Zvcm1hdCwgbV9zaXplLCBVaW50OENs
YW1wZWRBcnJheTo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxlbmd0aCgpKSB9Owor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQaXhlbEJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOwor
cHVibGljOgorICAgIFBpeGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQsIGNvbnN0IEludFNpemUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7CisgICAg
flBpeGVsQnVmZmVyKCk7CisKKyAgICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1
bHQ7CisgICAgUGl4ZWxCdWZmZXImIG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7
CisKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29sb3JTcGFjZTsgfQorICAgIFBpeGVsRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgIEpTQzo6VWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGEuZ2V0KCk7IH0KKworICAgIFBpeGVsQnVmZmVyIGRlZXBDbG9uZSgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisgICAg
UGl4ZWxGb3JtYXQgbV9mb3JtYXQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgUmVmPEpTQzo6
VWludDhDbGFtcGVkQXJyYXk+IG1fZGF0YTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyMzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTA4LDggKzkwOCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRv
d0J1ZmZlcihJbWFnZUIKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEoKTsKLSAgICBibHVyTGF5
ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0
LndpZHRoKCkgKiA0KTsKKyAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKS5kYXRh
KCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwogICAgIGxheWVySW1h
Z2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
KmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRH
TEFOR0xFLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDE0ICs5MCwxNCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HCiAgICAgU2NvcGVkUGl4ZWxTdG9yYWdlTW9kZSBwYWNrU2tpcFBpeGVscyhHTF9QQUNLX1NL
SVBfUElYRUxTLCAwLCBtX2lzRm9yV2ViR0wyKTsKICAgICBTY29wZWRCdWZmZXJCaW5kaW5nIHNj
b3BlZFBpeGVsUGFja0J1ZmZlclJlc2V0KEdMX1BJWEVMX1BBQ0tfQlVGRkVSLCAwLCBtX2lzRm9y
V2ViR0wyKTsKIAotICAgIGdsOjpSZWFkblBpeGVsc1JvYnVzdEFOR0xFKDAsIDAsIGltYWdlRGF0
YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSk7CisgICAgZ2w6OlJlYWRuUGl4ZWxzUm9i
dXN0QU5HTEUoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCks
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAg
ICAgLy8gRklYTUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3VyZmFj
ZSBib3VuZCB0byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEgaW4g
dGhlIElPU3VyZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQaXhl
bHMgd2lsbCBpbiBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVlcy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0CiAj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29udGV4
dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMo
aW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRhdGEo
KS0+ZGF0YSgpKTsKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW1hZ2VEYXRh
LT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCkp
OwogI2VuZGlmCiAgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEdMQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDggKzExMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50VG9DYW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29udmVydCBSR0JBIHRvIEJH
UkEuIEJHUkEgaXMgQ0FJUk9fRk9STUFUX0FSR0IzMiBvbiBsaXR0bGUtZW5kaWFuIGFyY2hpdGVj
dHVyZXMuCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxl
bmd0aCgpOwotICAgIHVpbnQ4X3QqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7
CisgICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCk7
CisgICAgdWludDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3
YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBhdXRvIGltYWdlU2l6ZSA9
IGltYWdlRGF0YS0+c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0g
ICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGlt
YWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT53aWR0aCgp
ICogNCkpOworICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9B
UkdCMzIsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRh
LT53aWR0aCgpICogNCkpOwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUo
V1RGTW92ZShpbWFnZVN1cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJKHJl
dmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dEdMQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbgogICAgIGF1dG8gaW1hZ2VT
aXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgaW50IHJvd0J5dGVzID0gaW1hZ2VTaXplLndp
ZHRoKCkgKiA0OwogICAgICAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6
ZS5oZWlnaHQoKTsKLSAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCk7CisgICAgdWludDhfdCogaW1hZ2VQaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5k
YXRhKCk7CiAgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goaW1hZ2VQaXhlbHMs
IGRhdGFTaXplKTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmaW1hZ2VEYXRhLmxlYWtS
ZWYoKSwgaW1hZ2VQaXhlbHMsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw2IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVm
ZmVyQ0dCYWNrZW4KICAgICBBU1NFUlQodXRpKTsKIAogICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1h
Z2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5Owog
CiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQ
RUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBj
b21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgpAQCAtMTkyLDcgKzE5MSw3IEBAIFJldGFpblB0cjxD
RkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5
ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIGF1dG8gcHJvdGVjdGVk
UGl4ZWxBcnJheSA9IG1ha2VSZWYoaW1hZ2VEYXRhLT5kYXRhKCkpOwogICAgICAgICBzaXplX3Qg
ZGF0YVNpemUgPSBwcm90ZWN0ZWRQaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgIElu
dFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGNmRGF0YShjb25zdAogICAgIEFTU0VSVCh1dGkpOwogCiAgICAgQ0dJbWFnZUFscGhhSW5m
byBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciog
ZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0g
c291cmNlLmRhdGEoKS5kYXRhKCk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRE
YXRhOwogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIHBp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCk7CiAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdl
RGF0YS0+c2l6ZSgpOwogCiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxv
YXRzKG1fdmFsdWVzKTsKQEAgLTI5OSwxNiArMjk5LDE2IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dO
OgogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0g
ICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4oKnBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRV
UkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPigq
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVmZmVj
dFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBp
eGVsQXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU+KCpwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsK
KyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0
VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4oKnBpeGVsQXJyYXksIHZh
bHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJy
YXlEaW1lbnNpb25zKTsKICAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlz
aW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDEx
IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVMKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IGlt
YWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhl
bEFycmF5KQorICAgIGlmICghaW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8mIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdC0+ZGF0YSgpOworCiAgICAgTG9va3VwVGFibGUg
cmVkVGFibGU7CiAgICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsKICAgICBMb29rdXBUYWJsZSBi
bHVlVGFibGU7CkBAIC0xMjAsOSArMTIxLDkgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5UwogICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFi
bGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIGRyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS0+
ZGF0YSgpOworICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KHBpeGVsQXJyYXksIGRyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFy
cmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIGRhdGFb
cGl4ZWxPZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMCw5ICsyMzAsMTAgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKAogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
KSB7CiAgICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJl
c3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkp
CisgICAgICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKIAog
ICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICBhdXRvIHNyY1Bp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CkBAIC0yNDAsOSArMjQxLDkgQEAgdm9pZCBGRUNvbXBvc2l0
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0
UGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwog
Ci0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFycmF5LCAqZHN0
UGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJp
dGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2sy
LCBtX2szLCBtX2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzYsMTAgKzM3NiwxMiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0CiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8g
cmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQor
CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgZHN0
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CiAKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJy
YXk7CkBAIC0zOTUsNyArMzk3LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdAogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNy
Y1BpeGVsQXJyYXksCi0gICAgICAgICpkc3RQaXhlbEFycmF5LAorICAgICAgICBkc3RQaXhlbEFy
cmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdo
dCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwx
MCArMTAwLDExIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAg
ICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKICAgICBh
dXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkg
OiBudWxscHRyOwotICAgIGlmICghZHN0UGl4ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKTsKKwogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0
byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
KTsKIApAQCAtMTQwLDcgKzE0MSw3IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3Jt
QXBwbHlTb2YKICAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2Nh
bGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNl
bWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwogICAgICAgICAgICAgaW50IHNyY1kgPSB5
ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5p
dGVtKGRzdEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAK
LSAgICAgICAgICAgIHVuc2lnbmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihkc3RQaXhlbEFycmF5LT5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1
bnNpZ25lZCogZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4
ZWxBcnJheS5kYXRhKCkgKyBkc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwg
c3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6
ZS5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgICpkc3RQaXhlbFB0ciA9IDA7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcy
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBAQCB2b2lkIEZFRHJvcFNo
YWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
LSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwg
aW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBh
dXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRv
dy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCks
IDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKICAgICAKICAgICByZXN1bHRJbWFnZS0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFn
ZURhdGEsIHNoYWRvd0FyZWEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNCwxNCArNTI0LDE1IEBAIHZv
aWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2EKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghZHN0UGl4
ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBh
dXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxw
aGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqZHN0UGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNTQ0LDcgKzU0NSw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2EKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVs
U2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRm
b3JtQXBwbHkoZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgp
LCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1
c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24g
Mjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDIxICs0NzYsMjIgQEAgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3V0UGl4ZWxB
cnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRv
JiByZXN1bHRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxw
aGFJbWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1dFBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChyZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhl
ciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5k
YXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBG
aXJlZm94KSBoYXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0
TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55
d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24K
IAogICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKLSAgICBkcmF3TGlnaHRpbmcoKnJlc3V0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNp
emUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGlu
ZyhyZXN1bHRQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBh
aW50U2l6ZS5oZWlnaHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDE2ICsyNDQsMTcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byog
ZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxw
dHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5kYXRhKCk7CisKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUgcmFkaXVz
ID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAg
aWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgaWYgKHBsYXRmb3Jt
QXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwpAQCAtMjY1LDEyICsyNjYsMTIgQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIGludCByYWRpdXNY
ID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgp
KTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgp
IC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIAotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0
ZSgqZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQor
ICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVm
ZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhl
bEFycmF5ID0gZHN0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYo
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBw
YWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihy
YWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsMTUgKzM5NywxNiBA
QCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsCiB2b2lkIEZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFw
aXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGF1dG8mIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSBy
ZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICByZXN1bHRTaXplLnNj
YWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHBpeGVsQXJyYXktPnplcm9GaWxsKCk7CisgICAgICAgIHBpeGVsQXJy
YXkuemVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQwLDcgKzQ0MSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihp
KTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMucGl4ZWxBcnJheSA9IHBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRp
bmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0
YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsK
QEAgLTQ1Niw3ICs0NTcsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYg
dGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRv
byBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKCpwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIDAsIGhlaWdodCk7CisgICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5LCBwYWludGluZ0Rh
dGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEs
OSArMjAxLDkgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaQogICAg
IGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7
Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKKyAgICBh
dXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAg
ICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxB
cnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CiAKICAgICAvLyBXZSBtdXN0IGhhdmUg
Zm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKICAgICBBU1NFUlQoIShw
aXhlbEFycmF5TGVuZ3RoICUgNCkpOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWYKICAgICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZl
clJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRw
dXRGb3JtYXQpOwogICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47
Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdlRGF0YS0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6
Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlRGF0CiAgICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0
SW1hZ2VEYXRhVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0
KTsKICAgICBpZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIGNv
cHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRl
c3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwg
ZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBA
IC01MDAsMTQgKzUwMCwxNCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsCiAgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpj
cmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
Y29sb3JTcGFjZSkpIHsKICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRp
b24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMobV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAK
IHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDEsNyArNTQxLDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29weUltYWdlQnl0
ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0
KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7
CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBp
bWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndp
ZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlt
YWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGln
bm1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIFJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICAg
ICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICA6OmdsUmVh
ZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkpOworICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgp
KTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhl
bFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMSwxMSArMjAxLDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0
ZVJhc3QKICAgICAKICAgICAvLyBXZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBpbWFnZURh
dGEgY291bGQgYmUgbnVsbHB0ci4gQSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVn
ZSwgaW1hZ2VEYXRhOjpjcmVhdGUKICAgICAvLyBjYW4gcmV0dXJuIGEgbnVsbHB0ciBiZWNhdXNl
IGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dlZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQK
LSAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgaWYgKCFpbWFn
ZURhdGEpCiAgICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byogcGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRh
LT5kYXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVu
Z3RoKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwg
aXMgZm91ciBieXRlczogUkdCQS4KICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwg
MSkgKiAyNTUuMGYpKTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAgICAgICAgZm9yIChpbnQgeSA9IG1pbkJ1ZmZlclk7IHkg
PCBtYXhCdWZmZXJZOyArK3kpIHsKICAgICAgICAgICAgIGludCBzdGFydFggPSAtMTsKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCwgcGl4ZWxB
cnJheU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHBpeGVs
QXJyYXktPml0ZW0ocGl4ZWxBcnJheU9mZnNldCk7CisgICAgICAgICAgICAgICAgdWludDhfdCBh
bHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEFycmF5T2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBib29sIGFscGhhQWJvdmVUaHJlc2hvbGQgPSBhbHBoYSA+IGFscGhhUGl4ZWxUaHJlc2hvbGQ7
CiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0WCA9PSAtMSAmJiBhbHBoYUFib3ZlVGhyZXNob2xk
KSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IHg7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAyMS0wNS0wOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZmZXIgZnJvbSBET00gc3BlY2lmaWMgSW1h
Z2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBVcGRhdGUgZm9yIEltYWdlRGF0YTo6ZGF0YSgpIHJldHVybmluZyBhIHJlZmVyZW5jZS4KKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1h
Z2VEYXRhU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VE
YXRhPj46OmVuY29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOgorCiAyMDIxLTA1LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gVXNlIHRoZSBuZXcgbGlic291
cCBuZXR3b3JrIG1ldHJpY3MgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0CiB7CiAgICAgTUVTU0FHRV9D
SEVDSyhtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRJbWFnZURh
dGEgd2l0aG91dCBhIGJ1ZmZlciB0byB3cml0ZSBpbnRvIik7CiAKLSAgICBpZiAoaW1hZ2VEYXRh
ICYmIGltYWdlRGF0YS0+ZGF0YSgpKSB7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRh
LT5kYXRhKCktPmJ5dGVMZW5ndGgoKSA8PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6
ZSgpLCAiU2htZW0gZm9yIHJldHVybiBvZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7Ci0g
ICAgICAgIG1lbWNweShtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpKTsKKyAg
ICBpZiAoaW1hZ2VEYXRhKSB7CisgICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRhLT5kYXRh
KCkuYnl0ZUxlbmd0aCgpIDw9IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCksICJT
aG1lbSBmb3IgcmV0dXJuIG9mIGdldEltYWdlRGF0YSBpcyB0b28gc21hbGwiKTsKKyAgICAgICAg
bWVtY3B5KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0
YSgpLmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbWVtc2V0KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAsIG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3NzIzMCkK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMTksOSArMzExOSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8V2Vi
Q29yZTo6SW1hZ2VEYXQKIHsKICAgICBlbmNvZGVyIDw8IGltYWdlRGF0YS0+c2l6ZSgpOwogCi0g
ICAgYXV0byByYXdEYXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmJ5dGVMZW5ndGgo
KSwgMSk7CisgICAgYXV0byYgcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEuYnl0ZUxlbmd0aCgpKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLmRhdGEoKSwgcmF3RGF0YS5ieXRl
TGVuZ3RoKCksIDEpOwogfQogCiB0ZW1wbGF0ZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
OSArMjAwLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAgICAgYXV0byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0
LnNpemUoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkK
KyAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKTsK
KyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgp
OwogCiAgICAgICAgIElQQzo6VGltZW91dCB0aW1lb3V0ID0gNV9zOwogICAgICAgICBTaGFyZWRN
ZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFy
ZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUsIHRpbWVvdXQpOwpAQCAtMjE0LDkgKzIx
NCw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4
dEFzeW5jKCk7CiAKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53
YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSh0aW1lb3V0KSkKLSAgICAgICAgICAgIG1lbWNw
eShpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNp
emUpOworICAgICAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVk
TWVtb3J5LT5kYXRhKCksIGRhdGFTaXplKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVt
c2V0KGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRhdGFTaXplKTsKKyAgICAgICAgICAg
IG1lbXNldChpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFTaXplKTsKICAgICAgICAg
cmV0dXJuIGltYWdlRGF0YTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428100</attachid>
            <date>2021-05-08 17:06:20 -0700</date>
            <delta_ts>2021-05-08 18:29:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225554-20210508170619.patch</filename>
            <type>text/plain</type>
            <size>64137</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wNS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZm
ZXIgZnJvbSBET00gc3BlY2lmaWMgSW1hZ2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBQcmVwYXJlIHRvIGZpeCBsYXllcmluZyB2aW9sYXRp
bmcgdXNlIG9mIERPTSBsZXZlbCBJbWFnZURhdGEgYmVpbmcKKyAgICAgICAgdXNlZCBieSBwbGF0
Zm9ybSBjb2RlIGJ5IGZhY3RvcmluZyBvdXQgdGhlIHBpeGVsIHN0b3JhZ2UgaW50byBhIG5ldwor
ICAgICAgICBQaXhlbEJ1ZmZlciBjbGFzcy4gU2luY2UgaXQgd2lsbCBiZSBhIGxpdHRsZSBtb3Jl
IGdlbmVyYWwgdGhhdCAKKyAgICAgICAgSW1hZ2VEYXRhIGlzIG5vdyAodGhvdWdoIEltYWdlRGF0
YSB3aWxsIG5lZWQgdG8gZ2FpbiB0aGVzZSBzb29uKQorICAgICAgICBQaXhlbEJ1ZmZlciBhbHNv
IGNhcHR1cmVzIHRoZSBwaXhlbCBmb3JtYXQgYW5kIGNvbG9yIHNwYWNlIHRoZSBwaXhlbAorICAg
ICAgICBkYXRhIHJlcHJlc2VudHMuCisKKyAgICAgICAgV2hpbGUgaGVyZSwgdXBkYXRlIEltYWdl
RGF0YTo6ZGF0YSgpIHRvIHJldHVybiBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbgorICAgICAgICBh
IHBvaW50ZXIgdG8gaW5kaWNhdGUgaXQgaXMgbmV2ZXIgbnVsbCBhbmQgdXBkYXRlIGFsbCB0aGUg
Y2FsbGVycy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFn
ZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1p
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwp
OgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6ZGVl
cENsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAq
IGh0bWwvSW1hZ2VEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OnNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjp3aWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURhdGE6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURhdGE6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpjb2xv
clNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Zm9ybWF0IGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVtcHR5SW1hZ2VEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBl
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGl4ZWxCdWZmZXI6OlBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBpeGVs
QnVmZmVyOjpkZWVwQ2xvbmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bp
eGVsQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmNvbG9y
U3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmZvcm1hdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpi
bHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3Rp
bmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjEtMDUtMDggIFJp
Y2t5IE1vbmRlbGxvICA8cm1vbmRlbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBv
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEyODgsNiArMTI4OCw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxGb3JtYXQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMTIsNiArMjAxMiw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2Fs
U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eUJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDUs
NiArNDE0NSw3IEBACiAJCUJDRTY1OUE5MEVBOTI3QjkwMDdFNDUzMyAvKiBUaGVtZVR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U2NTlBODBF
QTkyN0I5MDA3RTQ1MzMgLyogVGhlbWVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVt
ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
NjU5RTUwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggKi87IH07CiAJCUJDRTY1QkVCMEVB
Q0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0U2OTFFNTI2
NDYzN0ZDMDBFQkRDM0EgLyogUGl4ZWxCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDgzOUJBMjY0NjE4MUEwMEEyOEI2MiAvKiBQaXhlbEJ1
ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5MTUxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggKi87IH07CiAJCUJDRTc4OTg2MTEyMEU3QTYwMDYwRUNF
NSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0U3ODk4NTExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oICovOyB9OwogCQlCQ0U5
M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTkzRjQ0MTUxN0M1
NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oICovOyB9OwpAQCAtMTQx
NTQsNiArMTQxNTUsOCBAQAogCQlCQzQ2QzFGOTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NQYWdl
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NQYWdlUnVsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ2QzIwNDBDMEREQ0ExMDAyMENGQzMg
LyogSlNDU1NTdHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ1NTU3R5bGVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
NkMyMDUwQzBERENBMTAwMjBDRkMzIC8qIEpTQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NTU1N0eWxlUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQzQ4MzlCQTI2NDYxODFBMDBBMjhCNjIgLyogUGl4ZWxCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGl4ZWxCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM0ODM5QkIyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVsQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBpeGVsQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
OTE4QzAwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRnJhbWVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0OTE4QzEwQkZFQTA1MDAwOUQ2MzE2IC8qIEpT
SFRNTEZyYW1lRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNI
VE1MRnJhbWVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDkxOEMy
MEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MDI1LDYgKzI3MDI4LDggQEAKIAkJCQkyRDUwMDJG
QTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0
Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCUJDNDgzOUJCMjY0NjE4MUEwMEEyOEI2MiAvKiBQ
aXhlbEJ1ZmZlci5jcHAgKi8sCisJCQkJQkM0ODM5QkEyNjQ2MTgxQTAwQTI4QjYyIC8qIFBpeGVs
QnVmZmVyLmggKi8sCiAJCQkJQkNBNTU5MTIyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0
LmggKi8sCiAJCQkJNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAq
LywKIAkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
ICovLApAQCAtMzQ0MzMsNiArMzQ0MzgsNyBAQAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2
OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzU4NTk3
QzIzQTFGQ0YzMDBDNzQ1NzIgLyogUGluLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMEZGMkE1RTEx
RjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNjkx
RTUyNjQ2MzdGQzAwRUJEQzNBIC8qIFBpeGVsQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDdEMzM0NDFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNBNTU5MTQyNjNEQkQ3OTAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREVGQTIyODFFNzY2OUU4MDAwQUU5OUMgLyogUGxhdGZvcm1B
dWRpb0RhdGEuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxMyArNDAsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEpCiB7
CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvKiBkYXRh
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgZGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwogICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4oZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltYWdlRGF0YSkpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGF0YSIpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2
bSwgZGF0YU5hbWUsIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBkYXRh
KSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpOwogICAgIC8vIEZJWE1FOiBBZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFu
ZCBzd2l0Y2ggdG8gcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQotICAgIHZtLmhlYXAuZGVwcmVj
YXRlZFJlcG9ydEV4dHJhTWVtb3J5KGRhdGEtPmxlbmd0aCgpKTsKKyAgICB2bS5oZWFwLmRlcHJl
Y2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1cm4g
d3JhcHBlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBpbWFn
ZURhdGEtPmRhdGEoKS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJh
eUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAgICAg
ICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIy
Niw4ICsxMjI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3cml0ZShJbWFnZURhdGFU
YWcpOwogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPndpZHRoKCkpOwogICAgICAgICAgICAg
ICAgIHdyaXRlKGRhdGEtPmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5k
YXRhKCktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCktPmRh
dGEoKSwgZGF0YS0+ZGF0YSgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgd3JpdGUoZGF0
YS0+ZGF0YSgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5kYXRhKCku
ZGF0YSgpLCBkYXRhLT5kYXRhKCkubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGF1dG8qIHJlZ0V4cCA9IGpzRHlu
YW1pY0Nhc3Q8UmVnRXhwT2JqZWN0Kj4odm0sIG9iaikpIHsKQEAgLTMzOTAsOSArMzM5MCw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlc3Vs
dC0+ZGF0YSgpLT5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIG1lbWNw
eShyZXN1bHQtPmRhdGEoKS5kYXRhKCksIG1fcHRyLCBsZW5ndGgpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHJlc3VsdC0+ZGF0YSgpLT56ZXJvRmlsbCgpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC0+ZGF0YSgpLnplcm9GaWxsKCk7CiAgICAgICAgICAgICBtX3B0ciArPSBs
ZW5ndGg7CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShyZXN1bHQuZ2V0KCkpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkocmV2aXNpb24gMjc3
MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4Miw3ICs3ODIsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNj
cmlwdEV4CiAgICAgLy8gICAgICBpbnRlcm5hbCBzbG90LgogICAgIC8vIDYuMi4gSWYgSXNEZXRh
Y2hlZEJ1ZmZlcihidWZmZXIpIGlzIHRydWUsIHRoZW4gcmV0dXJuIHAgcmVqZWN0ZWQgd2l0aCBh
bgogICAgIC8vICAgICAgIkludmFsaWRTdGF0ZUVycm9yIiBET01FeGNlcHRpb24uCi0gICAgaWYg
KGltYWdlRGF0YS0+ZGF0YSgpLT5pc0RldGFjaGVkKCkpIHsKKyAgICBpZiAoaW1hZ2VEYXRhLT5k
YXRhKCkuaXNEZXRhY2hlZCgpKSB7CiAgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0
ZUVycm9yLCAiSW1hZ2VEYXRhJ3Mgdmlld2VkIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+
PiBJbWFnZURhdGE6OmMKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJhbmdlRXJyb3IsICJP
dXQgb2YgbWVtb3J5Il9zIH07CiAgICAgfQogICAgIGJ5dGVBcnJheS0+emVyb0ZpbGwoKTsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6ZSwgYnl0ZUFycmF5LnJlbGVhc2VO
b25OdWxsKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoeyBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc2l6ZSwgYnl0ZUFycmF5
LnJlbGVhc2VOb25OdWxsKCkgfSkpOwogfQogCiBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6
OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtNjgsNyArNjgsNyBAQCBSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zCiAgICAgYXV0byBieXRlQXJyYXkgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChkYXRhU2l6ZS51bnNhZmVHZXQo
KSk7CiAgICAgaWYgKCFieXRlQXJyYXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51
bGwoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YSh7IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzaXplLCBieXRlQXJyYXkucmVs
ZWFzZU5vbk51bGwoKSB9KSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJy
YXkpCkBAIC03Niw3ICs3Niw4IEBAIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRl
KGNvbnMKICAgICBhdXRvIGRhdGFTaXplID0gSW1hZ2VEYXRhOjpkYXRhU2l6ZShzaXplKTsKICAg
ICBpZiAoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IGRhdGFTaXplLnVuc2FmZUdldCgpID4g
Ynl0ZUFycmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSkpOworCisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSB9KSk7
CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFnZURhdGE6OmNyZWF0ZShSZWY8
VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5LCB1bnNpZ25lZCBzdywgT3B0aW9uYWw8dW5z
aWduZWQ+IHNoKQpAQCAtOTksMjIgKzEwMCwyMiBAQCBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gSW1hZ2VEYXRhOjpjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogfQog
Ci1JbWFnZURhdGE6OkltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8VWludDhDbGFt
cGVkQXJyYXk+JiYgYnl0ZUFycmF5KQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX2RhdGEo
V1RGTW92ZShieXRlQXJyYXkpKQorSW1hZ2VEYXRhOjpJbWFnZURhdGEoUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlcikKKyAgICA6IG1fcGl4ZWxCdWZmZXIoV1RGTW92ZShwaXhlbEJ1ZmZlcikpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigoc2l6ZS5hcmVh
KCkgKiA0KS51bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKIH0KIAorSW1hZ2VEYXRh
Ojp+SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OworCiBSZWY8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmRl
ZXBDbG9uZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKG1f
c2l6ZSwgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5s
ZW5ndGgoKSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEobV9waXhlbEJ1
ZmZlci5kZWVwQ2xvbmUoKSkpOwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSkKIHsKICAgICAvLyBQcmludCBvdXQg
dGhlIGFkZHJlc3Mgb2YgdGhlIHBpeGVsIGRhdGEgYXJyYXkKLSAgICByZXR1cm4gdHMgPDwgaW1h
Z2VEYXRhLmRhdGEoKTsKKyAgICByZXR1cm4gdHMgPDwgJmltYWdlRGF0YS5kYXRhKCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5ICsy
OSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDIxICsz
OSwyNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFy
cmF5PiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdl
RGF0YT4+IGNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIHN3LCBPcHRp
b25hbDx1bnNpZ25lZD4gc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZURhdGEoKTsKIAot
ICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGludCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgaW50IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyLnNpemUoKTsgfQorICAgIGludCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuc2l6ZSgpLndpZHRoKCk7IH0KKyAgICBpbnQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7IH0K
IAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnB0
cigpOyB9CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Bp
eGVsQnVmZmVyLmRhdGEoKTsgfQogCiAgICAgUmVmPEltYWdlRGF0YT4gZGVlcENsb25lKCkgY29u
c3Q7CiAKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CisgICAgUGl4ZWxGb3JtYXQgZm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsgfQorCiBwcml2YXRlOgot
ICAgIEltYWdlRGF0YShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsK
KyAgICBleHBsaWNpdCBJbWFnZURhdGEoUGl4ZWxCdWZmZXImJik7CisKICAgICBzdGF0aWMgQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGRhdGFTaXplKGNvbnN0IEludFNpemUmKTsK
IAotICAgIEludFNpemUgbV9zaXplOwotICAgIFJlZjxVaW50OENsYW1wZWRBcnJheT4gbV9kYXRh
OworICAgIFBpeGVsQnVmZmVyIG1fcGl4ZWxCdWZmZXI7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSW1hZ2VE
YXRhJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBSZWZQdHI8SW1h
Z2VEYXRhPiBjcmVhdGVFbXB0eUltYWcKIHsKICAgICBhdXRvIGRhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShzaXplKTsKICAgICBpZiAoZGF0YSkKLSAgICAgICAgZGF0YS0+ZGF0YSgpLT56ZXJvRmls
bCgpOworICAgICAgICBkYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKICAgICByZXR1cm4gZGF0YTsK
IH0KIApAQCAtMjIyMCw3ICsyMjIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IWRhdGEuZGF0YSgpIHx8IGRhdGEuZGF0YSgpLT5pc0RldGFjaGVkKCkpCisgICAgaWYgKGRhdGEu
ZGF0YSgpLmlzRGV0YWNoZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRpcnR5V2lk
dGggPCAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3NDksNyArNDc0OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlvbklELCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
SW1hZ2UsIGZhbHNlLCBiaXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0bWFwLT5mb3JjaWJs
eVByZW11bHRpcGx5QWxwaGEoKSwgc291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VI
ZWlnaHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SW1h
Z2VEYXRhPiYgcGl4ZWxzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAgICAgIGlmIChwaXhl
bHMtPmRhdGEoKS0+aXNEZXRhY2hlZCgpKSB7CisgICAgICAgIGlmIChwaXhlbHMtPmRhdGEoKS5p
c0RldGFjaGVkKCkpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJUaGUgc291cmNlIGRhdGEgaGFz
IGJlZW4gZGV0YWNoZWQuIik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CkBA
IC00Nzc4LDcgKzQ3NzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCCiAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZv
cm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVt
dWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCiAgICAgICAgIGlmICghbV91bnBhY2tGbGlw
WSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYm
ICFzZWxlY3RpbmdTdWJSZWN0YW5nbGUgJiYgZGVwdGggPT0gMSkgewogICAgICAgICAgICAgbmVl
ZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJ5dGVMZW5ndGggPSBwaXhlbHMtPmRh
dGEoKS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHBpeGVscy0+ZGF0
YSgpLmJ5dGVMZW5ndGgoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh0eXBl
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgdHlwZSBw
YWNrL3VucGFjayBpc24ndCBpbXBsZW1lbnRlZC4KQEAgLTQ3OTQsMjMgKzQ3OTQsMjMgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICBpZiAoZnVuY3Rp
b25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleEltYWdlMkQpIHsKICAgICAgICAgICAgIHRl
eEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAg
ICAgIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0LndpZHRoKCksIGFkanVzdGVkU291cmNlSW1hZ2VS
ZWN0LmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0
aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkp
OworICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoZnVuY3Rpb25JRCA9PSBUZXhJbWFnZUZ1bmN0aW9uSUQ6OlRleFN1YkltYWdlMkQpIHsK
ICAgICAgICAgICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsCiAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwg
YWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgZm9ybWF0
LCBmb3JtYXQsIHR5cGUsIGJ5dGVMZW5ndGgsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkg
OiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgYnl0ZUxlbmd0aCwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVs
cy0+ZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNFKEFOR0xFKQogICAg
ICAgICAgICAgLy8gM0QgZnVuY3Rpb25zLgogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSUQgPT0g
VGV4SW1hZ2VGdW5jdGlvbklEOjpUZXhJbWFnZTNEKSB7CiAgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC53aWR0aCgpLCBhZGp1c3RlZFNvdXJj
ZUltYWdlUmVjdC5oZWlnaHQoKSwgZGVwdGgsIDAsCi0gICAgICAgICAgICAgICAgICAgIGZvcm1h
dCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhl
bHMtPmRhdGEoKS0+ZGF0YSgpLCBieXRlTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBw
aXhlbHMtPmRhdGEoKS5kYXRhKCksIGJ5dGVMZW5ndGgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSUQgPT0gVGV4SW1hZ2VGdW5jdGlvbklE
OjpUZXhTdWJJbWFnZTNEKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdl
M0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJlY3Qud2lkdGgoKSwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QuaGVpZ2h0KCksIGRlcHRoLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5
cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5k
YXRhKCktPmRhdGEoKSwgYnl0ZUxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBmb3JtYXQs
IHR5cGUsIG1ha2VHQ0dMU3BhbihuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxz
LT5kYXRhKCkuZGF0YSgpLCBieXRlTGVuZ3RoKSk7CiAgICAgICAgICAgICB9CiAjZWxzZQogICAg
ICAgICAgICAgLy8gV2ViR0wgMi4wIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIEFOR0xFIGJh
Y2tlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksOCArMTQ1OSw4IEBAIFJlZjxK
U09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG8KIFJlZjxKU09OOjpBcnJheU9mPEpT
T046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9ySW1hZ2VEYXRhKGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhKQogewogICAgIGF1dG8gZGF0YSA9IEpTT046OkFycmF5T2Y8
aW50Pjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbWFnZURhdGEuZGF0
YSgpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0YS5kYXRh
KCktPml0ZW0oaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1hZ2VEYXRhLmRhdGEo
KS5sZW5ndGgoKTsgKytpKQorICAgICAgICBkYXRhLT5hZGRJdGVtKGltYWdlRGF0YS5kYXRhKCku
aXRlbShpKSk7CiAKICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46
OmNyZWF0ZSgpOwogICAgIGFycmF5LT5hZGRJdGVtKFdURk1vdmUoZGF0YSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzksNyArNzc5
LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBh
Y2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1bnBhY2tJbWFn
ZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVt
dWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKKyAgICBp
ZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFj
a0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpE
b1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTggKzczLDE4
IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAgICBpZiAoIWlt
YWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhl
bEFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkubGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIHVpbnQ4X3Qg
YSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOwogICAgICAgICBpZiAoIWEp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5
Lml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CiAKICAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAu
MjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0g
ICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAogICAg
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOwpAQCAtMjQxLDEwICsyNDEsMTAgQEAgUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZQogICAgICAgICBkZXN0UmVjdC5zZXRZKC1z
cmNSZWN0U2NhbGVkLnkoKSk7CiAKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RT
Y2FsZWQuc2l6ZSgpKQotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwoKTsKKyAg
ICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkuemVyb0ZpbGwoKTsKIAogICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVz
dFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGlt
YWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CiAKICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CiAgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0
Q2xpcHBlZC54KCkgKiA0OwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoQWwKICAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsg
ZGVzdFJlY3QueCgpICogNDsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGlt
YWdlRGF0YS5zaXplKCkud2lkdGgoKTsKLSAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRh
LmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBz
cmNSZWN0Q2xpcHBlZC54KCkgKiA0OworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEu
ZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKICAgICAgICAgaW5w
dXRGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bp
eGVsQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1BpeGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8
SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJiBkYXRhKQorICAgIDogbV9jb2xvclNwYWNlIHsgY29s
b3JTcGFjZSB9CisgICAgLCBtX2Zvcm1hdCB7IGZvcm1hdCB9CisgICAgLCBtX3NpemUgeyBzaXpl
IH0KKyAgICAsIG1fZGF0YSB7IFdURk1vdmUoZGF0YSkgfQoreworICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oKG1fc2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQo
KSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKK30KKworUGl4ZWxCdWZmZXI6On5QaXhlbEJ1ZmZlcigp
ID0gZGVmYXVsdDsKKworUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9uZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHsgbV9jb2xvclNwYWNlLCBtX2Zvcm1hdCwgbV9zaXplLCBVaW50OENs
YW1wZWRBcnJheTo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmxlbmd0aCgpKSB9Owor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVs
QnVmZmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGl4ZWxCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQaXhlbEJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOwor
cHVibGljOgorICAgIFBpeGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQsIGNvbnN0IEludFNpemUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7CisgICAg
flBpeGVsQnVmZmVyKCk7CisKKyAgICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1
bHQ7CisgICAgUGl4ZWxCdWZmZXImIG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7
CisKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29sb3JTcGFjZTsgfQorICAgIFBpeGVsRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgIEpTQzo6VWludDhDbGFtcGVkQXJyYXkmIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGEuZ2V0KCk7IH0KKworICAgIFBpeGVsQnVmZmVyIGRlZXBDbG9uZSgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CisgICAg
UGl4ZWxGb3JtYXQgbV9mb3JtYXQ7CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgUmVmPEpTQzo6
VWludDhDbGFtcGVkQXJyYXk+IG1fZGF0YTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyMzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTA4LDggKzkwOCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRv
d0J1ZmZlcihJbWFnZUIKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEoKTsKLSAgICBibHVyTGF5
ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0
LndpZHRoKCkgKiA0KTsKKyAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKS5kYXRh
KCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwogICAgIGxheWVySW1h
Z2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
KmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRH
TEFOR0xFLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDE0ICs5MCwxNCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HCiAgICAgU2NvcGVkUGl4ZWxTdG9yYWdlTW9kZSBwYWNrU2tpcFBpeGVscyhHTF9QQUNLX1NL
SVBfUElYRUxTLCAwLCBtX2lzRm9yV2ViR0wyKTsKICAgICBTY29wZWRCdWZmZXJCaW5kaW5nIHNj
b3BlZFBpeGVsUGFja0J1ZmZlclJlc2V0KEdMX1BJWEVMX1BBQ0tfQlVGRkVSLCAwLCBtX2lzRm9y
V2ViR0wyKTsKIAotICAgIGdsOjpSZWFkblBpeGVsc1JvYnVzdEFOR0xFKDAsIDAsIGltYWdlRGF0
YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSk7CisgICAgZ2w6OlJlYWRuUGl4ZWxzUm9i
dXN0QU5HTEUoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCks
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAg
ICAgLy8gRklYTUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3VyZmFj
ZSBib3VuZCB0byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEgaW4g
dGhlIElPU3VyZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQaXhl
bHMgd2lsbCBpbiBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVlcy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0CiAj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29udGV4
dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMo
aW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRhdGEo
KS0+ZGF0YSgpKTsKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW1hZ2VEYXRh
LT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCkp
OwogI2VuZGlmCiAgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEdMQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDggKzExMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50VG9DYW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29udmVydCBSR0JBIHRvIEJH
UkEuIEJHUkEgaXMgQ0FJUk9fRk9STUFUX0FSR0IzMiBvbiBsaXR0bGUtZW5kaWFuIGFyY2hpdGVj
dHVyZXMuCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxl
bmd0aCgpOwotICAgIHVpbnQ4X3QqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7
CisgICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCk7
CisgICAgdWludDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQogICAgICAgICBzdGQ6OnN3
YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBhdXRvIGltYWdlU2l6ZSA9
IGltYWdlRGF0YS0+c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0g
ICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGlt
YWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT53aWR0aCgp
ICogNCkpOworICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9B
UkdCMzIsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRh
LT53aWR0aCgpICogNCkpOwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUo
V1RGTW92ZShpbWFnZVN1cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJKHJl
dmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dEdMQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNyArNTI5LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbgogICAgIGF1dG8gaW1hZ2VT
aXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgaW50IHJvd0J5dGVzID0gaW1hZ2VTaXplLndp
ZHRoKCkgKiA0OwogICAgICAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6
ZS5oZWlnaHQoKTsKLSAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCk7CisgICAgdWludDhfdCogaW1hZ2VQaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5k
YXRhKCk7CiAgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goaW1hZ2VQaXhlbHMs
IGRhdGFTaXplKTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmaW1hZ2VEYXRhLmxlYWtS
ZWYoKSwgaW1hZ2VQaXhlbHMsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw2IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVm
ZmVyQ0dCYWNrZW4KICAgICBBU1NFUlQodXRpKTsKIAogICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1h
Z2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5Owog
CiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQ
RUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBj
b21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgpAQCAtMTkyLDcgKzE5MSw3IEBAIFJldGFpblB0cjxD
RkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBwcm90ZWN0ZWRQaXhlbEFycmF5
ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIGF1dG8gcHJvdGVjdGVk
UGl4ZWxBcnJheSA9IG1ha2VSZWYoaW1hZ2VEYXRhLT5kYXRhKCkpOwogICAgICAgICBzaXplX3Qg
ZGF0YVNpemUgPSBwcm90ZWN0ZWRQaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgIElu
dFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGNmRGF0YShjb25zdAogICAgIEFTU0VSVCh1dGkpOwogCiAgICAgQ0dJbWFnZUFscGhhSW5m
byBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciog
ZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0g
c291cmNlLmRhdGEoKS5kYXRhKCk7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRE
YXRhOwogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIHBp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCk7CiAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdl
RGF0YS0+c2l6ZSgpOwogCiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxv
YXRzKG1fdmFsdWVzKTsKQEAgLTI5OSwxNiArMjk5LDE2IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dO
OgogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0g
ICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4oKnBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRV
UkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPigq
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGVmZmVj
dFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBp
eGVsQXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU+KCpwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsK
KyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0
VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4oKnBpeGVsQXJyYXksIHZh
bHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJy
YXlEaW1lbnNpb25zKTsKICAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHJldmlz
aW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMCArMTA5LDEx
IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVMKICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9IGlt
YWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFwaXhl
bEFycmF5KQorICAgIGlmICghaW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8mIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdC0+ZGF0YSgpOworCiAgICAgTG9va3VwVGFibGUg
cmVkVGFibGU7CiAgICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsKICAgICBMb29rdXBUYWJsZSBi
bHVlVGFibGU7CkBAIC0xMjAsOSArMTIxLDkgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5UwogICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFi
bGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIGRyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS0+
ZGF0YSgpOworICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KHBpeGVsQXJyYXksIGRyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFy
cmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIGRhdGFb
cGl4ZWxPZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMCw5ICsyMzAsMTAgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKAogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
KSB7CiAgICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJl
c3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkp
CisgICAgICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKIAog
ICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICBhdXRvIHNyY1Bp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CkBAIC0yNDAsOSArMjQxLDkgQEAgdm9pZCBGRUNvbXBvc2l0
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0
UGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwog
Ci0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFycmF5LCAqZHN0
UGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJp
dGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2sy
LCBtX2szLCBtX2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzYsMTAgKzM3NiwxMiBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0CiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8g
cmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQor
CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgZHN0
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisKICAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CiAKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJy
YXk7CkBAIC0zOTUsNyArMzk3LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdAogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNy
Y1BpeGVsQXJyYXksCi0gICAgICAgICpkc3RQaXhlbEFycmF5LAorICAgICAgICBkc3RQaXhlbEFy
cmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdo
dCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwx
MCArMTAwLDExIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAg
ICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKICAgICBh
dXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkg
OiBudWxscHRyOwotICAgIGlmICghZHN0UGl4ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKTsKKwogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0
byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
KTsKIApAQCAtMTQwLDcgKzE0MSw3IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3Jt
QXBwbHlTb2YKICAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2Nh
bGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNl
bWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwogICAgICAgICAgICAgaW50IHNyY1kgPSB5
ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5p
dGVtKGRzdEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAK
LSAgICAgICAgICAgIHVuc2lnbmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihkc3RQaXhlbEFycmF5LT5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1
bnNpZ25lZCogZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4
ZWxBcnJheS5kYXRhKCkgKyBkc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwg
c3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6
ZS5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgICpkc3RQaXhlbFB0ciA9IDA7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcy
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw4ICsxMDUsOCBAQCB2b2lkIEZFRHJvcFNo
YWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
LSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwg
aW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBh
dXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRv
dy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCks
IDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKICAgICAKICAgICByZXN1bHRJbWFnZS0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFn
ZURhdGEsIHNoYWRvd0FyZWEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNCwxNCArNTI0LDE1IEBAIHZv
aWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2EKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghZHN0UGl4
ZWxBcnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBh
dXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxw
aGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqZHN0UGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNTQ0LDcgKzU0NSw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2EKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVs
U2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRm
b3JtQXBwbHkoZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgp
LCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1
c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24g
Mjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDIxICs0NzYsMjIgQEAgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3V0UGl4ZWxB
cnJheSkKKyAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRv
JiByZXN1bHRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKwogICAgIHNldElzQWxw
aGFJbWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1dFBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChyZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhl
ciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5k
YXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBG
aXJlZm94KSBoYXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0
TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55
d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24K
IAogICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKLSAgICBkcmF3TGlnaHRpbmcoKnJlc3V0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNp
emUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGlu
ZyhyZXN1bHRQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBh
aW50U2l6ZS5oZWlnaHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDE2ICsyNDQsMTcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAogICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byog
ZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxw
dHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5kYXRhKCk7CisKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUgcmFkaXVz
ID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAg
aWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgaWYgKHBsYXRmb3Jt
QXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwpAQCAtMjY1LDEyICsyNjYsMTIgQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogICAgIGludCByYWRpdXNY
ID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgp
KTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgp
IC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIAotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0
ZSgqZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQor
ICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVm
ZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhl
bEFycmF5ID0gZHN0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYo
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBw
YWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihy
YWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsMTUgKzM5NywxNiBA
QCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsCiB2b2lkIEZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBhdXRvKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0byogcGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFw
aXhlbEFycmF5KQorICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGF1dG8mIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworCiAgICAgSW50U2l6ZSBy
ZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICByZXN1bHRTaXplLnNj
YWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHBpeGVsQXJyYXktPnplcm9GaWxsKCk7CisgICAgICAgIHBpeGVsQXJy
YXkuemVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQwLDcgKzQ0MSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihp
KTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMucGl4ZWxBcnJheSA9IHBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRp
bmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0
YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsK
QEAgLTQ1Niw3ICs0NTcsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlCiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYg
dGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRv
byBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKCpwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIDAsIGhlaWdodCk7CisgICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5LCBwYWludGluZ0Rh
dGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEs
OSArMjAxLDkgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaQogICAg
IGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7
Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKKyAgICBh
dXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAg
ICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxB
cnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CiAKICAgICAvLyBXZSBtdXN0IGhhdmUg
Zm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKICAgICBBU1NFUlQoIShw
aXhlbEFycmF5TGVuZ3RoICUgNCkpOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWYKICAgICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZl
clJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRw
dXRGb3JtYXQpOwogICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47
Ci0gICAgY29weUltYWdlQnl0ZXMoKmNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdlRGF0YS0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6
Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlRGF0CiAgICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0
SW1hZ2VEYXRhVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0
KTsKICAgICBpZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwotICAgIGNv
cHlJbWFnZUJ5dGVzKCpjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRl
c3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwg
ZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11
bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBA
IC01MDAsMTQgKzUwMCwxNCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsCiAgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpj
cmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
Y29sb3JTcGFjZSkpIHsKICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRp
b24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMobV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAK
IHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1CiAgICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NDEsNyArNTQxLDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29weUltYWdlQnl0
ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0
KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7
CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBp
bWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndp
ZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlt
YWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGln
bm1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAko
cmV2aXNpb24gMjc3MjMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIFJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICAg
ICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICA6OmdsUmVh
ZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkpOworICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgp
KTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhl
bFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNpb24gMjc3MjMwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMSwxMSArMjAxLDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0
ZVJhc3QKICAgICAKICAgICAvLyBXZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBpbWFnZURh
dGEgY291bGQgYmUgbnVsbHB0ci4gQSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVn
ZSwgaW1hZ2VEYXRhOjpjcmVhdGUKICAgICAvLyBjYW4gcmV0dXJuIGEgbnVsbHB0ciBiZWNhdXNl
IGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dlZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQK
LSAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgaWYgKCFpbWFn
ZURhdGEpCiAgICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byogcGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRh
LT5kYXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVu
Z3RoKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwg
aXMgZm91ciBieXRlczogUkdCQS4KICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBz
dGF0aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwg
MSkgKiAyNTUuMGYpKTsKIApAQCAtMjE2LDcgKzIxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAgICAgICAgZm9yIChpbnQgeSA9IG1pbkJ1ZmZlclk7IHkg
PCBtYXhCdWZmZXJZOyArK3kpIHsKICAgICAgICAgICAgIGludCBzdGFydFggPSAtMTsKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0LndpZHRoKCk7ICsreCwgcGl4ZWxB
cnJheU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHBpeGVs
QXJyYXktPml0ZW0ocGl4ZWxBcnJheU9mZnNldCk7CisgICAgICAgICAgICAgICAgdWludDhfdCBh
bHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEFycmF5T2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBib29sIGFscGhhQWJvdmVUaHJlc2hvbGQgPSBhbHBoYSA+IGFscGhhUGl4ZWxUaHJlc2hvbGQ7
CiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0WCA9PSAtMSAmJiBhbHBoYUFib3ZlVGhyZXNob2xk
KSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IHg7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjc3MjMwKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAyMS0wNS0wOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgRmFjdG9yIG91dCBwaXhlbCBidWZmZXIgZnJvbSBET00gc3BlY2lmaWMgSW1h
Z2VEYXRhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjU1NTQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBVcGRhdGUgZm9yIEltYWdlRGF0YTo6ZGF0YSgpIHJldHVybmluZyBhIHJlZmVyZW5jZS4KKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1h
Z2VEYXRhU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VE
YXRhPj46OmVuY29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOgorCiAyMDIxLTA1LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gVXNlIHRoZSBuZXcgbGlic291
cCBuZXR3b3JrIG1ldHJpY3MgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzcyMzApCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw5ICszNjcsOSBAQCB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0CiB7CiAgICAgTUVTU0FHRV9D
SEVDSyhtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRJbWFnZURh
dGEgd2l0aG91dCBhIGJ1ZmZlciB0byB3cml0ZSBpbnRvIik7CiAKLSAgICBpZiAoaW1hZ2VEYXRh
ICYmIGltYWdlRGF0YS0+ZGF0YSgpKSB7Ci0gICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRh
LT5kYXRhKCktPmJ5dGVMZW5ndGgoKSA8PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6
ZSgpLCAiU2htZW0gZm9yIHJldHVybiBvZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7Ci0g
ICAgICAgIG1lbWNweShtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS0+Ynl0ZUxlbmd0aCgpKTsKKyAg
ICBpZiAoaW1hZ2VEYXRhKSB7CisgICAgICAgIE1FU1NBR0VfQ0hFQ0soaW1hZ2VEYXRhLT5kYXRh
KCkuYnl0ZUxlbmd0aCgpIDw9IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCksICJT
aG1lbSBmb3IgcmV0dXJuIG9mIGdldEltYWdlRGF0YSBpcyB0b28gc21hbGwiKTsKKyAgICAgICAg
bWVtY3B5KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIGltYWdlRGF0YS0+ZGF0
YSgpLmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbWVtc2V0KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAsIG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3NzIzMCkK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMTksOSArMzExOSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8V2Vi
Q29yZTo6SW1hZ2VEYXQKIHsKICAgICBlbmNvZGVyIDw8IGltYWdlRGF0YS0+c2l6ZSgpOwogCi0g
ICAgYXV0byByYXdEYXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmJ5dGVMZW5ndGgo
KSwgMSk7CisgICAgYXV0byYgcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEuYnl0ZUxlbmd0aCgpKTsKKyAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLmRhdGEoKSwgcmF3RGF0YS5ieXRl
TGVuZ3RoKCksIDEpOwogfQogCiB0ZW1wbGF0ZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
OSArMjAwLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAgICAgYXV0byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNyZWF0ZShzcmNSZWN0
LnNpemUoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkK
KyAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCktPmJ5dGVMZW5ndGgoKTsK
KyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgp
OwogCiAgICAgICAgIElQQzo6VGltZW91dCB0aW1lb3V0ID0gNV9zOwogICAgICAgICBTaGFyZWRN
ZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFy
ZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUsIHRpbWVvdXQpOwpAQCAtMjE0LDkgKzIx
NCw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29udGV4
dEFzeW5jKCk7CiAKICAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT53
YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSh0aW1lb3V0KSkKLSAgICAgICAgICAgIG1lbWNw
eShpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNp
emUpOworICAgICAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVk
TWVtb3J5LT5kYXRhKCksIGRhdGFTaXplKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVt
c2V0KGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIDAsIGRhdGFTaXplKTsKKyAgICAgICAgICAg
IG1lbXNldChpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFTaXplKTsKICAgICAgICAg
cmV0dXJuIGltYWdlRGF0YTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAJKHJldmlzaW9uIDI3NzIzMCkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>