<?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>216752</bug_id>
          
          <creation_ts>2020-09-20 13:02:54 -0700</creation_ts>
          <short_desc>[LFC Display] Add the beginnings of a CSS display box hierarchy and CSS painter</short_desc>
          <delta_ts>2020-09-24 10:29:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1690205</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-20 13:02:54 -0700</bug_when>
    <thetext>[LFC Display] Add the beginnings of a CSS display box hierarchy and CSS painter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690208</commentid>
    <comment_count>1</comment_count>
      <attachid>409244</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-20 13:10:01 -0700</bug_when>
    <thetext>Created attachment 409244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690220</commentid>
    <comment_count>2</comment_count>
      <attachid>409248</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-20 13:56:10 -0700</bug_when>
    <thetext>Created attachment 409248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690221</commentid>
    <comment_count>3</comment_count>
      <attachid>409249</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-20 14:02:19 -0700</bug_when>
    <thetext>Created attachment 409249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690228</commentid>
    <comment_count>4</comment_count>
      <attachid>409249</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-20 15:04:38 -0700</bug_when>
    <thetext>Comment on attachment 409249
Patch

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

&gt; Source/WebCore/display/DisplayTreeBuilder.cpp:134
&gt; +        if (auto* cachedImage = downcast&lt;Layout::ReplacedBox&gt;(layoutBox).cachedImage())
&gt; +            imageBox-&gt;setImage(cachedImage-&gt;image());

In what scenario is there no cachedImage here? It would definitely be easier to reason about if the ImageBox could always have an Image.

&gt; Source/WebCore/display/DisplayTreeBuilder.h:47
&gt; +    TreeBuilder(float pixelSnappingFactor);

Should be explicit.

&gt; Source/WebCore/display/DisplayTreeBuilder.h:56
&gt; +    float m_pixelSnappingFactor { 1 };

Since you always pass in a value, there is no need to give this a default. Its probably better that everyone be explicit.

&gt; Source/WebCore/display/css/DisplayBox.h:43
&gt; +        ContainerBox            = 1 &lt;&lt; 0,
&gt; +        ImageBox                = 1 &lt;&lt; 1,

Seems like a lot of whitespace here.

&gt; Source/WebCore/display/css/DisplayCSSPainter.cpp:180
&gt; +    for (const auto* child = containerBox.firstChild(); child; child = child-&gt;nextSibling()) {

Can we structure this to use c++ iterators so we can make this a for (auto child : containerBox.children()) type situation?

&gt; Source/WebCore/display/css/DisplayCSSPainter.h:58
&gt; +    static void paintBox(const Box&amp;, GraphicsContext&amp;, FloatSize paintOffset, const IntRect&amp; dirtyRect);
&gt; +    static void paintBoxDecorations(const Box&amp;, GraphicsContext&amp;, FloatSize paintOffset);
&gt; +    static void paintBoxContent(const Box&amp;, GraphicsContext&amp;, FloatSize paintOffset);
&gt; +
&gt; +    static void recursiveCollectLayers(const ContainerBox&amp;, Vector&lt;const Box*&gt;&amp; negativeZOrderList, Vector&lt;const Box*&gt;&amp; positiveZOrderList);

Since there is no state at all (let alone, private state), these don&apos;t really need to be in the header. Could just be declared and defined in the cpp.

&gt; Source/WebCore/display/css/DisplayImageBox.h:41
&gt; +    WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(InageBox);

Typo. InageBox -&gt; ImageBox

&gt; Source/WebCore/display/css/DisplayImageBox.h:43
&gt; +    ImageBox(FloatRect borderBox, Style&amp;&amp;);

I wonder if we can make this just take a Ref&lt;Image&gt;&amp;&amp;, and not have the setter. Is there ever a time we want an ImageBox without an Image?

&gt; Source/WebCore/display/css/DisplayReplacedBox.h:41
&gt; +    ReplacedBox(FloatRect borderBox, Style&amp;&amp;, OptionSet&lt;Flags&gt;);
&gt; +    
&gt; +    FloatRect replacedContentRect() const { return m_replacedContentRect; }
&gt; +    void setReplacedContentRect(FloatRect);

Like with ImageBox, can we pass in the replacedContentRect to the constructor, and avoid the setter?

&gt; Source/WebCore/display/css/DisplayStyle.h:35
&gt; +#include &lt;wtf/OptionSet.h&gt;
&gt; +

Should probably include &lt;wtf/Optional.h&gt; since you rely on it.

&gt; Source/WebCore/display/css/DisplayStyle.h:52
&gt; +        Positioned          = 1 &lt;&lt; 0,
&gt; +        Floating            = 1 &lt;&lt; 1,

Seems like a lot of whitespace again.

&gt; Source/WebCore/display/css/DisplayStyle.h:55
&gt; +    Style(const RenderStyle&amp;);

This should probably be marked explicit.

&gt; Source/WebCore/display/css/DisplayStyle.h:70
&gt; +    void setIsPositioned(bool value) { m_flags.set({ Flags::Positioned }, value); }

Can setters like this be private? Seems like only the constructor really needs to call it (at least so far I guess).

&gt; Source/WebCore/layout/layouttree/LayoutIterator.h:30
&gt; +#include &quot;LayoutInitialContainingBlock.h&quot;

What is requiring this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691249</commentid>
    <comment_count>5</comment_count>
      <attachid>409501</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-23 13:52:13 -0700</bug_when>
    <thetext>Created attachment 409501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691256</commentid>
    <comment_count>6</comment_count>
      <attachid>409501</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-23 14:19:34 -0700</bug_when>
    <thetext>Comment on attachment 409501
Patch

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

&gt; Source/WebCore/ChangeLog:105
&gt; +2020-09-20  Simon Fraser  &lt;simon.fraser@apple.com&gt;
&gt; +

double changelog.

&gt; Source/WebCore/display/DisplayLayerController.cpp:82
&gt; +    if (!m_displayTree)
&gt;          return;

when is it nullptr?

&gt; Source/WebCore/display/DisplayTreeBuilder.cpp:56
&gt; +    if (!layoutState.hasRoot())
&gt; +        return nullptr;

shouldn&apos;t this be an assert instead? -enforcing the caller to only build display tree on a valid layout state?

&gt; Source/WebCore/display/DisplayTreeBuilder.h:58
&gt; +    float m_pixelSnappingFactor;

float m_pixelSnappingFactor { 1 }; ?

&gt; Source/WebCore/display/DisplayView.cpp:91
&gt; +    return page() ? page()-&gt;deviceScaleFactor() : 1.0f;

Modern display tree should have a fallback value of 2 device pixels per css pixel. (j/k)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691322</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-23 16:40:08 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/267509/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691324</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-23 16:41:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/69465821&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691355</commentid>
    <comment_count>9</comment_count>
      <attachid>409501</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-23 19:13:21 -0700</bug_when>
    <thetext>Comment on attachment 409501
Patch

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

&gt;&gt; Source/WebCore/display/DisplayView.cpp:91
&gt;&gt; +    return page() ? page()-&gt;deviceScaleFactor() : 1.0f;
&gt; 
&gt; Modern display tree should have a fallback value of 2 device pixels per css pixel. (j/k)

In what situations does the view need a deviceScaleFactor but not have a page? I guess really the question is why is Page ever null here?

&gt; Source/WebCore/display/css/DisplayCSSPainter.cpp:132
&gt; +        if (image)
&gt; +            context.drawImage(*image, imageRect);

Still curious about why this image can be null. Seems like if we could enforce the invariant that an ImageBox always has an image, this would be simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691376</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-23 20:50:11 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; Comment on attachment 409501 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=409501&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/display/DisplayView.cpp:91
&gt; &gt;&gt; +    return page() ? page()-&gt;deviceScaleFactor() : 1.0f;
&gt; &gt; 
&gt; &gt; Modern display tree should have a fallback value of 2 device pixels per css pixel. (j/k)
&gt; 
&gt; In what situations does the view need a deviceScaleFactor but not have a
&gt; page? I guess really the question is why is Page ever null here?

I null-check it because m_frameView.frame().page() is a pointer. There are some cases involving the page cache where it&apos;s null.

Maybe we should just never try to display in these cases?

&gt; &gt; Source/WebCore/display/css/DisplayCSSPainter.cpp:132
&gt; &gt; +        if (image)
&gt; &gt; +            context.drawImage(*image, imageRect);
&gt; 
&gt; Still curious about why this image can be null. Seems like if we could
&gt; enforce the invariant that an ImageBox always has an image, this would be
&gt; simpler.

We could either rebuild part of the display tree when the replaced element&apos;s image changes between non-null and null (only using ImageBox when we have an image), or we could keep the same display tree and allow ImageBox a null image. Either could work, but I think the latter is a bit simpler; there may be painting or hit-testing behaviors that we want on ImageBox whether or not it has an image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691521</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-24 07:55:44 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; (In reply to Sam Weinig from comment #9)
&gt; &gt; Comment on attachment 409501 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=409501&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/display/DisplayView.cpp:91
&gt; &gt; &gt;&gt; +    return page() ? page()-&gt;deviceScaleFactor() : 1.0f;
&gt; &gt; &gt; 
&gt; &gt; &gt; Modern display tree should have a fallback value of 2 device pixels per css pixel. (j/k)
&gt; &gt; 
&gt; &gt; In what situations does the view need a deviceScaleFactor but not have a
&gt; &gt; page? I guess really the question is why is Page ever null here?
&gt; 
&gt; I null-check it because m_frameView.frame().page() is a pointer. There are
&gt; some cases involving the page cache where it&apos;s null.
&gt; 
&gt; Maybe we should just never try to display in these cases?

Yeah, it would be great if in this new code we could enforce that invariant at the edge, so we don&apos;t have to add null checks all over the place. 

&gt; 
&gt; &gt; &gt; Source/WebCore/display/css/DisplayCSSPainter.cpp:132
&gt; &gt; &gt; +        if (image)
&gt; &gt; &gt; +            context.drawImage(*image, imageRect);
&gt; &gt; 
&gt; &gt; Still curious about why this image can be null. Seems like if we could
&gt; &gt; enforce the invariant that an ImageBox always has an image, this would be
&gt; &gt; simpler.
&gt; 
&gt; We could either rebuild part of the display tree when the replaced element&apos;s
&gt; image changes between non-null and null (only using ImageBox when we have an
&gt; image), or we could keep the same display tree and allow ImageBox a null
&gt; image. Either could work, but I think the latter is a bit simpler; there may
&gt; be painting or hit-testing behaviors that we want on ImageBox whether or not
&gt; it has an image.

Ok. That makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691567</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-24 10:29:20 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; (In reply to Simon Fraser (smfr) from comment #10)
&gt; &gt; (In reply to Sam Weinig from comment #9)
&gt; &gt; &gt; Comment on attachment 409501 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=409501&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/display/DisplayView.cpp:91
&gt; &gt; &gt; &gt;&gt; +    return page() ? page()-&gt;deviceScaleFactor() : 1.0f;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Modern display tree should have a fallback value of 2 device pixels per css pixel. (j/k)
&gt; &gt; &gt; 
&gt; &gt; &gt; In what situations does the view need a deviceScaleFactor but not have a
&gt; &gt; &gt; page? I guess really the question is why is Page ever null here?
&gt; &gt; 
&gt; &gt; I null-check it because m_frameView.frame().page() is a pointer. There are
&gt; &gt; some cases involving the page cache where it&apos;s null.
&gt; &gt; 
&gt; &gt; Maybe we should just never try to display in these cases?
&gt; 
&gt; Yeah, it would be great if in this new code we could enforce that invariant
&gt; at the edge, so we don&apos;t have to add null checks all over the place. 

Can we make it so that the Display::View is only ever around when there is a Page? So, if the owning FrameView ever gets disconnected from the Page, we just tear down deallocate Display::View?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409244</attachid>
            <date>2020-09-20 13:10:01 -0700</date>
            <delta_ts>2020-09-20 13:59:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216752-20200920131000.patch</filename>
            <type>text/plain</type>
            <size>83302</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWFiYWI1OGRiNmEyNzMx
NDMwMWFmNzVkMWNkNmI5ODQ0ZjA1ZWEwNy4uYWUyNzNlZDViNDgzMmMxZTZhM2M4YWEyYzI3Yjcz
YWRhNzVjYmE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDIwLTA5LTIwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gQWRkIHRoZSBiZWdpbm5pbmdzIG9mIGEgQ1NTIGRpc3BsYXkgYm94IGhpZXJhcmNoeSBhbmQg
Q1NTIHBhaW50ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNjc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzb21lIERpc3BsYXk6OkJveCBzdWJjbGFzc2VzIHRvIGRpc3BsYXkvY3NzLCBhIERp
c3BsYXk6OlRyZWUgY2xhc3MgdG8gb3duIHRoZQorICAgICAgICBkaXNwbGF5IHRyZWUsIGFuZCBh
IERpc3BsYXlUcmVlQnVpbGRlci4gQWxzbyBhZGQgY3NzL0Rpc3BsYXlDU1NQYWludGVyIHdoaWNo
IGlzCisgICAgICAgIHRoZSBiZWdpbm5pbmdzIG9mIGEgY2xhc3MgdGhhdCBrbm93cyBob3cgdG8g
cGFpbnQgYSBDU1Mgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY29k
ZSBvdGhlciB0aGFuIERpc3BsYXlDU1NQYWludGVyIGlzIGRlbGliZXJhdGVseSB2YWd1ZSBhYm91
dCBob3cgbXVjaCBpcworICAgICAgICBDU1Mgc3BlY2lmaWMuIEl0J3MgbGlrZWx5IHRoYXQgc29t
ZSBib3ggY2xhc3NlcyB3aWxsIGJlIHNoYXJlZCB3aXRoIFNWRyBwYWludGluZy4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgY29kZSBpcyBub3QgaG9va2VkIHVwIHlldC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlRyZWU6OlRyZWUpOgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlOjpyb290Qm94IGNvbnN0KToK
KyAgICAgICAgKiBkaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6VHJlZUJ1aWxkZXI6OlRyZWVCdWlsZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlRyZWVCdWlsZGVyOjpidWlsZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6cmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6ZGlzcGxheUJv
eEZvckxheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpvdXRwdXRE
aXNwbGF5Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Om91dHB1dERpc3BsYXlUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnNob3dEaXNwbGF5VHJlZSk6CisgICAgICAg
ICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgICogZGlzcGxh
eS9jc3MvRGlzcGxheUJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94OjpCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpzZXROZXh0U2libGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmRlYnVnRGVzY3JpcHRpb24gY29u
c3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OkJveCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6Ym9y
ZGVyQm94RnJhbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojppc0Nv
bnRhaW5lckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmlzSW1h
Z2VCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojppc1JlcGxhY2Vk
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6bmV4dFNpYmxpbmcg
Y29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJveERlY29y
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50Qm94
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludFN0YWNraW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpyZWN1cnNp
dmVDb2xsZWN0TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6
OnBhaW50VHJlZSk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaDog
QWRkZWQuCisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVyQm94OjpDb250YWluZXJC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVyQm94OjpzZXRGaXJzdENo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5lckJveDo6ZGVidWdEZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJv
eC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5lckJveDo6Zmly
c3RDaGlsZCBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6SW1hZ2VCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6SW1hZ2VCb3g6OnNldEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkltYWdlQm94OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6aW1hZ2UgY29uc3QpOgorICAgICAgICAqIGRp
c3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UmVwbGFjZWRCb3g6OlJlcGxhY2VkQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJlcGxhY2VkQm94OjpzZXRSZXBsYWNlZENvbnRlbnRSZWN0KToKKyAgICAgICAg
KiBkaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZXBsYWNlZEJveDo6cmVwbGFjZWRDb250ZW50UmVjdCBjb25zdCk6Cisg
ICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6U3R5bGU6Omhhc0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6U3R5bGU6Omhhc1Zpc2libGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxl
OjpiYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5
bGU6Omhhc0JhY2tncm91bmRJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpTdHlsZTo6Ym9yZGVyTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpT
dHlsZTo6Ym9yZGVyUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5
bGU6OmJvcmRlclRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6
Ym9yZGVyQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjp6
SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzU3RhY2tp
bmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpzZXRJ
c1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzUG9zaXRp
b25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6c2V0SXNGbG9h
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aXNGbG9hdGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6cGFydGljaXBhdGVzSW5aT3Jk
ZXJTb3J0aW5nIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJv
eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3gu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5o
OgorCiAyMDIwLTA5LTIwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkMgRGlzcGxheV0gTW92ZSBMRkMgRGlzcGxheSBpbmZyYXN0cnVjdHVyZSBm
aWxlcyBpbnRvIGEgbmV3ICdkaXNwbGF5JyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggNTA3OWNiMTlmNDQ2MDQ3YmU2ODVhOGY4ZjRhOWFiNWFmZWQ2MjdjYy4uOGQzMzZiNGMwMTgx
ZGZiN2NmODIwZDEzMTQxMWIxYTNmMTM5OWZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg1
LDYgKzg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L2Nzcy90eXBlZG9tIgogICAgICIke1dFQkNPUkVfRElSfS9jc3NqaXQi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Rpc3BsYXkiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2Rpc3Bs
YXkvY3NzIgogICAgICIke1dFQkNPUkVfRElSfS9kb20iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Rv
bS9tZXNzYWdlcG9ydHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2RvbWppdCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDM4YzA2YjhiYmRjYzFhMTA4MTdhZjk4MTljMDFjNjBlZTI4ZGYyNTguLmI4ZWVi
ODdhNTJhMmEzMGIxYWJiYzkwODI2OWViYTUwYjRmOTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMzYyLDggKzM2MiwxNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlblJhbmdlLmgKIAogICAgIGRpc3BsYXkvRGlz
cGxheUxheWVyQ29udHJvbGxlci5oCisgICAgZGlzcGxheS9EaXNwbGF5VHJlZS5oCisgICAgZGlz
cGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaAogICAgIGRpc3BsYXkvRGlzcGxheVZpZXcuaAogCisg
ICAgZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaAorICAgIGRpc3BsYXkvY3NzL0Rpc3Bs
YXlDb250YWluZXJCb3guaAorICAgIGRpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5oCisgICAg
ZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmgKKyAgICBkaXNwbGF5L2Nzcy9EaXNwbGF5
U3R5bGUuaAorCiAgICAgZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKICAgICBkb20vQWN0aXZlRE9N
T2JqZWN0LmgKICAgICBkb20vQXR0ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcyNzU2M2U1ZmI3N2E0
NTk0MzEwYzQwZTMzZWU0NjY4Y2I4NWE4ZjguLmE2M2MxZTVlZDkxM2FiZjZiODIxODY3ZWRmNDlk
MzZjNzYxZjkzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC03OTQsNyArNzk0LDE1IEBAIGNzcy90eXBl
ZG9tL1R5cGVkT01DU1NTdHlsZVZhbHVlLmNwcAogY3NzL3R5cGVkb20vVHlwZWRPTUNTU1VuaXRW
YWx1ZS5jcHAKIGNzcy90eXBlZG9tL1R5cGVkT01DU1NVbnBhcnNlZFZhbHVlLmNwcAogY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCitkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmNwcAorZGlzcGxh
eS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHAKK2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWlu
dGVyLmNwcAorZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNwcAorZGlzcGxheS9jc3MvRGlz
cGxheVJlcGxhY2VkQm94LmNwcAorZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcAogZGlzcGxh
eS9EaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcAorZGlzcGxheS9EaXNwbGF5VHJlZS5jcHAKK2Rp
c3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNwcAogZGlzcGxheS9EaXNwbGF5Vmlldy5jcHAKIGRv
bS9BYm9ydENvbnRyb2xsZXIuY3BwCiBkb20vQWJvcnRTaWduYWwuY3BwCkBAIC0xNDM0LDcgKzE0
NDIsNiBAQCBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCiBs
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAK
IGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9y
bWF0dGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAotbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlCb3guY3BwCiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZUNv
bnRlbnQuY3BwCiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwCiBsYXlvdXQv
ZmxleGZvcm1hdHRpbmcvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNkY2M1ZTcxYjhi
MTMzOTAwMjYyMWFjN2I2Y2FiNzQwYWRmY2UyMWIuLjVmNjQxMDYyMjAyZjY1YTZhMGNkMDg5YmY3
ODI2ZjU4NTk4MzhkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTU5NjYsNiArNTk2NiwyMCBAQAogCQkwRjc5MEYzRTI1MTdD
RTZEMDA5QkEwMzQgLyogRGlzcGxheUxheWVyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzkwRjNGMjUxN0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Vmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MEY0MDI1MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxh
eUxheWVyQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3OTBGNEIyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5U3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3OTBG
NEMyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDb250YWluZXJCb3guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGlzcGxheUNvbnRhaW5lckJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzkwRjREMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUltYWdlQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3OTBGNEUyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjc5MEY0RjI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNTU1BhaW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUNTU1BhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3OTBGNTAyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlSZXBsYWNlZEJv
eC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5UmVwbGFjZWRCb3guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3OTBGNTEyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDb250YWlu
ZXJCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUNvbnRhaW5lckJveC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY1MjI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUlt
YWdlQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlJbWFnZUJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjc5MEY1MzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVJlcGxh
Y2VkQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlSZXBsYWNlZEJveC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU0MjUxN0Q1NTQwMDlCQTAzNCAvKiBE
aXNwbGF5Q1NTUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5Q1NTUGFpbnRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU2MjUxN0Q1NjEwMDlC
QTAzNCAvKiBEaXNwbGF5VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5VHJlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY1NzI1MTdENTYyMDA5QkEwMzQgLyogRGlz
cGxheVRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlUcmVlQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU4MjUxN0Q1NjIwMDlC
QTAzNCAvKiBEaXNwbGF5VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5VHJlZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU5MjUxN0Q1NjMwMDlCQTAz
NCAvKiBEaXNwbGF5VHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheVRyZWVCdWls
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTQ3MUUyQkYxQTYwMDk1
OTUxQiAvKiBXZWJDb3JlSlNDbGllbnREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvcmVKU0NsaWVudERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjg1MEZFMjFFRDdDMTgzMDBGQjc3QTcgLyogUGVyZm9ybWFuY2VMb2dnaW5n
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcmZvcm1hbmNlTG9n
Z2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTY2RDFDODY5
RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGVuZ3RoUG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTc0MDgsMTQgKzE3NDIyLDM4IEBACiAJCTBGNzkwRjNDMjUxN0NFNkQwMDlCQTAzNCAvKiBk
aXNwbGF5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkw
Rjc5MEY0QTI1MTdENTU0MDA5QkEwMzQgLyogY3NzICovLAogCQkJCTBGNzkwRjQwMjUxN0NFNkQw
MDlCQTAzNCAvKiBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcCAqLywKIAkJCQkwRjc5MEYzRTI1
MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxheUxheWVyQ29udHJvbGxlci5oICovLAorCQkJCTBGNzkw
RjU4MjUxN0Q1NjIwMDlCQTAzNCAvKiBEaXNwbGF5VHJlZS5jcHAgKi8sCisJCQkJMEY3OTBGNTYy
NTE3RDU2MTAwOUJBMDM0IC8qIERpc3BsYXlUcmVlLmggKi8sCisJCQkJMEY3OTBGNTcyNTE3RDU2
MjAwOUJBMDM0IC8qIERpc3BsYXlUcmVlQnVpbGRlci5jcHAgKi8sCisJCQkJMEY3OTBGNTkyNTE3
RDU2MzAwOUJBMDM0IC8qIERpc3BsYXlUcmVlQnVpbGRlci5oICovLAogCQkJCTBGNzkwRjNEMjUx
N0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5jcHAgKi8sCiAJCQkJMEY3OTBGM0YyNTE3Q0U2
RDAwOUJBMDM0IC8qIERpc3BsYXlWaWV3LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXk7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRjc5MEY0QTI1MTdENTU0MDA5
QkEwMzQgLyogY3NzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQkxMTk5RkE1QTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5jcHAgKi8sCisJCQkJ
MTE5OUZBNTkyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCAqLywKKwkJCQkwRjc5MEY0
QzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNvbnRhaW5lckJveC5jcHAgKi8sCisJCQkJMEY3
OTBGNTEyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDb250YWluZXJCb3guaCAqLywKKwkJCQkw
Rjc5MEY1NDI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNTU1BhaW50ZXIuY3BwICovLAorCQkJ
CTBGNzkwRjRGMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5Q1NTUGFpbnRlci5oICovLAorCQkJ
CTBGNzkwRjREMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guY3BwICovLAorCQkJ
CTBGNzkwRjUyMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guaCAqLywKKwkJCQkw
Rjc5MEY1MzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVJlcGxhY2VkQm94LmNwcCAqLywKKwkJ
CQkwRjc5MEY1MDI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVJlcGxhY2VkQm94LmggKi8sCisJ
CQkJMEY3OTBGNEUyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5jcHAgKi8sCisJCQkJ
MEY3OTBGNEIyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSBjc3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkwRkU1RkJD
OTFDM0RENTA2MDAwN0EyQ0EgLyogZGlzcGxheWxpc3RzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE3NTQyLDggKzE3NTgwLDYgQEAKIAkJMTE5OUZBNTgy
MDhFM0M0QzAwMjM1OENDIC8qIGRpc3BsYXl0cmVlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxMTk5RkE1QTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxh
eUJveC5jcHAgKi8sCi0JCQkJMTE5OUZBNTkyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3gu
aCAqLywKIAkJCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogRGlzcGxheUlubGluZUNvbnRl
bnQuY3BwICovLAogCQkJCUU0NTFDNjMzMjM5NDA1OEUwMDk5MzE5MCAvKiBEaXNwbGF5SW5saW5l
Q29udGVudC5oICovLAogCQkJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGlu
ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ZWEwZmE2NzY4ODUyZWZkOWJlNjg4ZWVjZTA5NWMzZjJlNmIwYjU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5jcHAKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5VHJl
ZS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgRGlzcGxheSB7CisKK1RyZWU6OlRyZWUoc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4m
JiByb290Qm94KQorICAgIDogbV9yb290Qm94KFdURk1vdmUocm9vdEJveCkpCit7CisgICAgQVNT
RVJUKG1fcm9vdEJveCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlOGYzNWZjM2Nh
M2NiMjYxM2MyNWIyYWRkZWMyNjVkMzQ1MzEyODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJEaXNwbGF5Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK2Ns
YXNzIFRyZWUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKFRyZWUpOworcHVibGljOgor
ICAgIFRyZWUoc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4mJik7CisKKyAgICBjb25zdCBD
b250YWluZXJCb3gmIHJvb3RCb3goKSBjb25zdCB7IHJldHVybiAqbV9yb290Qm94OyB9CisKK3By
aXZhdGU6CisgICAgLy8gSWRlYWxseSB0aGlzIHJvb3QgYm94IHdvdWxkIGJlIGFnbm9zdGljIHRv
IGRpc3BsYXkgdHlwZSAoQ1NTIHZzIFNWRykuCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5l
ckJveD4gbV9yb290Qm94OworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODNmZTg0ODA2NjkwYWE3YjU0ODExM2ZjZWVjNDQ5NTVjOTYyNjYzNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNw
cApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEaXNwbGF5VHJlZUJ1aWxkZXIuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheUNvbnRhaW5lckJveC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgorI2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgorI2luY2x1
ZGUgIkRpc3BsYXlUcmVlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNs
dWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0
ZS5oIgorI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiIC8vIEp1c3QgZm9yIHNob3dMYXlv
dXRUcmVlLgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitUcmVlQnVpbGRlcjo6VHJlZUJ1aWxkZXIo
ZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3RvcikKKyAgICA6IG1fcGl4ZWxTbmFwcGluZ0ZhY3Rvcihw
aXhlbFNuYXBwaW5nRmFjdG9yKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8VHJlZT4gVHJlZUJ1
aWxkZXI6OmJ1aWxkKGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKSBjb25z
dAoreworICAgIGlmICghbGF5b3V0U3RhdGUuaGFzUm9vdCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8mIHJvb3RMYXlvdXRCb3ggPSBsYXlvdXRTdGF0ZS5yb290KCk7CisK
KyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
QnVpbGRpbmcgZGlzcGxheSB0cmVlIGZvcjoiKTsKKyAgICBzaG93TGF5b3V0VHJlZShyb290TGF5
b3V0Qm94LCAmbGF5b3V0U3RhdGUpOworCisgICAgYXV0byByb290RGlzcGxheUJveCA9IGRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0U3RhdGUsIHJvb3RMYXlvdXRCb3gpOworICAgIGF1dG8g
cm9vdERpc3BsYXlDb250YWluZXJCb3ggPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udGFpbmVyQm94PiB7
IGRvd25jYXN0PENvbnRhaW5lckJveD4ocm9vdERpc3BsYXlCb3gucmVsZWFzZSgpKSB9OworCisg
ICAgaWYgKCFyb290TGF5b3V0Qm94LmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8VHJlZT4oV1RGTW92ZShyb290RGlzcGxheUNvbnRhaW5lckJveCkpOworCisgICAgcmVj
dXJzaXZlQnVpbGREaXNwbGF5VHJlZShsYXlvdXRTdGF0ZSwgKnJvb3RMYXlvdXRCb3guZmlyc3RD
aGlsZCgpLCAqcm9vdERpc3BsYXlDb250YWluZXJCb3gpOworCisjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3Ry
ZWFtIDw8ICJEaXNwbGF5IHRyZWU6Iik7CisgICAgc2hvd0Rpc3BsYXlUcmVlKCpyb290RGlzcGxh
eUNvbnRhaW5lckJveCk7CisjZW5kaWYKKworICAgIHJldHVybiBtYWtlVW5pcXVlPFRyZWU+KFdU
Rk1vdmUocm9vdERpc3BsYXlDb250YWluZXJCb3gpKTsKK30KKworQm94KiBUcmVlQnVpbGRlcjo6
cmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZShjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgTGF5b3V0OjpCb3gmIGJveCwgRGlzcGxheTo6Q29udGFpbmVyQm94JiBw
YXJlbnREaXNwbGF5Qm94LCBEaXNwbGF5OjpCb3gqIHByZXZpb3VzU2libGluZ0JveCkgY29uc3QK
K3sKKyAgICBhdXRvIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dFN0
YXRlLCBib3gpOworICAgIAorICAgIEJveCogcmVzdWx0ID0gZGlzcGxheUJveC5nZXQoKTsKKwor
ICAgIGlmIChwcmV2aW91c1NpYmxpbmdCb3gpCisgICAgICAgIHByZXZpb3VzU2libGluZ0JveC0+
c2V0TmV4dFNpYmxpbmcoV1RGTW92ZShkaXNwbGF5Qm94KSk7CisgICAgZWxzZQorICAgICAgICBw
YXJlbnREaXNwbGF5Qm94LnNldEZpcnN0Q2hpbGQoV1RGTW92ZShkaXNwbGF5Qm94KSk7CisKKyAg
ICBpZiAoIWlzPExheW91dDo6Q29udGFpbmVyQm94Pihib3gpKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgYXV0byYgbGF5b3V0Q29udGFpbmVyQm94ID0gZG93bmNhc3Q8TGF5b3V0OjpD
b250YWluZXJCb3g+KGJveCk7CisgICAgaWYgKCFsYXlvdXRDb250YWluZXJCb3guaGFzQ2hpbGQo
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGF1dG8mIGRpc3BsYXlDb250YWluZXJC
b3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KCpyZXN1bHQpOworCisgICAgRGlzcGxheTo6Qm94
KiBjdXJyU2libGluZ0Rpc3BsYXlCb3ggPSBudWxscHRyOworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBMYXlvdXQ6OmNoaWxkcmVuT2ZUeXBlPExheW91dDo6Qm94PihsYXlvdXRDb250YWluZXJCb3gp
KSB7CisgICAgICAgIGlmICghbGF5b3V0U3RhdGUuaGFzQm94R2VvbWV0cnkoY2hpbGQpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY3VyclNpYmxpbmdEaXNwbGF5Qm94ID0gcmVj
dXJzaXZlQnVpbGREaXNwbGF5VHJlZShsYXlvdXRTdGF0ZSwgY2hpbGQsIGRpc3BsYXlDb250YWlu
ZXJCb3gsIGN1cnJTaWJsaW5nRGlzcGxheUJveCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEJveD4gVHJlZUJ1aWxkZXI6OmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IExh
eW91dDo6Qm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7CisgICAgYXV0byBnZW9tZXRyeSA9IGxheW91
dFN0YXRlLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgLy8gRklYTUU6IE5lZWQgdG8g
bWFwIGxvZ2ljYWwgdG8gcGh5c2ljYWwgcmVjdHMuCisgICAgYXV0byBib3JkZXJCb3ggPSBMYXlv
dXRSZWN0IHsgZ2VvbWV0cnkubG9naWNhbFJlY3QoKSB9OworCisgICAgLy8gRklYTUU6IEhhbmRs
ZSBpc0Fub255bW91cygpCisgICAgLy8gRklYTUU6IERvIGhvaXN0aW5nIG9mIDxib2R5PiBzdHls
ZXMgdG8gdGhlIHJvb3Qgd2hlcmUgYXBwcm9wcmlhdGUuCisKKyAgICAvLyBGSVhNRTogTmVlZCB0
byBkbyBsb2dpY2FsIC0+IHBoeXNpY2FsIGNvb3JkaW5hdGUgbWFwcGluZyBoZXJlLgorICAgIC8v
IEZJWE1FOiBJdCdzIHdyb25nIHRvIHBpeGVsIHNuYXAgYSBib3ggaW4gbG9jYWwgY29vcmRpbmF0
ZXMuIE5lZWQgdG8gYWNjdW11bGF0ZSBhbiBvZmZzZXQgZnJvbSB0aGUgcm9vdC4KKyAgICBhdXRv
IHN0eWxlID0gU3R5bGUgeyBsYXlvdXRCb3guc3R5bGUoKSB9OworICAgIAorICAgIGlmIChpczxM
YXlvdXQ6OlJlcGxhY2VkQm94PihsYXlvdXRCb3gpKSB7CisgICAgICAgIC8vIEZJWE1FOiBEb24n
dCBhc3N1bWUgaXQncyBhbiBpbWFnZS4KKyAgICAgICAgYXV0byBpbWFnZUJveCA9IG1ha2VVbmlx
dWU8SW1hZ2VCb3g+KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94LCBtX3BpeGVsU25h
cHBpbmdGYWN0b3IpLCBXVEZNb3ZlKHN0eWxlKSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogV3Jvbmc7IGdlb21ldHJ5IG5lZWRzIHRvIHZlbmQgdGhlIGNvcnJlY3QgY29udGVudCByZWN0
LgorICAgICAgICBhdXRvIHJlcGxhY2VkQ29udGVudFJlY3QgPSBMYXlvdXRSZWN0IHsgZ2VvbWV0
cnkuY29udGVudEJveExlZnQoKSwgZ2VvbWV0cnkuY29udGVudEJveFRvcCgpLCBnZW9tZXRyeS5j
b250ZW50Qm94V2lkdGgoKSwgZ2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpIH07CisgICAgICAg
IGltYWdlQm94LT5zZXRSZXBsYWNlZENvbnRlbnRSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
cmVwbGFjZWRDb250ZW50UmVjdCwgbV9waXhlbFNuYXBwaW5nRmFjdG9yKSk7CisKKyAgICAgICAg
aWYgKGF1dG8qIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8TGF5b3V0OjpSZXBsYWNlZEJveD4obGF5
b3V0Qm94KS5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgaW1hZ2VCb3gtPnNldEltYWdlKGNh
Y2hlZEltYWdlLT5pbWFnZSgpKTsKKworICAgICAgICByZXR1cm4gaW1hZ2VCb3g7CisgICAgfQor
ICAgIAorICAgIGlmIChpczxMYXlvdXQ6OkNvbnRhaW5lckJveD4obGF5b3V0Qm94KSkgeworICAg
ICAgICAvLyBGSVhNRTogVGhlIGRlY2lzaW9uIHRvIG1ha2UgYSBDb250YWluZXJCb3ggc2hvdWxk
IGJlIG1hZGUgYmFzZWQgb24gd2hldGhlciB0aGlzIERpc3BsYXk6OkJveCB3aWxsIGhhdmUgY2hp
bGRyZW4uCisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENvbnRhaW5lckJveD4oc25hcFJlY3RU
b0RldmljZVBpeGVscyhib3JkZXJCb3gsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUo
c3R5bGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxCb3g+KHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMoYm9yZGVyQm94LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpLCBXVEZNb3ZlKHN0
eWxlKSk7Cit9CisKKyNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisKK3N0YXRpYyB2b2lkIG91
dHB1dERpc3BsYXlCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGRpc3BsYXlCb3gs
IHVuc2lnbmVkKQoreworICAgIHN0cmVhbS53cml0ZUluZGVudCgpOworCisgICAgc3RyZWFtIDw8
IGRpc3BsYXlCb3guZGVidWdEZXNjcmlwdGlvbigpOworICAgIHN0cmVhbS5uZXh0TGluZSgpOwor
fQorCitzdGF0aWMgdm9pZCBvdXRwdXREaXNwbGF5VHJlZShUZXh0U3RyZWFtJiBzdHJlYW0sIGNv
bnN0IEJveCYgZGlzcGxheUJveCwgdW5zaWduZWQgZGVwdGgpCit7CisgICAgb3V0cHV0RGlzcGxh
eUJveChzdHJlYW0sIGRpc3BsYXlCb3gsIGRlcHRoKTsKKworICAgIGlmIChpczxDb250YWluZXJC
b3g+KGRpc3BsYXlCb3gpKSB7CisgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dChzdHJlYW0pOworICAgICAgICBmb3IgKGF1dG8gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJC
b3g+KGRpc3BsYXlCb3gpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgICAgICBvdXRwdXREaXNwbGF5VHJlZShzdHJlYW0sICpjaGlsZCwg
ZGVwdGggKyAxKTsKKyAgICB9Cit9CisKK3ZvaWQgc2hvd0Rpc3BsYXlUcmVlKGNvbnN0IEJveCYg
Ym94KQoreworICAgIFRleHRTdHJlYW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2RlOjpNdWx0
aXBsZUxpbmUsIFRleHRTdHJlYW06OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7CisgICAgb3V0
cHV0RGlzcGxheVRyZWUoc3RyZWFtLCBib3gsIDEpOworICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBz
dHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNw
bGF5VHJlZUJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzQ0YjM2MjY2MmY1MWQxZDM2NDEzNjAzNGVl
YjdhNDY1MjJlYThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9E
aXNwbGF5VHJlZUJ1aWxkZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
TGF5b3V0IHsKK2NsYXNzIEJveDsKK2NsYXNzIExheW91dFN0YXRlOworfQorCituYW1lc3BhY2Ug
RGlzcGxheSB7CisKK2NsYXNzIEJveDsKK2NsYXNzIENvbnRhaW5lckJveDsKK2NsYXNzIFRyZWU7
CisKK2NsYXNzIFRyZWVCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBUcmVlQnVpbGRlcihmbG9hdCBw
aXhlbFNuYXBwaW5nRmFjdG9yKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxUcmVlPiBidWlsZChj
b25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1
bmlxdWVfcHRyPEJveD4gZGlzcGxheUJveEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkxheW91
dFN0YXRlJiwgY29uc3QgTGF5b3V0OjpCb3gmKSBjb25zdDsKKworICAgIEJveCogcmVjdXJzaXZl
QnVpbGREaXNwbGF5VHJlZShjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiwgY29uc3QgTGF5b3V0
OjpCb3gmLCBEaXNwbGF5OjpDb250YWluZXJCb3gmIHBhcmVudERpc3BsYXlCb3gsIERpc3BsYXk6
OkJveCogcHJldmlvdXNTaWJsaW5nQm94ID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICBmbG9hdCBt
X3BpeGVsU25hcHBpbmdGYWN0b3IgeyAxIH07Cit9OworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdH
SU5HKQordm9pZCBzaG93RGlzcGxheVRyZWUoY29uc3QgQm94Jik7CisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhNDMwMWQ5MDgwOWE1NzU0OTAyZTU4NGVkYjIz
ZWJkMWVkYjZlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94LmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKKworI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBEaXNwbGF5IHsKKworQm94OjpCb3goRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5
bGUmJiBkaXNwbGF5U3R5bGUsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgOiBtX2JvcmRl
ckJveEZyYW1lKGJvcmRlckJveCkKKyAgICAsIG1fc3R5bGUoV1RGTW92ZShkaXNwbGF5U3R5bGUp
KQorICAgICwgbV9mbGFncyhmbGFncykKK3sKK30KKwordm9pZCBCb3g6OnNldE5leHRTaWJsaW5n
KHN0ZDo6dW5pcXVlX3B0cjxCb3g+JiYgYm94KQoreworICAgIG1fbmV4dFNpYmxpbmcgPSBXVEZN
b3ZlKGJveCk7Cit9CisKK1N0cmluZyBCb3g6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAorewor
ICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCAiZGlzcGxheSBib3ggIiA8PCBi
b3JkZXJCb3hGcmFtZSgpIDw8ICIgKCIgPDwgdGhpcyA8PCAiKSI7CisgICAgcmV0dXJuIHN0cmVh
bS5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5oIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2NzVkYmY1
MTYxZGQwM2ZlMTk4NDJmMTk3ODE2OTRlYWNlOTFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmgKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5U3R5bGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIEJv
eCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoQm94
KTsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIDogdWludDhfdCB7CisgICAgICAgIENv
bnRhaW5lckJveCAgICAgICAgICAgID0gMSA8PCAwLAorICAgICAgICBJbWFnZUJveCAgICAgICAg
ICAgICAgICA9IDEgPDwgMSwKKyAgICB9OworCisgICAgQm94KEZsb2F0UmVjdCBib3JkZXJCb3gs
IFN0eWxlJiYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOworICAgIHZpcnR1YWwgfkJveCgpID0g
ZGVmYXVsdDsKKworICAgIGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGU7IH0KKworICAgIC8vIFJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgYm94LgorICAgIEZsb2F0UmVj
dCBib3JkZXJCb3hGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyQm94RnJhbWU7IH0KKwor
ICAgIGJvb2wgaXNDb250YWluZXJCb3goKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5z
KEZsYWdzOjpDb250YWluZXJCb3gpOyB9CisgICAgYm9vbCBpc0ltYWdlQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9mbGFncy5jb250YWlucyhGbGFnczo6SW1hZ2VCb3gpOyB9CisgICAgYm9vbCBpc1Jl
cGxhY2VkQm94KCkgY29uc3QgeyByZXR1cm4gbV9mbGFncy5jb250YWlucyhGbGFnczo6SW1hZ2VC
b3gpOyAvKiBhbmQgb3RoZXIgdHlwZXMgbGF0ZXIuICovIH0KKworICAgIGNvbnN0IEJveCogbmV4
dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CisgICAgdm9p
ZCBzZXROZXh0U2libGluZyhzdGQ6OnVuaXF1ZV9wdHI8Qm94PiYmKTsKKworICAgIHZpcnR1YWwg
U3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJl
Y3QgbV9ib3JkZXJCb3hGcmFtZTsKKyAgICBTdHlsZSBtX3N0eWxlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCb3g+IG1fbmV4dFNpYmxpbmc7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWV9CT1goVG9WYWx1ZVR5cGVOYW1l
LCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlz
cGxheTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXk6OkJveCYgYm94KSB7IHJldHVybiBib3gucHJlZGljYXRlOyB9IFwKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheUNTU1BhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUNTU1BhaW50ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzMGY4ZDg1YzI0MWQ0OGJmYjgzOGExMzQ5Mzhk
YzU5NzQzYWVkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Q1NTUGFpbnRlci5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUNTU1BhaW50ZXIuaCIKKworI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRpc3BsYXlDb250YWluZXJCb3gu
aCIKKyNpbmNsdWRlICJEaXNwbGF5SW1hZ2VCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5U3R5bGUu
aCIKKyNpbmNsdWRlICJEaXNwbGF5VHJlZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK3ZvaWQgQ1NTUGFpbnRlcjo6
cGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3gmIGRpc3BsYXlCb3gsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgRmxvYXRTaXplIHBhaW50T2Zmc2V0KQoreworICAgIGF1dG8gYm9yZGVyQm94
UmVjdCA9IGRpc3BsYXlCb3guYm9yZGVyQm94RnJhbWUoKTsKKyAgICBib3JkZXJCb3hSZWN0Lm1v
dmUocGFpbnRPZmZzZXQpOworICAgIAorICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZGlzcGxheUJv
eC5zdHlsZSgpOworCisgICAgLy8gQmFja2dyb3VuZCBjb2xvcgorICAgIGlmIChzdHlsZS5oYXNC
YWNrZ3JvdW5kKCkpIHsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChib3JkZXJCb3hSZWN0LCBz
dHlsZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIC8vIEZJWE1FOiBQYWludCBiYWNrZ3Jv
dW5kIGltYWdlLgorICAgIH0KKworICAgIC8vIEJvcmRlcgorICAgIGlmIChzdHlsZS5oYXNWaXNp
YmxlQm9yZGVyKCkpIHsKKyAgICAgICAgYXV0byBkcmF3Qm9yZGVyU2lkZSA9IFsmXShhdXRvIHN0
YXJ0LCBhdXRvIGVuZCwgY29uc3QgYXV0byYgYm9yZGVyU3R5bGUpIHsKKyAgICAgICAgICAgIGlm
ICghYm9yZGVyU3R5bGUud2lkdGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBpZiAoYm9yZGVyU3R5bGUuc3R5bGUoKSA9PSBCb3JkZXJTdHlsZTo6Tm9uZSB8fCBib3Jk
ZXJTdHlsZS5zdHlsZSgpID09IEJvcmRlclN0eWxlOjpIaWRkZW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJTdHlsZS5j
b2xvcigpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlclN0
eWxlLndpZHRoKCkpOworICAgICAgICAgICAgY29udGV4dC5kcmF3TGluZShzdGFydCwgZW5kKTsK
KyAgICAgICAgfTsKKworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjayk7CisKKyAgICAgICAgLy8gVG9wCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gYm9yZGVyV2lkdGggPSBzdHlsZS5ib3JkZXJUb3AoKS53aWR0aCgpOworICAgICAgICAgICAg
YXV0byBzdGFydCA9IGJvcmRlckJveFJlY3QubWluWE1pbllDb3JuZXIoKTsKKyAgICAgICAgICAg
IGF1dG8gZW5kID0gRmxvYXRQb2ludCB7IGJvcmRlckJveFJlY3QubWF4WCgpLCBzdGFydC55KCkg
KyBib3JkZXJXaWR0aCB9OworICAgICAgICAgICAgZHJhd0JvcmRlclNpZGUoc3RhcnQsIGVuZCwg
c3R5bGUuYm9yZGVyVG9wKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmlnaHQKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBib3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlclJpZ2h0KCku
d2lkdGgoKTsKKyAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBGbG9hdFBvaW50IHsgYm9yZGVyQm94
UmVjdC5tYXhYKCkgLSBib3JkZXJXaWR0aCwgYm9yZGVyQm94UmVjdC55KCkgfTsKKyAgICAgICAg
ICAgIGF1dG8gZW5kID0gRmxvYXRQb2ludCB7IHN0YXJ0LngoKSArIGJvcmRlcldpZHRoLCBib3Jk
ZXJCb3hSZWN0Lm1heFkoKSB9OworICAgICAgICAgICAgZHJhd0JvcmRlclNpZGUoc3RhcnQsIGVu
ZCwgc3R5bGUuYm9yZGVyUmlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBCb3R0b20K
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byBib3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlckJv
dHRvbSgpLndpZHRoKCk7CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gRmxvYXRQb2ludCB7IGJv
cmRlckJveFJlY3QueCgpLCBib3JkZXJCb3hSZWN0Lm1heFkoKSAtIGJvcmRlcldpZHRoIH07Cisg
ICAgICAgICAgICBhdXRvIGVuZCA9IEZsb2F0UG9pbnQgeyBib3JkZXJCb3hSZWN0Lm1heFgoKSwg
c3RhcnQueSgpICsgYm9yZGVyV2lkdGggfTsKKyAgICAgICAgICAgIGRyYXdCb3JkZXJTaWRlKHN0
YXJ0LCBlbmQsIHN0eWxlLmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IExlZnQKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBib3JkZXJXaWR0aCA9IHN0eWxlLmJv
cmRlckxlZnQoKS53aWR0aCgpOworICAgICAgICAgICAgYXV0byBzdGFydCA9IGJvcmRlckJveFJl
Y3QubWluWE1pbllDb3JuZXIoKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gRmxvYXRQb2ludCB7
IHN0YXJ0LngoKSArIGJvcmRlcldpZHRoLCBib3JkZXJCb3hSZWN0Lm1heFkoKSB9OworICAgICAg
ICAgICAgZHJhd0JvcmRlclNpZGUoc3RhcnQsIGVuZCwgc3R5bGUuYm9yZGVyTGVmdCgpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBDU1NQYWludGVyOjpwYWludEJveENvbnRlbnQoY29u
c3QgQm94JiBib3gsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRmxvYXRTaXplIHBhaW50T2Zm
c2V0KQoreworICAgIGlmIChpczxJbWFnZUJveD4oYm94KSkgeworICAgICAgICBhdXRvJiBpbWFn
ZUJveCA9IGRvd25jYXN0PEltYWdlQm94Pihib3gpOworICAgICAgICAKKyAgICAgICAgYXV0byog
aW1hZ2UgPSBpbWFnZUJveC5pbWFnZSgpOworICAgICAgICBhdXRvIGltYWdlUmVjdCA9IGltYWdl
Qm94LnJlcGxhY2VkQ29udGVudFJlY3QoKTsKKyAgICAgICAgaW1hZ2VSZWN0Lm1vdmUocGFpbnRP
ZmZzZXQpOworCisgICAgICAgIGlmIChpbWFnZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFp
bnRCb3goY29uc3QgQm94JiBib3gsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRmxvYXRTaXpl
IHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgYXV0byByZWxh
dGl2ZVJlY3QgPSBib3guYm9yZGVyQm94RnJhbWUoKTsKKyAgICByZWxhdGl2ZVJlY3QubW92ZShw
YWludE9mZnNldCk7CisgICAgaWYgKCFkaXJ0eVJlY3QuaW50ZXJzZWN0cyhlbmNsb3NpbmdJbnRS
ZWN0KHJlbGF0aXZlUmVjdCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXM8SW1hZ2VC
b3g+KGJveCkpIHsKKyAgICAgICAgYXV0byYgaW1hZ2VCb3ggPSBkb3duY2FzdDxJbWFnZUJveD4o
Ym94KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8qIGltYWdlID0gaW1hZ2VCb3guaW1hZ2UoKTsK
KyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBpbWFnZUJveC5yZXBsYWNlZENvbnRlbnRSZWN0KCk7
CisgICAgICAgIGltYWdlUmVjdC5tb3ZlKHBhaW50T2Zmc2V0KTsKKworICAgICAgICBpZiAoaW1h
Z2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7Cisg
ICAgfQorCisgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhib3gsIGNvbnRleHQsIHBhaW50T2Zmc2V0
KTsKKyAgICBwYWludEJveENvbnRlbnQoYm94LCBjb250ZXh0LCBwYWludE9mZnNldCk7Cit9CisK
K3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRTdGFja2luZ0NvbnRleHQoY29uc3QgQm94JiBjb250ZXh0
Um9vdCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBGbG9hdFNpemUgcGFpbnRPZmZzZXQsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZGlydHlSZWN0KTsK
KworICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoY29udGV4dFJvb3QsIGNvbnRleHQsIHBhaW50T2Zm
c2V0KTsKKyAgICAvLyBGSVhNRTogVGFibGUgcGFpbnRpbmcgaXMgc3BlY2lhbC4KKworICAgIGlm
IChpczxDb250YWluZXJCb3g+KGNvbnRleHRSb290KSkgeworICAgICAgICBhdXRvJiBjb250YWlu
ZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGNvbnRleHRSb290KTsKKworICAgICAgICBW
ZWN0b3I8Y29uc3QgQm94Kj4gbmVnYXRpdmVaT3JkZXJMaXN0OworICAgICAgICBWZWN0b3I8Y29u
c3QgQm94Kj4gcG9zaXRpdmVaT3JkZXJMaXN0OworICAgIAorICAgICAgICByZWN1cnNpdmVDb2xs
ZWN0TGF5ZXJzKGNvbnRhaW5lckJveCwgbmVnYXRpdmVaT3JkZXJMaXN0LCBwb3NpdGl2ZVpPcmRl
ckxpc3QpOworCisgICAgICAgIGF1dG8gY29tcGFyZVpJbmRleCA9IFtdIChjb25zdCBCb3gqIGEs
IGNvbnN0IEJveCogYikgeworICAgICAgICAgICAgcmV0dXJuIGEtPnN0eWxlKCkuekluZGV4KCku
dmFsdWUoKSA8IGItPnN0eWxlKCkuekluZGV4KCkudmFsdWUoKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBzdGQ6OnN0YWJsZV9zb3J0KHBvc2l0aXZlWk9yZGVyTGlzdC5iZWdpbigpLCBwb3NpdGl2
ZVpPcmRlckxpc3QuZW5kKCksIGNvbXBhcmVaSW5kZXgpOworICAgICAgICBzdGQ6OnN0YWJsZV9z
b3J0KG5lZ2F0aXZlWk9yZGVyTGlzdC5iZWdpbigpLCBuZWdhdGl2ZVpPcmRlckxpc3QuZW5kKCks
IGNvbXBhcmVaSW5kZXgpOworCisgICAgICAgIGZvciAoYXV0byogYm94IDogbmVnYXRpdmVaT3Jk
ZXJMaXN0KQorICAgICAgICAgICAgcGFpbnRTdGFja2luZ0NvbnRleHQoKmJveCwgY29udGV4dCwg
cGFpbnRPZmZzZXQsIGRpcnR5UmVjdCk7CisKKyAgICAgICAgLy8gRklYTUU6IFdvcmsgaW4gcHJv
Z3Jlc3MuIE5lZWRzIHRvIHBhaW50IGFsbCBub24tcG9zaXRpb25lZCBkZXNjZW5kYW50cy4KKyAg
ICAgICAgcGFpbnRCb3hDb250ZW50KGNvbnRleHRSb290LCBjb250ZXh0LCBwYWludE9mZnNldCk7
CisKKyAgICAgICAgZm9yIChhdXRvKiBib3ggOiBwb3NpdGl2ZVpPcmRlckxpc3QpIHsKKyAgICAg
ICAgICAgIGlmIChib3gtPnN0eWxlKCkuaXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgICAg
ICAgICBwYWludFN0YWNraW5nQ29udGV4dCgqYm94LCBjb250ZXh0LCBwYWludE9mZnNldCwgZGly
dHlSZWN0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYWludEJveCgqYm94
LCBjb250ZXh0LCBwYWludE9mZnNldCwgZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBDU1NQYWludGVyOjpyZWN1cnNpdmVDb2xsZWN0TGF5ZXJzKGNvbnN0IENvbnRhaW5l
ckJveCYgY29udGFpbmVyQm94LCBWZWN0b3I8Y29uc3QgQm94Kj4mIG5lZ2F0aXZlWk9yZGVyTGlz
dCwgVmVjdG9yPGNvbnN0IEJveCo+JiBwb3NpdGl2ZVpPcmRlckxpc3QpCit7CisgICAgZm9yIChj
b25zdCBhdXRvKiBjaGlsZCA9IGNvbnRhaW5lckJveC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS5w
YXJ0aWNpcGF0ZXNJblpPcmRlclNvcnRpbmcoKSkgeworICAgICAgICAgICAgYXV0byB6SW5kZXgg
PSBjaGlsZC0+c3R5bGUoKS56SW5kZXgoKS52YWx1ZU9yKDApOworCisgICAgICAgICAgICBpZiAo
ekluZGV4IDwgMCkKKyAgICAgICAgICAgICAgICBuZWdhdGl2ZVpPcmRlckxpc3QuYXBwZW5kKGNo
aWxkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3NpdGl2ZVpPcmRlckxp
c3QuYXBwZW5kKGNoaWxkKTsKKworICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLmlzU3Rh
Y2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXM8Q29udGFpbmVyQm94PigqY2hpbGQpKQorICAgICAgICAgICAgcmVjdXJz
aXZlQ29sbGVjdExheWVycyhkb3duY2FzdDxDb250YWluZXJCb3g+KCpjaGlsZCksIG5lZ2F0aXZl
Wk9yZGVyTGlzdCwgcG9zaXRpdmVaT3JkZXJMaXN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFp
bnRlcjo6cGFpbnRUcmVlKGNvbnN0IFRyZWUmIGRpc3BsYXlUcmVlLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBwYWludFN0YWNraW5n
Q29udGV4dChkaXNwbGF5VHJlZS5yb290Qm94KCksIGNvbnRleHQsIHsgfSwgZGlydHlSZWN0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oIGIvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjM3OWMy
ZTMwYTMxZTVjZGM1MDI2NjBlNTk3NGIxYzRmOTliOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaApAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CisKK25hbWVz
cGFjZSBMYXlvdXQgeworY2xhc3MgTGF5b3V0U3RhdGU7Cit9CisKK25hbWVzcGFjZSBEaXNwbGF5
IHsKKworY2xhc3MgQm94OworY2xhc3MgVHJlZTsKKworY2xhc3MgQ1NTUGFpbnRlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgcGFpbnRTdGFja2luZ0NvbnRleHQoY29uc3QgQm94JiwgR3Jh
cGhpY3NDb250ZXh0JiwgRmxvYXRTaXplIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHBhaW50VHJlZShjb25zdCBUcmVlJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKworCitwcml2YXRlOgor
ICAgIHN0YXRpYyB2b2lkIHBhaW50Qm94KGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYsIEZs
b2F0U2l6ZSBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICBzdGF0
aWMgdm9pZCBwYWludEJveERlY29yYXRpb25zKGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYs
IEZsb2F0U2l6ZSBwYWludE9mZnNldCk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRCb3hDb250ZW50
KGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYsIEZsb2F0U2l6ZSBwYWludE9mZnNldCk7CisK
KyAgICBzdGF0aWMgdm9pZCByZWN1cnNpdmVDb2xsZWN0TGF5ZXJzKGNvbnN0IENvbnRhaW5lckJv
eCYsIFZlY3Rvcjxjb25zdCBCb3gqPiYgbmVnYXRpdmVaT3JkZXJMaXN0LCBWZWN0b3I8Y29uc3Qg
Qm94Kj4mIHBvc2l0aXZlWk9yZGVyTGlzdCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlDb250YWluZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUNvbnRhaW5lckJveC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTk5MTUxZjk0NmY2YzExOWRjMGZkNzdkOGFm
Mzg5OGYzMmY0NGNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlDb250YWluZXJCb3guY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUNvbnRhaW5lckJveC5oIgor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNw
bGF5U3R5bGUuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK0NvbnRhaW5lckJveDo6Q29udGFp
bmVyQm94KEZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlKQorICAgIDog
Qm94KGJvcmRlckJveCwgV1RGTW92ZShkaXNwbGF5U3R5bGUpLCB7IEZsYWdzOjpDb250YWluZXJC
b3ggfSkKK3sKK30KKwordm9pZCBDb250YWluZXJCb3g6OnNldEZpcnN0Q2hpbGQoc3RkOjp1bmlx
dWVfcHRyPEJveD4mJiBib3gpCit7CisgICAgbV9maXJzdENoaWxkID0gV1RGTW92ZShib3gpOwor
fQorCitTdHJpbmcgQ29udGFpbmVyQm94OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAg
ICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgImNvbnRhaW5lciBib3ggIiA8PCBi
b3JkZXJCb3hGcmFtZSgpIDw8ICIgKCIgPDwgdGhpcyA8PCAiKSI7CisgICAgcmV0dXJuIHN0cmVh
bS5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJv
eC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYwMGRiNjdkNTM2ZWQ1ZjBiOGM0MzYzOWExZjQ3NjEwNmY5YzZkM2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVy
Qm94LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5Qm94
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworY2xhc3Mg
Q29udGFpbmVyQm94IDogcHVibGljIEJveCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURf
V0lUSF9IRUFQX0lERU5USUZJRVIoQ29udGFpbmVyQm94KTsKK3B1YmxpYzoKKyAgICBDb250YWlu
ZXJCb3goRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJik7CisgICAgCisgICAgY29uc3QgQm94
KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkLmdldCgpOyB9CisgICAg
dm9pZCBzZXRGaXJzdENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxCb3g+JiYpOworCitwcml2YXRlOgor
ICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Qm94PiBtX2ZpcnN0Q2hpbGQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNw
bGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWV9CT1goQ29udGFpbmVyQm94LCBpc0NvbnRhaW5lckJveCgpKQorCisjZW5kaWYgLy8gRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUltYWdlQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDE4ODYxYzhjZjVlNDAwMDA5
NWU5NjZiM2NlMWMyMGJmZjhjOGFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworSW1hZ2VCb3g6OkltYWdlQm94KEZsb2F0UmVj
dCBib3JkZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlKQorICAgIDogUmVwbGFjZWRCb3goYm9y
ZGVyQm94LCBXVEZNb3ZlKGRpc3BsYXlTdHlsZSksIHsgRmxhZ3M6OkltYWdlQm94IH0pCit7Cit9
CisKK3ZvaWQgSW1hZ2VCb3g6OnNldEltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBtX2ltYWdl
ID0gaW1hZ2U7Cit9CisKK1N0cmluZyBJbWFnZUJveDo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0
Cit7CisgICAgVGV4dFN0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8ICJpbWFnZSBib3ggIiA8
PCBib3JkZXJCb3hGcmFtZSgpIDw8ICIgKCIgPDwgdGhpcyA8PCAiKSByZXBsYWNlZCBjb250ZW50
IHJlY3Q6ICIgPDwgcmVwbGFjZWRDb250ZW50UmVjdCgpIDw8ICIgaW1hZ2U6ICIgPDwgbV9pbWFn
ZS5nZXQoKTsKKyAgICByZXR1cm4gc3RyZWFtLnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlJbWFnZUJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMWI5N2IzNGQwZjg4NTI1NzRmZGQxY2M3ZjA2
YWRjZTNkZjI5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5SW1hZ2VCb3guaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1
ZGUgIkRpc3BsYXlSZXBsYWNlZEJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEltYWdlOworCituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIFN0eWxlOworCitjbGFzcyBJ
bWFnZUJveCA6IHB1YmxpYyBSZXBsYWNlZEJveCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoSW5hZ2VCb3gpOworcHVibGljOgorICAgIEltYWdlQm94
KEZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYpOworICAgIAorICAgIEltYWdlKiBpbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlKEltYWdl
Kik7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5h
bDsKKworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIERp
c3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZX0JPWChJbWFnZUJveCwgaXNJbWFnZUJveCgpKQorCisjZW5kaWYgLy8gRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDMwODQyZTRlNjg4NDc1NjY2
NzUxYmM4OWI0YmEzODg0NjkyODJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlSZXBsYWNlZEJv
eC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgRGlzcGxheSB7CisKK1JlcGxhY2VkQm94OjpSZXBsYWNlZEJveChGbG9hdFJlY3QgYm9yZGVy
Qm94LCBTdHlsZSYmIGRpc3BsYXlTdHlsZSwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICA6
IEJveChib3JkZXJCb3gsIFdURk1vdmUoZGlzcGxheVN0eWxlKSwgZmxhZ3MpCit7Cit9CisKK3Zv
aWQgUmVwbGFjZWRCb3g6OnNldFJlcGxhY2VkQ29udGVudFJlY3QoRmxvYXRSZWN0IHJlY3QpCit7
CisgICAgbV9yZXBsYWNlZENvbnRlbnRSZWN0ID0gcmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
RGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlSZXBsYWNlZEJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1MjRjZDAxMjUxN2VmMGQ4MDJhNmYxZmZm
ZGU4N2FlZTFlODMyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKwor
I2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IERpc3BsYXkgeworCitjbGFzcyBSZXBsYWNlZEJveCA6IHB1YmxpYyBCb3ggeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlcGxhY2VkQm94KTsKK3B1
YmxpYzoKKyAgICBSZXBsYWNlZEJveChGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmLCBPcHRp
b25TZXQ8RmxhZ3M+KTsKKyAgICAKKyAgICBGbG9hdFJlY3QgcmVwbGFjZWRDb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwbGFjZWRDb250ZW50UmVjdDsgfQorICAgIHZvaWQgc2V0UmVw
bGFjZWRDb250ZW50UmVjdChGbG9hdFJlY3QpOworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBt
X3JlcGxhY2VkQ29udGVudFJlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWV9CT1go
UmVwbGFjZWRCb3gsIGlzUmVwbGFjZWRCb3goKSkKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlT
dHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwYWY3ZmY3NGI1ZDI2MGZjYTkwMDMzZmMxNWIzNmNlYjQ0
YmRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlTdHlsZS5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5U3R5bGUuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQm9yZGVyRGF0YS5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitTdHlsZTo6U3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIG1fYmFja2dyb3VuZENvbG9yID0gc3R5bGUudmlz
aXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKTsKKworICAgIGNvbnN0IGF1dG8mIGJvcmRlckRhdGEgPSBzdHlsZS5ib3JkZXIoKTsKKyAg
ICAKKyAgICBhdXRvIGJvcmRlclZhbHVlV2l0aFJlc29sdmVkQ29sb3IgPSBbJnN0eWxlXShjb25z
dCBCb3JkZXJWYWx1ZSYgdmFsdWUsIENTU1Byb3BlcnR5SUQgY29sb3JQcm9wZXJ0eUlEKSB7Cisg
ICAgICAgIGF1dG8gcmVzb2x2ZWRWYWx1ZSA9IHZhbHVlOworICAgICAgICByZXNvbHZlZFZhbHVl
LnNldENvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihjb2xv
clByb3BlcnR5SUQpKTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7CisgICAgfTsKKyAg
ICAKKyAgICBtX2JvcmRlci5sZWZ0ID0gYm9yZGVyVmFsdWVXaXRoUmVzb2x2ZWRDb2xvcihib3Jk
ZXJEYXRhLmxlZnQoKSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpOworICAgIG1fYm9yZGVy
LnJpZ2h0ID0gYm9yZGVyVmFsdWVXaXRoUmVzb2x2ZWRDb2xvcihib3JkZXJEYXRhLnJpZ2h0KCks
IENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcik7CisgICAgbV9ib3JkZXIudG9wID0gYm9yZGVy
VmFsdWVXaXRoUmVzb2x2ZWRDb2xvcihib3JkZXJEYXRhLnRvcCgpLCBDU1NQcm9wZXJ0eUJvcmRl
clRvcENvbG9yKTsKKyAgICBtX2JvcmRlci5ib3R0b20gPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZl
ZENvbG9yKGJvcmRlckRhdGEuYm90dG9tKCksIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3Ip
OworCisgICAgbV9ib3JkZXIuaW1hZ2UgPSBib3JkZXJEYXRhLmltYWdlKCk7CisKKyAgICBpZiAo
IXN0eWxlLmhhc0F1dG9Vc2VkWkluZGV4KCkpCisgICAgICAgIG1fekluZGV4ID0gc3R5bGUudXNl
ZFpJbmRleCgpOworCisgICAgc2V0SXNQb3NpdGlvbmVkKHN0eWxlLnBvc2l0aW9uKCkgIT0gUG9z
aXRpb25UeXBlOjpTdGF0aWMpOworICAgIHNldElzRmxvYXRpbmcoc3R5bGUuZmxvYXRpbmcoKSAh
PSBGbG9hdDo6Tm8pOworfQorCitib29sIFN0eWxlOjpoYXNCYWNrZ3JvdW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3IuaXNWaXNpYmxlKCkgfHwgaGFzQmFja2dyb3Vu
ZEltYWdlKCk7Cit9CisKK2Jvb2wgU3R5bGU6Omhhc1Zpc2libGVCb3JkZXIoKSBjb25zdAorewor
ICAgIGJvb2wgaGF2ZUltYWdlID0gbV9ib3JkZXIuaW1hZ2UuaGFzSW1hZ2UoKTsKKyAgICByZXR1
cm4gbV9ib3JkZXIubGVmdC5pc1Zpc2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIucmlnaHQu
aXNWaXNpYmxlKCFoYXZlSW1hZ2UpIHx8IG1fYm9yZGVyLnRvcC5pc1Zpc2libGUoIWhhdmVJbWFn
ZSkgfHwgbV9ib3JkZXIuYm90dG9tLmlzVmlzaWJsZSghaGF2ZUltYWdlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlZTY5MTBkYjMzNzkwZTY1NmY0M2YxYjdhY2Fm
MWQ2ZWQyMGQ3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5U3R5bGUuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUg
IkJvcmRlclZhbHVlLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJOaW5lUGllY2VJ
bWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU3R5bGU7CisKK25h
bWVzcGFjZSBEaXNwbGF5IHsKKworLy8gU3R5bGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHBhaW50
IGEgRGlzcGxheTo6Qm94LgorLy8gQWxsIGNvbG9ycyBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gdGhl
aXIgcGFpbnRlZCB2YWx1ZXMgW3Zpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcigp
XS4KKy8vIFNob3VsZCBjb250YWluIG9ubHkgYWJzb2x1dGUgZmxvYXQgdmFsdWVzOyBubyBMZW5n
dGhzICh3aGljaCBjYW4gY29udGFpbiBjYWxjIHZhbHVlcykuCisKK2NsYXNzIFN0eWxlIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihTdHlsZSk7Citw
dWJsaWM6CisKKyAgICBlbnVtIGNsYXNzIEZsYWdzIDogdWludDhfdCB7CisgICAgICAgIFBvc2l0
aW9uZWQgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIEZsb2F0aW5nICAgICAgICAgICAgPSAx
IDw8IDEsCisgICAgfTsKKworICAgIFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgCisg
ICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dy
b3VuZENvbG9yOyB9CisgICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgYm9vbCBo
YXNCYWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBGSVhNRQorCisg
ICAgYm9vbCBoYXNWaXNpYmxlQm9yZGVyKCkgY29uc3Q7CisgICAgY29uc3QgQm9yZGVyVmFsdWUm
IGJvcmRlckxlZnQoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlci5sZWZ0OyB9CisgICAgY29uc3Qg
Qm9yZGVyVmFsdWUmIGJvcmRlclJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXIucmlnaHQ7
IH0KKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyVG9wKCkgY29uc3QgeyByZXR1cm4gbV9i
b3JkZXIudG9wOyB9CisgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckJvdHRvbSgpIGNvbnN0
IHsgcmV0dXJuIG1fYm9yZGVyLmJvdHRvbTsgfQorCisgICAgT3B0aW9uYWw8aW50PiB6SW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3pJbmRleDsgfQorICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3pJbmRleC5oYXNWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBz
ZXRJc1Bvc2l0aW9uZWQoYm9vbCB2YWx1ZSkgeyBtX2ZsYWdzLnNldCh7IEZsYWdzOjpQb3NpdGlv
bmVkIH0sIHZhbHVlKTsgfQorICAgIGJvb2wgaXNQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFncy5jb250YWlucyhGbGFnczo6UG9zaXRpb25lZCk7IH0KKworICAgIHZvaWQgc2V0SXNG
bG9hdGluZyhib29sIHZhbHVlKSB7IG1fZmxhZ3Muc2V0KHsgRmxhZ3M6OkZsb2F0aW5nIH0sIHZh
bHVlKTsgfQorICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MuY29u
dGFpbnMoRmxhZ3M6OkZsb2F0aW5nKTsgfQorCisgICAgYm9vbCBwYXJ0aWNpcGF0ZXNJblpPcmRl
clNvcnRpbmcoKSBjb25zdCB7IHJldHVybiBpc1Bvc2l0aW9uZWQoKSB8fCBpc1N0YWNraW5nQ29u
dGV4dCgpOyB9CisKK3ByaXZhdGU6CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CisKKyAg
ICBzdHJ1Y3QgeworICAgICAgICBCb3JkZXJWYWx1ZSBsZWZ0OworICAgICAgICBCb3JkZXJWYWx1
ZSByaWdodDsKKyAgICAgICAgQm9yZGVyVmFsdWUgdG9wOworICAgICAgICBCb3JkZXJWYWx1ZSBi
b3R0b207CisKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CisgICAgfSBtX2JvcmRlcjsK
KworICAgIE9wdGlvbmFsPGludD4gbV96SW5kZXg7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2Zs
YWdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMTdmNmZkNTAxODlmZWMyNjdkMmIyN2FlOTE0MjcyZGJj
MGEwNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRGlzcGxheUJveC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCi0KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1uYW1lc3BhY2UgRGlzcGxheSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChCb3gpOwotCi1Cb3g6OkJveChjb25zdCBCb3gmIG90aGVyKQotICAgIDogbV90b3BMZWZ0
KG90aGVyLm1fdG9wTGVmdCkKLSAgICAsIG1fY29udGVudFdpZHRoKG90aGVyLm1fY29udGVudFdp
ZHRoKQotICAgICwgbV9jb250ZW50SGVpZ2h0KG90aGVyLm1fY29udGVudEhlaWdodCkKLSAgICAs
IG1faG9yaXpvbnRhbE1hcmdpbihvdGhlci5tX2hvcml6b250YWxNYXJnaW4pCi0gICAgLCBtX3Zl
cnRpY2FsTWFyZ2luKG90aGVyLm1fdmVydGljYWxNYXJnaW4pCi0gICAgLCBtX2hhc0NsZWFyYW5j
ZShvdGhlci5tX2hhc0NsZWFyYW5jZSkKLSAgICAsIG1fYm9yZGVyKG90aGVyLm1fYm9yZGVyKQot
ICAgICwgbV9wYWRkaW5nKG90aGVyLm1fcGFkZGluZykKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
ICwgbV9oYXNWYWxpZFRvcChvdGhlci5tX2hhc1ZhbGlkVG9wKQotICAgICwgbV9oYXNWYWxpZExl
ZnQob3RoZXIubV9oYXNWYWxpZExlZnQpCi0gICAgLCBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bihvdGhlci5tX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbikKLSAgICAsIG1faGFzVmFsaWRWZXJ0
aWNhbE1hcmdpbihvdGhlci5tX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pCi0gICAgLCBtX2hhc1Zh
bGlkQm9yZGVyKG90aGVyLm1faGFzVmFsaWRCb3JkZXIpCi0gICAgLCBtX2hhc1ZhbGlkUGFkZGlu
ZyhvdGhlci5tX2hhc1ZhbGlkUGFkZGluZykKLSAgICAsIG1faGFzVmFsaWRDb250ZW50SGVpZ2h0
KG90aGVyLm1faGFzVmFsaWRDb250ZW50SGVpZ2h0KQotICAgICwgbV9oYXNWYWxpZENvbnRlbnRX
aWR0aChvdGhlci5tX2hhc1ZhbGlkQ29udGVudFdpZHRoKQotICAgICwgbV9oYXNQcmVjb21wdXRl
ZE1hcmdpbkJlZm9yZShvdGhlci5tX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKQotI2VuZGlm
Ci17Ci19Ci0KLUJveDo6fkJveCgpCi17Ci19Ci0KLVJlY3QgQm94OjptYXJnaW5Cb3goKSBjb25z
dAotewotICAgIGF1dG8gYm9yZGVyQm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7Ci0KLSAgICBSZWN0
IG1hcmdpbkJveDsKLSAgICBtYXJnaW5Cb3guc2V0VG9wKGJvcmRlckJveC50b3AoKSAtIG1hcmdp
bkJlZm9yZSgpKTsKLSAgICBtYXJnaW5Cb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpIC0gbWFy
Z2luU3RhcnQoKSk7Ci0gICAgbWFyZ2luQm94LnNldEhlaWdodChib3JkZXJCb3guaGVpZ2h0KCkg
KyBtYXJnaW5CZWZvcmUoKSArIG1hcmdpbkFmdGVyKCkpOwotICAgIG1hcmdpbkJveC5zZXRXaWR0
aChib3JkZXJCb3gud2lkdGgoKSArIG1hcmdpblN0YXJ0KCkgKyBtYXJnaW5FbmQoKSk7Ci0gICAg
cmV0dXJuIG1hcmdpbkJveDsKLX0KLQotUmVjdCBCb3g6OmJvcmRlckJveCgpIGNvbnN0Ci17Ci0g
ICAgUmVjdCBib3JkZXJCb3g7Ci0gICAgYm9yZGVyQm94LnNldFRvcExlZnQoeyB9KTsKLSAgICBi
b3JkZXJCb3guc2V0U2l6ZSh7IHdpZHRoKCksIGhlaWdodCgpIH0pOwotICAgIHJldHVybiBib3Jk
ZXJCb3g7Ci19Ci0KLVJlY3QgQm94OjpwYWRkaW5nQm94KCkgY29uc3QKLXsKLSAgICBhdXRvIGJv
cmRlckJveCA9IHRoaXMtPmJvcmRlckJveCgpOwotCi0gICAgUmVjdCBwYWRkaW5nQm94OwotICAg
IHBhZGRpbmdCb3guc2V0VG9wKGJvcmRlckJveC50b3AoKSArIGJvcmRlclRvcCgpKTsKLSAgICBw
YWRkaW5nQm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSArIGJvcmRlckxlZnQoKSk7Ci0gICAg
cGFkZGluZ0JveC5zZXRIZWlnaHQoYm9yZGVyQm94LmJvdHRvbSgpIC0gYm9yZGVyVG9wKCkgLSBi
b3JkZXJCb3R0b20oKSk7Ci0gICAgcGFkZGluZ0JveC5zZXRXaWR0aChib3JkZXJCb3gud2lkdGgo
KSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkpOwotICAgIHJldHVybiBwYWRkaW5nQm94
OwotfQotCi1SZWN0IEJveDo6Y29udGVudEJveCgpIGNvbnN0Ci17Ci0gICAgUmVjdCBjb250ZW50
Qm94OwotICAgIGNvbnRlbnRCb3guc2V0VG9wKGNvbnRlbnRCb3hUb3AoKSk7Ci0gICAgY29udGVu
dEJveC5zZXRMZWZ0KGNvbnRlbnRCb3hMZWZ0KCkpOwotICAgIGNvbnRlbnRCb3guc2V0V2lkdGgo
Y29udGVudEJveFdpZHRoKCkpOwotICAgIGNvbnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3hI
ZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGNvbnRlbnRCb3g7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmOTQ2YWVhYzQ3ZmMyNTVkYjdmMGY0YmFkZWNmOWE2
MzcyNjc2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiRGlzcGxheVJlY3Qu
aCIKLSNpbmNsdWRlICJMYXlvdXRVbml0cy5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIERpc3BsYXkgewotCi1jbGFzcyBCb3gg
ewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQm94KTsKLXB1YmxpYzoKLSAgICBCb3goY29u
c3QgQm94Jik7Ci0gICAgQm94KCkgPSBkZWZhdWx0OwotICAgIH5Cb3goKTsKLQotICAgIExheW91
dFVuaXQgdG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB0b3AoKSArIGhlaWdodCgpOyB9Ci0gICAg
TGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxlZnQoKSArIHdpZHRoKCk7IH0KLQot
ICAgIExheW91dFBvaW50IHRvcExlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCBib3R0b21S
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHsgcmlnaHQoKSwgYm90dG9tKCkgfTsgfQotCi0gICAgTGF5
b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4geyB3aWR0aCgpLCBoZWlnaHQoKSB9OyB9Ci0g
ICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKSArIHBhZGRp
bmdCb3hXaWR0aCgpICsgYm9yZGVyUmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgaGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCkgKyBib3JkZXJC
b3R0b20oKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS5pc0Vt
cHR5KCk7IH0KLSAgICBSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiB7IHRvcCgpLCBsZWZ0KCks
IHdpZHRoKCksIGhlaWdodCgpIH07IH0KLSAgICBSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3Qg
eyByZXR1cm4geyB0b3AoKSAtIG1hcmdpbkJlZm9yZSgpLCBsZWZ0KCkgLSBtYXJnaW5TdGFydCgp
LCBtYXJnaW5TdGFydCgpICsgd2lkdGgoKSArIG1hcmdpbkVuZCgpLCBtYXJnaW5CZWZvcmUoKSAr
IGhlaWdodCgpICsgbWFyZ2luQWZ0ZXIoKSB9OyB9Ci0KLSAgICBzdHJ1Y3QgVmVydGljYWxNYXJn
aW4gewotICAgICAgICBMYXlvdXRVbml0IGJlZm9yZTsKLSAgICAgICAgTGF5b3V0VW5pdCBhZnRl
cjsKLSAgICB9OwotICAgIFZlcnRpY2FsTWFyZ2luIHZlcnRpY2FsTWFyZ2luKCkgY29uc3Q7Ci0K
LSAgICBzdHJ1Y3QgSG9yaXpvbnRhbE1hcmdpbiB7Ci0gICAgICAgIExheW91dFVuaXQgc3RhcnQ7
Ci0gICAgICAgIExheW91dFVuaXQgZW5kOwotICAgIH07Ci0gICAgSG9yaXpvbnRhbE1hcmdpbiBo
b3Jpem9udGFsTWFyZ2luKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUoKSBj
b25zdDsKLSAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5p
dCBtYXJnaW5BZnRlcigpIGNvbnN0OwotICAgIExheW91dFVuaXQgbWFyZ2luRW5kKCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNDbGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2hhc0NsZWFyYW5jZTsg
fQotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJUb3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJv
cmRlckxlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckJvdHRvbSgpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgYm9yZGVyUmlnaHQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHZlcnRp
Y2FsQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKTsg
fQotICAgIExheW91dFVuaXQgaG9yaXpvbnRhbEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7IH0KLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBh
ZGRpbmdUb3AoKSBjb25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nTGVmdCgp
IGNvbnN0OwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdCb3R0b20oKSBjb25zdDsK
LSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiB2ZXJ0aWNhbFBhZGRpbmcoKSBjb25zdDsKLSAgICBPcHRpb25hbDxM
YXlvdXRVbml0PiBob3Jpem9udGFsUGFkZGluZygpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBj
b250ZW50Qm94VG9wKCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0JveFRvcCgpICsgcGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gcGFkZGluZ0JveExlZnQoKSArIHBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsgfQot
ICAgIExheW91dFVuaXQgY29udGVudEJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRC
b3hUb3AoKSArIGNvbnRlbnRCb3hIZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgY29udGVudEJv
eFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29udGVudEJveExlZnQoKSArIGNvbnRlbnRCb3hXaWR0
aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94SGVpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBjb250ZW50Qm94V2lkdGgoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgcGFkZGlu
Z0JveFRvcCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBw
YWRkaW5nQm94TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQotICAgIExheW91
dFVuaXQgcGFkZGluZ0JveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSAr
IHBhZGRpbmdCb3hIZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gcGFkZGluZ0JveExlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCkgKyBjb250ZW50Qm94SGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tKCkudmFs
dWVPcigwKTsgfQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApICsgY29udGVudEJveFdpZHRoKCkgKyBwYWRkaW5n
UmlnaHQoKS52YWx1ZU9yKDApOyB9Ci0KLSAgICBMYXlvdXRVbml0IGJvcmRlckJveEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVy
Qm90dG9tKCk7IH0KLSAgICBMYXlvdXRVbml0IGJvcmRlckJveFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0JveFdpZHRoKCkgKyBib3JkZXJSaWdodCgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBtYXJnaW5Cb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZv
cmUoKSArIGJvcmRlckJveEhlaWdodCgpICsgbWFyZ2luQWZ0ZXIoKTsgfQotICAgIExheW91dFVu
aXQgbWFyZ2luQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgYm9yZGVy
Qm94V2lkdGgoKSArIG1hcmdpbkVuZCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsTWFy
Z2luQm9yZGVyQW5kUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgdmVy
dGljYWxCb3JkZXIoKSArIHZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCkgKyBtYXJnaW5BZnRl
cigpOyB9Ci0gICAgTGF5b3V0VW5pdCBob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBob3Jpem9udGFsQm9yZGVyKCkgKyBob3Jp
em9udGFsUGFkZGluZygpLnZhbHVlT3IoMCkgKyBtYXJnaW5FbmQoKTsgfQotCi0gICAgUmVjdCBt
YXJnaW5Cb3goKSBjb25zdDsKLSAgICBSZWN0IGJvcmRlckJveCgpIGNvbnN0OwotICAgIFJlY3Qg
cGFkZGluZ0JveCgpIGNvbnN0OwotICAgIFJlY3QgY29udGVudEJveCgpIGNvbnN0OwotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICB2b2lkIHNldEhhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCkg
eyBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlID0gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2
b2lkIHNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHNldFRvcChMYXlv
dXRVbml0KTsKLSAgICB2b2lkIHNldExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlSG9y
aXpvbnRhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fdG9wTGVmdC5tb3ZlKG9mZnNldCwgMF9s
dSk7IH0KLSAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fdG9w
TGVmdC5tb3ZlKDBfbHUsIG9mZnNldCk7IH0KLSAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6
ZSYgc2l6ZSkgeyBtX3RvcExlZnQubW92ZShzaXplKTsgfQotICAgIHZvaWQgbW92ZUJ5KExheW91
dFBvaW50IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZUJ5KG9mZnNldCk7IH0KLQotICAgIHZvaWQg
c2V0Q29udGVudEJveEhlaWdodChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldENvbnRlbnRCb3hX
aWR0aChMYXlvdXRVbml0KTsKLQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbE1hcmdpbihIb3Jpem9u
dGFsTWFyZ2luKTsKLSAgICB2b2lkIHNldFZlcnRpY2FsTWFyZ2luKFZlcnRpY2FsTWFyZ2luKTsK
LSAgICB2b2lkIHNldEhhc0NsZWFyYW5jZSgpIHsgbV9oYXNDbGVhcmFuY2UgPSB0cnVlOyB9Ci0K
LSAgICB2b2lkIHNldEJvcmRlcihMYXlvdXQ6OkVkZ2VzKTsKLQotICAgIHZvaWQgc2V0VmVydGlj
YWxQYWRkaW5nKExheW91dDo6VmVydGljYWxFZGdlcyk7Ci0gICAgdm9pZCBzZXRQYWRkaW5nKE9w
dGlvbmFsPExheW91dDo6RWRnZXM+KTsKLQotcHJpdmF0ZToKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIHZvaWQgaW52YWxpZGF0ZU1hcmdpbigpOwotICAgIHZvaWQgaW52YWxpZGF0ZUJvcmRlcigp
IHsgbV9oYXNWYWxpZEJvcmRlciA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlUGFkZGlu
ZygpIHsgbV9oYXNWYWxpZFBhZGRpbmcgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVBy
ZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCkgeyBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlID0g
ZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0SGFzVmFsaWRUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSB0
cnVlOyB9Ci0gICAgdm9pZCBzZXRIYXNWYWxpZExlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gdHJ1
ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbigpIHsgbV9oYXNWYWxpZFZl
cnRpY2FsTWFyZ2luID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRIb3Jpem9udGFsTWFy
Z2luKCkgeyBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbiA9IHRydWU7IH0KLQotICAgIHZvaWQg
c2V0SGFzVmFsaWRCb3JkZXIoKSB7IG1faGFzVmFsaWRCb3JkZXIgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBzZXRIYXNWYWxpZFBhZGRpbmcoKSB7IG1faGFzVmFsaWRQYWRkaW5nID0gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBzZXRIYXNWYWxpZENvbnRlbnRIZWlnaHQoKSB7IG1faGFzVmFsaWRDb250ZW50SGVp
Z2h0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRDb250ZW50V2lkdGgoKSB7IG1faGFz
VmFsaWRDb250ZW50V2lkdGggPSB0cnVlOyB9Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLQot
ICAgIExheW91dFBvaW50IG1fdG9wTGVmdDsKLSAgICBMYXlvdXRVbml0IG1fY29udGVudFdpZHRo
OwotICAgIExheW91dFVuaXQgbV9jb250ZW50SGVpZ2h0OwotCi0gICAgSG9yaXpvbnRhbE1hcmdp
biBtX2hvcml6b250YWxNYXJnaW47Ci0gICAgVmVydGljYWxNYXJnaW4gbV92ZXJ0aWNhbE1hcmdp
bjsKLSAgICBib29sIG1faGFzQ2xlYXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIExheW91dDo6RWRn
ZXMgbV9ib3JkZXI7Ci0gICAgT3B0aW9uYWw8TGF5b3V0OjpFZGdlcz4gbV9wYWRkaW5nOwotCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzVmFsaWRUb3AgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9oYXNWYWxpZExlZnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZEhvcml6
b250YWxNYXJnaW4geyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2lu
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRCb3JkZXIgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9oYXNWYWxpZFBhZGRpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZENvbnRl
bnRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZENvbnRlbnRXaWR0aCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHsgZmFsc2UgfTsK
LSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi1pbmxp
bmUgdm9pZCBCb3g6OmludmFsaWRhdGVNYXJnaW4oKQotewotICAgIG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luID0gZmFsc2U7Ci0gICAgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luID0gZmFsc2U7
Ci19Ci0jZW5kaWYKLQotaW5saW5lIExheW91dFVuaXQgQm94Ojp0b3AoKSBjb25zdAotewotICAg
IEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIChtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHx8
IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikpOwotICAgIHJldHVybiBtX3RvcExlZnQueSgpOwot
fQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OmxlZnQoKSBjb25zdAotewotICAgIEFTU0VSVCht
X2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJu
IG1fdG9wTGVmdC54KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2ludCBCb3g6OnRvcExlZnQoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIChtX2hhc1ByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikpOwotICAgIEFTU0VSVChtX2hh
c1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1f
dG9wTGVmdDsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBv
aW50JiB0b3BMZWZ0KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRUb3Ao
KTsKLSAgICBzZXRIYXNWYWxpZExlZnQoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdCA9IHRvcExl
ZnQ7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0VG9wKExheW91dFVuaXQgdG9wKQotewotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRUb3AoKTsKLSNlbmRpZgotICAgIG1fdG9w
TGVmdC5zZXRZKHRvcCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0TGVmdChMYXlvdXRVbml0
IGxlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxpZExlZnQoKTsKLSNl
bmRpZgotICAgIG1fdG9wTGVmdC5zZXRYKGxlZnQpOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OnNl
dENvbnRlbnRCb3hIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpCi17IAotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgc2V0SGFzVmFsaWRDb250ZW50SGVpZ2h0KCk7Ci0jZW5kaWYKLSAgICBtX2NvbnRl
bnRIZWlnaHQgPSBoZWlnaHQ7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0Q29udGVudEJveFdp
ZHRoKExheW91dFVuaXQgd2lkdGgpCi17IAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFz
VmFsaWRDb250ZW50V2lkdGgoKTsKLSNlbmRpZgotICAgIG1fY29udGVudFdpZHRoID0gd2lkdGg7
Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Y29udGVudEJveEhlaWdodCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRDb250ZW50SGVpZ2h0KTsKLSAgICByZXR1cm4gbV9jb250
ZW50SGVpZ2h0OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OmNvbnRlbnRCb3hXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRDb250ZW50V2lkdGgpOwotICAgIHJldHVy
biBtX2NvbnRlbnRXaWR0aDsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRIb3Jpem9udGFsTWFy
Z2luKEhvcml6b250YWxNYXJnaW4gbWFyZ2luKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
c2V0SGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKCk7Ci0jZW5kaWYKLSAgICBtX2hvcml6b250YWxN
YXJnaW4gPSBtYXJnaW47Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0VmVydGljYWxNYXJnaW4o
VmVydGljYWxNYXJnaW4gbWFyZ2luKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFz
VmFsaWRWZXJ0aWNhbE1hcmdpbigpOwotICAgIGludmFsaWRhdGVQcmVjb21wdXRlZE1hcmdpbkJl
Zm9yZSgpOwotI2VuZGlmCi0gICAgbV92ZXJ0aWNhbE1hcmdpbiA9IG1hcmdpbjsKLX0KLQotaW5s
aW5lIHZvaWQgQm94OjpzZXRCb3JkZXIoTGF5b3V0OjpFZGdlcyBib3JkZXIpCi17Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxpZEJvcmRlcigpOwotI2VuZGlmCi0gICAgbV9ib3Jk
ZXIgPSBib3JkZXI7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0UGFkZGluZyhPcHRpb25hbDxM
YXlvdXQ6OkVkZ2VzPiBwYWRkaW5nKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFz
VmFsaWRQYWRkaW5nKCk7Ci0jZW5kaWYKLSAgICBtX3BhZGRpbmcgPSBwYWRkaW5nOwotfQotCi1p
bmxpbmUgdm9pZCBCb3g6OnNldFZlcnRpY2FsUGFkZGluZyhMYXlvdXQ6OlZlcnRpY2FsRWRnZXMg
dmVydGljYWxQYWRkaW5nKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRQ
YWRkaW5nKCk7Ci0jZW5kaWYKLSAgICBtX3BhZGRpbmcgPSBMYXlvdXQ6OkVkZ2VzIHsgbV9wYWRk
aW5nID8gbV9wYWRkaW5nLT5ob3Jpem9udGFsIDogTGF5b3V0OjpIb3Jpem9udGFsRWRnZXMoKSwg
dmVydGljYWxQYWRkaW5nIH07Ci19Ci0KLWlubGluZSBCb3g6OlZlcnRpY2FsTWFyZ2luIEJveDo6
dmVydGljYWxNYXJnaW4oKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxN
YXJnaW4pOwotICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luOwotfQotCi1pbmxpbmUgQm94OjpI
b3Jpem9udGFsTWFyZ2luIEJveDo6aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV9ob3Jpem9udGFs
TWFyZ2luOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6Om1hcmdpbkJlZm9yZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1f
dmVydGljYWxNYXJnaW4uYmVmb3JlOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6Om1hcmdp
blN0YXJ0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4p
OwotICAgIHJldHVybiBtX2hvcml6b250YWxNYXJnaW4uc3RhcnQ7Ci19Ci0KLWlubGluZSBMYXlv
dXRVbml0IEJveDo6bWFyZ2luQWZ0ZXIoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlk
VmVydGljYWxNYXJnaW4pOwotICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luLmFmdGVyOwotfQot
Ci1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6Om1hcmdpbkVuZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV9ob3Jpem9udGFsTWFy
Z2luLmVuZDsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6cGFkZGluZ1Rv
cCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1f
cGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT52ZXJ0
aWNhbC50b3A7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3g6OnBhZGRpbmdM
ZWZ0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwotICAgIGlmICgh
bV9wYWRkaW5nKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3BhZGRpbmctPmhv
cml6b250YWwubGVmdDsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6cGFk
ZGluZ0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAg
ICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRk
aW5nLT52ZXJ0aWNhbC5ib3R0b207Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBC
b3g6OnBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5n
KTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4g
bV9wYWRkaW5nLT5ob3Jpem9udGFsLnJpZ2h0OwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gQm94Ojp2ZXJ0aWNhbFBhZGRpbmcoKSBjb25zdAotewotICAgIGF1dG8gcGFkZGluZ1Rv
cCA9IHRoaXMtPnBhZGRpbmdUb3AoKTsKLSAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSB0aGlzLT5w
YWRkaW5nQm90dG9tKCk7Ci0gICAgaWYgKCFwYWRkaW5nVG9wICYmICFwYWRkaW5nQm90dG9tKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBwYWRkaW5nVG9wLnZhbHVlT3IoMCkgKyBw
YWRkaW5nQm90dG9tLnZhbHVlT3IoMCk7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0
PiBCb3g6Omhvcml6b250YWxQYWRkaW5nKCkgY29uc3QKLXsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0
ID0gdGhpcy0+cGFkZGluZ0xlZnQoKTsKLSAgICBhdXRvIHBhZGRpbmdSaWdodCA9IHRoaXMtPnBh
ZGRpbmdSaWdodCgpOwotICAgIGlmICghcGFkZGluZ0xlZnQgJiYgIXBhZGRpbmdSaWdodCkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gcGFkZGluZ0xlZnQudmFsdWVPcigwKSArIHBh
ZGRpbmdSaWdodC52YWx1ZU9yKDApOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OmJvcmRl
clRvcCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVy
biBtX2JvcmRlci52ZXJ0aWNhbC50b3A7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Ym9y
ZGVyTGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJl
dHVybiBtX2JvcmRlci5ob3Jpem9udGFsLmxlZnQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJv
eDo6Ym9yZGVyQm90dG9tKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7
Ci0gICAgcmV0dXJuIG1fYm9yZGVyLnZlcnRpY2FsLmJvdHRvbTsKLX0KLQotaW5saW5lIExheW91
dFVuaXQgQm94Ojpib3JkZXJSaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRC
b3JkZXIpOwotICAgIHJldHVybiBtX2JvcmRlci5ob3Jpem9udGFsLnJpZ2h0OwotfQotCi19Ci19
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xh
eW91dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJ
dGVyYXRvci5oCmluZGV4IDhkODU5MzVjNGM5MDEyM2NmMmVhNjA2ZDZhODVjZjI5NTllMWNhYzMu
LjYxYzBkNjFkNmYxODNlNmQyNmNjZTYxYTY0ZGUwY2YzYTZiMjM4MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEl0ZXJhdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SXRlcmF0b3IuaApAQCAtMjcsNiAr
MjcsOCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNs
dWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCg==
</data>
<flag name="commit-queue"
          id="424863"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409248</attachid>
            <date>2020-09-20 13:56:10 -0700</date>
            <delta_ts>2020-09-20 14:18:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216752-20200920135609.patch</filename>
            <type>text/plain</type>
            <size>83338</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWFiYWI1OGRiNmEyNzMx
NDMwMWFmNzVkMWNkNmI5ODQ0ZjA1ZWEwNy4uYWUyNzNlZDViNDgzMmMxZTZhM2M4YWEyYzI3Yjcz
YWRhNzVjYmE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDIwLTA5LTIwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gQWRkIHRoZSBiZWdpbm5pbmdzIG9mIGEgQ1NTIGRpc3BsYXkgYm94IGhpZXJhcmNoeSBhbmQg
Q1NTIHBhaW50ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNjc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzb21lIERpc3BsYXk6OkJveCBzdWJjbGFzc2VzIHRvIGRpc3BsYXkvY3NzLCBhIERp
c3BsYXk6OlRyZWUgY2xhc3MgdG8gb3duIHRoZQorICAgICAgICBkaXNwbGF5IHRyZWUsIGFuZCBh
IERpc3BsYXlUcmVlQnVpbGRlci4gQWxzbyBhZGQgY3NzL0Rpc3BsYXlDU1NQYWludGVyIHdoaWNo
IGlzCisgICAgICAgIHRoZSBiZWdpbm5pbmdzIG9mIGEgY2xhc3MgdGhhdCBrbm93cyBob3cgdG8g
cGFpbnQgYSBDU1Mgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY29k
ZSBvdGhlciB0aGFuIERpc3BsYXlDU1NQYWludGVyIGlzIGRlbGliZXJhdGVseSB2YWd1ZSBhYm91
dCBob3cgbXVjaCBpcworICAgICAgICBDU1Mgc3BlY2lmaWMuIEl0J3MgbGlrZWx5IHRoYXQgc29t
ZSBib3ggY2xhc3NlcyB3aWxsIGJlIHNoYXJlZCB3aXRoIFNWRyBwYWludGluZy4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgY29kZSBpcyBub3QgaG9va2VkIHVwIHlldC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlRyZWU6OlRyZWUpOgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlOjpyb290Qm94IGNvbnN0KToK
KyAgICAgICAgKiBkaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6VHJlZUJ1aWxkZXI6OlRyZWVCdWlsZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlRyZWVCdWlsZGVyOjpidWlsZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6cmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6ZGlzcGxheUJv
eEZvckxheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpvdXRwdXRE
aXNwbGF5Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Om91dHB1dERpc3BsYXlUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnNob3dEaXNwbGF5VHJlZSk6CisgICAgICAg
ICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgICogZGlzcGxh
eS9jc3MvRGlzcGxheUJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94OjpCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpzZXROZXh0U2libGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmRlYnVnRGVzY3JpcHRpb24gY29u
c3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OkJveCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6Ym9y
ZGVyQm94RnJhbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojppc0Nv
bnRhaW5lckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmlzSW1h
Z2VCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojppc1JlcGxhY2Vk
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6bmV4dFNpYmxpbmcg
Y29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJveERlY29y
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50Qm94
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludFN0YWNraW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpyZWN1cnNp
dmVDb2xsZWN0TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6
OnBhaW50VHJlZSk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaDog
QWRkZWQuCisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVyQm94OjpDb250YWluZXJC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVyQm94OjpzZXRGaXJzdENo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5lckJveDo6ZGVidWdEZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJv
eC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5lckJveDo6Zmly
c3RDaGlsZCBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6SW1hZ2VCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6SW1hZ2VCb3g6OnNldEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkltYWdlQm94OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6aW1hZ2UgY29uc3QpOgorICAgICAgICAqIGRp
c3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UmVwbGFjZWRCb3g6OlJlcGxhY2VkQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJlcGxhY2VkQm94OjpzZXRSZXBsYWNlZENvbnRlbnRSZWN0KToKKyAgICAgICAg
KiBkaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZXBsYWNlZEJveDo6cmVwbGFjZWRDb250ZW50UmVjdCBjb25zdCk6Cisg
ICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6U3R5bGU6Omhhc0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6U3R5bGU6Omhhc1Zpc2libGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxl
OjpiYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5
bGU6Omhhc0JhY2tncm91bmRJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpTdHlsZTo6Ym9yZGVyTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpT
dHlsZTo6Ym9yZGVyUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5
bGU6OmJvcmRlclRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6
Ym9yZGVyQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjp6
SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzU3RhY2tp
bmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpzZXRJ
c1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzUG9zaXRp
b25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6c2V0SXNGbG9h
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aXNGbG9hdGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6cGFydGljaXBhdGVzSW5aT3Jk
ZXJTb3J0aW5nIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJv
eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3gu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5o
OgorCiAyMDIwLTA5LTIwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkMgRGlzcGxheV0gTW92ZSBMRkMgRGlzcGxheSBpbmZyYXN0cnVjdHVyZSBm
aWxlcyBpbnRvIGEgbmV3ICdkaXNwbGF5JyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggNTA3OWNiMTlmNDQ2MDQ3YmU2ODVhOGY4ZjRhOWFiNWFmZWQ2MjdjYy4uOGQzMzZiNGMwMTgx
ZGZiN2NmODIwZDEzMTQxMWIxYTNmMTM5OWZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg1
LDYgKzg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L2Nzcy90eXBlZG9tIgogICAgICIke1dFQkNPUkVfRElSfS9jc3NqaXQi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Rpc3BsYXkiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2Rpc3Bs
YXkvY3NzIgogICAgICIke1dFQkNPUkVfRElSfS9kb20iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Rv
bS9tZXNzYWdlcG9ydHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2RvbWppdCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDM4YzA2YjhiYmRjYzFhMTA4MTdhZjk4MTljMDFjNjBlZTI4ZGYyNTguLmI4ZWVi
ODdhNTJhMmEzMGIxYWJiYzkwODI2OWViYTUwYjRmOTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMzYyLDggKzM2MiwxNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlblJhbmdlLmgKIAogICAgIGRpc3BsYXkvRGlz
cGxheUxheWVyQ29udHJvbGxlci5oCisgICAgZGlzcGxheS9EaXNwbGF5VHJlZS5oCisgICAgZGlz
cGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaAogICAgIGRpc3BsYXkvRGlzcGxheVZpZXcuaAogCisg
ICAgZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaAorICAgIGRpc3BsYXkvY3NzL0Rpc3Bs
YXlDb250YWluZXJCb3guaAorICAgIGRpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5oCisgICAg
ZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmgKKyAgICBkaXNwbGF5L2Nzcy9EaXNwbGF5
U3R5bGUuaAorCiAgICAgZG9tL0FjdGl2ZURPTUNhbGxiYWNrLmgKICAgICBkb20vQWN0aXZlRE9N
T2JqZWN0LmgKICAgICBkb20vQXR0ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcyNzU2M2U1ZmI3N2E0
NTk0MzEwYzQwZTMzZWU0NjY4Y2I4NWE4ZjguLmE2M2MxZTVlZDkxM2FiZjZiODIxODY3ZWRmNDlk
MzZjNzYxZjkzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC03OTQsNyArNzk0LDE1IEBAIGNzcy90eXBl
ZG9tL1R5cGVkT01DU1NTdHlsZVZhbHVlLmNwcAogY3NzL3R5cGVkb20vVHlwZWRPTUNTU1VuaXRW
YWx1ZS5jcHAKIGNzcy90eXBlZG9tL1R5cGVkT01DU1NVbnBhcnNlZFZhbHVlLmNwcAogY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCitkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmNwcAorZGlzcGxh
eS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHAKK2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWlu
dGVyLmNwcAorZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNwcAorZGlzcGxheS9jc3MvRGlz
cGxheVJlcGxhY2VkQm94LmNwcAorZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcAogZGlzcGxh
eS9EaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcAorZGlzcGxheS9EaXNwbGF5VHJlZS5jcHAKK2Rp
c3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNwcAogZGlzcGxheS9EaXNwbGF5Vmlldy5jcHAKIGRv
bS9BYm9ydENvbnRyb2xsZXIuY3BwCiBkb20vQWJvcnRTaWduYWwuY3BwCkBAIC0xNDM0LDcgKzE0
NDIsNiBAQCBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCiBs
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAK
IGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9y
bWF0dGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAotbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlCb3guY3BwCiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZUNv
bnRlbnQuY3BwCiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwCiBsYXlvdXQv
ZmxleGZvcm1hdHRpbmcvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNkY2M1ZTcxYjhi
MTMzOTAwMjYyMWFjN2I2Y2FiNzQwYWRmY2UyMWIuLjVmNjQxMDYyMjAyZjY1YTZhMGNkMDg5YmY3
ODI2ZjU4NTk4MzhkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTU5NjYsNiArNTk2NiwyMCBAQAogCQkwRjc5MEYzRTI1MTdD
RTZEMDA5QkEwMzQgLyogRGlzcGxheUxheWVyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzkwRjNGMjUxN0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Vmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MEY0MDI1MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxh
eUxheWVyQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3OTBGNEIyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5U3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3OTBG
NEMyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDb250YWluZXJCb3guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGlzcGxheUNvbnRhaW5lckJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzkwRjREMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUltYWdlQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3OTBGNEUyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjc5MEY0RjI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNTU1BhaW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUNTU1BhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3OTBGNTAyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlSZXBsYWNlZEJv
eC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5UmVwbGFjZWRCb3guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3OTBGNTEyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDb250YWlu
ZXJCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUNvbnRhaW5lckJveC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY1MjI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUlt
YWdlQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlJbWFnZUJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjc5MEY1MzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVJlcGxh
Y2VkQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlSZXBsYWNlZEJveC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU0MjUxN0Q1NTQwMDlCQTAzNCAvKiBE
aXNwbGF5Q1NTUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5Q1NTUGFpbnRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU2MjUxN0Q1NjEwMDlC
QTAzNCAvKiBEaXNwbGF5VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5VHJlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY1NzI1MTdENTYyMDA5QkEwMzQgLyogRGlz
cGxheVRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlUcmVlQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU4MjUxN0Q1NjIwMDlC
QTAzNCAvKiBEaXNwbGF5VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5VHJlZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU5MjUxN0Q1NjMwMDlCQTAz
NCAvKiBEaXNwbGF5VHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheVRyZWVCdWls
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTQ3MUUyQkYxQTYwMDk1
OTUxQiAvKiBXZWJDb3JlSlNDbGllbnREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvcmVKU0NsaWVudERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjg1MEZFMjFFRDdDMTgzMDBGQjc3QTcgLyogUGVyZm9ybWFuY2VMb2dnaW5n
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcmZvcm1hbmNlTG9n
Z2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTY2RDFDODY5
RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGVuZ3RoUG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTc0MDgsMTQgKzE3NDIyLDM4IEBACiAJCTBGNzkwRjNDMjUxN0NFNkQwMDlCQTAzNCAvKiBk
aXNwbGF5ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkw
Rjc5MEY0QTI1MTdENTU0MDA5QkEwMzQgLyogY3NzICovLAogCQkJCTBGNzkwRjQwMjUxN0NFNkQw
MDlCQTAzNCAvKiBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcCAqLywKIAkJCQkwRjc5MEYzRTI1
MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxheUxheWVyQ29udHJvbGxlci5oICovLAorCQkJCTBGNzkw
RjU4MjUxN0Q1NjIwMDlCQTAzNCAvKiBEaXNwbGF5VHJlZS5jcHAgKi8sCisJCQkJMEY3OTBGNTYy
NTE3RDU2MTAwOUJBMDM0IC8qIERpc3BsYXlUcmVlLmggKi8sCisJCQkJMEY3OTBGNTcyNTE3RDU2
MjAwOUJBMDM0IC8qIERpc3BsYXlUcmVlQnVpbGRlci5jcHAgKi8sCisJCQkJMEY3OTBGNTkyNTE3
RDU2MzAwOUJBMDM0IC8qIERpc3BsYXlUcmVlQnVpbGRlci5oICovLAogCQkJCTBGNzkwRjNEMjUx
N0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5jcHAgKi8sCiAJCQkJMEY3OTBGM0YyNTE3Q0U2
RDAwOUJBMDM0IC8qIERpc3BsYXlWaWV3LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXk7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRjc5MEY0QTI1MTdENTU0MDA5
QkEwMzQgLyogY3NzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQkxMTk5RkE1QTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5jcHAgKi8sCisJCQkJ
MTE5OUZBNTkyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCAqLywKKwkJCQkwRjc5MEY0
QzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNvbnRhaW5lckJveC5jcHAgKi8sCisJCQkJMEY3
OTBGNTEyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDb250YWluZXJCb3guaCAqLywKKwkJCQkw
Rjc5MEY1NDI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNTU1BhaW50ZXIuY3BwICovLAorCQkJ
CTBGNzkwRjRGMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5Q1NTUGFpbnRlci5oICovLAorCQkJ
CTBGNzkwRjREMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guY3BwICovLAorCQkJ
CTBGNzkwRjUyMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guaCAqLywKKwkJCQkw
Rjc5MEY1MzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVJlcGxhY2VkQm94LmNwcCAqLywKKwkJ
CQkwRjc5MEY1MDI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVJlcGxhY2VkQm94LmggKi8sCisJ
CQkJMEY3OTBGNEUyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5jcHAgKi8sCisJCQkJ
MEY3OTBGNEIyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlTdHlsZS5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSBjc3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkwRkU1RkJD
OTFDM0RENTA2MDAwN0EyQ0EgLyogZGlzcGxheWxpc3RzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE3NTQyLDggKzE3NTgwLDYgQEAKIAkJMTE5OUZBNTgy
MDhFM0M0QzAwMjM1OENDIC8qIGRpc3BsYXl0cmVlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxMTk5RkE1QTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxh
eUJveC5jcHAgKi8sCi0JCQkJMTE5OUZBNTkyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3gu
aCAqLywKIAkJCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogRGlzcGxheUlubGluZUNvbnRl
bnQuY3BwICovLAogCQkJCUU0NTFDNjMzMjM5NDA1OEUwMDk5MzE5MCAvKiBEaXNwbGF5SW5saW5l
Q29udGVudC5oICovLAogCQkJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGlu
ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ZWEwZmE2NzY4ODUyZWZkOWJlNjg4ZWVjZTA5NWMzZjJlNmIwYjU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5jcHAKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5VHJl
ZS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgRGlzcGxheSB7CisKK1RyZWU6OlRyZWUoc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4m
JiByb290Qm94KQorICAgIDogbV9yb290Qm94KFdURk1vdmUocm9vdEJveCkpCit7CisgICAgQVNT
RVJUKG1fcm9vdEJveCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlOGYzNWZjM2Nh
M2NiMjYxM2MyNWIyYWRkZWMyNjVkMzQ1MzEyODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJEaXNwbGF5Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK2Ns
YXNzIFRyZWUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKFRyZWUpOworcHVibGljOgor
ICAgIFRyZWUoc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4mJik7CisKKyAgICBjb25zdCBD
b250YWluZXJCb3gmIHJvb3RCb3goKSBjb25zdCB7IHJldHVybiAqbV9yb290Qm94OyB9CisKK3By
aXZhdGU6CisgICAgLy8gSWRlYWxseSB0aGlzIHJvb3QgYm94IHdvdWxkIGJlIGFnbm9zdGljIHRv
IGRpc3BsYXkgdHlwZSAoQ1NTIHZzIFNWRykuCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5l
ckJveD4gbV9yb290Qm94OworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmIzZmRhNjFkZTYxYWRlNDk0NTU5YTFhMjUwMjc2NTk2MTUyNmU3MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNw
cApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEaXNwbGF5VHJlZUJ1aWxkZXIuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheUNvbnRhaW5lckJveC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgorI2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgorI2luY2x1
ZGUgIkRpc3BsYXlUcmVlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNs
dWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94
LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0
ZS5oIgorI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiIC8vIEp1c3QgZm9yIHNob3dMYXlv
dXRUcmVlLgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitUcmVlQnVpbGRlcjo6VHJlZUJ1aWxkZXIo
ZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3RvcikKKyAgICA6IG1fcGl4ZWxTbmFwcGluZ0ZhY3Rvcihw
aXhlbFNuYXBwaW5nRmFjdG9yKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8VHJlZT4gVHJlZUJ1
aWxkZXI6OmJ1aWxkKGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKSBjb25z
dAoreworICAgIGlmICghbGF5b3V0U3RhdGUuaGFzUm9vdCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8mIHJvb3RMYXlvdXRCb3ggPSBsYXlvdXRTdGF0ZS5yb290KCk7CisK
KyNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkJ1aWxkaW5nIGRpc3BsYXkgdHJlZSBmb3I6Iik7
CisgICAgc2hvd0xheW91dFRyZWUocm9vdExheW91dEJveCwgJmxheW91dFN0YXRlKTsKKyNlbmRp
ZgorCisgICAgYXV0byByb290RGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5
b3V0U3RhdGUsIHJvb3RMYXlvdXRCb3gpOworICAgIGF1dG8gcm9vdERpc3BsYXlDb250YWluZXJC
b3ggPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udGFpbmVyQm94PiB7IGRvd25jYXN0PENvbnRhaW5lckJv
eD4ocm9vdERpc3BsYXlCb3gucmVsZWFzZSgpKSB9OworCisgICAgaWYgKCFyb290TGF5b3V0Qm94
LmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VHJlZT4oV1RGTW92ZShy
b290RGlzcGxheUNvbnRhaW5lckJveCkpOworCisgICAgcmVjdXJzaXZlQnVpbGREaXNwbGF5VHJl
ZShsYXlvdXRTdGF0ZSwgKnJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpLCAqcm9vdERpc3BsYXlD
b250YWluZXJCb3gpOworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgIExPR19XSVRI
X1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJEaXNwbGF5IHRyZWU6
Iik7CisgICAgc2hvd0Rpc3BsYXlUcmVlKCpyb290RGlzcGxheUNvbnRhaW5lckJveCk7CisjZW5k
aWYKKworICAgIHJldHVybiBtYWtlVW5pcXVlPFRyZWU+KFdURk1vdmUocm9vdERpc3BsYXlDb250
YWluZXJCb3gpKTsKK30KKworQm94KiBUcmVlQnVpbGRlcjo6cmVjdXJzaXZlQnVpbGREaXNwbGF5
VHJlZShjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgTGF5b3V0
OjpCb3gmIGJveCwgRGlzcGxheTo6Q29udGFpbmVyQm94JiBwYXJlbnREaXNwbGF5Qm94LCBEaXNw
bGF5OjpCb3gqIHByZXZpb3VzU2libGluZ0JveCkgY29uc3QKK3sKKyAgICBhdXRvIGRpc3BsYXlC
b3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dFN0YXRlLCBib3gpOworICAgIAorICAg
IEJveCogcmVzdWx0ID0gZGlzcGxheUJveC5nZXQoKTsKKworICAgIGlmIChwcmV2aW91c1NpYmxp
bmdCb3gpCisgICAgICAgIHByZXZpb3VzU2libGluZ0JveC0+c2V0TmV4dFNpYmxpbmcoV1RGTW92
ZShkaXNwbGF5Qm94KSk7CisgICAgZWxzZQorICAgICAgICBwYXJlbnREaXNwbGF5Qm94LnNldEZp
cnN0Q2hpbGQoV1RGTW92ZShkaXNwbGF5Qm94KSk7CisKKyAgICBpZiAoIWlzPExheW91dDo6Q29u
dGFpbmVyQm94Pihib3gpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgYXV0byYgbGF5
b3V0Q29udGFpbmVyQm94ID0gZG93bmNhc3Q8TGF5b3V0OjpDb250YWluZXJCb3g+KGJveCk7Cisg
ICAgaWYgKCFsYXlvdXRDb250YWluZXJCb3guaGFzQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIGF1dG8mIGRpc3BsYXlDb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWlu
ZXJCb3g+KCpyZXN1bHQpOworCisgICAgRGlzcGxheTo6Qm94KiBjdXJyU2libGluZ0Rpc3BsYXlC
b3ggPSBudWxscHRyOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBMYXlvdXQ6OmNoaWxkcmVuT2ZU
eXBlPExheW91dDo6Qm94PihsYXlvdXRDb250YWluZXJCb3gpKSB7CisgICAgICAgIGlmICghbGF5
b3V0U3RhdGUuaGFzQm94R2VvbWV0cnkoY2hpbGQpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgY3VyclNpYmxpbmdEaXNwbGF5Qm94ID0gcmVjdXJzaXZlQnVpbGREaXNwbGF5VHJl
ZShsYXlvdXRTdGF0ZSwgY2hpbGQsIGRpc3BsYXlDb250YWluZXJCb3gsIGN1cnJTaWJsaW5nRGlz
cGxheUJveCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEJveD4gVHJlZUJ1aWxkZXI6OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0
OjpMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IExheW91dDo6Qm94JiBsYXlvdXRCb3gp
IGNvbnN0Cit7CisgICAgYXV0byBnZW9tZXRyeSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveCk7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gbWFwIGxvZ2ljYWwgdG8gcGh5c2lj
YWwgcmVjdHMuCisgICAgYXV0byBib3JkZXJCb3ggPSBMYXlvdXRSZWN0IHsgZ2VvbWV0cnkubG9n
aWNhbFJlY3QoKSB9OworCisgICAgLy8gRklYTUU6IEhhbmRsZSBpc0Fub255bW91cygpCisgICAg
Ly8gRklYTUU6IERvIGhvaXN0aW5nIG9mIDxib2R5PiBzdHlsZXMgdG8gdGhlIHJvb3Qgd2hlcmUg
YXBwcm9wcmlhdGUuCisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBkbyBsb2dpY2FsIC0+IHBoeXNp
Y2FsIGNvb3JkaW5hdGUgbWFwcGluZyBoZXJlLgorICAgIC8vIEZJWE1FOiBJdCdzIHdyb25nIHRv
IHBpeGVsIHNuYXAgYSBib3ggaW4gbG9jYWwgY29vcmRpbmF0ZXMuIE5lZWQgdG8gYWNjdW11bGF0
ZSBhbiBvZmZzZXQgZnJvbSB0aGUgcm9vdC4KKyAgICBhdXRvIHN0eWxlID0gU3R5bGUgeyBsYXlv
dXRCb3guc3R5bGUoKSB9OworICAgIAorICAgIGlmIChpczxMYXlvdXQ6OlJlcGxhY2VkQm94Pihs
YXlvdXRCb3gpKSB7CisgICAgICAgIC8vIEZJWE1FOiBEb24ndCBhc3N1bWUgaXQncyBhbiBpbWFn
ZS4KKyAgICAgICAgYXV0byBpbWFnZUJveCA9IG1ha2VVbmlxdWU8SW1hZ2VCb3g+KHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpLCBXVEZNb3Zl
KHN0eWxlKSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogV3Jvbmc7IGdlb21ldHJ5IG5l
ZWRzIHRvIHZlbmQgdGhlIGNvcnJlY3QgY29udGVudCByZWN0LgorICAgICAgICBhdXRvIHJlcGxh
Y2VkQ29udGVudFJlY3QgPSBMYXlvdXRSZWN0IHsgZ2VvbWV0cnkuY29udGVudEJveExlZnQoKSwg
Z2VvbWV0cnkuY29udGVudEJveFRvcCgpLCBnZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSwgZ2Vv
bWV0cnkuY29udGVudEJveEhlaWdodCgpIH07CisgICAgICAgIGltYWdlQm94LT5zZXRSZXBsYWNl
ZENvbnRlbnRSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVwbGFjZWRDb250ZW50UmVjdCwg
bV9waXhlbFNuYXBwaW5nRmFjdG9yKSk7CisKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlZEltYWdl
ID0gZG93bmNhc3Q8TGF5b3V0OjpSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5jYWNoZWRJbWFnZSgp
KQorICAgICAgICAgICAgaW1hZ2VCb3gtPnNldEltYWdlKGNhY2hlZEltYWdlLT5pbWFnZSgpKTsK
KworICAgICAgICByZXR1cm4gaW1hZ2VCb3g7CisgICAgfQorICAgIAorICAgIGlmIChpczxMYXlv
dXQ6OkNvbnRhaW5lckJveD4obGF5b3V0Qm94KSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIGRl
Y2lzaW9uIHRvIG1ha2UgYSBDb250YWluZXJCb3ggc2hvdWxkIGJlIG1hZGUgYmFzZWQgb24gd2hl
dGhlciB0aGlzIERpc3BsYXk6OkJveCB3aWxsIGhhdmUgY2hpbGRyZW4uCisgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPENvbnRhaW5lckJveD4oc25hcFJlY3RUb0RldmljZVBpeGVscyhib3JkZXJC
b3gsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxCb3g+KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94
LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpLCBXVEZNb3ZlKHN0eWxlKSk7Cit9CisKKyNpZiBFTkFC
TEUoVFJFRV9ERUJVR0dJTkcpCisKK3N0YXRpYyB2b2lkIG91dHB1dERpc3BsYXlCb3goVGV4dFN0
cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGRpc3BsYXlCb3gsIHVuc2lnbmVkKQoreworICAgIHN0
cmVhbS53cml0ZUluZGVudCgpOworCisgICAgc3RyZWFtIDw8IGRpc3BsYXlCb3guZGVidWdEZXNj
cmlwdGlvbigpOworICAgIHN0cmVhbS5uZXh0TGluZSgpOworfQorCitzdGF0aWMgdm9pZCBvdXRw
dXREaXNwbGF5VHJlZShUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEJveCYgZGlzcGxheUJveCwg
dW5zaWduZWQgZGVwdGgpCit7CisgICAgb3V0cHV0RGlzcGxheUJveChzdHJlYW0sIGRpc3BsYXlC
b3gsIGRlcHRoKTsKKworICAgIGlmIChpczxDb250YWluZXJCb3g+KGRpc3BsYXlCb3gpKSB7Cisg
ICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudChzdHJlYW0pOworICAgICAgICBm
b3IgKGF1dG8gY2hpbGQgPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGRpc3BsYXlCb3gpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICBvdXRwdXREaXNwbGF5VHJlZShzdHJlYW0sICpjaGlsZCwgZGVwdGggKyAxKTsKKyAgICB9Cit9
CisKK3ZvaWQgc2hvd0Rpc3BsYXlUcmVlKGNvbnN0IEJveCYgYm94KQoreworICAgIFRleHRTdHJl
YW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2RlOjpNdWx0aXBsZUxpbmUsIFRleHRTdHJlYW06
OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7CisgICAgb3V0cHV0RGlzcGxheVRyZWUoc3RyZWFt
LCBib3gsIDEpOworICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0Zjgo
KS5kYXRhKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVp
bGRlci5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jMzQ0YjM2MjY2MmY1MWQxZDM2NDEzNjAzNGVlYjdhNDY1MjJlYThlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgTGF5b3V0IHsKK2NsYXNzIEJveDsK
K2NsYXNzIExheW91dFN0YXRlOworfQorCituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIEJv
eDsKK2NsYXNzIENvbnRhaW5lckJveDsKK2NsYXNzIFRyZWU7CisKK2NsYXNzIFRyZWVCdWlsZGVy
IHsKK3B1YmxpYzoKKyAgICBUcmVlQnVpbGRlcihmbG9hdCBwaXhlbFNuYXBwaW5nRmFjdG9yKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxUcmVlPiBidWlsZChjb25zdCBMYXlvdXQ6OkxheW91dFN0
YXRlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEJveD4gZGlzcGxh
eUJveEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiwgY29uc3QgTGF5b3V0
OjpCb3gmKSBjb25zdDsKKworICAgIEJveCogcmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZShjb25z
dCBMYXlvdXQ6OkxheW91dFN0YXRlJiwgY29uc3QgTGF5b3V0OjpCb3gmLCBEaXNwbGF5OjpDb250
YWluZXJCb3gmIHBhcmVudERpc3BsYXlCb3gsIERpc3BsYXk6OkJveCogcHJldmlvdXNTaWJsaW5n
Qm94ID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICBmbG9hdCBtX3BpeGVsU25hcHBpbmdGYWN0b3Ig
eyAxIH07Cit9OworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQordm9pZCBzaG93RGlzcGxh
eVRyZWUoY29uc3QgQm94Jik7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3guY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZhNDMwMWQ5MDgwOWE1NzU0OTAyZTU4NGVkYjIzZWJkMWVkYjZlNzUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmNwcApAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRpc3BsYXlCb3guaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQor
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsK
KworQm94OjpCb3goRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUsIE9w
dGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgOiBtX2JvcmRlckJveEZyYW1lKGJvcmRlckJveCkK
KyAgICAsIG1fc3R5bGUoV1RGTW92ZShkaXNwbGF5U3R5bGUpKQorICAgICwgbV9mbGFncyhmbGFn
cykKK3sKK30KKwordm9pZCBCb3g6OnNldE5leHRTaWJsaW5nKHN0ZDo6dW5pcXVlX3B0cjxCb3g+
JiYgYm94KQoreworICAgIG1fbmV4dFNpYmxpbmcgPSBXVEZNb3ZlKGJveCk7Cit9CisKK1N0cmlu
ZyBCb3g6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gc3RyZWFt
OworICAgIHN0cmVhbSA8PCAiZGlzcGxheSBib3ggIiA8PCBib3JkZXJCb3hGcmFtZSgpIDw8ICIg
KCIgPDwgdGhpcyA8PCAiKSI7CisgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheUJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2NzVkYmY1MTYxZGQwM2ZlMTk4NDJmMTk3ODE2
OTRlYWNlOTFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJE
aXNwbGF5U3R5bGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIEJveCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoQm94KTsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIEZsYWdzIDogdWludDhfdCB7CisgICAgICAgIENvbnRhaW5lckJveCAgICAgICAgICAg
ID0gMSA8PCAwLAorICAgICAgICBJbWFnZUJveCAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAg
ICB9OworCisgICAgQm94KEZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIE9wdGlvblNldDxG
bGFncz4gPSB7IH0pOworICAgIHZpcnR1YWwgfkJveCgpID0gZGVmYXVsdDsKKworICAgIGNvbnN0
IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KKworICAgIC8vIFJlbGF0
aXZlIHRvIGl0cyBwYXJlbnQgYm94LgorICAgIEZsb2F0UmVjdCBib3JkZXJCb3hGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm9yZGVyQm94RnJhbWU7IH0KKworICAgIGJvb2wgaXNDb250YWluZXJC
b3goKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpDb250YWluZXJCb3gp
OyB9CisgICAgYm9vbCBpc0ltYWdlQm94KCkgY29uc3QgeyByZXR1cm4gbV9mbGFncy5jb250YWlu
cyhGbGFnczo6SW1hZ2VCb3gpOyB9CisgICAgYm9vbCBpc1JlcGxhY2VkQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9mbGFncy5jb250YWlucyhGbGFnczo6SW1hZ2VCb3gpOyAvKiBhbmQgb3RoZXIgdHlw
ZXMgbGF0ZXIuICovIH0KKworICAgIGNvbnN0IEJveCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJl
dHVybiBtX25leHRTaWJsaW5nLmdldCgpOyB9CisgICAgdm9pZCBzZXROZXh0U2libGluZyhzdGQ6
OnVuaXF1ZV9wdHI8Qm94PiYmKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGRlYnVnRGVzY3JpcHRp
b24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3JkZXJCb3hGcmFtZTsK
KyAgICBTdHlsZSBtX3N0eWxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCb3g+IG1fbmV4dFNpYmxp
bmc7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
RGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWV9CT1goVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheTo6VG9WYWx1ZVR5cGVOYW1l
KSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXk6OkJveCYg
Ym94KSB7IHJldHVybiBib3gucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgzMGY4ZDg1YzI0MWQ0OGJmYjgzOGExMzQ5MzhkYzU5NzQzYWVkMTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5j
cHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRGlzcGxheUNTU1BhaW50ZXIuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkRpc3BsYXlDb250YWluZXJCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5
SW1hZ2VCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5U3R5bGUuaCIKKyNpbmNsdWRlICJEaXNwbGF5
VHJlZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgRGlzcGxheSB7CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRCb3hEZWNvcmF0aW9ucyhj
b25zdCBCb3gmIGRpc3BsYXlCb3gsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRmxvYXRTaXpl
IHBhaW50T2Zmc2V0KQoreworICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IGRpc3BsYXlCb3guYm9y
ZGVyQm94RnJhbWUoKTsKKyAgICBib3JkZXJCb3hSZWN0Lm1vdmUocGFpbnRPZmZzZXQpOworICAg
IAorICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZGlzcGxheUJveC5zdHlsZSgpOworCisgICAgLy8g
QmFja2dyb3VuZCBjb2xvcgorICAgIGlmIChzdHlsZS5oYXNCYWNrZ3JvdW5kKCkpIHsKKyAgICAg
ICAgY29udGV4dC5maWxsUmVjdChib3JkZXJCb3hSZWN0LCBzdHlsZS5iYWNrZ3JvdW5kQ29sb3Io
KSk7CisgICAgICAgIC8vIEZJWE1FOiBQYWludCBiYWNrZ3JvdW5kIGltYWdlLgorICAgIH0KKwor
ICAgIC8vIEJvcmRlcgorICAgIGlmIChzdHlsZS5oYXNWaXNpYmxlQm9yZGVyKCkpIHsKKyAgICAg
ICAgYXV0byBkcmF3Qm9yZGVyU2lkZSA9IFsmXShhdXRvIHN0YXJ0LCBhdXRvIGVuZCwgY29uc3Qg
YXV0byYgYm9yZGVyU3R5bGUpIHsKKyAgICAgICAgICAgIGlmICghYm9yZGVyU3R5bGUud2lkdGgo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoYm9yZGVyU3R5bGUu
c3R5bGUoKSA9PSBCb3JkZXJTdHlsZTo6Tm9uZSB8fCBib3JkZXJTdHlsZS5zdHlsZSgpID09IEJv
cmRlclN0eWxlOjpIaWRkZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJTdHlsZS5jb2xvcigpKTsKKyAgICAgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlclN0eWxlLndpZHRoKCkpOworICAgICAg
ICAgICAgY29udGV4dC5kcmF3TGluZShzdGFydCwgZW5kKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisKKyAgICAg
ICAgLy8gVG9wCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVyV2lkdGggPSBzdHls
ZS5ib3JkZXJUb3AoKS53aWR0aCgpOworICAgICAgICAgICAgYXV0byBzdGFydCA9IGJvcmRlckJv
eFJlY3QubWluWE1pbllDb3JuZXIoKTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gRmxvYXRQb2lu
dCB7IGJvcmRlckJveFJlY3QubWF4WCgpLCBzdGFydC55KCkgKyBib3JkZXJXaWR0aCB9OworICAg
ICAgICAgICAgZHJhd0JvcmRlclNpZGUoc3RhcnQsIGVuZCwgc3R5bGUuYm9yZGVyVG9wKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUmlnaHQKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBib3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlclJpZ2h0KCkud2lkdGgoKTsKKyAgICAgICAgICAg
IGF1dG8gc3RhcnQgPSBGbG9hdFBvaW50IHsgYm9yZGVyQm94UmVjdC5tYXhYKCkgLSBib3JkZXJX
aWR0aCwgYm9yZGVyQm94UmVjdC55KCkgfTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gRmxvYXRQ
b2ludCB7IHN0YXJ0LngoKSArIGJvcmRlcldpZHRoLCBib3JkZXJCb3hSZWN0Lm1heFkoKSB9Owor
ICAgICAgICAgICAgZHJhd0JvcmRlclNpZGUoc3RhcnQsIGVuZCwgc3R5bGUuYm9yZGVyUmlnaHQo
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBCb3R0b20KKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBib3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlckJvdHRvbSgpLndpZHRoKCk7CisgICAg
ICAgICAgICBhdXRvIHN0YXJ0ID0gRmxvYXRQb2ludCB7IGJvcmRlckJveFJlY3QueCgpLCBib3Jk
ZXJCb3hSZWN0Lm1heFkoKSAtIGJvcmRlcldpZHRoIH07CisgICAgICAgICAgICBhdXRvIGVuZCA9
IEZsb2F0UG9pbnQgeyBib3JkZXJCb3hSZWN0Lm1heFgoKSwgc3RhcnQueSgpICsgYm9yZGVyV2lk
dGggfTsKKyAgICAgICAgICAgIGRyYXdCb3JkZXJTaWRlKHN0YXJ0LCBlbmQsIHN0eWxlLmJvcmRl
ckJvdHRvbSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExlZnQKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byBib3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlckxlZnQoKS53aWR0aCgpOwor
ICAgICAgICAgICAgYXV0byBzdGFydCA9IGJvcmRlckJveFJlY3QubWluWE1pbllDb3JuZXIoKTsK
KyAgICAgICAgICAgIGF1dG8gZW5kID0gRmxvYXRQb2ludCB7IHN0YXJ0LngoKSArIGJvcmRlcldp
ZHRoLCBib3JkZXJCb3hSZWN0Lm1heFkoKSB9OworICAgICAgICAgICAgZHJhd0JvcmRlclNpZGUo
c3RhcnQsIGVuZCwgc3R5bGUuYm9yZGVyTGVmdCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBDU1NQYWludGVyOjpwYWludEJveENvbnRlbnQoY29uc3QgQm94JiBib3gsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgRmxvYXRTaXplIHBhaW50T2Zmc2V0KQoreworICAgIGlmIChpczxJ
bWFnZUJveD4oYm94KSkgeworICAgICAgICBhdXRvJiBpbWFnZUJveCA9IGRvd25jYXN0PEltYWdl
Qm94Pihib3gpOworICAgICAgICAKKyAgICAgICAgYXV0byogaW1hZ2UgPSBpbWFnZUJveC5pbWFn
ZSgpOworICAgICAgICBhdXRvIGltYWdlUmVjdCA9IGltYWdlQm94LnJlcGxhY2VkQ29udGVudFJl
Y3QoKTsKKyAgICAgICAgaW1hZ2VSZWN0Lm1vdmUocGFpbnRPZmZzZXQpOworCisgICAgICAgIGlm
IChpbWFnZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRCb3goY29uc3QgQm94JiBib3gs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRmxvYXRTaXplIHBhaW50T2Zmc2V0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgYXV0byByZWxhdGl2ZVJlY3QgPSBib3guYm9yZGVy
Qm94RnJhbWUoKTsKKyAgICByZWxhdGl2ZVJlY3QubW92ZShwYWludE9mZnNldCk7CisgICAgaWYg
KCFkaXJ0eVJlY3QuaW50ZXJzZWN0cyhlbmNsb3NpbmdJbnRSZWN0KHJlbGF0aXZlUmVjdCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXM8SW1hZ2VCb3g+KGJveCkpIHsKKyAgICAgICAg
YXV0byYgaW1hZ2VCb3ggPSBkb3duY2FzdDxJbWFnZUJveD4oYm94KTsKKyAgICAgICAgCisgICAg
ICAgIGF1dG8qIGltYWdlID0gaW1hZ2VCb3guaW1hZ2UoKTsKKyAgICAgICAgYXV0byBpbWFnZVJl
Y3QgPSBpbWFnZUJveC5yZXBsYWNlZENvbnRlbnRSZWN0KCk7CisgICAgICAgIGltYWdlUmVjdC5t
b3ZlKHBhaW50T2Zmc2V0KTsKKworICAgICAgICBpZiAoaW1hZ2UpCisgICAgICAgICAgICBjb250
ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CisgICAgfQorCisgICAgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhib3gsIGNvbnRleHQsIHBhaW50T2Zmc2V0KTsKKyAgICBwYWludEJveENvbnRl
bnQoYm94LCBjb250ZXh0LCBwYWludE9mZnNldCk7Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFp
bnRTdGFja2luZ0NvbnRleHQoY29uc3QgQm94JiBjb250ZXh0Um9vdCwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBGbG9hdFNpemUgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZGlydHlSZWN0KTsKKworICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMoY29udGV4dFJvb3QsIGNvbnRleHQsIHBhaW50T2Zmc2V0KTsKKyAgICAvLyBGSVhNRTog
VGFibGUgcGFpbnRpbmcgaXMgc3BlY2lhbC4KKworICAgIGlmIChpczxDb250YWluZXJCb3g+KGNv
bnRleHRSb290KSkgeworICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250
YWluZXJCb3g+KGNvbnRleHRSb290KTsKKworICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gbmVn
YXRpdmVaT3JkZXJMaXN0OworICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gcG9zaXRpdmVaT3Jk
ZXJMaXN0OworICAgIAorICAgICAgICByZWN1cnNpdmVDb2xsZWN0TGF5ZXJzKGNvbnRhaW5lckJv
eCwgbmVnYXRpdmVaT3JkZXJMaXN0LCBwb3NpdGl2ZVpPcmRlckxpc3QpOworCisgICAgICAgIGF1
dG8gY29tcGFyZVpJbmRleCA9IFtdIChjb25zdCBCb3gqIGEsIGNvbnN0IEJveCogYikgeworICAg
ICAgICAgICAgcmV0dXJuIGEtPnN0eWxlKCkuekluZGV4KCkudmFsdWUoKSA8IGItPnN0eWxlKCku
ekluZGV4KCkudmFsdWUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0
KHBvc2l0aXZlWk9yZGVyTGlzdC5iZWdpbigpLCBwb3NpdGl2ZVpPcmRlckxpc3QuZW5kKCksIGNv
bXBhcmVaSW5kZXgpOworICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG5lZ2F0aXZlWk9yZGVyTGlz
dC5iZWdpbigpLCBuZWdhdGl2ZVpPcmRlckxpc3QuZW5kKCksIGNvbXBhcmVaSW5kZXgpOworCisg
ICAgICAgIGZvciAoYXV0byogYm94IDogbmVnYXRpdmVaT3JkZXJMaXN0KQorICAgICAgICAgICAg
cGFpbnRTdGFja2luZ0NvbnRleHQoKmJveCwgY29udGV4dCwgcGFpbnRPZmZzZXQsIGRpcnR5UmVj
dCk7CisKKyAgICAgICAgLy8gRklYTUU6IFdvcmsgaW4gcHJvZ3Jlc3MuIE5lZWRzIHRvIHBhaW50
IGFsbCBub24tcG9zaXRpb25lZCBkZXNjZW5kYW50cy4KKyAgICAgICAgcGFpbnRCb3hDb250ZW50
KGNvbnRleHRSb290LCBjb250ZXh0LCBwYWludE9mZnNldCk7CisKKyAgICAgICAgZm9yIChhdXRv
KiBib3ggOiBwb3NpdGl2ZVpPcmRlckxpc3QpIHsKKyAgICAgICAgICAgIGlmIChib3gtPnN0eWxl
KCkuaXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgICAgICAgICBwYWludFN0YWNraW5nQ29u
dGV4dCgqYm94LCBjb250ZXh0LCBwYWludE9mZnNldCwgZGlydHlSZWN0KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBwYWludEJveCgqYm94LCBjb250ZXh0LCBwYWludE9mZnNl
dCwgZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDU1NQYWludGVyOjpy
ZWN1cnNpdmVDb2xsZWN0TGF5ZXJzKGNvbnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94LCBW
ZWN0b3I8Y29uc3QgQm94Kj4mIG5lZ2F0aXZlWk9yZGVyTGlzdCwgVmVjdG9yPGNvbnN0IEJveCo+
JiBwb3NpdGl2ZVpPcmRlckxpc3QpCit7CisgICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGNv
bnRhaW5lckJveC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS5wYXJ0aWNpcGF0ZXNJblpPcmRlclNv
cnRpbmcoKSkgeworICAgICAgICAgICAgYXV0byB6SW5kZXggPSBjaGlsZC0+c3R5bGUoKS56SW5k
ZXgoKS52YWx1ZU9yKDApOworCisgICAgICAgICAgICBpZiAoekluZGV4IDwgMCkKKyAgICAgICAg
ICAgICAgICBuZWdhdGl2ZVpPcmRlckxpc3QuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwb3NpdGl2ZVpPcmRlckxpc3QuYXBwZW5kKGNoaWxkKTsKKwor
ICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXM8Q29udGFp
bmVyQm94PigqY2hpbGQpKQorICAgICAgICAgICAgcmVjdXJzaXZlQ29sbGVjdExheWVycyhkb3du
Y2FzdDxDb250YWluZXJCb3g+KCpjaGlsZCksIG5lZ2F0aXZlWk9yZGVyTGlzdCwgcG9zaXRpdmVa
T3JkZXJMaXN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRUcmVlKGNvbnN0
IFRyZWUmIGRpc3BsYXlUcmVlLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKK3sKKyAgICBwYWludFN0YWNraW5nQ29udGV4dChkaXNwbGF5VHJlZS5y
b290Qm94KCksIGNvbnRleHQsIHsgfSwgZGlydHlSZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
RGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUNTU1BhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjM3OWMyZTMwYTMxZTVjZGM1MDI2NjBlNTk3
NGIxYzRmOTliOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheUNTU1BhaW50ZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7CisKK25hbWVzcGFjZSBMYXlvdXQgeworY2xhc3Mg
TGF5b3V0U3RhdGU7Cit9CisKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworY2xhc3MgQm94OworY2xh
c3MgVHJlZTsKKworY2xhc3MgQ1NTUGFpbnRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQg
cGFpbnRTdGFja2luZ0NvbnRleHQoY29uc3QgQm94JiwgR3JhcGhpY3NDb250ZXh0JiwgRmxvYXRT
aXplIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIAorICAgIHN0
YXRpYyB2b2lkIHBhaW50VHJlZShjb25zdCBUcmVlJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KTsKKworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBhaW50
Qm94KGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYsIEZsb2F0U2l6ZSBwYWludE9mZnNldCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICBzdGF0aWMgdm9pZCBwYWludEJveERlY29y
YXRpb25zKGNvbnN0IEJveCYsIEdyYXBoaWNzQ29udGV4dCYsIEZsb2F0U2l6ZSBwYWludE9mZnNl
dCk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRCb3hDb250ZW50KGNvbnN0IEJveCYsIEdyYXBoaWNz
Q29udGV4dCYsIEZsb2F0U2l6ZSBwYWludE9mZnNldCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWN1
cnNpdmVDb2xsZWN0TGF5ZXJzKGNvbnN0IENvbnRhaW5lckJveCYsIFZlY3Rvcjxjb25zdCBCb3gq
PiYgbmVnYXRpdmVaT3JkZXJMaXN0LCBWZWN0b3I8Y29uc3QgQm94Kj4mIHBvc2l0aXZlWk9yZGVy
TGlzdCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWluZXJCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTk5MTUxZjk0NmY2YzExOWRjMGZkNzdkOGFmMzg5OGYzMmY0NGNlYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWluZXJC
b3guY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRGlzcGxheUNvbnRhaW5lckJveC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5U3R5bGUuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgRGlzcGxheSB7CisKK0NvbnRhaW5lckJveDo6Q29udGFpbmVyQm94KEZsb2F0UmVjdCBib3Jk
ZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlKQorICAgIDogQm94KGJvcmRlckJveCwgV1RGTW92
ZShkaXNwbGF5U3R5bGUpLCB7IEZsYWdzOjpDb250YWluZXJCb3ggfSkKK3sKK30KKwordm9pZCBD
b250YWluZXJCb3g6OnNldEZpcnN0Q2hpbGQoc3RkOjp1bmlxdWVfcHRyPEJveD4mJiBib3gpCit7
CisgICAgbV9maXJzdENoaWxkID0gV1RGTW92ZShib3gpOworfQorCitTdHJpbmcgQ29udGFpbmVy
Qm94OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsK
KyAgICBzdHJlYW0gPDwgImNvbnRhaW5lciBib3ggIiA8PCBib3JkZXJCb3hGcmFtZSgpIDw8ICIg
KCIgPDwgdGhpcyA8PCAiKSI7CisgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5oIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwMGRiNjdkNTM2
ZWQ1ZjBiOGM0MzYzOWExZjQ3NjEwNmY5YzZkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmgKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworY2xhc3MgQ29udGFpbmVyQm94IDogcHVibGlj
IEJveCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
Q29udGFpbmVyQm94KTsKK3B1YmxpYzoKKyAgICBDb250YWluZXJCb3goRmxvYXRSZWN0IGJvcmRl
ckJveCwgU3R5bGUmJik7CisgICAgCisgICAgY29uc3QgQm94KiBmaXJzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdENoaWxkLmdldCgpOyB9CisgICAgdm9pZCBzZXRGaXJzdENoaWxkKHN0
ZDo6dW5pcXVlX3B0cjxCb3g+JiYpOworCitwcml2YXRlOgorICAgIFN0cmluZyBkZWJ1Z0Rlc2Ny
aXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qm94PiBtX2Zp
cnN0Q2hpbGQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWV9CT1goQ29udGFpbmVyQm94
LCBpc0NvbnRhaW5lckJveCgpKQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
SW1hZ2VCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMDE4ODYxYzhjZjVlNDAwMDA5NWU5NjZiM2NlMWMyMGJmZjhjOGFj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUlt
YWdlQm94LmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNw
bGF5IHsKKworSW1hZ2VCb3g6OkltYWdlQm94KEZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYg
ZGlzcGxheVN0eWxlKQorICAgIDogUmVwbGFjZWRCb3goYm9yZGVyQm94LCBXVEZNb3ZlKGRpc3Bs
YXlTdHlsZSksIHsgRmxhZ3M6OkltYWdlQm94IH0pCit7Cit9CisKK3ZvaWQgSW1hZ2VCb3g6OnNl
dEltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBtX2ltYWdlID0gaW1hZ2U7Cit9CisKK1N0cmlu
ZyBJbWFnZUJveDo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSBz
dHJlYW07CisgICAgc3RyZWFtIDw8ICJpbWFnZSBib3ggIiA8PCBib3JkZXJCb3hGcmFtZSgpIDw8
ICIgKCIgPDwgdGhpcyA8PCAiKSByZXBsYWNlZCBjb250ZW50IHJlY3Q6ICIgPDwgcmVwbGFjZWRD
b250ZW50UmVjdCgpIDw8ICIgaW1hZ2U6ICIgPDwgbV9pbWFnZS5nZXQoKTsKKyAgICByZXR1cm4g
c3RyZWFtLnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZhMWI5N2IzNGQwZjg4NTI1NzRmZGQxY2M3ZjA2YWRjZTNkZjI5MDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkRpc3BsYXlSZXBsYWNlZEJv
eC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlOworCituYW1lc3BhY2Ug
RGlzcGxheSB7CisKK2NsYXNzIFN0eWxlOworCitjbGFzcyBJbWFnZUJveCA6IHB1YmxpYyBSZXBs
YWNlZEJveCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSW5hZ2VCb3gpOworcHVibGljOgorICAgIEltYWdlQm94KEZsb2F0UmVjdCBib3JkZXJCb3gs
IFN0eWxlJiYpOworICAgIAorICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlKEltYWdlKik7CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIFJlZlB0cjxJbWFn
ZT4gbV9pbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZX0JPWChJbWFnZUJveCwg
aXNJbWFnZUJveCgpKQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFj
ZWRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wMDMwODQyZTRlNjg4NDc1NjY2NzUxYmM4OWI0YmEzODg0NjkyODJk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVJl
cGxhY2VkQm94LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlSZXBsYWNlZEJveC5oIgorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK1JlcGxh
Y2VkQm94OjpSZXBsYWNlZEJveChGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmIGRpc3BsYXlT
dHlsZSwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICA6IEJveChib3JkZXJCb3gsIFdURk1v
dmUoZGlzcGxheVN0eWxlKSwgZmxhZ3MpCit7Cit9CisKK3ZvaWQgUmVwbGFjZWRCb3g6OnNldFJl
cGxhY2VkQ29udGVudFJlY3QoRmxvYXRSZWN0IHJlY3QpCit7CisgICAgbV9yZXBsYWNlZENvbnRl
bnRSZWN0ID0gcmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY1MjRjZDAxMjUxN2VmMGQ4MDJhNmYxZmZmZGU4N2FlZTFlODMyNTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRC
b3guaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkRpc3BsYXlCb3gu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFzcyBS
ZXBsYWNlZEJveCA6IHB1YmxpYyBCb3ggeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJ
VEhfSEVBUF9JREVOVElGSUVSKFJlcGxhY2VkQm94KTsKK3B1YmxpYzoKKyAgICBSZXBsYWNlZEJv
eChGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmLCBPcHRpb25TZXQ8RmxhZ3M+KTsKKyAgICAK
KyAgICBGbG9hdFJlY3QgcmVwbGFjZWRDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGFjZWRDb250ZW50UmVjdDsgfQorICAgIHZvaWQgc2V0UmVwbGFjZWRDb250ZW50UmVjdChGbG9h
dFJlY3QpOworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX3JlcGxhY2VkQ29udGVudFJlY3Q7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWV9CT1goUmVwbGFjZWRCb3gsIGlzUmVwbGFj
ZWRCb3goKSkKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWQwYWY3ZmY3NGI1ZDI2MGZjYTkwMDMzZmMxNWIzNmNlYjQ0YmRhOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHAKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNw
bGF5U3R5bGUuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiQm9yZGVyRGF0YS5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXkgeworCitTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQor
eworICAgIG1fYmFja2dyb3VuZENvbG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yV2l0
aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKworICAgIGNvbnN0IGF1
dG8mIGJvcmRlckRhdGEgPSBzdHlsZS5ib3JkZXIoKTsKKyAgICAKKyAgICBhdXRvIGJvcmRlclZh
bHVlV2l0aFJlc29sdmVkQ29sb3IgPSBbJnN0eWxlXShjb25zdCBCb3JkZXJWYWx1ZSYgdmFsdWUs
IENTU1Byb3BlcnR5SUQgY29sb3JQcm9wZXJ0eUlEKSB7CisgICAgICAgIGF1dG8gcmVzb2x2ZWRW
YWx1ZSA9IHZhbHVlOworICAgICAgICByZXNvbHZlZFZhbHVlLnNldENvbG9yKHN0eWxlLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihjb2xvclByb3BlcnR5SUQpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBtX2JvcmRlci5sZWZ0
ID0gYm9yZGVyVmFsdWVXaXRoUmVzb2x2ZWRDb2xvcihib3JkZXJEYXRhLmxlZnQoKSwgQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0Q29sb3IpOworICAgIG1fYm9yZGVyLnJpZ2h0ID0gYm9yZGVyVmFsdWVX
aXRoUmVzb2x2ZWRDb2xvcihib3JkZXJEYXRhLnJpZ2h0KCksIENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRDb2xvcik7CisgICAgbV9ib3JkZXIudG9wID0gYm9yZGVyVmFsdWVXaXRoUmVzb2x2ZWRDb2xv
cihib3JkZXJEYXRhLnRvcCgpLCBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKTsKKyAgICBtX2Jv
cmRlci5ib3R0b20gPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRhdGEuYm90
dG9tKCksIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpOworCisgICAgbV9ib3JkZXIuaW1h
Z2UgPSBib3JkZXJEYXRhLmltYWdlKCk7CisKKyAgICBpZiAoIXN0eWxlLmhhc0F1dG9Vc2VkWklu
ZGV4KCkpCisgICAgICAgIG1fekluZGV4ID0gc3R5bGUudXNlZFpJbmRleCgpOworCisgICAgc2V0
SXNQb3NpdGlvbmVkKHN0eWxlLnBvc2l0aW9uKCkgIT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOwor
ICAgIHNldElzRmxvYXRpbmcoc3R5bGUuZmxvYXRpbmcoKSAhPSBGbG9hdDo6Tm8pOworfQorCiti
b29sIFN0eWxlOjpoYXNCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNrZ3Jv
dW5kQ29sb3IuaXNWaXNpYmxlKCkgfHwgaGFzQmFja2dyb3VuZEltYWdlKCk7Cit9CisKK2Jvb2wg
U3R5bGU6Omhhc1Zpc2libGVCb3JkZXIoKSBjb25zdAoreworICAgIGJvb2wgaGF2ZUltYWdlID0g
bV9ib3JkZXIuaW1hZ2UuaGFzSW1hZ2UoKTsKKyAgICByZXR1cm4gbV9ib3JkZXIubGVmdC5pc1Zp
c2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIucmlnaHQuaXNWaXNpYmxlKCFoYXZlSW1hZ2Up
IHx8IG1fYm9yZGVyLnRvcC5pc1Zpc2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIuYm90dG9t
LmlzVmlzaWJsZSghaGF2ZUltYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNlZTY5MTBkYjMzNzkwZTY1NmY0M2YxYjdhY2FmMWQ2ZWQyMGQ3YTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaApAQCAt
MCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkJvcmRlclZhbHVlLmgiCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJOaW5lUGllY2VJbWFnZS5oIgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU3R5bGU7CisKK25hbWVzcGFjZSBEaXNwbGF5IHsKKwor
Ly8gU3R5bGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHBhaW50IGEgRGlzcGxheTo6Qm94LgorLy8g
QWxsIGNvbG9ycyBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gdGhlaXIgcGFpbnRlZCB2YWx1ZXMgW3Zp
c2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcigpXS4KKy8vIFNob3VsZCBjb250YWlu
IG9ubHkgYWJzb2x1dGUgZmxvYXQgdmFsdWVzOyBubyBMZW5ndGhzICh3aGljaCBjYW4gY29udGFp
biBjYWxjIHZhbHVlcykuCisKK2NsYXNzIFN0eWxlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihTdHlsZSk7CitwdWJsaWM6CisKKyAgICBlbnVtIGNs
YXNzIEZsYWdzIDogdWludDhfdCB7CisgICAgICAgIFBvc2l0aW9uZWQgICAgICAgICAgPSAxIDw8
IDAsCisgICAgICAgIEZsb2F0aW5nICAgICAgICAgICAgPSAxIDw8IDEsCisgICAgfTsKKworICAg
IFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgCisgICAgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CisgICAgYm9v
bCBoYXNCYWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgYm9vbCBoYXNCYWNrZ3JvdW5kSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBGSVhNRQorCisgICAgYm9vbCBoYXNWaXNpYmxlQm9y
ZGVyKCkgY29uc3Q7CisgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckxlZnQoKSBjb25zdCB7
IHJldHVybiBtX2JvcmRlci5sZWZ0OyB9CisgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlclJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXIucmlnaHQ7IH0KKyAgICBjb25zdCBCb3JkZXJW
YWx1ZSYgYm9yZGVyVG9wKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXIudG9wOyB9CisgICAgY29u
c3QgQm9yZGVyVmFsdWUmIGJvcmRlckJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyLmJv
dHRvbTsgfQorCisgICAgT3B0aW9uYWw8aW50PiB6SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3pJ
bmRleDsgfQorICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3pJ
bmRleC5oYXNWYWx1ZSgpOyB9CisgICAgCisgICAgdm9pZCBzZXRJc1Bvc2l0aW9uZWQoYm9vbCB2
YWx1ZSkgeyBtX2ZsYWdzLnNldCh7IEZsYWdzOjpQb3NpdGlvbmVkIH0sIHZhbHVlKTsgfQorICAg
IGJvb2wgaXNQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncy5jb250YWlucyhGbGFn
czo6UG9zaXRpb25lZCk7IH0KKworICAgIHZvaWQgc2V0SXNGbG9hdGluZyhib29sIHZhbHVlKSB7
IG1fZmxhZ3Muc2V0KHsgRmxhZ3M6OkZsb2F0aW5nIH0sIHZhbHVlKTsgfQorICAgIGJvb2wgaXNG
bG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6OkZsb2F0aW5n
KTsgfQorCisgICAgYm9vbCBwYXJ0aWNpcGF0ZXNJblpPcmRlclNvcnRpbmcoKSBjb25zdCB7IHJl
dHVybiBpc1Bvc2l0aW9uZWQoKSB8fCBpc1N0YWNraW5nQ29udGV4dCgpOyB9CisKK3ByaXZhdGU6
CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICBC
b3JkZXJWYWx1ZSBsZWZ0OworICAgICAgICBCb3JkZXJWYWx1ZSByaWdodDsKKyAgICAgICAgQm9y
ZGVyVmFsdWUgdG9wOworICAgICAgICBCb3JkZXJWYWx1ZSBib3R0b207CisKKyAgICAgICAgTmlu
ZVBpZWNlSW1hZ2UgaW1hZ2U7CisgICAgfSBtX2JvcmRlcjsKKworICAgIE9wdGlvbmFsPGludD4g
bV96SW5kZXg7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDczMTdmNmZkNTAxODlmZWMyNjdkMmIyN2FlOTE0MjcyZGJjMGEwNzguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlzcGxheUJveC5o
IgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2Ug
RGlzcGxheSB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChCb3gpOwotCi1Cb3g6OkJv
eChjb25zdCBCb3gmIG90aGVyKQotICAgIDogbV90b3BMZWZ0KG90aGVyLm1fdG9wTGVmdCkKLSAg
ICAsIG1fY29udGVudFdpZHRoKG90aGVyLm1fY29udGVudFdpZHRoKQotICAgICwgbV9jb250ZW50
SGVpZ2h0KG90aGVyLm1fY29udGVudEhlaWdodCkKLSAgICAsIG1faG9yaXpvbnRhbE1hcmdpbihv
dGhlci5tX2hvcml6b250YWxNYXJnaW4pCi0gICAgLCBtX3ZlcnRpY2FsTWFyZ2luKG90aGVyLm1f
dmVydGljYWxNYXJnaW4pCi0gICAgLCBtX2hhc0NsZWFyYW5jZShvdGhlci5tX2hhc0NsZWFyYW5j
ZSkKLSAgICAsIG1fYm9yZGVyKG90aGVyLm1fYm9yZGVyKQotICAgICwgbV9wYWRkaW5nKG90aGVy
Lm1fcGFkZGluZykKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICwgbV9oYXNWYWxpZFRvcChvdGhl
ci5tX2hhc1ZhbGlkVG9wKQotICAgICwgbV9oYXNWYWxpZExlZnQob3RoZXIubV9oYXNWYWxpZExl
ZnQpCi0gICAgLCBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbihvdGhlci5tX2hhc1ZhbGlkSG9y
aXpvbnRhbE1hcmdpbikKLSAgICAsIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbihvdGhlci5tX2hh
c1ZhbGlkVmVydGljYWxNYXJnaW4pCi0gICAgLCBtX2hhc1ZhbGlkQm9yZGVyKG90aGVyLm1faGFz
VmFsaWRCb3JkZXIpCi0gICAgLCBtX2hhc1ZhbGlkUGFkZGluZyhvdGhlci5tX2hhc1ZhbGlkUGFk
ZGluZykKLSAgICAsIG1faGFzVmFsaWRDb250ZW50SGVpZ2h0KG90aGVyLm1faGFzVmFsaWRDb250
ZW50SGVpZ2h0KQotICAgICwgbV9oYXNWYWxpZENvbnRlbnRXaWR0aChvdGhlci5tX2hhc1ZhbGlk
Q29udGVudFdpZHRoKQotICAgICwgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZShvdGhlci5t
X2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKQotI2VuZGlmCi17Ci19Ci0KLUJveDo6fkJveCgp
Ci17Ci19Ci0KLVJlY3QgQm94OjptYXJnaW5Cb3goKSBjb25zdAotewotICAgIGF1dG8gYm9yZGVy
Qm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7Ci0KLSAgICBSZWN0IG1hcmdpbkJveDsKLSAgICBtYXJn
aW5Cb3guc2V0VG9wKGJvcmRlckJveC50b3AoKSAtIG1hcmdpbkJlZm9yZSgpKTsKLSAgICBtYXJn
aW5Cb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpIC0gbWFyZ2luU3RhcnQoKSk7Ci0gICAgbWFy
Z2luQm94LnNldEhlaWdodChib3JkZXJCb3guaGVpZ2h0KCkgKyBtYXJnaW5CZWZvcmUoKSArIG1h
cmdpbkFmdGVyKCkpOwotICAgIG1hcmdpbkJveC5zZXRXaWR0aChib3JkZXJCb3gud2lkdGgoKSAr
IG1hcmdpblN0YXJ0KCkgKyBtYXJnaW5FbmQoKSk7Ci0gICAgcmV0dXJuIG1hcmdpbkJveDsKLX0K
LQotUmVjdCBCb3g6OmJvcmRlckJveCgpIGNvbnN0Ci17Ci0gICAgUmVjdCBib3JkZXJCb3g7Ci0g
ICAgYm9yZGVyQm94LnNldFRvcExlZnQoeyB9KTsKLSAgICBib3JkZXJCb3guc2V0U2l6ZSh7IHdp
ZHRoKCksIGhlaWdodCgpIH0pOwotICAgIHJldHVybiBib3JkZXJCb3g7Ci19Ci0KLVJlY3QgQm94
OjpwYWRkaW5nQm94KCkgY29uc3QKLXsKLSAgICBhdXRvIGJvcmRlckJveCA9IHRoaXMtPmJvcmRl
ckJveCgpOwotCi0gICAgUmVjdCBwYWRkaW5nQm94OwotICAgIHBhZGRpbmdCb3guc2V0VG9wKGJv
cmRlckJveC50b3AoKSArIGJvcmRlclRvcCgpKTsKLSAgICBwYWRkaW5nQm94LnNldExlZnQoYm9y
ZGVyQm94LmxlZnQoKSArIGJvcmRlckxlZnQoKSk7Ci0gICAgcGFkZGluZ0JveC5zZXRIZWlnaHQo
Ym9yZGVyQm94LmJvdHRvbSgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7Ci0gICAg
cGFkZGluZ0JveC5zZXRXaWR0aChib3JkZXJCb3gud2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJv
cmRlclJpZ2h0KCkpOwotICAgIHJldHVybiBwYWRkaW5nQm94OwotfQotCi1SZWN0IEJveDo6Y29u
dGVudEJveCgpIGNvbnN0Ci17Ci0gICAgUmVjdCBjb250ZW50Qm94OwotICAgIGNvbnRlbnRCb3gu
c2V0VG9wKGNvbnRlbnRCb3hUb3AoKSk7Ci0gICAgY29udGVudEJveC5zZXRMZWZ0KGNvbnRlbnRC
b3hMZWZ0KCkpOwotICAgIGNvbnRlbnRCb3guc2V0V2lkdGgoY29udGVudEJveFdpZHRoKCkpOwot
ICAgIGNvbnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3hIZWlnaHQoKSk7Ci0gICAgcmV0dXJu
IGNvbnRlbnRCb3g7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzFmOTQ2YWVhYzQ3ZmMyNTVkYjdmMGY0YmFkZWNmOWE2MzcyNjc2Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQotCi0jaW5jbHVkZSAiRGlzcGxheVJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRV
bml0cy5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotbmFtZXNwYWNlIERpc3BsYXkgewotCi1jbGFzcyBCb3ggewotICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoQm94KTsKLXB1YmxpYzoKLSAgICBCb3goY29uc3QgQm94Jik7Ci0gICAgQm94KCkg
PSBkZWZhdWx0OwotICAgIH5Cb3goKTsKLQotICAgIExheW91dFVuaXQgdG9wKCkgY29uc3Q7Ci0g
ICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3R0b20oKSBjb25z
dCB7IHJldHVybiB0b3AoKSArIGhlaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCByaWdodCgpIGNv
bnN0IHsgcmV0dXJuIGxlZnQoKSArIHdpZHRoKCk7IH0KLQotICAgIExheW91dFBvaW50IHRvcExl
ZnQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0IHsgcmV0dXJu
IHsgcmlnaHQoKSwgYm90dG9tKCkgfTsgfQotCi0gICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4geyB3aWR0aCgpLCBoZWlnaHQoKSB9OyB9Ci0gICAgTGF5b3V0VW5pdCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpICsgYm9yZGVy
UmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVy
VG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKTsgfQotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS5pc0VtcHR5KCk7IH0KLSAgICBSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiB7IHRvcCgpLCBsZWZ0KCksIHdpZHRoKCksIGhlaWdodCgpIH07
IH0KLSAgICBSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4geyB0b3AoKSAtIG1h
cmdpbkJlZm9yZSgpLCBsZWZ0KCkgLSBtYXJnaW5TdGFydCgpLCBtYXJnaW5TdGFydCgpICsgd2lk
dGgoKSArIG1hcmdpbkVuZCgpLCBtYXJnaW5CZWZvcmUoKSArIGhlaWdodCgpICsgbWFyZ2luQWZ0
ZXIoKSB9OyB9Ci0KLSAgICBzdHJ1Y3QgVmVydGljYWxNYXJnaW4gewotICAgICAgICBMYXlvdXRV
bml0IGJlZm9yZTsKLSAgICAgICAgTGF5b3V0VW5pdCBhZnRlcjsKLSAgICB9OwotICAgIFZlcnRp
Y2FsTWFyZ2luIHZlcnRpY2FsTWFyZ2luKCkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgSG9yaXpvbnRh
bE1hcmdpbiB7Ci0gICAgICAgIExheW91dFVuaXQgc3RhcnQ7Ci0gICAgICAgIExheW91dFVuaXQg
ZW5kOwotICAgIH07Ci0gICAgSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKCkgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0
IG1hcmdpblN0YXJ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5BZnRlcigpIGNvbnN0
OwotICAgIExheW91dFVuaXQgbWFyZ2luRW5kKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNDbGVhcmFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2hhc0NsZWFyYW5jZTsgfQotCi0gICAgTGF5b3V0VW5pdCBi
b3JkZXJUb3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckxlZnQoKSBjb25zdDsKLSAg
ICBMYXlvdXRVbml0IGJvcmRlckJvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVy
UmlnaHQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsQm9yZGVyKCkgY29uc3QgeyBy
ZXR1cm4gYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKTsgfQotICAgIExheW91dFVuaXQgaG9y
aXpvbnRhbEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0
KCk7IH0KLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdUb3AoKSBjb25zdDsKLSAg
ICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nTGVmdCgpIGNvbnN0OwotICAgIE9wdGlvbmFs
PExheW91dFVuaXQ+IHBhZGRpbmdCb3R0b20oKSBjb25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiBwYWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB2ZXJ0
aWNhbFBhZGRpbmcoKSBjb25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBob3Jpem9udGFs
UGFkZGluZygpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94VG9wKCkgY29uc3Qg
eyByZXR1cm4gcGFkZGluZ0JveFRvcCgpICsgcGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7IH0KLSAg
ICBMYXlvdXRVbml0IGNvbnRlbnRCb3hMZWZ0KCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0JveExl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsgfQotICAgIExheW91dFVuaXQgY29udGVu
dEJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRCb3hUb3AoKSArIGNvbnRlbnRCb3hI
ZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgY29udGVudEJveFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gY29udGVudEJveExlZnQoKSArIGNvbnRlbnRCb3hXaWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5p
dCBjb250ZW50Qm94SGVpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94V2lk
dGgoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveFRvcCgpIGNvbnN0IHsgcmV0
dXJuIGJvcmRlclRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94TGVmdCgpIGNvbnN0
IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveEJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKTsg
fQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gcGFkZGlu
Z0JveExlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5n
Qm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBjb250
ZW50Qm94SGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsgfQotICAgIExheW91
dFVuaXQgcGFkZGluZ0JveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0xlZnQoKS52YWx1
ZU9yKDApICsgY29udGVudEJveFdpZHRoKCkgKyBwYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOyB9
Ci0KLSAgICBMYXlvdXRVbml0IGJvcmRlckJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRl
clRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVyQm90dG9tKCk7IH0KLSAgICBMYXlv
dXRVbml0IGJvcmRlckJveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0JveFdpZHRoKCkgKyBib3JkZXJSaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5C
b3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKSArIGJvcmRlckJveEhlaWdo
dCgpICsgbWFyZ2luQWZ0ZXIoKTsgfQotICAgIExheW91dFVuaXQgbWFyZ2luQm94V2lkdGgoKSBj
b25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgYm9yZGVyQm94V2lkdGgoKSArIG1hcmdpbkVu
ZCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgdmVydGljYWxCb3JkZXIoKSArIHZlcnRp
Y2FsUGFkZGluZygpLnZhbHVlT3IoMCkgKyBtYXJnaW5BZnRlcigpOyB9Ci0gICAgTGF5b3V0VW5p
dCBob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIG1hcmdp
blN0YXJ0KCkgKyBob3Jpem9udGFsQm9yZGVyKCkgKyBob3Jpem9udGFsUGFkZGluZygpLnZhbHVl
T3IoMCkgKyBtYXJnaW5FbmQoKTsgfQotCi0gICAgUmVjdCBtYXJnaW5Cb3goKSBjb25zdDsKLSAg
ICBSZWN0IGJvcmRlckJveCgpIGNvbnN0OwotICAgIFJlY3QgcGFkZGluZ0JveCgpIGNvbnN0Owot
ICAgIFJlY3QgY29udGVudEJveCgpIGNvbnN0OwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2
b2lkIHNldEhhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCkgeyBtX2hhc1ByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlID0gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHNldFRvcExlZnQoY29uc3Qg
TGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHNldFRvcChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNl
dExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQg
b2Zmc2V0KSB7IG1fdG9wTGVmdC5tb3ZlKG9mZnNldCwgMF9sdSk7IH0KLSAgICB2b2lkIG1vdmVW
ZXJ0aWNhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fdG9wTGVmdC5tb3ZlKDBfbHUsIG9mZnNl
dCk7IH0KLSAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgeyBtX3RvcExlZnQu
bW92ZShzaXplKTsgfQotICAgIHZvaWQgbW92ZUJ5KExheW91dFBvaW50IG9mZnNldCkgeyBtX3Rv
cExlZnQubW92ZUJ5KG9mZnNldCk7IH0KLQotICAgIHZvaWQgc2V0Q29udGVudEJveEhlaWdodChM
YXlvdXRVbml0KTsKLSAgICB2b2lkIHNldENvbnRlbnRCb3hXaWR0aChMYXlvdXRVbml0KTsKLQot
ICAgIHZvaWQgc2V0SG9yaXpvbnRhbE1hcmdpbihIb3Jpem9udGFsTWFyZ2luKTsKLSAgICB2b2lk
IHNldFZlcnRpY2FsTWFyZ2luKFZlcnRpY2FsTWFyZ2luKTsKLSAgICB2b2lkIHNldEhhc0NsZWFy
YW5jZSgpIHsgbV9oYXNDbGVhcmFuY2UgPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHNldEJvcmRlcihM
YXlvdXQ6OkVkZ2VzKTsKLQotICAgIHZvaWQgc2V0VmVydGljYWxQYWRkaW5nKExheW91dDo6VmVy
dGljYWxFZGdlcyk7Ci0gICAgdm9pZCBzZXRQYWRkaW5nKE9wdGlvbmFsPExheW91dDo6RWRnZXM+
KTsKLQotcHJpdmF0ZToKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHZvaWQgaW52YWxpZGF0ZU1h
cmdpbigpOwotICAgIHZvaWQgaW52YWxpZGF0ZUJvcmRlcigpIHsgbV9oYXNWYWxpZEJvcmRlciA9
IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlUGFkZGluZygpIHsgbV9oYXNWYWxpZFBhZGRp
bmcgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVByZWNvbXB1dGVkTWFyZ2luQmVmb3Jl
KCkgeyBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlID0gZmFsc2U7IH0KLQotICAgIHZvaWQg
c2V0SGFzVmFsaWRUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRI
YXNWYWxpZExlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SGFz
VmFsaWRWZXJ0aWNhbE1hcmdpbigpIHsgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luID0gdHJ1ZTsg
fQotICAgIHZvaWQgc2V0SGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKCkgeyBtX2hhc1ZhbGlkSG9y
aXpvbnRhbE1hcmdpbiA9IHRydWU7IH0KLQotICAgIHZvaWQgc2V0SGFzVmFsaWRCb3JkZXIoKSB7
IG1faGFzVmFsaWRCb3JkZXIgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRIYXNWYWxpZFBhZGRpbmco
KSB7IG1faGFzVmFsaWRQYWRkaW5nID0gdHJ1ZTsgfQotCi0gICAgdm9pZCBzZXRIYXNWYWxpZENv
bnRlbnRIZWlnaHQoKSB7IG1faGFzVmFsaWRDb250ZW50SGVpZ2h0ID0gdHJ1ZTsgfQotICAgIHZv
aWQgc2V0SGFzVmFsaWRDb250ZW50V2lkdGgoKSB7IG1faGFzVmFsaWRDb250ZW50V2lkdGggPSB0
cnVlOyB9Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLQotICAgIExheW91dFBvaW50IG1fdG9w
TGVmdDsKLSAgICBMYXlvdXRVbml0IG1fY29udGVudFdpZHRoOwotICAgIExheW91dFVuaXQgbV9j
b250ZW50SGVpZ2h0OwotCi0gICAgSG9yaXpvbnRhbE1hcmdpbiBtX2hvcml6b250YWxNYXJnaW47
Ci0gICAgVmVydGljYWxNYXJnaW4gbV92ZXJ0aWNhbE1hcmdpbjsKLSAgICBib29sIG1faGFzQ2xl
YXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIExheW91dDo6RWRnZXMgbV9ib3JkZXI7Ci0gICAgT3B0
aW9uYWw8TGF5b3V0OjpFZGdlcz4gbV9wYWRkaW5nOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBib29sIG1faGFzVmFsaWRUb3AgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZExlZnQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4geyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzVmFsaWRCb3JkZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZFBhZGRpbmcg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNWYWxpZENvbnRlbnRXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hh
c1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHsgZmFsc2UgfTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5B
QkxFRAotfTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi1pbmxpbmUgdm9pZCBCb3g6OmludmFsaWRh
dGVNYXJnaW4oKQotewotICAgIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luID0gZmFsc2U7Ci0g
ICAgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luID0gZmFsc2U7Ci19Ci0jZW5kaWYKLQotaW5saW5l
IExheW91dFVuaXQgQm94Ojp0b3AoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9w
ICYmIChtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1h
cmdpbikpOwotICAgIHJldHVybiBtX3RvcExlZnQueSgpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5p
dCBCb3g6OmxlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hh
c1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdG9wTGVmdC54KCk7Ci19Ci0K
LWlubGluZSBMYXlvdXRQb2ludCBCb3g6OnRvcExlZnQoKSBjb25zdAotewotICAgIEFTU0VSVCht
X2hhc1ZhbGlkVG9wICYmIChtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHx8IG1faGFzVmFs
aWRWZXJ0aWNhbE1hcmdpbikpOwotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1Zh
bGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdG9wTGVmdDsKLX0KLQotaW5saW5l
IHZvaWQgQm94OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0KQotewotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRUb3AoKTsKLSAgICBzZXRIYXNWYWxpZExl
ZnQoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdCA9IHRvcExlZnQ7Ci19Ci0KLWlubGluZSB2b2lk
IEJveDo6c2V0VG9wKExheW91dFVuaXQgdG9wKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
c2V0SGFzVmFsaWRUb3AoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdC5zZXRZKHRvcCk7Ci19Ci0K
LWlubGluZSB2b2lkIEJveDo6c2V0TGVmdChMYXlvdXRVbml0IGxlZnQpCi17Ci0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBzZXRIYXNWYWxpZExlZnQoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdC5z
ZXRYKGxlZnQpOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OnNldENvbnRlbnRCb3hIZWlnaHQoTGF5
b3V0VW5pdCBoZWlnaHQpCi17IAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRD
b250ZW50SGVpZ2h0KCk7Ci0jZW5kaWYKLSAgICBtX2NvbnRlbnRIZWlnaHQgPSBoZWlnaHQ7Ci19
Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0Q29udGVudEJveFdpZHRoKExheW91dFVuaXQgd2lkdGgp
Ci17IAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRDb250ZW50V2lkdGgoKTsK
LSNlbmRpZgotICAgIG1fY29udGVudFdpZHRoID0gd2lkdGg7Ci19Ci0KLWlubGluZSBMYXlvdXRV
bml0IEJveDo6Y29udGVudEJveEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFs
aWRDb250ZW50SGVpZ2h0KTsKLSAgICByZXR1cm4gbV9jb250ZW50SGVpZ2h0OwotfQotCi1pbmxp
bmUgTGF5b3V0VW5pdCBCb3g6OmNvbnRlbnRCb3hXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1faGFzVmFsaWRDb250ZW50V2lkdGgpOwotICAgIHJldHVybiBtX2NvbnRlbnRXaWR0aDsKLX0K
LQotaW5saW5lIHZvaWQgQm94OjpzZXRIb3Jpem9udGFsTWFyZ2luKEhvcml6b250YWxNYXJnaW4g
bWFyZ2luKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRIb3Jpem9udGFs
TWFyZ2luKCk7Ci0jZW5kaWYKLSAgICBtX2hvcml6b250YWxNYXJnaW4gPSBtYXJnaW47Ci19Ci0K
LWlubGluZSB2b2lkIEJveDo6c2V0VmVydGljYWxNYXJnaW4oVmVydGljYWxNYXJnaW4gbWFyZ2lu
KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbigp
OwotICAgIGludmFsaWRhdGVQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgpOwotI2VuZGlmCi0gICAg
bV92ZXJ0aWNhbE1hcmdpbiA9IG1hcmdpbjsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRCb3Jk
ZXIoTGF5b3V0OjpFZGdlcyBib3JkZXIpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRI
YXNWYWxpZEJvcmRlcigpOwotI2VuZGlmCi0gICAgbV9ib3JkZXIgPSBib3JkZXI7Ci19Ci0KLWlu
bGluZSB2b2lkIEJveDo6c2V0UGFkZGluZyhPcHRpb25hbDxMYXlvdXQ6OkVkZ2VzPiBwYWRkaW5n
KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRQYWRkaW5nKCk7Ci0jZW5k
aWYKLSAgICBtX3BhZGRpbmcgPSBwYWRkaW5nOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OnNldFZl
cnRpY2FsUGFkZGluZyhMYXlvdXQ6OlZlcnRpY2FsRWRnZXMgdmVydGljYWxQYWRkaW5nKQotewot
I2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRQYWRkaW5nKCk7Ci0jZW5kaWYKLSAg
ICBtX3BhZGRpbmcgPSBMYXlvdXQ6OkVkZ2VzIHsgbV9wYWRkaW5nID8gbV9wYWRkaW5nLT5ob3Jp
em9udGFsIDogTGF5b3V0OjpIb3Jpem9udGFsRWRnZXMoKSwgdmVydGljYWxQYWRkaW5nIH07Ci19
Ci0KLWlubGluZSBCb3g6OlZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJnaW4oKSBjb25z
dAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwotICAgIHJldHVybiBt
X3ZlcnRpY2FsTWFyZ2luOwotfQotCi1pbmxpbmUgQm94OjpIb3Jpem9udGFsTWFyZ2luIEJveDo6
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luOwotfQotCi1pbmxpbmUg
TGF5b3V0VW5pdCBCb3g6Om1hcmdpbkJlZm9yZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFz
VmFsaWRWZXJ0aWNhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW4uYmVmb3Jl
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6Om1hcmdpblN0YXJ0KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX2hvcml6
b250YWxNYXJnaW4uc3RhcnQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6bWFyZ2luQWZ0
ZXIoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwotICAg
IHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luLmFmdGVyOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBC
b3g6Om1hcmdpbkVuZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9udGFs
TWFyZ2luKTsKLSAgICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luLmVuZDsKLX0KLQotaW5saW5l
IE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6cGFkZGluZ1RvcCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT52ZXJ0aWNhbC50b3A7Ci19Ci0KLWlubGlu
ZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3g6OnBhZGRpbmdMZWZ0KCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwotICAgIGlmICghbV9wYWRkaW5nKQotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIHJldHVybiBtX3BhZGRpbmctPmhvcml6b250YWwubGVmdDsKLX0KLQot
aW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6cGFkZGluZ0JvdHRvbSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT52ZXJ0aWNhbC5ib3R0b207
Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3g6OnBhZGRpbmdSaWdodCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGlu
ZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT5ob3Jpem9udGFs
LnJpZ2h0OwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94Ojp2ZXJ0aWNhbFBh
ZGRpbmcoKSBjb25zdAotewotICAgIGF1dG8gcGFkZGluZ1RvcCA9IHRoaXMtPnBhZGRpbmdUb3Ao
KTsKLSAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSB0aGlzLT5wYWRkaW5nQm90dG9tKCk7Ci0gICAg
aWYgKCFwYWRkaW5nVG9wICYmICFwYWRkaW5nQm90dG9tKQotICAgICAgICByZXR1cm4geyB9Owot
ICAgIHJldHVybiBwYWRkaW5nVG9wLnZhbHVlT3IoMCkgKyBwYWRkaW5nQm90dG9tLnZhbHVlT3Io
MCk7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3g6Omhvcml6b250YWxQYWRk
aW5nKCkgY29uc3QKLXsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gdGhpcy0+cGFkZGluZ0xlZnQo
KTsKLSAgICBhdXRvIHBhZGRpbmdSaWdodCA9IHRoaXMtPnBhZGRpbmdSaWdodCgpOwotICAgIGlm
ICghcGFkZGluZ0xlZnQgJiYgIXBhZGRpbmdSaWdodCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICByZXR1cm4gcGFkZGluZ0xlZnQudmFsdWVPcigwKSArIHBhZGRpbmdSaWdodC52YWx1ZU9yKDAp
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OmJvcmRlclRvcCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVybiBtX2JvcmRlci52ZXJ0aWNhbC50
b3A7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Ym9yZGVyTGVmdCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVybiBtX2JvcmRlci5ob3Jpem9u
dGFsLmxlZnQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Ym9yZGVyQm90dG9tKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAgcmV0dXJuIG1fYm9yZGVy
LnZlcnRpY2FsLmJvdHRvbTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94Ojpib3JkZXJSaWdo
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVybiBt
X2JvcmRlci5ob3Jpem9udGFsLnJpZ2h0OwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEl0ZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5oCmluZGV4IDhkODU5
MzVjNGM5MDEyM2NmMmVhNjA2ZDZhODVjZjI5NTllMWNhYzMuLjYxYzBkNjFkNmYxODNlNmQyNmNj
ZTYxYTY0ZGUwY2YzYTZiMjM4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xh
eW91dHRyZWUvTGF5b3V0SXRlcmF0b3IuaApAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29u
dGFpbmluZ0Jsb2NrLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQg
ewogCg==
</data>
<flag name="commit-queue"
          id="424865"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409249</attachid>
            <date>2020-09-20 14:02:19 -0700</date>
            <delta_ts>2020-09-23 13:52:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216752-20200920140218.patch</filename>
            <type>text/plain</type>
            <size>83640</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWFiYWI1OGRiNmEyNzMx
NDMwMWFmNzVkMWNkNmI5ODQ0ZjA1ZWEwNy4uYWUyNzNlZDViNDgzMmMxZTZhM2M4YWEyYzI3Yjcz
YWRhNzVjYmE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDIwLTA5LTIwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gQWRkIHRoZSBiZWdpbm5pbmdzIG9mIGEgQ1NTIGRpc3BsYXkgYm94IGhpZXJhcmNoeSBhbmQg
Q1NTIHBhaW50ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNjc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzb21lIERpc3BsYXk6OkJveCBzdWJjbGFzc2VzIHRvIGRpc3BsYXkvY3NzLCBhIERp
c3BsYXk6OlRyZWUgY2xhc3MgdG8gb3duIHRoZQorICAgICAgICBkaXNwbGF5IHRyZWUsIGFuZCBh
IERpc3BsYXlUcmVlQnVpbGRlci4gQWxzbyBhZGQgY3NzL0Rpc3BsYXlDU1NQYWludGVyIHdoaWNo
IGlzCisgICAgICAgIHRoZSBiZWdpbm5pbmdzIG9mIGEgY2xhc3MgdGhhdCBrbm93cyBob3cgdG8g
cGFpbnQgYSBDU1Mgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY29k
ZSBvdGhlciB0aGFuIERpc3BsYXlDU1NQYWludGVyIGlzIGRlbGliZXJhdGVseSB2YWd1ZSBhYm91
dCBob3cgbXVjaCBpcworICAgICAgICBDU1Mgc3BlY2lmaWMuIEl0J3MgbGlrZWx5IHRoYXQgc29t
ZSBib3ggY2xhc3NlcyB3aWxsIGJlIHNoYXJlZCB3aXRoIFNWRyBwYWludGluZy4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgY29kZSBpcyBub3QgaG9va2VkIHVwIHlldC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlRyZWU6OlRyZWUpOgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlOjpyb290Qm94IGNvbnN0KToK
KyAgICAgICAgKiBkaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6VHJlZUJ1aWxkZXI6OlRyZWVCdWlsZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlRyZWVCdWlsZGVyOjpidWlsZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6cmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6ZGlzcGxheUJv
eEZvckxheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpvdXRwdXRE
aXNwbGF5Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Om91dHB1dERpc3BsYXlUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnNob3dEaXNwbGF5VHJlZSk6CisgICAgICAg
ICogZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgICogZGlzcGxh
eS9jc3MvRGlzcGxheUJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94OjpCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpzZXROZXh0U2libGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmRlYnVnRGVzY3JpcHRpb24gY29u
c3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OkJveCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6Ym9y
ZGVyQm94RnJhbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojppc0Nv
bnRhaW5lckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmlzSW1h
Z2VCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojppc1JlcGxhY2Vk
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6bmV4dFNpYmxpbmcg
Y29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJveERlY29y
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6OnBhaW50Qm94
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludFN0YWNraW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpyZWN1cnNp
dmVDb2xsZWN0TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNTU1BhaW50ZXI6
OnBhaW50VHJlZSk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaDog
QWRkZWQuCisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVyQm94OjpDb250YWluZXJC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVyQm94OjpzZXRGaXJzdENo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5lckJveDo6ZGVidWdEZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJv
eC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5lckJveDo6Zmly
c3RDaGlsZCBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6SW1hZ2VCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6SW1hZ2VCb3g6OnNldEltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkltYWdlQm94OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToK
KyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6aW1hZ2UgY29uc3QpOgorICAgICAgICAqIGRp
c3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UmVwbGFjZWRCb3g6OlJlcGxhY2VkQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJlcGxhY2VkQm94OjpzZXRSZXBsYWNlZENvbnRlbnRSZWN0KToKKyAgICAgICAg
KiBkaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZXBsYWNlZEJveDo6cmVwbGFjZWRDb250ZW50UmVjdCBjb25zdCk6Cisg
ICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6U3R5bGU6Omhhc0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6U3R5bGU6Omhhc1Zpc2libGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxl
OjpiYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5
bGU6Omhhc0JhY2tncm91bmRJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpTdHlsZTo6Ym9yZGVyTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpT
dHlsZTo6Ym9yZGVyUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5
bGU6OmJvcmRlclRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6
Ym9yZGVyQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjp6
SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzU3RhY2tp
bmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpzZXRJ
c1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzUG9zaXRp
b25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6c2V0SXNGbG9h
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aXNGbG9hdGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6cGFydGljaXBhdGVzSW5aT3Jk
ZXJTb3J0aW5nIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJv
eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3gu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5o
OgorCiAyMDIwLTA5LTIwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkMgRGlzcGxheV0gTW92ZSBMRkMgRGlzcGxheSBpbmZyYXN0cnVjdHVyZSBm
aWxlcyBpbnRvIGEgbmV3ICdkaXNwbGF5JyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggNTA3OWNiMTlmNDQ2MDQ3YmU2ODVhOGY4ZjRhOWFiNWFmZWQ2MjdjYy4uOGQzMzZiNGMwMTgx
ZGZiN2NmODIwZDEzMTQxMWIxYTNmMTM5OWZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTg1
LDYgKzg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L2Nzcy90eXBlZG9tIgogICAgICIke1dFQkNPUkVfRElSfS9jc3NqaXQi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Rpc3BsYXkiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2Rpc3Bs
YXkvY3NzIgogICAgICIke1dFQkNPUkVfRElSfS9kb20iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Rv
bS9tZXNzYWdlcG9ydHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2RvbWppdCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDM4YzA2YjhiYmRjYzFhMTA4MTdhZjk4MTljMDFjNjBlZTI4ZGYyNTguLjQ2NTli
ZGUyMjhhMGJmMDYzYmM5MGNjYzA2MmU3MTQ0MGZiZjNjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMzYyLDggKzM2MiwxNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlblJhbmdlLmgKIAogICAgIGRpc3BsYXkvRGlz
cGxheUxheWVyQ29udHJvbGxlci5oCisgICAgZGlzcGxheS9EaXNwbGF5VHJlZS5oCisgICAgZGlz
cGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaAogICAgIGRpc3BsYXkvRGlzcGxheVZpZXcuaAogCisg
ICAgZGlzcGxheS9jc3MvRGlzcGxheUJveC5oCisgICAgZGlzcGxheS9jc3MvRGlzcGxheUNTU1Bh
aW50ZXIuaAorICAgIGRpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWluZXJCb3guaAorICAgIGRpc3Bs
YXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5oCisgICAgZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2Vk
Qm94LmgKKyAgICBkaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaAorCiAgICAgZG9tL0FjdGl2ZURP
TUNhbGxiYWNrLmgKICAgICBkb20vQWN0aXZlRE9NT2JqZWN0LmgKICAgICBkb20vQXR0ci5oCkBA
IC02OTYsNyArNzA1LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIGxheW91dC9MYXlvdXRVbml0cy5oCiAgICAgbGF5b3V0L01hcmdpblR5cGVzLmgKIAotICAg
IGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKICAgICBsYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheUlubGluZUNvbnRlbnQuaAogICAgIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5TGlu
ZS5oCiAgICAgbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSZWN0LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggNzI3NTYzZTVmYjc3YTQ1OTQzMTBjNDBlMzNlZTQ2NjhjYjg1YThmOC4uYTYzYzFlNWVkOTEz
YWJmNmI4MjE4NjdlZGY0OWQzNmM3NjFmOTM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTc5NCw3ICs3
OTQsMTUgQEAgY3NzL3R5cGVkb20vVHlwZWRPTUNTU1N0eWxlVmFsdWUuY3BwCiBjc3MvdHlwZWRv
bS9UeXBlZE9NQ1NTVW5pdFZhbHVlLmNwcAogY3NzL3R5cGVkb20vVHlwZWRPTUNTU1VucGFyc2Vk
VmFsdWUuY3BwCiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKK2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3guY3BwCitkaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmNwcAorZGlzcGxheS9j
c3MvRGlzcGxheUNTU1BhaW50ZXIuY3BwCitkaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guY3Bw
CitkaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guY3BwCitkaXNwbGF5L2Nzcy9EaXNwbGF5
U3R5bGUuY3BwCiBkaXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xsZXIuY3BwCitkaXNwbGF5L0Rp
c3BsYXlUcmVlLmNwcAorZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuY3BwCiBkaXNwbGF5L0Rp
c3BsYXlWaWV3LmNwcAogZG9tL0Fib3J0Q29udHJvbGxlci5jcHAKIGRvbS9BYm9ydFNpZ25hbC5j
cHAKQEAgLTE0MzQsNyArMTQ0Miw2IEBAIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJn
aW5Db2xsYXBzZS5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvUHJlY29tcHV0ZWRCbG9ja01h
cmdpbkNvbGxhcHNlLmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy90YWJsZXdyYXBwZXIvVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRp
bmcvdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3Mu
Y3BwCi1sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAKIGxheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5SW5saW5lQ29udGVudC5jcHAKIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFp
bnRlci5jcHAKIGxheW91dC9mbGV4Zm9ybWF0dGluZy9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggM2RjYzVlNzFiOGIxMzM5MDAyNjIxYWM3YjZjYWI3NDBhZGZjZTIxYi4uNWY2NDEwNjIy
MDJmNjVhNmEwY2QwODliZjc4MjZmNTg1OTgzOGQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTk2Niw2ICs1OTY2LDIwIEBA
CiAJCTBGNzkwRjNFMjUxN0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMYXllckNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTBGM0YyNTE3Q0U2RDAwOUJBMDM0
IC8qIERpc3BsYXlWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Bs
YXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzkwRjQwMjUxN0NFNkQw
MDlCQTAzNCAvKiBEaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMYXllckNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY0QjI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVN0
eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjc5MEY0QzI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNvbnRhaW5lckJv
eC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5Q29udGFpbmVyQm94LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3OTBGNEQyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3Bs
YXlJbWFnZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5SW1hZ2VCb3guY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY0RTI1MTdENTU0MDA5QkEwMzQgLyog
RGlzcGxheVN0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlTdHlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjRGMjUxN0Q1NTQwMDlCQTAzNCAvKiBE
aXNwbGF5Q1NTUGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q1NTUGFpbnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY1MDI1MTdENTU0MDA5QkEwMzQgLyog
RGlzcGxheVJlcGxhY2VkQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSZXBsYWNlZEJveC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc5MEY1MTI1MTdENTU0MDA5QkEwMzQg
LyogRGlzcGxheUNvbnRhaW5lckJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q29udGFpbmVy
Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjUyMjUxN0Q1NTQwMDlC
QTAzNCAvKiBEaXNwbGF5SW1hZ2VCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUltYWdlQm94
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjUzMjUxN0Q1NTQwMDlCQTAz
NCAvKiBEaXNwbGF5UmVwbGFjZWRCb3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheVJl
cGxhY2VkQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3OTBGNTQyNTE3
RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDU1NQYWludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpc3BsYXlDU1NQYWludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3
OTBGNTYyNTE3RDU2MTAwOUJBMDM0IC8qIERpc3BsYXlUcmVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERp
c3BsYXlUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzkwRjU3MjUxN0Q1
NjIwMDlCQTAzNCAvKiBEaXNwbGF5VHJlZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlzcGxheVRyZWVCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3
OTBGNTgyNTE3RDU2MjAwOUJBMDM0IC8qIERpc3BsYXlUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERpc3BsYXlUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3OTBG
NTkyNTE3RDU2MzAwOUJBMDM0IC8qIERpc3BsYXlUcmVlQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5VHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
REYxNDcxRTJCRjFBNjAwOTU5NTFCIC8qIFdlYkNvcmVKU0NsaWVudERhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODUwRkUyMUVEN0MxODMwMEZCNzdBNyAvKiBQ
ZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGODcxNjZEMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZW5ndGhQb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNzQwOCwxNCArMTc0MjIsMzggQEAKIAkJMEY3OTBGM0MyNTE3
Q0U2RDAwOUJBMDM0IC8qIGRpc3BsYXkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTBGNzkwRjRBMjUxN0Q1NTQwMDlCQTAzNCAvKiBjc3MgKi8sCiAJCQkJ
MEY3OTBGNDAyNTE3Q0U2RDAwOUJBMDM0IC8qIERpc3BsYXlMYXllckNvbnRyb2xsZXIuY3BwICov
LAogCQkJCTBGNzkwRjNFMjUxN0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5TGF5ZXJDb250cm9sbGVy
LmggKi8sCisJCQkJMEY3OTBGNTgyNTE3RDU2MjAwOUJBMDM0IC8qIERpc3BsYXlUcmVlLmNwcCAq
LywKKwkJCQkwRjc5MEY1NjI1MTdENTYxMDA5QkEwMzQgLyogRGlzcGxheVRyZWUuaCAqLywKKwkJ
CQkwRjc5MEY1NzI1MTdENTYyMDA5QkEwMzQgLyogRGlzcGxheVRyZWVCdWlsZGVyLmNwcCAqLywK
KwkJCQkwRjc5MEY1OTI1MTdENTYzMDA5QkEwMzQgLyogRGlzcGxheVRyZWVCdWlsZGVyLmggKi8s
CiAJCQkJMEY3OTBGM0QyNTE3Q0U2RDAwOUJBMDM0IC8qIERpc3BsYXlWaWV3LmNwcCAqLywKIAkJ
CQkwRjc5MEYzRjI1MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxheVZpZXcuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gZGlzcGxheTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBG
NzkwRjRBMjUxN0Q1NTQwMDlCQTAzNCAvKiBjc3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTExOTlGQTVBMjA4RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5
Qm94LmNwcCAqLywKKwkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5o
ICovLAorCQkJCTBGNzkwRjRDMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5Q29udGFpbmVyQm94
LmNwcCAqLywKKwkJCQkwRjc5MEY1MTI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheUNvbnRhaW5l
ckJveC5oICovLAorCQkJCTBGNzkwRjU0MjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5Q1NTUGFp
bnRlci5jcHAgKi8sCisJCQkJMEY3OTBGNEYyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlDU1NQ
YWludGVyLmggKi8sCisJCQkJMEY3OTBGNEQyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlJbWFn
ZUJveC5jcHAgKi8sCisJCQkJMEY3OTBGNTIyNTE3RDU1NDAwOUJBMDM0IC8qIERpc3BsYXlJbWFn
ZUJveC5oICovLAorCQkJCTBGNzkwRjUzMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5UmVwbGFj
ZWRCb3guY3BwICovLAorCQkJCTBGNzkwRjUwMjUxN0Q1NTQwMDlCQTAzNCAvKiBEaXNwbGF5UmVw
bGFjZWRCb3guaCAqLywKKwkJCQkwRjc5MEY0RTI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVN0
eWxlLmNwcCAqLywKKwkJCQkwRjc5MEY0QjI1MTdENTU0MDA5QkEwMzQgLyogRGlzcGxheVN0eWxl
LmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNzczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CiAJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTc1NDIsOCArMTc1ODAs
NiBAQAogCQkxMTk5RkE1ODIwOEUzQzRDMDAyMzU4Q0MgLyogZGlzcGxheXRyZWUgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTExOTlGQTVBMjA4RTNDN0Yw
MDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKLQkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4
Q0MgLyogRGlzcGxheUJveC5oICovLAogCQkJCUU0RkI0QjM1MjM5QkVCMTAwMDNDMzM2QSAvKiBE
aXNwbGF5SW5saW5lQ29udGVudC5jcHAgKi8sCiAJCQkJRTQ1MUM2MzMyMzk0MDU4RTAwOTkzMTkw
IC8qIERpc3BsYXlJbmxpbmVDb250ZW50LmggKi8sCiAJCQkJNkZCNDdFNjEyMjc3NDI1QTAwQzdC
Q0IwIC8qIERpc3BsYXlMaW5lLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L0Rpc3BsYXlUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZlYTBmYTY3Njg4NTJlZmQ5YmU2ODhlZWNlMDk1YzNmMmU2YjBiNTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmNw
cApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlUcmVlLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworVHJlZTo6VHJlZShzdGQ6OnVuaXF1ZV9w
dHI8Q29udGFpbmVyQm94PiYmIHJvb3RCb3gpCisgICAgOiBtX3Jvb3RCb3goV1RGTW92ZShyb290
Qm94KSkKK3sKKyAgICBBU1NFUlQobV9yb290Qm94KTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlz
cGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rp
c3BsYXlUcmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmU4ZjM1ZmMzY2EzY2IyNjEzYzI1YjJhZGRlYzI2NWQzNDUzMTI4NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWUuaApAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkRpc3BsYXlDb250YWluZXJCb3guaCIKKyNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBEaXNwbGF5IHsKKworY2xhc3MgVHJlZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQo
VHJlZSk7CitwdWJsaWM6CisgICAgVHJlZShzdGQ6OnVuaXF1ZV9wdHI8Q29udGFpbmVyQm94PiYm
KTsKKworICAgIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdEJveCgpIGNvbnN0IHsgcmV0dXJuICpt
X3Jvb3RCb3g7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJZGVhbGx5IHRoaXMgcm9vdCBib3ggd291
bGQgYmUgYWdub3N0aWMgdG8gZGlzcGxheSB0eXBlIChDU1MgdnMgU1ZHKS4KKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q29udGFpbmVyQm94PiBtX3Jvb3RCb3g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
RGlzcGxheVRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRy
ZWVCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjNmZGE2MWRlNjFhZGU0OTQ1NTlhMWEyNTAyNzY1
OTYxNTI2ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNw
bGF5VHJlZUJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlUcmVlQnVpbGRlci5oIgorCisjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5Q29udGFp
bmVyQm94LmgiCisjaW5jbHVkZSAiRGlzcGxheUltYWdlQm94LmgiCisjaW5jbHVkZSAiRGlzcGxh
eVN0eWxlLmgiCisjaW5jbHVkZSAiRGlzcGxheVRyZWUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91dENoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJM
YXlvdXRDb250YWluZXJCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgorI2lu
Y2x1ZGUgIkxheW91dFN0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIgLy8g
SnVzdCBmb3Igc2hvd0xheW91dFRyZWUuCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK1RyZWVCdWls
ZGVyOjpUcmVlQnVpbGRlcihmbG9hdCBwaXhlbFNuYXBwaW5nRmFjdG9yKQorICAgIDogbV9waXhl
bFNuYXBwaW5nRmFjdG9yKHBpeGVsU25hcHBpbmdGYWN0b3IpCit7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxUcmVlPiBUcmVlQnVpbGRlcjo6YnVpbGQoY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUpIGNvbnN0Cit7CisgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNSb290KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgcm9vdExheW91dEJveCA9IGxheW91
dFN0YXRlLnJvb3QoKTsKKworI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiQnVpbGRpbmcgZGlz
cGxheSB0cmVlIGZvcjoiKTsKKyAgICBzaG93TGF5b3V0VHJlZShyb290TGF5b3V0Qm94LCAmbGF5
b3V0U3RhdGUpOworI2VuZGlmCisKKyAgICBhdXRvIHJvb3REaXNwbGF5Qm94ID0gZGlzcGxheUJv
eEZvckxheW91dEJveChsYXlvdXRTdGF0ZSwgcm9vdExheW91dEJveCk7CisgICAgYXV0byByb290
RGlzcGxheUNvbnRhaW5lckJveCA9IHN0ZDo6dW5pcXVlX3B0cjxDb250YWluZXJCb3g+IHsgZG93
bmNhc3Q8Q29udGFpbmVyQm94Pihyb290RGlzcGxheUJveC5yZWxlYXNlKCkpIH07CisKKyAgICBp
ZiAoIXJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxUcmVlPihXVEZNb3ZlKHJvb3REaXNwbGF5Q29udGFpbmVyQm94KSk7CisKKyAgICByZWN1cnNp
dmVCdWlsZERpc3BsYXlUcmVlKGxheW91dFN0YXRlLCAqcm9vdExheW91dEJveC5maXJzdENoaWxk
KCksICpyb290RGlzcGxheUNvbnRhaW5lckJveCk7CisKKyNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJ
TkcpCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0g
PDwgIkRpc3BsYXkgdHJlZToiKTsKKyAgICBzaG93RGlzcGxheVRyZWUoKnJvb3REaXNwbGF5Q29u
dGFpbmVyQm94KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8VHJlZT4oV1RGTW92
ZShyb290RGlzcGxheUNvbnRhaW5lckJveCkpOworfQorCitCb3gqIFRyZWVCdWlsZGVyOjpyZWN1
cnNpdmVCdWlsZERpc3BsYXlUcmVlKGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBjb25zdCBMYXlvdXQ6OkJveCYgYm94LCBEaXNwbGF5OjpDb250YWluZXJCb3gmIHBhcmVu
dERpc3BsYXlCb3gsIERpc3BsYXk6OkJveCogcHJldmlvdXNTaWJsaW5nQm94KSBjb25zdAorewor
ICAgIGF1dG8gZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0U3RhdGUs
IGJveCk7CisgICAgCisgICAgQm94KiByZXN1bHQgPSBkaXNwbGF5Qm94LmdldCgpOworCisgICAg
aWYgKHByZXZpb3VzU2libGluZ0JveCkKKyAgICAgICAgcHJldmlvdXNTaWJsaW5nQm94LT5zZXRO
ZXh0U2libGluZyhXVEZNb3ZlKGRpc3BsYXlCb3gpKTsKKyAgICBlbHNlCisgICAgICAgIHBhcmVu
dERpc3BsYXlCb3guc2V0Rmlyc3RDaGlsZChXVEZNb3ZlKGRpc3BsYXlCb3gpKTsKKworICAgIGlm
ICghaXM8TGF5b3V0OjpDb250YWluZXJCb3g+KGJveCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICBhdXRvJiBsYXlvdXRDb250YWluZXJCb3ggPSBkb3duY2FzdDxMYXlvdXQ6OkNvbnRh
aW5lckJveD4oYm94KTsKKyAgICBpZiAoIWxheW91dENvbnRhaW5lckJveC5oYXNDaGlsZCgpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgYXV0byYgZGlzcGxheUNvbnRhaW5lckJveCA9
IGRvd25jYXN0PENvbnRhaW5lckJveD4oKnJlc3VsdCk7CisKKyAgICBEaXNwbGF5OjpCb3gqIGN1
cnJTaWJsaW5nRGlzcGxheUJveCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IExh
eW91dDo6Y2hpbGRyZW5PZlR5cGU8TGF5b3V0OjpCb3g+KGxheW91dENvbnRhaW5lckJveCkpIHsK
KyAgICAgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNCb3hHZW9tZXRyeShjaGlsZCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBjdXJyU2libGluZ0Rpc3BsYXlCb3ggPSByZWN1cnNp
dmVCdWlsZERpc3BsYXlUcmVlKGxheW91dFN0YXRlLCBjaGlsZCwgZGlzcGxheUNvbnRhaW5lckJv
eCwgY3VyclNpYmxpbmdEaXNwbGF5Qm94KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8Qm94PiBUcmVlQnVpbGRlcjo6ZGlzcGxheUJveEZvckxheW91
dEJveChjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgTGF5b3V0
OjpCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBhdXRvIGdlb21ldHJ5ID0gbGF5b3V0U3Rh
dGUuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAvLyBGSVhNRTogTmVlZCB0byBtYXAg
bG9naWNhbCB0byBwaHlzaWNhbCByZWN0cy4KKyAgICBhdXRvIGJvcmRlckJveCA9IExheW91dFJl
Y3QgeyBnZW9tZXRyeS5sb2dpY2FsUmVjdCgpIH07CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIGlz
QW5vbnltb3VzKCkKKyAgICAvLyBGSVhNRTogRG8gaG9pc3Rpbmcgb2YgPGJvZHk+IHN0eWxlcyB0
byB0aGUgcm9vdCB3aGVyZSBhcHByb3ByaWF0ZS4KKworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRv
IGxvZ2ljYWwgLT4gcGh5c2ljYWwgY29vcmRpbmF0ZSBtYXBwaW5nIGhlcmUuCisgICAgLy8gRklY
TUU6IEl0J3Mgd3JvbmcgdG8gcGl4ZWwgc25hcCBhIGJveCBpbiBsb2NhbCBjb29yZGluYXRlcy4g
TmVlZCB0byBhY2N1bXVsYXRlIGFuIG9mZnNldCBmcm9tIHRoZSByb290LgorICAgIGF1dG8gc3R5
bGUgPSBTdHlsZSB7IGxheW91dEJveC5zdHlsZSgpIH07CisgICAgCisgICAgaWYgKGlzPExheW91
dDo6UmVwbGFjZWRCb3g+KGxheW91dEJveCkpIHsKKyAgICAgICAgLy8gRklYTUU6IERvbid0IGFz
c3VtZSBpdCdzIGFuIGltYWdlLgorICAgICAgICBhdXRvIGltYWdlQm94ID0gbWFrZVVuaXF1ZTxJ
bWFnZUJveD4oc25hcFJlY3RUb0RldmljZVBpeGVscyhib3JkZXJCb3gsIG1fcGl4ZWxTbmFwcGlu
Z0ZhY3RvciksIFdURk1vdmUoc3R5bGUpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBX
cm9uZzsgZ2VvbWV0cnkgbmVlZHMgdG8gdmVuZCB0aGUgY29ycmVjdCBjb250ZW50IHJlY3QuCisg
ICAgICAgIGF1dG8gcmVwbGFjZWRDb250ZW50UmVjdCA9IExheW91dFJlY3QgeyBnZW9tZXRyeS5j
b250ZW50Qm94TGVmdCgpLCBnZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIGdlb21ldHJ5LmNvbnRl
bnRCb3hXaWR0aCgpLCBnZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkgfTsKKyAgICAgICAgaW1h
Z2VCb3gtPnNldFJlcGxhY2VkQ29udGVudFJlY3Qoc25hcFJlY3RUb0RldmljZVBpeGVscyhyZXBs
YWNlZENvbnRlbnRSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpKTsKKworICAgICAgICBpZiAo
YXV0byogY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxMYXlvdXQ6OlJlcGxhY2VkQm94PihsYXlvdXRC
b3gpLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICBpbWFnZUJveC0+c2V0SW1hZ2UoY2FjaGVk
SW1hZ2UtPmltYWdlKCkpOworCisgICAgICAgIHJldHVybiBpbWFnZUJveDsKKyAgICB9CisgICAg
CisgICAgaWYgKGlzPExheW91dDo6Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGUgZGVjaXNpb24gdG8gbWFrZSBhIENvbnRhaW5lckJveCBzaG91bGQgYmUg
bWFkZSBiYXNlZCBvbiB3aGV0aGVyIHRoaXMgRGlzcGxheTo6Qm94IHdpbGwgaGF2ZSBjaGlsZHJl
bi4KKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q29udGFpbmVyQm94PihzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKGJvcmRlckJveCwgbV9waXhlbFNuYXBwaW5nRmFjdG9yKSwgV1RGTW92ZShzdHls
ZSkpOworICAgIH0KKworICAgIHJldHVybiBtYWtlVW5pcXVlPEJveD4oc25hcFJlY3RUb0Rldmlj
ZVBpeGVscyhib3JkZXJCb3gsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUp
KTsKK30KKworI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKKworc3RhdGljIHZvaWQgb3V0cHV0
RGlzcGxheUJveChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEJveCYgZGlzcGxheUJveCwgdW5z
aWduZWQpCit7CisgICAgc3RyZWFtLndyaXRlSW5kZW50KCk7CisKKyAgICBzdHJlYW0gPDwgZGlz
cGxheUJveC5kZWJ1Z0Rlc2NyaXB0aW9uKCk7CisgICAgc3RyZWFtLm5leHRMaW5lKCk7Cit9CisK
K3N0YXRpYyB2b2lkIG91dHB1dERpc3BsYXlUcmVlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3Qg
Qm94JiBkaXNwbGF5Qm94LCB1bnNpZ25lZCBkZXB0aCkKK3sKKyAgICBvdXRwdXREaXNwbGF5Qm94
KHN0cmVhbSwgZGlzcGxheUJveCwgZGVwdGgpOworCisgICAgaWYgKGlzPENvbnRhaW5lckJveD4o
ZGlzcGxheUJveCkpIHsKKyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50KHN0
cmVhbSk7CisgICAgICAgIGZvciAoYXV0byBjaGlsZCA9IGRvd25jYXN0PENvbnRhaW5lckJveD4o
ZGlzcGxheUJveCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKKyAgICAgICAgICAgIG91dHB1dERpc3BsYXlUcmVlKHN0cmVhbSwgKmNoaWxkLCBkZXB0
aCArIDEpOworICAgIH0KK30KKwordm9pZCBzaG93RGlzcGxheVRyZWUoY29uc3QgQm94JiBib3gp
Cit7CisgICAgVGV4dFN0cmVhbSBzdHJlYW0oVGV4dFN0cmVhbTo6TGluZU1vZGU6Ok11bHRpcGxl
TGluZSwgVGV4dFN0cmVhbTo6Rm9ybWF0dGluZzo6U1ZHU3R5bGVSZWN0KTsKKyAgICBvdXRwdXRE
aXNwbGF5VHJlZShzdHJlYW0sIGJveCwgMSk7CisgICAgV1RGTG9nQWx3YXlzKCIlcyIsIHN0cmVh
bS5yZWxlYXNlKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3Bs
YXkvRGlzcGxheVRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlU
cmVlQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzNDRiMzYyNjYyZjUxZDFkMzY0MTM2MDM0ZWViN2E0
NjUyMmVhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3Bs
YXlUcmVlQnVpbGRlci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBMYXlv
dXQgeworY2xhc3MgQm94OworY2xhc3MgTGF5b3V0U3RhdGU7Cit9CisKK25hbWVzcGFjZSBEaXNw
bGF5IHsKKworY2xhc3MgQm94OworY2xhc3MgQ29udGFpbmVyQm94OworY2xhc3MgVHJlZTsKKwor
Y2xhc3MgVHJlZUJ1aWxkZXIgeworcHVibGljOgorICAgIFRyZWVCdWlsZGVyKGZsb2F0IHBpeGVs
U25hcHBpbmdGYWN0b3IpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFRyZWU+IGJ1aWxkKGNvbnN0
IExheW91dDo6TGF5b3V0U3RhdGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qm94PiBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6TGF5b3V0U3Rh
dGUmLCBjb25zdCBMYXlvdXQ6OkJveCYpIGNvbnN0OworCisgICAgQm94KiByZWN1cnNpdmVCdWls
ZERpc3BsYXlUcmVlKGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmLCBjb25zdCBMYXlvdXQ6OkJv
eCYsIERpc3BsYXk6OkNvbnRhaW5lckJveCYgcGFyZW50RGlzcGxheUJveCwgRGlzcGxheTo6Qm94
KiBwcmV2aW91c1NpYmxpbmdCb3ggPSBudWxscHRyKSBjb25zdDsKKworICAgIGZsb2F0IG1fcGl4
ZWxTbmFwcGluZ0ZhY3RvciB7IDEgfTsKK307CisKKyNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcp
Cit2b2lkIHNob3dEaXNwbGF5VHJlZShjb25zdCBCb3gmKTsKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE0MzAxZDkwODA5YTU3NTQ5MDJlNTg0ZWRiMjNlYmQx
ZWRiNmU3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3guY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIERpc3BsYXkgeworCitCb3g6OkJveChGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYm
IGRpc3BsYXlTdHlsZSwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICA6IG1fYm9yZGVyQm94
RnJhbWUoYm9yZGVyQm94KQorICAgICwgbV9zdHlsZShXVEZNb3ZlKGRpc3BsYXlTdHlsZSkpCisg
ICAgLCBtX2ZsYWdzKGZsYWdzKQoreworfQorCit2b2lkIEJveDo6c2V0TmV4dFNpYmxpbmcoc3Rk
Ojp1bmlxdWVfcHRyPEJveD4mJiBib3gpCit7CisgICAgbV9uZXh0U2libGluZyA9IFdURk1vdmUo
Ym94KTsKK30KKworU3RyaW5nIEJveDo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAg
VGV4dFN0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8ICJkaXNwbGF5IGJveCAiIDw8IGJvcmRl
ckJveEZyYW1lKCkgPDwgIiAoIiA8PCB0aGlzIDw8ICIpIjsKKyAgICByZXR1cm4gc3RyZWFtLnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY3NWRiZjUxNjFk
ZDAzZmUxOTg0MmYxOTc4MTY5NGVhY2U5MWY0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaApAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKKworI2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworY2xhc3MgQm94IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihCb3gpOwor
cHVibGljOgorICAgIGVudW0gY2xhc3MgRmxhZ3MgOiB1aW50OF90IHsKKyAgICAgICAgQ29udGFp
bmVyQm94ICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIEltYWdlQm94ICAgICAgICAgICAg
ICAgID0gMSA8PCAxLAorICAgIH07CisKKyAgICBCb3goRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5
bGUmJiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7CisgICAgdmlydHVhbCB+Qm94KCkgPSBkZWZh
dWx0OworCisgICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsg
fQorCisgICAgLy8gUmVsYXRpdmUgdG8gaXRzIHBhcmVudCBib3guCisgICAgRmxvYXRSZWN0IGJv
cmRlckJveEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJCb3hGcmFtZTsgfQorCisgICAg
Ym9vbCBpc0NvbnRhaW5lckJveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MuY29udGFpbnMoRmxh
Z3M6OkNvbnRhaW5lckJveCk7IH0KKyAgICBib29sIGlzSW1hZ2VCb3goKSBjb25zdCB7IHJldHVy
biBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpJbWFnZUJveCk7IH0KKyAgICBib29sIGlzUmVwbGFj
ZWRCb3goKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpJbWFnZUJveCk7
IC8qIGFuZCBvdGhlciB0eXBlcyBsYXRlci4gKi8gfQorCisgICAgY29uc3QgQm94KiBuZXh0U2li
bGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dFNpYmxpbmcuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dE5leHRTaWJsaW5nKHN0ZDo6dW5pcXVlX3B0cjxCb3g+JiYpOworCisgICAgdmlydHVhbCBTdHJp
bmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBt
X2JvcmRlckJveEZyYW1lOworICAgIFN0eWxlIG1fc3R5bGU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEJveD4gbV9uZXh0U2libGluZzsKKyAgICBPcHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNkZWZp
bmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZX0JPWChUb1ZhbHVlVHlwZU5hbWUsIHBy
ZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5
OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheTo6Qm94JiBib3gpIHsgcmV0dXJuIGJveC5wcmVkaWNhdGU7IH0gXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNw
bGF5Q1NTUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NT
UGFpbnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMwZjhkODVjMjQxZDQ4YmZiODM4YTEzNDkzOGRjNTk3
NDNhZWQxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlDU1NQYWludGVyLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5Q1NTUGFpbnRlci5oIgorCisjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGlzcGxheUNvbnRhaW5lckJveC5oIgor
I2luY2x1ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgorI2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgor
I2luY2x1ZGUgIkRpc3BsYXlUcmVlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKwordm9pZCBDU1NQYWludGVyOjpwYWlu
dEJveERlY29yYXRpb25zKGNvbnN0IEJveCYgZGlzcGxheUJveCwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBGbG9hdFNpemUgcGFpbnRPZmZzZXQpCit7CisgICAgYXV0byBib3JkZXJCb3hSZWN0
ID0gZGlzcGxheUJveC5ib3JkZXJCb3hGcmFtZSgpOworICAgIGJvcmRlckJveFJlY3QubW92ZShw
YWludE9mZnNldCk7CisgICAgCisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBkaXNwbGF5Qm94LnN0
eWxlKCk7CisKKyAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yCisgICAgaWYgKHN0eWxlLmhhc0JhY2tn
cm91bmQoKSkgeworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGJvcmRlckJveFJlY3QsIHN0eWxl
LmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgLy8gRklYTUU6IFBhaW50IGJhY2tncm91bmQg
aW1hZ2UuCisgICAgfQorCisgICAgLy8gQm9yZGVyCisgICAgaWYgKHN0eWxlLmhhc1Zpc2libGVC
b3JkZXIoKSkgeworICAgICAgICBhdXRvIGRyYXdCb3JkZXJTaWRlID0gWyZdKGF1dG8gc3RhcnQs
IGF1dG8gZW5kLCBjb25zdCBhdXRvJiBib3JkZXJTdHlsZSkgeworICAgICAgICAgICAgaWYgKCFi
b3JkZXJTdHlsZS53aWR0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGlmIChib3JkZXJTdHlsZS5zdHlsZSgpID09IEJvcmRlclN0eWxlOjpOb25lIHx8IGJvcmRlclN0
eWxlLnN0eWxlKCkgPT0gQm9yZGVyU3R5bGU6OkhpZGRlbikKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRlclN0eWxlLmNvbG9y
KCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyU3R5bGUu
d2lkdGgoKSk7CisgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lKHN0YXJ0LCBlbmQpOworICAg
ICAgICB9OworCisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrKTsKKworICAgICAgICAvLyBUb3AKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBi
b3JkZXJXaWR0aCA9IHN0eWxlLmJvcmRlclRvcCgpLndpZHRoKCk7CisgICAgICAgICAgICBhdXRv
IHN0YXJ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWluWUNvcm5lcigpOworICAgICAgICAgICAgYXV0
byBlbmQgPSBGbG9hdFBvaW50IHsgYm9yZGVyQm94UmVjdC5tYXhYKCksIHN0YXJ0LnkoKSArIGJv
cmRlcldpZHRoIH07CisgICAgICAgICAgICBkcmF3Qm9yZGVyU2lkZShzdGFydCwgZW5kLCBzdHls
ZS5ib3JkZXJUb3AoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSaWdodAorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGJvcmRlcldpZHRoID0gc3R5bGUuYm9yZGVyUmlnaHQoKS53aWR0
aCgpOworICAgICAgICAgICAgYXV0byBzdGFydCA9IEZsb2F0UG9pbnQgeyBib3JkZXJCb3hSZWN0
Lm1heFgoKSAtIGJvcmRlcldpZHRoLCBib3JkZXJCb3hSZWN0LnkoKSB9OworICAgICAgICAgICAg
YXV0byBlbmQgPSBGbG9hdFBvaW50IHsgc3RhcnQueCgpICsgYm9yZGVyV2lkdGgsIGJvcmRlckJv
eFJlY3QubWF4WSgpIH07CisgICAgICAgICAgICBkcmF3Qm9yZGVyU2lkZShzdGFydCwgZW5kLCBz
dHlsZS5ib3JkZXJSaWdodCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJvdHRvbQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGJvcmRlcldpZHRoID0gc3R5bGUuYm9yZGVyQm90dG9t
KCkud2lkdGgoKTsKKyAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBGbG9hdFBvaW50IHsgYm9yZGVy
Qm94UmVjdC54KCksIGJvcmRlckJveFJlY3QubWF4WSgpIC0gYm9yZGVyV2lkdGggfTsKKyAgICAg
ICAgICAgIGF1dG8gZW5kID0gRmxvYXRQb2ludCB7IGJvcmRlckJveFJlY3QubWF4WCgpLCBzdGFy
dC55KCkgKyBib3JkZXJXaWR0aCB9OworICAgICAgICAgICAgZHJhd0JvcmRlclNpZGUoc3RhcnQs
IGVuZCwgc3R5bGUuYm9yZGVyQm90dG9tKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTGVm
dAorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGJvcmRlcldpZHRoID0gc3R5bGUuYm9yZGVy
TGVmdCgpLndpZHRoKCk7CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gYm9yZGVyQm94UmVjdC5t
aW5YTWluWUNvcm5lcigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBGbG9hdFBvaW50IHsgc3Rh
cnQueCgpICsgYm9yZGVyV2lkdGgsIGJvcmRlckJveFJlY3QubWF4WSgpIH07CisgICAgICAgICAg
ICBkcmF3Qm9yZGVyU2lkZShzdGFydCwgZW5kLCBzdHlsZS5ib3JkZXJMZWZ0KCkpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIENTU1BhaW50ZXI6OnBhaW50Qm94Q29udGVudChjb25zdCBC
b3gmIGJveCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBGbG9hdFNpemUgcGFpbnRPZmZzZXQp
Cit7CisgICAgaWYgKGlzPEltYWdlQm94Pihib3gpKSB7CisgICAgICAgIGF1dG8mIGltYWdlQm94
ID0gZG93bmNhc3Q8SW1hZ2VCb3g+KGJveCk7CisgICAgICAgIAorICAgICAgICBhdXRvKiBpbWFn
ZSA9IGltYWdlQm94LmltYWdlKCk7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW1hZ2VCb3gu
cmVwbGFjZWRDb250ZW50UmVjdCgpOworICAgICAgICBpbWFnZVJlY3QubW92ZShwYWludE9mZnNl
dCk7CisKKyAgICAgICAgaWYgKGltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
KmltYWdlLCBpbWFnZVJlY3QpOworICAgIH0KK30KKwordm9pZCBDU1NQYWludGVyOjpwYWludEJv
eChjb25zdCBCb3gmIGJveCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBGbG9hdFNpemUgcGFp
bnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBhdXRvIHJlbGF0aXZl
UmVjdCA9IGJveC5ib3JkZXJCb3hGcmFtZSgpOworICAgIHJlbGF0aXZlUmVjdC5tb3ZlKHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIWRpcnR5UmVjdC5pbnRlcnNlY3RzKGVuY2xvc2luZ0ludFJlY3Qo
cmVsYXRpdmVSZWN0KSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpczxJbWFnZUJveD4o
Ym94KSkgeworICAgICAgICBhdXRvJiBpbWFnZUJveCA9IGRvd25jYXN0PEltYWdlQm94Pihib3gp
OworICAgICAgICAKKyAgICAgICAgYXV0byogaW1hZ2UgPSBpbWFnZUJveC5pbWFnZSgpOworICAg
ICAgICBhdXRvIGltYWdlUmVjdCA9IGltYWdlQm94LnJlcGxhY2VkQ29udGVudFJlY3QoKTsKKyAg
ICAgICAgaW1hZ2VSZWN0Lm1vdmUocGFpbnRPZmZzZXQpOworCisgICAgICAgIGlmIChpbWFnZSkK
KyAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICB9
CisKKyAgICBwYWludEJveERlY29yYXRpb25zKGJveCwgY29udGV4dCwgcGFpbnRPZmZzZXQpOwor
ICAgIHBhaW50Qm94Q29udGVudChib3gsIGNvbnRleHQsIHBhaW50T2Zmc2V0KTsKK30KKwordm9p
ZCBDU1NQYWludGVyOjpwYWludFN0YWNraW5nQ29udGV4dChjb25zdCBCb3gmIGNvbnRleHRSb290
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEZsb2F0U2l6ZSBwYWludE9mZnNldCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShkaXJ0eVJlY3QpOworCisg
ICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhjb250ZXh0Um9vdCwgY29udGV4dCwgcGFpbnRPZmZzZXQp
OworICAgIC8vIEZJWE1FOiBUYWJsZSBwYWludGluZyBpcyBzcGVjaWFsLgorCisgICAgaWYgKGlz
PENvbnRhaW5lckJveD4oY29udGV4dFJvb3QpKSB7CisgICAgICAgIGF1dG8mIGNvbnRhaW5lckJv
eCA9IGRvd25jYXN0PENvbnRhaW5lckJveD4oY29udGV4dFJvb3QpOworCisgICAgICAgIFZlY3Rv
cjxjb25zdCBCb3gqPiBuZWdhdGl2ZVpPcmRlckxpc3Q7CisgICAgICAgIFZlY3Rvcjxjb25zdCBC
b3gqPiBwb3NpdGl2ZVpPcmRlckxpc3Q7CisgICAgCisgICAgICAgIHJlY3Vyc2l2ZUNvbGxlY3RM
YXllcnMoY29udGFpbmVyQm94LCBuZWdhdGl2ZVpPcmRlckxpc3QsIHBvc2l0aXZlWk9yZGVyTGlz
dCk7CisKKyAgICAgICAgYXV0byBjb21wYXJlWkluZGV4ID0gW10gKGNvbnN0IEJveCogYSwgY29u
c3QgQm94KiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS0+c3R5bGUoKS56SW5kZXgoKS52YWx1
ZSgpIDwgYi0+c3R5bGUoKS56SW5kZXgoKS52YWx1ZSgpOworICAgICAgICB9OworCisgICAgICAg
IHN0ZDo6c3RhYmxlX3NvcnQocG9zaXRpdmVaT3JkZXJMaXN0LmJlZ2luKCksIHBvc2l0aXZlWk9y
ZGVyTGlzdC5lbmQoKSwgY29tcGFyZVpJbmRleCk7CisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQo
bmVnYXRpdmVaT3JkZXJMaXN0LmJlZ2luKCksIG5lZ2F0aXZlWk9yZGVyTGlzdC5lbmQoKSwgY29t
cGFyZVpJbmRleCk7CisKKyAgICAgICAgZm9yIChhdXRvKiBib3ggOiBuZWdhdGl2ZVpPcmRlckxp
c3QpCisgICAgICAgICAgICBwYWludFN0YWNraW5nQ29udGV4dCgqYm94LCBjb250ZXh0LCBwYWlu
dE9mZnNldCwgZGlydHlSZWN0KTsKKworICAgICAgICAvLyBGSVhNRTogV29yayBpbiBwcm9ncmVz
cy4gTmVlZHMgdG8gcGFpbnQgYWxsIG5vbi1wb3NpdGlvbmVkIGRlc2NlbmRhbnRzLgorICAgICAg
ICBwYWludEJveENvbnRlbnQoY29udGV4dFJvb3QsIGNvbnRleHQsIHBhaW50T2Zmc2V0KTsKKwor
ICAgICAgICBmb3IgKGF1dG8qIGJveCA6IHBvc2l0aXZlWk9yZGVyTGlzdCkgeworICAgICAgICAg
ICAgaWYgKGJveC0+c3R5bGUoKS5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAg
IHBhaW50U3RhY2tpbmdDb250ZXh0KCpib3gsIGNvbnRleHQsIHBhaW50T2Zmc2V0LCBkaXJ0eVJl
Y3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhaW50Qm94KCpib3gsIGNv
bnRleHQsIHBhaW50T2Zmc2V0LCBkaXJ0eVJlY3QpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIENTU1BhaW50ZXI6OnJlY3Vyc2l2ZUNvbGxlY3RMYXllcnMoY29uc3QgQ29udGFpbmVyQm94
JiBjb250YWluZXJCb3gsIFZlY3Rvcjxjb25zdCBCb3gqPiYgbmVnYXRpdmVaT3JkZXJMaXN0LCBW
ZWN0b3I8Y29uc3QgQm94Kj4mIHBvc2l0aXZlWk9yZGVyTGlzdCkKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8qIGNoaWxkID0gY29udGFpbmVyQm94LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLnBhcnRp
Y2lwYXRlc0luWk9yZGVyU29ydGluZygpKSB7CisgICAgICAgICAgICBhdXRvIHpJbmRleCA9IGNo
aWxkLT5zdHlsZSgpLnpJbmRleCgpLnZhbHVlT3IoMCk7CisKKyAgICAgICAgICAgIGlmICh6SW5k
ZXggPCAwKQorICAgICAgICAgICAgICAgIG5lZ2F0aXZlWk9yZGVyTGlzdC5hcHBlbmQoY2hpbGQp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvc2l0aXZlWk9yZGVyTGlzdC5h
cHBlbmQoY2hpbGQpOworCisgICAgICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCkuaXNTdGFja2lu
Z0NvbnRleHQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpczxDb250YWluZXJCb3g+KCpjaGlsZCkpCisgICAgICAgICAgICByZWN1cnNpdmVD
b2xsZWN0TGF5ZXJzKGRvd25jYXN0PENvbnRhaW5lckJveD4oKmNoaWxkKSwgbmVnYXRpdmVaT3Jk
ZXJMaXN0LCBwb3NpdGl2ZVpPcmRlckxpc3QpOworICAgIH0KK30KKwordm9pZCBDU1NQYWludGVy
OjpwYWludFRyZWUoY29uc3QgVHJlZSYgZGlzcGxheVRyZWUsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIHBhaW50U3RhY2tpbmdDb250
ZXh0KGRpc3BsYXlUcmVlLnJvb3RCb3goKSwgY29udGV4dCwgeyB9LCBkaXJ0eVJlY3QpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMzc5YzJlMzBh
MzFlNWNkYzUwMjY2MGU1OTc0YjFjNGY5OWI5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFpbnRlci5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKKworbmFtZXNwYWNl
IExheW91dCB7CitjbGFzcyBMYXlvdXRTdGF0ZTsKK30KKworbmFtZXNwYWNlIERpc3BsYXkgewor
CitjbGFzcyBCb3g7CitjbGFzcyBUcmVlOworCitjbGFzcyBDU1NQYWludGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdm9pZCBwYWludFN0YWNraW5nQ29udGV4dChjb25zdCBCb3gmLCBHcmFwaGlj
c0NvbnRleHQmLCBGbG9hdFNpemUgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCk7CisgICAgCisgICAgc3RhdGljIHZvaWQgcGFpbnRUcmVlKGNvbnN0IFRyZWUmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworCisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHZvaWQgcGFpbnRCb3goY29uc3QgQm94JiwgR3JhcGhpY3NDb250ZXh0JiwgRmxvYXRT
aXplIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHN0YXRpYyB2
b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoY29uc3QgQm94JiwgR3JhcGhpY3NDb250ZXh0JiwgRmxv
YXRTaXplIHBhaW50T2Zmc2V0KTsKKyAgICBzdGF0aWMgdm9pZCBwYWludEJveENvbnRlbnQoY29u
c3QgQm94JiwgR3JhcGhpY3NDb250ZXh0JiwgRmxvYXRTaXplIHBhaW50T2Zmc2V0KTsKKworICAg
IHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZUNvbGxlY3RMYXllcnMoY29uc3QgQ29udGFpbmVyQm94Jiwg
VmVjdG9yPGNvbnN0IEJveCo+JiBuZWdhdGl2ZVpPcmRlckxpc3QsIFZlY3Rvcjxjb25zdCBCb3gq
PiYgcG9zaXRpdmVaT3JkZXJMaXN0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUNvbnRhaW5lckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29u
dGFpbmVyQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTkxNTFmOTQ2ZjZjMTE5ZGMwZmQ3N2Q4YWYzODk4
ZjMyZjQ0Y2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheUNvbnRhaW5lckJveC5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5Q29udGFpbmVyQm94LmgiCisKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkRpc3BsYXlT
dHlsZS5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworQ29udGFpbmVyQm94OjpDb250YWluZXJC
b3goRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUpCisgICAgOiBCb3go
Ym9yZGVyQm94LCBXVEZNb3ZlKGRpc3BsYXlTdHlsZSksIHsgRmxhZ3M6OkNvbnRhaW5lckJveCB9
KQoreworfQorCit2b2lkIENvbnRhaW5lckJveDo6c2V0Rmlyc3RDaGlsZChzdGQ6OnVuaXF1ZV9w
dHI8Qm94PiYmIGJveCkKK3sKKyAgICBtX2ZpcnN0Q2hpbGQgPSBXVEZNb3ZlKGJveCk7Cit9CisK
K1N0cmluZyBDb250YWluZXJCb3g6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFRl
eHRTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCAiY29udGFpbmVyIGJveCAiIDw8IGJvcmRl
ckJveEZyYW1lKCkgPDwgIiAoIiA8PCB0aGlzIDw8ICIpIjsKKyAgICByZXR1cm4gc3RyZWFtLnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjAwZGI2N2Q1MzZlZDVmMGI4YzQzNjM5YTFmNDc2MTA2ZjljNmQzZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWluZXJCb3gu
aApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFzcyBDb250
YWluZXJCb3ggOiBwdWJsaWMgQm94IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRI
X0hFQVBfSURFTlRJRklFUihDb250YWluZXJCb3gpOworcHVibGljOgorICAgIENvbnRhaW5lckJv
eChGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmKTsKKyAgICAKKyAgICBjb25zdCBCb3gqIGZp
cnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldEZpcnN0Q2hpbGQoc3RkOjp1bmlxdWVfcHRyPEJveD4mJik7CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCb3g+IG1fZmlyc3RDaGlsZDsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
X0JPWChDb250YWluZXJCb3gsIGlzQ29udGFpbmVyQm94KCkpCisKKyNlbmRpZiAvLyBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5SW1hZ2VCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMTg4NjFjOGNmNWU0MDAwMDk1ZTk2
NmIzY2UxYzIwYmZmOGM4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUltYWdlQm94LmgiCisKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIERpc3BsYXkgeworCitJbWFnZUJveDo6SW1hZ2VCb3goRmxvYXRSZWN0IGJv
cmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUpCisgICAgOiBSZXBsYWNlZEJveChib3JkZXJC
b3gsIFdURk1vdmUoZGlzcGxheVN0eWxlKSwgeyBGbGFnczo6SW1hZ2VCb3ggfSkKK3sKK30KKwor
dm9pZCBJbWFnZUJveDo6c2V0SW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIG1faW1hZ2UgPSBp
bWFnZTsKK30KKworU3RyaW5nIEltYWdlQm94OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sK
KyAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgImltYWdlIGJveCAiIDw8IGJv
cmRlckJveEZyYW1lKCkgPDwgIiAoIiA8PCB0aGlzIDw8ICIpIHJlcGxhY2VkIGNvbnRlbnQgcmVj
dDogIiA8PCByZXBsYWNlZENvbnRlbnRSZWN0KCkgPDwgIiBpbWFnZTogIiA8PCBtX2ltYWdlLmdl
dCgpOworICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlJbWFnZUJveC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUltYWdlQm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmExYjk3YjM0ZDBmODg1MjU3NGZkZDFjYzdmMDZhZGNl
M2RmMjkwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlJbWFnZUJveC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAi
RGlzcGxheVJlcGxhY2VkQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2U7CisKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworY2xhc3MgU3R5bGU7CisKK2NsYXNzIEltYWdl
Qm94IDogcHVibGljIFJlcGxhY2VkQm94IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9X
SVRIX0hFQVBfSURFTlRJRklFUihJbmFnZUJveCk7CitwdWJsaWM6CisgICAgSW1hZ2VCb3goRmxv
YXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJik7CisgICAgCisgICAgSW1hZ2UqIGltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoSW1hZ2UqKTsK
KworcHJpdmF0ZToKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwor
CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlfQk9YKEltYWdlQm94LCBpc0ltYWdlQm94KCkpCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5UmVwbGFjZWRCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwMzA4NDJlNGU2ODg0NzU2NjY3NTFi
Yzg5YjRiYTM4ODQ2OTI4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheVJlcGxhY2VkQm94Lmgi
CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBE
aXNwbGF5IHsKKworUmVwbGFjZWRCb3g6OlJlcGxhY2VkQm94KEZsb2F0UmVjdCBib3JkZXJCb3gs
IFN0eWxlJiYgZGlzcGxheVN0eWxlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQorICAgIDogQm94
KGJvcmRlckJveCwgV1RGTW92ZShkaXNwbGF5U3R5bGUpLCBmbGFncykKK3sKK30KKwordm9pZCBS
ZXBsYWNlZEJveDo6c2V0UmVwbGFjZWRDb250ZW50UmVjdChGbG9hdFJlY3QgcmVjdCkKK3sKKyAg
ICBtX3JlcGxhY2VkQ29udGVudFJlY3QgPSByZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNw
bGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlSZXBsYWNlZEJveC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eVJlcGxhY2VkQm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjUyNGNkMDEyNTE3ZWYwZDgwMmE2ZjFmZmZkZTg3
YWVlMWU4MzI1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlSZXBsYWNlZEJveC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5j
bHVkZSAiRGlzcGxheUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlz
cGxheSB7CisKK2NsYXNzIFJlcGxhY2VkQm94IDogcHVibGljIEJveCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVwbGFjZWRCb3gpOworcHVibGlj
OgorICAgIFJlcGxhY2VkQm94KEZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIE9wdGlvblNl
dDxGbGFncz4pOworICAgIAorICAgIEZsb2F0UmVjdCByZXBsYWNlZENvbnRlbnRSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZXBsYWNlZENvbnRlbnRSZWN0OyB9CisgICAgdm9pZCBzZXRSZXBsYWNl
ZENvbnRlbnRSZWN0KEZsb2F0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fcmVw
bGFjZWRDb250ZW50UmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZX0JPWChSZXBs
YWNlZEJveCwgaXNSZXBsYWNlZEJveCgpKQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZDBhZjdmZjc0YjVkMjYwZmNhOTAwMzNmYzE1YjM2Y2ViNDRiZGE5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0
eWxlLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCb3JkZXJEYXRhLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK1N0eWxlOjpTdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUpCit7CisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZS52aXNpdGVk
RGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
OworCisgICAgY29uc3QgYXV0byYgYm9yZGVyRGF0YSA9IHN0eWxlLmJvcmRlcigpOworICAgIAor
ICAgIGF1dG8gYm9yZGVyVmFsdWVXaXRoUmVzb2x2ZWRDb2xvciA9IFsmc3R5bGVdKGNvbnN0IEJv
cmRlclZhbHVlJiB2YWx1ZSwgQ1NTUHJvcGVydHlJRCBjb2xvclByb3BlcnR5SUQpIHsKKyAgICAg
ICAgYXV0byByZXNvbHZlZFZhbHVlID0gdmFsdWU7CisgICAgICAgIHJlc29sdmVkVmFsdWUuc2V0
Q29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGNvbG9yUHJv
cGVydHlJRCkpOworICAgICAgICByZXR1cm4gcmVzb2x2ZWRWYWx1ZTsKKyAgICB9OworICAgIAor
ICAgIG1fYm9yZGVyLmxlZnQgPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRh
dGEubGVmdCgpLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcik7CisgICAgbV9ib3JkZXIucmln
aHQgPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRhdGEucmlnaHQoKSwgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodENvbG9yKTsKKyAgICBtX2JvcmRlci50b3AgPSBib3JkZXJWYWx1
ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRhdGEudG9wKCksIENTU1Byb3BlcnR5Qm9yZGVyVG9w
Q29sb3IpOworICAgIG1fYm9yZGVyLmJvdHRvbSA9IGJvcmRlclZhbHVlV2l0aFJlc29sdmVkQ29s
b3IoYm9yZGVyRGF0YS5ib3R0b20oKSwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcik7CisK
KyAgICBtX2JvcmRlci5pbWFnZSA9IGJvcmRlckRhdGEuaW1hZ2UoKTsKKworICAgIGlmICghc3R5
bGUuaGFzQXV0b1VzZWRaSW5kZXgoKSkKKyAgICAgICAgbV96SW5kZXggPSBzdHlsZS51c2VkWklu
ZGV4KCk7CisKKyAgICBzZXRJc1Bvc2l0aW9uZWQoc3R5bGUucG9zaXRpb24oKSAhPSBQb3NpdGlv
blR5cGU6OlN0YXRpYyk7CisgICAgc2V0SXNGbG9hdGluZyhzdHlsZS5mbG9hdGluZygpICE9IEZs
b2F0OjpObyk7Cit9CisKK2Jvb2wgU3R5bGU6Omhhc0JhY2tncm91bmQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSB8fCBoYXNCYWNrZ3JvdW5kSW1h
Z2UoKTsKK30KKworYm9vbCBTdHlsZTo6aGFzVmlzaWJsZUJvcmRlcigpIGNvbnN0Cit7CisgICAg
Ym9vbCBoYXZlSW1hZ2UgPSBtX2JvcmRlci5pbWFnZS5oYXNJbWFnZSgpOworICAgIHJldHVybiBt
X2JvcmRlci5sZWZ0LmlzVmlzaWJsZSghaGF2ZUltYWdlKSB8fCBtX2JvcmRlci5yaWdodC5pc1Zp
c2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIudG9wLmlzVmlzaWJsZSghaGF2ZUltYWdlKSB8
fCBtX2JvcmRlci5ib3R0b20uaXNWaXNpYmxlKCFoYXZlSW1hZ2UpOworfQorCit9IC8vIG5hbWVz
cGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheVN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2VlNjkxMGRiMzM3OTBlNjU2ZjQzZjFiN2FjYWYxZDZl
ZDIwZDdhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlTdHlsZS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQm9y
ZGVyVmFsdWUuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIk5pbmVQaWVjZUltYWdl
LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworbmFtZXNw
YWNlIERpc3BsYXkgeworCisvLyBTdHlsZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcGFpbnQgYSBE
aXNwbGF5OjpCb3guCisvLyBBbGwgY29sb3JzIHNob3VsZCBiZSByZXNvbHZlZCB0byB0aGVpciBw
YWludGVkIHZhbHVlcyBbdmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKCldLgor
Ly8gU2hvdWxkIGNvbnRhaW4gb25seSBhYnNvbHV0ZSBmbG9hdCB2YWx1ZXM7IG5vIExlbmd0aHMg
KHdoaWNoIGNhbiBjb250YWluIGNhbGMgdmFsdWVzKS4KKworY2xhc3MgU3R5bGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFN0eWxlKTsKK3B1Ymxp
YzoKKworICAgIGVudW0gY2xhc3MgRmxhZ3MgOiB1aW50OF90IHsKKyAgICAgICAgUG9zaXRpb25l
ZCAgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAgRmxvYXRpbmcgICAgICAgICAgICA9IDEgPDwg
MSwKKyAgICB9OworCisgICAgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICAKKyAgICBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5k
Q29sb3I7IH0KKyAgICBib29sIGhhc0JhY2tncm91bmQoKSBjb25zdDsKKyAgICBib29sIGhhc0Jh
Y2tncm91bmRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9IC8vIEZJWE1FCisKKyAgICBi
b29sIGhhc1Zpc2libGVCb3JkZXIoKSBjb25zdDsKKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9y
ZGVyTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyLmxlZnQ7IH0KKyAgICBjb25zdCBCb3Jk
ZXJWYWx1ZSYgYm9yZGVyUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlci5yaWdodDsgfQor
ICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJUb3AoKSBjb25zdCB7IHJldHVybiBtX2JvcmRl
ci50b3A7IH0KKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3JkZXIuYm90dG9tOyB9CisKKyAgICBPcHRpb25hbDxpbnQ+IHpJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1fekluZGV4OyB9CisgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fekluZGV4Lmhhc1ZhbHVlKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldElz
UG9zaXRpb25lZChib29sIHZhbHVlKSB7IG1fZmxhZ3Muc2V0KHsgRmxhZ3M6OlBvc2l0aW9uZWQg
fSwgdmFsdWUpOyB9CisgICAgYm9vbCBpc1Bvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVybiBtX2Zs
YWdzLmNvbnRhaW5zKEZsYWdzOjpQb3NpdGlvbmVkKTsgfQorCisgICAgdm9pZCBzZXRJc0Zsb2F0
aW5nKGJvb2wgdmFsdWUpIHsgbV9mbGFncy5zZXQoeyBGbGFnczo6RmxvYXRpbmcgfSwgdmFsdWUp
OyB9CisgICAgYm9vbCBpc0Zsb2F0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncy5jb250YWlu
cyhGbGFnczo6RmxvYXRpbmcpOyB9CisKKyAgICBib29sIHBhcnRpY2lwYXRlc0luWk9yZGVyU29y
dGluZygpIGNvbnN0IHsgcmV0dXJuIGlzUG9zaXRpb25lZCgpIHx8IGlzU3RhY2tpbmdDb250ZXh0
KCk7IH0KKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKworICAgIHN0
cnVjdCB7CisgICAgICAgIEJvcmRlclZhbHVlIGxlZnQ7CisgICAgICAgIEJvcmRlclZhbHVlIHJp
Z2h0OworICAgICAgICBCb3JkZXJWYWx1ZSB0b3A7CisgICAgICAgIEJvcmRlclZhbHVlIGJvdHRv
bTsKKworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKKyAgICB9IG1fYm9yZGVyOworCisg
ICAgT3B0aW9uYWw8aW50PiBtX3pJbmRleDsKKyAgICBPcHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNzMxN2Y2ZmQ1MDE4OWZlYzI2N2QyYjI3YWU5MTQyNzJkYmMwYTA3
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJEaXNwbGF5Qm94LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKLQotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLW5hbWVzcGFjZSBEaXNwbGF5IHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KEJveCk7Ci0KLUJveDo6Qm94KGNvbnN0IEJveCYgb3RoZXIpCi0gICAgOiBtX3RvcExlZnQob3Ro
ZXIubV90b3BMZWZ0KQotICAgICwgbV9jb250ZW50V2lkdGgob3RoZXIubV9jb250ZW50V2lkdGgp
Ci0gICAgLCBtX2NvbnRlbnRIZWlnaHQob3RoZXIubV9jb250ZW50SGVpZ2h0KQotICAgICwgbV9o
b3Jpem9udGFsTWFyZ2luKG90aGVyLm1faG9yaXpvbnRhbE1hcmdpbikKLSAgICAsIG1fdmVydGlj
YWxNYXJnaW4ob3RoZXIubV92ZXJ0aWNhbE1hcmdpbikKLSAgICAsIG1faGFzQ2xlYXJhbmNlKG90
aGVyLm1faGFzQ2xlYXJhbmNlKQotICAgICwgbV9ib3JkZXIob3RoZXIubV9ib3JkZXIpCi0gICAg
LCBtX3BhZGRpbmcob3RoZXIubV9wYWRkaW5nKQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBt
X2hhc1ZhbGlkVG9wKG90aGVyLm1faGFzVmFsaWRUb3ApCi0gICAgLCBtX2hhc1ZhbGlkTGVmdChv
dGhlci5tX2hhc1ZhbGlkTGVmdCkKLSAgICAsIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKG90
aGVyLm1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKQotICAgICwgbV9oYXNWYWxpZFZlcnRpY2Fs
TWFyZ2luKG90aGVyLm1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikKLSAgICAsIG1faGFzVmFsaWRC
b3JkZXIob3RoZXIubV9oYXNWYWxpZEJvcmRlcikKLSAgICAsIG1faGFzVmFsaWRQYWRkaW5nKG90
aGVyLm1faGFzVmFsaWRQYWRkaW5nKQotICAgICwgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQob3Ro
ZXIubV9oYXNWYWxpZENvbnRlbnRIZWlnaHQpCi0gICAgLCBtX2hhc1ZhbGlkQ29udGVudFdpZHRo
KG90aGVyLm1faGFzVmFsaWRDb250ZW50V2lkdGgpCi0gICAgLCBtX2hhc1ByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlKG90aGVyLm1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUpCi0jZW5kaWYKLXsK
LX0KLQotQm94Ojp+Qm94KCkKLXsKLX0KLQotUmVjdCBCb3g6Om1hcmdpbkJveCgpIGNvbnN0Ci17
Ci0gICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsKLQotICAgIFJlY3QgbWFy
Z2luQm94OwotICAgIG1hcmdpbkJveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpIC0gbWFyZ2luQmVm
b3JlKCkpOwotICAgIG1hcmdpbkJveC5zZXRMZWZ0KGJvcmRlckJveC5sZWZ0KCkgLSBtYXJnaW5T
dGFydCgpKTsKLSAgICBtYXJnaW5Cb3guc2V0SGVpZ2h0KGJvcmRlckJveC5oZWlnaHQoKSArIG1h
cmdpbkJlZm9yZSgpICsgbWFyZ2luQWZ0ZXIoKSk7Ci0gICAgbWFyZ2luQm94LnNldFdpZHRoKGJv
cmRlckJveC53aWR0aCgpICsgbWFyZ2luU3RhcnQoKSArIG1hcmdpbkVuZCgpKTsKLSAgICByZXR1
cm4gbWFyZ2luQm94OwotfQotCi1SZWN0IEJveDo6Ym9yZGVyQm94KCkgY29uc3QKLXsKLSAgICBS
ZWN0IGJvcmRlckJveDsKLSAgICBib3JkZXJCb3guc2V0VG9wTGVmdCh7IH0pOwotICAgIGJvcmRl
ckJveC5zZXRTaXplKHsgd2lkdGgoKSwgaGVpZ2h0KCkgfSk7Ci0gICAgcmV0dXJuIGJvcmRlckJv
eDsKLX0KLQotUmVjdCBCb3g6OnBhZGRpbmdCb3goKSBjb25zdAotewotICAgIGF1dG8gYm9yZGVy
Qm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7Ci0KLSAgICBSZWN0IHBhZGRpbmdCb3g7Ci0gICAgcGFk
ZGluZ0JveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpICsgYm9yZGVyVG9wKCkpOwotICAgIHBhZGRp
bmdCb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpICsgYm9yZGVyTGVmdCgpKTsKLSAgICBwYWRk
aW5nQm94LnNldEhlaWdodChib3JkZXJCb3guYm90dG9tKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpKTsKLSAgICBwYWRkaW5nQm94LnNldFdpZHRoKGJvcmRlckJveC53aWR0aCgpIC0g
Ym9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSk7Ci0gICAgcmV0dXJuIHBhZGRpbmdCb3g7Ci19
Ci0KLVJlY3QgQm94Ojpjb250ZW50Qm94KCkgY29uc3QKLXsKLSAgICBSZWN0IGNvbnRlbnRCb3g7
Ci0gICAgY29udGVudEJveC5zZXRUb3AoY29udGVudEJveFRvcCgpKTsKLSAgICBjb250ZW50Qm94
LnNldExlZnQoY29udGVudEJveExlZnQoKSk7Ci0gICAgY29udGVudEJveC5zZXRXaWR0aChjb250
ZW50Qm94V2lkdGgoKSk7Ci0gICAgY29udGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveEhlaWdo
dCgpKTsKLSAgICByZXR1cm4gY29udGVudEJveDsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjMWY5NDZhZWFjNDdmYzI1NWRiN2YwZjRiYWRlY2Y5YTYzNzI2
NzZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0MTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJEaXNwbGF5UmVjdC5oIgot
I2luY2x1ZGUgIkxheW91dFVuaXRzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgRGlzcGxheSB7Ci0KLWNsYXNzIEJveCB7Ci0g
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChCb3gpOwotcHVibGljOgotICAgIEJveChjb25zdCBC
b3gmKTsKLSAgICBCb3goKSA9IGRlZmF1bHQ7Ci0gICAgfkJveCgpOwotCi0gICAgTGF5b3V0VW5p
dCB0b3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRV
bml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KLSAgICBMYXlv
dXRVbml0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQotCi0gICAg
TGF5b3V0UG9pbnQgdG9wTGVmdCgpIGNvbnN0OwotICAgIExheW91dFBvaW50IGJvdHRvbVJpZ2h0
KCkgY29uc3QgeyByZXR1cm4geyByaWdodCgpLCBib3R0b20oKSB9OyB9Ci0KLSAgICBMYXlvdXRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiB7IHdpZHRoKCksIGhlaWdodCgpIH07IH0KLSAgICBM
YXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0Jv
eFdpZHRoKCkgKyBib3JkZXJSaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJvdHRv
bSgpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLmlzRW1wdHko
KTsgfQotICAgIFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIHsgdG9wKCksIGxlZnQoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkgfTsgfQotICAgIFJlY3QgcmVjdFdpdGhNYXJnaW4oKSBjb25zdCB7IHJl
dHVybiB7IHRvcCgpIC0gbWFyZ2luQmVmb3JlKCksIGxlZnQoKSAtIG1hcmdpblN0YXJ0KCksIG1h
cmdpblN0YXJ0KCkgKyB3aWR0aCgpICsgbWFyZ2luRW5kKCksIG1hcmdpbkJlZm9yZSgpICsgaGVp
Z2h0KCkgKyBtYXJnaW5BZnRlcigpIH07IH0KLQotICAgIHN0cnVjdCBWZXJ0aWNhbE1hcmdpbiB7
Ci0gICAgICAgIExheW91dFVuaXQgYmVmb3JlOwotICAgICAgICBMYXlvdXRVbml0IGFmdGVyOwot
ICAgIH07Ci0gICAgVmVydGljYWxNYXJnaW4gdmVydGljYWxNYXJnaW4oKSBjb25zdDsKLQotICAg
IHN0cnVjdCBIb3Jpem9udGFsTWFyZ2luIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydDsKLSAg
ICAgICAgTGF5b3V0VW5pdCBlbmQ7Ci0gICAgfTsKLSAgICBIb3Jpem9udGFsTWFyZ2luIGhvcml6
b250YWxNYXJnaW4oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkJlZm9yZSgpIGNvbnN0
OwotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG1h
cmdpbkFmdGVyKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoKSBjb25zdDsKLSAg
ICBib29sIGhhc0NsZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2xlYXJhbmNlOyB9Ci0K
LSAgICBMYXlvdXRVbml0IGJvcmRlclRvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVy
TGVmdCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgYm9yZGVyQm90dG9tKCkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBib3JkZXJSaWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgdmVydGljYWxC
b3JkZXIoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBob3Jpem9udGFsQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVm
dCgpICsgYm9yZGVyUmlnaHQoKTsgfQotCi0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGlu
Z1RvcCgpIGNvbnN0OwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdMZWZ0KCkgY29u
c3Q7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0JvdHRvbSgpIGNvbnN0OwotICAg
IE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdSaWdodCgpIGNvbnN0OwotICAgIE9wdGlvbmFs
PExheW91dFVuaXQ+IHZlcnRpY2FsUGFkZGluZygpIGNvbnN0OwotICAgIE9wdGlvbmFsPExheW91
dFVuaXQ+IGhvcml6b250YWxQYWRkaW5nKCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IGNvbnRl
bnRCb3hUb3AoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBwYWRkaW5nVG9wKCku
dmFsdWVPcigwKTsgfQotICAgIExheW91dFVuaXQgY29udGVudEJveExlZnQoKSBjb25zdCB7IHJl
dHVybiBwYWRkaW5nQm94TGVmdCgpICsgcGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOyB9Ci0gICAg
TGF5b3V0VW5pdCBjb250ZW50Qm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29udGVudEJveFRv
cCgpICsgY29udGVudEJveEhlaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94Umln
aHQoKSBjb25zdCB7IHJldHVybiBjb250ZW50Qm94TGVmdCgpICsgY29udGVudEJveFdpZHRoKCk7
IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hIZWlnaHQoKSBjb25zdDsKLSAgICBMYXlvdXRV
bml0IGNvbnRlbnRCb3hXaWR0aCgpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94
VG9wKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IHBhZGRp
bmdCb3hMZWZ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpOyB9Ci0gICAgTGF5b3V0VW5p
dCBwYWRkaW5nQm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0JveFRvcCgpICsgcGFk
ZGluZ0JveEhlaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94UmlnaHQoKSBjb25z
dCB7IHJldHVybiBwYWRkaW5nQm94TGVmdCgpICsgcGFkZGluZ0JveFdpZHRoKCk7IH0KLSAgICBM
YXlvdXRVbml0IHBhZGRpbmdCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nVG9wKCku
dmFsdWVPcigwKSArIGNvbnRlbnRCb3hIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKS52YWx1ZU9y
KDApOyB9Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBw
YWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkgKyBjb250ZW50Qm94V2lkdGgoKSArIHBhZGRpbmdSaWdo
dCgpLnZhbHVlT3IoMCk7IH0KLQotICAgIExheW91dFVuaXQgYm9yZGVyQm94SGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gYm9yZGVyVG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCkgKyBib3JkZXJCb3R0
b20oKTsgfQotICAgIExheW91dFVuaXQgYm9yZGVyQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KLSAgICBM
YXlvdXRVbml0IG1hcmdpbkJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgp
ICsgYm9yZGVyQm94SGVpZ2h0KCkgKyBtYXJnaW5BZnRlcigpOyB9Ci0gICAgTGF5b3V0VW5pdCBt
YXJnaW5Cb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBib3JkZXJCb3hX
aWR0aCgpICsgbWFyZ2luRW5kKCk7IH0KLQotICAgIExheW91dFVuaXQgdmVydGljYWxNYXJnaW5C
b3JkZXJBbmRQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCkgKyB2ZXJ0aWNh
bEJvcmRlcigpICsgdmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSArIG1hcmdpbkFmdGVyKCk7
IH0KLSAgICBMYXlvdXRVbml0IGhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgY29u
c3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGhvcml6b250YWxCb3JkZXIoKSArIGhvcml6b250
YWxQYWRkaW5nKCkudmFsdWVPcigwKSArIG1hcmdpbkVuZCgpOyB9Ci0KLSAgICBSZWN0IG1hcmdp
bkJveCgpIGNvbnN0OwotICAgIFJlY3QgYm9yZGVyQm94KCkgY29uc3Q7Ci0gICAgUmVjdCBwYWRk
aW5nQm94KCkgY29uc3Q7Ci0gICAgUmVjdCBjb250ZW50Qm94KCkgY29uc3Q7Ci0KLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIHZvaWQgc2V0SGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKSB7IG1f
aGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgPSB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIHZvaWQg
c2V0VG9wTGVmdChjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZvaWQgc2V0VG9wKExheW91dFVu
aXQpOwotICAgIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKLSAgICB2b2lkIG1vdmVIb3Jpem9u
dGFsbHkoTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmUob2Zmc2V0LCAwX2x1KTsg
fQotICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV90b3BMZWZ0
Lm1vdmUoMF9sdSwgb2Zmc2V0KTsgfQotICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBz
aXplKSB7IG1fdG9wTGVmdC5tb3ZlKHNpemUpOyB9Ci0gICAgdm9pZCBtb3ZlQnkoTGF5b3V0UG9p
bnQgb2Zmc2V0KSB7IG1fdG9wTGVmdC5tb3ZlQnkob2Zmc2V0KTsgfQotCi0gICAgdm9pZCBzZXRD
b250ZW50Qm94SGVpZ2h0KExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0Q29udGVudEJveFdpZHRo
KExheW91dFVuaXQpOwotCi0gICAgdm9pZCBzZXRIb3Jpem9udGFsTWFyZ2luKEhvcml6b250YWxN
YXJnaW4pOwotICAgIHZvaWQgc2V0VmVydGljYWxNYXJnaW4oVmVydGljYWxNYXJnaW4pOwotICAg
IHZvaWQgc2V0SGFzQ2xlYXJhbmNlKCkgeyBtX2hhc0NsZWFyYW5jZSA9IHRydWU7IH0KLQotICAg
IHZvaWQgc2V0Qm9yZGVyKExheW91dDo6RWRnZXMpOwotCi0gICAgdm9pZCBzZXRWZXJ0aWNhbFBh
ZGRpbmcoTGF5b3V0OjpWZXJ0aWNhbEVkZ2VzKTsKLSAgICB2b2lkIHNldFBhZGRpbmcoT3B0aW9u
YWw8TGF5b3V0OjpFZGdlcz4pOwotCi1wcml2YXRlOgotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
dm9pZCBpbnZhbGlkYXRlTWFyZ2luKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQm9yZGVyKCkgeyBt
X2hhc1ZhbGlkQm9yZGVyID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFsaWRhdGVQYWRkaW5nKCkg
eyBtX2hhc1ZhbGlkUGFkZGluZyA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlUHJlY29t
cHV0ZWRNYXJnaW5CZWZvcmUoKSB7IG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgPSBmYWxz
ZTsgfQotCi0gICAgdm9pZCBzZXRIYXNWYWxpZFRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IHRydWU7
IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkTGVmdCgpIHsgbV9oYXNWYWxpZExlZnQgPSB0cnVlOyB9
Ci0gICAgdm9pZCBzZXRIYXNWYWxpZFZlcnRpY2FsTWFyZ2luKCkgeyBtX2hhc1ZhbGlkVmVydGlj
YWxNYXJnaW4gPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4o
KSB7IG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luID0gdHJ1ZTsgfQotCi0gICAgdm9pZCBzZXRI
YXNWYWxpZEJvcmRlcigpIHsgbV9oYXNWYWxpZEJvcmRlciA9IHRydWU7IH0KLSAgICB2b2lkIHNl
dEhhc1ZhbGlkUGFkZGluZygpIHsgbV9oYXNWYWxpZFBhZGRpbmcgPSB0cnVlOyB9Ci0KLSAgICB2
b2lkIHNldEhhc1ZhbGlkQ29udGVudEhlaWdodCgpIHsgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQg
PSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRIYXNWYWxpZENvbnRlbnRXaWR0aCgpIHsgbV9oYXNWYWxp
ZENvbnRlbnRXaWR0aCA9IHRydWU7IH0KLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotCi0gICAg
TGF5b3V0UG9pbnQgbV90b3BMZWZ0OwotICAgIExheW91dFVuaXQgbV9jb250ZW50V2lkdGg7Ci0g
ICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRIZWlnaHQ7Ci0KLSAgICBIb3Jpem9udGFsTWFyZ2luIG1f
aG9yaXpvbnRhbE1hcmdpbjsKLSAgICBWZXJ0aWNhbE1hcmdpbiBtX3ZlcnRpY2FsTWFyZ2luOwot
ICAgIGJvb2wgbV9oYXNDbGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgTGF5b3V0OjpFZGdlcyBt
X2JvcmRlcjsKLSAgICBPcHRpb25hbDxMYXlvdXQ6OkVkZ2VzPiBtX3BhZGRpbmc7Ci0KLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9oYXNWYWxpZFRvcCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1ZhbGlkTGVmdCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkSG9yaXpvbnRh
bE1hcmdpbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4geyBm
YWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZEJvcmRlciB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2hhc1ZhbGlkUGFkZGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkQ29udGVudEhl
aWdodCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkQ29udGVudFdpZHRoIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgeyBmYWxzZSB9OwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19OwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLWlubGluZSB2
b2lkIEJveDo6aW52YWxpZGF0ZU1hcmdpbigpCi17Ci0gICAgbV9oYXNWYWxpZEhvcml6b250YWxN
YXJnaW4gPSBmYWxzZTsKLSAgICBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4gPSBmYWxzZTsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OnRvcCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1faGFzVmFsaWRUb3AgJiYgKG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgfHwgbV9o
YXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7Ci0gICAgcmV0dXJuIG1fdG9wTGVmdC55KCk7Ci19Ci0K
LWlubGluZSBMYXlvdXRVbml0IEJveDo6bGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFz
VmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV90
b3BMZWZ0LngoKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IEJveDo6dG9wTGVmdCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgKG1faGFzUHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUgfHwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7Ci0gICAgQVNTRVJUKG1faGFzVmFs
aWRMZWZ0ICYmIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV90b3BM
ZWZ0OwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OnNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQm
IHRvcExlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxpZFRvcCgpOwot
ICAgIHNldEhhc1ZhbGlkTGVmdCgpOwotI2VuZGlmCi0gICAgbV90b3BMZWZ0ID0gdG9wTGVmdDsK
LX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCi17Ci0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxpZFRvcCgpOwotI2VuZGlmCi0gICAgbV90b3BMZWZ0
LnNldFkodG9wKTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRMZWZ0KExheW91dFVuaXQgbGVm
dCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkTGVmdCgpOwotI2VuZGlm
Ci0gICAgbV90b3BMZWZ0LnNldFgobGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0Q29u
dGVudEJveEhlaWdodChMYXlvdXRVbml0IGhlaWdodCkKLXsgCi0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICBzZXRIYXNWYWxpZENvbnRlbnRIZWlnaHQoKTsKLSNlbmRpZgotICAgIG1fY29udGVudEhl
aWdodCA9IGhlaWdodDsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRDb250ZW50Qm94V2lkdGgo
TGF5b3V0VW5pdCB3aWR0aCkKLXsgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxp
ZENvbnRlbnRXaWR0aCgpOwotI2VuZGlmCi0gICAgbV9jb250ZW50V2lkdGggPSB3aWR0aDsKLX0K
LQotaW5saW5lIExheW91dFVuaXQgQm94Ojpjb250ZW50Qm94SGVpZ2h0KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobV9oYXNWYWxpZENvbnRlbnRIZWlnaHQpOwotICAgIHJldHVybiBtX2NvbnRlbnRI
ZWlnaHQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Y29udGVudEJveFdpZHRoKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZENvbnRlbnRXaWR0aCk7Ci0gICAgcmV0dXJuIG1f
Y29udGVudFdpZHRoOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OnNldEhvcml6b250YWxNYXJnaW4o
SG9yaXpvbnRhbE1hcmdpbiBtYXJnaW4pCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRI
YXNWYWxpZEhvcml6b250YWxNYXJnaW4oKTsKLSNlbmRpZgotICAgIG1faG9yaXpvbnRhbE1hcmdp
biA9IG1hcmdpbjsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRWZXJ0aWNhbE1hcmdpbihWZXJ0
aWNhbE1hcmdpbiBtYXJnaW4pCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxp
ZFZlcnRpY2FsTWFyZ2luKCk7Ci0gICAgaW52YWxpZGF0ZVByZWNvbXB1dGVkTWFyZ2luQmVmb3Jl
KCk7Ci0jZW5kaWYKLSAgICBtX3ZlcnRpY2FsTWFyZ2luID0gbWFyZ2luOwotfQotCi1pbmxpbmUg
dm9pZCBCb3g6OnNldEJvcmRlcihMYXlvdXQ6OkVkZ2VzIGJvcmRlcikKLXsKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIHNldEhhc1ZhbGlkQm9yZGVyKCk7Ci0jZW5kaWYKLSAgICBtX2JvcmRlciA9
IGJvcmRlcjsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRQYWRkaW5nKE9wdGlvbmFsPExheW91
dDo6RWRnZXM+IHBhZGRpbmcpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxp
ZFBhZGRpbmcoKTsKLSNlbmRpZgotICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7Ci19Ci0KLWlubGlu
ZSB2b2lkIEJveDo6c2V0VmVydGljYWxQYWRkaW5nKExheW91dDo6VmVydGljYWxFZGdlcyB2ZXJ0
aWNhbFBhZGRpbmcpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxpZFBhZGRp
bmcoKTsKLSNlbmRpZgotICAgIG1fcGFkZGluZyA9IExheW91dDo6RWRnZXMgeyBtX3BhZGRpbmcg
PyBtX3BhZGRpbmctPmhvcml6b250YWwgOiBMYXlvdXQ6Okhvcml6b250YWxFZGdlcygpLCB2ZXJ0
aWNhbFBhZGRpbmcgfTsKLX0KLQotaW5saW5lIEJveDo6VmVydGljYWxNYXJnaW4gQm94Ojp2ZXJ0
aWNhbE1hcmdpbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdp
bik7Ci0gICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW47Ci19Ci0KLWlubGluZSBCb3g6Okhvcml6
b250YWxNYXJnaW4gQm94Ojpob3Jpem9udGFsTWFyZ2luKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX2hvcml6b250YWxNYXJn
aW47Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6bWFyZ2luQmVmb3JlKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKLSAgICByZXR1cm4gbV92ZXJ0
aWNhbE1hcmdpbi5iZWZvcmU7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6bWFyZ2luU3Rh
cnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0g
ICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbi5zdGFydDsKLX0KLQotaW5saW5lIExheW91dFVu
aXQgQm94OjptYXJnaW5BZnRlcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRWZXJ0
aWNhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW4uYWZ0ZXI7Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IEJveDo6bWFyZ2luRW5kKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9o
YXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX2hvcml6b250YWxNYXJnaW4u
ZW5kOwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94OjpwYWRkaW5nVG9wKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwotICAgIGlmICghbV9wYWRk
aW5nKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3BhZGRpbmctPnZlcnRpY2Fs
LnRvcDsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6cGFkZGluZ0xlZnQo
KSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7Ci0gICAgaWYgKCFtX3Bh
ZGRpbmcpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcGFkZGluZy0+aG9yaXpv
bnRhbC5sZWZ0OwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94OjpwYWRkaW5n
Qm90dG9tKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwotICAgIGlm
ICghbV9wYWRkaW5nKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3BhZGRpbmct
PnZlcnRpY2FsLmJvdHRvbTsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6
cGFkZGluZ1JpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwot
ICAgIGlmICghbV9wYWRkaW5nKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3Bh
ZGRpbmctPmhvcml6b250YWwucmlnaHQ7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0
PiBCb3g6OnZlcnRpY2FsUGFkZGluZygpIGNvbnN0Ci17Ci0gICAgYXV0byBwYWRkaW5nVG9wID0g
dGhpcy0+cGFkZGluZ1RvcCgpOwotICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IHRoaXMtPnBhZGRp
bmdCb3R0b20oKTsKLSAgICBpZiAoIXBhZGRpbmdUb3AgJiYgIXBhZGRpbmdCb3R0b20pCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHBhZGRpbmdUb3AudmFsdWVPcigwKSArIHBhZGRp
bmdCb3R0b20udmFsdWVPcigwKTsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJv
eDo6aG9yaXpvbnRhbFBhZGRpbmcoKSBjb25zdAotewotICAgIGF1dG8gcGFkZGluZ0xlZnQgPSB0
aGlzLT5wYWRkaW5nTGVmdCgpOwotICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gdGhpcy0+cGFkZGlu
Z1JpZ2h0KCk7Ci0gICAgaWYgKCFwYWRkaW5nTGVmdCAmJiAhcGFkZGluZ1JpZ2h0KQotICAgICAg
ICByZXR1cm4geyB9OwotICAgIHJldHVybiBwYWRkaW5nTGVmdC52YWx1ZU9yKDApICsgcGFkZGlu
Z1JpZ2h0LnZhbHVlT3IoMCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Ym9yZGVyVG9w
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAgcmV0dXJuIG1f
Ym9yZGVyLnZlcnRpY2FsLnRvcDsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94Ojpib3JkZXJM
ZWZ0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAgcmV0dXJu
IG1fYm9yZGVyLmhvcml6b250YWwubGVmdDsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94Ojpi
b3JkZXJCb3R0b20oKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKLSAg
ICByZXR1cm4gbV9ib3JkZXIudmVydGljYWwuYm90dG9tOwotfQotCi1pbmxpbmUgTGF5b3V0VW5p
dCBCb3g6OmJvcmRlclJpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRl
cik7Ci0gICAgcmV0dXJuIG1fYm9yZGVyLmhvcml6b250YWwucmlnaHQ7Ci19Ci0KLX0KLX0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0
SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEl0ZXJh
dG9yLmgKaW5kZXggOGQ4NTkzNWM0YzkwMTIzY2YyZWE2MDZkNmE4NWNmMjk1OWUxY2FjMy4uNjFj
MGQ2MWQ2ZjE4M2U2ZDI2Y2NlNjFhNjRkZTBjZjNhNmIyMzgyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5oCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUg
IkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIExheW91dCB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409501</attachid>
            <date>2020-09-23 13:52:13 -0700</date>
            <delta_ts>2020-09-23 14:19:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216752-20200923135212.patch</filename>
            <type>text/plain</type>
            <size>101807</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTNkNjE1MGU2MDkxNDg3
ZDVjNTY2MzQzMGRhNThkM2Q4NzA2ZGU1Ni4uYTU3Y2NmMWU0ZDUzMjhjOGVmODdmMDVhZjkxODdi
Y2JkOGE1OGRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAyMC0wOS0yMCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDIERpc3Bs
YXldIEFkZCB0aGUgYmVnaW5uaW5ncyBvZiBhIENTUyBkaXNwbGF5IGJveCBoaWVyYXJjaHkgYW5k
IENTUyBwYWludGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTY3NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgc29tZSBEaXNwbGF5OjpCb3ggc3ViY2xhc3NlcyB0byBkaXNwbGF5L2NzcywgYSBE
aXNwbGF5OjpUcmVlIGNsYXNzIHRvIG93biB0aGUKKyAgICAgICAgZGlzcGxheSB0cmVlLCBhbmQg
YSBEaXNwbGF5VHJlZUJ1aWxkZXIuIEFsc28gYWRkIGNzcy9EaXNwbGF5Q1NTUGFpbnRlciB3aGlj
aCBpcworICAgICAgICB0aGUgYmVnaW5uaW5ncyBvZiBhIGNsYXNzIHRoYXQga25vd3MgaG93IHRv
IHBhaW50IGEgQ1NTIHN0YWNraW5nIGNvbnRleHQuCisKKyAgICAgICAgVGhpcyBjb2RlIG90aGVy
IHRoYW4gRGlzcGxheUNTU1BhaW50ZXIgaXMgZGVsaWJlcmF0ZWx5IHZhZ3VlIGFib3V0IGhvdyBt
dWNoIGlzCisgICAgICAgIENTUyBzcGVjaWZpYy4gSXQncyBsaWtlbHkgdGhhdCBzb21lIGJveCBj
bGFzc2VzIHdpbGwgYmUgc2hhcmVkIHdpdGggU1ZHIHBhaW50aW5nLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZGlzcGxheS9EaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkxheWVyQ29udHJvbGxlcjo6Um9vdExheWVyQ2xpZW50OjpwYWludENvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkxheWVyQ29udHJvbGxlcjo6Um9vdExh
eWVyQ2xpZW50OjpkZXZpY2VTY2FsZUZhY3RvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpMYXllckNvbnRyb2xsZXI6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkxheWVyQ29udHJvbGxlcjo6ZW5zdXJlUm9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkxheWVyQ29udHJvbGxlcjo6dXBkYXRlUm9vdExheWVyR2Vv
bWV0cnkpOgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheUxheWVyQ29udHJvbGxlci5oOgorICAg
ICAgICAqIGRpc3BsYXkvRGlzcGxheVRyZWUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L0Rpc3BsYXlWaWV3LmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVl
OjpUcmVlKToKKyAgICAgICAgKiBkaXNwbGF5L0Rpc3BsYXlUcmVlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlRyZWU6OnJvb3RCb3ggY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVRy
ZWVCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVp
bGRlcjo6VHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6VHJlZUJ1aWxk
ZXI6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlRyZWVCdWlsZGVy
OjpyZWN1cnNpdmVCdWlsZERpc3BsYXlUcmVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlRyZWVCdWlsZGVyOjpkaXNwbGF5Qm94Rm9yUm9vdEJveCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpUcmVlQnVpbGRlcjo6ZGlzcGxheUJveEZvckxheW91dEJveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpvdXRwdXREaXNwbGF5Qm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6Om91dHB1dERpc3BsYXlUcmVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OnNob3dEaXNwbGF5VHJlZSk6CisgICAgICAgICogZGlzcGxheS9EaXNw
bGF5VHJlZUJ1aWxkZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNw
bGF5Vmlldy5oLgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Vmlldzo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Vmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IgY29uc3QpOgorICAgICAgICAq
IGRpc3BsYXkvRGlzcGxheVZpZXcuaDoKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5Vmlldy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94OjpzZXROZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rp
c3BsYXlCb3guaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5Vmll
dy5oLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpzdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OmJvcmRlckJveEZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkJveDo6aXNDb250YWluZXJCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm94Ojppc0ltYWdlQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJv
eDo6aXNSZXBsYWNlZEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
Om5leHRTaWJsaW5nIGNvbnN0KToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Q1NTUGFp
bnRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q1NTUGFpbnRlcjo6
cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWlu
dGVyOjpwYWludEJveENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q1NTUGFp
bnRlcjo6cGFpbnRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q1NTUGFpbnRlcjo6
cmVjdXJzaXZlUGFpbnREZXNjZW5kYW50cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpD
U1NQYWludGVyOjpwYWludFN0YWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpDU1NQYWludGVyOjppc1N0YWNraW5nQ29udGV4dFBhaW50aW5nQm91bmRhcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q1NTUGFpbnRlcjo6cmVjdXJzaXZlQ29sbGVjdExheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDU1NQYWludGVyOjpwYWludFRyZWUpOgor
ICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuaC4KKyAgICAgICAgKiBkaXNwbGF5L2Nz
cy9EaXNwbGF5Q29udGFpbmVyQm94LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlz
cGxheS9EaXNwbGF5Vmlldy5oLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVy
Qm94OjpDb250YWluZXJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Q29udGFpbmVy
Qm94OjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkNvbnRhaW5l
ckJveDo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlz
cGxheUNvbnRhaW5lckJveC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rp
c3BsYXlWaWV3LmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDb250YWluZXJCb3g6OmZp
cnN0Q2hpbGQgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkltYWdlQm94OjpJbWFnZUJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6c2V0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6SW1hZ2VCb3g6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIGRp
c3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L0Rpc3BsYXlWaWV3LmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJv
eDo6aW1hZ2UgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJv
eC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuaC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlcGxhY2VkQm94OjpSZXBsYWNlZEJveCk6Cisg
ICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJlcGxhY2VkQm94OjpyZXBsYWNlZENvbnRlbnRSZWN0IGNvbnN0KToKKyAgICAgICAg
KiBkaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L0Rpc3BsYXlWaWV3LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0
eWxlOjpTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aGFzQmFja2dy
b3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aGFzVmlzaWJs
ZUJvcmRlciBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmJhY2tncm91bmRDb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aGFzQmFja2dyb3VuZElt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpib3JkZXJMZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpib3JkZXJSaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6Ym9yZGVyVG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpib3JkZXJCb3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OnpJbmRleCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aXNTdGFja2luZ0NvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OmlzUG9zaXRpb25lZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6aXNGbG9hdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6cGFydGljaXBhdGVzSW5aT3JkZXJTb3J0aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0eWxlOjpzZXRJc1Bvc2l0aW9u
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3R5bGU6OnNldElzRmxvYXRpbmcpOgor
ICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEl0ZXJhdG9yLmg6IFVuaWZpZWQgc291cmNlcyBi
dWlsZCBmaXguCisKKzIwMjAtMDktMjAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0xGQyBEaXNwbGF5XSBNb3ZlIExGQyBEaXNwbGF5IGluZnJhc3Ry
dWN0dXJlIGZpbGVzIGludG8gYSBuZXcgJ2Rpc3BsYXknIGRpcmVjdG9yeQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NzQ3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViQ29yZS9Tb3VyY2UvZGlzcGxh
eSB3aWxsIGJlY29tZSB0aGUgaG9tZSBmb3IgYWxsIHRoZSBMRkMgcGFpbnRpbmcgY29kZTsgbW92
ZQorICAgICAgICBEaXNwbGF5VmlldyBhbmQgRGlzcGxheUxheWVyQ29udHJvbGxlciBpbnRvIGl0
LgorICAgICAgICAKKyAgICAgICAgQWxzbyBmaXggc29tZSB1bmlmaWVkIGJ1aWxkIGluY2x1ZGUg
aXNzdWVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9EaXNwbGF5TGF5ZXJDb250cm9s
bGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3Bs
YXlMYXllckNvbnRyb2xsZXIuY3BwLgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheUxheWVyQ29u
dHJvbGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXkvRGlz
cGxheUxheWVyQ29udHJvbGxlci5oLgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVZpZXcuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXkvRGlzcGxheVZpZXcu
Y3BwLgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheVZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlWaWV3LmguCisgICAgICAgICogbGF5b3V0
L2ZsZXhmb3JtYXR0aW5nL0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisKIDIwMjAtMDktMjIgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTbGlnaHRseSBpbXByb3Zl
IEF1ZGlvQnVmZmVyU291cmNlTm9kZSByZXNhbXBsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDk2M2U0YjZjZDhhNmQxZGVhNTYxNDYzNDE5ODVmYmFlYTU5ZjNmZjkuLjZlZjZlOTJmYzFjMzlm
MmY2ZDU0ZGIyZTkwMGE1MjU2OWYwNzBjNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC04NSw2
ICs4NSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIk
e1dFQkNPUkVfRElSfS9jc3MvdHlwZWRvbSIKICAgICAiJHtXRUJDT1JFX0RJUn0vY3Nzaml0Igog
ICAgICIke1dFQkNPUkVfRElSfS9kaXNwbGF5IgorICAgICIke1dFQkNPUkVfRElSfS9kaXNwbGF5
L2NzcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgogICAgICIke1dFQkNPUkVfRElSfS9kb20v
bWVzc2FnZXBvcnRzIgogICAgICIke1dFQkNPUkVfRElSfS9kb21qaXQiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCAzOGMwNmI4YmJkY2MxYTEwODE3YWY5ODE5YzAxYzYwZWUyOGRmMjU4Li40NjU5YmRl
MjI4YTBiZjA2M2JjOTBjY2MwNjJlNzE0NDBmYmYzYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTM2Miw4ICszNjIsMTcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW5SYW5nZS5oCiAKICAgICBkaXNwbGF5L0Rpc3Bs
YXlMYXllckNvbnRyb2xsZXIuaAorICAgIGRpc3BsYXkvRGlzcGxheVRyZWUuaAorICAgIGRpc3Bs
YXkvRGlzcGxheVRyZWVCdWlsZGVyLmgKICAgICBkaXNwbGF5L0Rpc3BsYXlWaWV3LmgKIAorICAg
IGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaAorICAgIGRpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWlu
dGVyLmgKKyAgICBkaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmgKKyAgICBkaXNwbGF5
L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaAorICAgIGRpc3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJv
eC5oCisgICAgZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKKwogICAgIGRvbS9BY3RpdmVET01D
YWxsYmFjay5oCiAgICAgZG9tL0FjdGl2ZURPTU9iamVjdC5oCiAgICAgZG9tL0F0dHIuaApAQCAt
Njk2LDcgKzcwNSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBsYXlvdXQvTGF5b3V0VW5pdHMuaAogICAgIGxheW91dC9NYXJnaW5UeXBlcy5oCiAKLSAgICBs
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCiAgICAgbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlJbmxpbmVDb250ZW50LmgKICAgICBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUxpbmUu
aAogICAgIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UmVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IDdiZGU0Y2IzMDBkNzM0NzIzNTFiZDk2NWJhMzdmYTVkNTJmOWNiM2IuLmM3MTJmODhhMjYyYmQw
NjQzYWEyZDk2NzNkZTExZmMxN2QxMzA1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC03OTQsNyArNzk0
LDE1IEBAIGNzcy90eXBlZG9tL1R5cGVkT01DU1NTdHlsZVZhbHVlLmNwcAogY3NzL3R5cGVkb20v
VHlwZWRPTUNTU1VuaXRWYWx1ZS5jcHAKIGNzcy90eXBlZG9tL1R5cGVkT01DU1NVbnBhcnNlZFZh
bHVlLmNwcAogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCitkaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94LmNwcAorZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHAKK2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlDU1NQYWludGVyLmNwcAorZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmNwcAor
ZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcAorZGlzcGxheS9jc3MvRGlzcGxheVN0
eWxlLmNwcAogZGlzcGxheS9EaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcAorZGlzcGxheS9EaXNw
bGF5VHJlZS5jcHAKK2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNwcAogZGlzcGxheS9EaXNw
bGF5Vmlldy5jcHAKIGRvbS9BYm9ydENvbnRyb2xsZXIuY3BwCiBkb20vQWJvcnRTaWduYWwuY3Bw
CkBAIC0xNDM0LDcgKzE0NDIsNiBAQCBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2lu
Q29sbGFwc2UuY3BwCiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL1ByZWNvbXB1dGVkQmxvY2tNYXJn
aW5Db2xsYXBzZS5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvdGFibGV3cmFwcGVyL1RhYmxl
V3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAotbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCiBsYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheUlubGluZUNvbnRlbnQuY3BwCiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVBhaW50
ZXIuY3BwCiBsYXlvdXQvZmxleGZvcm1hdHRpbmcvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDMxNGJiN2JjYWZjNTBjZWY2OTA0MzBhZTI1MzE0MTQ0NDFmYjliMWUuLjFmNTQxMDcxZjU2
ZWU4ZTJhYjZhYjkzZDM0NTE5MmFkMzQ0ZDU3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5MSw3ICszOTEsNiBAQAogCQkx
MTkzNDA5NzFGRUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MDk1
MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oICovOyB9
OwogCQkxMTkzNDBBMzFGRUUwMjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5MzQwQTEx
RkVFMDI0MDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCAqLzsgfTsKIAkJMTE5
OUZBNDYyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRhaW5lckJveC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5OUZBNDQyMDhFMzVBMzAwMjM1
OENDIC8qIExheW91dENvbnRhaW5lckJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTExOTlGQTVCMjA4RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5
Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTk5
RkE1OTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTExQ0IyNzg5MjAzQkE1NzAwMDRBMURDOSAv
KiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExQ0IyNzg3MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJU
cmVlQnVpbGRlckZ1bGxTY3JlZW4uaCAqLzsgfTsKIAkJMTFFMDY3RUUxRTYyNDZFNTAwMTYyRDE2
IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTFFMDY3RUQxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBsZUxp
bmVMYXlvdXRDb3ZlcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0MDBEN0E4MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFibGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDAwRDdBNzE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDg3LDYgKzYw
ODYsMjIgQEAKIAkJMEZGRDQ1QTgyNDNCRjI1NzAwMEQ0QkVBIC8qIFNjcm9sbGluZ1RyZWVMYXRj
aGluZ0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZUxhdGNo
aW5nQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkQ0RDVF
MTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZENEQ1RjE4NjUxRkEzMDA1MTJG
NkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRkYxQjcyMjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Qm94LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkZGMUI3MzI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheVN0eWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkZGMUI3NDI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUNvbnRhaW5lckJveC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXNwbGF5Q29udGFpbmVyQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGRjFCNzUyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlJbWFnZUJveC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5SW1hZ2VCb3guY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZGMUI3NjI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheVN0eWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRkYxQjc3MjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q1NTUGFp
bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q1NTUGFpbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZGMUI3ODI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUJveC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRkYxQjc5MjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5UmVwbGFjZWRCb3guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlzcGxheVJlcGxhY2VkQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRkYxQjdBMjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q29udGFpbmVyQm94Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlDb250YWluZXJCb3guaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGRjFCN0IyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlJbWFnZUJveC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwbGF5SW1hZ2VCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZGRjFCN0MyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlSZXBsYWNlZEJveC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVwbGFjZWRCb3guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkZGMUI3RDI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUNT
U1BhaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUNTU1BhaW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGMUI3RjI1MUJDNjYyMDA5ODc5NUEgLyog
RGlzcGxheVRyZWVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlUcmVlQnVpbGRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGMUI4MDI1MUJDNjYyMDA5ODc5NUEg
LyogRGlzcGxheVRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlUcmVl
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkYxQjgxMjUxQkM2
NjMwMDk4Nzk1QSAvKiBEaXNwbGF5VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5VHJlZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGMUI4MjI1MUJDNjYzMDA5ODc5NUEg
LyogRGlzcGxheVRyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheVRyZWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyog
UHVibGljVVJMTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdWJs
aWNVUkxNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMDBGQzZFMUZE
QjNDNEQwMEREOTYxQiAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTExMDBGQzcyMDkyNzY0QzAwODFBQTZDIC8qIExheW91dEl0ZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MTMxLDggKzYxNDYsNiBAQAogCQkxMTkzNDBBMTFGRUUwMjQwMDA5MzVG
MUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVl
QnVpbGRlckJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExOTlGQTQ0MjA4
RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5
b3V0Q29udGFpbmVyQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExOTlGQTQ1
MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3guY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGF5b3V0Q29udGFpbmVyQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMTE5OUZBNTkyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlzcGxheUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxMTk5RkE1QTIw
OEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNw
bGF5Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFCMDQyRkIyMEIwRTIx
NDAwODI4QTZCIC8qIExheW91dERlc2NlbmRhbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMYXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTFDNUYxMTYyMDAzRTc3NTAwMDFBRTYwIC8qIFJlbmRlclRyZWVC
dWlsZGVySW5saW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclRyZWVCdWlsZGVySW5saW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTFDNUYxMTgyMDAzRTc3NjAwMDFBRTYwIC8qIFJlbmRlclRyZWVCdWlsZGVySW5saW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVySW5saW5lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzQyMiw4ICsxNzQzNSwxMyBAQAogCQkw
Rjc5MEYzQzI1MTdDRTZEMDA5QkEwMzQgLyogZGlzcGxheSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZGRjFCNzEyNTFCQzY1NzAwOTg3OTVBIC8qIGNz
cyAqLywKIAkJCQkwRjc5MEY0MDI1MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxheUxheWVyQ29udHJv
bGxlci5jcHAgKi8sCiAJCQkJMEY3OTBGM0UyNTE3Q0U2RDAwOUJBMDM0IC8qIERpc3BsYXlMYXll
ckNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRkZGMUI4MjI1MUJDNjYzMDA5ODc5NUEgLyogRGlzcGxh
eVRyZWUuY3BwICovLAorCQkJCTBGRkYxQjgxMjUxQkM2NjMwMDk4Nzk1QSAvKiBEaXNwbGF5VHJl
ZS5oICovLAorCQkJCTBGRkYxQjgwMjUxQkM2NjIwMDk4Nzk1QSAvKiBEaXNwbGF5VHJlZUJ1aWxk
ZXIuY3BwICovLAorCQkJCTBGRkYxQjdGMjUxQkM2NjIwMDk4Nzk1QSAvKiBEaXNwbGF5VHJlZUJ1
aWxkZXIuaCAqLywKIAkJCQkwRjc5MEYzRDI1MTdDRTZEMDA5QkEwMzQgLyogRGlzcGxheVZpZXcu
Y3BwICovLAogCQkJCTBGNzkwRjNGMjUxN0NFNkQwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5oICov
LAogCQkJKTsKQEAgLTE3NDQ4LDYgKzE3NDY2LDI1IEBACiAJCQlwYXRoID0gZGlzcGxheWxpc3Rz
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMEZGRjFCNzEyNTFCQzY1NzAw
OTg3OTVBIC8qIGNzcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZGRjFCNzIyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlCb3guY3BwICovLAorCQkJ
CTBGRkYxQjc4MjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Qm94LmggKi8sCisJCQkJMEZGRjFC
NzQyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlDb250YWluZXJCb3guY3BwICovLAorCQkJCTBG
RkYxQjdBMjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5Q29udGFpbmVyQm94LmggKi8sCisJCQkJ
MEZGRjFCN0QyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlDU1NQYWludGVyLmNwcCAqLywKKwkJ
CQkwRkZGMUI3NzI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUNTU1BhaW50ZXIuaCAqLywKKwkJ
CQkwRkZGMUI3NTI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUltYWdlQm94LmNwcCAqLywKKwkJ
CQkwRkZGMUI3QjI1MUJDNjU3MDA5ODc5NUEgLyogRGlzcGxheUltYWdlQm94LmggKi8sCisJCQkJ
MEZGRjFCN0MyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlSZXBsYWNlZEJveC5jcHAgKi8sCisJ
CQkJMEZGRjFCNzkyNTFCQzY1NzAwOTg3OTVBIC8qIERpc3BsYXlSZXBsYWNlZEJveC5oICovLAor
CQkJCTBGRkYxQjc2MjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5U3R5bGUuY3BwICovLAorCQkJ
CTBGRkYxQjczMjUxQkM2NTcwMDk4Nzk1QSAvKiBEaXNwbGF5U3R5bGUuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gY3NzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMTE1Q0ZB
NjYyMDhBRjcyMDAwMUU2OTkxIC8qIGxheW91dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC0xNzU1Niw4ICsxNzU5Myw2IEBACiAJCTExOTlGQTU4MjA4RTND
NEMwMDIzNThDQyAvKiBkaXNwbGF5dHJlZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMTE5OUZBNUEyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3gu
Y3BwICovLAotCQkJCTExOTlGQTU5MjA4RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5Qm94LmggKi8s
CiAJCQkJRTRGQjRCMzUyMzlCRUIxMDAwM0MzMzZBIC8qIERpc3BsYXlJbmxpbmVDb250ZW50LmNw
cCAqLywKIAkJCQlFNDUxQzYzMzIzOTQwNThFMDA5OTMxOTAgLyogRGlzcGxheUlubGluZUNvbnRl
bnQuaCAqLywKIAkJCQk2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogRGlzcGxheUxpbmUuaCAq
LywKQEAgLTMxMDYxLDcgKzMxMDk2LDYgQEAKIAkJCQk4MzVENTRDNTFGNERFNTM4MDBFNjA2NzEg
LyogRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDdBMDlE
MTIwQTkzQTk3MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0VEQUFGQzkxOUEyQ0NEQzAwMzRERkQxIC8qIERpc2tDYWNoZU1vbml0b3JDb2NvYS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMTE5OUZBNUIyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlC
b3guaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NTFDNjM0MjM5NDA1OEYwMDk5MzE5MCAvKiBEaXNw
bGF5SW5saW5lQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3OTBGNDIyNTE3Q0U2RTAw
OUJBMDM0IC8qIERpc3BsYXlMYXllckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
QjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZS5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5TGF5ZXJDb250cm9sbGVyLmNwcApp
bmRleCAyMjcyZGQ4MDhkMTE5NTVkZWQwZDQyZWRkNTczZTk0M2RlMDdmODAxLi5kM2Y4NjAyM2Ri
M2MyZDQwN2JiNmJlMWE5MGI4ZTE3NDZkN2JmYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvRGlzcGxheUxheWVyQ29udHJvbGxlci5jcHAKQEAgLTMwLDEzICszMCwxMSBAQAog
CiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiRGlzcGxheVBhaW50ZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5Q1NTUGFpbnRlci5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlUcmVlLmgiCiAjaW5jbHVkZSAiRGlzcGxheVZpZXcuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkxheW91dEJveEdl
b21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dFN0
YXRlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgpAQCAtNjAsMTIgKzU4LDE0IEBAIHZvaWQgTGF5ZXJDb250cm9sbGVyOjpS
b290TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIs
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChsYXllciwgbGF5ZXIgPT0gbV9sYXllckNvbnRyb2xsZXIu
Y29udGVudExheWVyKCkpOwogCi0gICAgLy8gRklYTUU6IFRlbXBvcmFyeTsgb25jZSB3ZSBkbyBz
Y3JvbGxpbmcgdGhpcyByb290IGxheWVyIHdvbid0IHBhaW50IGFueXRoaW5nLgotICAgIGlmIChh
dXRvKiBsYXlvdXRTdGF0ZSA9IG1fbGF5ZXJDb250cm9sbGVyLnZpZXcoKS5sYXlvdXRTdGF0ZSgp
KQotICAgICAgICBMYXlvdXQ6OkxheW91dENvbnRleHQ6OnBhaW50KCpsYXlvdXRTdGF0ZSwgY29u
dGV4dCwgZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpKTsKKyAgICBpZiAoYXV0byogZGlzcGxh
eVRyZWUgPSBtX2xheWVyQ29udHJvbGxlci5tX2Rpc3BsYXlUcmVlLmdldCgpKQorICAgICAgICBD
U1NQYWludGVyOjpwYWludFRyZWUoKmRpc3BsYXlUcmVlLCBjb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KGRpcnR5UmVjdCkpOwogfQogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTGF5ZXJD
b250cm9sbGVyKTsKK2Zsb2F0IExheWVyQ29udHJvbGxlcjo6Um9vdExheWVyQ2xpZW50OjpkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb250cm9sbGVyLnZp
ZXcoKS5kZXZpY2VTY2FsZUZhY3RvcigpOworfQogCiBMYXllckNvbnRyb2xsZXI6OkxheWVyQ29u
dHJvbGxlcihWaWV3JiB2aWV3KQogICAgIDogbV92aWV3KHZpZXcpCkBAIC03NSwyMiArNzUsMTUg
QEAgTGF5ZXJDb250cm9sbGVyOjpMYXllckNvbnRyb2xsZXIoVmlldyYgdmlldykKIAogTGF5ZXJD
b250cm9sbGVyOjp+TGF5ZXJDb250cm9sbGVyKCkgPSBkZWZhdWx0OwogCi12b2lkIExheWVyQ29u
dHJvbGxlcjo6cHJlcGFyZUZvckRpc3BsYXkoY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUpCit2b2lkIExheWVyQ29udHJvbGxlcjo6cHJlcGFyZUZvckRpc3BsYXkoc3RkOjp1
bmlxdWVfcHRyPERpc3BsYXk6OlRyZWU+JiYgZGlzcGxheVRyZWUpCiB7Ci0gICAgaWYgKCFsYXlv
dXRTdGF0ZS5oYXNSb290KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJvb3RMYXlv
dXRCb3ggPSBsYXlvdXRTdGF0ZS5yb290KCk7Ci0gICAgaWYgKCFyb290TGF5b3V0Qm94LmZpcnN0
Q2hpbGQoKSkKKyAgICBtX2Rpc3BsYXlUcmVlID0gV1RGTW92ZShkaXNwbGF5VHJlZSk7CisgICAg
aWYgKCFtX2Rpc3BsYXlUcmVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobGF5b3V0
U3RhdGUuaGFzQm94R2VvbWV0cnkocm9vdExheW91dEJveCkpOwotCi0gICAgYXV0byB2aWV3U2l6
ZSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KHJvb3RMYXlvdXRCb3gpLmxvZ2ljYWxTaXpl
KCk7Ci0gICAgYXV0byBjb250ZW50U2l6ZSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KCpy
b290TGF5b3V0Qm94LmZpcnN0Q2hpbGQoKSkubG9naWNhbFNpemUoKTsKLSAgICAKLSAgICAvLyBG
SVhNRTogVXNpbmcgdGhlIGZpcnN0Q2hpbGQoKSBzaXplIHdvbid0IGJlIGNvcnJlY3QgdW50aWwg
d2UgY29tcHV0ZSBvdmVyZmxvdyBjb3JyZWN0bHksCi0gICAgY29udGVudFNpemUuY2xhbXBUb01p
bmltdW1TaXplKHZpZXdTaXplKTsKKyAgICBhdXRvIHZpZXdTaXplID0gbV9kaXNwbGF5VHJlZS0+
cm9vdEJveCgpLmJvcmRlckJveEZyYW1lKCkuc2l6ZSgpOworICAgIC8vIEZJWE1FOiBEbyBvdmVy
ZmxvdyBldGMuCisgICAgYXV0byBjb250ZW50U2l6ZSA9IHZpZXdTaXplOwogCiAgICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkxheWVyQ29udHJv
bGxlcjo6cHJlcGFyZUZvckRpc3BsYXkgLSB2aWV3U2l6ZSAiIDw8IHZpZXdTaXplIDw8ICIgY29u
dGVudFNpemUgIiA8PCBjb250ZW50U2l6ZSk7CiAKQEAgLTEzNiw3ICsxMjksNyBAQCB2b2lkIExh
eWVyQ29udHJvbGxlcjo6c2NoZWR1bGVSZW5kZXJpbmdVcGRhdGUoKQogICAgIHBhZ2UtPnNjaGVk
dWxlUmVuZGVyaW5nVXBkYXRlKCk7CiB9CiAKLXZvaWQgTGF5ZXJDb250cm9sbGVyOjplbnN1cmVS
b290TGF5ZXIoTGF5b3V0U2l6ZSB2aWV3U2l6ZSwgTGF5b3V0U2l6ZSBjb250ZW50U2l6ZSkKK3Zv
aWQgTGF5ZXJDb250cm9sbGVyOjplbnN1cmVSb290TGF5ZXIoRmxvYXRTaXplIHZpZXdTaXplLCBG
bG9hdFNpemUgY29udGVudFNpemUpCiB7CiAgICAgaWYgKG1fcm9vdExheWVyKSB7CiAgICAgICAg
IHVwZGF0ZVJvb3RMYXllckdlb21ldHJ5KHZpZXdTaXplLCBjb250ZW50U2l6ZSk7CkBAIC0xNzEs
NyArMTY0LDcgQEAgdm9pZCBMYXllckNvbnRyb2xsZXI6OnNldHVwUm9vdExheWVySGllcmFyY2h5
KCkKICAgICBtX2NvbnRlbnRIb3N0TGF5ZXItPmFkZENoaWxkKCptX2NvbnRlbnRMYXllcik7CiB9
CiAKLXZvaWQgTGF5ZXJDb250cm9sbGVyOjp1cGRhdGVSb290TGF5ZXJHZW9tZXRyeShMYXlvdXRT
aXplIHZpZXdTaXplLCBMYXlvdXRTaXplIGNvbnRlbnRTaXplKQordm9pZCBMYXllckNvbnRyb2xs
ZXI6OnVwZGF0ZVJvb3RMYXllckdlb21ldHJ5KEZsb2F0U2l6ZSB2aWV3U2l6ZSwgRmxvYXRTaXpl
IGNvbnRlbnRTaXplKQogewogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHZpZXdTaXplKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5TGF5ZXJDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xsZXIuaAppbmRl
eCAzODk1NzA5NTYzMDVmMjFlYjk1ODk1N2ExNjRjYWNlMGNhY2UxOGJlLi5lYWY4YzY2Mzk2OWQ2
NjMwZjlmYWZjMGQyYmI3MGFhYTZlOTI3N2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L0Rpc3BsYXlMYXllckNvbnRyb2xsZXIuaApAQCAtMjcsOSArMjcsNyBAQAogCiAjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNpbmNsdWRlICJEaXNwbGF5UmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0cy5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcs
MjIgKzM1LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBj
bGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIAotbmFtZXNwYWNlIExheW91dCB7Ci1jbGFzcyBM
YXlvdXRTdGF0ZTsKLX0KLQogbmFtZXNwYWNlIERpc3BsYXkgewogCitjbGFzcyBUcmVlOwogY2xh
c3MgVmlldzsKIAogLy8gQSBjb250cm9sbGVyIG9iamVjdCB0aGF0IG1ha2VzIGxheWVyaXphdGlv
biBkZWNpc2lvbnMgZm9yIGEgZGlzcGxheSB0cmVlLCBmb3IgYSBzaW5nbGUgZG9jdW1lbnQuCiBj
bGFzcyBMYXllckNvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTGF5ZXJD
b250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRChMYXllckNvbnRyb2xsZXIp
OwogcHVibGljOgogICAgIGV4cGxpY2l0IExheWVyQ29udHJvbGxlcihWaWV3Jik7CiAgICAgfkxh
eWVyQ29udHJvbGxlcigpOwogICAgIAotICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoY29uc3Qg
TGF5b3V0OjpMYXlvdXRTdGF0ZSYpOworICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoc3RkOjp1
bmlxdWVfcHRyPERpc3BsYXk6OlRyZWU+JiYpOwogICAgIHZvaWQgZmx1c2hMYXllcnMoKTsKIAog
ICAgIHZvaWQgc2V0SXNJbldpbmRvdyhib29sKTsKQEAgLTYwLDExICs1NSwxMyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVmlldyYgdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdmlldzsgfQogCiBwcml2
YXRlOgotICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKExheW91dFNpemUgdmlld1NpemUsIExheW91
dFNpemUgY29udGVudFNpemUpOwogICAgIHZvaWQgYXR0YWNoUm9vdExheWVyKCk7CiAgICAgdm9p
ZCBkZXRhY2hSb290TGF5ZXIoKTsKKworICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKEZsb2F0U2l6
ZSB2aWV3U2l6ZSwgRmxvYXRTaXplIGNvbnRlbnRTaXplKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllckdlb21ldHJ5KEZsb2F0U2l6ZSB2aWV3U2l6ZSwgRmxvYXRTaXplIGNvbnRlbnRTaXplKTsK
KwogICAgIHZvaWQgc2V0dXBSb290TGF5ZXJIaWVyYXJjaHkoKTsKLSAgICB2b2lkIHVwZGF0ZVJv
b3RMYXllckdlb21ldHJ5KExheW91dFNpemUgdmlld1NpemUsIExheW91dFNpemUgY29udGVudFNp
emUpOwogICAgIHZvaWQgc2NoZWR1bGVSZW5kZXJpbmdVcGRhdGUoKTsKICAgICAKICAgICBHcmFw
aGljc0xheWVyKiByb290R3JhcGhpY3NMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVy
LmdldCgpOyB9CkBAIC04Miw2ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEdyYXBoaWNz
TGF5ZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICAgICAgdm9pZCBub3RpZnlGbHVzaFJlcXVp
cmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBmaW5hbDsKICAgICAgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmLCBHcmFwaGljc0xheWVyUGFpbnRCZWhhdmlvcikgZmluYWw7CisgICAgICAgIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgZmluYWw7CiAKICAgICAgICAgTGF5ZXJDb250cm9sbGVy
JiBtX2xheWVyQ29udHJvbGxlcjsKICAgICB9OwpAQCAtOTIsNiArOTAsOCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBSZWZQdHI8R3JhcGhp
Y3NMYXllcj4gbV9jb250ZW50SG9zdExheWVyOwogICAgIFJlZlB0cjxHcmFwaGljc0xheWVyPiBt
X2NvbnRlbnRMYXllcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5OjpUcmVlPiBtX2Rp
c3BsYXlUcmVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L0Rpc3BsYXlUcmVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZWEwZmE2NzY4ODUyZWZkOWJlNjg4ZWVj
ZTA5NWMzZjJlNmIwYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9EaXNwbGF5VHJlZS5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5VHJlZS5oIgorCisjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK1RyZWU6OlRy
ZWUoc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4mJiByb290Qm94KQorICAgIDogbV9yb290
Qm94KFdURk1vdmUocm9vdEJveCkpCit7CisgICAgQVNTRVJUKG1fcm9vdEJveCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNw
bGF5VHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlOGYzNWZjM2NhM2NiMjYxM2MyNWIyYWRkZWMyNjVkMzQ1
MzEyODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlU
cmVlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5Q29u
dGFpbmVyQm94LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIFRyZWUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEKFRyZWUpOworcHVibGljOgorICAgIFRyZWUoc3RkOjp1bmlxdWVfcHRy
PENvbnRhaW5lckJveD4mJik7CisKKyAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3RCb3goKSBj
b25zdCB7IHJldHVybiAqbV9yb290Qm94OyB9CisKK3ByaXZhdGU6CisgICAgLy8gSWRlYWxseSB0
aGlzIHJvb3QgYm94IHdvdWxkIGJlIGFnbm9zdGljIHRvIGRpc3BsYXkgdHlwZSAoQ1NTIHZzIFNW
RykuCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4gbV9yb290Qm94OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L0Rpc3BsYXlUcmVlQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNhNDg3YmM0Nzg4YjQ2
MjEzN2MyNDU3MjU5NGU4MWYwNDkyZjJjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5VHJlZUJ1aWxk
ZXIuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVk
ZSAiRGlzcGxheUNvbnRhaW5lckJveC5oIgorI2luY2x1ZGUgIkRpc3BsYXlJbWFnZUJveC5oIgor
I2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgorI2luY2x1ZGUgIkRpc3BsYXlUcmVlLmgiCisjaW5j
bHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVw
bGFjZWRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dFRy
ZWVCdWlsZGVyLmgiIC8vIEp1c3QgZm9yIHNob3dMYXlvdXRUcmVlLgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3Bs
YXkgeworCitUcmVlQnVpbGRlcjo6VHJlZUJ1aWxkZXIoZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3Rv
cikKKyAgICA6IG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcihwaXhlbFNuYXBwaW5nRmFjdG9yKQorewor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8VHJlZT4gVHJlZUJ1aWxkZXI6OmJ1aWxkKGNvbnN0IExheW91
dDo6TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKSBjb25zdAoreworICAgIGlmICghbGF5b3V0U3Rh
dGUuaGFzUm9vdCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHJvb3RM
YXlvdXRCb3ggPSBsYXlvdXRTdGF0ZS5yb290KCk7CisKKyNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJ
TkcpCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0g
PDwgIkJ1aWxkaW5nIGRpc3BsYXkgdHJlZSBmb3I6Iik7CisgICAgc2hvd0xheW91dFRyZWUocm9v
dExheW91dEJveCwgJmxheW91dFN0YXRlKTsKKyNlbmRpZgorCisgICAgYXV0byBnZW9tZXRyeSA9
IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KHJvb3RMYXlvdXRCb3gpOworICAgIGF1dG8gcm9v
dERpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yUm9vdEJveChnZW9tZXRyeSwgcm9vdExheW91dEJv
eCk7CisgICAgYXV0byByb290RGlzcGxheUNvbnRhaW5lckJveCA9IHN0ZDo6dW5pcXVlX3B0cjxD
b250YWluZXJCb3g+IHsgZG93bmNhc3Q8Q29udGFpbmVyQm94Pihyb290RGlzcGxheUJveC5yZWxl
YXNlKCkpIH07CisKKyAgICBpZiAoIXJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxUcmVlPihXVEZNb3ZlKHJvb3REaXNwbGF5Q29udGFpbmVyQm94
KSk7CisKKyAgICBhdXRvIGJvcmRlckJveCA9IExheW91dFJlY3QgeyBnZW9tZXRyeS5sb2dpY2Fs
UmVjdCgpIH07CisgICAgYXV0byBvZmZzZXQgPSB0b0xheW91dFNpemUoYm9yZGVyQm94LmxvY2F0
aW9uKCkpOworICAgIHJlY3Vyc2l2ZUJ1aWxkRGlzcGxheVRyZWUobGF5b3V0U3RhdGUsIG9mZnNl
dCwgKnJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpLCAqcm9vdERpc3BsYXlDb250YWluZXJCb3gp
OworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShGb3Jt
YXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJEaXNwbGF5IHRyZWU6Iik7CisgICAgc2hv
d0Rpc3BsYXlUcmVlKCpyb290RGlzcGxheUNvbnRhaW5lckJveCk7CisjZW5kaWYKKworICAgIHJl
dHVybiBtYWtlVW5pcXVlPFRyZWU+KFdURk1vdmUocm9vdERpc3BsYXlDb250YWluZXJCb3gpKTsK
K30KKworQm94KiBUcmVlQnVpbGRlcjo6cmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZShjb25zdCBM
YXlvdXQ6OkxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9v
dCwgY29uc3QgTGF5b3V0OjpCb3gmIGJveCwgRGlzcGxheTo6Q29udGFpbmVyQm94JiBwYXJlbnRE
aXNwbGF5Qm94LCBEaXNwbGF5OjpCb3gqIHByZXZpb3VzU2libGluZ0JveCkgY29uc3QKK3sKKyAg
ICBhdXRvIGdlb21ldHJ5ID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3goYm94KTsKKyAgICBh
dXRvIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGdlb21ldHJ5LCBib3gsIG9m
ZnNldEZyb21Sb290KTsKKyAgICAKKyAgICBCb3gqIHJlc3VsdCA9IGRpc3BsYXlCb3guZ2V0KCk7
CisKKyAgICBpZiAocHJldmlvdXNTaWJsaW5nQm94KQorICAgICAgICBwcmV2aW91c1NpYmxpbmdC
b3gtPnNldE5leHRTaWJsaW5nKFdURk1vdmUoZGlzcGxheUJveCkpOworICAgIGVsc2UKKyAgICAg
ICAgcGFyZW50RGlzcGxheUJveC5zZXRGaXJzdENoaWxkKFdURk1vdmUoZGlzcGxheUJveCkpOwor
CisgICAgaWYgKCFpczxMYXlvdXQ6OkNvbnRhaW5lckJveD4oYm94KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKworICAgIGF1dG8mIGxheW91dENvbnRhaW5lckJveCA9IGRvd25jYXN0PExheW91
dDo6Q29udGFpbmVyQm94Pihib3gpOworICAgIGlmICghbGF5b3V0Q29udGFpbmVyQm94Lmhhc0No
aWxkKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBhdXRvIGJvcmRlckJveCA9IExh
eW91dFJlY3QgeyBnZW9tZXRyeS5sb2dpY2FsUmVjdCgpIH07CisgICAgb2Zmc2V0RnJvbVJvb3Qg
Kz0gdG9MYXlvdXRTaXplKGJvcmRlckJveC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8mIGRpc3Bs
YXlDb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KCpyZXN1bHQpOworCisgICAg
RGlzcGxheTo6Qm94KiBjdXJyU2libGluZ0Rpc3BsYXlCb3ggPSBudWxscHRyOworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBMYXlvdXQ6OmNoaWxkcmVuT2ZUeXBlPExheW91dDo6Qm94PihsYXlvdXRD
b250YWluZXJCb3gpKSB7CisgICAgICAgIGlmICghbGF5b3V0U3RhdGUuaGFzQm94R2VvbWV0cnko
Y2hpbGQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY3VyclNpYmxpbmdEaXNw
bGF5Qm94ID0gcmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZShsYXlvdXRTdGF0ZSwgb2Zmc2V0RnJv
bVJvb3QsIGNoaWxkLCBkaXNwbGF5Q29udGFpbmVyQm94LCBjdXJyU2libGluZ0Rpc3BsYXlCb3gp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxCb3g+
IFRyZWVCdWlsZGVyOjpkaXNwbGF5Qm94Rm9yUm9vdEJveChjb25zdCBMYXlvdXQ6OkJveEdlb21l
dHJ5JiBnZW9tZXRyeSwgY29uc3QgTGF5b3V0OjpDb250YWluZXJCb3gmIHJvb3RCb3gpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gZG8gbG9naWNhbCAtPiBwaHlzaWNhbCBjb29yZGlu
YXRlIG1hcHBpbmcgaGVyZS4KKyAgICBhdXRvIGJvcmRlckJveCA9IExheW91dFJlY3QgeyBnZW9t
ZXRyeS5sb2dpY2FsUmVjdCgpIH07CisKKyAgICBhdXRvIHN0eWxlID0gU3R5bGUgeyByb290Qm94
LnN0eWxlKCkgfTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxDb250YWluZXJCb3g+KHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpLCBXVEZNb3Zl
KHN0eWxlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxCb3g+IFRyZWVCdWlsZGVyOjpkaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94LCBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290KSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1hcCBsb2dpY2FsIHRvIHBoeXNpY2FsIHJlY3Rz
LgorICAgIGF1dG8gYm9yZGVyQm94ID0gTGF5b3V0UmVjdCB7IGdlb21ldHJ5LmxvZ2ljYWxSZWN0
KCkgfTsKKyAgICBib3JkZXJCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgYXV0byBwaXhl
bFNuYXBwZWRCb3JkZXJCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJvcmRlckJveCwgbV9w
aXhlbFNuYXBwaW5nRmFjdG9yKTsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgaXNBbm9ueW1vdXMo
KQorICAgIC8vIEZJWE1FOiBEbyBob2lzdGluZyBvZiA8Ym9keT4gc3R5bGVzIHRvIHRoZSByb290
IHdoZXJlIGFwcHJvcHJpYXRlLgorCisgICAgLy8gRklYTUU6IE5lZWQgdG8gZG8gbG9naWNhbCAt
PiBwaHlzaWNhbCBjb29yZGluYXRlIG1hcHBpbmcgaGVyZS4KKyAgICBhdXRvIHN0eWxlID0gU3R5
bGUgeyBsYXlvdXRCb3guc3R5bGUoKSB9OworICAgIAorICAgIGlmIChpczxMYXlvdXQ6OlJlcGxh
Y2VkQm94PihsYXlvdXRCb3gpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXcm9uZzsgZ2VvbWV0cnkg
bmVlZHMgdG8gdmVuZCB0aGUgY29ycmVjdCByZXBsYWNlZCBjb250ZW50IHJlY3QuCisgICAgICAg
IGF1dG8gcmVwbGFjZWRDb250ZW50UmVjdCA9IExheW91dFJlY3QgeyBnZW9tZXRyeS5jb250ZW50
Qm94TGVmdCgpLCBnZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIGdlb21ldHJ5LmNvbnRlbnRCb3hX
aWR0aCgpLCBnZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkgfTsKKyAgICAgICAgcmVwbGFjZWRD
b250ZW50UmVjdC5tb3ZlQnkoYm9yZGVyQm94LmxvY2F0aW9uKCkpOworICAgICAgICBhdXRvIHBp
eGVsU25hcHBlZFJlcGxhY2VkQ29udGVudFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJl
cGxhY2VkQ29udGVudFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3Rvcik7CisKKyAgICAgICAgLy8g
RklYTUU6IERvbid0IGFzc3VtZSBpdCdzIGFuIGltYWdlLgorICAgICAgICBhdXRvIGltYWdlQm94
ID0gbWFrZVVuaXF1ZTxJbWFnZUJveD4ocGl4ZWxTbmFwcGVkQm9yZGVyQm94LCBXVEZNb3ZlKHN0
eWxlKSwgcGl4ZWxTbmFwcGVkUmVwbGFjZWRDb250ZW50UmVjdCk7CisKKyAgICAgICAgaWYgKGF1
dG8qIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8TGF5b3V0OjpSZXBsYWNlZEJveD4obGF5b3V0Qm94
KS5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgaW1hZ2VCb3gtPnNldEltYWdlKGNhY2hlZElt
YWdlLT5pbWFnZSgpKTsKKworICAgICAgICByZXR1cm4gaW1hZ2VCb3g7CisgICAgfQorICAgIAor
ICAgIGlmIChpczxMYXlvdXQ6OkNvbnRhaW5lckJveD4obGF5b3V0Qm94KSkgeworICAgICAgICAv
LyBGSVhNRTogVGhlIGRlY2lzaW9uIHRvIG1ha2UgYSBDb250YWluZXJCb3ggc2hvdWxkIGJlIG1h
ZGUgYmFzZWQgb24gd2hldGhlciB0aGlzIERpc3BsYXk6OkJveCB3aWxsIGhhdmUgY2hpbGRyZW4u
CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENvbnRhaW5lckJveD4ocGl4ZWxTbmFwcGVkQm9y
ZGVyQm94LCBXVEZNb3ZlKHN0eWxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8
Qm94PihzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJvcmRlckJveCwgbV9waXhlbFNuYXBwaW5nRmFj
dG9yKSwgV1RGTW92ZShzdHlsZSkpOworfQorCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQor
CitzdGF0aWMgdm9pZCBvdXRwdXREaXNwbGF5Qm94KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3Qg
Qm94JiBkaXNwbGF5Qm94LCB1bnNpZ25lZCkKK3sKKyAgICBzdHJlYW0ud3JpdGVJbmRlbnQoKTsK
KworICAgIHN0cmVhbSA8PCBkaXNwbGF5Qm94LmRlYnVnRGVzY3JpcHRpb24oKTsKKyAgICBzdHJl
YW0ubmV4dExpbmUoKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0RGlzcGxheVRyZWUoVGV4dFN0
cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGRpc3BsYXlCb3gsIHVuc2lnbmVkIGRlcHRoKQorewor
ICAgIG91dHB1dERpc3BsYXlCb3goc3RyZWFtLCBkaXNwbGF5Qm94LCBkZXB0aCk7CisKKyAgICBp
ZiAoaXM8Q29udGFpbmVyQm94PihkaXNwbGF5Qm94KSkgeworICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnQoc3RyZWFtKTsKKyAgICAgICAgZm9yIChhdXRvIGNoaWxkID0gZG93
bmNhc3Q8Q29udGFpbmVyQm94PihkaXNwbGF5Qm94KS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgb3V0cHV0RGlzcGxheVRyZWUo
c3RyZWFtLCAqY2hpbGQsIGRlcHRoICsgMSk7CisgICAgfQorfQorCit2b2lkIHNob3dEaXNwbGF5
VHJlZShjb25zdCBCb3gmIGJveCkKK3sKKyAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFt
OjpMaW5lTW9kZTo6TXVsdGlwbGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHls
ZVJlY3QpOworICAgIG91dHB1dERpc3BsYXlUcmVlKHN0cmVhbSwgYm94LCAxKTsKKyAgICBXVEZM
b2dBbHdheXMoIiVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsKK30KKworI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUyZGMzOGE3NzAw
OWRjZDVhMzRiYWU2YmEzYmMxYTJhYTNmMTE3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIExheW91dCB7CitjbGFzcyBCb3g7CitjbGFzcyBCb3hHZW9tZXRyeTsK
K2NsYXNzIExheW91dFN0YXRlOworfQorCituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIEJv
eDsKK2NsYXNzIENvbnRhaW5lckJveDsKK2NsYXNzIFRyZWU7CisKK2NsYXNzIFRyZWVCdWlsZGVy
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBUcmVlQnVpbGRlcihmbG9hdCBwaXhlbFNuYXBwaW5n
RmFjdG9yKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxUcmVlPiBidWlsZChjb25zdCBMYXlvdXQ6
OkxheW91dFN0YXRlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEJv
eD4gZGlzcGxheUJveEZvclJvb3RCb3goY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYsIGNvbnN0
IExheW91dDo6Q29udGFpbmVyQm94JikgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJveD4g
ZGlzcGxheUJveEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5JiwgY29uc3Qg
TGF5b3V0OjpCb3gmLCBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290KSBjb25zdDsKKworICAgIEJv
eCogcmVjdXJzaXZlQnVpbGREaXNwbGF5VHJlZShjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiwg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0OjpCb3gmLCBEaXNwbGF5OjpD
b250YWluZXJCb3gmIHBhcmVudERpc3BsYXlCb3gsIERpc3BsYXk6OkJveCogcHJldmlvdXNTaWJs
aW5nQm94ID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICBmbG9hdCBtX3BpeGVsU25hcHBpbmdGYWN0
b3I7Cit9OworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQordm9pZCBzaG93RGlzcGxheVRy
ZWUoY29uc3QgQm94Jik7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlWaWV3LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuY3BwCmluZGV4IDI2OTY5MDI0
N2U0MWI1YjViODc4NTM2N2IwMDhlOGNhOGE0ZDZiMjkuLmFhOTU3ODM0NDNlOGJhODgyODg1MmQw
MWFjMDE4NzRmM2QwZmY3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlz
cGxheVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVZpZXcuY3Bw
CkBAIC0yOCwxMSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkZyYW1lVmlld0xheW91dENvbnRl
eHQuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
IApAQCAtNzIsNyArNzAsMTAgQEAgdm9pZCBWaWV3OjpwcmVwYXJlRm9yRGlzcGxheSgpCiAgICAg
aWYgKCFsYXlvdXRTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sYXllckNvbnRyb2xs
ZXIucHJlcGFyZUZvckRpc3BsYXkoKmxheW91dFN0YXRlKTsKKyAgICBhdXRvIHRyZWVCdWlsZGVy
ID0gVHJlZUJ1aWxkZXIgeyBkZXZpY2VTY2FsZUZhY3RvcigpIH07CisgICAgYXV0byBkaXNwbGF5
VHJlZSA9IHRyZWVCdWlsZGVyLmJ1aWxkKCpsYXlvdXRTdGF0ZSk7CisKKyAgICBtX2xheWVyQ29u
dHJvbGxlci5wcmVwYXJlRm9yRGlzcGxheShXVEZNb3ZlKGRpc3BsYXlUcmVlKSk7CiB9CiAKIHZv
aWQgVmlldzo6Zmx1c2hMYXllcnMoKQpAQCAtODUsNiArODYsMTEgQEAgdm9pZCBWaWV3OjpzZXRJ
c0luV2luZG93KGJvb2wgaXNJbldpbmRvdykKICAgICBtX2xheWVyQ29udHJvbGxlci5zZXRJc0lu
V2luZG93KGlzSW5XaW5kb3cpOwogfQogCitmbG9hdCBWaWV3OjpkZXZpY2VTY2FsZUZhY3Rvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSA6IDEuMGY7Cit9CisKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXkKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5Vmlldy5o
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5Vmlldy5oCmluZGV4IDYzNjEwY2Q0NDVl
YjNlYzVlODEyNWYyNGU2ZjA4OTkwZjMzNDE0MzMuLmZjYjA3YWU1ODYwMTdiMjdhNGQ3NTZkY2Uz
M2RjYWZjMjRjZWU3ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxh
eVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlWaWV3LmgKQEAgLTYx
LDkgKzYxLDExIEBAIHB1YmxpYzoKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldygpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVWaWV3OyB9CiAgICAgRnJhbWUmIGZyYW1lKCkgY29uc3Q7CiAKLSAgICBj
b25zdCBMYXlvdXQ6OkxheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSgpIGNvbnN0OworICAgIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgY29uc3QgTGF5b3V0
OjpMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUoKSBjb25zdDsKKwogICAgIEZyYW1lVmlldyYgbV9m
cmFtZVZpZXc7CiAgICAgTGF5ZXJDb250cm9sbGVyIG1fbGF5ZXJDb250cm9sbGVyOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODhjMjYz
MDhlOGJlYTMyOWJlMzY1MTlmY2ZkNmFlOTE3ZTEwYmEyYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3guY3BwCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUJveC5o
IgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitCb3g6OkJveChB
YnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlLCBPcHRpb25T
ZXQ8RmxhZ3M+IGZsYWdzKQorICAgIDogbV9ib3JkZXJCb3hGcmFtZShib3JkZXJCb3gpCisgICAg
LCBtX3N0eWxlKFdURk1vdmUoZGlzcGxheVN0eWxlKSkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCit7
Cit9CisKK3ZvaWQgQm94OjpzZXROZXh0U2libGluZyhzdGQ6OnVuaXF1ZV9wdHI8Qm94PiYmIGJv
eCkKK3sKKyAgICBtX25leHRTaWJsaW5nID0gV1RGTW92ZShib3gpOworfQorCitTdHJpbmcgQm94
OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAg
ICBzdHJlYW0gPDwgImRpc3BsYXkgYm94ICIgPDwgYm9yZGVyQm94RnJhbWUoKSA8PCAiICgiIDw8
IHRoaXMgPDwgIikiOworICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMmI1YWQ3NGEyNGQyY2FjOTBkMDA4NmNlY2UwOGQ1Nzhi
NGM3MDg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxh
eVN0eWxlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIERpc3BsYXkgeworCisvLyBGSVhNRTogTWFrZSB0aGlzIGEgc3Ryb25nIHR5cGUu
Cit1c2luZyBBYnNvbHV0ZUZsb2F0UmVjdCA9IEZsb2F0UmVjdDsKKworY2xhc3MgQm94IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihCb3gpOworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgRmxhZ3MgOiB1aW50OF90IHsKKyAgICAgICAgQ29udGFpbmVy
Qm94ICAgID0gMSA8PCAwLAorICAgICAgICBJbWFnZUJveCAgICAgICAgPSAxIDw8IDEsCisgICAg
fTsKKworICAgIEJveChBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIE9wdGlv
blNldDxGbGFncz4gPSB7IH0pOworICAgIHZpcnR1YWwgfkJveCgpID0gZGVmYXVsdDsKKworICAg
IGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KKworICAgIEFi
c29sdXRlRmxvYXRSZWN0IGJvcmRlckJveEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJC
b3hGcmFtZTsgfQorCisgICAgYm9vbCBpc0NvbnRhaW5lckJveCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmxhZ3MuY29udGFpbnMoRmxhZ3M6OkNvbnRhaW5lckJveCk7IH0KKyAgICBib29sIGlzSW1hZ2VC
b3goKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpJbWFnZUJveCk7IH0K
KyAgICBib29sIGlzUmVwbGFjZWRCb3goKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5z
KEZsYWdzOjpJbWFnZUJveCk7IC8qIGFuZCBvdGhlciB0eXBlcyBsYXRlci4gKi8gfQorCisgICAg
Y29uc3QgQm94KiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dFNpYmxpbmcuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldE5leHRTaWJsaW5nKHN0ZDo6dW5pcXVlX3B0cjxCb3g+JiYpOwor
CisgICAgdmlydHVhbCBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEFic29sdXRlRmxvYXRSZWN0IG1fYm9yZGVyQm94RnJhbWU7CisgICAgU3R5bGUgbV9z
dHlsZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qm94PiBtX25leHRTaWJsaW5nOworICAgIE9wdGlv
blNldDxGbGFncz4gbV9mbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlfQk9YKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXk6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5OjpCb3gmIGJveCkgeyByZXR1cm4g
Ym94LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDU1NQYWludGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE0NWNj
ZWJlOTQ1YjJiMjBhMTNmYzlmNjEwNWM2YjlhZDVlNTJmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuY3BwCkBAIC0wLDAgKzEs
MjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3Bs
YXlDU1NQYWludGVyLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJEaXNwbGF5Q29udGFpbmVyQm94LmgiCisjaW5jbHVkZSAiRGlzcGxheUltYWdlQm94LmgiCisj
aW5jbHVkZSAiRGlzcGxheVN0eWxlLmgiCisjaW5jbHVkZSAiRGlzcGxheVRyZWUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
TGF5b3V0U3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkg
eworCit2b2lkIENTU1BhaW50ZXI6OnBhaW50Qm94RGVjb3JhdGlvbnMoY29uc3QgQm94JiBkaXNw
bGF5Qm94LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IFRhYmxl
IGRlY29yYXRpb24gcGFpbnRpbmcgaXMgc3BlY2lhbC4KKworICAgIGF1dG8gYm9yZGVyQm94UmVj
dCA9IGRpc3BsYXlCb3guYm9yZGVyQm94RnJhbWUoKTsKKyAgICAKKyAgICBjb25zdCBhdXRvJiBz
dHlsZSA9IGRpc3BsYXlCb3guc3R5bGUoKTsKKworICAgIC8vIEJhY2tncm91bmQgY29sb3IKKyAg
ICBpZiAoc3R5bGUuaGFzQmFja2dyb3VuZCgpKSB7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qo
Ym9yZGVyQm94UmVjdCwgc3R5bGUuYmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAvLyBGSVhN
RTogUGFpbnQgYmFja2dyb3VuZCBpbWFnZS4KKyAgICB9CisKKyAgICAvLyBCb3JkZXIKKyAgICBp
ZiAoc3R5bGUuaGFzVmlzaWJsZUJvcmRlcigpKSB7CisgICAgICAgIGF1dG8gZHJhd0JvcmRlclNp
ZGUgPSBbJl0oYXV0byBzdGFydCwgYXV0byBlbmQsIGNvbnN0IGF1dG8mIGJvcmRlclN0eWxlKSB7
CisgICAgICAgICAgICBpZiAoIWJvcmRlclN0eWxlLndpZHRoKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGJvcmRlclN0eWxlLnN0eWxlKCkgPT0gQm9yZGVyU3R5
bGU6Ok5vbmUgfHwgYm9yZGVyU3R5bGUuc3R5bGUoKSA9PSBCb3JkZXJTdHlsZTo6SGlkZGVuKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoYm9yZGVyU3R5bGUuY29sb3IoKSk7CisgICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhib3JkZXJTdHlsZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0xp
bmUoc3RhcnQsIGVuZCk7CisgICAgICAgIH07CisKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworCisgICAgICAgIC8vIFRvcAorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGJvcmRlcldpZHRoID0gc3R5bGUuYm9yZGVyVG9wKCkud2lkdGgo
KTsKKyAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNaW5ZQ29ybmVy
KCk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IEZsb2F0UG9pbnQgeyBib3JkZXJCb3hSZWN0Lm1h
eFgoKSwgc3RhcnQueSgpICsgYm9yZGVyV2lkdGggfTsKKyAgICAgICAgICAgIGRyYXdCb3JkZXJT
aWRlKHN0YXJ0LCBlbmQsIHN0eWxlLmJvcmRlclRvcCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFJpZ2h0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVyV2lkdGggPSBzdHls
ZS5ib3JkZXJSaWdodCgpLndpZHRoKCk7CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gRmxvYXRQ
b2ludCB7IGJvcmRlckJveFJlY3QubWF4WCgpIC0gYm9yZGVyV2lkdGgsIGJvcmRlckJveFJlY3Qu
eSgpIH07CisgICAgICAgICAgICBhdXRvIGVuZCA9IEZsb2F0UG9pbnQgeyBzdGFydC54KCkgKyBi
b3JkZXJXaWR0aCwgYm9yZGVyQm94UmVjdC5tYXhZKCkgfTsKKyAgICAgICAgICAgIGRyYXdCb3Jk
ZXJTaWRlKHN0YXJ0LCBlbmQsIHN0eWxlLmJvcmRlclJpZ2h0KCkpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQm90dG9tCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVyV2lkdGgg
PSBzdHlsZS5ib3JkZXJCb3R0b20oKS53aWR0aCgpOworICAgICAgICAgICAgYXV0byBzdGFydCA9
IEZsb2F0UG9pbnQgeyBib3JkZXJCb3hSZWN0LngoKSwgYm9yZGVyQm94UmVjdC5tYXhZKCkgLSBi
b3JkZXJXaWR0aCB9OworICAgICAgICAgICAgYXV0byBlbmQgPSBGbG9hdFBvaW50IHsgYm9yZGVy
Qm94UmVjdC5tYXhYKCksIHN0YXJ0LnkoKSArIGJvcmRlcldpZHRoIH07CisgICAgICAgICAgICBk
cmF3Qm9yZGVyU2lkZShzdGFydCwgZW5kLCBzdHlsZS5ib3JkZXJCb3R0b20oKSk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBMZWZ0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVy
V2lkdGggPSBzdHlsZS5ib3JkZXJMZWZ0KCkud2lkdGgoKTsKKyAgICAgICAgICAgIGF1dG8gc3Rh
cnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNaW5ZQ29ybmVyKCk7CisgICAgICAgICAgICBhdXRvIGVu
ZCA9IEZsb2F0UG9pbnQgeyBzdGFydC54KCkgKyBib3JkZXJXaWR0aCwgYm9yZGVyQm94UmVjdC5t
YXhZKCkgfTsKKyAgICAgICAgICAgIGRyYXdCb3JkZXJTaWRlKHN0YXJ0LCBlbmQsIHN0eWxlLmJv
cmRlckxlZnQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFp
bnRCb3hDb250ZW50KGNvbnN0IEJveCYgYm94LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7
CisgICAgaWYgKGlzPEltYWdlQm94Pihib3gpKSB7CisgICAgICAgIGF1dG8mIGltYWdlQm94ID0g
ZG93bmNhc3Q8SW1hZ2VCb3g+KGJveCk7CisgICAgICAgIAorICAgICAgICBhdXRvKiBpbWFnZSA9
IGltYWdlQm94LmltYWdlKCk7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW1hZ2VCb3gucmVw
bGFjZWRDb250ZW50UmVjdCgpOworCisgICAgICAgIGlmIChpbWFnZSkKKyAgICAgICAgICAgIGNv
bnRleHQuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NT
UGFpbnRlcjo6cGFpbnRCb3goY29uc3QgQm94JiBib3gsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIGF1dG8gcmVsYXRpdmVSZWN0ID0g
Ym94LmJvcmRlckJveEZyYW1lKCk7CisgICAgaWYgKCFkaXJ0eVJlY3QuaW50ZXJzZWN0cyhlbmNs
b3NpbmdJbnRSZWN0KHJlbGF0aXZlUmVjdCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aXM8SW1hZ2VCb3g+KGJveCkpIHsKKyAgICAgICAgYXV0byYgaW1hZ2VCb3ggPSBkb3duY2FzdDxJ
bWFnZUJveD4oYm94KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8qIGltYWdlID0gaW1hZ2VCb3gu
aW1hZ2UoKTsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBpbWFnZUJveC5yZXBsYWNlZENvbnRl
bnRSZWN0KCk7CisKKyAgICAgICAgaWYgKGltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOworICAgIH0KKworICAgIHBhaW50Qm94RGVjb3JhdGlv
bnMoYm94LCBjb250ZXh0KTsKKyAgICBwYWludEJveENvbnRlbnQoYm94LCBjb250ZXh0KTsKK30K
KworLy8gRklYTUU6IE1ha2UgdGhpcyBhbiBpdGVyYXRvci4KK3ZvaWQgQ1NTUGFpbnRlcjo6cmVj
dXJzaXZlUGFpbnREZXNjZW5kYW50cyhjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWludFBoYXNlIHBhaW50UGhhc2UpCit7CisgICAg
Zm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGNvbnRhaW5lckJveC5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGF1dG8mIGJveCA9ICpj
aGlsZDsKKyAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0UGFpbnRpbmdCb3VuZGFyeShib3gp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3dpdGNoIChwYWludFBoYXNlKSB7
CisgICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kczoKKyAgICAgICAgICAg
IGlmICghYm94LnN0eWxlKCkuaXNGbG9hdGluZygpICYmICFib3guc3R5bGUoKS5pc1Bvc2l0aW9u
ZWQoKSkKKyAgICAgICAgICAgICAgICBwYWludEJveERlY29yYXRpb25zKGJveCwgY29udGV4dCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYWludFBoYXNlOjpGbG9hdHM6Cisg
ICAgICAgICAgICBpZiAoYm94LnN0eWxlKCkuaXNGbG9hdGluZygpICYmICFib3guc3R5bGUoKS5p
c1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBwYWludEJveERlY29yYXRpb25zKGJveCwg
Y29udGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYWludFBoYXNlOjpC
bG9ja0ZvcmVncm91bmRzOgorICAgICAgICAgICAgaWYgKCFib3guc3R5bGUoKS5pc0Zsb2F0aW5n
KCkgJiYgIWJveC5zdHlsZSgpLmlzUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHBhaW50
Qm94Q29udGVudChib3gsIGNvbnRleHQpOworICAgICAgICB9OworICAgICAgICBpZiAoaXM8Q29u
dGFpbmVyQm94Pihib3gpKQorICAgICAgICAgICAgcmVjdXJzaXZlUGFpbnREZXNjZW5kYW50cyhk
b3duY2FzdDxDb250YWluZXJCb3g+KGJveCksIGNvbnRleHQsIHBhaW50UGhhc2UpOworICAgIH0K
K30KKwordm9pZCBDU1NQYWludGVyOjpwYWludFN0YWNraW5nQ29udGV4dChjb25zdCBCb3gmIGNv
bnRleHRSb290LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZGlydHlSZWN0KTsKKyAgICAKKyAgICAvLyBIZXJl
IHRoZSBwYWludE9mZnNldCByZXByZXNlbnRzIHRoZSBvZmZzZXQgb2YgdGhlIHRvcCBsZWZ0IG9m
IGNvbnRleHRSb290J3MgYm9yZGVyQm94RnJhbWUgcmVsYXRpdmUgdG8gdGhlIHJvb3QuCisgICAg
cGFpbnRCb3hEZWNvcmF0aW9ucyhjb250ZXh0Um9vdCwgY29udGV4dCk7CisKKyAgICBhdXRvIHBh
aW50RGVzY2VuZGFudHMgPSBbJl0oY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpIHsK
KyAgICAgICAgLy8gRm9yIGFsbCBpdHMgaW4tZmxvdywgbm9uLXBvc2l0aW9uZWQsIGJsb2NrLWxl
dmVsIGRlc2NlbmRhbnRzIGluIHRyZWUgb3JkZXI6IElmIHRoZSBlbGVtZW50IGlzIGEgYmxvY2ss
IGxpc3QtaXRlbSwgb3Igb3RoZXIgYmxvY2sgZXF1aXZhbGVudDoKKyAgICAgICAgLy8gQm94IGRl
Y29yYXRpb25zLgorICAgICAgICAvLyBUYWJsZSBkZWNvcmF0aW9ucy4KKyAgICAgICAgcmVjdXJz
aXZlUGFpbnREZXNjZW5kYW50cyhjb250YWluZXJCb3gsIGNvbnRleHQsIFBhaW50UGhhc2U6OkJs
b2NrQmFja2dyb3VuZHMpOworCisgICAgICAgIC8vIEFsbCBub24tcG9zaXRpb25lZCBmbG9hdGlu
ZyBkZXNjZW5kYW50cywgaW4gdHJlZSBvcmRlci4gRm9yIGVhY2ggb25lIG9mIHRoZXNlLCB0cmVh
dCB0aGUgZWxlbWVudCBhcyBpZiBpdCBjcmVhdGVkIGEgbmV3IHN0YWNraW5nIGNvbnRleHQsCisg
ICAgICAgIC8vIGJ1dCBhbnkgcG9zaXRpb25lZCBkZXNjZW5kYW50cyBhbmQgZGVzY2VuZGFudHMg
d2hpY2ggYWN0dWFsbHkgY3JlYXRlIGEgbmV3IHN0YWNraW5nIGNvbnRleHQgc2hvdWxkIGJlIGNv
bnNpZGVyZWQgcGFydCBvZiB0aGUgcGFyZW50CisgICAgICAgIC8vIHN0YWNraW5nIGNvbnRleHQs
IG5vdCB0aGlzIG5ldyBvbmUuCisgICAgICAgIHJlY3Vyc2l2ZVBhaW50RGVzY2VuZGFudHMoY29u
dGFpbmVyQm94LCBjb250ZXh0LCBQYWludFBoYXNlOjpGbG9hdHMpOworCisgICAgICAgIC8vIElm
IHRoZSBlbGVtZW50IGlzIGFuIGlubGluZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIGEgc3RhY2tp
bmcgY29udGV4dCwgdGhlbjoKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisg
ICAgICAgIAorICAgICAgICAvLyBPdGhlcndpc2U6IGZpcnN0IGZvciB0aGUgZWxlbWVudCwgdGhl
biBmb3IgYWxsIGl0cyBpbi1mbG93LCBub24tcG9zaXRpb25lZCwgYmxvY2stbGV2ZWwgZGVzY2Vu
ZGFudHMgaW4gdHJlZSBvcmRlcjoKKyAgICAgICAgLy8gMS4gSWYgdGhlIGVsZW1lbnQgaXMgYSBi
bG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50LCB0aGVuOiB0aGUgcmVwbGFjZWQgY29udGVudCwg
YXRvbWljYWxseS4KKyAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBmb3IgZWFjaCBsaW5lIGJveCBv
ZiB0aGF0IGVsZW1lbnQuLi4KKyAgICAgICAgcmVjdXJzaXZlUGFpbnREZXNjZW5kYW50cyhjb250
YWluZXJCb3gsIGNvbnRleHQsIFBhaW50UGhhc2U6OkJsb2NrRm9yZWdyb3VuZHMpOworICAgIH07
CisKKyAgICBpZiAoaXM8Q29udGFpbmVyQm94Pihjb250ZXh0Um9vdCkpIHsKKyAgICAgICAgYXV0
byYgY29udGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pihjb250ZXh0Um9vdCk7CisK
KyAgICAgICAgVmVjdG9yPGNvbnN0IEJveCo+IG5lZ2F0aXZlWk9yZGVyTGlzdDsKKyAgICAgICAg
VmVjdG9yPGNvbnN0IEJveCo+IHBvc2l0aXZlWk9yZGVyTGlzdDsKKyAgICAKKyAgICAgICAgcmVj
dXJzaXZlQ29sbGVjdExheWVycyhjb250YWluZXJCb3gsIG5lZ2F0aXZlWk9yZGVyTGlzdCwgcG9z
aXRpdmVaT3JkZXJMaXN0KTsKKworICAgICAgICBhdXRvIGNvbXBhcmVaSW5kZXggPSBbXSAoY29u
c3QgQm94KiBhLCBjb25zdCBCb3gqIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLT5zdHlsZSgp
LnpJbmRleCgpLnZhbHVlT3IoMCkgPCBiLT5zdHlsZSgpLnpJbmRleCgpLnZhbHVlT3IoMCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgc3RkOjpzdGFibGVfc29ydChwb3NpdGl2ZVpPcmRlckxpc3Qu
YmVnaW4oKSwgcG9zaXRpdmVaT3JkZXJMaXN0LmVuZCgpLCBjb21wYXJlWkluZGV4KTsKKyAgICAg
ICAgc3RkOjpzdGFibGVfc29ydChuZWdhdGl2ZVpPcmRlckxpc3QuYmVnaW4oKSwgbmVnYXRpdmVa
T3JkZXJMaXN0LmVuZCgpLCBjb21wYXJlWkluZGV4KTsKKworICAgICAgICAvLyBTdGFja2luZyBj
b250ZXh0cyBmb3JtZWQgYnkgcG9zaXRpb25lZCBkZXNjZW5kYW50cyB3aXRoIG5lZ2F0aXZlIHot
aW5kaWNlcyAoZXhjbHVkaW5nIDApIGluIHotaW5kZXggb3JkZXIgKG1vc3QgbmVnYXRpdmUgZmly
c3QpIHRoZW4gdHJlZSBvcmRlci4KKyAgICAgICAgZm9yIChhdXRvKiBib3ggOiBuZWdhdGl2ZVpP
cmRlckxpc3QpCisgICAgICAgICAgICBwYWludFN0YWNraW5nQ29udGV4dCgqYm94LCBjb250ZXh0
LCBkaXJ0eVJlY3QpOworCisgICAgICAgIHBhaW50RGVzY2VuZGFudHMoY29udGFpbmVyQm94KTsK
KworICAgICAgICAvLyBBbGwgcG9zaXRpb25lZCBkZXNjZW5kYW50cyB3aXRoICd6LWluZGV4OiBh
dXRvJyBvciAnei1pbmRleDogMCcsIGluIHRyZWUgb3JkZXIuIEZvciB0aG9zZSB3aXRoICd6LWlu
ZGV4OiBhdXRvJywgdHJlYXQgdGhlIGVsZW1lbnQKKyAgICAgICAgLy8gYXMgaWYgaXQgY3JlYXRl
ZCBhIG5ldyBzdGFja2luZyBjb250ZXh0LCBidXQgYW55IHBvc2l0aW9uZWQgZGVzY2VuZGFudHMg
YW5kIGRlc2NlbmRhbnRzIHdoaWNoIGFjdHVhbGx5IGNyZWF0ZSBhIG5ldyBzdGFja2luZyBjb250
ZXh0CisgICAgICAgIC8vIHNob3VsZCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHBhcmVudCBz
dGFja2luZyBjb250ZXh0LCBub3QgdGhpcyBuZXcgb25lLiBGb3IgdGhvc2Ugd2l0aCAnei1pbmRl
eDogMCcsIHRyZWF0IHRoZSBzdGFja2luZyBjb250ZXh0CisgICAgICAgIC8vIGdlbmVyYXRlZCBh
dG9taWNhbGx5LgorICAgICAgICBmb3IgKGF1dG8qIGJveCA6IHBvc2l0aXZlWk9yZGVyTGlzdCkg
eworICAgICAgICAgICAgaWYgKGJveC0+c3R5bGUoKS5pc1N0YWNraW5nQ29udGV4dCgpKQorICAg
ICAgICAgICAgICAgIHBhaW50U3RhY2tpbmdDb250ZXh0KCpib3gsIGNvbnRleHQsIGRpcnR5UmVj
dCk7CisgICAgICAgICAgICBlbHNlIGlmIChpczxDb250YWluZXJCb3g+KCpib3gpKSB7CisgICAg
ICAgICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucygqYm94LCBjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBwYWludERlc2NlbmRhbnRzKGRvd25jYXN0PENvbnRhaW5lckJveD4oKmJveCkpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcGFpbnRCb3goKmJveCwgY29udGV4
dCwgZGlydHlSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBDU1NQYWludGVyOjpp
c1N0YWNraW5nQ29udGV4dFBhaW50aW5nQm91bmRhcnkoY29uc3QgQm94JiBib3gpCit7CisgICAg
cmV0dXJuIGJveC5zdHlsZSgpLmlzU3RhY2tpbmdDb250ZXh0KCk7Cit9CisKK3ZvaWQgQ1NTUGFp
bnRlcjo6cmVjdXJzaXZlQ29sbGVjdExheWVycyhjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5l
ckJveCwgVmVjdG9yPGNvbnN0IEJveCo+JiBuZWdhdGl2ZVpPcmRlckxpc3QsIFZlY3Rvcjxjb25z
dCBCb3gqPiYgcG9zaXRpdmVaT3JkZXJMaXN0KQoreworICAgIGZvciAoY29uc3QgYXV0byogY2hp
bGQgPSBjb250YWluZXJCb3guZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCkucGFydGljaXBhdGVzSW5a
T3JkZXJTb3J0aW5nKCkpIHsKKyAgICAgICAgICAgIGF1dG8gekluZGV4ID0gY2hpbGQtPnN0eWxl
KCkuekluZGV4KCkudmFsdWVPcigwKTsKKworICAgICAgICAgICAgaWYgKHpJbmRleCA8IDApCisg
ICAgICAgICAgICAgICAgbmVnYXRpdmVaT3JkZXJMaXN0LmFwcGVuZChjaGlsZCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcG9zaXRpdmVaT3JkZXJMaXN0LmFwcGVuZChjaGls
ZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHRQYWludGluZ0Jv
dW5kYXJ5KCpjaGlsZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoaXM8
Q29udGFpbmVyQm94PigqY2hpbGQpKQorICAgICAgICAgICAgcmVjdXJzaXZlQ29sbGVjdExheWVy
cyhkb3duY2FzdDxDb250YWluZXJCb3g+KCpjaGlsZCksIG5lZ2F0aXZlWk9yZGVyTGlzdCwgcG9z
aXRpdmVaT3JkZXJMaXN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFpbnRlcjo6cGFpbnRUcmVl
KGNvbnN0IFRyZWUmIGRpc3BsYXlUcmVlLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBwYWludFN0YWNraW5nQ29udGV4dChkaXNwbGF5
VHJlZS5yb290Qm94KCksIGNvbnRleHQsIGRpcnR5UmVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUNTU1BhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlDU1NQYWludGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE2ZGQyZmJiNTA0MGY3OWM0MmIyNjAzM2I2
Mjg2OTdmYjJlNGU4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlDU1NQYWludGVyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNp
bmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UmVjdDsKKwor
bmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFzcyBCb3g7CitjbGFzcyBDb250YWluZXJCb3g7Citj
bGFzcyBUcmVlOworCitjbGFzcyBDU1NQYWludGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCBwYWludFN0YWNraW5nQ29udGV4dChjb25zdCBCb3gmLCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHBhaW50VHJlZShj
b25zdCBUcmVlJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsK
KworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBhaW50Qm94KGNvbnN0IEJveCYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgc3RhdGljIHZvaWQg
cGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3gmLCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBz
dGF0aWMgdm9pZCBwYWludEJveENvbnRlbnQoY29uc3QgQm94JiwgR3JhcGhpY3NDb250ZXh0Jik7
CisKKyAgICBlbnVtIGNsYXNzIFBhaW50UGhhc2UgeworICAgICAgICBCbG9ja0JhY2tncm91bmRz
LAorICAgICAgICBGbG9hdHMsCisgICAgICAgIEJsb2NrRm9yZWdyb3VuZHMKKyAgICB9OworICAg
IHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZVBhaW50RGVzY2VuZGFudHMoY29uc3QgQ29udGFpbmVyQm94
JiwgR3JhcGhpY3NDb250ZXh0JiwgUGFpbnRQaGFzZSk7CisKKyAgICBzdGF0aWMgYm9vbCBpc1N0
YWNraW5nQ29udGV4dFBhaW50aW5nQm91bmRhcnkoY29uc3QgQm94Jik7CisgICAgc3RhdGljIHZv
aWQgcmVjdXJzaXZlQ29sbGVjdExheWVycyhjb25zdCBDb250YWluZXJCb3gmLCBWZWN0b3I8Y29u
c3QgQm94Kj4mIG5lZ2F0aXZlWk9yZGVyTGlzdCwgVmVjdG9yPGNvbnN0IEJveCo+JiBwb3NpdGl2
ZVpPcmRlckxpc3QpOworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVy
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWluZXJCb3gu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJkYjYwZGI4Zjc2MTdiZGMxMzg5NzY1YmI3NGQ0YTUxODNhOWU4NmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29u
dGFpbmVyQm94LmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlDb250YWluZXJCb3guaCIKKworI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheVN0eWxlLmgiCisj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIERpc3BsYXkgeworCitDb250YWluZXJCb3g6OkNvbnRhaW5lckJveChBYnNvbHV0
ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlKQorICAgIDogQm94KGJv
cmRlckJveCwgV1RGTW92ZShkaXNwbGF5U3R5bGUpLCB7IEZsYWdzOjpDb250YWluZXJCb3ggfSkK
K3sKK30KKwordm9pZCBDb250YWluZXJCb3g6OnNldEZpcnN0Q2hpbGQoc3RkOjp1bmlxdWVfcHRy
PEJveD4mJiBib3gpCit7CisgICAgbV9maXJzdENoaWxkID0gV1RGTW92ZShib3gpOworfQorCitT
dHJpbmcgQ29udGFpbmVyQm94OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0
U3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgImNvbnRhaW5lciBib3ggIiA8PCBib3JkZXJC
b3hGcmFtZSgpIDw8ICIgKCIgPDwgdGhpcyA8PCAiKSI7CisgICAgcmV0dXJuIHN0cmVhbS5yZWxl
YXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5oIGIv
U291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBmNjI3NmM1NGNmYzQ4NmUwMTJjNjcxNjQ2Njg5Zjk1ZTZhOWEyZDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworY2xhc3MgQ29udGFp
bmVyQm94IDogcHVibGljIEJveCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9I
RUFQX0lERU5USUZJRVIoQ29udGFpbmVyQm94KTsKK3B1YmxpYzoKKyAgICBDb250YWluZXJCb3go
QWJzb2x1dGVGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmKTsKKyAgICAKKyAgICBjb25zdCBC
b3gqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQuZ2V0KCk7IH0KKyAg
ICB2b2lkIHNldEZpcnN0Q2hpbGQoc3RkOjp1bmlxdWVfcHRyPEJveD4mJik7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxCb3g+IG1fZmlyc3RDaGlsZDsKK307CisKK30gLy8gbmFtZXNwYWNlIERp
c3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZX0JPWChDb250YWluZXJCb3gsIGlzQ29udGFpbmVyQm94KCkpCisKKyNlbmRpZiAvLyBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1Yjk4Mzc2MjMzM2QxODRj
YjkwMzRlZjJlNjllNDI0NDkzMzkxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUltYWdlQm94Lmgi
CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitJbWFnZUJveDo6SW1hZ2VCb3goQWJzb2x1
dGVGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmIGRpc3BsYXlTdHlsZSwgQWJzb2x1dGVGbG9h
dFJlY3QgcmVwbGFjZWRDb250ZW50UmVjdCkKKyAgICA6IFJlcGxhY2VkQm94KGJvcmRlckJveCwg
V1RGTW92ZShkaXNwbGF5U3R5bGUpLCB7IEZsYWdzOjpJbWFnZUJveCB9LCByZXBsYWNlZENvbnRl
bnRSZWN0KQoreworfQorCit2b2lkIEltYWdlQm94OjpzZXRJbWFnZShJbWFnZSogaW1hZ2UpCit7
CisgICAgbV9pbWFnZSA9IGltYWdlOworfQorCitTdHJpbmcgSW1hZ2VCb3g6OmRlYnVnRGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCAi
aW1hZ2UgYm94ICIgPDwgYm9yZGVyQm94RnJhbWUoKSA8PCAiICgiIDw8IHRoaXMgPDwgIikgcmVw
bGFjZWQgY29udGVudCByZWN0OiAiIDw8IHJlcGxhY2VkQ29udGVudFJlY3QoKSA8PCAiIGltYWdl
OiAiIDw8IG1faW1hZ2UuZ2V0KCk7CisgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWE3ZjU2ZDYwMmY3Mzg3
NGM1ZGUyNWJmNzhiNzkxNGU1YmYxZTkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCisKKyNpbmNsdWRlICJEaXNwbGF5UmVwbGFjZWRCb3guaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZTsKKworbmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFzcyBTdHls
ZTsKKworY2xhc3MgSW1hZ2VCb3ggOiBwdWJsaWMgUmVwbGFjZWRCb3ggeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQm94KTsKK3B1YmxpYzoK
KyAgICBJbWFnZUJveChBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIEFic29s
dXRlRmxvYXRSZWN0IHJlcGxhY2VkQ29udGVudFJlY3QpOworICAgIAorICAgIEltYWdlKiBpbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlKElt
YWdlKik7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBm
aW5hbDsKKworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZX0JPWChJbWFnZUJveCwgaXNJbWFnZUJveCgpKQorCisjZW5kaWYgLy8gRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTA3NTBhOGQyZjBmNjI1
NDFmZjA0MDA5ZjZkZWQxZjM1NTJjY2NhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlSZXBsYWNl
ZEJveC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgRGlzcGxheSB7CisKK1JlcGxhY2VkQm94OjpSZXBsYWNlZEJveChBYnNvbHV0ZUZsb2F0
UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlLCBPcHRpb25TZXQ8RmxhZ3M+IGZs
YWdzLCBBYnNvbHV0ZUZsb2F0UmVjdCByZXBsYWNlZENvbnRlbnRSZWN0KQorICAgIDogQm94KGJv
cmRlckJveCwgV1RGTW92ZShkaXNwbGF5U3R5bGUpLCBmbGFncykKKyAgICAsIG1fcmVwbGFjZWRD
b250ZW50UmVjdChyZXBsYWNlZENvbnRlbnRSZWN0KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheVJlcGxhY2VkQm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzBlYzViMzY3NGVjYzIwNmI2ZGQ0ZjNhYzA5
MzZmZWY5ZGE5NTJjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiRGlzcGxheUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
RGlzcGxheSB7CisKK2NsYXNzIFJlcGxhY2VkQm94IDogcHVibGljIEJveCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVwbGFjZWRCb3gpOworcHVi
bGljOgorICAgIFJlcGxhY2VkQm94KEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUm
JiwgT3B0aW9uU2V0PEZsYWdzPiwgQWJzb2x1dGVGbG9hdFJlY3QgcmVwbGFjZWRDb250ZW50UmVj
dCk7CisgICAgCisgICAgQWJzb2x1dGVGbG9hdFJlY3QgcmVwbGFjZWRDb250ZW50UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwbGFjZWRDb250ZW50UmVjdDsgfQorCitwcml2YXRlOgorICAgIEFi
c29sdXRlRmxvYXRSZWN0IG1fcmVwbGFjZWRDb250ZW50UmVjdDsKK307CisKK30gLy8gbmFtZXNw
YWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZX0JPWChSZXBsYWNlZEJveCwgaXNSZXBsYWNlZEJveCgpKQorCisjZW5kaWYg
Ly8gRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDBhZjdmZjc0YjVkMjYwZmNh
OTAwMzNmYzE1YjM2Y2ViNDRiZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCb3JkZXJEYXRh
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKK1N0
eWxlOjpTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgbV9iYWNrZ3JvdW5k
Q29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpOworCisgICAgY29uc3QgYXV0byYgYm9yZGVyRGF0YSA9IHN0
eWxlLmJvcmRlcigpOworICAgIAorICAgIGF1dG8gYm9yZGVyVmFsdWVXaXRoUmVzb2x2ZWRDb2xv
ciA9IFsmc3R5bGVdKGNvbnN0IEJvcmRlclZhbHVlJiB2YWx1ZSwgQ1NTUHJvcGVydHlJRCBjb2xv
clByb3BlcnR5SUQpIHsKKyAgICAgICAgYXV0byByZXNvbHZlZFZhbHVlID0gdmFsdWU7CisgICAg
ICAgIHJlc29sdmVkVmFsdWUuc2V0Q29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yV2l0
aENvbG9yRmlsdGVyKGNvbG9yUHJvcGVydHlJRCkpOworICAgICAgICByZXR1cm4gcmVzb2x2ZWRW
YWx1ZTsKKyAgICB9OworICAgIAorICAgIG1fYm9yZGVyLmxlZnQgPSBib3JkZXJWYWx1ZVdpdGhS
ZXNvbHZlZENvbG9yKGJvcmRlckRhdGEubGVmdCgpLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xv
cik7CisgICAgbV9ib3JkZXIucmlnaHQgPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJv
cmRlckRhdGEucmlnaHQoKSwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yKTsKKyAgICBtX2Jv
cmRlci50b3AgPSBib3JkZXJWYWx1ZVdpdGhSZXNvbHZlZENvbG9yKGJvcmRlckRhdGEudG9wKCks
IENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpOworICAgIG1fYm9yZGVyLmJvdHRvbSA9IGJvcmRl
clZhbHVlV2l0aFJlc29sdmVkQ29sb3IoYm9yZGVyRGF0YS5ib3R0b20oKSwgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21Db2xvcik7CisKKyAgICBtX2JvcmRlci5pbWFnZSA9IGJvcmRlckRhdGEuaW1h
Z2UoKTsKKworICAgIGlmICghc3R5bGUuaGFzQXV0b1VzZWRaSW5kZXgoKSkKKyAgICAgICAgbV96
SW5kZXggPSBzdHlsZS51c2VkWkluZGV4KCk7CisKKyAgICBzZXRJc1Bvc2l0aW9uZWQoc3R5bGUu
cG9zaXRpb24oKSAhPSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisgICAgc2V0SXNGbG9hdGluZyhz
dHlsZS5mbG9hdGluZygpICE9IEZsb2F0OjpObyk7Cit9CisKK2Jvb2wgU3R5bGU6Omhhc0JhY2tn
cm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tncm91bmRDb2xvci5pc1Zpc2libGUo
KSB8fCBoYXNCYWNrZ3JvdW5kSW1hZ2UoKTsKK30KKworYm9vbCBTdHlsZTo6aGFzVmlzaWJsZUJv
cmRlcigpIGNvbnN0Cit7CisgICAgYm9vbCBoYXZlSW1hZ2UgPSBtX2JvcmRlci5pbWFnZS5oYXNJ
bWFnZSgpOworICAgIHJldHVybiBtX2JvcmRlci5sZWZ0LmlzVmlzaWJsZSghaGF2ZUltYWdlKSB8
fCBtX2JvcmRlci5yaWdodC5pc1Zpc2libGUoIWhhdmVJbWFnZSkgfHwgbV9ib3JkZXIudG9wLmlz
VmlzaWJsZSghaGF2ZUltYWdlKSB8fCBtX2JvcmRlci5ib3R0b20uaXNWaXNpYmxlKCFoYXZlSW1h
Z2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oIGIvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmUwYzViNzNhZjYz
OGFiMjA0YzZlMjk4YjAwMDVlY2FkY2Y5ZWZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQorCisjaW5jbHVkZSAiQm9yZGVyVmFsdWUuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgIk5pbmVQaWVjZUltYWdlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworbmFtZXNwYWNlIERpc3Bs
YXkgeworCisvLyBTdHlsZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcGFpbnQgYSBEaXNwbGF5OjpC
b3guCisvLyBBbGwgY29sb3JzIHNob3VsZCBiZSByZXNvbHZlZCB0byB0aGVpciBwYWludGVkIHZh
bHVlcyBbdmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKCldLgorLy8gU2hvdWxk
IGNvbnRhaW4gb25seSBhYnNvbHV0ZSBmbG9hdCB2YWx1ZXM7IG5vIExlbmd0aHMgKHdoaWNoIGNh
biBjb250YWluIGNhbGMgdmFsdWVzKS4KKworY2xhc3MgU3R5bGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFN0eWxlKTsKK3B1YmxpYzoKKworICAg
IGVudW0gY2xhc3MgRmxhZ3MgOiB1aW50OF90IHsKKyAgICAgICAgUG9zaXRpb25lZCAgPSAxIDw8
IDAsCisgICAgICAgIEZsb2F0aW5nICAgID0gMSA8PCAxLAorICAgIH07CisKKyAgICBleHBsaWNp
dCBTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIAorICAgIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQorICAgIGJv
b2wgaGFzQmFja2dyb3VuZCgpIGNvbnN0OworICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gRklYTUUKKworICAgIGJvb2wgaGFzVmlzaWJsZUJv
cmRlcigpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gbV9ib3JkZXIubGVmdDsgfQorICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJS
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyLnJpZ2h0OyB9CisgICAgY29uc3QgQm9yZGVy
VmFsdWUmIGJvcmRlclRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyLnRvcDsgfQorICAgIGNv
bnN0IEJvcmRlclZhbHVlJiBib3JkZXJCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvcmRlci5i
b3R0b207IH0KKworICAgIE9wdGlvbmFsPGludD4gekluZGV4KCkgY29uc3QgeyByZXR1cm4gbV96
SW5kZXg7IH0KKyAgICBib29sIGlzU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV96
SW5kZXguaGFzVmFsdWUoKTsgfQorICAgIAorICAgIGJvb2wgaXNQb3NpdGlvbmVkKCkgY29uc3Qg
eyByZXR1cm4gbV9mbGFncy5jb250YWlucyhGbGFnczo6UG9zaXRpb25lZCk7IH0KKyAgICBib29s
IGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpGbG9h
dGluZyk7IH0KKworICAgIGJvb2wgcGFydGljaXBhdGVzSW5aT3JkZXJTb3J0aW5nKCkgY29uc3Qg
eyByZXR1cm4gaXNQb3NpdGlvbmVkKCkgfHwgaXNTdGFja2luZ0NvbnRleHQoKTsgfQorCitwcml2
YXRlOgorICAgIHZvaWQgc2V0SXNQb3NpdGlvbmVkKGJvb2wgdmFsdWUpIHsgbV9mbGFncy5zZXQo
eyBGbGFnczo6UG9zaXRpb25lZCB9LCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldElzRmxvYXRpbmco
Ym9vbCB2YWx1ZSkgeyBtX2ZsYWdzLnNldCh7IEZsYWdzOjpGbG9hdGluZyB9LCB2YWx1ZSk7IH0K
KworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworCisgICAgc3RydWN0IHsKKyAgICAgICAg
Qm9yZGVyVmFsdWUgbGVmdDsKKyAgICAgICAgQm9yZGVyVmFsdWUgcmlnaHQ7CisgICAgICAgIEJv
cmRlclZhbHVlIHRvcDsKKyAgICAgICAgQm9yZGVyVmFsdWUgYm90dG9tOworCisgICAgICAgIE5p
bmVQaWVjZUltYWdlIGltYWdlOworICAgIH0gbV9ib3JkZXI7CisKKyAgICBPcHRpb25hbDxpbnQ+
IG1fekluZGV4OworICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIERpc3BsYXkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3MzE3ZjZmZDUwMTg5ZmVjMjY3ZDJiMjdhZTkxNDI3MmRiYzBhMDc4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpc3BsYXlCb3gu
aCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNl
IERpc3BsYXkgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQm94KTsKLQotQm94OjpC
b3goY29uc3QgQm94JiBvdGhlcikKLSAgICA6IG1fdG9wTGVmdChvdGhlci5tX3RvcExlZnQpCi0g
ICAgLCBtX2NvbnRlbnRXaWR0aChvdGhlci5tX2NvbnRlbnRXaWR0aCkKLSAgICAsIG1fY29udGVu
dEhlaWdodChvdGhlci5tX2NvbnRlbnRIZWlnaHQpCi0gICAgLCBtX2hvcml6b250YWxNYXJnaW4o
b3RoZXIubV9ob3Jpem9udGFsTWFyZ2luKQotICAgICwgbV92ZXJ0aWNhbE1hcmdpbihvdGhlci5t
X3ZlcnRpY2FsTWFyZ2luKQotICAgICwgbV9oYXNDbGVhcmFuY2Uob3RoZXIubV9oYXNDbGVhcmFu
Y2UpCi0gICAgLCBtX2JvcmRlcihvdGhlci5tX2JvcmRlcikKLSAgICAsIG1fcGFkZGluZyhvdGhl
ci5tX3BhZGRpbmcpCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAsIG1faGFzVmFsaWRUb3Aob3Ro
ZXIubV9oYXNWYWxpZFRvcCkKLSAgICAsIG1faGFzVmFsaWRMZWZ0KG90aGVyLm1faGFzVmFsaWRM
ZWZ0KQotICAgICwgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4ob3RoZXIubV9oYXNWYWxpZEhv
cml6b250YWxNYXJnaW4pCi0gICAgLCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4ob3RoZXIubV9o
YXNWYWxpZFZlcnRpY2FsTWFyZ2luKQotICAgICwgbV9oYXNWYWxpZEJvcmRlcihvdGhlci5tX2hh
c1ZhbGlkQm9yZGVyKQotICAgICwgbV9oYXNWYWxpZFBhZGRpbmcob3RoZXIubV9oYXNWYWxpZFBh
ZGRpbmcpCi0gICAgLCBtX2hhc1ZhbGlkQ29udGVudEhlaWdodChvdGhlci5tX2hhc1ZhbGlkQ29u
dGVudEhlaWdodCkKLSAgICAsIG1faGFzVmFsaWRDb250ZW50V2lkdGgob3RoZXIubV9oYXNWYWxp
ZENvbnRlbnRXaWR0aCkKLSAgICAsIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUob3RoZXIu
bV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSkKLSNlbmRpZgotewotfQotCi1Cb3g6On5Cb3go
KQotewotfQotCi1SZWN0IEJveDo6bWFyZ2luQm94KCkgY29uc3QKLXsKLSAgICBhdXRvIGJvcmRl
ckJveCA9IHRoaXMtPmJvcmRlckJveCgpOwotCi0gICAgUmVjdCBtYXJnaW5Cb3g7Ci0gICAgbWFy
Z2luQm94LnNldFRvcChib3JkZXJCb3gudG9wKCkgLSBtYXJnaW5CZWZvcmUoKSk7Ci0gICAgbWFy
Z2luQm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSAtIG1hcmdpblN0YXJ0KCkpOwotICAgIG1h
cmdpbkJveC5zZXRIZWlnaHQoYm9yZGVyQm94LmhlaWdodCgpICsgbWFyZ2luQmVmb3JlKCkgKyBt
YXJnaW5BZnRlcigpKTsKLSAgICBtYXJnaW5Cb3guc2V0V2lkdGgoYm9yZGVyQm94LndpZHRoKCkg
KyBtYXJnaW5TdGFydCgpICsgbWFyZ2luRW5kKCkpOwotICAgIHJldHVybiBtYXJnaW5Cb3g7Ci19
Ci0KLVJlY3QgQm94Ojpib3JkZXJCb3goKSBjb25zdAotewotICAgIFJlY3QgYm9yZGVyQm94Owot
ICAgIGJvcmRlckJveC5zZXRUb3BMZWZ0KHsgfSk7Ci0gICAgYm9yZGVyQm94LnNldFNpemUoeyB3
aWR0aCgpLCBoZWlnaHQoKSB9KTsKLSAgICByZXR1cm4gYm9yZGVyQm94OwotfQotCi1SZWN0IEJv
eDo6cGFkZGluZ0JveCgpIGNvbnN0Ci17Ci0gICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3Jk
ZXJCb3goKTsKLQotICAgIFJlY3QgcGFkZGluZ0JveDsKLSAgICBwYWRkaW5nQm94LnNldFRvcChi
b3JkZXJCb3gudG9wKCkgKyBib3JkZXJUb3AoKSk7Ci0gICAgcGFkZGluZ0JveC5zZXRMZWZ0KGJv
cmRlckJveC5sZWZ0KCkgKyBib3JkZXJMZWZ0KCkpOwotICAgIHBhZGRpbmdCb3guc2V0SGVpZ2h0
KGJvcmRlckJveC5ib3R0b20oKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwotICAg
IHBhZGRpbmdCb3guc2V0V2lkdGgoYm9yZGVyQm94LndpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBi
b3JkZXJSaWdodCgpKTsKLSAgICByZXR1cm4gcGFkZGluZ0JveDsKLX0KLQotUmVjdCBCb3g6OmNv
bnRlbnRCb3goKSBjb25zdAotewotICAgIFJlY3QgY29udGVudEJveDsKLSAgICBjb250ZW50Qm94
LnNldFRvcChjb250ZW50Qm94VG9wKCkpOwotICAgIGNvbnRlbnRCb3guc2V0TGVmdChjb250ZW50
Qm94TGVmdCgpKTsKLSAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3hXaWR0aCgpKTsK
LSAgICBjb250ZW50Qm94LnNldEhlaWdodChjb250ZW50Qm94SGVpZ2h0KCkpOwotICAgIHJldHVy
biBjb250ZW50Qm94OwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGMxZjk0NmFlYWM0N2ZjMjU1ZGI3ZjBmNGJhZGVjZjlhNjM3MjY3NmIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaAorKysgL2Rldi9udWxsCkBAIC0xLDQxNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkRpc3BsYXlSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
VW5pdHMuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBEaXNwbGF5IHsKLQotY2xhc3MgQm94IHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKEJveCk7Ci1wdWJsaWM6Ci0gICAgQm94KGNvbnN0IEJveCYpOwotICAgIEJveCgp
ID0gZGVmYXVsdDsKLSAgICB+Qm94KCk7Ci0KLSAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgYm90dG9tKCkgY29u
c3QgeyByZXR1cm4gdG9wKCkgKyBoZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgcmlnaHQoKSBj
b25zdCB7IHJldHVybiBsZWZ0KCkgKyB3aWR0aCgpOyB9Ci0KLSAgICBMYXlvdXRQb2ludCB0b3BM
ZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0UG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdCB7IHJldHVy
biB7IHJpZ2h0KCksIGJvdHRvbSgpIH07IH0KLQotICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHsgd2lkdGgoKSwgaGVpZ2h0KCkgfTsgfQotICAgIExheW91dFVuaXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKSArIGJvcmRl
clJpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRl
clRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVyQm90dG9tKCk7IH0KLSAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkuaXNFbXB0eSgpOyB9Ci0gICAgUmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4geyB0b3AoKSwgbGVmdCgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9
OyB9Ci0gICAgUmVjdCByZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIHsgdG9wKCkgLSBt
YXJnaW5CZWZvcmUoKSwgbGVmdCgpIC0gbWFyZ2luU3RhcnQoKSwgbWFyZ2luU3RhcnQoKSArIHdp
ZHRoKCkgKyBtYXJnaW5FbmQoKSwgbWFyZ2luQmVmb3JlKCkgKyBoZWlnaHQoKSArIG1hcmdpbkFm
dGVyKCkgfTsgfQotCi0gICAgc3RydWN0IFZlcnRpY2FsTWFyZ2luIHsKLSAgICAgICAgTGF5b3V0
VW5pdCBiZWZvcmU7Ci0gICAgICAgIExheW91dFVuaXQgYWZ0ZXI7Ci0gICAgfTsKLSAgICBWZXJ0
aWNhbE1hcmdpbiB2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OwotCi0gICAgc3RydWN0IEhvcml6b250
YWxNYXJnaW4gewotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0OwotICAgICAgICBMYXlvdXRVbml0
IGVuZDsKLSAgICB9OwotICAgIEhvcml6b250YWxNYXJnaW4gaG9yaXpvbnRhbE1hcmdpbigpIGNv
bnN0OwotICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5p
dCBtYXJnaW5TdGFydCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXIoKSBjb25z
dDsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCgpIGNvbnN0OwotICAgIGJvb2wgaGFzQ2xlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDbGVhcmFuY2U7IH0KLQotICAgIExheW91dFVuaXQg
Ym9yZGVyVG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJMZWZ0KCkgY29uc3Q7Ci0g
ICAgTGF5b3V0VW5pdCBib3JkZXJCb3R0b20oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRl
clJpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbEJvcmRlcigpIGNvbnN0IHsg
cmV0dXJuIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7IH0KLSAgICBMYXlvdXRVbml0IGhv
cml6b250YWxCb3JkZXIoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdo
dCgpOyB9Ci0KLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nVG9wKCkgY29uc3Q7Ci0g
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICBPcHRpb25h
bDxMYXlvdXRVbml0PiBwYWRkaW5nQm90dG9tKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gcGFkZGluZ1JpZ2h0KCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdmVy
dGljYWxQYWRkaW5nKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gaG9yaXpvbnRh
bFBhZGRpbmcoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgY29udGVudEJveFRvcCgpIGNvbnN0
IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSArIHBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOyB9Ci0g
ICAgTGF5b3V0VW5pdCBjb250ZW50Qm94TGVmdCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hM
ZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRl
bnRCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb250ZW50Qm94VG9wKCkgKyBjb250ZW50Qm94
SGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hSaWdodCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnRlbnRCb3hMZWZ0KCkgKyBjb250ZW50Qm94V2lkdGgoKTsgfQotICAgIExheW91dFVu
aXQgY29udGVudEJveEhlaWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29udGVudEJveFdp
ZHRoKCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hUb3AoKSBjb25zdCB7IHJl
dHVybiBib3JkZXJUb3AoKTsgfQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveExlZnQoKSBjb25z
dCB7IHJldHVybiBib3JkZXJMZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hCb3R0
b20oKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCk7
IH0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRp
bmdCb3hMZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgcGFkZGlu
Z0JveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgY29u
dGVudEJveEhlaWdodCgpICsgcGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7IH0KLSAgICBMYXlv
dXRVbml0IHBhZGRpbmdCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdMZWZ0KCkudmFs
dWVPcigwKSArIGNvbnRlbnRCb3hXaWR0aCgpICsgcGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsg
fQotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3Jk
ZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpOyB9Ci0gICAgTGF5
b3V0VW5pdCBib3JkZXJCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdCb3hXaWR0aCgpICsgYm9yZGVyUmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgbWFyZ2lu
Qm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCkgKyBib3JkZXJCb3hIZWln
aHQoKSArIG1hcmdpbkFmdGVyKCk7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpbkJveFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGJvcmRlckJveFdpZHRoKCkgKyBtYXJnaW5F
bmQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmco
KSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKSArIHZlcnRpY2FsQm9yZGVyKCkgKyB2ZXJ0
aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luQWZ0ZXIoKTsgfQotICAgIExheW91dFVu
aXQgaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtYXJn
aW5TdGFydCgpICsgaG9yaXpvbnRhbEJvcmRlcigpICsgaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1
ZU9yKDApICsgbWFyZ2luRW5kKCk7IH0KLQotICAgIFJlY3QgbWFyZ2luQm94KCkgY29uc3Q7Ci0g
ICAgUmVjdCBib3JkZXJCb3goKSBjb25zdDsKLSAgICBSZWN0IHBhZGRpbmdCb3goKSBjb25zdDsK
LSAgICBSZWN0IGNvbnRlbnRCb3goKSBjb25zdDsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
dm9pZCBzZXRIYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgpIHsgbV9oYXNQcmVjb21wdXRlZE1h
cmdpbkJlZm9yZSA9IHRydWU7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBzZXRUb3BMZWZ0KGNvbnN0
IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBz
ZXRMZWZ0KExheW91dFVuaXQpOwotICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0
IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZShvZmZzZXQsIDBfbHUpOyB9Ci0gICAgdm9pZCBtb3Zl
VmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZSgwX2x1LCBvZmZz
ZXQpOyB9Ci0gICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUpIHsgbV90b3BMZWZ0
Lm1vdmUoc2l6ZSk7IH0KLSAgICB2b2lkIG1vdmVCeShMYXlvdXRQb2ludCBvZmZzZXQpIHsgbV90
b3BMZWZ0Lm1vdmVCeShvZmZzZXQpOyB9Ci0KLSAgICB2b2lkIHNldENvbnRlbnRCb3hIZWlnaHQo
TGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRDb250ZW50Qm94V2lkdGgoTGF5b3V0VW5pdCk7Ci0K
LSAgICB2b2lkIHNldEhvcml6b250YWxNYXJnaW4oSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgdm9p
ZCBzZXRWZXJ0aWNhbE1hcmdpbihWZXJ0aWNhbE1hcmdpbik7Ci0gICAgdm9pZCBzZXRIYXNDbGVh
cmFuY2UoKSB7IG1faGFzQ2xlYXJhbmNlID0gdHJ1ZTsgfQotCi0gICAgdm9pZCBzZXRCb3JkZXIo
TGF5b3V0OjpFZGdlcyk7Ci0KLSAgICB2b2lkIHNldFZlcnRpY2FsUGFkZGluZyhMYXlvdXQ6OlZl
cnRpY2FsRWRnZXMpOwotICAgIHZvaWQgc2V0UGFkZGluZyhPcHRpb25hbDxMYXlvdXQ6OkVkZ2Vz
Pik7Ci0KLXByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2b2lkIGludmFsaWRhdGVN
YXJnaW4oKTsKLSAgICB2b2lkIGludmFsaWRhdGVCb3JkZXIoKSB7IG1faGFzVmFsaWRCb3JkZXIg
PSBmYWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVBhZGRpbmcoKSB7IG1faGFzVmFsaWRQYWRk
aW5nID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFsaWRhdGVQcmVjb21wdXRlZE1hcmdpbkJlZm9y
ZSgpIHsgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IGZhbHNlOyB9Ci0KLSAgICB2b2lk
IHNldEhhc1ZhbGlkVG9wKCkgeyBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0
SGFzVmFsaWRMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7IH0KLSAgICB2b2lkIHNldEhh
c1ZhbGlkVmVydGljYWxNYXJnaW4oKSB7IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiA9IHRydWU7
IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbigpIHsgbV9oYXNWYWxpZEhv
cml6b250YWxNYXJnaW4gPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHNldEhhc1ZhbGlkQm9yZGVyKCkg
eyBtX2hhc1ZhbGlkQm9yZGVyID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRQYWRkaW5n
KCkgeyBtX2hhc1ZhbGlkUGFkZGluZyA9IHRydWU7IH0KLQotICAgIHZvaWQgc2V0SGFzVmFsaWRD
b250ZW50SGVpZ2h0KCkgeyBtX2hhc1ZhbGlkQ29udGVudEhlaWdodCA9IHRydWU7IH0KLSAgICB2
b2lkIHNldEhhc1ZhbGlkQ29udGVudFdpZHRoKCkgeyBtX2hhc1ZhbGlkQ29udGVudFdpZHRoID0g
dHJ1ZTsgfQotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi0KLSAgICBMYXlvdXRQb2ludCBtX3Rv
cExlZnQ7Ci0gICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRXaWR0aDsKLSAgICBMYXlvdXRVbml0IG1f
Y29udGVudEhlaWdodDsKLQotICAgIEhvcml6b250YWxNYXJnaW4gbV9ob3Jpem9udGFsTWFyZ2lu
OwotICAgIFZlcnRpY2FsTWFyZ2luIG1fdmVydGljYWxNYXJnaW47Ci0gICAgYm9vbCBtX2hhc0Ns
ZWFyYW5jZSB7IGZhbHNlIH07Ci0KLSAgICBMYXlvdXQ6OkVkZ2VzIG1fYm9yZGVyOwotICAgIE9w
dGlvbmFsPExheW91dDo6RWRnZXM+IG1fcGFkZGluZzsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRMZWZ0
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1ZhbGlkQm9yZGVyIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRQYWRkaW5n
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRDb250ZW50SGVpZ2h0IHsgZmFsc2UgfTsK
LSAgICBib29sIG1faGFzVmFsaWRDb250ZW50V2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB7IGZhbHNlIH07Ci0jZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQKLX07Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotaW5saW5lIHZvaWQgQm94OjppbnZhbGlk
YXRlTWFyZ2luKCkKLXsKLSAgICBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbiA9IGZhbHNlOwot
ICAgIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiA9IGZhbHNlOwotfQotI2VuZGlmCi0KLWlubGlu
ZSBMYXlvdXRVbml0IEJveDo6dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRv
cCAmJiAobV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB8fCBtX2hhc1ZhbGlkVmVydGljYWxN
YXJnaW4pKTsKLSAgICByZXR1cm4gbV90b3BMZWZ0LnkoKTsKLX0KLQotaW5saW5lIExheW91dFVu
aXQgQm94OjpsZWZ0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9o
YXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX3RvcExlZnQueCgpOwotfQot
Ci1pbmxpbmUgTGF5b3V0UG9pbnQgQm94Ojp0b3BMZWZ0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9oYXNWYWxpZFRvcCAmJiAobV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB8fCBtX2hhc1Zh
bGlkVmVydGljYWxNYXJnaW4pKTsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNW
YWxpZEhvcml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX3RvcExlZnQ7Ci19Ci0KLWlubGlu
ZSB2b2lkIEJveDo6c2V0VG9wTGVmdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCkKLXsKLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkVG9wKCk7Ci0gICAgc2V0SGFzVmFsaWRM
ZWZ0KCk7Ci0jZW5kaWYKLSAgICBtX3RvcExlZnQgPSB0b3BMZWZ0OwotfQotCi1pbmxpbmUgdm9p
ZCBCb3g6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHNldEhhc1ZhbGlkVG9wKCk7Ci0jZW5kaWYKLSAgICBtX3RvcExlZnQuc2V0WSh0b3ApOwotfQot
Ci1pbmxpbmUgdm9pZCBCb3g6OnNldExlZnQoTGF5b3V0VW5pdCBsZWZ0KQotewotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRMZWZ0KCk7Ci0jZW5kaWYKLSAgICBtX3RvcExlZnQu
c2V0WChsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRDb250ZW50Qm94SGVpZ2h0KExh
eW91dFVuaXQgaGVpZ2h0KQoteyAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlk
Q29udGVudEhlaWdodCgpOwotI2VuZGlmCi0gICAgbV9jb250ZW50SGVpZ2h0ID0gaGVpZ2h0Owot
fQotCi1pbmxpbmUgdm9pZCBCb3g6OnNldENvbnRlbnRCb3hXaWR0aChMYXlvdXRVbml0IHdpZHRo
KQoteyAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkQ29udGVudFdpZHRoKCk7
Ci0jZW5kaWYKLSAgICBtX2NvbnRlbnRXaWR0aCA9IHdpZHRoOwotfQotCi1pbmxpbmUgTGF5b3V0
VW5pdCBCb3g6OmNvbnRlbnRCb3hIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1Zh
bGlkQ29udGVudEhlaWdodCk7Ci0gICAgcmV0dXJuIG1fY29udGVudEhlaWdodDsKLX0KLQotaW5s
aW5lIExheW91dFVuaXQgQm94Ojpjb250ZW50Qm94V2lkdGgoKSBjb25zdAotewotICAgIEFTU0VS
VChtX2hhc1ZhbGlkQ29udGVudFdpZHRoKTsKLSAgICByZXR1cm4gbV9jb250ZW50V2lkdGg7Ci19
Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0SG9yaXpvbnRhbE1hcmdpbihIb3Jpem9udGFsTWFyZ2lu
IG1hcmdpbikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkSG9yaXpvbnRh
bE1hcmdpbigpOwotI2VuZGlmCi0gICAgbV9ob3Jpem9udGFsTWFyZ2luID0gbWFyZ2luOwotfQot
Ci1pbmxpbmUgdm9pZCBCb3g6OnNldFZlcnRpY2FsTWFyZ2luKFZlcnRpY2FsTWFyZ2luIG1hcmdp
bikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkVmVydGljYWxNYXJnaW4o
KTsKLSAgICBpbnZhbGlkYXRlUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKTsKLSNlbmRpZgotICAg
IG1fdmVydGljYWxNYXJnaW4gPSBtYXJnaW47Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6c2V0Qm9y
ZGVyKExheW91dDo6RWRnZXMgYm9yZGVyKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0
SGFzVmFsaWRCb3JkZXIoKTsKLSNlbmRpZgotICAgIG1fYm9yZGVyID0gYm9yZGVyOwotfQotCi1p
bmxpbmUgdm9pZCBCb3g6OnNldFBhZGRpbmcoT3B0aW9uYWw8TGF5b3V0OjpFZGdlcz4gcGFkZGlu
ZykKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkUGFkZGluZygpOwotI2Vu
ZGlmCi0gICAgbV9wYWRkaW5nID0gcGFkZGluZzsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpzZXRW
ZXJ0aWNhbFBhZGRpbmcoTGF5b3V0OjpWZXJ0aWNhbEVkZ2VzIHZlcnRpY2FsUGFkZGluZykKLXsK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkUGFkZGluZygpOwotI2VuZGlmCi0g
ICAgbV9wYWRkaW5nID0gTGF5b3V0OjpFZGdlcyB7IG1fcGFkZGluZyA/IG1fcGFkZGluZy0+aG9y
aXpvbnRhbCA6IExheW91dDo6SG9yaXpvbnRhbEVkZ2VzKCksIHZlcnRpY2FsUGFkZGluZyB9Owot
fQotCi1pbmxpbmUgQm94OjpWZXJ0aWNhbE1hcmdpbiBCb3g6OnZlcnRpY2FsTWFyZ2luKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKLSAgICByZXR1cm4g
bV92ZXJ0aWNhbE1hcmdpbjsKLX0KLQotaW5saW5lIEJveDo6SG9yaXpvbnRhbE1hcmdpbiBCb3g6
Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpv
bnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsKLX0KLQotaW5saW5l
IExheW91dFVuaXQgQm94OjptYXJnaW5CZWZvcmUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hh
c1ZhbGlkVmVydGljYWxNYXJnaW4pOwotICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luLmJlZm9y
ZTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5TdGFydCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV9ob3Jp
em9udGFsTWFyZ2luLnN0YXJ0OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6Om1hcmdpbkFm
dGVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKLSAg
ICByZXR1cm4gbV92ZXJ0aWNhbE1hcmdpbi5hZnRlcjsKLX0KLQotaW5saW5lIExheW91dFVuaXQg
Qm94OjptYXJnaW5FbmQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRh
bE1hcmdpbik7Ci0gICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbi5lbmQ7Ci19Ci0KLWlubGlu
ZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3g6OnBhZGRpbmdUb3AoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcGFkZGluZy0+dmVydGljYWwudG9wOwotfQotCi1pbmxp
bmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94OjpwYWRkaW5nTGVmdCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT5ob3Jpem9udGFsLmxlZnQ7Ci19Ci0K
LWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3g6OnBhZGRpbmdCb3R0b20oKSBjb25zdAot
ewotICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcGFkZGluZy0+dmVydGljYWwuYm90dG9t
OwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94OjpwYWRkaW5nUmlnaHQoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7Ci0gICAgaWYgKCFtX3BhZGRp
bmcpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcGFkZGluZy0+aG9yaXpvbnRh
bC5yaWdodDsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveDo6dmVydGljYWxQ
YWRkaW5nKCkgY29uc3QKLXsKLSAgICBhdXRvIHBhZGRpbmdUb3AgPSB0aGlzLT5wYWRkaW5nVG9w
KCk7Ci0gICAgYXV0byBwYWRkaW5nQm90dG9tID0gdGhpcy0+cGFkZGluZ0JvdHRvbSgpOwotICAg
IGlmICghcGFkZGluZ1RvcCAmJiAhcGFkZGluZ0JvdHRvbSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4gcGFkZGluZ1RvcC52YWx1ZU9yKDApICsgcGFkZGluZ0JvdHRvbS52YWx1ZU9y
KDApOwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94Ojpob3Jpem9udGFsUGFk
ZGluZygpIGNvbnN0Ci17Ci0gICAgYXV0byBwYWRkaW5nTGVmdCA9IHRoaXMtPnBhZGRpbmdMZWZ0
KCk7Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSB0aGlzLT5wYWRkaW5nUmlnaHQoKTsKLSAgICBp
ZiAoIXBhZGRpbmdMZWZ0ICYmICFwYWRkaW5nUmlnaHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgcmV0dXJuIHBhZGRpbmdMZWZ0LnZhbHVlT3IoMCkgKyBwYWRkaW5nUmlnaHQudmFsdWVPcigw
KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94Ojpib3JkZXJUb3AoKSBjb25zdAotewotICAg
IEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKLSAgICByZXR1cm4gbV9ib3JkZXIudmVydGljYWwu
dG9wOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OmJvcmRlckxlZnQoKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKLSAgICByZXR1cm4gbV9ib3JkZXIuaG9yaXpv
bnRhbC5sZWZ0OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OmJvcmRlckJvdHRvbSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVybiBtX2JvcmRl
ci52ZXJ0aWNhbC5ib3R0b207Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6Ym9yZGVyUmln
aHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKLSAgICByZXR1cm4g
bV9ib3JkZXIuaG9yaXpvbnRhbC5yaWdodDsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SXRlcmF0b3IuaAppbmRleCA4ZDg1
OTM1YzRjOTAxMjNjZjJlYTYwNmQ2YTg1Y2YyOTU5ZTFjYWMzLi42MWMwZDYxZDZmMTgzZTZkMjZj
Y2U2MWE2NGRlMGNmM2E2YjIzODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
bGF5b3V0dHJlZS9MYXlvdXRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dEl0ZXJhdG9yLmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENv
bnRhaW5pbmdCbG9jay5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0
IHsKIAo=
</data>
<flag name="review"
          id="425222"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>