<?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>225976</bug_id>
          
          <creation_ts>2021-05-19 11:40:46 -0700</creation_ts>
          <short_desc>Remove ImageBuffer::toBGRA() and replace its uses with the more general ImageBuffer::getPixelBuffer()</short_desc>
          <delta_ts>2021-08-30 02:16:54 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=229665</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1761631</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 11:40:46 -0700</bug_when>
    <thetext>Remove ImageBuffer::toBGRA() and replace its uses with the more general ImageBuffer::getPixelBuffer()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761636</commentid>
    <comment_count>1</comment_count>
      <attachid>429080</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 11:49:52 -0700</bug_when>
    <thetext>Created attachment 429080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761667</commentid>
    <comment_count>2</comment_count>
      <attachid>429080</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-19 13:08:12 -0700</bug_when>
    <thetext>Comment on attachment 429080
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:828
&gt; +    return MediaSampleAVFObjC::createImageSample(*imageBuffer);
&gt;  #elif USE(GSTREAMER)
&gt; -    makeRenderingResultsAvailable();
&gt; -    return MediaSampleGStreamer::createImageSample(imageBuffer-&gt;toBGRAData(), size());
&gt; +    return MediaSampleGStreamer::createImageSample(*imageBuffer);

Why did you choose to pass ImageBuffer&amp; instead of PixelBuffer&amp;&amp; to both MediaSampleAVFObjC::createImageSample() and MediaSampleGStreamer::createImageSample()? Down in the code, I see the passed ImageBuffer is only used to call &quot;getPixelBuffer()&quot;.

&gt; Source/WebCore/page/PageColorSampler.cpp:112
&gt; +    if (pixelBuffer-&gt;data().length() &lt; 4)
&gt; +        return WTF::nullopt;

I think getPixelBuffer() will return nullopt if the size is less than 1 pixel. Maybe this should be replaced by an ASSERT(pixelBuffer-&gt;data().length() &gt;= 4).

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:53
&gt; +    auto pixelBuffer = imageBuffer.getPixelBuffer({ AlphaPremultiplication::Unpremultiplied, PixelFormat::BGRA8, DestinationColorSpace::SRGB }, { { }, imageBuffer.logicalSize() });
&gt; +    if (!pixelBuffer)
&gt; +        return nullptr;

I think this code can be moved to the caller and having it pass a PixelBuffer&amp;&amp; instead.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:56
&gt; +    auto height = pixelBuffer-&gt;size().width();

typo: width() =&gt; height().

&gt; Source/WebCore/platform/graphics/gstreamer/MediaSampleGStreamer.cpp:110
&gt; +        return nullptr;

This can&apos;t return a nullptr for Ref&lt;&gt;. But if it is passed a PixelBuffer&amp;&amp; then there is no need for this early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761675</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 13:33:41 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #2)
&gt; Comment on attachment 429080 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429080&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLCanvasElement.cpp:828
&gt; &gt; +    return MediaSampleAVFObjC::createImageSample(*imageBuffer);
&gt; &gt;  #elif USE(GSTREAMER)
&gt; &gt; -    makeRenderingResultsAvailable();
&gt; &gt; -    return MediaSampleGStreamer::createImageSample(imageBuffer-&gt;toBGRAData(), size());
&gt; &gt; +    return MediaSampleGStreamer::createImageSample(*imageBuffer);
&gt; 
&gt; Why did you choose to pass ImageBuffer&amp; instead of PixelBuffer&amp;&amp; to both
&gt; MediaSampleAVFObjC::createImageSample() and
&gt; MediaSampleGStreamer::createImageSample()? Down in the code, I see the
&gt; passed ImageBuffer is only used to call &quot;getPixelBuffer()&quot;.

I did it that way because then the MediaSample create function could request the specific pixel format it wanted honestly I don&apos;t feel very strongly one way or the other. 

&gt; 
&gt; &gt; Source/WebCore/page/PageColorSampler.cpp:112
&gt; &gt; +    if (pixelBuffer-&gt;data().length() &lt; 4)
&gt; &gt; +        return WTF::nullopt;
&gt; 
&gt; I think getPixelBuffer() will return nullopt if the size is less than 1
&gt; pixel. Maybe this should be replaced by an
&gt; ASSERT(pixelBuffer-&gt;data().length() &gt;= 4).

It also fails if the buffer is huge and fails to allocate or overflows, but your point stands. Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:53
&gt; &gt; +    auto pixelBuffer = imageBuffer.getPixelBuffer({ AlphaPremultiplication::Unpremultiplied, PixelFormat::BGRA8, DestinationColorSpace::SRGB }, { { }, imageBuffer.logicalSize() });
&gt; &gt; +    if (!pixelBuffer)
&gt; &gt; +        return nullptr;
&gt; 
&gt; I think this code can be moved to the caller and having it pass a
&gt; PixelBuffer&amp;&amp; instead.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:56
&gt; &gt; +    auto height = pixelBuffer-&gt;size().width();
&gt; 
&gt; typo: width() =&gt; height().
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaSampleGStreamer.cpp:110
&gt; &gt; +        return nullptr;
&gt; 
&gt; This can&apos;t return a nullptr for Ref&lt;&gt;. But if it is passed a PixelBuffer&amp;&amp;
&gt; then there is no need for this early return.

Ok, will move the PixelBuffer stuff to the caller.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761679</commentid>
    <comment_count>4</comment_count>
      <attachid>429092</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 13:44:26 -0700</bug_when>
    <thetext>Created attachment 429092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761686</commentid>
    <comment_count>5</comment_count>
      <attachid>429095</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 13:53:52 -0700</bug_when>
    <thetext>Created attachment 429095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761747</commentid>
    <comment_count>6</comment_count>
      <attachid>429106</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 15:56:36 -0700</bug_when>
    <thetext>Created attachment 429106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761786</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-19 17:13:51 -0700</bug_when>
    <thetext>Committed r277763 (237927@main): &lt;https://commits.webkit.org/237927@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429106.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761787</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-19 17:14:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78232460&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429080</attachid>
            <date>2021-05-19 11:49:52 -0700</date>
            <delta_ts>2021-05-19 13:44:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225976-20210519114951.patch</filename>
            <type>text/plain</type>
            <size>42471</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA1LTE5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRv
QkdSQSgpIGFuZCByZXBsYWNlIGl0cyB1c2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBJbWFnZUJ1
ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVtb3ZlcyBJbWFnZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxhY2Vz
IGl0IHdpdGggdGhlIG1vcmUgdmVyYm9zZSAoYnV0IGFsc28gbW9yZSBjbGVhcikKKyAgICAgICAg
SW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKCkuIFRoZXJlIHdlcmUgb25seSB0d28gdXNlcnMg
b2YgdG9CR1JBKCksIE1lZGlhU2FtcGxlIGNyZWF0aW9uCisgICAgICAgIGZyb20gYSA8Y2FudmFz
PiBhbmQgUGFnZUNvbG9yU2FtcGxlci4gRm9yIE1lZGlhU2FtcGxlLCB3ZSBsaWtlbHkgc2hvdWxk
IG5vdCBiZSBkb2luZworICAgICAgICByZWFkYmFjayB0aGlzIHdheSwgYW5kIHNob3VsZCBpbnN0
ZWFkIHRyeSB0byBrZWVwIHRoZSBkYXRhIGluIHRoZSBHUFUgcHJvY2VzcyAvIG9uIHRoZSBHUFUK
KyAgICAgICAgd2hlbiBwb3NzaWJsZSAvIG5lY2Vzc2FyeS4KKworICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvTWVkaWFTYW1wbGUpOgorICAgICAgICBVcGRhdGUgY2FsbHMgdG8gcGFzcyBpbWFnZUJ1ZmZl
ciBhbmQgc2hhcmUgY2FsbCB0byBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpLgorCisg
ICAgICAgICogcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNh
bXBsZUNvbG9yKToKKyAgICAgICAgVXBkYXRlIG90IHVzZSBnZXRQaXhlbEJ1ZmZlcigpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVB
VkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZP
YmpDOjpjcmVhdGVJbWFnZVNhbXBsZSk6CisgICAgICAgIFVwZGF0ZSBNZWRpYVNhbXBsZUFWRk9i
akMgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5KCkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICBVcGRh
dGUgTWVkaWFTYW1wbGVHU3RyZWFtZXIgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5KCku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICBVc2UgI3ByYWdt
YSBvbmNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgUmVtb3ZlIHRvQkdSQSgpLgorCiAyMDIxLTA1
LTE5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgQmFz
ZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252ZW50
aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTMsMTggKzgxMywyMCBAQCBSZWZQdHI8SW1hZ2VEYXRh
PiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAKIFJlZlB0cjxNZWRpYVNhbXBsZT4gSFRNTENhbnZh
c0VsZW1lbnQ6OnRvTWVkaWFTYW1wbGUoKQogeworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0Uo
R1NUUkVBTUVSKQogICAgIGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkK
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQoZG9j
dW1lbnQoKSk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBtYWtlUmVuZGVyaW5nUmVzdWx0
c0F2YWlsYWJsZSgpOwotICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdl
U2FtcGxlKGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCksIHdpZHRoKCksIGhlaWdodCgpKTsKKwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0
ZUltYWdlU2FtcGxlKCppbWFnZUJ1ZmZlcik7CiAjZWxpZiBVU0UoR1NUUkVBTUVSKQotICAgIG1h
a2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7Ci0gICAgcmV0dXJuIE1lZGlhU2FtcGxlR1N0
cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShpbWFnZUJ1ZmZlci0+dG9CR1JBRGF0YSgpLCBzaXpl
KCkpOworICAgIHJldHVybiBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUo
KmltYWdlQnVmZmVyKTsKKyNlbmRpZgogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCShyZXZpc2lv
biAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xMDMsNyArMTA0LDE0IEBAIHN0YXRp
YyBPcHRpb25hbDxMYWI8ZmxvYXQ+PiBzYW1wbGVDb2xvcigKICAgICBpZiAoIXNuYXBzaG90KQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzbmFwc2hvdERhdGEgPSBz
bmFwc2hvdC0+dG9CR1JBRGF0YSgpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzbmFwc2hvdC0+
Z2V0UGl4ZWxCdWZmZXIoeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpCR1JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH0sIHsgeyB9
LCBzbmFwc2hvdC0+bG9naWNhbFNpemUoKSB9KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKHBpeGVsQnVmZmVyLT5kYXRhKCku
bGVuZ3RoKCkgPCA0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBz
bmFwc2hvdERhdGEgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKTsKICAgICByZXR1cm4gY29u
dmVydENvbG9yPExhYjxmbG9hdD4+KFNSR0JBPHVpbnQ4X3Q+IHsgc25hcHNob3REYXRhWzJdLCBz
bmFwc2hvdERhdGFbMV0sIHNuYXBzaG90RGF0YVswXSwgc25hcHNob3REYXRhWzNdIH0pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgJKHJldmlzaW9uIDI3Nzcy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBNZWRpYVNh
bXBsZV9oCi0jZGVmaW5lIE1lZGlhU2FtcGxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheXMuaD4KQEAg
LTE1Miw1ICsxNTEsMyBAQCBzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6TWVkaWFTYW1wbGU+
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShy
ZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25j
cmV0ZUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMSwxNSArMjIxLDYgQEAgcHJv
dGVjdGVkOgogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewotICAgICAgICAgICAgY29uc3RfY2Fz
dDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwotICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4geyB9OwotICAgIH0KLQogICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCw3ICsxMjQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RG
OjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihj
b25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgPSAwOwpAQCAtMTMzLDcgKzEzMiw3IEBAIHB1
YmxpYzoKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwg
YW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1U
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdD
R0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOwotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgSW1h
Z2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3
NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjggKzkyLDYgQEAgdm9pZCBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYQogICAgIHB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZl
ciwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8oKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0KDQgKiBsb2dpY2FsU2l6ZSgpLmFyZWEoKS51bnNhZmVHZXQoKSk7Ci0KLSAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBzb3VyY2VGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBwaXhlbEZvcm1hdCgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfTsK
LSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBkZXN0aW5hdGlvbkZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IgfTsKLQotICAgIENvbnN0UGl4ZWxCdWZmZXJDb252ZXJzaW9uVmll
dyBzb3VyY2U7Ci0gICAgc291cmNlLmZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAgICBzb3VyY2Uu
Ynl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOwotICAgIHNvdXJjZS5yb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJDb252
ZXJzaW9uVmlldyBkZXN0aW5hdGlvbjsKLSAgICBkZXN0aW5hdGlvbi5mb3JtYXQgPSBkZXN0aW5h
dGlvbkZvcm1hdDsKLSAgICBkZXN0aW5hdGlvbi5ieXRlc1BlclJvdyA9IGxvZ2ljYWxTaXplKCku
d2lkdGgoKSAqIDQ7Ci0gICAgZGVzdGluYXRpb24ucm93cyA9IHJlc3VsdC5kYXRhKCk7Ci0KLSAg
ICBjb252ZXJ0SW1hZ2VQaXhlbHMoc291cmNlLCBkZXN0aW5hdGlvbiwgbG9naWNhbFNpemUoKSk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgZGVz
dGluYXRpb25Gb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIHZvaWQqIGRhdGEpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKFBpeGVsQnVmZmVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdChkZXN0
aW5hdGlvbkZvcm1hdC5waXhlbEZvcm1hdCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlzaW9uIDI3
NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDYgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhl
bEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkg
PSAwOwpAQCAtMTQ3LDggKzE0Niw2IEBAIHByb3RlY3RlZDoKICAgICBJbnRSZWN0IGxvZ2ljYWxS
ZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSgpKTsgfTsKICAgICBJbnRSZWN0IGJhY2tlbmRSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBiYWNrZW5kU2l6ZSgpKTsgfTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0OwotCiAgICAg
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0
IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IHZvaWQqIGRhdGEpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQq
IGRhdGEpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMuaAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzIsMTIgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VCdWZm
ZXI7CisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIE1lZGlhU2FtcGxlQVZGT2JqQyA6IHB1YmxpYyBN
ZWRpYVNhbXBsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+
IGNyZWF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgdHJhY2tJRCkpOyB9
CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShDTVNhbXBsZUJ1ZmZl
clJlZiBzYW1wbGUsIEF0b21TdHJpbmcgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYVNhbXBsZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1l
ZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgVmlkZW9S
b3RhdGlvbiByb3RhdGlvbiA9IFZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgbWlycm9yZWQgPSBm
YWxzZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUFWRk9iakMoc2FtcGxlLCBy
b3RhdGlvbiwgbWlycm9yZWQpKTsgfQotICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVBVkZP
YmpDPiBjcmVhdGVJbWFnZVNhbXBsZShWZWN0b3I8dWludDhfdD4mJiwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCk7CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVNhbXBsZUFWRk9iakM+
IGNyZWF0ZUltYWdlU2FtcGxlKGNvbnN0IEltYWdlQnVmZmVyJik7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRBc0Rpc3BsYXlJbW1lZGlhdGVseShNZWRpYVNhbXBsZSYpOwog
ICAgIHN0YXRpYyBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNsb25lU2FtcGxlQnVmZmVy
QW5kU2V0QXNEaXNwbGF5SW1tZWRpYXRlbHkoQ01TYW1wbGVCdWZmZXJSZWYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQkocmV2aXNpb24gMjc3
NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAKKyNpbXBv
cnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJQaXhlbEJ1ZmZlci5oIgogI2ltcG9ydCAiUGl4
ZWxCdWZmZXJDb25mb3JtZXJDVi5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5l
cy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KQEAgLTQx
LDMxICs0Myw0NCBAQCBXVEZfREVDTEFSRV9DRl9UWVBFX1RSQUlUKENNU2FtcGxlQnVmZmVyCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVZlY3RvckJ1ZmZl
cih2b2lkKiBhcnJheSwgY29uc3Qgdm9pZCopCitSZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBN
ZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdlU2FtcGxlKGNvbnN0IEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlcikKIHsKLSAgICBXVEY6OlZlY3Rvck1hbGxvYzo6ZnJlZShhcnJheSk7Ci19Cisg
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGxpa2VseSBiZSBvcHRpbWl6ZWQgcXVpdGUgYSBiaXQsIGVz
cGVjaWFsbHkgaW4gdGhlIGNhc2VzIHdoZXJlCisgICAgLy8gdGhlIEltYWdlQnVmZmVyIGlzIGJh
Y2tlZCBieSBHUFUgbWVtb3J5IGFscmVhZHkgYW5kL29yIGlzIGluIHRoZSBHUFUgcHJvY2VzcyBi
eQorICAgIC8vIHNwZWNpYWxpemluZyB0b01lZGlhU2FtcGxlKCkgaW4gSW1hZ2VCdWZmZXJCYWNr
ZW5kIHRvIG5vdCB1c2UgZ2V0UGl4ZWxCdWZmZXIoKS4KKyAgICBhdXRvIHBpeGVsQnVmZmVyID0g
aW1hZ2VCdWZmZXIuZ2V0UGl4ZWxCdWZmZXIoeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpCR1JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCIH0sIHsgeyB9LCBpbWFnZUJ1ZmZlci5sb2dpY2FsU2l6ZSgpIH0pOworICAgIGlmICghcGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1SZWZQdHI8TWVkaWFTYW1wbGVB
VkZPYmpDPiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdlU2FtcGxlKFZlY3Rvcjx1aW50
OF90PiYmIGFycmF5LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotICAgIENW
UGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXJSYXcgPSBudWxscHRyOwotICAgIGF1dG8gZGF0YSA9
IGFycmF5LnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHdpZHRoLCBoZWln
aHQsIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEsIGRhdGEsIHdpZHRoICogNCwgZGVhbGxvY2F0
ZVZlY3RvckJ1ZmZlciwgZGF0YSwgbnVsbHB0ciwgJnBpeGVsQnVmZmVyUmF3KTsKLSAgICBhdXRv
IHBpeGVsQnVmZmVyID0gYWRvcHRDRihwaXhlbEJ1ZmZlclJhdyk7Ci0gICAgaWYgKCFwaXhlbEJ1
ZmZlcikgewotICAgICAgICBkZWFsbG9jYXRlVmVjdG9yQnVmZmVyKGRhdGEsIG51bGxwdHIpOwor
ICAgIGF1dG8gd2lkdGggPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisgICAgYXV0byBo
ZWlnaHQgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKKyAgICBhdXRvIGRhdGEgPSBw
aXhlbEJ1ZmZlci0+dGFrZURhdGEoKTsKKyAgICBhdXRvIGRhdGFCYXNlQWRkcmVzcyA9IGRhdGEt
PmRhdGEoKTsKKyAgICBhdXRvIGxlYWtlZERhdGEgPSAmZGF0YS5sZWFrUmVmKCk7CisgICAgCisg
ICAgYXV0byBkZXJlZkJ1ZmZlciA9IFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lkKikgewor
ICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Kj4oY29udGV4dCktPmRl
cmVmKCk7CisgICAgfTsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgY3ZQaXhlbEJ1ZmZlclJhdyA9
IG51bGxwdHI7CisgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVz
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHdpZHRoLCBoZWlnaHQsIGtDVlBpeGVsRm9ybWF0VHlwZV8z
MkJHUkEsIGRhdGFCYXNlQWRkcmVzcywgd2lkdGggKiA0LCBkZXJlZkJ1ZmZlciwgbGVha2VkRGF0
YSwgbnVsbHB0ciwgJmN2UGl4ZWxCdWZmZXJSYXcpOworCisgICAgYXV0byBjdlBpeGVsQnVmZmVy
ID0gYWRvcHRDRihjdlBpeGVsQnVmZmVyUmF3KTsKKyAgICBpZiAoIWN2UGl4ZWxCdWZmZXIpIHsK
KyAgICAgICAgZGVyZWZCdWZmZXIobGVha2VkRGF0YSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICBBU1NFUlRfVU5VU0VEKHN0YXR1cywgIXN0YXR1cyk7CiAK
ICAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb25SYXcgPSBu
dWxscHRyOwotICAgIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVmZmVyLmdldCgpLCAmZm9ybWF0
RGVzY3JpcHRpb25SYXcpOworICAgIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNy
ZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGN2UGl4ZWxCdWZmZXIuZ2V0
KCksICZmb3JtYXREZXNjcmlwdGlvblJhdyk7CiAgICAgQVNTRVJUKCFzdGF0dXMpOwogICAgIGF1
dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uUmF3KTsKIAog
ICAgIENNU2FtcGxlVGltaW5nSW5mbyBzYW1wbGVUaW1pbmdJbmZvcm1hdGlvbiA9IHsga0NNVGlt
ZUludmFsaWQsIGtDTVRpbWVJbnZhbGlkLCBrQ01UaW1lSW52YWxpZCB9OwogICAgIENNU2FtcGxl
QnVmZmVyUmVmIHNhbXBsZUJ1ZmZlclJhdyA9IG51bGxwdHI7Ci0gICAgc3RhdHVzID0gQ01TYW1w
bGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBw
aXhlbEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksICZzYW1wbGVUaW1pbmdJ
bmZvcm1hdGlvbiwgJnNhbXBsZUJ1ZmZlclJhdyk7CisgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZm
ZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjdlBpeGVs
QnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgJnNhbXBsZVRpbWluZ0luZm9y
bWF0aW9uLCAmc2FtcGxlQnVmZmVyUmF3KTsKICAgICBBU1NFUlQoIXN0YXR1cyk7CiAgICAgYXV0
byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHNhbXBsZUJ1ZmZlclJhdyk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3
NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDIzICsxMDMs
NiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmCiAgICAgcmV0dXJu
IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBh
dXRvIG5hdGl2ZUltYWdlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOwotICAgIGF1dG8g
c3VyZmFjZSA9IG5hdGl2ZUltYWdlID8gbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSA6IG51
bGxwdHI7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZl
Y3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1
cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhl
bHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGlt
YWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3Vy
ZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3Vy
ZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQogT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
bV9zdXJmYWNlLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPE5hdGl2ZUlt
YWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1h
dCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDExICsxNTQsNiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyQ0dCaXRtYXBC
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEltYWdlQnVm
ZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwotfQotCiBPcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw4ICs0OSw2IEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
ICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZm
ZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NywxMiArMTc3LDYgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZm
ZXJJT1N1cmZhYwogICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEobWlt
ZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLVZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7Ci0gICAgcmV0dXJuIEltYWdlQnVm
ZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKLX0KLQog
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1
cmZhY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9u
IDI3NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29u
c3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2Ft
cGxlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCShyZXZpc2lvbiAyNzc3
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFT
YW1wbGVHU3RyZWFtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0
IChDKSAyMDE2LCAyMDE3LCAyMDE4IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
LDcgKzIzLDggQEAKICNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgogCiAjaW5jbHVk
ZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0KKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgpAQCAtOTcsMTQgKzk5LDIzIEBAIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1l
cj4gTWVkaWFTYW1wbGVHU3QKICAgICByZXR1cm4gYWRvcHRSZWYoKmdzdHJlYW1lck1lZGlhU2Ft
cGxlKTsKIH0KIAotUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBNZWRpYVNhbXBsZUdTdHJlYW1l
cjo6Y3JlYXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYgYmdyYURhdGEsIGNvbnN0IElu
dFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGRlc3RpbmF0aW9uU2l6ZSwgZG91YmxlIGZyYW1l
UmF0ZSkKK1JlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNy
ZWF0ZUltYWdlU2FtcGxlKGNvbnN0IEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgSW50
U2l6ZSYgZGVzdGluYXRpb25TaXplLCBkb3VibGUgZnJhbWVSYXRlKQogewogICAgIGVuc3VyZUdT
dHJlYW1lckluaXRpYWxpemVkKCk7CisgICAgCisgICAgYXV0byBzaXplID0gaW1hZ2VCdWZmZXIu
bG9naWNhbFNpemUoKTsKKworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci5nZXRQ
aXhlbEJ1ZmZlcih7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfSwgeyB7IH0sIHNp
emUgfSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGRhdGEgPSBwaXhlbEJ1ZmZlci0+dGFrZURhdGEoKTsKKyAgICBhdXRvIHNpemVJ
bkJ5dGVzID0gcGl4ZWxCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICBhdXRvIGRhdGFCYXNlQWRk
cmVzcyA9IGRhdGEtPmRhdGEoKTsKKyAgICBhdXRvIGxlYWtlZERhdGEgPSAmZGF0YS5sZWFrUmVm
KCk7CiAKLSAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBiZ3JhRGF0YS5zaXplSW5CeXRlcygpOwot
ICAgIGF1dG8qIGRhdGEgPSBiZ3JhRGF0YS5yZWxlYXNlQnVmZmVyKCkubGVha1B0cigpOwotICAg
IGF1dG8gYnVmZmVyID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbChHU1Rf
TUVNT1JZX0ZMQUdfUkVBRE9OTFksIGRhdGEsIHNpemVJbkJ5dGVzLCAwLCBzaXplSW5CeXRlcywg
ZGF0YSwgW10oZ3BvaW50ZXIgZGF0YSkgewotICAgICAgICBXVEY6OlZlY3Rvck1hbGxvYzo6ZnJl
ZShkYXRhKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFw
cGVkX2Z1bGwoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBkYXRhQmFzZUFkZHJlc3MsIHNpemVJ
bkJ5dGVzLCAwLCBzaXplSW5CeXRlcywgbGVha2VkRGF0YSwgW10oZ3BvaW50ZXIgdXNlckRhdGEp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KHVzZXJEYXRh
KS0+ZGVyZWYoKTsKICAgICB9KSk7CiAKICAgICBhdXRvIHdpZHRoID0gc2l6ZS53aWR0aCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2Ft
cGxlR1N0cmVhbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgJKHJldmlzaW9uIDI3NzcyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAy
MDE2LCAyMDE3LCAyMDE4IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzMw
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZUJ1ZmZlcjsKKwogY2xh
c3MgTWVkaWFTYW1wbGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0ZShHUmVmUHRyPEdzdFNh
bXBsZT4mJiBzYW1wbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3Qg
QXRvbVN0cmluZyYgdHJhY2tJZCkKQEAgLTM3LDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0ZUZha2VTYW1wbGUoR3N0
Q2FwcyosIE1lZGlhVGltZSBwdHMsIE1lZGlhVGltZSBkdHMsIE1lZGlhVGltZSBkdXJhdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9tU3RyaW5nJiB0cmFj
a0lkKTsKLSAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZVNh
bXBsZShWZWN0b3I8dWludDhfdD4mJiwgY29uc3QgSW50U2l6ZSYgb3JpZ2luYWxTaXplLCBjb25z
dCBJbnRTaXplJiBkZXN0aW5hdGlvblNpemUgPSB7IH0sIGRvdWJsZSBmcmFtZVJhdGUgPSAxKTsK
KyAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZVNhbXBsZShj
b25zdCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFNpemUmIGRlc3RpbmF0aW9uU2l6ZSA9IHsgfSwg
ZG91YmxlIGZyYW1lUmF0ZSA9IDEpOwogCiAgICAgdm9pZCBleHRlbmRUb1RoZUJlZ2lubmluZygp
OwogICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9wdHM7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDEy
ICszMDYsNiBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiB7IH07Ci19Ci0KIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHJldmlzaW9uIDI3
NzcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNv
bnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291
cmNlR1N0cmVhbWVyLmNwcAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVh
bWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBzYW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRl
SW1hZ2VTYW1wbGUoaW1hZ2VCdWZmZXItPnRvQkdSQURhdGEoKSwgY2FwdHVyZVNpemUoKSwgc2l6
ZSgpLCBmcmFtZVJhdGUoKSk7CisgICAgYXV0byBzYW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1l
cjo6Y3JlYXRlSW1hZ2VTYW1wbGUoKmltYWdlQnVmZmVyLCBzaXplKCksIGZyYW1lUmF0ZSgpKTsK
ICAgICBzYW1wbGUtPm9mZnNldFRpbWVzdGFtcHNCeShNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3Vi
bGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpLnNlY29uZHMoKSkpOwogICAgIGRpc3BhdGNoTWVk
aWFTYW1wbGVUb09ic2VydmVycyhzYW1wbGUuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMjEtMDUtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBJbWFnZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxhY2UgaXRz
IHVzZXMgd2l0aCB0aGUgbW9yZSBnZW5lcmFsIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcigp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5NzYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
SW1hZ2VCdWZmZXI6OnRvQkdSQSgpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Z2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9S
ZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0
QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQuaDoKKwogMjAyMS0wNS0xOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVy
biBXZWJLaXQgY29udmVudGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJKHJldmlz
aW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDE2ICs0MDQsNiBAQCB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldERhdGFGb3JJCiAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShkYXRhKSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Z2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGlm
IChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVm
ZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGRhdGEgPSBpbWFnZUJ1
ZmZlci0+dG9CR1JBRGF0YSgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGF0YSkp
OwotfQotCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldFNoYXJlYWJsZUJpdG1hcEZv
ckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpJbmRleDogU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjksNyArMTI5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeSgpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwotICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldFNoYXJl
YWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1h
Z2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYm
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBEZXN0cm95R2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJp
bmcgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChT
dHJpbmcgdXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihT
dHJpbmcgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZl
Y3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwotICAgIEdldEJHUkFEYXRhRm9ySW1hZ2VC
dWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAg
IEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktp
dDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hlRm9u
dChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlz
dEltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTIgKzk5LDYgQEAgUmVmUHRyPFdlYkNvcmU6Ok5h
dGl2ZUltYWdlPiBDR0Rpc3BsYXlMaQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WZWN0b3I8
dWludDhfdD4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQog
T3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5
TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJl
dmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9D
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDYgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpLgogICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdl
KFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBj
b25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3
NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDExICsx
NTgsNiBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwCiAgICAgcmV0
dXJuIG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwot
fQotCiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAt
PmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmgJKHJldmlzaW9uIDI3NzcyOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDYgQEAgcHVibGljOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRp
dmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJD
b3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6
Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6
OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZv
cm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkg
b3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lvbiAy
Nzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDEzICsxNjUsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0
RGF0YUZvckltYWdlQnVmZmVyKG1pbWVUeXBlLCBxdWFsaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgfQogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIHJl
dHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0QkdSQURhdGFGb3JJbWFnZUJ1
ZmZlcihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgfQogICAgIFJlZlB0cjxX
ZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9y
ZUNvcHkgPSBXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5OjpDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxOSwxNSArMjE5LDYgQEAgVmVjdG9yPHVpbnQ4X3Q+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcgogICAgIHJldHVybiBkYXRhOwogfQogCi1WZWN0b3I8dWludDhfdD4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpnZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi17Ci0gICAgc2VuZERl
ZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0QkdS
QURhdGFGb3JJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcjo6UmVw
bHkoZGF0YSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7Ci0gICAgcmV0dXJu
IGRhdGE7Ci19Ci0KIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFwKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
bWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKICAg
ICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAkocmV2aXNpb24gMjc3NzI4KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQpOwogICAg
IFN0cmluZyBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1
c2hJZGVudGlmaWVyIGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRtYXAoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24pOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMiArMTE0LDYgQEAgVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdQogICAgIHJldHVybiB7IH07CiB9CiAKLVZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEo
KSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBj
b25zdCBJbnRSZWN0JikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3MjgpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwogICAg
IFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYg
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0
UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJp
ZGU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429092</attachid>
            <date>2021-05-19 13:44:26 -0700</date>
            <delta_ts>2021-05-19 13:57:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225976-20210519134426.patch</filename>
            <type>text/plain</type>
            <size>42906</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA1LTE5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRv
QkdSQSgpIGFuZCByZXBsYWNlIGl0cyB1c2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBJbWFnZUJ1
ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FpZCBBYm91LUhh
bGxhd2EuCisKKyAgICAgICAgUmVtb3ZlcyBJbWFnZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxh
Y2VzIGl0IHdpdGggdGhlIG1vcmUgdmVyYm9zZSAoYnV0IGFsc28gbW9yZSBjbGVhcikKKyAgICAg
ICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKCkuIFRoZXJlIHdlcmUgb25seSB0d28gdXNl
cnMgb2YgdG9CR1JBKCksIE1lZGlhU2FtcGxlIGNyZWF0aW9uCisgICAgICAgIGZyb20gYSA8Y2Fu
dmFzPiBhbmQgUGFnZUNvbG9yU2FtcGxlci4gRm9yIE1lZGlhU2FtcGxlLCB3ZSBsaWtlbHkgc2hv
dWxkIG5vdCBiZSBkb2luZworICAgICAgICByZWFkYmFjayB0aGlzIHdheSwgYW5kIHNob3VsZCBp
bnN0ZWFkIHRyeSB0byBrZWVwIHRoZSBkYXRhIGluIHRoZSBHUFUgcHJvY2VzcyAvIG9uIHRoZSBH
UFUKKyAgICAgICAgd2hlbiBwb3NzaWJsZSAvIG5lY2Vzc2FyeS4KKworICAgICAgICAqIGh0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OnRvTWVkaWFTYW1wbGUpOgorICAgICAgICBVcGRhdGUgY2FsbHMgdG8gcGFzcyBpbWFnZUJ1
ZmZlciBhbmQgc2hhcmUgY2FsbCB0byBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpLgor
CisgICAgICAgICogcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNhbXBsZUNvbG9yKToKKyAgICAgICAgVXBkYXRlIG90IHVzZSBnZXRQaXhlbEJ1ZmZlcigpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVB
VkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZSk6CisgICAgICAgIFVwZGF0ZSBNZWRpYVNhbXBsZUFW
Rk9iakMgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5KCkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNh
bXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFs
dGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFs
dGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICBV
cGRhdGUgTWVkaWFTYW1wbGVHU3RyZWFtZXIgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5
KCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICBVc2UgI3By
YWdtYSBvbmNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgUmVtb3ZlIHRvQkdSQSgpLgorCiAyMDIx
LTA1LTE5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
QmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252
ZW50aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTMsMTggKzgxMywyNyBAQCBSZWZQdHI8SW1hZ2VE
YXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAKIFJlZlB0cjxNZWRpYVNhbXBsZT4gSFRNTENh
bnZhc0VsZW1lbnQ6OnRvTWVkaWFTYW1wbGUoKQogeworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoR1NUUkVBTUVSKQogICAgIGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkKICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQo
ZG9jdW1lbnQoKSk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBtYWtlUmVuZGVyaW5nUmVz
dWx0c0F2YWlsYWJsZSgpOwotICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUlt
YWdlU2FtcGxlKGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCksIHdpZHRoKCksIGhlaWdodCgpKTsK
KworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBsaWtlbHkgYmUgb3B0aW1pemVkIHF1aXRlIGEgYml0
LCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlcyB3aGVyZQorICAgIC8vIHRoZSBJbWFnZUJ1ZmZlciBp
cyBiYWNrZWQgYnkgR1BVIG1lbW9yeSBhbHJlYWR5IGFuZC9vciBpcyBpbiB0aGUgR1BVIHByb2Nl
c3MgYnkKKyAgICAvLyBzcGVjaWFsaXppbmcgdG9NZWRpYVNhbXBsZSgpIGluIEltYWdlQnVmZmVy
QmFja2VuZCB0byBub3QgdXNlIGdldFBpeGVsQnVmZmVyKCkuCisgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGltYWdlQnVmZmVyLmdldFBpeGVsQnVmZmVyKHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6QkdSQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQiB9LCB7IHsgfSwgaW1hZ2VCdWZmZXIubG9naWNhbFNpemUoKSB9KTsKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdlU2FtcGxlKFdU
Rk1vdmUoKnBpeGVsQnVmZmVyKSk7CiAjZWxpZiBVU0UoR1NUUkVBTUVSKQotICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7Ci0gICAgcmV0dXJuIE1lZGlhU2FtcGxlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZVNhbXBsZShpbWFnZUJ1ZmZlci0+dG9CR1JBRGF0YSgpLCBzaXplKCkpOwor
ICAgIHJldHVybiBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUoV1RGTW92
ZSgqcGl4ZWxCdWZmZXIpKTsKKyNlbmRpZgogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCShyZXZp
c2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgog
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xMDMsNyArMTA0LDEzIEBAIHN0
YXRpYyBPcHRpb25hbDxMYWI8ZmxvYXQ+PiBzYW1wbGVDb2xvcigKICAgICBpZiAoIXNuYXBzaG90
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzbmFwc2hvdERhdGEg
PSBzbmFwc2hvdC0+dG9CR1JBRGF0YSgpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzbmFwc2hv
dC0+Z2V0UGl4ZWxCdWZmZXIoeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpCR1JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH0sIHsg
eyB9LCBzbmFwc2hvdC0+bG9naWNhbFNpemUoKSB9KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQVNTRVJUKHBpeGVsQnVmZmVyLT5k
YXRhKCkubGVuZ3RoKCkgPD0gNCk7CisKKyAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHBpeGVsQnVm
ZmVyLT5kYXRhKCkuZGF0YSgpOwogICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4o
U1JHQkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25hcHNo
b3REYXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTWVkaWFTYW1wbGUuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVkaWFTYW1wbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIE1lZGlhU2FtcGxlX2gKLSNkZWZpbmUgTWVkaWFT
YW1wbGVfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgpAQCAtMTUyLDUgKzE1MSwzIEBAIHN0cnVj
dCBMb2dBcmd1bWVudDxXZWJDb3JlOjpNZWRpYVNhbXBsZT4KIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bmNyZXRlSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDE1ICsyMjEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpKSB7Ci0gICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXIm
PigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9C
R1JBRGF0YSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCiAgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9y
bWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw2IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0
JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKSA9IDA7CkBAIC0xMzMsNyArMTMyLDcgQEAgcHVibGljOgogICAgIC8vIHdpdGggdGV4
dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBl
LgogICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
R0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCA9IDA7Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICBJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MiwyOCArOTIsNiBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVt
aW5hCiAgICAgcHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQ
b2ludDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0K
IAotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBk
YXRhKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXpl
KCkuYXJlYSgpLnVuc2FmZUdldCgpKTsKLQotICAgIFBpeGVsQnVmZmVyRm9ybWF0IHNvdXJjZUZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVsRm9ybWF0
KCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwotICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGRlc3RpbmF0aW9uRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6QkdSQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9Owot
Ci0gICAgQ29uc3RQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IHNvdXJjZTsKLSAgICBzb3VyY2Uu
Zm9ybWF0ID0gc291cmNlRm9ybWF0OwotICAgIHNvdXJjZS5ieXRlc1BlclJvdyA9IGJ5dGVzUGVy
Um93KCk7Ci0gICAgc291cmNlLnJvd3MgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhKTsKLSAgICAKLSAgICBQaXhlbEJ1ZmZlckNvbnZlcnNpb25WaWV3IGRlc3RpbmF0aW9u
OwotICAgIGRlc3RpbmF0aW9uLmZvcm1hdCA9IGRlc3RpbmF0aW9uRm9ybWF0OwotICAgIGRlc3Rp
bmF0aW9uLmJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUoKS53aWR0aCgpICogNDsKLSAgICBkZXN0
aW5hdGlvbi5yb3dzID0gcmVzdWx0LmRhdGEoKTsKLQotICAgIGNvbnZlcnRJbWFnZVBpeGVscyhz
b3VyY2UsIGRlc3RpbmF0aW9uLCBsb2dpY2FsU2l6ZSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKIHsKICAgICBBU1NFUlQoUGl4
ZWxCdWZmZXI6OnN1cHBvcnRlZFBpeGVsRm9ybWF0KGRlc3RpbmF0aW9uRm9ybWF0LnBpeGVsRm9y
bWF0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw3ICsxMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
ID0gMDsKIAogICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVy
KGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVm
ZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CkBAIC0xNDcsOCArMTQ2LDYg
QEAgcHJvdGVjdGVkOgogICAgIEludFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKCkpOyB9OwogICAgIEludFJlY3Qg
YmFja2VuZFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGJh
Y2tlbmRTaXplKCkpOyB9OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IHRv
QkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCwgdm9pZCogZGF0YSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxl
QVZGT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCShyZXZpc2lvbiAyNzc3NDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVNhbXBsZUFWRk9iakMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMiArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQaXhlbEJ1ZmZlcjsKKwogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgTWVkaWFTYW1wbGVBVkZPYmpDIDogcHVibGljIE1lZGlhU2FtcGxlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVy
UmVmIHNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRp
YVNhbXBsZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1lZGlh
U2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbVN0cmlu
ZyB0cmFja0lEKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhzYW1w
bGUsIHRyYWNrSUQpKTsgfQogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVh
dGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBWaWRlb1JvdGF0aW9uIHJvdGF0aW9uID0gVmlk
ZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZhbHNlKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhzYW1wbGUsIHJvdGF0aW9uLCBtaXJyb3JlZCkpOyB9
Ci0gICAgc3RhdGljIFJlZlB0cjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZUltYWdlU2FtcGxl
KFZlY3Rvcjx1aW50OF90PiYmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKyAg
ICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoUGl4
ZWxCdWZmZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBc0Rpc3Bs
YXlJbW1lZGlhdGVseShNZWRpYVNhbXBsZSYpOwogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IGNsb25lU2FtcGxlQnVmZmVyQW5kU2V0QXNEaXNwbGF5SW1tZWRpYXRlbHko
Q01TYW1wbGVCdWZmZXJSZWYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAKKyNpbXBvcnQgIlBpeGVsQnVmZmVyLmgiCiAjaW1wb3J0
ICJQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgpA
QCAtNDEsMzEgKzQyLDM4IEBAIFdURl9ERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ01TYW1wbGVCdWZm
ZXIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBkZWFsbG9jYXRlVmVjdG9y
QnVmZmVyKHZvaWQqIGFycmF5LCBjb25zdCB2b2lkKikKK1JlZlB0cjxNZWRpYVNhbXBsZUFWRk9i
akM+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlSW1hZ2VTYW1wbGUoUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlcikKIHsKLSAgICBXVEY6OlZlY3Rvck1hbGxvYzo6ZnJlZShhcnJheSk7Ci19Cisg
ICAgYXV0byBzaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOworICAgIGF1dG8gd2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgYXV0byBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgYXV0byBk
YXRhID0gcGl4ZWxCdWZmZXIudGFrZURhdGEoKTsKKyAgICBhdXRvIGRhdGFCYXNlQWRkcmVzcyA9
IGRhdGEtPmRhdGEoKTsKKyAgICBhdXRvIGxlYWtlZERhdGEgPSAmZGF0YS5sZWFrUmVmKCk7Cisg
ICAgCisgICAgYXV0byBkZXJlZkJ1ZmZlciA9IFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lk
KikgeworICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Kj4oY29udGV4
dCktPmRlcmVmKCk7CisgICAgfTsKIAotUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZShWZWN0b3I8dWludDhfdD4mJiBhcnJheSwg
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBDVlBpeGVsQnVmZmVyUmVm
IHBpeGVsQnVmZmVyUmF3ID0gbnVsbHB0cjsKLSAgICBhdXRvIGRhdGEgPSBhcnJheS5yZWxlYXNl
QnVmZmVyKCkubGVha1B0cigpOwotICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB3aWR0aCwgaGVpZ2h0LCBrQ1ZQaXhlbEZv
cm1hdFR5cGVfMzJCR1JBLCBkYXRhLCB3aWR0aCAqIDQsIGRlYWxsb2NhdGVWZWN0b3JCdWZmZXIs
IGRhdGEsIG51bGxwdHIsICZwaXhlbEJ1ZmZlclJhdyk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9
IGFkb3B0Q0YocGl4ZWxCdWZmZXJSYXcpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKLSAgICAg
ICAgZGVhbGxvY2F0ZVZlY3RvckJ1ZmZlcihkYXRhLCBudWxscHRyKTsKKyAgICBDVlBpeGVsQnVm
ZmVyUmVmIGN2UGl4ZWxCdWZmZXJSYXcgPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0gQ1ZQ
aXhlbEJ1ZmZlckNyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB3aWR0aCwgaGVp
Z2h0LCBrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBLCBkYXRhQmFzZUFkZHJlc3MsIHdpZHRoICog
NCwgZGVyZWZCdWZmZXIsIGxlYWtlZERhdGEsIG51bGxwdHIsICZjdlBpeGVsQnVmZmVyUmF3KTsK
KworICAgIGF1dG8gY3ZQaXhlbEJ1ZmZlciA9IGFkb3B0Q0YoY3ZQaXhlbEJ1ZmZlclJhdyk7Cisg
ICAgaWYgKCFjdlBpeGVsQnVmZmVyKSB7CisgICAgICAgIGRlcmVmQnVmZmVyKGxlYWtlZERhdGEs
IG51bGxwdHIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgQVNTRVJUX1VO
VVNFRChzdGF0dXMsICFzdGF0dXMpOwogCiAgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVm
IGZvcm1hdERlc2NyaXB0aW9uUmF3ID0gbnVsbHB0cjsKLSAgICBzdGF0dXMgPSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBw
aXhlbEJ1ZmZlci5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uUmF3KTsKKyAgICBzdGF0dXMgPSBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBjdlBpeGVsQnVmZmVyLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb25SYXcpOwogICAg
IEFTU0VSVCghc3RhdHVzKTsKICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gYWRvcHRDRihm
b3JtYXREZXNjcmlwdGlvblJhdyk7CiAKICAgICBDTVNhbXBsZVRpbWluZ0luZm8gc2FtcGxlVGlt
aW5nSW5mb3JtYXRpb24gPSB7IGtDTVRpbWVJbnZhbGlkLCBrQ01UaW1lSW52YWxpZCwga0NNVGlt
ZUludmFsaWQgfTsKICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXJSYXcgPSBudWxs
cHRyOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZm
ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0
aW9uLmdldCgpLCAmc2FtcGxlVGltaW5nSW5mb3JtYXRpb24sICZzYW1wbGVCdWZmZXJSYXcpOwor
ICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgY3ZQaXhlbEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24u
Z2V0KCksICZzYW1wbGVUaW1pbmdJbmZvcm1hdGlvbiwgJnNhbXBsZUJ1ZmZlclJhdyk7CiAgICAg
QVNTRVJUKCFzdGF0dXMpOwogICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihzYW1wbGVC
dWZmZXJSYXcpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMywyMyArMTAzLDYgQEAgUmVmUHRyPE5hdGl2ZUltYWdlPiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZgogICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
IH0KIAotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0byBuYXRpdmVJbWFnZSA9IGNhaXJvU3VyZmFjZUNv
ZXJjZVRvSW1hZ2UoKTsKLSAgICBhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSA/IG5hdGl2ZUlt
YWdlLT5wbGF0Zm9ybUltYWdlKCkgOiBudWxscHRyOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2go
c3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGlm
IChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlRGF0YTsKLQotICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlLmdldCgpKTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKLSAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBpbWFn
ZURhdGE7Ci19Ci0KIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3Nzc0MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBAIHB1Ymxp
YzoKIAogICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCBvdmVycmlkZTsKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZm
ZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDYgQEAgUmVmUHRyPE5hdGl2ZUlt
YWdlPiBJbWFnZUJ1ZmZlckNHQml0bWFwQgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25z
dAotewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9kYXRhKTsK
LX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksNiBAQCBwdWJsaWM6CiAKICAgICBSZWZQ
dHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBp
eGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc3NDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTIgKzE3Nyw2IEBAIFJldGFp
blB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9TdXJmYWMKICAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0
b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZh
Y2UpOwotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSk7Ci19Ci0KIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0
JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgSU9T
dXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKIAogICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVy
Rm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0
cmVhbWVyLmNwcAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxNiwgMjAxNywgMjAxOCBJZ2FsaWEgUy5M
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw3ICsyMyw3IEBACiAjaW5jbHVkZSAiTWVkaWFTYW1w
bGVHU3RyZWFtZXIuaCIKIAogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgotCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRl
IDxhbGdvcml0aG0+CkBAIC05NywxNCArOTgsMTkgQEAgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVy
PiBNZWRpYVNhbXBsZUdTdAogICAgIHJldHVybiBhZG9wdFJlZigqZ3N0cmVhbWVyTWVkaWFTYW1w
bGUpOwogfQogCi1SZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IE1lZGlhU2FtcGxlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZVNhbXBsZShWZWN0b3I8dWludDhfdD4mJiBiZ3JhRGF0YSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXplLCBkb3VibGUgZnJhbWVS
YXRlKQorUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3Jl
YXRlSW1hZ2VTYW1wbGUoUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYg
ZGVzdGluYXRpb25TaXplLCBkb3VibGUgZnJhbWVSYXRlKQogewogICAgIGVuc3VyZUdTdHJlYW1l
ckluaXRpYWxpemVkKCk7CisgICAgCisgICAgYXV0byBzaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgp
OworCisgICAgYXV0byBkYXRhID0gcGl4ZWxCdWZmZXIudGFrZURhdGEoKTsKKyAgICBhdXRvIHNp
emVJbkJ5dGVzID0gZGF0YS0+Ynl0ZUxlbmd0aCgpOworICAgIGF1dG8gZGF0YUJhc2VBZGRyZXNz
ID0gZGF0YS0+ZGF0YSgpOworICAgIGF1dG8gbGVha2VkRGF0YSA9ICZkYXRhLmxlYWtSZWYoKTsK
IAotICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IGJncmFEYXRhLnNpemVJbkJ5dGVzKCk7Ci0gICAg
YXV0byogZGF0YSA9IGJncmFEYXRhLnJlbGVhc2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgYXV0
byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsKEdTVF9NRU1P
UllfRkxBR19SRUFET05MWSwgZGF0YSwgc2l6ZUluQnl0ZXMsIDAsIHNpemVJbkJ5dGVzLCBkYXRh
LCBbXShncG9pbnRlciBkYXRhKSB7Ci0gICAgICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGRh
dGEpOworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWRf
ZnVsbChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGRhdGFCYXNlQWRkcmVzcywgc2l6ZUluQnl0
ZXMsIDAsIHNpemVJbkJ5dGVzLCBsZWFrZWREYXRhLCBbXShncG9pbnRlciB1c2VyRGF0YSkgewor
ICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Kj4odXNlckRhdGEpLT5k
ZXJlZigpOwogICAgIH0pKTsKIAogICAgIGF1dG8gd2lkdGggPSBzaXplLndpZHRoKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVH
U3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaAkocmV2aXNpb24gMjc3NzQwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0
cmVhbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYs
IDIwMTcsIDIwMTggSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksNiArMzAsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFBpeGVsQnVmZmVyOworCiBjbGFzcyBN
ZWRpYVNhbXBsZUdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVNhbXBsZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlKEdSZWZQdHI8R3N0U2FtcGxl
PiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9t
U3RyaW5nJiB0cmFja0lkKQpAQCAtMzcsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlRmFrZVNhbXBsZShHc3RDYXBz
KiwgTWVkaWFUaW1lIHB0cywgTWVkaWFUaW1lIGR0cywgTWVkaWFUaW1lIGR1cmF0aW9uLCBjb25z
dCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQp
OwotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0ZUltYWdlU2FtcGxl
KFZlY3Rvcjx1aW50OF90PiYmLCBjb25zdCBJbnRTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IElu
dFNpemUmIGRlc3RpbmF0aW9uU2l6ZSA9IHsgfSwgZG91YmxlIGZyYW1lUmF0ZSA9IDEpOworICAg
IHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0ZUltYWdlU2FtcGxlKFBpeGVs
QnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGRlc3RpbmF0aW9uU2l6ZSA9IHsgfSwgZG91YmxlIGZy
YW1lUmF0ZSA9IDEpOwogCiAgICAgdm9pZCBleHRlbmRUb1RoZUJlZ2lubmluZygpOwogICAgIE1l
ZGlhVGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wdHM7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkocmV2aXNpb24g
Mjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDEyICszMDYsNiBA
QCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JH
UkFEYXRhKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB7IH07
Ci19Ci0KIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHJldmlzaW9uIDI3Nzc0MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rv
cjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVh
bWVyLmNwcAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgogICogQXV0aG9yOiBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBpZ2FsaWEuY29t
PgogICogQXV0aG9yOiBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNyw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJNZWRpYVNhbXBsZUdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NSw3
ICs2NywxMSBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1CiAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzYW1wbGUgPSBN
ZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUoaW1hZ2VCdWZmZXItPnRvQkdS
QURhdGEoKSwgY2FwdHVyZVNpemUoKSwgc2l6ZSgpLCBmcmFtZVJhdGUoKSk7CisgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcih7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IgfSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0p
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2Ft
cGxlID0gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKFdUTW92ZSgqcGl4
ZWxCdWZmZXIpLCBzaXplKCksIGZyYW1lUmF0ZSgpKTsKICAgICBzYW1wbGUtPm9mZnNldFRpbWVz
dGFtcHNCeShNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBf
bXMpLnNlY29uZHMoKSkpOwogICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycyhzYW1w
bGUuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjEtMDUt
MTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJbWFn
ZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxhY2UgaXRzIHVzZXMgd2l0aCB0aGUgbW9yZSBnZW5l
cmFsIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5NzYKKworICAgICAgICBSZXZpZXdlZCBieSBT
YWlkIEFib3UtSGFsbGF3YS4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRvQkdSQSgp
LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0QkdSQURh
dGFGb3JJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFNoYXJlZC9S
ZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNw
bGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZl
cik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
Y29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2Nv
YS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDoKKwogMjAyMS0wNS0xOSAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIEJhc2U2NCBl
bmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlvbnMK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA0LDE2ICs0MDQsNiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmdldERhdGFGb3JJCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkYXRhKSk7
CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0QkdSQURhdGFGb3JJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
bV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikpCi0gICAgICAgIGRhdGEgPSBpbWFnZUJ1ZmZlci0+dG9CR1JBRGF0YSgpOwot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGF0YSkpOwotfQotCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCShyZXZp
c2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpOwogICAg
IHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhf
dD4mJik+JiYpOwotICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PHVpbnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVm
ZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQCBtZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIHsKICAgICBEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnko
KQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcgdXJsU3RyaW5nKSBTeW5j
aHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBT
eW5jaHJvbm91cwotICAgIEdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZl
Y3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZv
ckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3lu
Y2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2Ug
Zm9udCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTksMTIgKzk5LDYgQEAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBDR0Rpc3BsYXlM
aQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WZWN0b3I8dWludDhfdD4gQ0dEaXNwbGF5TGlz
dEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogT3B0aW9uYWw8V2ViQ29yZTo6UGl4
ZWxCdWZmZXI+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVy
KGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9D
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGljOgogCiAg
ICAgLy8gTk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIFJlZlB0cjxX
ZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9y
ZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKLSAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFs
PFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhl
bEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhl
bEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDExICsxNTgsNiBAQCBSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwCiAgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVJ
bWFnZSgpOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwotfQotCiBPcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihj
b25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJKHJldmlzaW9uIDI3
Nzc0MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYg
QEAgcHVibGljOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUlt
YWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShX
ZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2Vi
Q29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhl
bEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhl
bEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTY1LDEzICsxNjUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVy
biBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0RGF0YUZvckltYWdlQnVmZmVyKG1p
bWVUeXBlLCBxdWFsaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgfQog
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+Z2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihtX3JlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7Ci0gICAgfQogICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4g
Y29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpCYWNr
aW5nU3RvcmVDb3B5OjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCShyZXZpc2lvbiAyNzc3
NDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxNSArMjE5LDYgQEAg
VmVjdG9yPHVpbnQ4X3Q+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcgogICAgIHJldHVybiBkYXRh
OwogfQogCi1WZWN0b3I8dWludDhfdD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRC
R1JBRGF0YUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCi17Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlm
TmVlZGVkKCk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBzZW5kU3luYyhNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6R2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoZGF0YSksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCksIDFfcyk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxl
Qml0bWFwKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKICAgICBzZW5kRGVmZXJyZWRXYWtldXBN
ZXNzYWdlSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsNyArOTUsNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29s
b3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQpOwogICAgIFN0cmluZyBnZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGdl
dEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlz
cGxheUxpc3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pOwogICAgIHZvaWQgY2Fj
aGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lv
biAyNzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29h
L0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCwxMiArMTE0LDYgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdQogICAgIHJldHVybiB7IH07CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJbnRSZWN0JikgY29uc3QK
IHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwogICAgIFN0cmluZyB0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAK
</data>
<flag name="commit-queue"
          id="450182"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429095</attachid>
            <date>2021-05-19 13:53:52 -0700</date>
            <delta_ts>2021-05-19 15:56:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225976-20210519135351.patch</filename>
            <type>text/plain</type>
            <size>42909</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA1LTE5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRv
QkdSQSgpIGFuZCByZXBsYWNlIGl0cyB1c2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBJbWFnZUJ1
ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FpZCBBYm91LUhh
bGxhd2EuCisKKyAgICAgICAgUmVtb3ZlcyBJbWFnZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxh
Y2VzIGl0IHdpdGggdGhlIG1vcmUgdmVyYm9zZSAoYnV0IGFsc28gbW9yZSBjbGVhcikKKyAgICAg
ICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKCkuIFRoZXJlIHdlcmUgb25seSB0d28gdXNl
cnMgb2YgdG9CR1JBKCksIE1lZGlhU2FtcGxlIGNyZWF0aW9uCisgICAgICAgIGZyb20gYSA8Y2Fu
dmFzPiBhbmQgUGFnZUNvbG9yU2FtcGxlci4gRm9yIE1lZGlhU2FtcGxlLCB3ZSBsaWtlbHkgc2hv
dWxkIG5vdCBiZSBkb2luZworICAgICAgICByZWFkYmFjayB0aGlzIHdheSwgYW5kIHNob3VsZCBp
bnN0ZWFkIHRyeSB0byBrZWVwIHRoZSBkYXRhIGluIHRoZSBHUFUgcHJvY2VzcyAvIG9uIHRoZSBH
UFUKKyAgICAgICAgd2hlbiBwb3NzaWJsZSAvIG5lY2Vzc2FyeS4KKworICAgICAgICAqIGh0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OnRvTWVkaWFTYW1wbGUpOgorICAgICAgICBVcGRhdGUgY2FsbHMgdG8gcGFzcyBpbWFnZUJ1
ZmZlciBhbmQgc2hhcmUgY2FsbCB0byBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpLgor
CisgICAgICAgICogcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNhbXBsZUNvbG9yKToKKyAgICAgICAgVXBkYXRlIG90IHVzZSBnZXRQaXhlbEJ1ZmZlcigpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVB
VkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZSk6CisgICAgICAgIFVwZGF0ZSBNZWRpYVNhbXBsZUFW
Rk9iakMgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5KCkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNh
bXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFs
dGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFs
dGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICBV
cGRhdGUgTWVkaWFTYW1wbGVHU3RyZWFtZXIgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5
KCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICBVc2UgI3By
YWdtYSBvbmNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgUmVtb3ZlIHRvQkdSQSgpLgorCiAyMDIx
LTA1LTE5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
QmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIG1hdGNoIG1vcmUgbW9kZXJuIFdlYktpdCBjb252
ZW50aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTMsMTggKzgxMywyNyBAQCBSZWZQdHI8SW1hZ2VE
YXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAKIFJlZlB0cjxNZWRpYVNhbXBsZT4gSFRNTENh
bnZhc0VsZW1lbnQ6OnRvTWVkaWFTYW1wbGUoKQogeworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoR1NUUkVBTUVSKQogICAgIGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkKICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQo
ZG9jdW1lbnQoKSk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBtYWtlUmVuZGVyaW5nUmVz
dWx0c0F2YWlsYWJsZSgpOwotICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUlt
YWdlU2FtcGxlKGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCksIHdpZHRoKCksIGhlaWdodCgpKTsK
KworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBsaWtlbHkgYmUgb3B0aW1pemVkIHF1aXRlIGEgYml0
LCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlcyB3aGVyZQorICAgIC8vIHRoZSBJbWFnZUJ1ZmZlciBp
cyBiYWNrZWQgYnkgR1BVIG1lbW9yeSBhbHJlYWR5IGFuZC9vciBpcyBpbiB0aGUgR1BVIHByb2Nl
c3MgYnkKKyAgICAvLyBzcGVjaWFsaXppbmcgdG9NZWRpYVNhbXBsZSgpIGluIEltYWdlQnVmZmVy
QmFja2VuZCB0byBub3QgdXNlIGdldFBpeGVsQnVmZmVyKCkuCisgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcih7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IgfSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0pOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgcmV0dXJuIE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlSW1hZ2VTYW1wbGUo
V1RGTW92ZSgqcGl4ZWxCdWZmZXIpKTsKICNlbGlmIFVTRShHU1RSRUFNRVIpCi0gICAgbWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKTsKLSAgICByZXR1cm4gTWVkaWFTYW1wbGVHU3RyZWFt
ZXI6OmNyZWF0ZUltYWdlU2FtcGxlKGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCksIHNpemUoKSk7
CisgICAgcmV0dXJuIE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShXVEZN
b3ZlKCpwaXhlbEJ1ZmZlcikpOworI2VuZGlmCiAjZWxzZQogICAgIHJldHVybiBudWxscHRyOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHJl
dmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTEwMyw3ICsxMDQsMTMgQEAg
c3RhdGljIE9wdGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKAogICAgIGlmICghc25hcHNo
b3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHNuYXBzaG90RGF0
YSA9IHNuYXBzaG90LT50b0JHUkFEYXRhKCk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHNuYXBz
aG90LT5nZXRQaXhlbEJ1ZmZlcih7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfSwg
eyB7IH0sIHNuYXBzaG90LT5sb2dpY2FsU2l6ZSgpIH0pOworICAgIGlmICghcGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBBU1NFUlQocGl4ZWxCdWZmZXIt
PmRhdGEoKS5sZW5ndGgoKSA8PSA0KTsKKworICAgIGF1dG8gc25hcHNob3REYXRhID0gcGl4ZWxC
dWZmZXItPmRhdGEoKS5kYXRhKCk7CiAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+
PihTUkdCQTx1aW50OF90PiB7IHNuYXBzaG90RGF0YVsyXSwgc25hcHNob3REYXRhWzFdLCBzbmFw
c2hvdERhdGFbMF0sIHNuYXBzaG90RGF0YVszXSB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NZWRpYVNhbXBsZS5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTWVkaWFTYW1wbGVfaAotI2RlZmluZSBNZWRp
YVNhbXBsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CkBAIC0xNTIsNSArMTUxLDMgQEAgc3Ry
dWN0IExvZ0FyZ3VtZW50PFdlYkNvcmU6Ok1lZGlhU2FtcGxlPgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3NzQwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjEsMTUgKzIyMSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmRDcmVhdGVkKCkpIHsKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0JHUkFEYXRhKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KICAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJG
b3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0
ZWQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDYgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3Jt
YXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpID0gMDsKQEAgLTEzMyw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgLy8gd2l0aCB0
ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5
cGUuCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0ID0gMDsKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDI4ICs5Miw2IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9M
dW1pbmEKICAgICBwdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGxvZ2ljYWxSZWN0KCksIElu
dFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwog
fQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKHZvaWQq
IGRhdGEpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbG9naWNhbFNp
emUoKS5hcmVhKCkudW5zYWZlR2V0KCkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgc291cmNl
Rm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3Jt
YXQoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07Ci0gICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZGVzdGluYXRpb25Gb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIFBpeGVsRm9ybWF0OjpCR1JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07
Ci0KLSAgICBDb25zdFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgc291cmNlOwotICAgIHNvdXJj
ZS5mb3JtYXQgPSBzb3VyY2VGb3JtYXQ7Ci0gICAgc291cmNlLmJ5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3coKTsKLSAgICBzb3VyY2Uucm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEpOwotICAgIAotICAgIFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgZGVzdGluYXRp
b247Ci0gICAgZGVzdGluYXRpb24uZm9ybWF0ID0gZGVzdGluYXRpb25Gb3JtYXQ7Ci0gICAgZGVz
dGluYXRpb24uYnl0ZXNQZXJSb3cgPSBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiA0OwotICAgIGRl
c3RpbmF0aW9uLnJvd3MgPSByZXN1bHQuZGF0YSgpOwotCi0gICAgY29udmVydEltYWdlUGl4ZWxz
KHNvdXJjZSwgZGVzdGluYXRpb24sIGxvZ2ljYWxTaXplKCkpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9uRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAogewogICAgIEFTU0VSVChQ
aXhlbEJ1ZmZlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXQoZGVzdGluYXRpb25Gb3JtYXQucGl4ZWxG
b3JtYXQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA2LDcgKzEwNiw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxC
dWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpID0gMDsKQEAgLTE0Nyw4ICsxNDYs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgSW50UmVjdCBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUoKSk7IH07CiAgICAgSW50UmVj
dCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
YmFja2VuZFNpemUoKSk7IH07CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYg
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVy
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgJKHJldmlzaW9uIDI3Nzc0
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhU2FtcGxlQVZGT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDEyICszMiwxNCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFBpeGVsQnVmZmVyOworCiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZm
ZXJSZWYgc2FtcGxlLCB1aW50NjRfdCB0cmFja0lEKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1l
ZGlhU2FtcGxlQVZGT2JqQyhzYW1wbGUsIHRyYWNrSUQpKTsgfQogICAgIHN0YXRpYyBSZWY8TWVk
aWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBBdG9tU3Ry
aW5nIHRyYWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNh
bXBsZSwgdHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNy
ZWF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBW
aWRlb1JvdGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7
IH0KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1w
bGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwor
ICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGVJbWFnZVNhbXBsZShQ
aXhlbEJ1ZmZlciYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFzRGlz
cGxheUltbWVkaWF0ZWx5KE1lZGlhU2FtcGxlJik7CiAgICAgc3RhdGljIFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gY2xvbmVTYW1wbGVCdWZmZXJBbmRTZXRBc0Rpc3BsYXlJbW1lZGlhdGVs
eShDTVNhbXBsZUJ1ZmZlclJlZik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFTYW1wbGVBVkZPYmpDLm1tCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0
ICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKIAorI2ltcG9ydCAiUGl4ZWxCdWZmZXIuaCIKICNpbXBv
cnQgIlBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+
CkBAIC00MSwzMSArNDIsMzggQEAgV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDTVNhbXBsZUJ1
ZmZlcgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGRlYWxsb2NhdGVWZWN0
b3JCdWZmZXIodm9pZCogYXJyYXksIGNvbnN0IHZvaWQqKQorUmVmUHRyPE1lZGlhU2FtcGxlQVZG
T2JqQz4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZShQaXhlbEJ1ZmZlciYm
IHBpeGVsQnVmZmVyKQogewotICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGFycmF5KTsKLX0K
KyAgICBhdXRvIHNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisgICAgYXV0byB3aWR0aCA9IHNp
emUud2lkdGgoKTsKKyAgICBhdXRvIGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICBhdXRv
IGRhdGEgPSBwaXhlbEJ1ZmZlci50YWtlRGF0YSgpOworICAgIGF1dG8gZGF0YUJhc2VBZGRyZXNz
ID0gZGF0YS0+ZGF0YSgpOworICAgIGF1dG8gbGVha2VkRGF0YSA9ICZkYXRhLmxlYWtSZWYoKTsK
KyAgICAKKyAgICBhdXRvIGRlcmVmQnVmZmVyID0gW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZv
aWQqKSB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250
ZXh0KS0+ZGVyZWYoKTsKKyAgICB9OwogCi1SZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBNZWRp
YVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdlU2FtcGxlKFZlY3Rvcjx1aW50OF90PiYmIGFycmF5
LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotICAgIENWUGl4ZWxCdWZmZXJS
ZWYgcGl4ZWxCdWZmZXJSYXcgPSBudWxscHRyOwotICAgIGF1dG8gZGF0YSA9IGFycmF5LnJlbGVh
c2VCdWZmZXIoKS5sZWFrUHRyKCk7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3Jl
YXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHdpZHRoLCBoZWlnaHQsIGtDVlBpeGVs
Rm9ybWF0VHlwZV8zMkJHUkEsIGRhdGEsIHdpZHRoICogNCwgZGVhbGxvY2F0ZVZlY3RvckJ1ZmZl
ciwgZGF0YSwgbnVsbHB0ciwgJnBpeGVsQnVmZmVyUmF3KTsKLSAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gYWRvcHRDRihwaXhlbEJ1ZmZlclJhdyk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikgewotICAg
ICAgICBkZWFsbG9jYXRlVmVjdG9yQnVmZmVyKGRhdGEsIG51bGxwdHIpOworICAgIENWUGl4ZWxC
dWZmZXJSZWYgY3ZQaXhlbEJ1ZmZlclJhdyA9IG51bGxwdHI7CisgICAgYXV0byBzdGF0dXMgPSBD
VlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHdpZHRoLCBo
ZWlnaHQsIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEsIGRhdGFCYXNlQWRkcmVzcywgd2lkdGgg
KiA0LCBkZXJlZkJ1ZmZlciwgbGVha2VkRGF0YSwgbnVsbHB0ciwgJmN2UGl4ZWxCdWZmZXJSYXcp
OworCisgICAgYXV0byBjdlBpeGVsQnVmZmVyID0gYWRvcHRDRihjdlBpeGVsQnVmZmVyUmF3KTsK
KyAgICBpZiAoIWN2UGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgZGVyZWZCdWZmZXIobGVha2VkRGF0
YSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBBU1NFUlRf
VU5VU0VEKHN0YXR1cywgIXN0YXR1cyk7CiAKICAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25S
ZWYgZm9ybWF0RGVzY3JpcHRpb25SYXcgPSBudWxscHRyOwotICAgIHN0YXR1cyA9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQs
IHBpeGVsQnVmZmVyLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb25SYXcpOworICAgIHN0YXR1cyA9
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGN2UGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvblJhdyk7CiAg
ICAgQVNTRVJUKCFzdGF0dXMpOwogICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENG
KGZvcm1hdERlc2NyaXB0aW9uUmF3KTsKIAogICAgIENNU2FtcGxlVGltaW5nSW5mbyBzYW1wbGVU
aW1pbmdJbmZvcm1hdGlvbiA9IHsga0NNVGltZUludmFsaWQsIGtDTVRpbWVJbnZhbGlkLCBrQ01U
aW1lSW52YWxpZCB9OwogICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlclJhdyA9IG51
bGxwdHI7Ci0gICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3Jp
cHRpb24uZ2V0KCksICZzYW1wbGVUaW1pbmdJbmZvcm1hdGlvbiwgJnNhbXBsZUJ1ZmZlclJhdyk7
CisgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBjdlBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlv
bi5nZXQoKSwgJnNhbXBsZVRpbWluZ0luZm9ybWF0aW9uLCAmc2FtcGxlQnVmZmVyUmF3KTsKICAg
ICBBU1NFUlQoIXN0YXR1cyk7CiAgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHNhbXBs
ZUJ1ZmZlclJhdyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDIzICsxMDMsNiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdl
QnVmZmVyQ2Fpcm9TdXJmCiAgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3Ip
OwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0
b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBhdXRvIG5hdGl2ZUltYWdlID0gY2Fpcm9TdXJmYWNl
Q29lcmNlVG9JbWFnZSgpOwotICAgIGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlID8gbmF0aXZl
SW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSA6IG51bGxwdHI7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVz
aChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAg
aWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4g
aW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGlt
YWdlRGF0YTsKLX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzQw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgcHVi
bGljOgogCiAgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1
ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQsNiBAQCBSZWZQdHI8TmF0aXZl
SW1hZ2U+IEltYWdlQnVmZmVyQ0dCaXRtYXBCCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEp
OwotfQotCiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw2IEBAIHB1YmxpYzoKIAogICAgIFJl
ZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3Qg
UGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NywxMiArMTc3LDYgQEAgUmV0
YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhYwogICAgIHJldHVybiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1
dGlvbik7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3Vy
ZmFjZSk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1
cmZhY2VCYXNlQWRkcmVzcygpKTsKLX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3Jt
YXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBJ
T1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdDb25zdW1pbmco
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwogCiAg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJy
aWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZm
ZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVH
U3RyZWFtZXIuY3BwCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE2LCAyMDE3LCAyMDE4IElnYWxpYSBT
LkwKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDcgKzIzLDcgQEAKICNpbmNsdWRlICJNZWRpYVNh
bXBsZUdTdHJlYW1lci5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0KKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KQEAgLTk3LDE0ICs5OCwxOSBAQCBSZWY8TWVkaWFTYW1wbGVHU3RyZWFt
ZXI+IE1lZGlhU2FtcGxlR1N0CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpnc3RyZWFtZXJNZWRpYVNh
bXBsZSk7CiB9CiAKLVJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gTWVkaWFTYW1wbGVHU3RyZWFt
ZXI6OmNyZWF0ZUltYWdlU2FtcGxlKFZlY3Rvcjx1aW50OF90PiYmIGJncmFEYXRhLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBkZXN0aW5hdGlvblNpemUsIGRvdWJsZSBmcmFt
ZVJhdGUpCitSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpj
cmVhdGVJbWFnZVNhbXBsZShQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXpl
JiBkZXN0aW5hdGlvblNpemUsIGRvdWJsZSBmcmFtZVJhdGUpCiB7CiAgICAgZW5zdXJlR1N0cmVh
bWVySW5pdGlhbGl6ZWQoKTsKKyAgICAKKyAgICBhdXRvIHNpemUgPSBwaXhlbEJ1ZmZlci5zaXpl
KCk7CisKKyAgICBhdXRvIGRhdGEgPSBwaXhlbEJ1ZmZlci50YWtlRGF0YSgpOworICAgIGF1dG8g
c2l6ZUluQnl0ZXMgPSBkYXRhLT5ieXRlTGVuZ3RoKCk7CisgICAgYXV0byBkYXRhQmFzZUFkZHJl
c3MgPSBkYXRhLT5kYXRhKCk7CisgICAgYXV0byBsZWFrZWREYXRhID0gJmRhdGEubGVha1JlZigp
OwogCi0gICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gYmdyYURhdGEuc2l6ZUluQnl0ZXMoKTsKLSAg
ICBhdXRvKiBkYXRhID0gYmdyYURhdGEucmVsZWFzZUJ1ZmZlcigpLmxlYWtQdHIoKTsKLSAgICBh
dXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwoR1NUX01F
TU9SWV9GTEFHX1JFQURPTkxZLCBkYXRhLCBzaXplSW5CeXRlcywgMCwgc2l6ZUluQnl0ZXMsIGRh
dGEsIFtdKGdwb2ludGVyIGRhdGEpIHsKLSAgICAgICAgV1RGOjpWZWN0b3JNYWxsb2M6OmZyZWUo
ZGF0YSk7CisgICAgYXV0byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBl
ZF9mdWxsKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwgZGF0YUJhc2VBZGRyZXNzLCBzaXplSW5C
eXRlcywgMCwgc2l6ZUluQnl0ZXMsIGxlYWtlZERhdGEsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7
CisgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPih1c2VyRGF0YSkt
PmRlcmVmKCk7CiAgICAgfSkpOwogCiAgICAgYXV0byB3aWR0aCA9IHNpemUud2lkdGgoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCShyZXZpc2lvbiAyNzc3NDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVH
U3RyZWFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAx
NiwgMjAxNywgMjAxOCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGl4ZWxCdWZmZXI7CisKIGNsYXNz
IE1lZGlhU2FtcGxlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhU2FtcGxlIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGUoR1JlZlB0cjxHc3RTYW1w
bGU+JiYgc2FtcGxlLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0
b21TdHJpbmcmIHRyYWNrSWQpCkBAIC0zNyw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGVGYWtlU2FtcGxlKEdzdENh
cHMqLCBNZWRpYVRpbWUgcHRzLCBNZWRpYVRpbWUgZHRzLCBNZWRpYVRpbWUgZHVyYXRpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJ
ZCk7Ci0gICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2VTYW1w
bGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIGNvbnN0IEludFNpemUmIG9yaWdpbmFsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgZGVzdGluYXRpb25TaXplID0geyB9LCBkb3VibGUgZnJhbWVSYXRlID0gMSk7Cisg
ICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2VTYW1wbGUoUGl4
ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXplID0geyB9LCBkb3VibGUg
ZnJhbWVSYXRlID0gMSk7CiAKICAgICB2b2lkIGV4dGVuZFRvVGhlQmVnaW5uaW5nKCk7CiAgICAg
TWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3B0
czsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lv
biAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTIgKzMwNiw2
IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2UKICAgICByZXR1cm4g
eyB9OwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
QkdSQURhdGEoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHsg
fTsKLX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzQwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogCiAg
ICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4
ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwIEln
YWxpYSBTLkwuCiAgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CiAgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1lZGlhU2FtcGxl
R1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1
LDcgKzY3LDExIEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnUKICAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNhbXBsZSA9
IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShpbWFnZUJ1ZmZlci0+dG9C
R1JBRGF0YSgpLCBjYXB0dXJlU2l6ZSgpLCBzaXplKCksIGZyYW1lUmF0ZSgpKTsKKyAgICBhdXRv
IHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6QkdSQTgsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQiB9LCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkg
fSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBz
YW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUoV1RGTW92ZSgq
cGl4ZWxCdWZmZXIpLCBzaXplKCksIGZyYW1lUmF0ZSgpKTsKICAgICBzYW1wbGUtPm9mZnNldFRp
bWVzdGFtcHNCeShNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAx
MDBfbXMpLnNlY29uZHMoKSkpOwogICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycyhz
YW1wbGUuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjEt
MDUtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJ
bWFnZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxhY2UgaXRzIHVzZXMgd2l0aCB0aGUgbW9yZSBn
ZW5lcmFsIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcigpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5NzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBTYWlkIEFib3UtSGFsbGF3YS4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRvQkdS
QSgpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0QkdS
QURhdGFGb3JJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFNoYXJl
ZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURh
dGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0QkdSQURhdGFGb3JJbWFnZUJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9j
b2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDoKKwogMjAyMS0wNS0x
OSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIEJhc2U2
NCBlbmNvZGluZy9kZWNvZGluZyB0byBtYXRjaCBtb3JlIG1vZGVybiBXZWJLaXQgY29udmVudGlv
bnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDE2ICs0MDQsNiBAQCB2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmdldERhdGFGb3JJCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkYXRh
KSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0QkdSQURhdGFGb3JJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGRhdGEgPSBpbWFnZUJ1ZmZlci0+dG9CR1JBRGF0YSgp
OwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGF0YSkpOwotfQotCiB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpOwog
ICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWlu
dDhfdD4mJik+JiYpOwotICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPHVpbnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdl
QnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQCBtZXNzYWdlcyAtPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1v
cnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcgdXJsU3RyaW5nKSBT
eW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRh
KSBTeW5jaHJvbm91cwotICAgIEdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4g
KFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1h
cEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkg
U3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVu
Y2UgZm9udCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxh
eWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTksMTIgKzk5LDYgQEAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBDR0Rpc3Bs
YXlMaQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WZWN0b3I8dWludDhfdD4gQ0dEaXNwbGF5
TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogT3B0aW9uYWw8V2ViQ29yZTo6
UGl4ZWxCdWZmZXI+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFj
a2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJl
ZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHJldmlzaW9uIDI3Nzc0MCkKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGljOgog
CiAgICAgLy8gTk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIFJlZlB0
cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdT
dG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQ
aXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQ
aXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDExICsxNTgsNiBAQCBSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwCiAgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVh
dGVJbWFnZSgpOwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwotfQotCiBPcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
cihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVs
QnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJKHJldmlzaW9u
IDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDYgQEAgcHVibGljOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2
ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0
b3JlKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFn
ZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwg
V2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
OjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQ
aXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQ
aXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDEzICsxNjUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJl
dHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0RGF0YUZvckltYWdlQnVmZmVy
KG1pbWVUeXBlLCBxdWFsaXR5LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAg
fQogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+Z2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihtX3JlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7Ci0gICAgfQogICAgIFJlZlB0cjxXZWJDb3JlOjpOYXRpdmVJbWFn
ZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpC
YWNraW5nU3RvcmVDb3B5OjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQogICAgIHsK
ICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCShyZXZpc2lvbiAy
Nzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSwxNSArMjE5LDYg
QEAgVmVjdG9yPHVpbnQ4X3Q+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcgogICAgIHJldHVybiBk
YXRhOwogfQogCi1WZWN0b3I8dWludDhfdD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi17Ci0gICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2Fn
ZUlmTmVlZGVkKCk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZl
cihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoZGF0YSksIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVh
YmxlQml0bWFwKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKICAgICBzZW5kRGVmZXJyZWRXYWtl
dXBNZXNzYWdlSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNyArOTUsNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9u
Q29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQpOwogICAgIFN0cmluZyBnZXREYXRhVVJM
Rm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNo
RGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pOwogICAgIHZvaWQg
Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2Nv
Y29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNCwxMiArMTE0LDYgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdQogICAgIHJldHVybiB7IH07CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBJbnRSZWN0JikgY29u
c3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5o
CShyZXZpc2lvbiAyNzc3NDApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdQYXR0ZXJuKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwogICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3Jl
OjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdCBvdmVycmlkZTsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429106</attachid>
            <date>2021-05-19 15:56:36 -0700</date>
            <delta_ts>2021-05-19 17:13:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225976-20210519155635.patch</filename>
            <type>text/plain</type>
            <size>42803</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIxLTA1LTE5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRv
QkdSQSgpIGFuZCByZXBsYWNlIGl0cyB1c2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBJbWFnZUJ1
ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI1OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FpZCBBYm91LUhh
bGxhd2EuCisKKyAgICAgICAgUmVtb3ZlcyBJbWFnZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxh
Y2VzIGl0IHdpdGggdGhlIG1vcmUgdmVyYm9zZSAoYnV0IGFsc28gbW9yZSBjbGVhcikKKyAgICAg
ICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKCkuIFRoZXJlIHdlcmUgb25seSB0d28gdXNl
cnMgb2YgdG9CR1JBKCksIE1lZGlhU2FtcGxlIGNyZWF0aW9uCisgICAgICAgIGZyb20gYSA8Y2Fu
dmFzPiBhbmQgUGFnZUNvbG9yU2FtcGxlci4gRm9yIE1lZGlhU2FtcGxlLCB3ZSBsaWtlbHkgc2hv
dWxkIG5vdCBiZSBkb2luZworICAgICAgICByZWFkYmFjayB0aGlzIHdheSwgYW5kIHNob3VsZCBp
bnN0ZWFkIHRyeSB0byBrZWVwIHRoZSBkYXRhIGluIHRoZSBHUFUgcHJvY2VzcyAvIG9uIHRoZSBH
UFUKKyAgICAgICAgd2hlbiBwb3NzaWJsZSAvIG5lY2Vzc2FyeS4KKworICAgICAgICAqIGh0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OnRvTWVkaWFTYW1wbGUpOgorICAgICAgICBVcGRhdGUgY2FsbHMgdG8gcGFzcyBpbWFnZUJ1
ZmZlciBhbmQgc2hhcmUgY2FsbCB0byBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpLgor
CisgICAgICAgICogcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNhbXBsZUNvbG9yKToKKyAgICAgICAgVXBkYXRlIG90IHVzZSBnZXRQaXhlbEJ1ZmZlcigpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVB
VkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZSk6CisgICAgICAgIFVwZGF0ZSBNZWRpYVNhbXBsZUFW
Rk9iakMgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5KCkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNh
bXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFs
dGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFs
dGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICBV
cGRhdGUgTWVkaWFTYW1wbGVHU3RyZWFtZXIgdG8gdXNlIGdldFBpeGVsQnVmZmVyIGRpcmVjdGx5
KCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICBVc2UgI3By
YWdtYSBvbmNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuaDoKKyAgICAgICAgUmVtb3ZlIHRvQkdSQSgpLgorCiAyMDIx
LTA1LTE5ICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIHVudXNlZCBHcmFwaGljc0NvbnRleHRJbXBsIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9u
IDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MTMsMTggKzgxMywyNyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBIVE1M
Q2FudmFzRWxlbWVudDo6Z2V0CiAKIFJlZlB0cjxNZWRpYVNhbXBsZT4gSFRNTENhbnZhc0VsZW1l
bnQ6OnRvTWVkaWFTYW1wbGUoKQogeworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoR1NUUkVB
TUVSKQogICAgIGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQoZG9jdW1lbnQo
KSk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWls
YWJsZSgpOwotICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUltYWdlU2FtcGxl
KGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCksIHdpZHRoKCksIGhlaWdodCgpKTsKKworICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBsaWtlbHkgYmUgb3B0aW1pemVkIHF1aXRlIGEgYml0LCBlc3BlY2lh
bGx5IGluIHRoZSBjYXNlcyB3aGVyZQorICAgIC8vIHRoZSBJbWFnZUJ1ZmZlciBpcyBiYWNrZWQg
YnkgR1BVIG1lbW9yeSBhbHJlYWR5IGFuZC9vciBpcyBpbiB0aGUgR1BVIHByb2Nlc3MgYnkKKyAg
ICAvLyBzcGVjaWFsaXppbmcgdG9NZWRpYVNhbXBsZSgpIGluIEltYWdlQnVmZmVyQmFja2VuZCB0
byBub3QgdXNlIGdldFBpeGVsQnVmZmVyKCkuCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGltYWdl
QnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcih7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Ig
fSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0pOworICAgIGlmICghcGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgcmV0dXJuIE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlSW1hZ2VTYW1wbGUoV1RGTW92ZSgq
cGl4ZWxCdWZmZXIpKTsKICNlbGlmIFVTRShHU1RSRUFNRVIpCi0gICAgbWFrZVJlbmRlcmluZ1Jl
c3VsdHNBdmFpbGFibGUoKTsKLSAgICByZXR1cm4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0
ZUltYWdlU2FtcGxlKGltYWdlQnVmZmVyLT50b0JHUkFEYXRhKCksIHNpemUoKSk7CisgICAgcmV0
dXJuIE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShXVEZNb3ZlKCpwaXhl
bEJ1ZmZlcikpOworI2VuZGlmCiAjZWxzZQogICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHJldmlzaW9uIDI3
Nzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVk
ZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTEwMyw3ICsxMDQsMTMgQEAgc3RhdGljIE9w
dGlvbmFsPExhYjxmbG9hdD4+IHNhbXBsZUNvbG9yKAogICAgIGlmICghc25hcHNob3QpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHNuYXBz
aG90LT50b0JHUkFEYXRhKCk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHNuYXBzaG90LT5nZXRQ
aXhlbEJ1ZmZlcih7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OkJHUkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IgfSwgeyB7IH0sIHNu
YXBzaG90LT5sb2dpY2FsU2l6ZSgpIH0pOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBBU1NFUlQocGl4ZWxCdWZmZXItPmRhdGEoKS5s
ZW5ndGgoKSA8PSA0KTsKKworICAgIGF1dG8gc25hcHNob3REYXRhID0gcGl4ZWxCdWZmZXItPmRh
dGEoKS5kYXRhKCk7CiAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihTUkdCQTx1
aW50OF90PiB7IHNuYXBzaG90RGF0YVsyXSwgc25hcHNob3REYXRhWzFdLCBzbmFwc2hvdERhdGFb
MF0sIHNuYXBzaG90RGF0YVszXSB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
ZWRpYVNhbXBsZS5oCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9NZWRpYVNhbXBsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgTWVkaWFTYW1wbGVfaAotI2RlZmluZSBNZWRpYVNhbXBsZV9o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CkBAIC0xNTIsNSArMTUxLDMgQEAgc3RydWN0IExvZ0Fy
Z3VtZW50PFdlYkNvcmU6Ok1lZGlhU2FtcGxlPgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJ
bWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3NzYwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjEsMTUgKzIyMSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkpIHsKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlz
KS5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0JHUkFEYXRh
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KICAgICBPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
ID0gMDsKQEAgLTEzMyw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0
aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCiAgICAg
dmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTCYsIEdD
R0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsK
LSAgICAKKwogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTky
LDI4ICs5Miw2IEBAIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmEKICAg
ICBwdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6
ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogfQogCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNv
bnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbG9naWNhbFNpemUoKS5hcmVh
KCkudW5zYWZlR2V0KCkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgc291cmNlRm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZGVzdGlu
YXRpb25Gb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpCR1JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07Ci0KLSAgICBD
b25zdFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgc291cmNlOwotICAgIHNvdXJjZS5mb3JtYXQg
PSBzb3VyY2VGb3JtYXQ7Ci0gICAgc291cmNlLmJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsK
LSAgICBzb3VyY2Uucm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEp
OwotICAgIAotICAgIFBpeGVsQnVmZmVyQ29udmVyc2lvblZpZXcgZGVzdGluYXRpb247Ci0gICAg
ZGVzdGluYXRpb24uZm9ybWF0ID0gZGVzdGluYXRpb25Gb3JtYXQ7Ci0gICAgZGVzdGluYXRpb24u
Ynl0ZXNQZXJSb3cgPSBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiA0OwotICAgIGRlc3RpbmF0aW9u
LnJvd3MgPSByZXN1bHQuZGF0YSgpOwotCi0gICAgY29udmVydEltYWdlUGl4ZWxzKHNvdXJjZSwg
ZGVzdGluYXRpb24sIGxvZ2ljYWxTaXplKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQog
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9uRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAogewogICAgIEFTU0VSVChQaXhlbEJ1ZmZl
cjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXQoZGVzdGluYXRpb25Gb3JtYXQucGl4ZWxGb3JtYXQpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2
LDcgKzEwNiw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwog
CiAgICAgdmlydHVhbCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3Qg
UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpID0gMDsKQEAgLTE0Nyw4ICsxNDYsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgSW50UmVjdCBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUoKSk7IH07CiAgICAgSW50UmVjdCBiYWNrZW5k
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgYmFja2VuZFNp
emUoKSk7IH07CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSh2b2lkKiBkYXRhKSBjb25zdDsKLQogICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2Ft
cGxlQVZGT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDEyICszMiwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIFBpeGVsQnVmZmVyOworCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBN
ZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2Ft
cGxlLCB1aW50NjRfdCB0cmFja0lEKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxl
QVZGT2JqQyhzYW1wbGUsIHRyYWNrSUQpKTsgfQogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVB
VkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBBdG9tU3RyaW5nIHRyYWNr
SUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgdHJh
Y2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShDTVNh
bXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBWaWRlb1JvdGF0
aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7IH0KLSAgICBz
dGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoVmVjdG9y
PHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworICAgIHN0YXRp
YyBSZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGVJbWFnZVNhbXBsZShQaXhlbEJ1ZmZl
ciYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFzRGlzcGxheUltbWVk
aWF0ZWx5KE1lZGlhU2FtcGxlJik7CiAgICAgc3RhdGljIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gY2xvbmVTYW1wbGVCdWZmZXJBbmRTZXRBc0Rpc3BsYXlJbW1lZGlhdGVseShDTVNhbXBs
ZUJ1ZmZlclJlZik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVB
VkZPYmpDLm1tCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJNZWRpYVNh
bXBsZUFWRk9iakMuaCIKIAorI2ltcG9ydCAiUGl4ZWxCdWZmZXIuaCIKICNpbXBvcnQgIlBpeGVs
QnVmZmVyQ29uZm9ybWVyQ1YuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CkBAIC00MSwz
MSArNDIsMzggQEAgV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDTVNhbXBsZUJ1ZmZlcgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIGRlYWxsb2NhdGVWZWN0b3JCdWZmZXIo
dm9pZCogYXJyYXksIGNvbnN0IHZvaWQqKQorUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gTWVk
aWFTYW1wbGVBVkZPYmpDOjpjcmVhdGVJbWFnZVNhbXBsZShQaXhlbEJ1ZmZlciYmIHBpeGVsQnVm
ZmVyKQogewotICAgIFdURjo6VmVjdG9yTWFsbG9jOjpmcmVlKGFycmF5KTsKLX0KKyAgICBhdXRv
IHNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisgICAgYXV0byB3aWR0aCA9IHNpemUud2lkdGgo
KTsKKyAgICBhdXRvIGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICBhdXRvIGRhdGEgPSBw
aXhlbEJ1ZmZlci50YWtlRGF0YSgpOworICAgIGF1dG8gZGF0YUJhc2VBZGRyZXNzID0gZGF0YS0+
ZGF0YSgpOworICAgIGF1dG8gbGVha2VkRGF0YSA9ICZkYXRhLmxlYWtSZWYoKTsKKyAgICAKKyAg
ICBhdXRvIGRlcmVmQnVmZmVyID0gW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqKSB7Cisg
ICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVy
ZWYoKTsKKyAgICB9OwogCi1SZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBNZWRpYVNhbXBsZUFW
Rk9iakM6OmNyZWF0ZUltYWdlU2FtcGxlKFZlY3Rvcjx1aW50OF90PiYmIGFycmF5LCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxC
dWZmZXJSYXcgPSBudWxscHRyOwotICAgIGF1dG8gZGF0YSA9IGFycmF5LnJlbGVhc2VCdWZmZXIo
KS5sZWFrUHRyKCk7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aEJ5
dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHdpZHRoLCBoZWlnaHQsIGtDVlBpeGVsRm9ybWF0VHlw
ZV8zMkJHUkEsIGRhdGEsIHdpZHRoICogNCwgZGVhbGxvY2F0ZVZlY3RvckJ1ZmZlciwgZGF0YSwg
bnVsbHB0ciwgJnBpeGVsQnVmZmVyUmF3KTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gYWRvcHRD
RihwaXhlbEJ1ZmZlclJhdyk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikgewotICAgICAgICBkZWFs
bG9jYXRlVmVjdG9yQnVmZmVyKGRhdGEsIG51bGxwdHIpOworICAgIENWUGl4ZWxCdWZmZXJSZWYg
Y3ZQaXhlbEJ1ZmZlclJhdyA9IG51bGxwdHI7CisgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHdpZHRoLCBoZWlnaHQsIGtD
VlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEsIGRhdGFCYXNlQWRkcmVzcywgd2lkdGggKiA0LCBkZXJl
ZkJ1ZmZlciwgbGVha2VkRGF0YSwgbnVsbHB0ciwgJmN2UGl4ZWxCdWZmZXJSYXcpOworCisgICAg
YXV0byBjdlBpeGVsQnVmZmVyID0gYWRvcHRDRihjdlBpeGVsQnVmZmVyUmF3KTsKKyAgICBpZiAo
IWN2UGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgZGVyZWZCdWZmZXIobGVha2VkRGF0YSwgbnVsbHB0
cik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBBU1NFUlRfVU5VU0VEKHN0
YXR1cywgIXN0YXR1cyk7CiAKICAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0
RGVzY3JpcHRpb25SYXcgPSBudWxscHRyOwotICAgIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVm
ZmVyLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb25SYXcpOworICAgIHN0YXR1cyA9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGN2UGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvblJhdyk7CiAgICAgQVNTRVJU
KCFzdGF0dXMpOwogICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENGKGZvcm1hdERl
c2NyaXB0aW9uUmF3KTsKIAogICAgIENNU2FtcGxlVGltaW5nSW5mbyBzYW1wbGVUaW1pbmdJbmZv
cm1hdGlvbiA9IHsga0NNVGltZUludmFsaWQsIGtDTVRpbWVJbnZhbGlkLCBrQ01UaW1lSW52YWxp
ZCB9OwogICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlclJhdyA9IG51bGxwdHI7Ci0g
ICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24uZ2V0
KCksICZzYW1wbGVUaW1pbmdJbmZvcm1hdGlvbiwgJnNhbXBsZUJ1ZmZlclJhdyk7CisgICAgc3Rh
dHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBjdlBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwg
JnNhbXBsZVRpbWluZ0luZm9ybWF0aW9uLCAmc2FtcGxlQnVmZmVyUmF3KTsKICAgICBBU1NFUlQo
IXN0YXR1cyk7CiAgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHNhbXBsZUJ1ZmZlclJh
dyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmNwcAkocmV2aXNpb24gMjc3NzYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDIzICsxMDMsNiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlQnVmZmVyQ2Fp
cm9TdXJmCiAgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwogfQogCi1W
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRh
KCkgY29uc3QKLXsKLSAgICBhdXRvIG5hdGl2ZUltYWdlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9J
bWFnZSgpOwotICAgIGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlID8gbmF0aXZlSW1hZ2UtPnBs
YXRmb3JtSW1hZ2UoKSA6IG51bGxwdHI7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNl
LmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNhaXJv
X3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRh
OwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZh
Y2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsK
LX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgcHVibGljOgogCiAg
ICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25z
dCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQsNiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+IElt
YWdlQnVmZmVyQ0dCaXRtYXBCCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwotfQotCiBP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldFBpeGVs
QnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw2IEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxOYXRp
dmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZm
ZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NywxMiArMTc3LDYgQEAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29weUNHSW1hZ2VGb3JFbmNvZGluZyhkZXN0aW5hdGlvblVUSSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9z
dXJmYWNlKTsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2su
c3VyZmFjZUJhc2VBZGRyZXNzKCkpOwotfQotCiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZv
cm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzYwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
IAotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJG
b3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3Ry
ZWFtZXIuY3BwCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE2LCAyMDE3LCAyMDE4IElnYWxpYSBTLkwK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDcgKzIzLDcgQEAKICNpbmNsdWRlICJNZWRpYVNhbXBs
ZUdTdHJlYW1lci5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0KKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KQEAgLTk3LDE0ICs5OCwxOSBAQCBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+
IE1lZGlhU2FtcGxlR1N0CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpnc3RyZWFtZXJNZWRpYVNhbXBs
ZSk7CiB9CiAKLVJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6
OmNyZWF0ZUltYWdlU2FtcGxlKFZlY3Rvcjx1aW50OF90PiYmIGJncmFEYXRhLCBjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBkZXN0aW5hdGlvblNpemUsIGRvdWJsZSBmcmFtZVJh
dGUpCitSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVh
dGVJbWFnZVNhbXBsZShQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXplJiBk
ZXN0aW5hdGlvblNpemUsIGRvdWJsZSBmcmFtZVJhdGUpCiB7CiAgICAgZW5zdXJlR1N0cmVhbWVy
SW5pdGlhbGl6ZWQoKTsKKyAgICAKKyAgICBhdXRvIHNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7
CisKKyAgICBhdXRvIGRhdGEgPSBwaXhlbEJ1ZmZlci50YWtlRGF0YSgpOworICAgIGF1dG8gc2l6
ZUluQnl0ZXMgPSBkYXRhLT5ieXRlTGVuZ3RoKCk7CisgICAgYXV0byBkYXRhQmFzZUFkZHJlc3Mg
PSBkYXRhLT5kYXRhKCk7CisgICAgYXV0byBsZWFrZWREYXRhID0gJmRhdGEubGVha1JlZigpOwog
Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gYmdyYURhdGEuc2l6ZUluQnl0ZXMoKTsKLSAgICBh
dXRvKiBkYXRhID0gYmdyYURhdGEucmVsZWFzZUJ1ZmZlcigpLmxlYWtQdHIoKTsKLSAgICBhdXRv
IGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwoR1NUX01FTU9S
WV9GTEFHX1JFQURPTkxZLCBkYXRhLCBzaXplSW5CeXRlcywgMCwgc2l6ZUluQnl0ZXMsIGRhdGEs
IFtdKGdwb2ludGVyIGRhdGEpIHsKLSAgICAgICAgV1RGOjpWZWN0b3JNYWxsb2M6OmZyZWUoZGF0
YSk7CisgICAgYXV0byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9m
dWxsKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwgZGF0YUJhc2VBZGRyZXNzLCBzaXplSW5CeXRl
cywgMCwgc2l6ZUluQnl0ZXMsIGxlYWtlZERhdGEsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7Cisg
ICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPih1c2VyRGF0YSktPmRl
cmVmKCk7CiAgICAgfSkpOwogCiAgICAgYXV0byB3aWR0aCA9IHNpemUud2lkdGgoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdT
dHJlYW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCShyZXZpc2lvbiAyNzc3NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3Ry
ZWFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxNiwg
MjAxNywgMjAxOCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICszMCw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGl4ZWxCdWZmZXI7CisKIGNsYXNzIE1l
ZGlhU2FtcGxlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhU2FtcGxlIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGUoR1JlZlB0cjxHc3RTYW1wbGU+
JiYgc2FtcGxlLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0b21T
dHJpbmcmIHRyYWNrSWQpCkBAIC0zNyw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGVGYWtlU2FtcGxlKEdzdENhcHMq
LCBNZWRpYVRpbWUgcHRzLCBNZWRpYVRpbWUgZHRzLCBNZWRpYVRpbWUgZHVyYXRpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCk7
Ci0gICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2VTYW1wbGUo
VmVjdG9yPHVpbnQ4X3Q+JiYsIGNvbnN0IEludFNpemUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgZGVzdGluYXRpb25TaXplID0geyB9LCBkb3VibGUgZnJhbWVSYXRlID0gMSk7CisgICAg
c3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2VTYW1wbGUoUGl4ZWxC
dWZmZXImJiwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXplID0geyB9LCBkb3VibGUgZnJh
bWVSYXRlID0gMSk7CiAKICAgICB2b2lkIGV4dGVuZFRvVGhlQmVnaW5uaW5nKCk7CiAgICAgTWVk
aWFUaW1lIHByZXNlbnRhdGlvblRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3B0czsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lvbiAy
Nzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTIgKzMwNiw2IEBA
IFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2UKICAgICByZXR1cm4geyB9
OwogfQogCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdS
QURhdGEoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHsgfTsK
LX0KLQogT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAkocmV2aXNpb24gMjc3NzYwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxC
dWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxC
dWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCiAgKiBBdXRob3I6IFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGlnYWxpYS5jb20+
CiAgKiBBdXRob3I6IEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI3LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSAiTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDcg
KzY3LDExIEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnUKICAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNhbXBsZSA9IE1l
ZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShpbWFnZUJ1ZmZlci0+dG9CR1JB
RGF0YSgpLCBjYXB0dXJlU2l6ZSgpLCBzaXplKCksIGZyYW1lUmF0ZSgpKTsKKyAgICBhdXRvIHBp
eGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKHsgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6QkdSQTgsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQiB9LCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSk7
CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzYW1w
bGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUoV1RGTW92ZSgqcGl4
ZWxCdWZmZXIpLCBzaXplKCksIGZyYW1lUmF0ZSgpKTsKICAgICBzYW1wbGUtPm9mZnNldFRpbWVz
dGFtcHNCeShNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBf
bXMpLnNlY29uZHMoKSkpOwogICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycyhzYW1w
bGUuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjEtMDUt
MTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJbWFn
ZUJ1ZmZlcjo6dG9CR1JBKCkgYW5kIHJlcGxhY2UgaXRzIHVzZXMgd2l0aCB0aGUgbW9yZSBnZW5l
cmFsIEltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU5NzYKKworICAgICAgICBSZXZpZXdlZCBieSBT
YWlkIEFib3UtSGFsbGF3YS4KKworICAgICAgICBSZW1vdmUgSW1hZ2VCdWZmZXI6OnRvQkdSQSgp
LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0QkdSQURh
dGFGb3JJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFNoYXJlZC9S
ZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNw
bGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZl
cik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
Y29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2Nv
YS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDoKKwogMjAyMS0wNS0xOSAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgImdldCIgcHJl
Zml4IGZyb20gU1FMaXRlU3RhdGVtZW50IG1lbWJlciBmdW5jdGlvbnMgYXMgd2VsbCBhcyBvdXQt
cGFyYW1ldGVycwpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NzYw
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDQsMTYgKzQwNCw2IEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Z2V0RGF0YUZvckkKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKGRhdGEpKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRCR1JBRGF0
YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVp
bnQ4X3Q+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgZGF0YSA9IGltYWdlQnVmZmVyLT50b0JH
UkFEYXRhKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkYXRhKSk7Ci19Ci0KIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsx
MjksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5KCk7CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVy
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3Rvcjx1aW50OF90PiYmKT4mJik7Ci0gICAgdm9pZCBnZXRCR1JBRGF0YUZvckltYWdlQnVmZmVy
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0bWFw
Rm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmJik+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwpJbmRleDog
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3Nzc2MCkK
KysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBAIG1lc3NhZ2Vz
IC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgewogICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxT
dHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEpIFN5bmNocm9ub3VzCi0gICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0U2hhcmVh
YmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlQnVmZmVyLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgLT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUg
aGFuZGxlKSBTeW5jaHJvbm91cwogICAgIENhY2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgQ2FjaGVGb250KElQQzo6Rm9u
dFJlZmVyZW5jZSBmb250KQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJU
cmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NzYwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
UmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSwxMiArOTksNiBAQCBSZWZQdHI8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+
IENHRGlzcGxheUxpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBD
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCiBPcHRpb25hbDxX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXJCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3Rl
TGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjc3
NzYwKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCBw
dWJsaWM6CiAKICAgICAvLyBOT1RFOiBUaGVzZSBhbGwgQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6
QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NzYwKQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTEgKzE1OCw2IEBAIFJl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXAKICAgICByZXR1cm4gbV9iaXRt
YXAtPmNyZWF0ZUltYWdlKCk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRhdGEoKSk7Ci19Ci0KIE9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAko
cmV2aXNpb24gMjc3NzYwKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNyArNTgsNiBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBj
b3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlC
YWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4g
Y29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2lu
Z1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRw
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
b2lkIHB1dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2lu
dCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
IApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgJKHJldmlzaW9uIDI3Nzc2MCkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMTMgKzE2NSw2IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXREYXRhRm9ySW1h
Z2VCdWZmZXIobWltZVR5cGUsIHF1YWxpdHksIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgcmV0dXJuIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5h
dGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdl
YkNvcmU6OkJhY2tpbmdTdG9yZUNvcHk6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJKHJl
dmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDE1
ICsyMTksNiBAQCBWZWN0b3I8dWludDhfdD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByCiAgICAg
cmV0dXJuIGRhdGE7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLXsKLSAgICBzZW5kRGVmZXJyZWRXYWtl
dXBNZXNzYWdlSWZOZWVkZWQoKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRCR1JBRGF0YUZvcklt
YWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpHZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyOjpSZXBseShkYXRhKSwg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgMV9zKTsKLSAgICByZXR1cm4gZGF0YTsKLX0K
LQogUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVy
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewogICAgIHNlbmREZWZl
cnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCShyZXZpc2lvbiAyNzc3NjApCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVz
dGluYXRpb25Db2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCk7CiAgICAgU3RyaW5nIGdl
dERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZv
ckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICBWZWN0b3I8
dWludDhfdD4gZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZp
ZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CiAg
ICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5j
cHAJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDEyICsxMTQsNiBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQot
CiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYsIGNvbnN0IEludFJl
Y3QmKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kLmgJKHJldmlzaW9uIDI3Nzc2MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd1Bh
dHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIHRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdl
dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1
dFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>