<?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>207109</bug_id>
          
          <creation_ts>2020-02-03 00:11:04 -0800</creation_ts>
          <short_desc>Create a new ImageBuffer type for drawing on a DisplayList</short_desc>
          <delta_ts>2020-03-03 17:04:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>207048</dependson>
          <blocked>204955</blocked>
    
    <blocked>207134</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1613874</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 00:11:04 -0800</bug_when>
    <thetext>The drawing context will be the context of a display list. The ImageBuffer operations will ensure the recorded displaylist is replayed back before getting the pixels of the ImageBufferBackend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613876</commentid>
    <comment_count>1</comment_count>
      <attachid>389493</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 00:23:29 -0800</bug_when>
    <thetext>Created attachment 389493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613932</commentid>
    <comment_count>2</comment_count>
      <attachid>389506</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 07:41:37 -0800</bug_when>
    <thetext>Created attachment 389506
Patch  for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620507</commentid>
    <comment_count>3</comment_count>
      <attachid>391136</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-18 20:27:50 -0800</bug_when>
    <thetext>Created attachment 391136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620690</commentid>
    <comment_count>4</comment_count>
      <attachid>391168</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-19 09:08:16 -0800</bug_when>
    <thetext>Created attachment 391168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620752</commentid>
    <comment_count>5</comment_count>
      <attachid>391168</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-02-19 11:20:50 -0800</bug_when>
    <thetext>Comment on attachment 391168
Patch

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

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:49
&gt; +    const DisplayList* replayDisplayList() const { return m_replayDisplayList.get(); }

&quot;replay&quot; sounds like a verb, but it&apos;s just a getter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620799</commentid>
    <comment_count>6</comment_count>
      <attachid>391168</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-19 12:23:17 -0800</bug_when>
    <thetext>Comment on attachment 391168
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:49
&gt;&gt; +    const DisplayList* replayDisplayList() const { return m_replayDisplayList.get(); }
&gt; 
&gt; &quot;replay&quot; sounds like a verb, but it&apos;s just a getter

Should I change it to replayedDisplayList()? The reason I chose this name is the caller is HTMLCanvasElement::replayDisplayListAsText() which is called from Internals::replayDisplayListForElement(). So I think if I am going to change the name of this function, I have to change all the callers with the prefix replayDisplayList to start with replayedDisplayList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620816</commentid>
    <comment_count>7</comment_count>
      <attachid>391168</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-02-19 13:00:22 -0800</bug_when>
    <thetext>Comment on attachment 391168
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:49
&gt;&gt;&gt; +    const DisplayList* replayDisplayList() const { return m_replayDisplayList.get(); }
&gt;&gt; 
&gt;&gt; &quot;replay&quot; sounds like a verb, but it&apos;s just a getter
&gt; 
&gt; Should I change it to replayedDisplayList()? The reason I chose this name is the caller is HTMLCanvasElement::replayDisplayListAsText() which is called from Internals::replayDisplayListForElement(). So I think if I am going to change the name of this function, I have to change all the callers with the prefix replayDisplayList to start with replayedDisplayList.

replayedDisplayList is fine.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:69
&gt; +    void replayDisplayList(GraphicsContext&amp; destContext)
&gt; +    {
&gt; +        if (!m_displayList.itemCount())
&gt; +            return;
&gt; +
&gt; +        Replayer replayer(destContext, m_displayList);
&gt; +        if (m_tracksDisplayListReplay)
&gt; +            m_replayDisplayList = replayer.replay({ }, m_tracksDisplayListReplay);
&gt; +        else
&gt; +            replayer.replay();
&gt; +        m_displayList.clear();
&gt; +    }
&gt; +

Add a .cpp file; I don&apos;t think this should be inline.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:35
&gt; +class ImageBuffer : public ConcreteImageBuffer&lt;BackendType&gt; , public DrawingContext {

Extra space after &gt;

Should DrawingContext be added via composition rather than inheritance?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:58
&gt; +    ~ImageBuffer()
&gt; +    {
&gt; +        flushDrawingContext();
&gt; +    }

Hmm, why flush? No-one can use the buffer after this. If flush triggers any callbacks on |this| we could have a bad time.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:60
&gt; +    DrawingContext* drawingContext() override { return this; }

Weird.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:67
&gt; +    GraphicsContext&amp; context() const override
&gt; +    {
&gt; +        return DrawingContext::context();
&gt; +    }
&gt; +
&gt; +    void flushDrawingContext() override

override -&gt; final?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620820</commentid>
    <comment_count>8</comment_count>
      <attachid>391168</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-19 13:15:49 -0800</bug_when>
    <thetext>Comment on attachment 391168
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:35
&gt;&gt; +class ImageBuffer : public ConcreteImageBuffer&lt;BackendType&gt; , public DrawingContext {
&gt; 
&gt; Extra space after &gt;
&gt; 
&gt; Should DrawingContext be added via composition rather than inheritance?

It can but this will make this class just a bridge to the DrawingContext public methods. I will try doing it.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:58
&gt;&gt; +    }
&gt; 
&gt; Hmm, why flush? No-one can use the buffer after this. If flush triggers any callbacks on |this| we could have a bad time.

I hit an assertion in the destructor of GraphicsContext because ASSERT(m_stack.isEmpty()). This call fixed this assertion. I will try to find a way to flush the GraphicsContext without having to flush the DrawingContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621267</commentid>
    <comment_count>9</comment_count>
      <attachid>391298</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-20 10:01:45 -0800</bug_when>
    <thetext>Created attachment 391298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621282</commentid>
    <comment_count>10</comment_count>
      <attachid>391168</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-20 10:31:28 -0800</bug_when>
    <thetext>Comment on attachment 391168
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:49
&gt;&gt;&gt;&gt; +    const DisplayList* replayDisplayList() const { return m_replayDisplayList.get(); }
&gt;&gt;&gt; 
&gt;&gt;&gt; &quot;replay&quot; sounds like a verb, but it&apos;s just a getter
&gt;&gt; 
&gt;&gt; Should I change it to replayedDisplayList()? The reason I chose this name is the caller is HTMLCanvasElement::replayDisplayListAsText() which is called from Internals::replayDisplayListForElement(). So I think if I am going to change the name of this function, I have to change all the callers with the prefix replayDisplayList to start with replayedDisplayList.
&gt; 
&gt; replayedDisplayList is fine.

Done.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:69
&gt;&gt; +
&gt; 
&gt; Add a .cpp file; I don&apos;t think this should be inline.

Added.

&gt;&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:35
&gt;&gt;&gt; +class ImageBuffer : public ConcreteImageBuffer&lt;BackendType&gt; , public DrawingContext {
&gt;&gt; 
&gt;&gt; Extra space after &gt;
&gt;&gt; 
&gt;&gt; Should DrawingContext be added via composition rather than inheritance?
&gt; 
&gt; It can but this will make this class just a bridge to the DrawingContext public methods. I will try doing it.

Done.

&gt;&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:58
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Hmm, why flush? No-one can use the buffer after this. If flush triggers any callbacks on |this| we could have a bad time.
&gt; 
&gt; I hit an assertion in the destructor of GraphicsContext because ASSERT(m_stack.isEmpty()). This call fixed this assertion. I will try to find a way to flush the GraphicsContext without having to flush the DrawingContext.

I think calling flushDrawingContext() from the destructor is the right sequence. The destructor of HTMLCanvasElement calls setImageBuffer(nullptr) which nullifies m_contextStateSaver. The destructor of GraphicsContextStateSaver calls m_context.restore(). With the DisplayList::ImageBuffer, GraphicsContext::restore() will add a Restore element to the DisplayList. When setImageBuffer() nullifies the m_imageBuffer, DisplayList::ImageBuffer::~ImageBuffer() replays back the Restore item to the ImageBufferBackend which is equivalent to the case of the none DisplayList case.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:60
&gt;&gt; +    DrawingContext* drawingContext() override { return this; }
&gt; 
&gt; Weird.

Fixed by having a member of type DrawingContext.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:67
&gt;&gt; +    void flushDrawingContext() override
&gt; 
&gt; override -&gt; final?

No because this method is going to be overridden by RemoteImageBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621510</commentid>
    <comment_count>11</comment_count>
      <attachid>391298</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-02-20 17:41:50 -0800</bug_when>
    <thetext>Comment on attachment 391298
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:845
&gt; +    if (buffer() &amp;&amp; buffer()-&gt;drawingContext() &amp;&amp; buffer()-&gt;drawingContext()-&gt;replayedDisplayList())
&gt; +        return buffer()-&gt;drawingContext()-&gt;replayedDisplayList()-&gt;asText(flags);

Can we if (!buffer()) return and use a buffer ref for the rest of the function?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h:28
&gt; +#include &quot;AffineTransform.h&quot;

Not needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621664</commentid>
    <comment_count>12</comment_count>
      <attachid>391406</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-21 08:57:16 -0800</bug_when>
    <thetext>Created attachment 391406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621753</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-21 12:25:54 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 391406:

editing/spelling/spellcheck-async-remove-frame.html bug 158401 (authors: morrita@google.com, rniwa@webkit.org, and tony@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621754</commentid>
    <comment_count>14</comment_count>
      <attachid>391406</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-21 12:26:37 -0800</bug_when>
    <thetext>Comment on attachment 391406
Patch

Clearing flags on attachment: 391406

Committed r257156: &lt;https://trac.webkit.org/changeset/257156&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621755</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-21 12:26:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621756</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-21 12:27:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/59678215&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625329</commentid>
    <comment_count>17</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-03 17:04:50 -0800</bug_when>
    <thetext>*** Bug 204803 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389493</attachid>
            <date>2020-02-03 00:23:29 -0800</date>
            <delta_ts>2020-02-18 20:27:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207109-20200203002328.patch</filename>
            <type>text/plain</type>
            <size>382751</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uMWI3MjEyZjUxYjJmMjljODAzOWFhNWFjODY4MjIz
N2YyZGNjY2YzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzOSBAQAorMjAyMC0wMi0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0
ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBlIGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgaW5oZXJpdHMgSW1hZ2VCdWZmZXIgYW5kIERyYXdpbmdDb250ZXh0LiBUaGUg
CisgICAgICAgIGRyYXdpbmcgY29udGV4dCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBkaXNw
bGF5IGxpc3QuIFRoZSBJbWFnZUJ1ZmZlcgorICAgICAgICBvcGVyYXRpb25zIHdpbGwgZW5zdXJl
IHRoZSByZWNvcmRlZCBkaXNwbGF5LWxpc3QgaXMgcmVwbGF5ZWQgYmFjayBiZWZvcmUKKyAgICAg
ICAgZ2V0dGluZyB0aGUgcGl4ZWxzIG9mIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1
YWxJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVh
bEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRleHR1YWxJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6On5EaXNw
bGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nTW9kZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKwor
MjAyMC0wMS0zMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIEFsbG93IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3
aWxsIGJlIHJlLWZhY3RvcmVkIHRvIGRlY291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5k
CisgICAgICAgIHRoZSBiYWNrLWVuZCBkZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VC
dWZmZXIiLgorCisgICAgICAgIEEgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJC
YWNrZW5kIHdpbGwgYWRkZWQgdG8gYWxsb3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBz
cGxpdCB0aGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQK
KyAgICAgICAgZGV0YWlscy4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50
ZXJmYWNlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBi
YWNrLWVuZHMgd2lsbCBiZSBjcmVhdGVkLiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1w
bGF0ZSBjbGFzcyB3aGljaAorICAgICAgICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAg
YWN0IGFzIGEgYnJpZGdlIHRvIHRoZSBjb25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQuCisKKyAgICAgICAgQmFzZWQgb24gdGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbElt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB3aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQg
b2YgY2hlY2tpbmcgdGhlIHJlbmRlcmluZ01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAg
ICAgIGNvZGUgYW5kIGluc3RlYWQgb2YgYW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVz
LCBhbGwgdGhlc2UgZGVjaXNpb25zCisgICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3Jl
dGUgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwg
YWxsb3cgY3JlYXRpbmcgbmV3IHR5cGVzIG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAg
ICAgbmV3IEltYWdlQnVmZmVyQmFja2VuZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRz
IHdpbGwgaW1wbGVtZW50CisgICAgICAgIERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9u
aXplIHJlbW90ZSByZW5kZXJpbmcuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAg
ICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6
CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21h
a2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcDoKKworICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURh
dGEpOgorICAgICAgICBBIGJyaWRnZSBjbGFzcyB0byBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0Nv
bnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50
ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVt
b3ZlIGFsbCB0aGUgYmFjay1lbmQgYW5kIHBsYXRmb3JtcyBkZXRhaWxzLiBVbmlmeSB0aGUgaW50
ZXJmYWNlIHN1Y2gKKyAgICAgICAgdGhhdCBJbWFnZUJ1ZmZlciBkb2VzIG5vdCBpbmNsdWRlIHBy
ZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBBbGwgdGhlIAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZp
Y3Mgd2lsbCBiZSBpbiBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpiYWNrZW5kU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZv
cm1UZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYWNrZW5kQ29sb3JGb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JhY2tlbmRDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICBBIGJh
c2UgY2xhc3Mgd2hpY2ggZGVmaW5lcyBzb21lICBkZWZhdWx0IGJlaGF2aW9ycyBzbyBub3QgYWxs
IHRoZSBwbGF0Zm9ybXMKKyAgICAgICAgaGF2ZSB0byBpbXBsZW1lbnQgdGhlbS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OmRyYXdTaGFkb3dMYXllckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1No
YWRvd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIGFjY2VsZXJhdGVkIENhaXJvIGJh
Y2stZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBbiB1bmFjY2VsZXJhdGVkIENhaXJvIGJhY2st
ZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgQSBDYWlybyBzdXJmYWNlIGJhc2UgY2xhc3Mg
YmFjay1lbmQuCisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb250
ZXh0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5n
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lu
a0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVS
TCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICBBIGJhc2UgY2xhc3MgZm9yIGFsbCBDRyBiYWNrLWVuZHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBbiB1bmFjY2VsZXJhdGVkIENHIGJhY2stZW5kLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBS
ZW1vdmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JH
UkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFu
IElPU3VyZmFjZSBhY2NlbGVyYXRlZCBDRyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9T
dXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50
b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpj
b21wYXRpYmxlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgIFJlbW92ZSBEaXJlY3QyRCBpbXBsZW1lbnRhdGlvbiBmb3Ig
SW1hZ2VCdWZmZXIuIEludHJvZHVjZSAKKyAgICAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQgaW5zdGVhZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldy
YXBwZWRNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKKzIwMjAtMDEt
MjggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0
dXJuIGFuZCB0YWtlIEltYWdlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLS0gQ29tYmluZSBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKCkgYW5kIGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoKQorICAgICAgICAgICBpbiBv
bmUgZnVuY3Rpb24gYW5kIG5hbWUgaXQgZ2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgLS0gTWFr
ZSBnZXRJbWFnZURhdGEoKSByZXR1cm5zIGFuIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBj
YW52YXMgY29kZQorICAgICAgICAgICB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCBV
aW50OENsYW1wZWRBcnJheSBpbnRvIGFuIEltYWdlRGF0YQorICAgICAgICAgICBhbmQgc2VuZCBp
dCB0byBKYXZhU2NyaXB0Q29yZS4KKworICAgICAgICAtLSBSZW5hbWUgSW1hZ2VCdWZmZXI6OnB1
dEJ5dGVBcnJheSgpIHRvIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoKSBhbmQKKyAgICAgICAg
ICAgbWFrZSBpdCB0YWtlIGFuIEltYWdlRGF0YSBzaW5jZSB0aGUgYnl0ZSBhcnJheSBoYXMgdG8g
YmUgYXNzb2NpYXRlZAorICAgICAgICAgICB3aXRoIGFuIEludFNpemUgYW5kIHNlcGFyYXRpbmcg
dGhlbSBkb2VzIG5vdCBsb29rIGEgZ29vZCBkZXNpZ24uCisKKyAgICAgICAgLS0gUmVtb3ZlIHRo
ZSBlbnVtIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLiBBbGwgdGhlIGNhbGxlcnMgbmVl
ZCB0bworICAgICAgICAgICBwYXNzIHJlY3RhbmdsZXMgYW5kIHNpemVzIGluIGxvZ2ljYWwgY29v
cmRpbmF0ZXMuIFRoZSBJbWFnZURhdGEgaGFzIHRvCisgICAgICAgICAgIGJlIHNjYWxlZCBhY2Nv
cmRpbmcgdG8gdGhlIEltZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSgpLiAKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNm
b3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBJ
bWFnZUJ1ZmZlckNhaXJvLmNwcC4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Omdl
bmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgY29udmVydFRv
THVtaW5hbmNlTWFzaygpIGFuZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFyZSBu
b3QgCisgICAgICAgIG92ZXJyaWRkZW4gYnkgYW55IHBsYXRmb3JtLiBTbyBkZWxldGUgZ2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhbmQKKyAgICAgICAgbW92ZSBpdHMgYm9keSB0byBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9u
cyBiZSBwdWJsaWMgYW5kIHJlbW92ZSB0aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxVbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oOgorICAgICAgICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5kIHNpemVzIGhh
dmUgdG8gYmUgcGFzc2VkIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRvCisgICAgICAgIGRlYWwg
d2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdlIG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0aGUgcmVzb2x1
dGlvblNjYWxlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRl
cnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgVGhpcyB3YXMgdGhlIG9u
bHkgcGxhY2Ugd2hpY2ggd2FzIHBhc3NpbmcgYSByZWN0YW5nbGUgaW4gYSB0aGUgYmFjay1lbmQK
KyAgICAgICAgY29vcmRpbmF0ZXMgYWxvbmcgd2l0aCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lz
dGVtLiBJbnN0ZWFkIHdlIGNhbiBwYXNzCisgICAgICAgIHRoZSByZWN0YW5nbGUgaW4gbG9naWNh
bCBjb29yZGluYXRlcyBhbmQgdGhlbiB1c2UgSW1hZ2VEYXRhOjpzaXplKCkgc2luY2UKKyAgICAg
ICAgaXQgbXVzdCBiZSBzY2FsZWQgd2l0aCByZXNvbHV0aW9uU2NhbGUoKSB3aGVuIHRoZSBJbWFn
ZURhdGEgaXMgY3JlYXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11
bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVh
dGVSYXN0ZXJTaGFwZSk6CisKIDIwMjAtMDEtMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgbWFjQ2F0YWx5c3Q6IFRyaXBsZSBjbGlja2luZyB0byBz
ZWxlY3QgYSBzZW50ZW5jZSByZXN1bHRzIGluIGFuIGVtcHR5IHNlbGVjdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCBhOGMwY2FmNWUxZGFlMDBmNDIzNGZjYzM5MzdmMGNkYzAxZWU0NGE4Li5iYTc4MWM3YTBkYmZk
MzgwYjg1NDVmNTcyNTBlYjNhYWFkYjg1YjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDIwLTAxLTMxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgZGlmZmVyZW50IGJhY2stZW5kcyBmb3IgSW1hZ2VCdWZmZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzA0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNl
bGVjdGlvblNuYXBzaG90IGNvbnN0KToKKwogMjAyMC0wMS0yOCAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRhbHlzdDogVHJpcGxlIGNsaWNr
aW5nIHRvIHNlbGVjdCBhIHNlbnRlbmNlIHJlc3VsdHMgaW4gYW4gZW1wdHkgc2VsZWN0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQppbmRleCA1NGRiNzE2YWM4N2NhYzRkMDEzMGRkOGE3OTU1NGQwZDY3NTY5
ZTY5Li5iYzRiMGNiNTMwNzU1MThkMDIzOTIwMTZkNzczNjcyYmEzZDgxZDBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKQEAgLTEwNDIsNiArMTA0Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVm
ZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmgKQEAgLTEwOTMsNyArMTA5NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oCkBAIC0xMTI2LDYg
KzExMjcsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVz
b3VyY2VMb2FkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IGY3MTI5MjdjYzkxOGYzYWIw
ZmU3MDhhOGFjMDE3YmQwZjNjZjk0MGQuLjVkMTc3NDNlZDM4NDMwMTFmYTg2Y2U1MTFiZTkyOTMz
MDk5MjkyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtODMsOCAr
ODMsNyBAQCBpZiAoJHtVU0VfRElSRUNUMkR9KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NMYXllckRpcmVjdDJELmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlRGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9OYXRp
dmVJbWFnZURpcmVjdDJELmNwcApAQCAtMTMyLDggKzEzMSw5IEBAIGVsc2UgKCkKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNl
Q0dXaW4uY3BwCkBAIC0xNzYsNyArMTc2LDkgQEAgZWxzZSAoKQogCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUZUVy5jbWFrZQppbmRleCA5YWI0Njg3MzllZjExZmY2MDliOTYyOTI4OGJiMDFiMTZk
YTcwMmFhLi5mNGI5YjdmODg2NmIxMjQxYTg1NTc5YjJlNjFmN2JhZTU0M2Q4NzVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtODQsOCArODQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlV2luLmNw
cApAQCAtMjAxLDcgKzIwMCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKaW5kZXggYWVjMzIwNjdkM2U2ZjJmNDlkMTkzZTBiMWE2NmJiMDk1OTEx
NjBjOC4uMTIyMTVhYjFkMTBmYmRkOGFlY2EyNjdmNzA4NDYzNzM1YmY1ZmVkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKQEAgLTI5MSw4ICsyOTEsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjcsNyArNTI5LDkgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJm
YWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElS
ZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDRmMzA3MTU5YjdlZDgwNmVi
ODE5NTJiYmE0NWY1YzA3YThkYzkzZWIuLjhhZjcwMWM3NzdmZTE1MmUyMzE2Y2E1MDAwNDNhZDk3
MWFjYmYxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMTksNyArMTE5LDYgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNj
cmVlbkNvbnRyb2xsZXJDbGllbnQuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2luZG93
c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVG
dWxsc2NyZWVuV2luZG93LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2hhcmVkR0RJT2Jq
ZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNjQxZDZmZDQzNWUzYzNhZTA3ZjBiMDA3Mjg4NTJhZGI5
YTNjYjc1ZS4uZTA3NjRmYmY0YWIzM2ZiMGY0ZGQ3Y2YxMWM4ODYwNWFkM2EyNDc0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTE4NjUsNiArMTg2NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGls
aXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVj
b2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDRkZTc1ZGY4
ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYuLjc2NjFlMmI5YWQyYjM5MThhNTNiMTY3
ZTQ3YmMxNDUzYWU2ZmM5MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjkxLDggKzI5
MSw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNw
cAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzU4N2NlNTYyNzQ1NzUwYWE1YmQ5
NGM5MTAwODczYjE3OWQ0ZTJiLi4wZDU5MWM4MmFkNDFhYzUzMTNiOTA5NmJlOWMwMWQwNTIwNDk3
ZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8q
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyogV2Vi
RXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBEODI1
MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRX
cmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdl
QnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5MjEz
Q0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYx
MDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyog
SlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQy
MTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5
cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC04MzMsMTcgKzgzMSwxNyBAQAogCQkyREFDQjlFOTIz
NzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8q
IEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9w
ZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCAqLzsgfTsK
IAkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVF
NDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUg
LyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRERFMUNFMDFGNTc0QUQxMDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3Lmgg
Ki87IH07Ci0JCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDREUxRjU3NEFB
QjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggKi87IH07Ci0JCTJEREUxQ0Y4MUY1NzRDMzkwMEQx
QTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTYxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5Q2FwYWJpbGl0aWVzLmggKi87IH07Ci0JCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAv
KiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRERFMUNFODFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5o
ICovOyB9OwotCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJl
YXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRE
RTFDRUExRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCAqLzsgfTsK
LQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VDMUY1NzRCRkYwMEQxQTM2NSAv
KiBKU1ZSRXllLmggKi87IH07Ci0JCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZSRXll
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkRERTFDRUUxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmggKi87IH07
Ci0JCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGMDFGNTc0QkZGMDBE
MUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oICovOyB9OwotCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEz
NjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkRERTFDRjIxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCAq
LzsgfTsKLQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGNDFGNTc0QkZGMDBE
MUEzNjUgLyogSlNWUlBvc2UuaCAqLzsgfTsKLQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8q
IEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEREUxQ0Y2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0
ZXJzLmggKi87IH07CisJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0U0MUY1NzRBRTkwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJ
CTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZDMUY1NzRD
RUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IH07CisJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAy
MUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IH07CisJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2
NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJE
REUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IH07CiAJCTJERTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJERTcwMDIyMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JN
YWMuaCAqLzsgfTsKIAkJMkRGNTEyQ0UxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRGNTEyQ0MxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29t
bWFuZC5oICovOyB9OwogCQkyREZBNDg4RjFEQjU0MUQwMDAzNjJCOTkgLyogQnVmZmVyU291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREZBNDg4
RTFEQjU0MUMyMDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxNTEsNiArMjE0OSw3IEBACiAJCTcyNEVF
NTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0Yy
NUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBD
QzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYy
M0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1
M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAw
RUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENF
MEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2
ZW50LmggKi87IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNF
QzcwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNTgxLDcg
KzI1ODAsNiBAQAogCQk4QUY0RTU1QzExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1p
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRF
NTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QkQz
N0E2ODIwMUJCMzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEJEMzdBNjcyMDFCQjM5QzAwMTE3
MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk4RTRDOTZERDFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRj
aFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi87IH07Ci0J
CThFNjIwRTgxMjBFRTYwMjQwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU2MjBFODAyMEVF
NUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEVDNkM5NjMyMDFBMjUxNjAwRkJG
QTUzIC8qIEdhcExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCThGNjc1NjFCMTI4OEIx
N0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkwMDE3
NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAzNDc4MDA2
NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwpAQCAtNjU1OSw5ICs2NTU3
LDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2
ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgy
NTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2
NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTgzLDYgKzk1NzgsOCBAQAogCQk3
MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFtZVJh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMzk0MDVFMjNFNUY1M0YwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNjAyM0U1
RjU2NzAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3
RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NjA1LDYgKzk2MDIsMTYgQEAKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8q
IEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4
MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E3MjNFMTcz
MjgwMDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUEy
M0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FEMjNFMUU1
NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyog
SlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDcsOCArMTA1NTQsNiBAQAogCQk4
RTMzQ0Q5MzIwMUEyOUMxMDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhcExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCThFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUw
IC8qIEpTRmV0Y2hSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ZldGNoUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEU2MjBFN0Uy
MEVFNUZFMjAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZSUGxhdGZvcm1EaXNwbGF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1E
aXNwbGF5Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSUGxhdGZv
cm1EaXNwbGF5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFQzZDOTYx
MjAxQTI1MDEwMEZCRkE1MyAvKiBHYXBMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR2FwTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGNjc1
NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV2ZW50UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OEY5MzREODMxMTg5RjFFRTAwNTA4RDVEIC8qIEpTRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjY3OCw3ICsxMjY4Myw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAv
KiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1
OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2
QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjkxLDYgKzE2Njk1LDcgQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJ
CQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzIz
OTQwNjAyM0U1RjU2NzAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywK
IAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8s
CiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywK
IAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAg
Ki8sCkBAIC0yNDg0MSw5ICsyNDg0NiwxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNB
MCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVCMDBF
NDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlCMkEx
MEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIy
N0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQkyMkJE
OUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJB
QzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovLAor
CQkJCTcyQkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzJCQUMzQUEyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMzQUIyM0UxRTU0NDAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkzMjE4
NzQwNjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlDRDNF
MjFEQjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAogCQkJ
CTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBAIC0y
NDkzNSwxMiArMjQ5NDMsMTQgQEAKIAkJCQkwRkU2Qzc2QzFGQkZCN0E2MDAyNUMwNTMgLyogQ29s
b3JVdGlsaXRpZXMuaCAqLywKIAkJCQlDMkY0RTc4ODFFNDVBRURGMDA2RDcxMDUgLyogQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcCAqLywKIAkJCQlDMkY0RTc4OTFFNDVBRURGMDA2RDcxMDUgLyog
Q29tcGxleFRleHRDb250cm9sbGVyLmggKi8sCisJCQkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFD
IC8qIENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2
MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYw
Q0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJNEI3QUU0
OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLAogCQkJCTRCN0FF
NDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQx
MDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0ND
Q0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MjM5NDA1RTIzRTVGNTNG
MDBFM0I1NDUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0
NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYy
RDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQky
RDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNw
cCAqLywKQEAgLTI1MDMyLDcgKzI1MDQyLDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0
QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1
NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFn
ZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIElt
YWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdl
RGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1l
LmNwcCAqLywKQEAgLTI1MDg5LDYgKzI1MTAwLDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAy
MEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0
OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0
dGVybi5oICovLAorCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5
ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRm
b3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTgyNCw3ICsyNTgzNiw2IEBACiAJCQkJNjU2Qjg0RDcw
QUVBMUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8sCiAJCQkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEy
MDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLywK
LQkJCQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMgLyogdnIgKi8sCiAJCQkJREZEQjkxMkNGOEU4
OEE2REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5oICovLAogCQkJCTQ5QUUyRDk0MTM0
RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKIAkJCQk0OUFFMkQ5NTEz
NEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovLApAQCAtMjg5MDgsNiArMjg5
MTksMTcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0NDMzMTIyM0VDODU0MDBGMTJGRjcgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIChudWxs
KSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGlu
IEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIChudWxsKSBpbiBI
ZWFkZXJzICovLAorCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLywKKwkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRl
cnMgKi8sCisJCQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJz
ICovLAorCQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LywKKwkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8s
CisJCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAor
CQkJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJ
CQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdp
bmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI2Miw4ICszMDI4NCw3IEBACiAJCQkJN0M3OTAz
QjMxRjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgx
OEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdG
MTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIw
MDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTE2OCwxNyArMzExODksNiBAQAogCQkJCUJFOEVGMDRE
MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NkU3OTE0OTFGOTdFMDFBMDAxOTk3MzkgLyogSlNWaXNpYmlsaXR5U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc3NzlCRDk2MUYzMjI0NkEwMEMyMTQxNyAvKiBKU1Zpc3VhbFZpZXdwb3J0
LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyogSlNWUkRp
c3BsYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiBK
U1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkExRjU3
NEMzRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJE
REUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUgLyogSlNWUkV5ZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogSlNW
UkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEz
NjUgLyogSlNWUkZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDQxRjU3NEQw
NTAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDA2
MUY1NzREMEEwMEQxQTM2NSAvKiBKU1ZSUG9zZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFE
MDgxRjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJFMjA1MDgyMThBNDYwQzMwMDgwNjQ3RSAvKiBKU1ZUVEN1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0FGOUIyMEQxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QUY5QjIwRjE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4Mjc3MjY2ZGRlYzc1MjA0MTIx
MmI1ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3ZTg1OTZkNzU4ZjZmNWUyN2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAg
ICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgp
OwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdo
dCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBs
b2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNv
ZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJh
eUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLT5wb3NzaWJs
eVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7CiAgICAgICAgICAg
ICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGltYWdlRGF0
YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAs
IGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkgewor
ICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZShXVEZNb3Zl
KGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGlm
ICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6
Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgYXJyYXkucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgICAgICBmYWls
KCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJl
c29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWls
KCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAg
YnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRS
ZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAg
ICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS0+c2l6ZSgp
IH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1v
dmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICBy
ZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKaW5k
ZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2MTQ1ZC4uMTYyYjI5NDJmNjY2
YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2Uu
Y3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDYW52
YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWYKICAgICAgICAg
cmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBXVEZNb3ZlKGJ1ZmZl
cikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1fc2l6ZSAhPSBtX2ltYWdl
QnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1h
Z2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6ZSA9IG1faW1hZ2VCdWZmZXIt
PmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNNZW1vcnlDb3N0ID0gbV9pbWFn
ZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBtZW1vcnlDb3N0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGY1ZTc2NTAwNjlhNmQ4
NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLjQyYTY1ZDNhOWU3NTQ0NTQ0MmU2NTlmOGM5YTVh
NzVkMmU4Mzk1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRl
ICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgi
CisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZh
c0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2Nv
bnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQo
KS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxp
c3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2Nv
bnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRl
ckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4K
ICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MjIsMzkgKzgy
MCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IElu
dFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAg
ICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNw
bGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxp
c3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9j
b250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0
KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5
TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhUTUxD
YW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3Mg
ZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9j
b250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYg
KGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4g
YnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVw
bGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25z
dAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZm
ZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUsMjIgQEAgdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8
fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQogICAgIGF1dG8gaG9zdFdp
bmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/
IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAg
ICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24g
Y2FudmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdp
bmdFbmFibGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlm
ICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxk
QWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVuZGVy
aW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNw
YWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5z
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKwog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkg
ewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNj
ZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMyNi4uNDIx
MzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAKICAg
ICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggZDQ5NDcxMjA4MzIzMTBjN2MwZDdiZWYxYzg3
OWRhM2ZmYjI5M2YwYS4uZDJiOGRiODE0ZDMxMzQxODY0MTJmYTVkOGFlYWY3YTIzODBiMTI4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTIxNTgsMTEgKzIxNTgsNiBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRl
SW1hZ2VEYXRhKGZsbwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwg
ZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1h
Z2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7Ci19Ci0K
LUV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7
CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNh
bnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYs
OCArMjE5MSw4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7
CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0ZW0pOwotICAgIGlmICghYnl0
ZUFycmF5KSB7CisgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3QpOworICAg
IGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7
CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1h
Z2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2FzICIpOwogICAgICAgICBjb25z
b2xlTWVzc2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53aWR0aCgpKTsKQEAgLTIyMDgs
NyArMjIwMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJldHVybiBJbWFnZURh
dGE6OmNyZWF0ZShpbWFnZURhdGFSZWN0LnNpemUoKSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxs
KCkpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0
IGR5KQpAQCAtMjIxNywxMSArMjIxMiw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0
YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwg
ZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCi17Ci0gICAgcHV0SW1hZ2VEYXRh
KGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0
eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdl
QnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9h
dCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0
IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXNCYXNlKCku
YnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIyMzUsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEs
IEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+
KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwot
ICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0
ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtID8gYnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGRlc3RSZWN0LmludGVy
c2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+bG9naWNhbFNpemUoKSkpOwogICAgIGlm
IChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjQzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgo
KSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdo
dCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0p
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsK
IAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25v
cmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAz
ZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVlOTFkLi5kYjNmYWM4YjA4YjcwM2Jk
NTQxZmM3MmY0ZDMxYmQ1MTc3MzUwNGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0zNzEsOSAr
MzcxLDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmdWxsQ2Fu
dmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdl
RGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQg
c3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OwotICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBk
eCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRo
LCBmbG9hdCBkaXJ0eUhlaWdodCk7Ci0KICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4
NzI5MDljYjcxZjc4MjhlZjg1YmJjLi5lNjBjZGUxNGQxYTdjNmMzMDQyODkwNzUwN2M2MTBiZTU1
ZGUxYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAt
Mzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAg
YXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3Vy
Y2VSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0Rh
dGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
YWlyby5jbWFrZQppbmRleCA5YTNhOGJmOTQzYWQ2NTg2ZGE0M2NlZDBkYTdlNjNmMDU1YWI5YTVk
Li4xMmEyZDc0ZmZiZThmY2M3M2YwNjhiYmZjYmEwMDU0MDc3NTcxNzcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMsNyArMTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
aAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggZjkwZDI0
NmVjNTliNGY4YThlMTM4YjcyMjQwY2YyMDI1ODMxOTJjNC4uNmZhNGZmZTE0NjBlYTcxMzgyMWJj
YTM2MjI2ZDI2YTk3ZTVkOTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0CkBAIC0zMCw3ICszMCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWly
by5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAotcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDQ4MjI0NGE0ZjJiZGNlZGU3Yzg3NGNkMWI1
MGVhOTE0YjE0OTlhMjIuLmRkZDVjNmM3MzQ1YTJjMGQ4YmQ5YThlNGVmYjRlM2NiOTk1ODdjNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKQEAgLTE2NSwxMiArMTY1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMKICAgICAgICAg
cmV0dXJuIGltYWdlOwogCiAgICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLCByZWN0LnNpemUoKSwgcmVjdCwgcmVjdCwgeyBvcmllbnRhdGlvbiB9KTsKLQotI2lmIFVT
RShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIHJldHVy
biBidWZmZXItPm5hdGl2ZUltYWdlKCk7Ci0jZW5kaWYKIH0KIAogI2lmIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdl
QnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU4ZGRlNzIzZDM3NTIxMDVkOGFiNDE1MDA2NGM1ZDZhZDBl
YWNhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIENvbnRleHR1YWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJU
eXBlID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNr
ZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFj
a2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBDb250ZXh0dWFsSW1hZ2VC
dWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7Cisg
ICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVy
VHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29udGV4dHVhbEltYWdlQnVmZmVyKHN0
ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1fYmFja2Vu
ZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBDb250ZXh0dWFsSW1hZ2VC
dWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNr
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
YmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAg
fQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2JhY2tlbmQtPmJhc2VUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNh
bFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCk7
IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9i
YWNrZW5kLT5iYWNrZW5kU2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKTsgfQorCisg
ICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQt
Pm1lbW9yeUNvc3QoKTsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4dGVybmFsTWVtb3J5Q29zdCgpOyB9CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Y29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJl
aGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigq
dGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5j
b3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKworICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05h
dGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAg
IH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFj
a2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKworICAgIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsK
KyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNv
bG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOworICAgIH0KKworICAgIFN0
cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigq
dGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YVVS
TChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4
dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkp
OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRo
aXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRh
KCk7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgIH0KKworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7
CisgICAgICAgIG1fYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEs
IHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LT5wbGF0Zm9ybUxheWVyKCk7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4
dCwgdGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBs
eUFscGhhLCBmbGlwWSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBl
PiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWRiMGYwZGZiYzQ3Y2ExMmQ3M2M0Mzc4NmVhMWE4OTc5ZmQwYjU0NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29u
dGV4dHVhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBDb250ZXh0dWFsSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dCB7CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVy
Ojp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1
cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQsIHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5k
LCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZUNvbnRleHR1YWxJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgfkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIoKQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgIH0KKworICAg
IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7
IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxh
eURpc3BsYXlMaXN0KEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDIwYjk4MTBjMjkxNDFlNDczZTZh
ODg4YmM4MGMxNDE3YWVhYzJmYWYuLmNhMzk4MDE3YjA1NDJmMmFjMGJhYjg1NGZhMzdlMzAzNGRm
MGNiNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NCArMjgsMTA2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owog
c3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1h
eENsYW1wZWRMZW5ndGg7CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZl
cik7Ci0KIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2Vzcykp
OwotICAgIGlmICghc3VjY2VzcykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7
CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxp
c3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIg
PSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIg
PSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgor
ICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKHNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2NhbGVkU2l6ZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZh
Y3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CisKIH0K
IAotI2lmIFVTRShESVJFQ1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcg
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdN
b2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNj
ZXNzKQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAx
LCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
c2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKIAogYm9vbCBJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAg
IGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJu
IGZsb29yZihzaXplLmhlaWdodCgpKSAqIGZsb29yZihzaXplLndpZHRoKCkpID4gTWF4Q2xhbXBl
ZEFyZWE7CiB9CiAKQEAgLTEwNSw5MSArMTY3LDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3Qo
cmVjdC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVT
RShDRykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JB
RGF0YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBi
YWNrZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKSkKLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29s
b3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAg
aWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50
Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6
OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xv
clNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0g
ICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7
Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChj
b2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5Owot
ICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJS
Z2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdC
KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNl
UmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29s
b3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAg
YXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAg
ICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0K
LQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWND
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50
UG9pbnQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJy
YXkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNl
dCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkg
ewotICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsg
Myk7Ci0gICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50
OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhf
dCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAgIAot
ICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3
MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBp
eGVsT2Zmc2V0ICsgMywgbHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxB
cnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VS
ZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBz
cGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVy
ZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0jaWYg
IVVTRShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhl
IGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28g
d2UgbmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVu
aXQuCisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3Rv
cigpKTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDYsNTAg
KzE4OSwxOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5
UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogICAgIHJldHVybiBidWZmZXI7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIpCiB7Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29u
dGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNv
bnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwot
ICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3Jl
YXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0
LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgot
fQotCi1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBF
bmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2Fs
aW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBp
eGVsIHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQu
c2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUlt
YWdlKCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8g
bWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFk
LCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVy
ZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVj
YXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBp
bnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAK
LXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3Vt
aW5nKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA3Yjc3MmEyZjJkOGY2ZTc1NzdlYWZjNmRiMjI5MzA2
YjdjZmVkZjliLi4zNTUxZjQ1ZjgyYmViYTM3ZjI5NzFhMDk1MDdkMmI1ZjJmNTJkNTlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEs
NiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTI3LDE2MCArMjcsODMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCi0j
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNs
dWRlICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLSNp
bmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBv
aW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0
b3JlQ29weSB7Ci0gICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQg
ZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8v
IFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3Mg
UHJlc2VydmVSZXNvbHV0aW9uIHsKLSAgICBObywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKK2NsYXNzIERyYXdpbmdDb250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZl
ciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNP
UkVfRVhQT1JUKTsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAg
ZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51
bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBD
b2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENv
bG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQot
ICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0
IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21w
YXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJh
d2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJT
aXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGlj
aCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBi
b29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29s
IHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwor
ICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAg
c3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUm
IHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7CisgICAgc3RhdGljIElu
dFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZm
ZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJh
Y2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQo
KSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0Nv
bnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKSB7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50
U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0ID0gMDsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBOYXRp
dmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7
Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdU
Rjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEp
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0jaWYgVVNFKENBSVJPKQot
ICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0
dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2Ug
ZHN0Q29sb3JTcGFjZSkgPSAwOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAg
dm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JT
cGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlm
Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RG
OjpudWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0geyB9KSA9IDA7CiAKICAgICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2Yg
dGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAg
IC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdO
RURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29s
LCBib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBi
b29sLCBib29sKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgPSAwOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdo
ZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwg
bWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29u
c3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3Qg
RmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9h
dFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0jaWYgVVNF
KENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUg
aW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNy
b3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVT
RShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0
cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCitwcm90ZWN0
ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAgICAgCi0gICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgaW5saW5lIHZvaWQgZ2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBj
bGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFn
ZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZy
aWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFn
ZTsKLQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUg
bV9zaXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRp
b25TY2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2Vz
cyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtu
b3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwot
I2lmIFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBi
b29sJiBzdWNjZXNzKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0lu
dG9OYXRpdmVJbWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ2M2FhNWRhNjI2MjUzYjUxZDkyZmVkODFhYmNhYmQyNzQzZGVl
ODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1f
YmFja2VuZFNpemUoYmFja2VuZFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0
aW9uU2NhbGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6
ZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRT
aXplID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNv
bHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1w
dHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW50U2l6ZShzY2FsZWRTaXpl
KTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9
IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUud2lkdGgo
KSk7CisgICAgaWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYmFja2VuZFNpemUuaGVpZ2h0KCkpICog
Ynl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1
cm4gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3Qo
KSk7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhl
bE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQg
Kz0gNCkgeworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAg
dWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAg
ICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisKKyAg
ICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIx
KSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhl
bE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCks
IEludFBvaW50Ojp6ZXJvKCkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjp0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVf
dCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVf
dCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhl
bHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tl
bmRDb2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVz
dEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3Jj
UGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQor
eworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhKSB7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gMDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29s
b3JGb3JtYXQpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JB
IDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhl
bFsxXSA9IHNyY1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAg
IGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29w
eVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICBpZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlw
bGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmND
b2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0g
KHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3Jj
UGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhl
bFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+
IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwor
ICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0
UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNd
ID0gYWxwaGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9Q
cmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBz
cmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwp
Cit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwg
YWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RD
b2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
YWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4g
UkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNvcHlGdW5j
dG9yKShDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+
CitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
eCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Io
c3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4
XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7Cisg
ICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NF
UlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3Jj
Um93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFn
ZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4o
c3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQs
IGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVk
VG9QcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
IGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisK
K1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2
b2lkKiBkYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2Vu
ZENvb3JkaW5hdGVzKHNyY1JlY3QpOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFpbWFnZURhdGEgfHwgIWlt
YWdlRGF0YS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qg
c3JjUmVjdENsaXBwZWQgPSAgaW50ZXJzZWN0aW9uKGJhY2tlbmRSZWN0KCksIHNyY1JlY3RTY2Fs
ZWQpOworICAgIEludFJlY3QgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RD
bGlwcGVkLnNpemUoKSB9OworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAg
ICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RT
Y2FsZWQueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkp
OworCisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAg
ICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnplcm9GaWxsKCk7CisKKyAgICB1bnNpZ25lZCBkZXN0
Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JG
b3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCB2b2lkKiBkYXRhKQoreworICAgIEludFJlY3Qgc3JjUmVjdFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQ
b2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2ludCk7CisKKyAgICBJbnRS
ZWN0IHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKHsgSW50UG9pbnQ6Onplcm8oKSwgaW1h
Z2VEYXRhLnNpemUoKSB9LCBzcmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0g
c3JjUmVjdENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludFNjYWxlZCk7CisK
KyAgICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRl
c3RSZWN0LngoKSAtIHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVk
LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNj
YWxlZC55KCkpOworCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOworICAg
IHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3Mg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IDQgKiBpbWFnZURhdGEuc2l6ZSgpLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93
cyA9IGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5
dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RS
ZWN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWEzYjYzY2RmNzE3OGFiYjFiNWEzODgyOWM1NWUxMjhlZGI3YTI0YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJJbWFnZVBhaW50aW5n
T3B0aW9ucy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOwor
Y2xhc3MgSW1hZ2VEYXRhOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNr
aW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUg
Y29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBh
ZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVp
bnQ4X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQg
OiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2NsYXNzIEltYWdlQnVmZmVy
QmFja2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZm
ZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNp
emUgY2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZFNpemU7IH0KKyAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQor
ICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsg
fQorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29z
dCgpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsg
fQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNw
YWNlKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50KSA9IDA7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2Jq
ZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJv
dGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3coKSBjb25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS53aWR0aCgpOyB9CisgICAg
dmlydHVhbCBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBD
b2xvckZvcm1hdDo6UkdCQTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHRv
QmFja2VuZENvb3JkaW5hdGVzKFQgdCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPFQsIEludFBvaW50Pjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIElu
dFNpemU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50UmVjdD46OnZhbHVlKTsKKyAgICAg
ICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgICAgICB0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgSW50UmVjdCBs
b2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9s
b2dpY2FsU2l6ZSk7IH07CisgICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9iYWNrZW5kU2l6ZSk7IH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNv
bnN0IEludFNpemUmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCB2b2lkKiBkYXRhKTsKKworICAgIEludFNpemUgbV9sb2dp
Y2FsU2l6ZTsKKyAgICBJbnRTaXplIG1fYmFja2VuZFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0
aW9uU2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJhNWM4ODVl
NWMxMDI0NDdjNzNhMTJmMWQ2ZmIzMmI1ZDM5OTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0Uo
RElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVT
RShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjQzYTg3MTljZTQ5ZDE3NzZiOTc1M2Q1ZDcyNjA4NzdmMDUxNDM2
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29u
dGV4dHVhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
IgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgi
CisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVT
RShDRykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxh
dGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDsK
KyNlbmRpZgorCisjaWYgSEFWRShJT1NVUkZBQ0UpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2VsaWYg
VVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQordXNpbmcgUGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJh
Y2tlbmQgPSBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYK
KwordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0
Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2Nl
bGVyYXRlZEltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdl
QnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKaW5kZXggNjlkOGFlODFj
ODQ4YjEwZTZmMmQwN2E3ODliMTZjMzMzZGMyM2NiNC4uNWMyMjRlOGY0NWM0OWE0ZjJkZmMzNmU0
M2VhOGIyZDVmMTJmZjViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nTW9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlbmRlcmluZ01vZGUuaApAQCAtMzAsNiArMzAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsKICAgICBBY2NlbGVyYXRlZCwK
ICAgICBVbmFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlz
cGxheUxpc3QsCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5
NDYyYjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLjNjZmNlNzI5NTQyMDlkMzAzYTlmNzI0MzJmYmI0
YjYzOWQ0YjQyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00NDksNyAr
NDUwLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIEludFNpemUgYnVm
ZmVyU2l6ZSA9IGxheWVySW1hZ2UuaW50ZXJuYWxTaXplKCk7CisgICAgSW50U2l6ZSBidWZmZXJT
aXplID0gbGF5ZXJJbWFnZS5iYWNrZW5kU2l6ZSgpOwogICAgIGlmIChidWZmZXJTaXplICE9IGxh
eWVyU2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xpcFRvSW1hZ2VCdWZm
ZXIoKSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIsCiAgICAgICAgIC8v
IGJ1dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAgdG8gdGhlIGZpbGxl
ZCBwYXJ0IGZpcnN0LgpAQCAtODg0LDEyICs4ODUsMTMgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVy
U2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1w
bGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0
ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFn
ZS5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBi
bHVyUmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJs
dXJMYXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0
LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwg
Ymx1clJlY3QsIHsgfSk7CisgICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRh
dGEoKTsKKyAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVj
dC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEs
IGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZm
ZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDM5NmNmMGJlMDcwNWE2NmE0ZmY0ZjJjYTU3MTYwYzc1
MWRmNzA3ODUuLmIyMzY1NDEzZmRlMzc3M2I3MzIxODk5MDBiNWY2ZTFlOTYyZDgxZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIGVudW0gUGF0aERyYXdpbmdTdHls
ZSB7CiAKIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxv
YXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0U2l6ZSYgbGF5ZXJTaXplLCBjb25zdCBT
aGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVy
SW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdl
LmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05h
dGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KHJvdW5k
ZWRJbnRQb2ludChsYXllck9yaWdpbiksIGxheWVyU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGxheWVyU2l6ZSksIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwg
c2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE4
Myw3ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdQogLy8gRklYTUU6IFRoaXMgaXMg
bW9zdGx5IHNhbWUgYXMgZHJhd1NoYWRvd0xheWVyQnVmZmVyLCBzbyB3ZSBzaG91bGQgbWVyZ2Ug
dHdvLgogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0ltYWdlKFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBz
aGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJ
bWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxh
dGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBzaGFkb3dT
dGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwg
U2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lk
IGZpbGxTaGFkb3dCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
SW1hZ2VCdWZmZXImCiB7CiAgICAgc2F2ZShwbGF0Zm9ybUNvbnRleHQpOwogCi0gICAgaWYgKGF1
dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJm
YWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQog
ICAgICAgICBjbGlwVG9JbWFnZUJ1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCks
IEZsb2F0UmVjdChsYXllck9yaWdpbiwgZXhwYW5kZWRJbnRTaXplKGxheWVyU2l6ZSkpKTsKIAog
ICAgIEZpbGxTb3VyY2UgZmlsbFNvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApp
bmRleCA5YjAyNWUxNDc2NzM1MmUxNGFkNDhmODY3YjA0NTg1ZWU4MDM0MTM0Li40ZTFiZjJiNDM2
N2YzNDM1OWQ4NTRlYjc4YzIyMDJkZjU3YjI3NDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICB9
CiAKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVy
LmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcigqcGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RS
ZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggYmNh
MjlkZmI2OTQ5ODZlODc3NDY2YjhmMDc3ODZmYmQxYmYzOTQ1Ni4uY2Q4NjVhYWEyNjAxOWZmYzc1
YWVlZTkyNjIwMmNmMTEyNTk1YmM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uY3BwCkBAIC00MTQsNyArNDE0LDcgQEAgSW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNsaXBCb3VuZHMoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRl
eHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJiNWM2NDgyYjZlMWQzZjI4YWM0NzllYTdj
NWQzMWIxZDMzNzkwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNs
dWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJy
YXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdM
Q29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkK
LSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVk
ZSA8RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0j
aWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdM
X0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUm
IHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250
ZXh0KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJp
bmdNb2RlKQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0g
ICAgLCBtX3RleHR1cmUoMCkKLSNlbmRpZgotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdN
b2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0g
ICAgICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMp
KTsKLSNlbHNlCi0gICAgICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19
Ci0KLUltYWdlQnVmZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVu
ZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlk
YXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250
ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWRE
aXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAo
bV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21w
b3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQp
Ci0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0j
ZW5kaWYKLX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNvbXBvc2l0
b3JCdWZmZXIoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9z
aXRvclRleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3Np
dG9yVGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQs
IDEpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MCk7Ci0KLSAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFj
ZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVO
VF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSkpOwotICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1f
Y29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Ci19Ci0KLSNpZiAhVVNF
KE5JQ09TSUEpCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gSW1hZ2VC
dWZmZXJEYXRhOjpwcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclBy
b3h5LmNvcHlSZWYoKTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkg
ewotICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAgICAgICAgYXV0byBwcm94
eU9wZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBob2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1
ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBv
c2l0b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JH
QkEpKTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIHByb3h5T3Bl
cmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPiht
X25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0gICAgICAgIHByb3h5T3Bl
cmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJ
dCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBh
cyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCi0gICAgLy8gd2hl
cmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJl
dmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAotICAgIC8vIGludG8gdGhl
IGNvbXBvc2l0b3IgYnVmZmVyLgotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBv
c2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19zZXRfb3Bl
cmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAg
Y2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOwotCi0gICAgaWYgKHByZXZpb3VzQWN0
aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLX0KLSNlbmRpZgotCi12b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENB
SVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Y2Fpcm9f
dD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwotICAgIGNhaXJvX3NldF9v
cGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNhaXJvR0xTdXJm
YWNlKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJl
IG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3Rpbmcg
aXQKLSAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCi0gICAgZ2xHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7
Ci0KLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdC
QSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9
IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7Ci0KLSAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEg
aHVnZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCi0gICAgY2Fpcm9fZ2xf
ZGV2aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7Ci0KLSAgICBtX3N1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSkpOwotICAgIGNsZWFyU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOwotfQotI2Vu
ZGlmCi0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29weShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSkpOwotCi0gICAgYXV0byBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdl
dCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90Pgot
Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0g
ICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkg
PT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0K
LSAgICByZXR1cm4gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlKTsKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBhdXRvIHN1cmZhY2Ug
PSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAg
IGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhf
dD4gaW1hZ2VEYXRhOwotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLQotICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKLSAgICBpbWFnZURhdGEuYXBw
ZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkp
ICoKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkp
KTsKLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyOjpuYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0
YShJbnRTaXplKHNpemUpLCByZW5kZXJpbmdNb2RlKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXpl
KQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nl
c3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZXJyb3IuCi0KLSAgICBmbG9h
dCBzY2FsZWRXaWR0aCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsK
LSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBh
IGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxl
ZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0
YS5tX3NpemUgPSBtX3NpemU7Ci0KLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotICAg
ICAgICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEu
bV9zdXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
ICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFp
bHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1f
ZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkKLSNl
bHNlCi0gICAgQVNTRVJUKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAgewotICAgICAgICBzdGF0aWMgY2Fpcm9fdXNlcl9k
YXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IGNhaXJv
X2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0
aCgpKTsKLSAgICAgICAgdm9pZCogc3VyZmFjZURhdGE7Ci0gICAgICAgIGlmICghdHJ5RmFzdFpl
cm9lZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRh
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2Vf
c2V0X3VzZXJfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwg
c3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7IH0pOwotICAgIH0K
LQotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAh
PSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOyAgLy8gY3JlYXRlIHdpbGwg
bm90aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0aWFsaXplZCBhbmQgZmFpbC4KLQotICAgIGNhaXJv
U3VyZmFjZVNldERldmljZVNjYWxlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlv
blNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBh
ZG9wdFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotICAgIG1fZGF0
YS5tX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9kYXRhLm1fY29udGV4
dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNyZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0gICAgc3VjY2VzcyA9
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFj
ZTo6U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLm1fY29udGV4dDsKLX0KLQotUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQotewotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKLXsKLSAgICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UgaW5oZXJpdHMg
c3VyZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBD
b3B5QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5
Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgLy8gQml0
bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlv
bgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
KG1fZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWlu
ZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5h
dGlvbkNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlm
IChkZXN0aW5hdGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAo
JmRlc3RpbmF0aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9
IGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3Rp
bmF0aW9uQ29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAg
Y29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQu
c3RhdGUoKTsKLSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlv
bnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwg
ZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0
ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0
ZXJuKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFi
bGUgY29sb3Igc3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJ
Uk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9z
aXplLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29s
b3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3Ig
PSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAg
ICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9n
aWNhbFNpemUuaGVpZ2h0KCkpOwotfQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjb3B5U3Vy
ZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUg
YW4gaW1hZ2UsIHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGE7Ci0gICAg
Ly8gb3RoZXJ3aXNlIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdlCi0gICAgaWYg
KHN1cmZhY2VUeXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJu
IHN1cmZhY2U7Ci0gICAgCi0gICAgcmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0WSgwKTsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFU
X0FSR0IzMiwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBs
b2dpY2FsUmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBz
aXplLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQot
ewotICAgIC8vIFRoZSBhcmVhIGNhbiBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0b28gYmlnLgot
ICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVh
ICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFy
ZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8g
cmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51
bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gQ2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQg
ZW5keCA9IDA7Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQocmVjdC54KCksIHJlY3Qud2lkdGgoKSwg
ZW5keCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93LCBh
cyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keSA9IDA7Ci0gICAgaWYgKCFXVEY6
OnNhZmVBZGQocmVjdC55KCksIHJlY3QuaGVpZ2h0KCksIGVuZHkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgg
PiBzaXplLndpZHRoKCkgfHwgZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+
emVyb0ZpbGwoKTsKLQotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4
ID0gMDsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsK
LSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHggPiBzaXplLndpZHRo
KCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IG51bUNvbHVtbnMgPSBl
bmR4IC0gb3JpZ2lueDsKLQotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRl
c3R5ID0gMDsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lu
eTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHkgPiBzaXplLmhl
aWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBpbnQgbnVtUm93cyA9
IGVuZHkgLSBvcmlnaW55OwotCi0gICAgLy8gTm90aGluZyB3aWxsIGJlIGNvcGllZCwgc28ganVz
dCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICBpZiAobnVtQ29sdW1ucyA8PSAwIHx8IG51bVJvd3Mg
PD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBk
ZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAv
LyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNl
IGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChvcmlnaW54LCBv
cmlnaW55LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGRhdGEubV9z
dXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxl
KGltYWdlU3VyZmFjZS5nZXQoKSwgcmVzb2x1dGlvblNjYWxlLCByZXNvbHV0aW9uU2NhbGUpOwot
ICAgIG9yaWdpbnggPSBpbWFnZVJlY3QueCgpOwotICAgIG9yaWdpbnkgPSBpbWFnZVJlY3QueSgp
OwotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAg
ICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtLgotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxBcmVhID0gaW50ZXJzZWN0aW9u
KGxvZ2ljYWxSZWN0LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxT
aXplLmhlaWdodCgpKSk7Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIo
ZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlU3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgtbG9naWNh
bEFyZWEueCgpLCAtbG9naWNhbEFyZWEueSgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2Fs
QXJlYS5zaXplKCkpLCBJbnRTaXplKCkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7
Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHJlc3VsdC0+ZGF0YSgpOwotICAgIGludCBz
dHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgp
KTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0g
ICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQ
ZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kp
IHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVk
Kj4oZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3JpZ2lueSkpOwotICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsKLQot
ICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xvcjo6Y29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4
ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gKCpwaXhl
bCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gKCpwaXhl
bCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAoKnBp
eGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAoKnBp
eGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgICAgIGlmIChwcmVtdWx0aXBsaWVkID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAg
IGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0g
cmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAy
NTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSAgICAgPSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
Z3JlZW47Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYmx1ZTsKLSAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgICAgICBkZXN0
Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2ljYWxVbml0KGNvbnN0
IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRl
U3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gfHwg
cmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQg
cmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1dGlvblNjYWxlKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5l
IFVuaXQgYmFja2luZ1N0b3JlVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6
OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkK
LSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1
bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxv
Z2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVu
aXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFj
a2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxS
ZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
fQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1l
bnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAg
SW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNr
aW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5z
aW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwg
bG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwg
Y29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KQotewotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQoc291
cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFNp
emUgc2NhbGVkU291cmNlU2l6ZSA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlU2l6ZSwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IHNjYWxlZERlc3RQ
b2ludCA9IGJhY2tpbmdTdG9yZVVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBsb2dpY2FsU291cmNlUmVjdCA9IGxvZ2ljYWxV
bml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICBJbnRQb2ludCBsb2dpY2FsRGVzdFBvaW50ID0gbG9naWNhbFVuaXQoZGVzdFBvaW50LCBjb29y
ZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBBU1NFUlQoc2NhbGVkU291
cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3QuaGVpZ2h0
KCkgPiAwKTsKLQotICAgIGludCBvcmlnaW54ID0gc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAg
aW50IGRlc3R4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJjZVJlY3QueCgpOwot
ICAgIGludCBsb2dpY2FsRGVzdHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3Vy
Y2VSZWN0LngoKTsKLSAgICBBU1NFUlQoZGVzdHggPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4IDwg
bV9zaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChv
cmlnaW54IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIGludCBlbmR4ID0gc2Nh
bGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpOwotICAgIGludCBsb2dp
Y2FsRW5keCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WCgp
OwotICAgIEFTU0VSVChlbmR4IDw9IG1fc2l6ZS53aWR0aCgpKTsKLQotICAgIGludCBudW1Db2x1
bW5zID0gZW5keCAtIGRlc3R4OwotICAgIGludCBsb2dpY2FsTnVtQ29sdW1ucyA9IGxvZ2ljYWxF
bmR4IC0gbG9naWNhbERlc3R4OwotCi0gICAgaW50IG9yaWdpbnkgPSBzY2FsZWRTb3VyY2VSZWN0
LnkoKTsKLSAgICBpbnQgZGVzdHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNl
UmVjdC55KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsg
bG9naWNhbFNvdXJjZVJlY3QueSgpOwotICAgIEFTU0VSVChkZXN0eSA+PSAwKTsKLSAgICBBU1NF
UlQoZGVzdHkgPCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55ID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW55IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIGlu
dCBlbmR5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpOwot
ICAgIGludCBsb2dpY2FsRW5keSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJj
ZVJlY3QubWF4WSgpOwotICAgIEFTU0VSVChlbmR5IDw9IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
aW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7Ci0gICAgaW50IGxvZ2ljYWxOdW1Sb3dzID0gbG9n
aWNhbEVuZHkgLSBsb2dpY2FsRGVzdHk7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZl
ZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2Ug
bmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9t
IHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZGVzdHgsIGRlc3R5LCBu
dW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1
cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VT
dXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IGRlc3R4ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBkZXN0eSA9IGltYWdlUmVjdC55KCk7Ci0KLSAg
ICB1aW50OF90KiBwaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdl
U3VyZmFjZS5nZXQoKSk7Ci0KLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzY2Fs
ZWRTb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgY29uc3QgdWludDhfdCog
c3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmln
aW54ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERh
dGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAg
ICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBkZXN0eDsKLQotICAgICAgICAgICAg
Ly8gQXZvaWQgY2FsbGluZyBDb2xvcjo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoKSBiZWNh
dXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4
cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd3NbYmFzZXhdOwotICAg
ICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBibHVlID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgdW5zaWdu
ZWQgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0KLSAgICAgICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQg
PSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9
IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9
IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYg
fCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9u
IGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgY2Fpcm9fc3VyZmFjZV9t
YXJrX2RpcnR5X3JlY3RhbmdsZShpbWFnZVN1cmZhY2UuZ2V0KCksIGxvZ2ljYWxEZXN0eCwgbG9n
aWNhbERlc3R5LCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51bVJvd3MpOwotCi0gICAgaWYg
KGltYWdlU3VyZmFjZSAhPSBtX2RhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRo
aXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbS4KLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihpbWFnZVN1cmZh
Y2UuZ2V0KCksIG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIEludFNpemUoKSwgSW50UmVjdCgwLCAw
LCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51bVJvd3MpLCBJbnRTaXplKGxvZ2ljYWxEZXN0
UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpLCBsb2dpY2FsRGVzdFBvaW50LnkoKSAr
IGxvZ2ljYWxTb3VyY2VSZWN0LnkoKSkpOwotICAgIH0KLX0KLQotU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGVuY29kZWRJ
bWFnZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3Rvcjxj
aGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBl
bmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsg
bWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotICAgIGNhaXJvX3N1
cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSk7Ci0gICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsK
LX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmICFVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQotewot
ICAgIEFTU0VSVChtX3RleHR1cmUpOwotCi0gICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0
aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVz
aGluZy4KLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6
Y3VycmVudCgpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKLSAg
ICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgc3Rh
dGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90
ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX3NpemUsIHRhcmdldFJlY3Qs
IG1hdHJpeCwgb3BhY2l0eSk7Ci19Ci0jZW5kaWYKLQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUg
PT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBtX2RhdGEubV9u
aWNvc2lhTGF5ZXIuZ2V0KCk7Ci0jZWxzZQotICAgIGlmIChtX2RhdGEubV90ZXh0dXJlKQotICAg
ICAgICByZXR1cm4gY29uc3RfY2FzdDxJbWFnZUJ1ZmZlckRhdGEqPigmbV9kYXRhKTsKLSNlbmRp
ZgotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlv
blNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVk
LCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKLSAgICBpZiAocHJl
bXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFtX2RhdGEubV90ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHQ0dMZW51
bSBiaW5kVGV4dHVyZVRhcmdldDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKLSAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
LSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgYmluZFRleHR1
cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENv
bnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAgIGNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHVpbnQzMl90IGZibzsKLSAgICBnbEdlbkZyYW1l
YnVmZmVycygxLCAmZmJvKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
ZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9kYXRhLm1fdGV4dHVyZSwgMCk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKLSAg
ICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRl
eHR1cmVUYXJnZXQsIDApOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAw
KTsKLSAgICBnbEZsdXNoKCk7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVO
VVNFRF9QQVJBTShkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5h
bGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOwotICAgIFVOVVNF
RF9QQVJBTShmbGlwWSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzZhZjQwODk2YmFhY2Q4MGQ5ZjFjNWVmYWE3
OTBhMTQ5YjhkZDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTI2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBz
dXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0LCBvcHRpb25zLmlu
dGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4
dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9y
ZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0
Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpT
aGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRl
c3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVh
clJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikg
eworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJn
YkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAg
ICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xv
ciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBh
cnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAg
ICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNl
IGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAgICAgIHN0YXRp
YyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7CisgICAg
ICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBj
b2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JD
b2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNm
b3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30KKworU3RyaW5nIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Cisg
ICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsK
KworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShlbmNvZGVk
SW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKKworICAgIHJl
dHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRfdGFy
Z2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7CisgICAgcmV0dXJuIGRhdGEo
aW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjNiOTE5YWQ1MjJlYTE3OGIzMmMwMDlmNWQ4OGQ1ZDcxNmRlZjNhMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1Ymxp
YzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVy
cmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAg
IHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAgQ29s
b3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29s
b3JGb3JtYXQ6OkJHUkE7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpIHsgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzNjM3MmY5
MTllN2VjZThjYmM2YTI2M2M0ODljOTllMGU4NzYyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaW5jbHVkZSAiR0xDb250ZXh0
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KKworI2lmIFVTRShFR0wpCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUg
IkVwb3h5RUdMLmgiCisjZWxzZQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNlbmRpZgorI2VuZGlm
CisjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxl
cG94eS9nbC5oPgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
KyNlbHNlCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgorI2Vu
ZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlKQoreworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShzdXJmYWNlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBD
QUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7
CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBXZSBtdXN0IGdl
bmVyYXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBB
UEkgZm9yIGV4dHJhY3RpbmcgaXQKKyAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2Uu
CisgICAgdWludDMyX3QgdGV4dHVyZQorICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwor
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKworICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisKKyAgICBnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwgYmFja2VuZFNpemUud2lkdGgo
KSwgYmFja2VuZFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5j
YWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9y
bWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAgIGNhaXJvX2dsX2RldmljZV9zZXRf
dGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRS
ZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05U
RU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6
ZS5oZWlnaHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBD
QUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjbGVh
clN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiYmIHN1cmZhY2UsIHVpbnQzMl90IHRleHR1cmUpCisgICAgOiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCisgICAgLCBtX3RleHR1cmUo
dGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhp
cykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorI2VuZGlmCit9CisKK0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQoKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEp
CisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1f
bmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKKyNlbmRpZgorCisgICAg
R0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsK
KyAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJp
bmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV90ZXh0dXJl
KQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQorICAgICAg
ICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisg
ICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1MYXllciogSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVy
biBtX25pY29zaWFMYXllci5nZXQoKTsKKyNlbHNlCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdD
R0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5j
ZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFj
dG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxp
cFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdldDsKKyAgICBz
d2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgYmluZFRl
eHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NVQkVf
TUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRl
T2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9z
aXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdWludDMy
X3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0
aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9y
bWF0LCAwLCAwLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCks
IDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOworICAgIGdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEZsdXNoKCk7CisgICAgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0g
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xD
b250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBnbEdl
blRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCAsIEdMX1JHQkEsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWln
aHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBtX2NvbXBvc2l0
b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
Y29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21w
b3NpdG9yVGV4dHVyZSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdo
dCgpKSk7CisgICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21w
b3NpdG9yU3VyZmFjZS5nZXQoKSkpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3Np
dG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgR0xD
b250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKwor
ICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAgICBjcmVhdGVDb21wb3NpdG9y
QnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgICAgICBb
dGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKyAg
ICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXpl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9
OworI2lmIFVTRShOSUNPU0lBKQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxh
eWVyUHJveHkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYg
d2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwg
YnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRo
ZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBq
dXN0IGNvcHkgdGhlIGNvbnRlbnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4K
KyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3Vy
ZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNy
LmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9z
aXRvckNyLmdldCgpKTsKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisjZWxzZQor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQor
eworICAgIEFTU0VSVChtX3RleHR1cmUpOworCisgICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUg
YWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBm
bHVzaGluZy4KKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsK
KyAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
c3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUo
bV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX2JhY2tlbmRTaXplLCB0
YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNkZjBmYWU3ZTJjMzQ5ZTIxNjQxOTg0NTVkNDE4YzNjYWI2NzQ3YjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykg
JiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworI2lm
IFVTRShOSUNPU0lBKQorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbC5oIgorI2Vsc2UKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZAorI2lmIFVTRShOSUNPU0lBKQorICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKKyNlbHNlCisgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXll
cgorI2VuZGlmCisgICAgLCBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIH5JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0
dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tl
bmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiYpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIHZvaWQg
Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgp
IG92ZXJyaWRlOworI2lmICFVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXRm
b3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7IH0KKyNlbmRpZgorI2Vsc2UKKyAgICB2b2lkIHBhaW50
VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKKyNlbmRpZgorCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIFJlZlB0
cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOworI2Vsc2UKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7
CisjZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmU7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3Np
dG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgor
ICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41NWYyZGRlOThlYjc0ZTRlMjEwM2NhYzQ0MThmN2I1OGVhOWUxY2Zj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tl
eV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3Vs
YXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJpZGUg
PSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBiYWNr
ZW5kU2l6ZS53aWR0aCgpKTsKKyAgICB2b2lkKiBzdXJmYWNlRGF0YTsKKyAgICBpZiAoIXRyeUZh
c3RaZXJvZWRNYWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1
cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBiYWNr
ZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7CisgICAgY2Fp
cm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKHN1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5
LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgeworICAgICAgICBmYXN0RnJlZShkYXRhKTsK
KyAgICB9KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpCit7CisgICAg
cmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwg
MSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
V1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZSht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQorewor
ICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9s
b2dpY2FsU2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWlu
dGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2ljYWxTaXplLndpZHRoKCk7IHgrKykgeworICAg
ICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAgICAgICAgICAgIENvbG9yIHBp
eGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworICAgICAgICAg
ICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLCBsb29r
VXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUo
KV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWly
b19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9s
b2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYwMDM3
OTRmZGFhOTQ3MzJiNjE1NTdjNDFlODQ0MjMxYTk4YTcwMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisK
K3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7
CisKKyAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyZDE1ZjBiYTIyMjEwZjdh
MTc0YmE3MDdlZDI2MTgwYzE4ZmVhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
Y3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKKyNpZiBVU0UoQ0FJUk8pCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisg
ICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZh
Y2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX3N1cmZhY2UuZ2V0KCkp
ID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBtX3BsYXRmb3JtQ29u
dGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRm
b3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9
CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3co
KSBjb25zdAoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9z
dXJmYWNlLmdldCgpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNr
aW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAg
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9
CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJm
YWNlOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6
OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFj
ZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0
X2NvbnRlbnQobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQor
ICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisg
ICAgICAgIGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlO
YXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBhdXRvIHN1
cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChzdXJmYWNlLmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Cisg
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQorICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgorICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOworCisgICAgcmV0dXJu
IGltYWdlRGF0YTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVm
ZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBk
ZXN0UG9pbnQsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7
CisKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNS
ZWN0KTsKKyAgICBJbnRQb2ludCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRl
cyhkZXN0UG9pbnQpOworICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9z
dXJmYWNlLmdldCgpLCBkZXN0UG9pbnRTY2FsZWQueCgpLCBkZXN0UG9pbnRTY2FsZWQueSgpLCBz
cmNSZWN0U2NhbGVkLndpZHRoKCksIHNyY1JlY3RTY2FsZWQuaGVpZ2h0KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NDlmZjM3Mzc0ODgy
NDU1MWUzZTRlZmU1YTJiNGQ2NjkzZjA1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIDogcHVi
bGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisK
K3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENh
aXJvIG1fcGxhdGZvcm1Db250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTYxZTM1OTk0NmVmNGJhZDY5MjNmZGJmNzU2NGEyZTM5
Zjc2OWM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJv
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gK
LSNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJQbGF0Zm9ybUxh
eWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eVByb3ZpZGVyLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICYmIFVTRShOSUNPU0lBKQotI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50
U2l6ZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7Ci0KLWNsYXNzIElt
YWdlQnVmZmVyRGF0YQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6OkNsaWVudAotI2Vsc2UKLSAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCi0jZW5kaWYK
LSNlbmRpZgotewotcHVibGljOgotICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiwg
UmVuZGVyaW5nTW9kZSk7Ci0gICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJEYXRhKCk7Ci0KLSAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fp
cm8gbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dD4gbV9jb250ZXh0OwotICAgIEludFNpemUgbV9zaXplOwotICAgIFJlbmRlcmluZ01vZGUgbV9y
ZW5kZXJpbmdNb2RlOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2
b2lkIGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3Zl
cnJpZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgp
IG92ZXJyaWRlOwotI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0K
LSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOwotICAgIHVp
bnQzMl90IG1fY29tcG9zaXRvclRleHR1cmU7Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9z
aXRvckNyOwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRM
YXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgotI2Vsc2UKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHkpOwotI2VuZGlmCi0gICAgdWludDMyX3QgbV90ZXh0dXJlOwotI2VuZGlmCi19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCi0KLSNlbmRpZiAv
LyBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhZmQ1ZTRlYzcxOWVkYjQ5M2Y3OWRiYmZhYmU1YWY5M2NhMDY3MDliLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdI
ZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRp
ZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFj
ZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJH
QjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0Iz
MiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAg
IGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRh
aW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dD
b250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdl
dENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZB
Q0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFj
ZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRD
RihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJl
ZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRp
ZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9k
ZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVk
U2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2Vz
cykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBj
b250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsK
LSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBj
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0g
ICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9
IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2Nh
bGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZs
b2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkp
OwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJl
c29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCku
aXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUg
PSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVu
ZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXpl
LndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxp
bnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQot
ICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cg
PSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVt
Qnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRl
cy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjpt
YXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgo
KSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAgICBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2Rl
ID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEu
Y29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9
IEZsb2F0U2l6ZSh3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpKTsKLSAgICAg
ICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2Rh
dGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVu
c3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRl
eHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlm
ICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAv
LyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGgu
Ci0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0
YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0g
ICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQot
I2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAg
ICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7
Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25z
dCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNp
emVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2
b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdl
IHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91
Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2Rh
dGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAg
ICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2Rh
dGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkp
OwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBj
b250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUp
OwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBp
bWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJl
bmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAg
ICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0
aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2Vz
cyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUo
KSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdz
IHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9u
bHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgot
ICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBi
ZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2Rh
dGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7
Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCku
aGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkg
Y29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25j
dXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91
dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8g
YWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNz
aWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0
J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRv
dGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFj
ZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4
dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5z
dXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENH
Q29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFn
ZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAo
Q0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0
aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJv
dW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0
aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3Vu
ZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPElt
YWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0lt
YWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICog
bG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0
LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkp
OwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsK
LSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9h
dFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5n
ZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQot
Ci1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRp
b25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246
OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAg
ICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KFdURk1vdmUoaW1hZ2UpLCBsb2dpY2FsU2l6ZSgpLCBpbnRlcm5hbFNpemUoKSwgbV9yZXNvbHV0
aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRT
aXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRT
aXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAg
cmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRp
dmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUs
IHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmV0YWluUHRyPENH
SW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAg
ICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAg
ICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2Fm
ZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRh
UHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdl
KCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYg
KCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXIt
Pm1fcmVzb2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdl
QnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZy
b21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVj
dCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShy
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5n
ZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9u
cyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8v
IERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxz
ZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgp
IHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlm
IChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERy
YXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAg
ICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVy
aW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBp
bWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkg
PSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJl
Y3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFs
U2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAg
SW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVy
bmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUg
c2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwg
c291cmNlRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0g
ICAgCi0gICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBp
ZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgp
LgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3
OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8g
ZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQot
ICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJu
ICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsK
LSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsK
LSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6
dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdl
QnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJl
bXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkp
IHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBo
YXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11
bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50
KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQg
KiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCks
IGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwg
ZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMy
LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0g
ZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0g
ICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNh
bFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3Bh
Y2UgPSBsb2dpY2FsU2l6ZSgpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFn
ZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAg
ICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwg
dXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1cm4g
bV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxY2QyMzc1ODFm
OTVkMGNjYWNiODJjODRmYzI2NGY5MmE3OWIzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5k
LmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
b3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0
VHlwZShjZ0NvbnRleHQpID09IGtDR0NvbnRleHRUeXBlQml0bWFwKQorICAgICAgICByZXR1cm4g
Q0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOworICAgIAorICAgIHJldHVy
biBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5k
aWYKK30KKyMKKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KCkKK3sK
KyAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dCgpLnRy
YW5zbGF0ZSgwLCAtbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dCgpLmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOworfQorCitzdGF0aWMgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYg
aW1hZ2UsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAo
Q0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXpl
LndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVf
dD4oYmFja2VuZFNpemUuaGVpZ2h0KCkpKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6
ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9
CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIGlmIChyZXNv
bHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
aW1hZ2UuZ2V0KCksIGJhY2tlbmRTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250
ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgo
KSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkp
OworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFn
ZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXpl
SW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBOYXRpdmVJ
bWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIG1fbG9naWNh
bFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJu
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFn
ZSgpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJl
c2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBzcmNS
ZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdl
ID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tp
bmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJh
d05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2JhY2tlbmRTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dFNjYWxlZCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1h
Z2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENv
cHlCYWNraW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpiYXNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEs
IDAsIDAsIC0xLCAwLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKK30KKworUmV0YWluUHRyPENG
RGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8g
dXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1
dGkpOworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcHJvdGVjdGVkUGl4ZWxBcnJheTsKKworICAgIGlmIChDRkVxdWFsKHV0
aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBi
bGFjay4KKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3QoKSk7CisgICAgICAgIGlmICgh
aW1hZ2VEYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHJvdGVj
dGVkUGl4ZWxBcnJheSA9IG1ha2VSZWZQdHIoaW1hZ2VEYXRhLT5kYXRhKCkpOworICAgICAgICBz
aXplX3QgZGF0YVNpemUgPSBwcm90ZWN0ZWRQaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7CisgICAg
ICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKKwor
ICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByb3RlY3RlZFBpeGVsQXJyYXkt
PmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcm90ZWN0ZWRQaXhlbEFycmF5
LT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7CisgICAgICAgIGlmICghZGF0YVByb3ZpZGVy
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENG
KENHSW1hZ2VDcmVhdGUocGl4ZWxBcnJheURpbWVuc2lvbnMud2lkdGgoKSwgcGl4ZWxBcnJheURp
bWVuc2lvbnMuaGVpZ2h0KCksIDgsIDMyLCA0ICogcGl4ZWxBcnJheURpbWVuc2lvbnMud2lkdGgo
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0lt
YWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7
CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAg
ICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBi
YWNrZW5kU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2Vu
ZFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENH
Q29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAg
ICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAs
IGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSkpOworICAgICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNr
ZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7
CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1h
Z2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0
b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTos
Il9zOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitzdGF0aWMgaW5saW5lIHZJbWFnZV9CdWZm
ZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBieXRlc1BlclJvdywgdWludDhfdCogcm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2SW1hZ2VfQnVmZmVyIHZJbWFnZUJ1ZmZlcjsK
KworICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50
PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2
SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRl
cyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1
cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxz
QWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9y
Rm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRl
c3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhl
bCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9y
bWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JG
b3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dkltYWdlUHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCkg
eworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAg
IGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBl
cm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxz
KAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93
cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRl
c3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZv
cm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQgJiYgc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9y
bWF0KSB7CisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKHNyY0Fs
cGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RB
bHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0g
bWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdklt
YWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RS
b3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9y
bWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdjYTM5ODAzNGYyNWEz
MzQ5MjQ3ZDQzNGY1ZjY1OWY5MmFmM2Q0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2Vu
ZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdl
QnVmZmVyQ0dCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6Cisg
ICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsK
KworcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJC
YWNrZW5kOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRD
b2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgc2V0dXBDb250ZXh0
KCk7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3Q7CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICB2b2lkIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzgzYzk5NmU1NGQwYjA0
NzEzZmRjNzQyYzIxNDM2ZDM4MDdlODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJ
bmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8
IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKKyNlbHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRt
YXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
OworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9y
U3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHZvaWQqIGRhdGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogYmFj
a2VuZFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhiYWNrZW5kU2l6ZS5o
ZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKGRhdGEpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGRhdGEpICYg
MykpOworCisgICAgc2l6ZV90IG51bUJ5dGVzID0gYmFja2VuZFNpemUuaGVpZ2h0KCkgKiBieXRl
c1BlclJvdzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVz
KTsKKworICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
ZGF0YSwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCksIDgsIGJ5dGVz
UGVyUm93LCBjZ0NvbG9yU3BhY2UsIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0Nv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBh
dXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCkgeworICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsK
KworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKDAsIGRhdGEsIG51bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRleHQp
KSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBjZ0NvbG9yU3Bh
Y2UgPSBjb250ZXh0Q29sb3JTcGFjZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgY2dD
b2xvclNwYWNlLmdldCgpLCBudWxscHRyKTsKKyAgICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRy
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNoZWRDR0NvbG9y
U3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCitJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJv
dmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiYmIGNvbnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFj
a2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRh
KQorICAgICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNT
RVJUKG1fZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENv
bnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSkpOworCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1fYmFja2VuZFNpemUud2lkdGgoKSwg
bV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVzUGVyUm93KCksCisgICAgICAgICAg
ICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8sIG1f
ZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnRvQkdSQURhdGEobV9kYXRhKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBt
X2RhdGEpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNmFmNjYyYTFjNzZhOGI4OWI3NzZmMjM5NmNiODUzNDdkNmE0
OTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwor
CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYsIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBDb2xvckZvcm1hdDo6QkdSQTsgfQorI2VuZGlmCisKKyAgICB2b2lkKiBtX2RhdGE7Cisg
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJm
ZGQyZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNj
ZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0v
LyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1w
bGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0Vf
QVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZv
aWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25z
dCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNT
RVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJH
UkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgot
ICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVy
bXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVm
ZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5k
YXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAh
PSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0Zs
YWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0
byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhw
ZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMy
IHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0
YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3
aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lk
dGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdS
QURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNv
bnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwot
Ci0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShy
ZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53
aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJm
YWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAg
ICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAq
PSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJl
c3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5z
YWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRh
dGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZl
R2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAg
Ci0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENo
ZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsK
LSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAg
ICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0
dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5z
YWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9y
aWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRl
c3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdp
bnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0
KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+
IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNr
ZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5z
YWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53
aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVz
dEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVu
ZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAg
ICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAg
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVu
cHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdklt
YWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5k
aWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAg
ICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBv
ZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3Vy
ZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJv
dyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9C
dWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVz
ID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVH
ZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAg
ZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVz
dFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0
YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwg
Y2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1h
cFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxz
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
ICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNy
Y1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBz
cmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3Jj
Um93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8v
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9y
bWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDAp
OwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tl
ZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHgg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFT
U0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRl
c3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNh
ZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VS
ZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+
KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVu
c2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRo
ID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBk
ZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJj
ZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNT
RVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdp
bnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0g
c291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNr
ZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQo
ZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBo
ZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVu
ZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNv
dXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRh
dGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0
KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dz
OwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRh
dGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0
ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQp
LnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAg
ICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lk
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdl
dCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAg
ICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcu
dW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgp
OwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAg
cHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAg
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBh
bHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAg
ICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2Yg
QVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAo
c3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFs
cGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8g
MjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3Nb
YmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNy
Y1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9j
a2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3Jp
dGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwot
ICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZl
R2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7
Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVp
Z2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dz
KTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBk
ZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQo
KTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVz
dC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBs
eUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3Qg
dWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11
dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0g
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAg
IHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYg
KHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQg
JiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0g
KGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0j
ZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggM2UyMzc0YmFkMjRmMDc4N2ZlZjA1NDNjMWI1MWI5MTIwZjEy
MzBkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29s
b3JTcGFjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRl
clJlZjsKLXR5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIElPU3VyZmFjZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAg
SW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92
ZXJmbG93PiBieXRlc1BlclJvdzsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQot
ICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsg
bnVsbHB0ciB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVy
OwotICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIC8vIE9ubHkgZm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwg
aW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ3Y2Y1Y2RlNjM5Mzk3ZTdi
MDE1NDdmZmRkYzhiNjhiZDY2MDQ4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oIgorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworCitJ
bnRTaXplIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgSW50
U2l6ZSBiYWNrZW5kU2l6ZSA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5k
U2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZh
Y2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGJhY2tlbmRTaXplLndpZHRoKCkgPiBtYXhTaXpl
LndpZHRoKCkgfHwgYmFja2VuZFNpemUuaGVpZ2h0KCkgPiBtYXhTaXplLmhlaWdodCgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGJhY2tlbmRTaXplOworfQorCitSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHRD
b2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChD
R0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5cGVJT1N1cmZhY2UpCisg
ICAgICAgIHJldHVybiBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7
CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFj
ZShjb250ZXh0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ0dD
b2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykK
K3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRl
KGJhY2tlbmRTaXplLCBiYWNrZW5kU2l6ZSwgY2dDb2xvclNwYWNlKTsKKyAgICBpZiAoIXN1cmZh
Y2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cp
OworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENH
Q29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6
ZXJvKCksIGJhY2tlbmRTaXplKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChz
aXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1
cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChhdXRvIGNn
Q29sb3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpKQorICAgICAgICByZXR1cm4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgY2dDb2xvclNwYWNlLmdldCgpLCBudWxscHRyKTsKKyAgICAKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JH
QiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
Y2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0V2luZG93KTsKK30KKworCitJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2lj
YWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwg
bV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZSk7Cisg
ICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5l
bnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRl
cygpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtZW1vcnlDb3N0KCk7Cit9CisKK3Vuc2ln
bmVkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Cit9CisKK0NvbG9yRm9ybWF0IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKK30KKworTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUlt
YWdlKCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1vdmUobV9z
dXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7
CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlm
IChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgpKQorICAgICAgICBkZXN0Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnRvQkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7Cit9CisKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJu
IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwg
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygq
bV9zdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKKyAg
ICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRh
LCBzcmNSZWN0LCBkZXN0UG9pbnQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworCisgICAg
Ly8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KKyAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhw
bGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCisgICAgY29udGV4dCgpLmZpbGxSZWN0KEZs
b2F0UmVjdCgxLCAxLCAwLCAwKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEhBVkUoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kZmMwZjA0M2YwNTVhNzdkY2VmNjYzZWU0ZmM3YmY2NWI5NmY2ODVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhBVkUo
SU9TVVJGQUNFKQorCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
SW50U2l6ZSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisK
KyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJy
aWRlOworCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFE
YXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAg
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CisKKyAgICBzdGF0aWMgUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhBVkUoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApp
bmRleCAyODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzLi4yYWE4MjMzMmRl
MmQxMTFiZGNlMWUwODA2MzU5MGRjZTIxYjZjM2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMjU0
LDggKzI1NCw4IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5l
ZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgbV9jYWNoZWRTb3VyY2VS
ZWN0ID0gc3JjUmVjdDsKICAgICArK21fY2FjaGluZ0NvdW50Rm9yVGVzdGluZzsKIAotICAgIElu
dFNpemUgaW50ZXJuYWxTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7
Ci0gICAgZGVjb2RlZFNpemVDaGFuZ2VkKGludGVybmFsU2l6ZS51bmNsYW1wZWRBcmVhKCkgKiA0
KTsKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+YmFja2Vu
ZFNpemUoKTsKKyAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoYmFja2VuZFNpemUudW5jbGFtcGVkQXJl
YSgpICogNCk7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJm
YWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCmluZGV4IGMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRiOTAzNmRkZjZmYmNmNjcuLjM5MWZj
MjNjZDBhOGY4NjlhY2MxMDczMmQxNGZkZjQ1MGZjMjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTMzLDcgKzMz
LDYgQEAKICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNpbXBvcnQgIklPU3VyZmFjZVBvb2wuaCIK
ICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQg
PHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC0xMTAsMTMgKzEwOSw2IEBAIHZvaWQg
SU9TdXJmYWNlOjptb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFj
ZSkKICAgICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCkuYWRkU3VyZmFjZShXVEZNb3ZlKHN1
cmZhY2UpKTsKIH0KIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1z
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZl
cihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotICAgIHJldHVy
biBXVEZNb3ZlKGltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSk7Ci19Ci0jZW5kaWYKLQogc3Rh
dGljIE5TRGljdGlvbmFyeSAqb3B0aW9uc0ZvckJpcGxhbmFyU3VyZmFjZShJbnRTaXplIHNpemUs
IHVuc2lnbmVkIHBpeGVsRm9ybWF0LCBzaXplX3QgZmlyc3RQbGFuZUJ5dGVzUGVyUGl4ZWwsIHNp
emVfdCBzZWNvbmRQbGFuZUJ5dGVzUGVyUGl4ZWwpCiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1
L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCBmZDhlNWU4ZTJlOTRlNzA1
NDg5NmY5YWJiYmE3YTQ2ZjUwMjE0MWM5Li5jOTZlMzNjYTVmNjEzMWU1MmUxZTlkNDVkN2MwMjE2
M2RlNGFjYzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTExLDcgKzExMSw4
IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVm
ZmVjdCgxKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0g
aW1hZ2VSZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIWRz
dFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI5MmIxY2U0OGZjNDRjMTgxNWNl
Nzc0Y2UxYjk1YzczNjU1MmViZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5j
bHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisj
aW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitj
bGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNz
Q29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0
aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1
cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCog
cmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0Lmdl
dCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxp
c3QucmVzZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3Qu
aXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVw
bGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBs
YXllci5yZXBsYXkoeyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3Qu
Y2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4
dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxE
aXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkgeyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAz
NDI1YTQ3ZmM1OTc1Li45NTE4MDBlZGE5MTc0MTFjODhiOWE0YmU1NTE0Y2YxZjY4Yzc4Nzk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
QEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBh
dXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGlt
YWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisg
ICAgYXV0byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIWltYWdl
RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3Jt
YWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRh
LT5kYXRhKCk7CisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+
c2l6ZSgpOwogCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1f
dmFsdWVzKTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZv
aWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBp
bWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFnZVJl
Y3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5j
cHAKaW5kZXggZmEwNDEzYzAwZGE0M2FjNWRmNTVlNWUwMWY2OTQ0YWI5ZWRhNzQ4My4uOTc4YzU1
YTY3YjhkZTcyMGU5ZmE3OWJkOGNjMzRkNzQ1MjhhMDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTEwOCw3ICsxMDgsOCBAQCB2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXkg
PSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0
ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5
ID0gaW1hZ2VSZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAo
IXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCBhMTll
YTA1Mzc1ODE5Y2VjZGFjMjVkNWQ5NjNkNTQ0ZGQ0ZDFhOTY5Li4yNjU0NDBmNDM5NDJhZmE2YWEy
OThkYWY0ZWMwMmVlM2Q5NWNlYzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMjcsNyArMjcsNyBA
QAogI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5
LDcgKzIyOSw4IEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUg
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgICAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1
bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQog
ICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA2MmMy
ZjgzMzY1MzU4Njg0NGQ5ZjM5MGVlYTVlZGMxMDhlMzBhMzg4Li5hNmUzZjRiYmFhMjQ0OTdmOTI2
MzQ2NTY5NzVmZmI4N2RjN2FiOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI1
LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgpAQCAtMzcxLDEyICszNzEsMTMgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
IAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRJbWFnZTsKKyAgICBJbWFnZURhdGEqIHJl
c3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAgICAgICAgIHJlc3VsdEltYWdl
ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1
bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTM5NSw3
ICszOTYsNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc3JjUGl4ZWxB
cnJheSwKLSAgICAgICAgKnJlc3VsdEltYWdlLAorICAgICAgICAqZHN0UGl4ZWxBcnJheSwKICAg
ICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAg
ICAgICAgbV9iaWFzICogMjU1LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAwZTk0
NGRmMDBhOTVjYzA2ZDI2YWE0MmYxNjllZTZhNDZmNWEyNzgyLi41MzczNTUwNDUzZTQ5ODYyYzBl
NDE2ZjJkY2MyNTZiNDcwYzkxOTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0
LDcgKzk0LDggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAg
ICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJl
c3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5
M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5ZTJhZTg2NGM2Mzk2NjY4YjM3
NDFjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUg
IkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1
ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKQEAgLTk5LDE0ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0
LCBtX3NoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8g
SW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgotICAgIEludFJl
Y3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwot
ICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgSW50UmVjdCBzaGFk
b3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4
ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgp
LndpZHRoKCkpOwotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJh
eSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXpl
KCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRh
KCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRh
KCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lkdGgoKSk7Cisg
ICAgCisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7
CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcAppbmRleCA0OWJhODQxNzNjMmQxYTk5NTRlNTYxMzkwY2UwM2MyNGJjOTBjODFiLi5kN2Vk
OWIyNDQ5MDE3OGZmYmZiZWIxY2Q0MmJlYTVlOGZmMTU5ZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgog
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lm
IFVTRShBQ0NFTEVSQVRFKQpAQCAtNTIyLDE0ICs1MjMsMTUgQEAgdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdWx0UGl4ZWxBcnJheSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0UGl4ZWxB
cnJheSkKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdElt
YWdlLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KCpyZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgaW4tPmNv
cHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7
CiAKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CkBAIC01NDMs
NyArNTQ1LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
ICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1B
cHBseSgqcmVzdWx0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgp
LCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoKmRz
dFBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6
ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6
b3V0c2V0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCAwYmE1MWI3NjEyZjJjYjJmNjlmNGY2
MDIxY2VmY2JlM2MyZTc0MmQzLi42ZGI4N2ZkNTQ1YThmMWRkYTdkOWI1ODhhMjU0MDY1NWE1Nzhm
YjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9y
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ3Myw3ICs0NzQsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0g
ICAgVWludDhDbGFtcGVkQXJyYXkqIHJlc3V0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdXRQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3V0UGl4ZWxB
cnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggMjUxNzgxY2E1
YWE1MWY3ODAyN2FkNTA4ZGY5YWM2MTBjNjc5NGZhNS4uY2JkNDI0MTk3NjU3MGE4NzM5NDUyMDBh
OTEzZTBlOWU2NTlhYjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjcsNyArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjM0LDcgKzIzNCw4
IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAg
ICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgp
IDogbnVsbHB0cjsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwCmluZGV4IDgyMjc4NzlmNTc4NmRlNjM1MDU0MzZmMWI0ODAxN2MwYWRk
MjhlZjYuLjE5ODBhYjkzNGU1Njg3MmI2MjY0MjFmMDIyMTJlODJmOTk4YTIxOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIK
IAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgpAQCAtMzk1LDcgKzM5NSw4IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpm
aWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogCiB2b2lk
IEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBVaW50OENsYW1w
ZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIGF1dG8qIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkg
OiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBm
YS4uYTllOGZjYTJjNWQxZGNiYjY2N2E1YjdjYzBkNGY3NzAyNDg0ZjM0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcApAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFy
cmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgVWludDhDbGFtcGVk
QXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwog
ICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRhdGEoKTsKICAgICBpbnQgcGl4
ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwogCkBAIC0yNjUsNyArMjY1LDcg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCiAKIEltYWdlQnVm
ZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkg
PDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBi
dWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5n
ZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVy
KiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBp
ZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3Rp
bmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQzOCw1
MiArNDM4LDUyIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUmVz
dWx0KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZp
bHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11
bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NU
UkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8
PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1h
Z2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewog
ICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4K
ICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAg
ICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
KGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAg
ICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxw
aGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdl
Qnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAg
ICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgcmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1
ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9u
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
IHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUp
KTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVH
ZXQoKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0
YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNv
cHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCks
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAg
ICB9CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIEltYWdlQnVm
ZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKQEAgLTQ5NywxMyAr
NDk3LDEwIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCkKIAogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVk
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICBp
ZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0
YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCkBAIC01MTUsMTEgKzUxMiwxMSBAQCBVaW50
OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7
CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQoKHJlc3VsdFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAg
ICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFt
cGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
K0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KQogewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUzMSw3ICs1Mjgs
NyBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVz
dWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7
CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1
bHRTaXplKTsKICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYzZWEyYjZlOTMz
MmZlNDIuLmFmNDYzZWZlYjAxMzZhYzYxOGUyOTljZDA4ZDQ0ODM4ZDBlZjU2NTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0
ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdl
RGF0YTsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVj
dFZlY3RvcjsKIApAQCAtMTUzLDggKzE1NCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBVaW50OENsYW1wZWRBcnJheSogY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBv
cGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhh
IGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0x
ODIsOCArMTgzLDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVm
ZmVjdHM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJS
ZXN1bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAog
ICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IDFlMDM1YTdlZWYyODAzY2Y2NTk5
MmQwNDljOWY4YjU1NmJjZWNhZWMuLjkxOGUxOGFmNWUxMmZmOTA0OTQ4M2E3OGVmMWJhODJkNzM1
OGMyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwg
SW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0
YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZm
MWIzOTQxNWViYjIxYmU2Y2VmYWM1OTA2ZjdkNDI1MWI4MzU5M2YuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5o
IgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1
ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEg
YnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgot
dm9pZCBzd2l6emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc3JjUm93cywgdW5zaWdu
ZWQgcm93Q291bnQsIHVuc2lnbmVkIGNvbENvdW50LCB1bnNpZ25lZCBzcmNTdHJpZGUsIHVuc2ln
bmVkIGRlc3RTdHJpZGUsIHVpbnQ4X3QqIGRlc3RSb3dzKQotewotICAgIGZvciAodW5zaWduZWQg
eSA9IDA7IHkgPCByb3dDb3VudDsgKyt5KSB7Ci0gICAgICAgIC8vIFNvdXJjZSBkYXRhIG1heSBi
ZSBwb3dlci1vZi10d28gc2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25seSBjb3B5IHRoZSBiaXRzIHRo
YXQKLSAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgcmVjdGFuZ2xlIHN1cHBsaWVkIGJ5IHRo
ZSBjYWxsZXIuCi0gICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOwotICAgICAgICB1
aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbENvdW50OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVQb3NpdGlvbiA9IHggKiA0OwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNy
Y1BpeGVsID0gc3JjUm93ICsgeDsKLQotICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBl
eHBlY3QgKFApUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBQ
QkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgICAgICAgICAgdWludDMyX3QgYWxwaGEgPSAoKnNy
Y1BpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1aW50MzJfdCByZWQgPSAo
KnNyY1BpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1aW50MzJfdCBncmVl
biA9ICgqc3JjUGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdWludDMyX3Qg
Ymx1ZSA9ICgqc3JjUGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKGRlc2ly
ZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1
ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb25dICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRl
c3RSb3dbYnl0ZVBvc2l0aW9uICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0
ZVBvc2l0aW9uICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24g
KyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBjb3B5UmVj
dEZyb21Tb3VyY2VUb0Rlc3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXpl
JiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZm
ZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29u
dGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZl
clNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAg
IHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0Owot
ICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsK
LQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3Vy
Y2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRl
c3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQg
Ynl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQg
eSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWlu
dDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0g
ICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVz
dFJvd09mZnNldDsKLSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNyY1JvdywgYnl0ZXNQZXJSb3cp
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQg
Ynl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci1ib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFu
ZFNldFByZW11bHRpcGxpY2F0aW9uKGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50
U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0
QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNpemUp
LmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUoKSkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VC
dWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsK
LSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0K
LSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpICog
NDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngoKSAq
IDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRlICog
c291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRlc3Qg
KyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVuc2ln
bmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVuc2ln
bmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zmc2V0
OwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSAr
IGRlc3RSb3dPZmZzZXQ7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBzb3VyY2VS
ZWN0LndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcG9zID0geCAqIDQ7Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd1t4XTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGdyZWVuID0gc3JjUm93W3ggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBz
cmNSb3dbeCArIDJdOwotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dbeCArIDNd
OwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkg
ewotICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSBy
ZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1
NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdWludDMy
X3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3cpICsgeDsKLSAg
ICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8
IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4mIHJlc3VsdCkgY29uc3QKLXsKLSAgICBhdXRvIHJh
d0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpIC8gcmF3Qml0bWFwU2l6ZS53aWR0aDsKLQotICAg
IEludFJlY3Qgc2NhbGVkUmVjdCA9IHJlY3Q7Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZh
Y3Rvcik7Ci0KLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgYmFja2luZ1N0b3JlU2l6ZSku
Y29udGFpbnMoc2NhbGVkUmVjdCkpIHsKLSAgICAgICAgLy8gUmVxdWVzdGVkIHJlY3QgaXMgb3V0
c2lkZSB0aGUgYnVmZmVyLiBSZXR1cm4gemVyby1maWxsZWQgYnVmZmVyLgotICAgICAgICByZXN1
bHQtPnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc2NhbGVkUmVjdCwgYmFja2luZ1N0b3JlU2l6ZSwg
ZGF0YS5kYXRhKCksIHJlY3Quc2l6ZSgpLCByZXN1bHQtPmRhdGEoKSwgSW50UG9pbnQoKSk7Ci19
Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFk
YXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIG51bUJ5dGVz
ID0gc2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBiYWNraW5nU3RvcmVT
aXplID0gc2l6ZTsKLSAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsK
LSAgICByZXR1cm4gZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOwotfQot
Ci0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1
ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0Pgotdm9p
ZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQot
ewotICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsKLSAgICBhdXRvKiBwaXhl
bERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3Qg
cGl4ZWwgPSAqcGl4ZWxEYXRhOwotICAgICAgICBzaXplX3QgYnl0ZVBvc2l0aW9uID0gaSAqIDQ7
Ci0KLSAgICAgICAgdWludDMyX3QgYWxwaGEgPSAocGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsK
LSAgICAgICAgdWludDMyX3QgcmVkID0gKHBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAg
ICAgIHVpbnQzMl90IGdyZWVuID0gKHBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAg
dWludDMyX3QgYmx1ZSA9IChwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgIC8vIChQKVJH
QkEgLT4gUEJHUkEKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUp
IHsKLSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgICpwaXhlbERhdGEgPSAoYWxwaGEgPDwgMjQpIHwgcmVk
ICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAg
fQotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBm
b3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12
b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5z
aWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8g
NDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIHggPSBwaXhlbENvdW50ICogNDsKLQotICAgICAgICB1bnNpZ25lZCByZWQg
PSBieXRlRGF0YVt4XTsKLSAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBieXRlRGF0YVt4ICsgMV07
Ci0gICAgICAgIHVuc2lnbmVkIGJsdWUgPSBieXRlRGF0YVt4ICsgMl07Ci0gICAgICAgIHVuc2ln
bmVkIGFscGhhID0gYnl0ZURhdGFbeCArIDNdOwotCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAg
IGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChh
bHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihieXRlRGF0YSkgKyBpOwotICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQp
IHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0
aW9uU2NhbGUgKi8pIGNvbnN0Ci17Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNv
cmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWJpdG1hcCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZO
ZWVkZWQoZGVzaXJlZEZvcm1hdCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byByYXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0gICAgSW50U2l6ZSBiaXRtYXBT
aXplKGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLndpZHRoKSwgY2xhbXBUbzxpbnQ+KHJhd0Jp
dG1hcFNpemUuaGVpZ2h0KSk7Ci0KLSAgICBpZiAocmVjdC5sb2NhdGlvbigpID09IEludFBvaW50
KCkgJiYgcmVjdC5zaXplKCkgPT0gYml0bWFwU2l6ZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VChudW1CeXRlcy51bnNhZmVHZXQoKSA9PSBkYXRhLnNpemUoKSk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0UmFuZ2UoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBPbmx5IHdhbnQgcGFydCBvZiB0aGUgYml0bWFwLgotICAgICAgICBpZiAoIWNvcHlS
ZWN0RnJvbURhdGEocmVjdCwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIGlmIChieXRlRm9ybWF0ICE9IGRlc2lyZWRGb3JtYXQpIHsKLSAgICAgICAg
Ly8gSW4tbWVtb3J5IGRhdGEgZG9lcyBub3QgbWF0Y2ggZGVzaXJlZCBmb3JtYXQuIE5lZWQgdG8g
c3dpenpsZSB0aGUgcmVzdWx0cy4KLSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgaW5QbGFjZUNo
YW5nZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkp
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRh
OjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2ly
ZWRGb3JtYXQpIGNvbnN0Ci17Ci0gICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVm
ZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIElu
dFNpemUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLQotICAgIGF1dG8gbnVt
Qnl0ZXMgPSBwaXhlbFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51
bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
dGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2
aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIEFTU0VS
VCghIWQyZERldmljZUNvbnRleHQpOwotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHBp
eGVsU2l6ZS53aWR0aCgpICogNDsKLQotICAgIC8vIENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQy
RDFCaXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQxQml0bWFwMQotICAgIENPTVB0cjxJRDJEMUJp
dG1hcDE+IGNwdUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9w
ZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BV
X1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxG
b3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1h
cChwaXhlbFNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVz
MiwgJmNwdUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIHRhcmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICBEMkQx
X1JFQ1RfVSBkYXRhUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIHBpeGVsU2l6ZS53aWR0aCgpLCBw
aXhlbFNpemUuaGVpZ2h0KCkpOwotICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgm
dGFyZ2V0UG9zLCBiaXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBl
ZERhdGE7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZt
YXBwZWREYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghbWFwcGVkRGF0YS5iaXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShwaXhlbFNpemUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBXZSBu
ZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAg
ICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBp
eGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0
YS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhl
bFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRl
c1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwotCi0gICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRG
b3JtYXQ7Ci0KLSAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5j
OwotCi0gICAgaHIgPSBjcHVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRl
cmluZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0
LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0g
ICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGlu
dD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkp
OwotICAgIGRlc3R4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZl
R2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgp
KTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3Jp
Z2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBDaGVja2VkPGlu
dD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgo
KSk7Ci0gICAgZW5keCAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZl
R2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJj
ZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0K
LSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lnko
KSk7Ci0gICAgZGVzdHkgKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eS51bnNh
ZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdo
dCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQo
b3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBDaGVja2Vk
PGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1h
eFkoKSk7Ci0gICAgZW5keSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGVuZHkudW5z
YWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0g
c291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVz
dHk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoYml0bWFwKSB7Ci0gICAgICAgIGF1dG8g
cGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS53aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxT
aXplLndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVp
Z2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhl
aWdodCA+PSBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghZW5zdXJl
QmFja2luZ1N0b3JlKHNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc291cmNlU2l6
ZSA9PSBzaXplKSB7Ci0gICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwg
c291cmNlLmxlbmd0aCgpKTsKLSAgICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKLSAg
ICB9IGVsc2UgewotICAgICAgICByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChieXRlRm9ybWF0
KTsKLSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNlUmVjdCwgc291
cmNlLCBzb3VyY2VGb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJp
dG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7Ci19Ci0K
LWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQpCi17Ci0gICAgSW50U2l6ZSBwaXhlbFNpemUg
PSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5
ID0gc291cmNlUmVjdDsKLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5j
b250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBk
ZXN0QnVmZmVyUG9zaXRpb24gPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpZiAoc291
cmNlRm9ybWF0ID09IGJ5dGVGb3JtYXQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3Vy
Y2VUb0Rlc3Qoc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJh
Y2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAg
aWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KQotICAgICAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlw
bGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3VyY2VS
ZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwg
ZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gY29weVJlY3RG
cm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJj
ZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRp
b24pOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVk
KCkKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRt
YXBPdXRPZlN5bmMgfHwgZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxT
aXplLndpZHRoID49IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVs
U2l6ZS5oZWlnaHQgPj0gYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBwaXhlbFNpemUud2lkdGggKiBw
aXhlbFNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTb2Z0d2FyZSBnZW5lcmF0ZWQgYml0bWFwIGRhdGEg
aXMgaW4gUkdCQS4gV2UgbmVlZCB0byBzd2l6emxlIHRvIHByZW11bHRpcGxpZWQgQkdSQSB0byBi
ZSBjb21wYXRpYmxlCi0gICAgLy8gd2l0aCB0aGUgSFdORC9IREMgcmVuZGVyIGJhY2tpbmcgd2Ug
dXNlLgotICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkKLSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBSR0JBIC0+
IFBCR1JBCi0gICAgZWxzZQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOyAvLyBQUkdC
QSAtPiBQQkdSQQotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IGJhY2tpbmdTdG9yZVNp
emUud2lkdGgoKSAqIDQ7Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFwLT5Db3B5RnJvbU1lbW9y
eShudWxscHRyLCBkYXRhLmRhdGEoKSwgYnl0ZXNQZXJSb3dJbkRhdGEpOwotICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5j
OjpJblN5bmM7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXJEYXRhOjpjb21w
YXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgbG9h
ZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAg
ICAgcmV0dXJuIGJpdG1hcDsKLQotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdl
dCgpID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKGJp
dG1hcFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0
bWFwOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgm
YmFja2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0g
Yml0bWFwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgICAgICAg
ICAgICAgLy8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0
dXJuIGEgY29weS4KLSAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJp
dG1hcDsKLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRl
Qml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVz
KCksICZjb3BpZWRCaXRtYXApKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KGNvcGllZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxs
cHRyKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1
dG8gc2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHNpemUuaGVpZ2h0
ICYmIHNpemUud2lkdGgpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0
ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENv
cHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdl
dC4KLSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1h
cCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCi0gICAgY29udGV4dC0+ZW5k
RHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwotICAgIGlmICghc291cmNl
RGV2aWNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQy
RDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEg
Yml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09Q
VElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3Qy
RDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQt
PkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJv
dy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICgh
c291cmNlQ1BVQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291
cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxw
dHIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7Ci0gICAgaHIgPSBzb3VyY2VD
UFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Q09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKLSAgICBociA9
IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOwotICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0
aWJsZUJpdG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChi
aXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJj
ZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0
bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAgICByZXR1cm4gY29tcGF0
aWJsZUJpdG1hcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRh
dGFEaXJlY3QyRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOTRk
OGE0ODIyZjEyNWY0MDZmMzAwNzc0N2ZmOTM1OGMxNTZhMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1pbnRlcmZhY2UgSUQyRDFCaXRt
YXA7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIG11dGFibGUgSW50U2l6ZSBiYWNr
aW5nU3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRl
c1BlclJvdzsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICBt
dXRhYmxlIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIG11dGFibGUgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBieXRlRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBwbGF0
Zm9ybUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4
dDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLQotICAgIGVudW0gY2xhc3MgQml0
bWFwQnVmZmVyU3luYyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5jLCBCdWZmZXJPdXRPZlN5bmMg
fTsKLSAgICBtdXRhYmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFwQnVmZmVyU3luYyB7IEJpdG1h
cEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYyB9OwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJs
ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCopOwotCi0gICAgYm9vbCBlbnN1cmVCYWNraW5nU3Rv
cmUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgbG9hZERhdGFUb0JpdG1hcElmTmVl
ZGVkKCk7Ci0gICAgYm9vbCByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQpIGNvbnN0OwotICAgIGJvb2wgY29weVJlY3RGcm9tRGF0
YShjb25zdCBJbnRSZWN0JiwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYpIGNvbnN0OwotICAg
IGJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmLCBjb25zdCBVaW50
OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHZvaWQgbWFya0J1
ZmZlck91dE9mU3luYygpIHsgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1
ZmZlck91dE9mU3luYzsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQyMThmMWVmNGY1
NzhjZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShESVJFQ1Qy
RCkKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5j
bHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRl
IDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01v
ZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxl
ZFNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsICZjb250
ZXh0LCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhl
IGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoRmxvYXRTaXpl
KHNjYWxlZFNpemUud2lkdGgoKSAvIHNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSAv
IHNpemUuaGVpZ2h0KCkpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgLypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
Y29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwg
Ym9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1
dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1h
a2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IHN0
ZDo6Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxl
ZEhlaWdodCA9IHN0ZDo6Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQot
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0
aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50
U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmlu
Z01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0
aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0
ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0
ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBsYXRmb3JtQ29u
dGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6
IG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxh
dGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlbmRl
clRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0
UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3Jl
YXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKG1fbG9naWNhbFNpemUsIHJlbmRlclRhcmdldCwg
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmbV9kYXRh
LmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2RhdGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgewotICAgICAgICBtX2RhdGEubG9h
ZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAgfSwgW3RoaXNdKCkgewotICAgICAgICBtX2Rh
dGEubWFya0J1ZmZlck91dE9mU3luYygpOwotICAgIH0pOwotICAgIG1fZGF0YS5jb250ZXh0ID0g
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7
Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGlt
YWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2lu
ZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgaW1hZ2VDb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBudWxscHRyLCBz
dWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0Owot
Ci1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRl
eHQoKSBjb25zdAotewotICAgIGNvbnRleHQoKS5mbHVzaCgpOwotfQotCi1zdGF0aWMgQ09NUHRy
PElEMkQxQml0bWFwPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNp
emUmIGJvdW5kcykKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJ
bWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBpZiAoaW1hZ2UgJiYgKHN0YXRp
Y19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
Ym91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgp
KSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7Ci0gICAgICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAo
Yml0bWFwVGFyZ2V0LCBib3VuZHMpOwotICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgewotICAg
ICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRo
KCksIGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJp
dG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKLSAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVk
Qml0bWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0
aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4m
JiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNp
emUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0g
MSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAg
ICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBp
bWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6
IE5lZWQgdG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCi0gICAgICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlC
ZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykK
LSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNl
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
LQotICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJl
bmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3Zl
KGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFs
U2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNp
emUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRh
LmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZm
ZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFy
Z2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGltYWdlQnVmZmVyLT5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0
bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQo
Yml0bWFwVGFyZ2V0LmdldCgpLCBzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZm
ZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+
IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFNlZSBpZiB3ZSBjYW4gcmV1c2Ug
dGhlIG9uLWhhcmR3YXJlIGltYWdlLgotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJ
bWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
KSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFy
Z2V0OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRl
clRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0
bWFwPiBpbWFnZTsKLSAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlz
IG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0
byB0ZXN0IGZhaWx1cmVzLgotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9y
ZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRD
b3B5QmFja2luZ1N0b3JlOwotCi0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBu
dW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
IWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29w
eUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAg
RDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCks
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKLSAgICAgICAgICAgIGltYWdlLT5Db3B5RnJvbU1l
bW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBp
bWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBt
X2RhdGEuY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVu
ZGVyVGFyZ2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJ
bWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFn
ZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZj
b250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAg
ICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KSkgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAg
ICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VG
b3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAg
ICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFn
ZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhl
bEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5n
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0K
LQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5z
aW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlm
IChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0
KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lz
dGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAg
ICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4g
bV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3Jj
UmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAx
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17
Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVz
aENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7
Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2Fs
ZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291
cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1
dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJj
ZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpLCAxKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB7IH07Ci19Ci0KLVN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1h
Z2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVh
bGl0eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENv
bG9yU3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI3MGFiZWRmMGE2MzUwZmQ1NTk0OGQ0ODFhYjc4OTVmNjIwYjQ4YzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorCisjaWYgVVNFKERJUkVDVDJE
KQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNs
dWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgiCisjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUg
PHdpbmNvZGVjLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQor
eworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29u
dGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBh
dXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJl
bmRlclRhcmdldCgpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAg
ICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsK
KworICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJU
YXJnZXRPZlNpemUoc2l6ZSwgcmVuZGVyVGFyZ2V0LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
ICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIg
Yml0bWFwOworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJmJpdG1h
cCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJp
dG1hcENvbnRleHQuZ2V0KCksIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9C
aXRtYXBJZk5lZWRlZCgpOworICAgIH0sIFt0aGlzXSgpIHsKKyAgICAgICAgbV9kYXRhLm1hcmtC
dWZmZXJPdXRPZlN5bmMoKTsKKyAgICB9KTsKKworICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KHBsYXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4dCksIFdURk1vdmUoYml0bWFwKSkpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9
CisKK0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0Zm9ybUNvbnRleHQsIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwgTmF0aXZlSW1hZ2VQdHImJiBi
aXRtYXApCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0
KFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRl
eHQpKQorICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQoreworfQorCitHcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuZmx1c2goKTsKK30KKworTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRt
YXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1h
cFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7CisgICAgaHIgPSBiaXRtYXBUYXJn
ZXQtPkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29w
eSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KKyAgICBpZiAoY29weUJl
aGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQorICAg
ICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKworICAgIENoZWNrZWQ8
c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5
dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3Jl
KSB7CisgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVj
dChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7CisgICAgICAgIGltYWdlLT5D
b3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5kYXRhLmRhdGEo
KSwgMzIpOworCisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgTmF0aXZl
SW1hZ2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBi
b3VuZHMpCit7CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VT
aXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5k
cy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgeworICAgICAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1h
cFRhcmdldCwgYm91bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKKyAgICAgICAg
ICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBi
b3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAt
PkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7CisgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1h
cDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJl
ZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJp
dG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1h
Z2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykK
KyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJn
ZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBG
SVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmICht
X3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJl
c29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2
aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKKworICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2Fz
dDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFw
VGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgp
LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBU
YXJnZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVu
ZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VD
Q0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBOYXRpdmVJbWFnZVB0
ciBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0Lmdl
dCgpLCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KQoreworICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworCisgICAgaWYgKCFyZW5k
ZXJUYXJnZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICBpZiAobV9wbGF0Zm9ybUNv
bnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkgeworICAgICAgICBDT01QdHI8
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0
KTsKKyAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgeworICAgICAgICAgICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBiYWNraW5nQml0bWFwOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBU
YXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGJhY2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBi
aXRtYXA7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFw
IHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgorICAgICAgICAgICAgICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gY29waWVkQml0bWFwOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0
MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRy
LCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvcGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHNpemUgPSBtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCk7
CisgICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOworCisgICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVp
Z2h0ICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRh
cmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KKyAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBk
YXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlz
IG9wZW4uCisgICAgY29udGV4dC0+ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNl
Q29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VD
b250ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKKyAg
ICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFw
UHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09Q
VElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKKyAgICBIUkVTVUxU
IGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fYml0bWFwLT5HZXRQaXhl
bFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRp
ZXMsICZzb3VyY2VDUFVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAo
bnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpOworICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBl
ZFNvdXJjZURhdGE7CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJ
T05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4g
dGFyZ2V0RGV2aWNlQ29udGV4dDsKKyAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZh
Y2UoJnRhcmdldERldmljZUNvbnRleHQpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKwor
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKKyAgICBociA9IHRhcmdl
dERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBw
ZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRt
YXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRCho
cikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAt
PlVubWFwKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVn
aW5EcmF3KCk7CisKKyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgYXV0byBjb21wYXRpYmxlQml0
bWFwID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVu
ZGVyVGFyZ2V0KCkpOworCisgICAgRmxvYXRTaXplIGN1cnJlbnRJbWFnZVNpemUgPSBuYXRpdmVJ
bWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1cnJlbnRJbWFnZVNpemUuaXNa
ZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFn
ZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNv
cHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBE
b250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gImRh
dGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0JHUkFEYXRhKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1Jl
ZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURh
dGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBudWxscHRyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDE1NjA3ZjM2NDNk
YmE3ZWU1ZWVmZjJmNzFhYzM5Mzk2MDA3ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIklt
YWdlQnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRl
eHQoKSBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRl
OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworICAgIE5hdGl2ZUltYWdl
UHRyIG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJW
aWRlb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDQ5MzY3Y2IyOWQwZjIwZDE3MTIyMGIzMjAwYzk0
ZTVjY2QzNzAxYmQuLjMyYmY4NmJjNmZiNjhjMWU2ZDYzZGVkODc2Mjc1MzUzZDU0YWZiODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAgICAgICAgIGludCBmcHNOdW1l
cmF0b3IsIGZwc0Rlbm9taW5hdG9yOwogICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rp
b24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5vbWluYXRvcik7Ci0gICAgICAg
IGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBh
dXRvIGltYWdlU2l6ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwogICAgICAgICBhdXRv
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLAogICAg
ICAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwKICAgICAgICAgICAgICJ3
aWR0aCIsIEdfVFlQRV9JTlQsIGltYWdlU2l6ZS53aWR0aCgpLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5YjQ4MzU0MjJjNTdhNDFkZGE3
NWEwYmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUxYTkwMmZlM2RiNmVmZmIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNs
dWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxT
aGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNo
b2xkLCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5k
cmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsK
IAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VS
ZWN0LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKKyAgICAg
ICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURhdGEgJiYgaW1hZ2VEYXRhLT5k
YXRhKCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAg
ICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsK
ICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMg
Zm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xkID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQsIDAs
IDEpICogMjU1LjBmKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBkNzg2OTRhYWU3YjM1OTJiMzYyNTI2N2Q5NTAw
MTY2YWJlMDUwZmY5Li5lMjg1OTJhODA1NjNiZGQ4NWFhMjQ3ZDVjOGUwYjE1NWI5YzE4MjM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTM0NSw3ICszNDUsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1
ZmZlckZvcmVncm91bmQoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdQogICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKICAg
ICAgICAgSW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5k
aW5nQm94LnNpemUoKSk7CiAgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxp
bnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgp
KSksIHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdodCgpICog
dHJhbnNmb3JtLnlTY2FsZSgpKSkpOwotICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkpCisgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVm
ZmVyLT5iYWNrZW5kU2l6ZSgpKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIucmVzZXQoKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApp
bmRleCA5ZmJiMWZkZjBkODI3ODg0NjY1Y2VjNzczN2IzMTBiNTAzMWQ0MGM1Li4wZjg4NDI5MDBm
ODUxYTdkOTJmODg2Y2E2NmY5MWE5MTBlOWZlZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC04NDAsNyArODQwLDcgQEAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3QK
ICAgICBpZiAoIXNuYXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8g
c2hhcmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hv
dC0+aW50ZXJuYWxTaXplKCksIHsgfSk7CisgICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5iYWNrZW5kU2l6ZSgpLCB7IH0p
OwogICAgIGlmICghc2hhcmVkU25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMTRjMTE3ZmJjNzdjY2M4MDZhMGI3OGZjZjkzYWNiZWY1M2M1OGRiNS4uNjFjOTk2ODZh
ZWFhOTZhNmFiYzNmOTRlM2M3YWZiODExMDFhMTg4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDIwLTAyLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgQ3JlYXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBE
aXNwbGF5TGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA3MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGV4dHJhIHJlY29yZGluZyBoYXBwZW5zIGJlY2F1c2UgQ2FudmFzQmFzZTo6c2V0SW1h
Z2VCdWZmZXIoKSB1c2VkIHRvCisgICAgICAgIGlzc3VlIGl0cyBHcmFwaGljc0NvbnRleHQgY29t
bWFuZHMgZGlyZWN0bHkgdG8gdGhlIGJhY2tlbmQuIFdpdGggdGhpcyAKKyAgICAgICAgcGF0Y2gs
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgZG9lcyBub3QgYWxsb3cgYWNjZXNzIHRvIHRoZSBiYWNr
ZW5kIGNvbnRleHQuCisgICAgICAgIFNvIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRz
IGhhcyB0byBiZSByZWNvcmRlZC4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0yOCAgSmFjb2IgVXBob2ZmICA8amFj
b2JfdXBob2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNjb3ZlcmVkIHNvbWUgZXhwZWN0ZWQg
dGltZW91dHMgb24gdGhlIHRlc3QgaGlzdG9yeSwgY2hhbmdpbmcgZXhwZWN0YXRpb25zIHRvIGV4
cGVjdCB0aGUgdGltZW91dHMgdG8gcGFzcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5
MWI3MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0
MWM2YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAK
ICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZs
YWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkx
MikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAg
KHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQg
KDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389506</attachid>
            <date>2020-02-03 07:41:37 -0800</date>
            <delta_ts>2020-02-18 20:27:48 -0800</delta_ts>
            <desc>Patch  for review</desc>
            <filename>ImageBuffer-Pacthes-07.patch</filename>
            <type>text/plain</type>
            <size>26833</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNGMxMTdmYmM3Ny4uNjFjOTk2ODZhZWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAyMC0wMi0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBlIGZvciBkcmF3aW5nIG9uIGEg
RGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBleHRyYSByZWNvcmRpbmcgaGFwcGVucyBiZWNhdXNlIENhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKCkgdXNlZCB0bworICAgICAgICBpc3N1ZSBpdHMgR3JhcGhpY3NDb250ZXh0IGNv
bW1hbmRzIGRpcmVjdGx5IHRvIHRoZSBiYWNrZW5kLiBXaXRoIHRoaXMgCisgICAgICAgIHBhdGNo
LCBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIGRvZXMgbm90IGFsbG93IGFjY2VzcyB0byB0aGUgYmFj
a2VuZCBjb250ZXh0LgorICAgICAgICBTbyBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dCBjb21tYW5k
cyBoYXMgdG8gYmUgcmVjb3JkZWQuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEtMjggIEphY29iIFVwaG9mZiAgPGph
Y29iX3VwaG9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzY292ZXJlZCBzb21lIGV4cGVjdGVk
IHRpbWVvdXRzIG9uIHRoZSB0ZXN0IGhpc3RvcnksIGNoYW5naW5nIGV4cGVjdGF0aW9ucyB0byBl
eHBlY3QgdGhlIHRpbWVvdXRzIHRvIHBhc3MuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3
OTFiNzIuLjM0Yzg3YjliMDQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAK
ICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZs
YWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkx
MikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAg
KHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQg
KDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDUxMzgxMTlmNDhkLi4xYjcyMTJmNTFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU2IEBACisyMDIwLTAyLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdp
bmcgb24gYSBEaXNwbGF5TGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciBpbmhlcml0cyBJbWFnZUJ1ZmZlciBh
bmQgRHJhd2luZ0NvbnRleHQuIFRoZSAKKyAgICAgICAgZHJhd2luZyBjb250ZXh0IHdpbGwgYmUg
dGhlIGNvbnRleHQgb2YgdGhlIGRpc3BsYXkgbGlzdC4gVGhlIEltYWdlQnVmZmVyCisgICAgICAg
IG9wZXJhdGlvbnMgd2lsbCBlbnN1cmUgdGhlIHJlY29yZGVkIGRpc3BsYXktbGlzdCBpcyByZXBs
YXllZCBiYWNrIGJlZm9yZQorICAgICAgICBnZXR0aW5nIHRoZSBwaXhlbHMgb2YgdGhlIEltYWdl
QnVmZmVyQmFja2VuZC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFz
VGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5
RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52
YXNFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdl
QnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1
bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjp0
cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6fkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQ6OmRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6ZGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
cmVwbGF5RGlzcGxheUxpc3QpOgorCiAyMDIwLTAxLTMxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgZGlmZmVyZW50IGJhY2stZW5k
cyBmb3IgSW1hZ2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA4MTZlYWQ4MTQyMi4uMGQ1OTFjODJhZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk1
NzgsNiArOTU3OCw4IEBACiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRl
ZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZG
NyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgz
IC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNUUyM0U1RjUzRjAwRTNC
NTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjM5NDA2MDIzRTVGNTY3MDBFM0I1NDUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdF
NTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRN
aW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjkzLDYgKzE2Njk1LDcgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8sCiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJ
CQkJNzIzOTQwNjAyM0U1RjU2NzAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aCAqLywKIAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5j
cHAgKi8sCiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMu
aCAqLywKIAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAgKi8sCkBAIC0yNDk0Nyw2ICsyNDk1MCw3IEBACiAJCQkJNEI3QUU0OTIyMTc3QjU2RjAw
QzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAz
MkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8q
IERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJCTcyMzk0MDVFMjNFNUY1M0YwMEUzQjU0NSAvKiBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCiAJCQkJNDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJCQkJNDlBRjJENjgxNDQzNUQwNTAw
MTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICovLAogCQkJCTJEMjlFQ0MxMTkyRUND
ODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBmNWU3NjUwMDY5YS4uNDJh
NjVkM2E5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJD
YW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisj
aW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpA
QCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2NvbnRl
eHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQoKS5p
blF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxh
eWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KICAg
ICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MjIsMzkgKzgyMCwy
NyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5
TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAgICAg
cmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5
TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkp
CisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhUTUxDYW52
YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxh
Z3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5
RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAog
ewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2Nv
bnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIo
KSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUsMjIgQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAh
aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQogICAgIGF1dG8gaG9zdFdpbmRv
dyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRv
Y3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAgICAv
LyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2Fu
dmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdF
bmFibGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNj
ZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKwogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewog
ICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxl
cmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKaW5kZXggYjUyODY0NWM2NTguLjQyMTM0YTEyMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFs
SW1hZ2VCdWZmZXIuaAppbmRleCA3ZjU0NWUzYTkyMC4uMjU4ZGRlNzIzZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oCkBAIC0zMiwyMCArMzIsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdGVtcGxhdGU8
dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBjbGFzcyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgOiBwdWJs
aWMgSW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IENvbnRleHR1YWxJbWFn
ZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBhdXRvIGJh
Y2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIGlmICghYmFja2VuZCkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENvbnRleHR1YWxJ
bWFnZUJ1ZmZlcj4obmV3IENvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKSk7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1h
Z2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29u
dGV4dHVhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CiAgICAgewogICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUs
IGNvbnRleHQpOwogICAgICAgICBpZiAoIWJhY2tlbmQpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI+KG5ldyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAgICAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVy
VHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC02Niw2ICs2OCw3IEBAIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKICAg
ICB9CiAKQEAgLTc5LDQ2ICs4Miw1NSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFj
a2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250
ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAg
ICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKICAgICB9
CiAKICAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAg
ICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3
aW5nQ29udGV4dCgpOwogICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJl
aGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAg
ICBtX2JhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKICAgICB9CiAKICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKICAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKICAgICB9CiAKICAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3Zl
cnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgcmV0
dXJuIG1fYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogICAgIH0KIAogICAgIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9J
bWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwog
ICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1h
c2soKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAg
ICAgICBtX2JhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKICAgICB9CiAKICAgICB2
b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNw
YWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOwogICAgICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29s
b3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCmluZGV4
IDhiMTM3ODkxNzkxLi45ZGIwZjBkZmJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMSArMSw3
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwogCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIgOiBwdWJsaWMgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5nIEJhc2VDb250ZXh0dWFsSW1h
Z2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4g
QmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywg
c2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnRl
bXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXplLCBjb250ZXh0LCBzaXpl
KTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxC
YWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAg
ICA6IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAg
ICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKwor
ICAgIH5EaXNwbGF5TGlzdEltYWdlQnVmZmVyKCkKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChCYXNlQ29udGV4dHVhbEltYWdl
QnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApp
bmRleCAwZmViMTEyZjJlNS4uY2EzOTgwMTdiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTQ4LDYgKzQ4LDE0IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluCiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBicmVhazsKKworICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1h
Z2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAg
ICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6Cisg
ICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRm
b3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJl
dHVybiBpbWFnZUJ1ZmZlcjsKQEAgLTY1LDYgKzczLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyCiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKICAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IHJldHVybiBpbWFnZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCmluZGV4IGU1YzAzZTRkZjg2Li4zNTUxZjQ1ZjgyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0zMiw2ICsz
MiwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7
CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KKwogY2xhc3MgSW1hZ2VCdWZmZXIgewogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRv
dyogPSBudWxscHRyKTsKQEAgLTU2LDYgKzYwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmbHVz
aENvbnRleHQoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lk
IGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KKwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxT
aXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2VCdWZmZXIuaAppbmRleCBlMDliZjJjMGRhZi4uYjQzYTg3MTljZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29udGV4
dHVhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgog
CiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCkBA
IC02MSw1ICs2Miw3IEBAIHVzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQgPSBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhCiAKIHVzaW5nIFBsYXRmb3Jt
SW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kPjsKIHVzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZl
ciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsK
K3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCmluZGV4IDY5ZDhhZTgxYzg0Li41YzIyNGU4ZjQ1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aApAQCAtMzAsNiArMzAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFJlbmRl
cmluZ01vZGUgOiB1aW50OF90IHsKICAgICBBY2NlbGVyYXRlZCwKICAgICBVbmFjY2VsZXJhdGVk
LAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3QsCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaAppbmRleCA4YjEzNzg5MTc5MS4uMTI5MmIxY2U0OGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMSArMSw3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3Qu
aCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxp
c3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4
dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxp
c3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlz
cGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBG
bG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAg
fSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9
CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsg
fQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lk
IHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
CisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9
CisKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQs
IG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkK
KyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVw
bGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlz
dCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBs
YXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxz
ZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391136</attachid>
            <date>2020-02-18 20:27:50 -0800</date>
            <delta_ts>2020-02-19 09:08:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207109-20200218202749.patch</filename>
            <type>text/plain</type>
            <size>26250</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA2NWJmMmI5N2ExM2U4
ZWIyNDE1OGZlODM4ZTc1OGFhMjcwOGYyOC4uOWQ3YTUzZTM5NDZmNTg3M2Y2ZTNmMDQ4MDcxYTFl
ZTQ1YmY2NmNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIwLTAyLTE4ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRl
IGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzcGxheUxpc3Q6
OkltYWdlQnVmZmVyIGluaGVyaXRzIENvbmNyZXRlSW1hZ2VCdWZmZXIgYW5kIERyYXdpbmdDb250
ZXh0LgorICAgICAgICBUaGUgZHJhd2luZyBjb250ZXh0IHdpbGwgYmUgdGhlIGNvbnRleHQgb2Yg
dGhlIGRpc3BsYXkgbGlzdC4gVGhlIG9wZXJhdGlvbnMKKyAgICAgICAgb2YgQ29uY3JldGVJbWFn
ZUJ1ZmZlciB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoZSByZWNvcmRlZCBkaXNwbGF5LWxpc3QgaXMK
KyAgICAgICAgcmVwbGF5ZWQgYmFjayBiZWZvcmUgZ2V0dGluZyB0aGUgcGl4ZWxzIG9mIHRoZSBJ
bWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxp
c3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJl
cGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNyZWF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKToK
KwogMjAyMC0wMi0xOCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEFsbG93IGRpZmZlcmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNzhjODM3YThjODQ5NWZkMTNiYzljNzFhZmVmZmZmMWNjZWU2NjBmMy4uYzFiMTcyMWZjM2M0
YTE2MjE1ZTRjNGU1YmU3ZWZhODlmZjQ2MWM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTU5OSw2ICs5NTk5LDggQEAKIAkJ
NzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUg
LyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlG
MUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJGMUFEQTAxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRGcmFnRGVwdGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEQTExQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0
aC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhURnJhZ0RlcHRoLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg2LDYgKzE2Njg4LDggQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJ
CQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJF
QTA5RjkyM0ZDQ0M2QTAwODUwNEE1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywK
KwkJCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
ICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNw
cCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5o
ICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVy
LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
ZjVlNzY1MDA2OWE2ZDg2OTBkOTQzZGVlMjZiYjM2MWY5MTg5Y2UzMS4uOWIwM2VmNjY1N2ZkMWJh
MTYyZDY1Zjg4MDk4NGQ4ZDBhMzRhMTdjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVu
dC5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCkBAIC0zNDksOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlw
ZSkKIAogICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0
aGlzLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyht
X3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8gbWFr
ZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZv
ciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
QEAgLTgyMiwzOCArODIwLDI5IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2Vs
ZXJhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcp
CiB7Ci0gICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxheUxpc3REcmF3
aW5nID0gdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyht
X3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpz
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQog
ewotICAgIGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CiAKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1f
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwogfQog
CiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFzVGV4dChmbGFn
cyk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNU
ZXh0KGZsYWdzKTsKIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxDYW52
YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0Rmxh
Z3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
bV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwor
ICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJu
IGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQo
ZmxhZ3MpOwogCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtODg5LDExICs4NzgsMjIgQEAg
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlm
ICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQogICAg
IGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXco
KS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51
bGxwdHI7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0
IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1f
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNw
bGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlOworICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdN
b2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxp
c3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZDsK
KyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUo
KSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
cmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAg
aWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRl
eHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9z
aXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5
MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEyMjk0MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFh
NzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTE2MSw3
ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsK
IAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRp
b25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKaW5kZXggNjU2YjMxYTFkOWM3
Nzc5MTNjYWEwZGY5N2RmMjg5YjA0MzlhYzM3OS4uODI1Njk1YjYyYjRkNWUwM2JhM2E5NGM1NGYy
YjU4Zjk5NTkwY2RlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMzIsMjAgKzMyLDIyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgogY2xhc3MgQ29uY3Jl
dGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJU
eXBlID0gQ29uY3JldGVJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiAgICAg
ewogICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIGlmICghYmFja2Vu
ZCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPENvbmNyZXRlSW1hZ2VCdWZmZXI+KG5ldyBDb25jcmV0ZUltYWdlQnVmZmVyKFdURk1v
dmUoYmFja2VuZCkpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
clR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBDb25jcmV0ZUltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCiAgICAgewogICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6
Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAgICBpZiAoIWJhY2tlbmQpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDb25jcmV0
ZUltYWdlQnVmZmVyPihuZXcgQ29uY3JldGVJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKSk7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1h
Z2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKICAgICB9CiAKIHByb3RlY3RlZDoKQEAgLTY2LDYgKzY4LDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQogICAgIHsKKyAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4
dCgpOwogICAgIH0KIApAQCAtNzksNDYgKzgyLDU1IEBAIHByb3RlY3RlZDoKIAogICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBjb25zdF9j
YXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwog
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
ICAgICB9CiAKICAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQogICAg
IHsKKyAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weUltYWdlKGNv
cHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICB9CiAKICAgICB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAg
ICAgICAgbV9iYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CiAgICAgfQogCiAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdp
bmdDb250ZXh0KCk7CiAgICAgICAgIG1fYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7CiAgICAgfQogCiAgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgp
IG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAg
IHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKICAgICB9CiAKICAgICBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCiAgICAgeworICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJ
bnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKICAgICB9CiAKICAgICB2b2lkIGRyYXdDb25z
dW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKICAgICAgICAgbV9iYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
ICAgICAgICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CiAgICAgfQogCiAg
ICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29s
b3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKICAgICAgICAgbV9iYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNy
Y0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCA0YTNmYmVhZTllN2Nh
NmZlMTk5ODJkZDRlYzkzZDdiZDRlODk5YTIzLi5hOGQ5OTllM2EyN2MzNGU2MDY5MTg3NThjN2Mw
ZDZmYjlmNmEwN2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuY3BwCkBAIC00OCw2ICs0OCwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bgogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBV
bmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1h
Z2VCdWZmZXIgPSBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRl
ZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0g
RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CkBAIC02NSw2ICs3MywxNCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBHcgogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1h
Z2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxp
c3RBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2Vs
ZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNv
bnRleHQpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCBhMGIwNGFmZTI3ZDM4NTgwODc2NmFjNmMyYjE3Mzc1M2Q0MDU4MmI0Li5hYmZiYTNlNzEwODA2
MWI1NzVmNTZlYjc5MTNjNWI4MGNjZDNlNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdpbmdDb250
ZXh0OworfQorCiBjbGFzcyBJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1
cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtNTcsNiArNjEsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAorICAgIHZpcnR1YWwg
RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51
bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIHsgfQorCiAg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJ
bnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCmluZGV4IDhmNDY5MDEx
N2IzNWU5OTFjMmEwMmVjN2UwYzdlNGQxMzI1YjE1OTIuLmUwMTc0YTc4Yzg4NGRjYjA3N2Q2OWI0
MDFhNGEzZmJmZDVjNjg2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29uY3JldGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkRp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCIKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oIgpAQCAtNjEsNSArNjIsNyBAQCB1c2luZyBBY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZCA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ7CiAK
IHVzaW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IENvbmNyZXRlSW1hZ2VCdWZmZXI8VW5h
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CiB1c2luZyBBY2NlbGVyYXRlZEltYWdlQnVm
ZmVyID0gQ29uY3JldGVJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47
Cit1c2luZyBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0
OjpJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIERp
c3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZl
cjxBY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aAppbmRleCA2OWQ4YWU4MWM4NDhiMTBlNmYyZDA3YTc4OWIxNmMzMzNkYzIzY2I0Li45ZDgzZGM4
ZDE1MjRjMTMzNGMwOWVhZmNlMzExM2YwNTBjNzU1OTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCkBAIC0zMCw2ICszMCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3Qgewog
ICAgIEFjY2VsZXJhdGVkLAogICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQsCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMjkyYjFjZTQ4ZmM0NGMxODE1Y2U3NzRjZTFiOTVjNzM2NTUyZWJm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5o
IgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0
IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlz
dENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNw
bGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZs
b2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICB9
KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgIH0K
KyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9
CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZvaWQg
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkK
KyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5
TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAgIH0K
KworICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4dCwg
bV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQor
ICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0sIG1f
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBs
YXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlMaXN0
IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3JlcGxh
eURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNl
IH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1NDcyMjg0OTI2NTg5OTU1
NDhhYTI0YjMwN2MxNjU5MTI3ZDE5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25jcmV0ZUltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNr
ZW5kVHlwZT4KK2NsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIENvbmNyZXRlSW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+ICwgcHVibGljIERyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlciA9IENvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitw
dWJsaWM6CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXV0
byBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnRl
bXBsYXRlIGNyZWF0ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgY29udGV4dCwgc2l6ZSk7CisgICAgfQor
CisgICAgSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNr
ZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRHJhd2luZ0NvbnRleHQoc2l6
ZSkKKyAgICB7CisgICAgfQorCisgICAgfkltYWdlQnVmZmVyKCkKKyAgICB7CisgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICB9CisKKyAgICBEcmF3aW5nQ29udGV4dCogZHJhd2lu
Z0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERyYXdp
bmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250
ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNw
bGF5TGlzdChCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9Owor
Cit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWQ1YjY4
MzkzNTU2MjJkYzFjM2Y0NTM1ZGNjMjhiMTkxYjlhZGI5Ny4uYTc3ZWYyYWUwN2NjM2ZiY2MzOGUz
ZmQ4ZTQ2ZDEzYjUwMGVmMzE0YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTAyLTE4ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jl
YXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGV4dHJh
IGNvbW1hbmRzIGFyZSByZWNvcmRlZCBieSBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcigpIHdo
aWNoCisgICAgICAgIHVzZWQgdG8gaXNzdWUgdGhlc2UgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRz
IGRpcmVjdGx5IHRvIHRoZSBiYWNrZW5kLgorICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIERpc3Bs
YXlMaXN0OjpJbWFnZUJ1ZmZlciBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8gdGhlCisgICAgICAg
IGJhY2tlbmQgY29udGV4dC4gU28gYWxsIHRoZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgaGFz
IHRvIGJlIHJlY29yZGVkLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTAyLTE4ICBKYWNvYiBVcGhvZmYgIDxqYWNvYl91
cGhvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZWQgcmVzdWx0cyBkdWUgdG8gQU5HTEUg
dXNlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXkt
bGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3Bs
YXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0NDc5YjRkYzdm
ZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUyMGI4ZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1s
aXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAocmVzdG9yZS1p
bmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChmaWxsLWNvbG9y
ICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2UtdGhpY2tuZXNz
IDEuMDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zv
cm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAg
KHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391168</attachid>
            <date>2020-02-19 09:08:16 -0800</date>
            <delta_ts>2020-02-20 10:01:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207109-20200219090816.patch</filename>
            <type>text/plain</type>
            <size>27442</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA2NWJmMmI5N2ExM2U4
ZWIyNDE1OGZlODM4ZTc1OGFhMjcwOGYyOC4uYjc2ZDE4NTI5MzA3NWExNzQ5MzUwMzc4NjIwZTUy
YjM0MDgzMzQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDIwLTAyLTE4ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRl
IGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzcGxheUxpc3Q6
OkltYWdlQnVmZmVyIGluaGVyaXRzIENvbmNyZXRlSW1hZ2VCdWZmZXIgYW5kIERyYXdpbmdDb250
ZXh0LgorICAgICAgICBUaGUgZHJhd2luZyBjb250ZXh0IHdpbGwgYmUgdGhlIGNvbnRleHQgb2Yg
RHJhd2luZ0NvbnRleHQuIFRoZSBvcGVyYXRpb25zCisgICAgICAgIG9mIENvbmNyZXRlSW1hZ2VC
dWZmZXIgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGUgcmVjb3JkZWQgZGlzcGxheS1saXN0IGlzCisg
ICAgICAgIHJlcGxheWVkIGJhY2sgYmVmb3JlIGdldHRpbmcgdGhlIHBpeGVscyBvZiB0aGUgSW1h
Z2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxp
c3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJl
cGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgQWxsIHRoZSBEaXNwbGF5TGlz
dCBvcGVyYXRpb25zIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBEcmF3aW5nQ29udGV4dCBvZgorICAg
ICAgICB0aGUgSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIGNyZWF0ZUltYWdlQnVmZmVy
KCkgY2FuIGRlY2lkZSB0aGUgSW1hZ2VCdWZmZXIgdHlwZSBiYXNlZCBvbiB0aGUgc2V0dGluZ3MK
KyAgICAgICAgYW5kIHRoZSBzaXplIG9mIHRoZSBjYW52YXMuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJ
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgVGhlIHR5cGUgb2YgdGhlIEltYWdlQnVmZmVyIHdpbGwgYmUgcGFzc2Vk
IHRvIHRoaXMgZnVuY3Rpb24gc3VjaCB0aGF0CisgICAgICAgIGl0IGNhbiBjcmVhdGUgaW5zdGFu
Y2VzIG9mIGRlcml2ZWQgY2xhc3Nlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgor
ICAgICAgICBDcmVhdGUgSW1hZ2VCdWZmZXJzIHdoaWNoIHJlY29yZCB0aGUgZHJhd2luZyBjb21t
YW5kcyB0byBEaXNwbGF5TGlzdHMgYmVmb3JlCisgICAgICAgIGNvbW1pdHRpbmcgdGhlbSB0byB0
aGUgYmFjay1lbmRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3aW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5nQ29udGV4dCk6CisgICAgICAg
IEFkZCB2aXJ0dWFsIG1ldGhvZHMgdG8gc3VwcG9ydCBEaXNwbGF5TGlzdCBpbiBJbWFnZUJ1ZmZl
ci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6CisgICAgICAgIEFk
ZCBEaXNwbGF5TGlzdCB0eXBlcyB0byBSZW5kZXJpbmdNb2RlIGFuZCBkZWZpbmUgcGxhdGZvcm0g
dHlwZXMgZm9yCisgICAgICAgIERpc3BsYXlMaXN0IEltYWdlQnVmZmVycy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpzZXRUcmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKyAgICAgICAgVGhpcyBjbGFzcyBob2xk
cyBhIHJlY29yZGluZyBhbmQgYW4gb3B0aW9uYWwgcmVwbGF5aW5nIGJhY2sgRGlzcGxheUxpc3Rz
LgorICAgICAgICBJdCBhbHNvIHByb3ZpZGVzIGEgcmVjb3JkaW5nIEdyYXBoaWNzQ29udGV4dC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdl
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIERyYXdpbmcgY29tbWFuZHMgd2lsbCBiZSBy
ZWNvcmRlZCBmaXJzdCBiZWNhdXNlIGNvbnRleHQoKSBpcyBvdmVycmlkZGVuCisgICAgICAgIHRv
IHJldHVybiB0aGUgR3JhcGhpY3NDb250ZXh0IG9mIERyYXdpbmdDb250ZXh0LiBUaGVzZSBkcmF3
aW5nIGNvbW1hbmRzCisgICAgICAgIHdpbGwgYmUgZmx1c2hlZCBiZWZvcmUgZ2V0dGluZyB0aGUg
cGl4ZWxzIG9mIHRoZSBiYWNrLWVuZCBiZWNhdXNlIAorICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCkgaXMgb3ZlcnJpZGRlbiB0byByZXBsYXkgYmFjayB0aGUgcmVjb3JkZWQgRGlzcGxheUxp
c3QKKyAgICAgICAgdG8gdGhlIEdyYXBoaWNzQ29udGV4dCBvZiB0aGUgYmFjay1lbmQuCisKIDIw
MjAtMDItMTggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBbGxvdyBkaWZmZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1ZmZlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc4
YzgzN2E4Yzg0OTVmZDEzYmM5YzcxYWZlZmZmZjFjY2VlNjYwZjMuLmMxYjE3MjFmYzNjNGExNjIx
NWU0YzRlNWJlN2VmYTg5ZmY0NjFjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk1OTksNiArOTU5OSw4IEBACiAJCTcyQzE4
QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFQTA5RjkyM0ZDQ0M2QTAwODUwNEE1IC8qIERp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkw
NEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyRjFBREEwMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhURnJhZ0RlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyRjFBREExMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjY4Niw2ICsxNjY4OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBG
RTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJCTcyRUEwOUY5
MjNGQ0NDNkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCisJCQkJ
NzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8s
CiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywK
IAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGY1ZTc2
NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLjliMDNlZjY2NTdmZDFiYTE2MmQ2
NWY4ODA5ODRkOGQwYTM0YTE3Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIK
ICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCog
SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAK
ICAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywg
ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2Vz
RGlzcGxheUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3Vy
ZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhl
IENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04
MjIsMzggKzgyMCwyOSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRl
KGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewot
ICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9
IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2Vz
RGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAg
ICBpZiAodHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwogCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdp
bmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFj
a3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3Ry
aW5nIEhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNU
ZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwor
ICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChm
bGFncyk7CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxl
bWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZs
YWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29u
dGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKKyAgICBp
ZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdz
KTsKIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KQEAgLTg4OSwxMSArODc4LDIyIEBAIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdp
ZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRv
IGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJv
b3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRy
OworCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciBEaXNwbGF5TGlzdCBkcmF3
aW5nIG9uIGNhbnZhcy4KKyAgICBib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSBtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxp
c3REcmF3aW5nRW5hYmxlZCgpKTsKKworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZTsK
KyAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9
IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQ7CisgICAg
ZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRl
cmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChi
dWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYm
IG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5n
IHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2
MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYx
LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAg
ICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8
Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IDY1NmIzMWExZDljNzc3OTEz
Y2FhMGRmOTdkZjI4OWIwNDM5YWMzNzkuLjgyNTY5NWI2MmI0ZDVlMDNiYTNhOTRjNTRmMmI1OGY5
OTU5MGNkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bmNyZXRlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKQEAgLTMyLDIwICszMiwyMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KIGNsYXNzIENvbmNyZXRlSW1h
Z2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9
IENvbmNyZXRlSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAg
ICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBpZiAoIWJhY2tlbmQpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxDb25jcmV0ZUltYWdlQnVmZmVyPihuZXcgQ29uY3JldGVJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJh
Y2tlbmQpKSk7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBl
PihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJU
eXBlID0gQ29uY3JldGVJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQogICAgIHsKICAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0
ZShzaXplLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFiYWNrZW5kKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3JldGVJbWFn
ZUJ1ZmZlcj4obmV3IENvbmNyZXRlSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVm
ZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC02Niw2ICs2OCw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENvbnRleHQoKTsK
ICAgICB9CiAKQEAgLTc5LDQ2ICs4Miw1NSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBOYXRpdmVJbWFn
ZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxD
b25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAg
ICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CiAgICAg
fQogCiAgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Cisg
ICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdp
bmdDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVo
YXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CiAgICAgfQogCiAgICAgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
IG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAg
IG1fYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogICAgIH0KIAogICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOwogICAgICAgICBtX2JhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwogICAgIH0KIAogICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVy
cmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICByZXR1
cm4gbV9iYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiAgICAgfQogCiAgICAgUmVmUHRy
PEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b0lt
YWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiAgICAgfQogCiAgICAgdm9pZCBkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAg
ICAgICAgIG1fYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOwogICAgIH0KIAogICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFz
aygpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAg
ICAgIG1fYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogICAgIH0KIAogICAgIHZv
aWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3Bh
Y2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdpbmdD
b250ZXh0KCk7CiAgICAgICAgIG1fYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xv
clNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggNGEzZmJlYWU5ZTdjYTZmZTE5
OTgyZGQ0ZWM5M2Q3YmQ0ZTg5OWEyMy4uYThkOTk5ZTNhMjdjMzRlNjA2OTE4NzU4YzdjMGQ2ZmI5
ZjZhMDdiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcApAQCAtNDgsNiArNDgsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW4KICAg
ICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gRGlzcGxheUxpc3RBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3Bs
YXlMaXN0VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOwpAQCAtNjUsNiArNzMsMTQgQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Y29uc3QgR3IKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVm
ZmVyID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CiAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNw
bGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRl
ZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0g
RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0dXJuIGltYWdlQnVmZmVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggYTBi
MDRhZmUyN2QzODU4MDg3NjZhYzZjMmIxNzM3NTNkNDA1ODJiNC4uYWJmYmEzZTcxMDgwNjFiNTc1
ZjU2ZWI3OTEzYzViODBjY2QzZTY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0zMiw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsK
K30KKwogY2xhc3MgSW1hZ2VCdWZmZXIgewogcHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEg
bnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KQEAgLTU3LDYgKzYxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIERpc3Bs
YXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRy
OyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KKwogICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50U2l6
ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAppbmRleCA4ZjQ2OTAxMTdiMzVl
OTkxYzJhMDJlYzdlMGM3ZTRkMTMyNWIxNTkyLi5lMDE3NGE3OGM4ODRkY2IwNzdkNjliNDAxYTRh
M2ZiZmQ1YzY4NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkNvbmNyZXRlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmgiCiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCIKQEAgLTYxLDUgKzYyLDcgQEAgdXNpbmcgQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlckJhY2tlbmQgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kOwogCiB1c2lu
ZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdlQnVmZmVyPFVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwogdXNpbmcgQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9
IENvbmNyZXRlSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNp
bmcgRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdDo6SW1h
Z2VCdWZmZXI8VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBEaXNwbGF5
TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKaW5k
ZXggNjlkOGFlODFjODQ4YjEwZTZmMmQwN2E3ODliMTZjMzMzZGMyM2NiNC4uOWQ4M2RjOGQxNTI0
YzEzMzRjMDllYWZjZTMxMTNmMDUwYzc1NTk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaApAQCAtMzAsNiArMzAsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsKICAgICBB
Y2NlbGVyYXRlZCwKICAgICBVbmFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0
ZWQsCisgICAgRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkLAogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTI5MmIxY2U0OGZjNDRjMTgxNWNlNzc0Y2UxYjk1YzczNjU1MmViZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBs
YXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7Citw
dWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkK
KyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250
ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxp
c3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJl
Y3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAg
ICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAg
IGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25z
dCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAg
eworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisg
ICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlz
cGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAg
ICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIu
cmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rp
c3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNw
bGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTQ3MjI4NDkyNjU4OTk1NTQ4YWEy
NGIzMDdjMTY1OTEyN2QxOTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29uY3JldGVJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5
cGU+CitjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiAsIHB1YmxpYyBEcmF3aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRl
SW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGlj
OgorICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojp0ZW1wbGF0ZSBjcmVhdGU8SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIGF1dG8gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjp0ZW1wbGF0
ZSBjcmVhdGU8SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQsIHNpemUpOworICAgIH0KKworICAg
IEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwg
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
KFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERyYXdpbmdDb250ZXh0KHNpemUpCisg
ICAgeworICAgIH0KKworICAgIH5JbWFnZUJ1ZmZlcigpCisgICAgeworICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgfQorCisgICAgRHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250
ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3aW5nQ29u
dGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxp
c3QoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKworfSAv
LyBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFkNWI2ODM5MzU1
NjIyZGMxYzNmNDUzNWRjYzI4YjE5MWI5YWRiOTcuLmE3N2VmMmFlMDdjYzNmYmNjMzhlM2ZkOGU0
NmQxM2I1MDBlZjMxNGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wMi0xOCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBh
IG5ldyBJbWFnZUJ1ZmZlciB0eXBlIGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBleHRyYSBjb21t
YW5kcyBhcmUgcmVjb3JkZWQgYnkgQ2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoKSB3aGljaAor
ICAgICAgICB1c2VkIHRvIGlzc3VlIHRoZXNlIEdyYXBoaWNzQ29udGV4dCBjb21tYW5kcyBkaXJl
Y3RseSB0byB0aGUgYmFja2VuZC4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBEaXNwbGF5TGlz
dDo6SW1hZ2VCdWZmZXIgZG9lcyBub3QgYWxsb3cgYWNjZXNzIHRvIHRoZQorICAgICAgICBiYWNr
ZW5kIGNvbnRleHQuIFNvIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRzIGhhcyB0byBi
ZSByZWNvcmRlZC4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0
LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMi0xOCAgSmFjb2IgVXBob2ZmICA8amFjb2JfdXBob2Zm
QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2VkIHJlc3VsdHMgZHVlIHRvIEFOR0xFIHVzZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxp
c3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1
OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXgg
MCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgw
MDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAw
KQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAx
KSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0
IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391298</attachid>
            <date>2020-02-20 10:01:45 -0800</date>
            <delta_ts>2020-02-21 08:57:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207109-20200220100143.patch</filename>
            <type>text/plain</type>
            <size>30807</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzA2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDIwLTAyLTIwICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGEg
bmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzcGxheUxpc3Q6Oklt
YWdlQnVmZmVyIGluaGVyaXRzIENvbmNyZXRlSW1hZ2VCdWZmZXIgYW5kIERyYXdpbmdDb250ZXh0
LgorICAgICAgICBUaGUgZHJhd2luZyBjb250ZXh0IHdpbGwgYmUgdGhlIGNvbnRleHQgb2YgRHJh
d2luZ0NvbnRleHQuIFRoZSBvcGVyYXRpb25zCisgICAgICAgIG9mIENvbmNyZXRlSW1hZ2VCdWZm
ZXIgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGUgcmVjb3JkZWQgZGlzcGxheS1saXN0IGlzCisgICAg
ICAgIHJlcGxheWVkIGJhY2sgYmVmb3JlIGdldHRpbmcgdGhlIHBpeGVscyBvZiB0aGUgSW1hZ2VC
dWZmZXJCYWNrZW5kLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRl
Q29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2Vz
RGlzcGxheUxpc3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAg
ICAgQWxsIHRoZSBEaXNwbGF5TGlzdCBvcGVyYXRpb25zIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBE
cmF3aW5nQ29udGV4dCBvZgorICAgICAgICB0aGUgSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIGNyZWF0ZUltYWdlQnVmZmVyKCkgY2FuIGRlY2lkZSB0aGUgSW1hZ2VCdWZmZXIgdHlwZSBi
YXNlZCBvbiB0aGUgc2V0dGluZ3MKKyAgICAgICAgYW5kIHRoZSBzaXplIG9mIHRoZSBjYW52YXMu
CisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29u
Y3JldGVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgVGhlIHR5cGUgb2YgdGhlIEltYWdl
QnVmZmVyIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gc3VjaCB0aGF0CisgICAgICAg
IGl0IGNhbiBjcmVhdGUgaW5zdGFuY2VzIG9mIGRlcml2ZWQgY2xhc3Nlcy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICBDcmVhdGUgSW1hZ2VCdWZmZXJzIHdoaWNoIHJl
Y29yZCB0aGUgZHJhd2luZyBjb21tYW5kcyB0byBEaXNwbGF5TGlzdHMgYmVmb3JlCisgICAgICAg
IGNvbW1pdHRpbmcgdGhlbSB0byB0aGUgYmFjay1lbmRzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIEFkZCB2aXJ0dWFsIG1ldGhvZHMgdG8gc3VwcG9ydCBEaXNw
bGF5TGlzdCBpbiBJbWFnZUJ1ZmZlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdNb2RlLmg6CisgICAgICAgIEFkZCBEaXNwbGF5TGlzdCB0eXBlcyB0byBSZW5kZXJpbmdNb2Rl
IGFuZCBkZWZpbmUgcGxhdGZvcm0gdHlwZXMgZm9yCisgICAgICAgIERpc3BsYXlMaXN0IEltYWdl
QnVmZmVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5
ZWREaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dCBob2xkcyBhIHJlY29yZGluZyBhbmQgYW4gb3B0aW9uYWwgcmVwbGF5aW5nIAorICAgICAgICBi
YWNrIERpc3BsYXlMaXN0cy4gSXQgYWxzbyBwcm92aWRlcyBhIHJlY29yZGluZyBHcmFwaGljc0Nv
bnRleHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpOgorICAgICAgICBEcmF3aW5nIGNvbW1hbmRzIHdp
bGwgYmUgcmVjb3JkZWQgZmlyc3QgYmVjYXVzZSBjb250ZXh0KCkgaXMgb3ZlcnJpZGRlbgorICAg
ICAgICB0byByZXR1cm4gdGhlIEdyYXBoaWNzQ29udGV4dCBvZiBEcmF3aW5nQ29udGV4dC4gVGhl
c2UgZHJhd2luZyBjb21tYW5kcworICAgICAgICB3aWxsIGJlIGZsdXNoZWQgYmVmb3JlIGdldHRp
bmcgdGhlIHBpeGVscyBvZiB0aGUgYmFjay1lbmQgYmVjYXVzZSAKKyAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpIGlzIG92ZXJyaWRkZW4gdG8gcmVwbGF5IGJhY2sgdGhlIHJlY29yZGVkIERp
c3BsYXlMaXN0CisgICAgICAgIHRvIHRoZSBHcmFwaGljc0NvbnRleHQgb2YgdGhlIGJhY2stZW5k
LgorCiAyMDIwLTAyLTIwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0xGQ10gU29tZXRpbWVzIHN1YmZyYW1lcyBkb24ndCBldmVuIGhhdmUgZG9jdW1lbnQgZWxl
bWVudHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU3MDA4KQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5MDEsNiArMTkwMSw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUv
YXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU3MDA4KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC04NjM2LDYgKzg2MzYsNyBAQAogCQk1NUJFMDI1RDIyM0IyOUM0MDAzMkYwOEEgLyogU1ZH
QW5pbWF0ZWRQcm9wZXJ0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdBbmltYXRlZFByb3Bl
cnR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNUUyMjNCMjlDNDAw
MzJGMDhBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NUJFMDI1RjIyM0IyOUM1MDAzMkYwOEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRp
dmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5
MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NURDQzUxQzIyNDA2MDVFMDBDMjZFMzIgLyogU1ZHQW5pbWF0aW9u
RGlzY3JldGVGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uRGlzY3Jl
dGVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MUQy
MjQwNjE1NTAwQzI2RTMyIC8qIFNWR0FuaW1hdGlvbkRpc2NyZXRlRnVuY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0aW9uRGlzY3JldGVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTU5OSw2ICs5NjAwLDggQEAKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRp
bmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThE
MkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBF
WFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhU
RnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEQTAxQTM5
MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFWFRGcmFnRGVwdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJG
MUFEQTExQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRVhURnJhZ0RlcHRoLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2Njg2LDYgKzE2Njg5LDkgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkz
IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwICovLAorCQkJCTcyRUEwOUY5MjNGQ0ND
NkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCisJCQkJNzJFQTA5
RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkw
RkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJCQkJ
MEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJCQkw
RkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24g
MjU3MDA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5o
IgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkBAIC0zNDksOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBIVE1MQ2FudmFzRWxlbQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJl
cGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAg
Ly8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIg
Z2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwpAQCAtODIyLDM4ICs4MjAsMjkgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2hvdWxkQWNjZWxlcmF0ZQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlz
cGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAo
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlz
cGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
bV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNw
bGF5TGlzdFJlcGxheTsKIAotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1f
Y29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4
dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1M
Q2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdz
IGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1f
Y29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKKyAgICBpZiAo
YnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQoZmxhZ3MpOwog
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJl
cGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29u
c3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0
KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7CisgICAgaWYgKGJ1ZmZl
cigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpLT5yZXBsYXllZERpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5ZWREaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwog
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQpAQCAtODg5LDExICs4NzgsMjIgQEAgdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIGlmICghd2lkdGgoKSB8fCAhaGVp
Z2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQogICAgIGF1dG8gaG9zdFdpbmRvdyA9
IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRvY3Vt
ZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAgICAvLyBG
SVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFz
LgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFi
bGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2Vz
RGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZDsKKyAgICBlbHNlCisgICAgICAg
IHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwg
Q29sb3JTcGFjZTo6U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1
ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSk7CisKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5p
czJkKCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRz
IGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gMjU3MDA4KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBi
b29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9v
bD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dD4gbV9jb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjU3MDA4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMCArMzIsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBjbGFzcyBDb25jcmV0ZUltYWdlQnVmZmVy
IDogcHVibGljIEltYWdlQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBDb25jcmV0
ZUltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIGF1
dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKICAgICAgICAgaWYgKCFiYWNrZW5kKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3Jl
dGVJbWFnZUJ1ZmZlcj4obmV3IENvbmNyZXRlSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkp
OworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IElt
YWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IENv
bmNyZXRlSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
ICAgICB7CiAgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwg
Y29udGV4dCk7CiAgICAgICAgIGlmICghYmFja2VuZCkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENvbmNyZXRlSW1hZ2VCdWZmZXI+
KG5ldyBDb25jcmV0ZUltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUo
V1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikp
OwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtNjYsNiArNjgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdp
bmdDb250ZXh0KCk7CiAgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CiAgICAgfQog
CkBAIC03OSw0NiArODIsNTUgQEAgcHJvdGVjdGVkOgogCiAgICAgTmF0aXZlSW1hZ2VQdHIgY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJ
bWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIHJldHVy
biBtX2JhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwogICAgIH0KIAogICAg
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0g
Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBj
b25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4
dCgpOwogICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlk
ZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX2JhY2tl
bmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKICAgICB9
CiAKICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
ICAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKICAgICB9
CiAKICAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKICAg
ICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIG1fYmFj
a2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZT4g
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJl
c2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVz
ZXJ2ZVJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBv
dmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBt
X2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVy
cmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX2Jh
Y2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKICAgICB9CiAKICAgICB2b2lkIHRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RD
b2xvclNwYWNlKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OwogICAgICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwg
ZGVzdENvbG9yU3BhY2UpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3MDA4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyCiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZl
ciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAg
ICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2Vs
ZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKQEAgLTY1LDYgKzczLDE0IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBp
bWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNTcwMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBEaXNwbGF5
TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KKwogY2xhc3MgSW1hZ2VCdWZmZXIgewog
cHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24g
ZmFpbHVyZS4KQEAgLTU3LDYgKzYxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRl
eHQoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJh
d2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNo
RHJhd2luZ0NvbnRleHQoKSB7IH0KKwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50U2l6ZSBiYWNrZW5kU2l6ZSgpIGNvbnN0ID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI1NzAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25jcmV0ZUltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgogCiAjaWYgVVNFKENH
KQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCkBAIC02MSw1ICs2Miw3
IEBAIHVzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gVW4KIAogdXNpbmcgVW5h
Y2NlbGVyYXRlZEltYWdlQnVmZmVyID0gQ29uY3JldGVJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kPjsKIHVzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb25j
cmV0ZUltYWdlQnVmZmVyPEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIERp
c3BsYXlMaXN0VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3Q6OkltYWdlQnVm
ZmVyPFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgRGlzcGxheUxpc3RB
Y2NlbGVyYXRlZEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAko
cmV2aXNpb24gMjU3MDA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIEFjY2Vs
ZXJhdGVkLAogICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwK
KyAgICBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKKworRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUpCisgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxp
c3RDb250ZXh0KSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNwbGF5
TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0
UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIH0pCit7Cit9
CisKK3ZvaWQgRHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wg
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCit7CisgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAgIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5y
ZXNldCgpOworfQorCit2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQoreworICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVt
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENv
bnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KQorICAgICAgICBtX3JlcGxheWVkRGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBlbHNlCisgICAgICAgIHJlcGxheWVyLnJl
cGxheSgpOworICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKK30KKworfSAvLyBEaXNwbGF5TGlz
dAorfSAvLyBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3Jk
ZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlz
dCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4
dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhp
cykubV9jb250ZXh0OyB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVw
bGF5ZWREaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5n
ZXQoKTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sKTsKKyAg
ICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOworCitwcm90ZWN0ZWQ6
CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3Bs
YXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXllZERpc3Bs
YXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9
OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25j
cmV0ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIENv
bmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+IHsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJ
bWFnZUJ1ZmZlciA9IENvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6
CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6
OnRlbXBsYXRlIGNyZWF0ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXV0byBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnRlbXBsYXRl
IGNyZWF0ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgY29udGV4dCwgc2l6ZSk7CisgICAgfQorCisgICAg
SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBj
b25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIo
V1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgbV9kcmF3aW5nQ29udGV4dChzaXplKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgfkltYWdlQnVmZmVyKCkKKyAgICB7CisgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICB9CisKKyAgICBEcmF3aW5nQ29udGV4dCogZHJhd2lu
Z0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiAmbV9kcmF3aW5nQ29udGV4dDsgfQorCisgICAg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2RyYXdpbmdDb250ZXh0LmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZs
dXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5yZXBsYXlEaXNwbGF5TGlzdChCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
KTsKKyAgICB9CisgICAgCisgICAgRHJhd2luZ0NvbnRleHQgbV9kcmF3aW5nQ29udGV4dDsKK307
CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1NzAwOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDIwLTAyLTIwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUg
Zm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIGV4dHJhIGNvbW1hbmRzIGFyZSByZWNvcmRlZCBieSBD
YW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcigpIHdoaWNoCisgICAgICAgIHVzZWQgdG8gaXNzdWUg
dGhlc2UgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRzIGRpcmVjdGx5IHRvIHRoZSBiYWNrZW5kLgor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlciBkb2VzIG5v
dCBhbGxvdyBhY2Nlc3MgdG8gdGhlCisgICAgICAgIGJhY2tlbmQgY29udGV4dC4gU28gYWxsIHRo
ZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgaGFzIHRvIGJlIHJlY29yZGVkLgorCisgICAgICAg
ICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIw
LTAyLTE5ICBKYXNvbiBMYXdyZW5jZSAgPGxhd3JlbmNlLmpAYXBwbGUuY29tPgogCiAgICAgICAg
IFsgTWFjIF0gY3NzMy9zZWxlY3RvcnMzL3htbC9jc3MzLW1vZHNlbC1kMS54bWwgaXMgZmxha3kg
ZmFpbGluZy4KSW5kZXg6IExheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1s
aXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI1NzAwOCkKKysrIExh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAocmVzdG9yZS1pbmRl
eCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChmaWxsLWNvbG9yICND
ODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2UtdGhpY2tuZXNzIDEu
MDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1z
IDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAgKHJl
Y3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391406</attachid>
            <date>2020-02-21 08:57:16 -0800</date>
            <delta_ts>2020-02-21 12:26:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207109-20200221085715.patch</filename>
            <type>text/plain</type>
            <size>31990</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYzZmJkZWNmZmM2ZDkz
MDlhZTAxNmM0NTQwZDFlZGNkM2ZhMTdjMy4uZGVhNDlhZDIxNmI4MjNjNjFmNGVmMTQxNWYwNzIy
OTY5ZmIxMjJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDIwLTAyLTIxICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRl
IGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIERpc3BsYXlMaXN0OjpJ
bWFnZUJ1ZmZlciBpbmhlcml0cyBDb25jcmV0ZUltYWdlQnVmZmVyIGFuZCBEcmF3aW5nQ29udGV4
dC4KKyAgICAgICAgVGhlIGRyYXdpbmcgY29udGV4dCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIERy
YXdpbmdDb250ZXh0LiBUaGUgb3BlcmF0aW9ucworICAgICAgICBvZiBDb25jcmV0ZUltYWdlQnVm
ZmVyIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhlIHJlY29yZGVkIGRpc3BsYXktbGlzdCBpcworICAg
ICAgICByZXBsYXllZCBiYWNrIGJlZm9yZSBnZXR0aW5nIHRoZSBwaXhlbHMgb2YgdGhlIEltYWdl
QnVmZmVyQmFja2VuZC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAg
ICAgIEFsbCB0aGUgRGlzcGxheUxpc3Qgb3BlcmF0aW9ucyB3aWxsIGJlIHJvdXRlZCB0byB0aGUg
RHJhd2luZ0NvbnRleHQgb2YKKyAgICAgICAgdGhlIEltYWdlQnVmZmVyLgorCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAg
ICAgICBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNhbiBkZWNpZGUgdGhlIEltYWdlQnVmZmVyIHR5cGUg
YmFzZWQgb24gdGhlIHNldHRpbmdzCisgICAgICAgIGFuZCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFz
LgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bmNyZXRlSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBJbWFn
ZUJ1ZmZlciB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIHN1Y2ggdGhhdAorICAgICAg
ICBpdCBjYW4gY3JlYXRlIGluc3RhbmNlcyBvZiBkZXJpdmVkIGNsYXNzZXMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgQ3JlYXRlIEltYWdlQnVmZmVycyB3aGljaCBy
ZWNvcmQgdGhlIGRyYXdpbmcgY29tbWFuZHMgdG8gRGlzcGxheUxpc3RzIGJlZm9yZQorICAgICAg
ICBjb21taXR0aW5nIHRoZW0gdG8gdGhlIGJhY2stZW5kcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJh
d2luZ0NvbnRleHQpOgorICAgICAgICBBZGQgdmlydHVhbCBtZXRob2RzIHRvIHN1cHBvcnQgRGlz
cGxheUxpc3QgaW4gSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nTW9kZS5oOgorICAgICAgICBBZGQgRGlzcGxheUxpc3QgdHlwZXMgdG8gUmVuZGVyaW5nTW9k
ZSBhbmQgZGVmaW5lIHBsYXRmb3JtIHR5cGVzIGZvcgorICAgICAgICBEaXNwbGF5TGlzdCBJbWFn
ZUJ1ZmZlcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxh
eWVkRGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQgaG9sZHMgYSByZWNvcmRpbmcgYW5kIGFuIG9wdGlvbmFsIHJlcGxheWluZyAKKyAgICAgICAg
YmFjayBEaXNwbGF5TGlzdHMuIEl0IGFsc28gcHJvdmlkZXMgYSByZWNvcmRpbmcgR3JhcGhpY3ND
b250ZXh0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKToKKyAgICAgICAgRHJhd2luZyBjb21tYW5kcyB3
aWxsIGJlIHJlY29yZGVkIGZpcnN0IGJlY2F1c2UgY29udGV4dCgpIGlzIG92ZXJyaWRkZW4KKyAg
ICAgICAgdG8gcmV0dXJuIHRoZSBHcmFwaGljc0NvbnRleHQgb2YgRHJhd2luZ0NvbnRleHQuIFRo
ZXNlIGRyYXdpbmcgY29tbWFuZHMKKyAgICAgICAgd2lsbCBiZSBmbHVzaGVkIGJlZm9yZSBnZXR0
aW5nIHRoZSBwaXhlbHMgb2YgdGhlIGJhY2stZW5kIGJlY2F1c2UgCisgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKSBpcyBvdmVycmlkZGVuIHRvIHJlcGxheSBiYWNrIHRoZSByZWNvcmRlZCBE
aXNwbGF5TGlzdAorICAgICAgICB0byB0aGUgR3JhcGhpY3NDb250ZXh0IG9mIHRoZSBiYWNrLWVu
ZC4KKwogMjAyMC0wMi0yMSAgSmFjayBMZWUgIDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBOdWxscHRyIGNyYXNoIGluIFJlbmRlclN0eWxlOjppc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSB3aGVuIGZyYWdtZW50IGZsb3cgZ2FpbnMgYSBuZXcgaW4tZmxvdyBkZXNjZW5kYW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDQ0YmNhMjBiN2ZlNTY2ODU3MWVlODI4Zjk3NDVkNTBlMWY2ZGU5
MzguLmFmY2FhYjNhMWQzZTUzMDgxN2RiMGZjNGMzNDVmYjE5NDg4MTAzYzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xOTAyLDYgKzE5MDIsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmNw
cAogCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
Y2Q5NmExMWEwNGJiYWY5YTYwNzBhYTdmZTkyM2RmMDNiZmMyZDFiLi43YjE4YTUwYTQ0ZjZhOGU2
M2QxNGMzMjg4NDMzNTY3OTAxZDExMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NjM5LDYgKzg2MzksNyBAQAogCQk1NUJF
MDI1RDIyM0IyOUM0MDAzMkYwOEEgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTVCRTAyNUUyMjNCMjlDNDAwMzJGMDhBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQ
YWlyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nl
c3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJFMDI1RjIyM0IyOUM1MDAz
MkYwOEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyog
U1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0lt
YWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUxQzIyNDA2
MDVFMDBDMjZFMzIgLyogU1ZHQW5pbWF0aW9uRGlzY3JldGVGdW5jdGlvbkltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0aW9uRGlzY3JldGVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MUQyMjQwNjE1NTAwQzI2RTMyIC8qIFNWR0FuaW1hdGlv
bkRpc2NyZXRlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uRGlzY3JldGVG
dW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMiw2ICs5NjAzLDgg
QEAKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhU
c1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVBMDlGOTIzRkNDQzZBMDA4
NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
RjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJGMUFEQTAxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRGcmFnRGVwdGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEQTExQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZy
YWdEZXB0aC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhURnJhZ0RlcHRoLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg5LDYgKzE2NjkyLDkgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8sCiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJ
CQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkzIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
Y3BwICovLAorCQkJCTcyRUEwOUY5MjNGQ0NDNkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmggKi8sCisJCQkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCmluZGV4IGY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEu
LmU2Y2I3NWE3MTFiMWI2Njc5Nzk2NzgyNzJjODgzNTZkZDMxNjIwM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChj
b25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAg
ICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXll
ciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXll
ckNvbXBvc2l0aW9uKCk7CkBAIC04MjIsMzggKzgyMCw0MSBAQCBib29sIEhUTUxDYW52YXNFbGVt
ZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlz
cGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1f
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAo
aXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNw
bGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90
cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwogCi0gICAgaWYgKGlz
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoIWJ1ZmZl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBidWZmZXIgPSAqdGhpcy0+YnVmZmVy
KCk7CisgICAgaWYgKGJ1ZmZlci5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIuZHJh
d2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RB
c1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChp
czxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3Bs
YXlMaXN0QXNUZXh0KGZsYWdzKTsKKyAgICBpZiAoIWJ1ZmZlcigpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBhdXRvJiBidWZmZXIgPSAqdGhpcy0+YnVmZmVyKCk7CisgICAgaWYg
KGJ1ZmZlci5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyLmRyYXdpbmdD
b250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKIAogICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFz
VGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlz
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5
RGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOworICAgIGlmICghYnVmZmVyKCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIGF1dG8mIGJ1ZmZlciA9ICp0aGlzLT5idWZmZXIoKTsKKyAg
ICBpZiAoYnVmZmVyLmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyLmRyYXdpbmdDb250ZXh0KCkt
PnJlcGxheWVkRGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci5kcmF3aW5nQ29u
dGV4dCgpLT5yZXBsYXllZERpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFncyk7CiAKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CkBAIC04ODksMTEgKzg5MCwyMiBAQCB2b2lkIEhUTUxDYW52YXNFbGVt
ZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWln
aHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
ID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQg
OiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0g
KGRvY3VtZW50KCkudmlldygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1l
bnQoKS52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKworICAgIC8vIEZJ
WE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMu
CisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3
aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJs
ZWQoKSk7CisKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNE
aXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVy
YXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVu
ZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkOworICAgIGVsc2UKKyAgICAgICAg
cmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBD
b2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4
dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KTsKKwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlz
MmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMg
aWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMy
Ni4uNDIxMzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBm
YWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1f
Y29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCA2NTZiMzFhMWQ5Yzc3NzkxM2NhYTBkZjk3ZGYyODli
MDQzOWFjMzc5Li44MjU2OTViNjJiNGQ1ZTAzYmEzYTk0YzU0ZjJiNThmOTk1OTBjZGUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVm
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFn
ZUJ1ZmZlci5oCkBAIC0zMiwyMCArMzIsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdGVtcGxh
dGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBjbGFzcyBDb25jcmV0ZUltYWdlQnVmZmVyIDogcHVi
bGljIEltYWdlQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBDb25jcmV0ZUltYWdl
QnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIGF1dG8gYmFj
a2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKICAgICAgICAgaWYgKCFiYWNrZW5kKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3JldGVJbWFn
ZUJ1ZmZlcj4obmV3IENvbmNyZXRlSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVm
ZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IENvbmNyZXRl
SW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7
CiAgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgY29udGV4
dCk7CiAgICAgICAgIGlmICghYmFja2VuZCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENvbmNyZXRlSW1hZ2VCdWZmZXI+KG5ldyBD
b25jcmV0ZUltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92
ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwogICAg
IH0KIAogcHJvdGVjdGVkOgpAQCAtNjYsNiArNjgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lk
IGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CiAgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CiAgICAgfQogCkBAIC03
OSw0NiArODIsNTUgQEAgcHJvdGVjdGVkOgogCiAgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1
ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwogICAgIH0KIAogICAgIFJlZlB0
cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJh
Y2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBjb25zdF9j
YXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwog
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAg
IHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX2JhY2tlbmQtPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKICAgICB9CiAKICAg
ICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAg
ICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKICAgICB9CiAKICAg
ICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKICAgICB7Cisg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+
c2lua0ludG9OYXRpdmVJbWFnZSgpOwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZT4gc2lua0lu
dG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKICAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJl
c29sdXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlk
ZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX2JhY2tl
bmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAgICAgICBtX2JhY2tlbmQt
PmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKICAgICB9CiAKICAgICB2b2lkIHRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNw
YWNlKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwogICAg
ICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENv
bG9yU3BhY2UpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDRhM2ZiZWFlOWU3Y2E2ZmUxOTk4MmRkNGVjOTNkN2Jk
NGU4OTlhMjMuLmE4ZDk5OWUzYTI3YzM0ZTYwNjkxODc1OGM3YzBkNmZiOWY2YTA3YjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAg
LTQ4LDYgKzQ4LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluCiAgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRv
dyk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlM
aXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWlt
YWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiBpbWFn
ZUJ1ZmZlcjsKQEAgLTY1LDYgKzczLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyCiAgICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVy
YXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0VW5h
Y2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGEwYjA0YWZlMjdkMzg1ODA4
NzY2YWM2YzJiMTczNzUzZDQwNTgyYjQuLmFiZmJhM2U3MTA4MDYxYjU3NWY1NmViNzkxM2M1Yjgw
Y2NkM2U2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaApAQCAtMzIsNiArMzIsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1l
c3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CisKIGNsYXNzIElt
YWdlQnVmZmVyIHsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBv
biBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC01Nyw2ICs2MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCisgICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1
YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CisKICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50U2l6ZSBs
b2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUo
KSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKaW5kZXggOGY0NjkwMTE3YjM1ZTk5MWMyYTAyZWM3ZTBj
N2U0ZDEzMjViMTU5Mi4uZTAxNzRhNzhjODg0ZGNiMDc3ZDY5YjQwMWE0YTNmYmZkNWM2ODZmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb25jcmV0ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ci5oIgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmgiCkBAIC02MSw1ICs2Miw3IEBAIHVzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKIAogdXNpbmcgVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyID0gQ29uY3JldGVJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kPjsKIHVzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdl
QnVmZmVyPEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIERpc3BsYXlMaXN0
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPFVuYWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgRGlzcGxheUxpc3RBY2NlbGVyYXRl
ZEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJCYWNrZW5kPjsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCmluZGV4IDY5ZDhhZTgxYzg0
OGIxMGU2ZjJkMDdhNzg5YjE2YzMzM2RjMjNjYjQuLjlkODNkYzhkMTUyNGMxMzM0YzA5ZWFmY2Uz
MTEzZjA1MGM3NTU5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlbmRlcmluZ01vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdNb2RlLmgKQEAgLTMwLDYgKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogdWludDhfdCB7CiAgICAgQWNjZWxlcmF0ZWQsCiAg
ICAgVW5hY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3Bs
YXlMaXN0VW5hY2NlbGVyYXRlZCwKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMWM2OWI1MWE0YmY4NWZlZmUxZTdkMWJkNDU5OTU0NzQ3YWExOTI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRp
c3BsYXlMaXN0UmVwbGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKKworRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUpCisgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
ZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVy
PihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRl
KCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAg
IH0pCit7Cit9CisKK3ZvaWQgRHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCit7CisgICAgbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAgIG1fcmVwbGF5ZWREaXNw
bGF5TGlzdC5yZXNldCgpOworfQorCit2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5
TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQoreworICAgIGlmICghbV9kaXNwbGF5
TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVwbGF5ZXIgcmVwbGF5
ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KQorICAgICAgICBtX3JlcGxheWVkRGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBs
YXkoeyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBlbHNlCisgICAgICAgIHJl
cGxheWVyLnJlcGxheSgpOworICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKK30KKworfSAvLyBE
aXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmViYmM2MzE0MWJjOGFjMTRlMjc4NDAzZmIx
ZDZjYmNkMjM4MGVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxp
c3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRl
eHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRo
aXMpLm1fY29udGV4dDsgfQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJu
IG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBj
b25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QqIHJl
cGxheWVkRGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheWVkRGlzcGxheUxpc3Qu
Z2V0KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7Cisg
ICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmKTsKKworcHJvdGVjdGVk
OgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNw
bGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5ZWREaXNw
bGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTdiMmI4MGFlYTJmMTI1Y2Q3NTJl
MDRhOGE4NzhiZTlmNTc5ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29uY3JldGVJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5
cGU+CitjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiB7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUlt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGljOgorICAgIHN0YXRpYyBhdXRvIGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8SW1hZ2VC
dWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6
ZSk7CisgICAgfQorCisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8SW1hZ2VCdWZmZXI+KHNp
emUsIGNvbnRleHQsIHNpemUpOworICAgIH0KKworICAgIEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVl
X3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQor
ICAgICAgICA6IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyKFdURk1vdmUoZGF0YUJhY2tlbmQpKQor
ICAgICAgICAsIG1fZHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgfklt
YWdlQnVmZmVyKCkKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICB9
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0NvbnRleHQuY29udGV4dCgpOworICAgIH0KKworICAg
IERyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuICZtX2Ry
YXdpbmdDb250ZXh0OyB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZXBsYXlEaXNwbGF5TGlzdChCYXNl
Q29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9CisKKyAgICBEcmF3aW5nQ29u
dGV4dCBtX2RyYXdpbmdDb250ZXh0OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUyYzhlZmYyYzk1MmYzZTY0YzY5N2RkYTE3OWY1ZWU3ZDc3
MDU1OTQuLjI4MzIyNjYxN2FiMmMxZTc5NDVkMGJlOTZhMDg0OGFhOTZjMjEyYjQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMC0wMi0yMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBlIGZv
ciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZy
YXNlci4KKworICAgICAgICBUaGUgZXh0cmEgY29tbWFuZHMgYXJlIHJlY29yZGVkIGJ5IENhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyKCkgd2hpY2gKKyAgICAgICAgdXNlZCB0byBpc3N1ZSB0aGVz
ZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgZGlyZWN0bHkgdG8gdGhlIGJhY2tlbmQuCisgICAg
ICAgIFdpdGggdGhpcyBwYXRjaCwgRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyIGRvZXMgbm90IGFs
bG93IGFjY2VzcyB0byB0aGUKKyAgICAgICAgYmFja2VuZCBjb250ZXh0LiBTbyBhbGwgdGhlIEdy
YXBoaWNzQ29udGV4dCBjb21tYW5kcyBoYXMgdG8gYmUgcmVjb3JkZWQuCisKKyAgICAgICAgKiBk
aXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDIt
MjEgIEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbHB0
ciBjcmFzaCBpbiBSZW5kZXJTdHlsZTo6aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUgd2hlbiBm
cmFnbWVudCBmbG93IGdhaW5zIGEgbmV3IGluLWZsb3cgZGVzY2VuZGFudApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQu
dHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3
YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
QEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0
YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNo
YW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1j
b2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJl
Y3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkg
c2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>