<?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>181333</bug_id>
          
          <creation_ts>2018-01-05 11:43:20 -0800</creation_ts>
          <short_desc>[MediaStream] Add Mac screen capture source</short_desc>
          <delta_ts>2018-01-06 16:41:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>Other</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="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1386200</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-01-05 11:43:20 -0800</bug_when>
    <thetext>Add Mac screen capture source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386204</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-05 11:44:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/36323219&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386210</commentid>
    <comment_count>2</comment_count>
      <attachid>330566</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-01-05 12:05:02 -0800</bug_when>
    <thetext>Created attachment 330566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386226</commentid>
    <comment_count>3</comment_count>
      <attachid>330570</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-01-05 13:10:17 -0800</bug_when>
    <thetext>Created attachment 330570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386245</commentid>
    <comment_count>4</comment_count>
      <attachid>330576</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-01-05 13:28:30 -0800</bug_when>
    <thetext>Created attachment 330576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386261</commentid>
    <comment_count>5</comment_count>
      <attachid>330576</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-01-05 14:01:42 -0800</bug_when>
    <thetext>Comment on attachment 330576
Patch

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

&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:103
&gt; +    auto maxDisplays = displayCount;
&gt; +    CGDirectDisplayID activeDisplays[maxDisplays];
&gt; +    err = CGGetActiveDisplayList(maxDisplays, &amp;(activeDisplays[0]), &amp;displayCount);
&gt; +    if (err) {
&gt; +        RELEASE_LOG(Media, &quot;CGGetActiveDisplayList() returned error %d when trying to get the active display list&quot;, (int)err);
&gt; +        return;
&gt; +    }
&gt; +    if (displayCount &gt; maxDisplays)
&gt; +        displayCount = maxDisplays;

How could this last test happen? Why would the display count change within this function?

Also, if displayCount has increased in size, isn&apos;t activeDisplays the wrong length (too short)?

&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:110
&gt; +        m_displaysInternal.append({ displayID, CGDisplayIDToOpenGLDisplayMask(displayID) });

Do you ever need to remove a display? Where does m_displaysInternal get reset?

&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:126
&gt; +    for (auto &amp;device : m_displaysInternal) {

Nit auto&amp; not auto &amp;

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:95
&gt; +    class DisplaySurface {
&gt; +    public:
&gt; +        DisplaySurface() = default;
&gt; +        ~DisplaySurface()
&gt; +        {
&gt; +            if (m_surface)
&gt; +                IOSurfaceDecrementUseCount(m_surface.get());
&gt; +        }
&gt; +
&gt; +        DisplaySurface&amp; operator=(IOSurfaceRef surface)
&gt; +        {
&gt; +            if (m_surface)
&gt; +                IOSurfaceDecrementUseCount(m_surface.get());
&gt; +            if (surface)
&gt; +                IOSurfaceIncrementUseCount(surface);
&gt; +            m_surface = surface;
&gt; +            return *this;
&gt; +        }
&gt; +
&gt; +        IOSurfaceRef ioSurface() const { return m_surface.get(); }
&gt; +
&gt; +    private:
&gt; +        RetainPtr&lt;IOSurfaceRef&gt; m_surface;
&gt; +    };

I was going to ask why you don&apos;t use platform/graphics/cocoa/IOSurface but I don&apos;t think you&apos;d get any benefit. Also, it seems those are intended to own a surface, whereas you&apos;re just borrowing one for a while.

The name DisplaySurface through me off a bit though.

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:52
&gt; +static int32_t roundUpToMacroblockMultiple(int32_t size)
&gt; +{
&gt; +    return (size + 15) &amp; ~15;
&gt; +}

I&apos;ll take your word for this :)

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:76
&gt; +    if (displayCount &gt; maxDisplays)
&gt; +        displayCount = maxDisplays;

Same comment here. I must be missing it.

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:83
&gt; +    for (auto display : activeDisplays) {
&gt; +        if (displayMask == CGDisplayIDToOpenGLDisplayMask(display))
&gt; +            return display;
&gt; +    }
&gt; +

As discussed on IRC... find_first_of

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:143
&gt; +                screenWidth = 640;
&gt; +                screenHeight = 480;

Are these numbers defined somewhere? should you put a fixme in to identify them?

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:156
&gt; +        int depth = 6;

What is 6?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386298</commentid>
    <comment_count>6</comment_count>
      <attachid>330576</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-01-05 15:02:28 -0800</bug_when>
    <thetext>Comment on attachment 330576
Patch

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

&gt;&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:103
&gt;&gt; +        displayCount = maxDisplays;
&gt; 
&gt; How could this last test happen? Why would the display count change within this function?
&gt; 
&gt; Also, if displayCount has increased in size, isn&apos;t activeDisplays the wrong length (too short)?

Both are good points, fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:110
&gt;&gt; +        m_displaysInternal.append({ displayID, CGDisplayIDToOpenGLDisplayMask(displayID) });
&gt; 
&gt; Do you ever need to remove a display? Where does m_displaysInternal get reset?

We never remove a display from our list, but if it disappears it is marked as inactive.

&gt;&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:126
&gt;&gt; +    for (auto &amp;device : m_displaysInternal) {
&gt; 
&gt; Nit auto&amp; not auto &amp;

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:52
&gt;&gt; +}
&gt; 
&gt; I&apos;ll take your word for this :)

:-)

&gt;&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:76
&gt;&gt; +        displayCount = maxDisplays;
&gt; 
&gt; Same comment here. I must be missing it.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:83
&gt;&gt; +
&gt; 
&gt; As discussed on IRC... find_first_of

Actually I was wrong, it won&apos;t work because activeDisplays is a C-style array.

&gt;&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:143
&gt;&gt; +                screenHeight = 480;
&gt; 
&gt; Are these numbers defined somewhere? should you put a fixme in to identify them?

I guess failing to get width or height should result in a failure. Changed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:156
&gt;&gt; +        int depth = 6;
&gt; 
&gt; What is 6?

The maximum number of frames to queue. Added a constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386301</commentid>
    <comment_count>7</comment_count>
      <attachid>330592</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-01-05 15:11:19 -0800</bug_when>
    <thetext>Created attachment 330592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386327</commentid>
    <comment_count>8</comment_count>
      <attachid>330592</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-05 15:34:33 -0800</bug_when>
    <thetext>Comment on attachment 330592
Patch

Clearing flags on attachment: 330592

Committed r226468: &lt;https://trac.webkit.org/changeset/226468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386328</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-05 15:34:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386530</commentid>
    <comment_count>10</comment_count>
      <attachid>330592</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-01-06 16:41:31 -0800</bug_when>
    <thetext>Comment on attachment 330592
Patch

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

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:72
&gt; +    class DisplaySurface {

Can this just use our IOSurface class?

&gt; Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:152
&gt; +        static CGColorSpaceRef deviceRGBColorSpace = CGColorSpaceCreateDeviceRGB();

We&apos;re trying to avoid use of deviceRGB anywhere now, since it&apos;s effectively the same as sRGB. Can you change this to use sRGBColorSpaceRef() from GraphicsContextCG.h?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330566</attachid>
            <date>2018-01-05 12:05:02 -0800</date>
            <delta_ts>2018-01-05 13:10:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181333-20180105120502.patch</filename>
            <type>text/plain</type>
            <size>33339</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRjNmI5YmI4MmVkMjA0
NjdlOGRmYjg1ZjQyOTczYTljNGY5MjI0MC4uMGNkYjQ0NTIxZDBjMTc5YmMzYTZjNjU3NDg4YzRl
YzllNTBhNjg4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE4LTAxLTA1ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQWRkIE1hYyBzY3JlZW4gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTMzMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzYzMjMyMTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMu
bW0uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorCisgICAgICAgIFJldHVybiBvbmUgImRldmljZSIgZm9yIGVhY2ggYWN0aXZlIHNjcmVlbi4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2Vy
Q29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxC
YWNrKTogQ2FsbCByZWZyZXNoQ2FwdHVyZURldmljZXMuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6fkRpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hKTogVW5y
ZWdpc3RlciBmb3IgZGlzcGxheQorICAgICAgICByZWNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OmNhcHR1cmVEZXZp
Y2VzKTogUmVnaXN0ZXIgZm9yIGRpc3BsYXkgcmVjb25maWdyYXRpb25zLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnJlZnJlc2hDYXB0dXJlRGV2aWNlcyk6
IFVzZSBDR0FjdGl2ZURpc3BsYXlMaXN0IHRvCisgICAgICAgIGdldCBsaXN0IG9mIGFjdGl2ZSBz
Y3JlZW5zLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnNj
cmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKTogVmFsaWRhdGUgc2NyZWVuCisgICAg
ICAgIElELCByZXR1cm4gQ2FwdHVyZURldmljZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaDoKKworICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvQ2FwdHVyZVNvdXJjZUZhY3RvcnlNYWM6OmNyZWF0ZVZpZGVv
Q2FwdHVyZVNvdXJjZSk6IERlYWwgd2l0aCBzY3JlZW4gY2FwdHVyZQorICAgICAgICBvbiBtYWNP
Uy4KKworICAgICAgICBJbXBsZW1lbnQgTWFjIHNjcmVlbiBjYXB0dXJlIHdpdGggQ0dEaXNwbGF5
U3RyZWFtLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpEaXNwbGF5U3VyZmFjZTo6fkRpc3BsYXlTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpEaXNwbGF5U3Vy
ZmFjZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjpEaXNwbGF5U3VyZmFjZTo6aW9TdXJmYWNlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW06
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1cGRhdGVE
aXNwbGF5SUQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6On5TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
Y3JlYXRlRGlzcGxheVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c2FtcGxlQnVmZmVyRnJv
bVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0RGlzcGxheVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6YXBwbHlT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjph
cHBseUZyYW1lUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6Y29tbWl0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZGlzcGxheVJlY29uZmln
dXJhdGlvbkNhbGxCYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjpmcmFtZUF2YWlsYWJsZSk6CisKIDIwMTgtMDEtMDUgIE1hdHQgTGV3aXMgIDxq
bGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjI2
NDAxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZWMxMTY5Mjg0Nzg4OWFjNGZhMTllZGZm
ZmFkMzljNzE1YjIzZWE4Mi4uNmFhYjRjOTFhMzFiYWFhMzE0Mzg4Njg0NjdiYjBlZTI5NmM3ZDUz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zNjEsNiArMzYxLDcgQEAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmNwcAogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlQ29jb2Eu
Y3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuY3BwCitwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMubW0KIAogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5t
bQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggZGUxOTBhMTJmMWUwMzA5ZWMyNWJiYWViYTM1NjEyMGM5YTNmN2I3YS4uNzMzOWZj
MzE3NDIyZmQ2MzVmZTJiYTFmNjMzYTI1YTUzYTZkMzY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTAzNSw2ICs1MDM1LDgg
QEAKIAkJMDcwOUQ3OTExQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJN
YWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTWVkaWFTZXNzaW9uTWFu
YWdlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzA5RDc5NDFBRTU1QTI5
MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nl
c3NpYmlsaXR5U2xpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vz
c2liaWxpdHlTbGlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwQTlGNUUx
RkZFQ0M3MDAwM0RGNjQ5IC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MEE5RjYwMUZGRUNDNzEwMDNERjY0
OSAvKiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyog
bWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5j
c3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEUwOTE4MTg3NUVEOTMwMDNBMUQz
QyAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwNzBFMDkxQTE4NzVFRjcxMDAzQTFEM0MgLyogUGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1NZWRpYVNlc3Npb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ4NDgsNiArMTQ4NTAsOCBAQAog
CQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYxNCAvKiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VDb2NvYS5oICovLAogCQkJCTVDREQ4MzNCMUU0MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8sCiAJCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIx
QjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmggKi8sCisJCQkJMDcwQTlG
NUUxRkZFQ0M3MDAwM0RGNjQ5IC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmggKi8s
CisJCQkJMDcwQTlGNjAxRkZFQ0M3MTAwM0RGNjQ5IC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjLm1tICovLAogCQkJCTA3RDYzNzNFMUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJCTA3RDYzNzNGMUJCMEIxMTMwMDI1NkNFOSAv
KiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSAqLywKIAkJCSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVN
YW5hZ2VyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcAppbmRleCBjODIwZDMwYjlhZmIwY2ZiOTNl
NmFlYzZjYjkwYWUzZDJmZWRiYmU1Li40MDk3MzIwNmI5YTRlY2YyZDI3ZGI0ZjEzOWI3MWJiNGI0
YTEyZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKQEAg
LTMxLDggKzMxLDIxIEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlyZWN0RGlz
cGxheS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRGT1JNKE1B
QykKK3N0YXRpYyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERp
c3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKiB1c2VySW5mbykKK3sK
KyAgICBpZiAodXNlckluZm8pCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheUNhcHR1
cmVNYW5hZ2VyQ29jb2EqPih1c2VySW5mbyktPnJlZnJlc2hDYXB0dXJlRGV2aWNlcygpOworfQor
I2VuZGlmCisKIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hJiBEaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGxh
eUNhcHR1cmVNYW5hZ2VyQ29jb2E+IG1hbmFnZXI7CkBAIC00MSwxNyArNTQsMTA1IEBAIERpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hJiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6c2luZ2xl
dG9uKCkKIAogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6On5EaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYSgpCiB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtX29ic2VydmluZ0Rpc3Bs
YXlDaGFuZ2VzKQorICAgICAgICBDR0Rpc3BsYXlSZW1vdmVSZWNvbmZpZ3VyYXRpb25DYWxsYmFj
ayhkaXNwbGF5UmVjb25maWd1cmF0aW9uQ2FsbEJhY2ssIHRoaXMpOworI2VuZGlmCiB9CiAKIGNv
bnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OmNh
cHR1cmVEZXZpY2VzKCkKIHsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKKyAgICBpZiAo
IWluaXRpYWxpemVkKSB7CisgICAgICAgIHJlZnJlc2hDYXB0dXJlRGV2aWNlcygpOworCisjaWYg
UExBVEZPUk0oTUFDKQorICAgICAgICBDR0Rpc3BsYXlSZWdpc3RlclJlY29uZmlndXJhdGlvbkNh
bGxiYWNrKGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjaywgdGhpcyk7CisjZW5kaWYKKwor
ICAgICAgICBtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzID0gdHJ1ZTsKKyAgICAgICAgaW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIH07CisgICAgCiAgICAgcmV0dXJuIG1fZGlzcGxheXM7CiB9CiAK
K3ZvaWQgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnJlZnJlc2hDYXB0dXJlRGV2aWNlcygp
Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHVpbnQzMl90IGRpc3BsYXlDb3VudCA9IDA7Cisg
ICAgYXV0byBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KDAsIG51bGxwdHIsICZkaXNwbGF5
Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJDR0dl
dEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0
IGRpc3BsYXkgY291bnQiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIWRpc3BsYXlDb3VudCkgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNHR2V0
QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291bnQgb2YgMCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBtYXhEaXNwbGF5cyA9IGRpc3BsYXlDb3Vu
dDsKKyAgICBDR0RpcmVjdERpc3BsYXlJRCBhY3RpdmVEaXNwbGF5c1ttYXhEaXNwbGF5c107Cisg
ICAgZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdChtYXhEaXNwbGF5cywgJihhY3RpdmVEaXNw
bGF5c1swXSksICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coTWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQg
d2hlbiB0cnlpbmcgdG8gZ2V0IHRoZSBhY3RpdmUgZGlzcGxheSBsaXN0IiwgKGludCllcnIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkaXNwbGF5Q291bnQgPiBtYXhEaXNwbGF5
cykKKyAgICAgICAgZGlzcGxheUNvdW50ID0gbWF4RGlzcGxheXM7CisKKyAgICBib29sIGhhdmVE
ZXZpY2VDaGFuZ2VzID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGRpc3BsYXlJRCA6IGFjdGl2ZURp
c3BsYXlzKSB7CisgICAgICAgIGlmIChzdGQ6OmFueV9vZihtX2Rpc3BsYXlzSW50ZXJuYWwuYmVn
aW4oKSwgbV9kaXNwbGF5c0ludGVybmFsLmVuZCgpLCBbZGlzcGxheUlEXShhdXRvJiBkZXZpY2Up
IHsgcmV0dXJuIGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCA9PSBkaXNwbGF5SUQ7IH0pKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGhhdmVEZXZpY2VDaGFuZ2VzID0gdHJ1ZTsKKyAg
ICAgICAgbV9kaXNwbGF5c0ludGVybmFsLmFwcGVuZCh7IGRpc3BsYXlJRCwgQ0dEaXNwbGF5SURU
b09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkgfSk7CisgICAgfQorCisgICAgZm9yIChhdXRv
JiBkaXNwbGF5IDogbV9kaXNwbGF5c0ludGVybmFsKSB7CisgICAgICAgIGF1dG8gZGlzcGxheU1h
c2sgPSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheS5jZ0RpcmVjdERpc3Bs
YXlJRCk7CisgICAgICAgIGlmIChkaXNwbGF5LmNnT3BlbkdMRGlzcGxheU1hc2sgIT0gZGlzcGxh
eU1hc2spIHsKKyAgICAgICAgICAgIGRpc3BsYXkuY2dPcGVuR0xEaXNwbGF5TWFzayA9IGRpc3Bs
YXlNYXNrOworICAgICAgICAgICAgaGF2ZURldmljZUNoYW5nZXMgPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFoYXZlRGV2aWNlQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBtX2Rpc3BsYXlzID0gVmVjdG9yPENhcHR1cmVEZXZp
Y2U+KCk7CisgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2Rpc3BsYXlzSW50ZXJuYWwpIHsKKyAg
ICAgICAgQ2FwdHVyZURldmljZSBkaXNwbGF5RGV2aWNlKFN0cmluZzo6bnVtYmVyKGRldmljZS5j
Z0RpcmVjdERpc3BsYXlJRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbiwgbWFr
ZVN0cmluZygiU2NyZWVuICIsIFN0cmluZzo6bnVtYmVyKGNvdW50KyspKSk7CisgICAgICAgIGRp
c3BsYXlEZXZpY2Uuc2V0RW5hYmxlZChkZXZpY2UuY2dPcGVuR0xEaXNwbGF5TWFzayk7CisgICAg
ICAgIG1fZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkpOworICAgIH0KKyNl
bmRpZgorfQorCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IERpc3BsYXlDYXB0dXJlTWFu
YWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJp
bmcmIGRldmljZUlEKQogeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIG9rOworICAgIGF1
dG8gZGlzcGxheUlEID0gZGV2aWNlSUQudG9VSW50U3RyaWN0KCZvayk7CisgICAgaWYgKCFvaykg
eworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkRpc3BsYXkgSUQgZG9lcyBub3QgY29udmVy
dCB0byAzMi1iaXQgaW50ZWdlciIpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gU2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OnVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGlmICghYWN0dWFsRGlzcGxh
eUlEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBkZXZpY2UgPSBD
YXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSwgQ2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBBU0NJSUxpdGVyYWwoIlNjcmVlbkNhcHR1
cmVEZXZpY2UiKSk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICByZXR1cm4g
ZGV2aWNlOworI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOwogICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisjZW5kaWYKIH0KIAogc3RkOjpvcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6Y2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQo
Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGlkKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0
dXJlTWFuYWdlckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAppbmRleCA4NDk2MmY3Mjc0OGQ2YzdkNzEz
Njk0YTQ5OGVhYTI1YjdiYmIwNDcwLi5kNzYyODY0ZjJlNDI0ZjdmZjU5YzhiNWUyNWZhNjNjNGM2
YTRlNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaApAQCAtMzYs
NiArMzYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29h
JiBzaW5nbGV0b24oKTsKICAgICBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYSgpID0gZGVmYXVs
dDsKIAorICAgIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCkgZmluYWw7CisKIHByaXZhdGU6
CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EoKTsKIApAQCAtNDMsNyAr
NDUsMTMgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IGNhcHR1
cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUsIGNvbnN0
IFN0cmluZyYpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gc2NyZWVu
Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdHJ1
Y3QgQ0dEaXNwbGF5Q2FwdHVyZURldmljZSB7CisgICAgICAgIHVpbnQzMl90IGNnRGlyZWN0RGlz
cGxheUlEOworICAgICAgICB1aW50MzJfdCBjZ09wZW5HTERpc3BsYXlNYXNrOworICAgIH07Cisg
ICAgVmVjdG9yPENHRGlzcGxheUNhcHR1cmVEZXZpY2U+IG1fZGlzcGxheXNJbnRlcm5hbDsKICAg
ICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9kaXNwbGF5czsKKyAgICBib29sIG1fb2JzZXJ2aW5n
RGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCmluZGV4IDczNWUy
NjM5OTg0ZDFjZmNiZGM1NzE5MTUyNmE5OWNkNDNlYTJjNTYuLjU4NzUxNDkxMDhkM2Y0NjIyNThl
MGMyMGU0Mjk5MmQ0OTFhMmI2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlck1hYy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJEaXNwbGF5Q2FwdHVy
ZU1hbmFnZXJDb2NvYS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVN0
cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
IgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTU1LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3RyYWludHMpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
U2NyZWVuOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIHJldHVybiBTY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3Ry
YWludHMpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgY2FzZSBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpBcHBsaWNhdGlvbjoKICAgICAgICAgY2FzZSBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6CiAgICAgICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2
aWNlVHlwZTo6QnJvd3NlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNl
TWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjc5NTk0YmJhMzY3NzU2ZDc1NGFlYzQ3MmUzM2U1NDc0N2QwOWUx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCkBAIC0wLDAgKzEsMTE3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRl
ICJEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
RGlzcGxheUNvbmZpZ3VyYXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5
U3RyZWFtLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZVJlZi5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJl
ZjsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJl
ZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYyA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0
IE1lZGlhQ29uc3RyYWludHMqKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWaWRlb0Nh
cHR1cmVGYWN0b3J5JiBmYWN0b3J5KCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4gdXBkYXRlRGlzcGxheUlEKENHRGlyZWN0RGlz
cGxheUlEKTsKKworcHJpdmF0ZToKKyAgICBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyh1
aW50MzJfdCk7CisgICAgdmlydHVhbCB+U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKTsK
KworICAgIHN0YXRpYyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVj
dERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7CisKKyAgICB2
b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNo
YW5nZVN1bW1hcnlGbGFncyk7CisKKyAgICB2b2lkIGZyYW1lQXZhaWxhYmxlKENHRGlzcGxheVN0
cmVhbUZyYW1lU3RhdHVzLCB1aW50NjRfdCwgSU9TdXJmYWNlUmVmLCBDR0Rpc3BsYXlTdHJlYW1V
cGRhdGVSZWYpOworCisgICAgdm9pZCBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7CisgICAgdm9pZCBz
dGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkg
ZmluYWw7CisgICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOworICAgIGJv
b2wgYXBwbHlGcmFtZVJhdGUoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGNvbW1pdENvbmZpZ3Vy
YXRpb24oKSBmaW5hbDsKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxl
QnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOworICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJmYWNlUmVmKTsK
KyAgICBib29sIGNyZWF0ZURpc3BsYXlTdHJlYW0oKTsKKyAgICB2b2lkIHN0YXJ0RGlzcGxheVN0
cmVhbSgpOworICAgIAorICAgIGNsYXNzIERpc3BsYXlTdXJmYWNlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIERpc3BsYXlTdXJmYWNlKCkgPSBkZWZhdWx0OworICAgICAgICB+RGlzcGxheVN1cmZh
Y2UoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAg
ICAgIElPU3VyZmFjZURlY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAg
IH0KKworICAgICAgICBEaXNwbGF5U3VyZmFjZSYgb3BlcmF0b3I9KElPU3VyZmFjZVJlZiBzdXJm
YWNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAg
ICAgIElPU3VyZmFjZURlY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgICAgICAgICBJT1N1cmZhY2VJbmNyZW1lbnRVc2VD
b3VudChzdXJmYWNlKTsKKyAgICAgICAgICAgIG1fc3VyZmFjZSA9IHN1cmZhY2U7CisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBJT1N1cmZhY2VSZWYgaW9T
dXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7CisgICAgfTsKKwor
ICAgIG11dGFibGUgTG9jayBtX2N1cnJlbnRGcmFtZU11dGV4OworICAgIERpc3BsYXlTdXJmYWNl
IG1fY3VycmVudEZyYW1lOworICAgIFJldGFpblB0cjxDR0Rpc3BsYXlTdHJlYW1SZWY+IG1fZGlz
cGxheVN0cmVhbTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gbV9idWZm
ZXJBdHRyaWJ1dGVzOworICAgIENHRGlzcGxheVN0cmVhbUZyYW1lQXZhaWxhYmxlSGFuZGxlciBt
X2ZyYW1lQXZhaWxhYmxlQmxvY2s7CisgICAgV2Vha1B0ckZhY3Rvcnk8U2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM+IG1fd2Vha0ZhY3Rvcnk7CisgICAgTWVkaWFUaW1lIG1fcHJlc2VudGF0
aW9uVGltZVN0YW1wOworICAgIE1lZGlhVGltZSBtX2ZyYW1lRHVyYXRpb247CisKKyAgICBPU09i
amVjdFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBtX2NhcHR1cmVRdWV1ZTsKKworICAgIGRvdWJsZSBt
X2xhc3RGcmFtZVRpbWUgeyBOQU4gfTsKKyAgICB1aW50MzJfdCBtX2Rpc3BsYXlJRCB7IDAgfTsK
KyAgICBib29sIG1faXNSdW5uaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fb2JzZXJ2aW5nRGlz
cGxheUNoYW5nZXMgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlD
YXB0dXJlU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxMGU4ODVl
ODlkNmNkODMzNDc4YWNkMDJkNTVkZjUzNmQ0OGM1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMubW0KQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFD
b25zdHJhaW50cy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorCisjaW5jbHVkZSA8cGFsL2NmL0NvcmVN
ZWRpYVNvZnRMaW5rLmg+CisjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFBBTDsKKworY29uc3QgT1NUeXBlIHZpZGVv
U3RyZWFtRm9ybWF0ID0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVv
UmFuZ2U7CisKK3N0YXRpYyBpbnQzMl90IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZShpbnQz
Ml90IHNpemUpCit7CisgICAgcmV0dXJuIChzaXplICsgMTUpICYgfjE1OworfQorCitzdGQ6Om9w
dGlvbmFsPENHRGlyZWN0RGlzcGxheUlEPiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
dXBkYXRlRGlzcGxheUlEKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKK3sKKyAgICB1aW50
MzJfdCBkaXNwbGF5Q291bnQgPSAwOworICAgIGF1dG8gZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5
TGlzdCgwLCBudWxscHRyLCAmZGlzcGxheUNvdW50KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HKE1lZGlhLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGVy
cm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdldCBkaXNwbGF5IGNvdW50IiwgKGludCllcnIpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmICghZGlzcGxheUNvdW50
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgp
IHJldHVybmVkIGEgZGlzcGxheSBjb3VudCBvZiAwIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgYXV0byBtYXhEaXNwbGF5cyA9IGRpc3BsYXlDb3VudDsKKyAg
ICBDR0RpcmVjdERpc3BsYXlJRCBhY3RpdmVEaXNwbGF5c1ttYXhEaXNwbGF5c107CisgICAgZXJy
ID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdChtYXhEaXNwbGF5cywgJihhY3RpdmVEaXNwbGF5c1sw
XSksICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQgd2hlbiB0
cnlpbmcgdG8gZ2V0IHRoZSBhY3RpdmUgZGlzcGxheSBsaXN0IiwgKGludCllcnIpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICBpZiAoZGlzcGxheUNvdW50ID4gbWF4
RGlzcGxheXMpCisgICAgICAgIGRpc3BsYXlDb3VudCA9IG1heERpc3BsYXlzOworCisgICAgYXV0
byBkaXNwbGF5TWFzayA9IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQp
OworICAgIGZvciAoYXV0byBkaXNwbGF5IDogYWN0aXZlRGlzcGxheXMpIHsKKyAgICAgICAgaWYg
KGRpc3BsYXlNYXNrID09IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5KSkK
KyAgICAgICAgICAgIHJldHVybiBkaXNwbGF5OworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Cit9CisKK0NhcHR1cmVTb3VyY2VPckVycm9yIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMpCit7CisgICAgYm9vbCBvazsKKyAgICBhdXRvIGRpc3BsYXlJRCA9
IGRldmljZUlELnRvVUludFN0cmljdCgmb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgUkVM
RUFTRV9MT0coTWVkaWEsICJEaXNwbGF5IElEIGRvZXMgbm90IGNvbnZlcnQgdG8gMzItYml0IGlu
dGVnZXIiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGFjdHVhbERp
c3BsYXlJRCA9IHVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGlmICghYWN0dWFsRGlz
cGxheUlEKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJl
ZigqbmV3IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKGFjdHVhbERpc3BsYXlJRC52YWx1
ZSgpKSk7CisgICAgaWYgKGNvbnN0cmFpbnRzICYmIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygq
Y29uc3RyYWludHMpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENhcHR1cmVT
b3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CisKK1NjcmVlbkRpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyh1aW50MzJfdCBkaXNwbGF5
SUQpCisgICAgOiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hKCJTY3JlZW4iKQorICAgICwgbV9k
aXNwbGF5SUQoZGlzcGxheUlEKQoreworfQorCitTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6flNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKCkKK3sKKyAgICBpZiAobV9vYnNlcnZp
bmdEaXNwbGF5Q2hhbmdlcykKKyAgICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9u
Q2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKKworICAgIG1f
Y3VycmVudEZyYW1lID0gbnVsbHB0cjsKK30KKworYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6Y3JlYXRlRGlzcGxheVN0cmVhbSgpCit7CisgICAgYXV0byBhY3R1YWxEaXNwbGF5
SUQgPSB1cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpOworICAgIGlmICghYWN0dWFsRGlzcGxh
eUlEKSB7CisgICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChtX2Rpc3BsYXlJRCAhPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUoKSkg
eworICAgICAgICBtX2Rpc3BsYXlJRCA9IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpOworICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVh
dGUoJXApLCBkaXNwbGF5IElEIGNoYW5nZWQgdG8gJWQiLCB0aGlzLCBtX2Rpc3BsYXlJRCk7Cisg
ICAgfQorCisgICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0pIHsKKworICAgICAgICBpZiAoc2l6ZSgp
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQ0dEaXNwbGF5TW9kZVJlZiBkaXNwbGF5TW9kZSA9
IENHRGlzcGxheUNvcHlEaXNwbGF5TW9kZShtX2Rpc3BsYXlJRCk7CisgICAgICAgICAgICBhdXRv
IHNjcmVlbldpZHRoID0gQ0dEaXNwbGF5TW9kZUdldFBpeGVsc1dpZGUoZGlzcGxheU1vZGUpOwor
ICAgICAgICAgICAgYXV0byBzY3JlZW5IZWlnaHQgPSBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGln
aChkaXNwbGF5TW9kZSk7CisgICAgICAgICAgICBpZiAoIXNjcmVlbldpZHRoIHx8ICFzY3JlZW5I
ZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKCVwKSwgdW5hYmxlIHRvIGdl
dCBzY3JlZW4gd2lkdGgvaGVpZ2h0IiwgdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyZWVuV2lk
dGggPSA2NDA7CisgICAgICAgICAgICAgICAgc2NyZWVuSGVpZ2h0ID0gNDgwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2V0V2lkdGgoc2NyZWVuV2lkdGgpOworICAgICAgICAgICAgc2V0
SGVpZ2h0KHNjcmVlbkhlaWdodCk7CisgICAgICAgICAgICBDR0Rpc3BsYXlNb2RlUmVsZWFzZShk
aXNwbGF5TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fY2FwdHVyZVF1ZXVlKQor
ICAgICAgICAgICAgbV9jYXB0dXJlUXVldWUgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX3F1ZXVl
X2NyZWF0ZSgiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMgQ2FwdHVyZSBRdWV1ZSIsIERJ
U1BBVENIX1FVRVVFX1NFUklBTCkpOworCisgICAgICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYg
ZGV2aWNlUkdCQ29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
ICAgICBkb3VibGUgZnJhbWVUaW1lID0gMSAvIGZyYW1lUmF0ZSgpOworICAgICAgICBhdXRvIGZy
YW1lVGltZUNGID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVyRG91
YmxlVHlwZSwgICZmcmFtZVRpbWUpKTsKKyAgICAgICAgaW50IGRlcHRoID0gNjsKKyAgICAgICAg
YXV0byBkZXB0aENGID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVy
SW50VHlwZSwgICZkZXB0aCkpOworICAgICAgICBDRlR5cGVSZWYga2V5c1tdID0geworICAgICAg
ICAgICAga0NHRGlzcGxheVN0cmVhbU1pbmltdW1GcmFtZVRpbWUsCisgICAgICAgICAgICBrQ0dE
aXNwbGF5U3RyZWFtUXVldWVEZXB0aCwKKyAgICAgICAgICAgIGtDR0Rpc3BsYXlTdHJlYW1Db2xv
clNwYWNlLAorICAgICAgICAgICAga0NHRGlzcGxheVN0cmVhbVNob3dDdXJzb3IsCisgICAgICAg
IH07CisgICAgICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgICAgIGZyYW1lVGlt
ZUNGLmdldCgpLAorICAgICAgICAgICAgZGVwdGhDRi5nZXQoKSwKKyAgICAgICAgICAgIGRldmlj
ZVJHQkNvbG9yU3BhY2UsCisgICAgICAgICAgICBrQ0ZCb29sZWFuVHJ1ZSwKKyAgICAgICAgfTsK
KyAgICAgICAgYXV0byBzdHJlYW1PcHRpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMp
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKSk7CisKKyAgICAgICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha0ZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigqdGhpcyk7CisgICAgICAgIG1fZnJhbWVBdmFpbGFibGVCbG9jayA9IEJsb2Nr
X2NvcHkoXihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2NF90IGRpc3Bs
YXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVS
ZWYgdXBkYXRlUmVmKSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgd2Vha1RoaXMtPmZyYW1lQXZhaWxhYmxlKHN0YXR1
cywgZGlzcGxheVRpbWUsIGZyYW1lU3VyZmFjZSwgdXBkYXRlUmVmKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgbV9kaXNwbGF5U3RyZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVX
aXRoRGlzcGF0Y2hRdWV1ZShtX2Rpc3BsYXlJRCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWln
aHQoKSwgdmlkZW9TdHJlYW1Gb3JtYXQsIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1
ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKKyAgICAgICAgaWYgKCFtX2Rpc3Bs
YXlTdHJlYW0pIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0oJXApLCBDR0Rpc3BsYXlTdHJl
YW1DcmVhdGUgZmFpbGVkIiwgdGhpcyk7CisgICAgICAgICAgICBjYXB0dXJlRmFpbGVkKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1f
b2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMpIHsKKyAgICAgICAgQ0dEaXNwbGF5UmVnaXN0ZXJSZWNv
bmZpZ3VyYXRpb25DYWxsYmFjayhkaXNwbGF5UmVjb25maWd1cmF0aW9uQ2FsbEJhY2ssIHRoaXMp
OworICAgICAgICBtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpz
dGFydFByb2R1Y2luZ0RhdGEoKTsKKworICAgIGlmIChtX2lzUnVubmluZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3RhcnREaXNwbGF5U3RyZWFtKCk7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpzdG9wUHJvZHVjaW5nRGF0YSgpOworCisgICAgaWYgKCFtX2lzUnVu
bmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGlzcGxheVN0cmVhbSkKKyAgICAg
ICAgQ0dEaXNwbGF5U3RyZWFtU3RvcChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOworCisgICAgbV9p
c1J1bm5pbmcgPSBmYWxzZTsKK30KKworUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENW
UGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDTVRpbWUgc2FtcGxlVGltZSA9IENNVGltZU1h
a2UoKGVsYXBzZWRUaW1lKCkgKyAuMSkgKiAxMDAsIDEwMCk7CisgICAgQ01TYW1wbGVUaW1pbmdJ
bmZvIHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJbnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1l
IH07CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24g
PSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3Jl
YXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYp
cGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAg
ICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVy
OworICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1h
dERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7CisgICAgQ0ZSZWxlYXNl
KGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HKE1lZGlhLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJv
ciBjb2RlOiAlZCIsIHN0YXR1cyk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Cit9CisKK1JldGFpblB0cjxDVlBpeGVs
QnVmZmVyUmVmPiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9t
SU9TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmICghbV9idWZmZXJBdHRy
aWJ1dGVzKSB7CisgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICAgICAgYXV0byBm
b3JtYXQgPSBJT1N1cmZhY2VHZXRQaXhlbEZvcm1hdChzdXJmYWNlKTsKKyAgICAgICAgaWYgKGZv
cm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZSB8
fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5n
ZSkgeworCisgICAgICAgICAgICAvLyBJZiB0aGUgd2lkdGggeCBoZWlnaHQgaXNuJ3QgYSBtdWx0
aXBsZSBvZiAxNiB4IDE2IGFuZCB0aGUgc3VyZmFjZSBoYXMgZXh0cmEgbWVtb3J5IGluIHRoZSBw
bGFuZXMsIHNldCBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyB0byByZWZsZWN0IGl0LgorICAgICAg
ICAgICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2UpOworICAgICAgICAg
ICAgYXV0byBoZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZSk7CisgICAgICAgICAg
ICBpbnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lk
dGgpIC0gd2lkdGg7CisgICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkQm90dG9tID0gcm91bmRV
cFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7CisKKyAgICAgICAgICAgIGlm
ICgoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApID49IHdpZHRoICsg
ZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJS
b3dPZlBsYW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAg
ICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1cmZhY2UpID49IChoZWlnaHQgKyBl
eHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwg
MCkgKiAzIC8gMikpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjZkludCA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRSaWdo
dCkpOworICAgICAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0
dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdodEtleSwgY2ZJ
bnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBjZkludCA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRCb3R0b20pKTsKKyAg
ICAgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVz
LmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm90dG9tS2V5LCBjZkludC5nZXQo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0
aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJS
ZWYgcGl4ZWxCdWZmZXI7CisgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0
aElPU3VyZmFjZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdXJmYWNlLCBtX2J1ZmZlckF0dHJpYnV0
ZXMuZ2V0KCksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0Q0YocGl4ZWxCdWZmZXIpOworfQorCit2b2lk
IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKCkKK3sKKyAgICBp
ZiAoIW1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBE
aXNwbGF5U3VyZmFjZSBjdXJyZW50RnJhbWU7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9jdXJyZW50RnJhbWVNdXRleCk7CisgICAgICAgIGN1cnJlbnRGcmFtZSA9IG1fY3VycmVu
dEZyYW1lLmlvU3VyZmFjZSgpOworICAgIH0KKworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhl
bEJ1ZmZlckZyb21JT1N1cmZhY2UoY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpKTsKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9
IHNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5nZXQoKSk7CisgICAgaWYg
KCFzYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHZpZGVvU2FtcGxlQXZhaWxh
YmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSkpOworfQor
Cit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFydERpc3BsYXlTdHJlYW0o
KQoreworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gdXBkYXRlRGlzcGxheUlEKG1fZGlzcGxh
eUlEKTsKKyAgICBpZiAoIWFjdHVhbERpc3BsYXlJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fZGlzcGxheUlEICE9IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSB7CisgICAgICAgIG1f
ZGlzcGxheUlEID0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCk7CisgICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZSglcCksIGRpc3Bs
YXkgSUQgY2hhbmdlZCB0byAlZCIsIHRoaXMsIG1fZGlzcGxheUlEKTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGlzcGxheVN0cmVhbSAmJiAhY3JlYXRlRGlzcGxheVN0cmVhbSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGVyciA9IENHRGlzcGxheVN0cmVhbVN0YXJ0KG1fZGlzcGxheVN0
cmVhbS5nZXQoKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFydFByb2R1Y2luZ0RhdGEoJXApLCBD
R0Rpc3BsYXlTdHJlYW1TdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIHRoaXMsIGVycik7Cisg
ICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
aXNSdW5uaW5nID0gdHJ1ZTsKK30KKworYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6YXBwbHlTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKHNpemUoKSA9
PSBuZXdTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fYnVmZmVyQXR0cmlidXRl
cyA9IG51bGxwdHI7CisgICAgbV9kaXNwbGF5U3RyZWFtID0gbnVsbHB0cjsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6YXBwbHlGcmFt
ZVJhdGUoZG91YmxlIHJhdGUpCit7CisgICAgaWYgKGZyYW1lUmF0ZSgpICE9IHJhdGUpIHsKKyAg
ICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKKyAgICAgICAgbV9kaXNwbGF5U3Ry
ZWFtID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYTo6YXBwbHlGcmFtZVJhdGUocmF0ZSk7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OmNvbW1pdENvbmZpZ3VyYXRpb24oKQoreworICAgIGlmIChtX2lzUnVubmlu
ZyAmJiAhbV9kaXNwbGF5U3RyZWFtKQorICAgICAgICBzdGFydERpc3BsYXlTdHJlYW0oKTsKK30K
Kwordm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZGlzcGxheVdhc1JlY29uZmln
dXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQhCit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OmRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERpc3BsYXlJ
RCBkaXNwbGF5LCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MgZmxhZ3MsIHZvaWQgKnVzZXJJ
bmZvKQoreworICAgIGlmICh1c2VySW5mbykKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyAqPih1c2VySW5mbyktPmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoZGlzcGxheSwgZmxhZ3MpOworfQorCit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpmcmFtZUF2YWlsYWJsZShDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMs
IHVpbnQ2NF90IGRpc3BsYXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3Bs
YXlTdHJlYW1VcGRhdGVSZWYgdXBkYXRlUmVmKQoreworICAgIHN3aXRjaCAoc3RhdHVzKSB7Cisg
ICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUNvbXBsZXRlOgorICAgICAg
ICBicmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVJZGxl
OgorICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVz
RnJhbWVCbGFuazoKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJTY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6ZnJhbWVBdmFpbGFibGUoJXApLCBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVT
dGF0dXNGcmFtZUJsYW5rIiwgdGhpcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dE
aXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNTdG9wcGVkOgorICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpmcmFtZUF2YWlsYWJsZSglcCksIGtD
R0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c1N0b3BwZWQiLCB0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKCFmcmFtZVN1cmZhY2UgfHwgIWRpc3BsYXlUaW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzaXplX3QgY291bnQ7CisgICAgYXV0byogcmVjdHMgPSBDR0Rpc3Bs
YXlTdHJlYW1VcGRhdGVHZXRSZWN0cyh1cGRhdGVSZWYsIGtDR0Rpc3BsYXlTdHJlYW1VcGRhdGVE
aXJ0eVJlY3RzLCAmY291bnQpOworICAgIGlmICghcmVjdHMgfHwgIWNvdW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBMb2NrSG9sZGVyIGxvY2sobV9jdXJyZW50RnJhbWVNdXRleCk7CisgICAg
bV9sYXN0RnJhbWVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgbV9j
dXJyZW50RnJhbWUgPSBmcmFtZVN1cmZhY2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330570</attachid>
            <date>2018-01-05 13:10:17 -0800</date>
            <delta_ts>2018-01-05 13:28:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181333-20180105131016.patch</filename>
            <type>text/plain</type>
            <size>37295</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRjNmI5YmI4MmVkMjA0
NjdlOGRmYjg1ZjQyOTczYTljNGY5MjI0MC4uN2Q0Y2Y1ZjUxMjBlNmE1MDAyODM1ZTY0MTA5MGMz
YTYzZTUwMGExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA1ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQWRkIE1hYyBzY3JlZW4gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTMzMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzYzMjMyMTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMu
bW0uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwOiBEZWNs
YXJlIG5ldyBjb25zdGFudHMgdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oOgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlSZWNv
bmZpZ3VyYXRpb25DYWxsQmFjayk6IENhbGwgcmVmcmVzaENhcHR1cmVEZXZpY2VzLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6On5EaXNwbGF5Q2FwdHVyZU1h
bmFnZXJDb2NvYSk6IFVucmVnaXN0ZXIgZm9yIGRpc3BsYXkKKyAgICAgICAgcmVjb25maWd1cmF0
aW9uIGNhbGxiYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlTWFuYWdlckNv
Y29hOjpjYXB0dXJlRGV2aWNlcyk6IFJlZ2lzdGVyIGZvciBkaXNwbGF5IHJlY29uZmlncmF0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjpyZWZyZXNo
Q2FwdHVyZURldmljZXMpOiBVc2UgQ0dBY3RpdmVEaXNwbGF5TGlzdCB0bworICAgICAgICBnZXQg
bGlzdCBvZiBhY3RpdmUgc2NyZWVucy4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJl
TWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRCk6IFZhbGlk
YXRlIHNjcmVlbgorICAgICAgICBJRCwgcmV0dXJuIENhcHR1cmVEZXZpY2UuCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmg6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0NhcHR1cmVTb3VyY2VGYWN0b3J5
TWFjOjpjcmVhdGVWaWRlb0NhcHR1cmVTb3VyY2UpOiBEZWFsIHdpdGggc2NyZWVuIGNhcHR1cmUK
KyAgICAgICAgb24gbWFjT1MuCisKKyAgICAgICAgSW1wbGVtZW50IE1hYyBzY3JlZW4gY2FwdHVy
ZSB3aXRoIENHRGlzcGxheVN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheVN1cmZhY2U6On5EaXNw
bGF5U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6RGlzcGxheVN1cmZhY2U6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheVN1cmZhY2U6OmlvU3VyZmFjZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0
dXJlU291cmNlTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kVXBUb01hY3Jv
YmxvY2tNdWx0aXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6dXBkYXRlRGlzcGxheUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWM6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp+U2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2lu
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFy
dERpc3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OmFwcGx5U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6YXBwbHlGcmFtZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNvbW1pdENvbmZpZ3VyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OmRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZnJhbWVBdmFpbGFibGUpOgorCiAyMDE4LTAxLTA1
ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIyNjQwMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDIyOTRhYTlmOWFkZjk4
NmY1MzdkNGQ4NDZmNTVhZjRhN2YxYzIwZjIuLjBlMzBkYzlmNjJmODQzNWM4ZmI3ZDA3ODIxZDBl
ZjBiNjY2NDdjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE4LTAx
LTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtN
ZWRpYVN0cmVhbV0gQWRkIE1hYyBzY3JlZW4gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTMzMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzYzMjMyMTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oOiBEZWNsYXJlIHNvbWUg
Q0dEaXNwbGF5TW9kZSBTUEkuCisKIDIwMTgtMDEtMDMgIFRpbmctV2VpIExhbiAgPGxhbnR3NDRA
Z21haWwuY29tPgogCiAgICAgICAgIFJlcGxhY2UgaGFyZC1jb2RlZCBwYXRocyBpbiBzaGViYW5n
cyB3aXRoICMhL3Vzci9iaW4vZW52CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oCmluZGV4IDFhMTJkODNhNmQzN2VhODUyMTdhZjUwY2RhZjA3ZGU1
ODgxOTQ0NmUuLjg4NDFkNmRjNmE3YWQyYmRhYzE3YTE0ZmIyYzk4ZjI1N2RiYmUzM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oCkBAIC0y
OTYsNiArMjk2LDEwIEBAIENHRXJyb3IgQ0dTR2V0U2NyZWVuUmVjdEZvcldpbmRvdyhDR1NDb25u
ZWN0aW9uSUQsIENHU1dpbmRvd0lELCBDR1JlY3QgKik7CiBDR0Vycm9yIENHU1JlZ2lzdGVyQ29u
bmVjdGlvbk5vdGlmeVByb2MoQ0dTQ29ubmVjdGlvbklELCBDR1NOb3RpZnlDb25uZWN0aW9uUHJv
Y1B0ciwgQ0dTTm90aWZpY2F0aW9uVHlwZSwgdm9pZCogYXJnKTsKIENHRXJyb3IgQ0dTUmVnaXN0
ZXJOb3RpZnlQcm9jKENHU05vdGlmeVByb2NQdHIsIENHU05vdGlmaWNhdGlvblR5cGUsIHZvaWQq
IGFyZyk7CiBib29sIENvbG9yU3luY1Byb2ZpbGVJc1dpZGVHYW11dChDb2xvclN5bmNQcm9maWxl
UmVmKTsKKworc2l6ZV90IENHRGlzcGxheU1vZGVHZXRQaXhlbHNXaWRlKENHRGlzcGxheU1vZGVS
ZWYpOworc2l6ZV90IENHRGlzcGxheU1vZGVHZXRQaXhlbHNIaWdoKENHRGlzcGxheU1vZGVSZWYp
OworCiAjZW5kaWYKIAogV1RGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5k
ZXggZWMxMTY5Mjg0Nzg4OWFjNGZhMTllZGZmZmFkMzljNzE1YjIzZWE4Mi4uNmFhYjRjOTFhMzFi
YWFhMzE0Mzg4Njg0NjdiYjBlZTI5NmM3ZDUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBA
IC0zNjEsNiArMzYxLDcgQEAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUNvY29hLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwCitwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KIAogcGxhdGZvcm0vYXVkaW8v
bWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGUxOTBhMTJmMWUwMzA5ZWMyNWJi
YWViYTM1NjEyMGM5YTNmN2I3YS4uNzMzOWZjMzE3NDIyZmQ2MzVmZTJiYTFmNjMzYTI1YTUzYTZk
MzY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNTAzNSw2ICs1MDM1LDggQEAKIAkJMDcwOUQ3OTExQUU1NTU3RTAwNEU0MkY4
IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzA5RDc5NDFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYVNl
c3Npb25NYW5hZ2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDlG
QzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTbGlkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDcwQTlGNUUxRkZFQ0M3MDAwM0RGNjQ5IC8qIFNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3MEE5RjYwMUZGRUNDNzEwMDNERjY0OSAvKiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcmVlbkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3MEUwOTE4MTg3NUVEOTMwMDNBMUQzQyAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzBFMDkxQTE4NzVFRjcxMDAzQTFEM0MgLyog
UGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQ4NDgsNiArMTQ4NTAsOCBAQAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYxNCAv
KiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTVDREQ4MzNCMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8s
CiAJCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUNvY29hLmggKi8sCisJCQkJMDcwQTlGNUUxRkZFQ0M3MDAwM0RGNjQ5IC8qIFNjcmVlbkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjLmggKi8sCisJCQkJMDcwQTlGNjAxRkZFQ0M3MTAwM0RGNjQ5
IC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tICovLAogCQkJCTA3RDYzNzNFMUJC
MEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJ
CTA3RDYzNzNGMUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5tbSAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5jcHAKaW5kZXggZWQ4MWNjOTNhOWE5MGNhMzQ1NzE4Y2JiODM2NDk2
Y2E4YmY2N2EwMi4uN2FmMTAwYzVhNTI1ZGUyN2UyY2M4MzJiZTc5OGE4NzkwYWVkMzk4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5r
LmNwcApAQCAtODIsMyArODIsMTAgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1cmVHZXROYW1lLCBHTHVpbnQKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJl
R2V0Q2xlYW5UZXhDb29yZHMsIHZvaWQsIChDVk9wZW5HTFRleHR1cmVSZWYgaW1hZ2UsIEdMZmxv
YXQgbG93ZXJMZWZ0WzJdLCBHTGZsb2F0IGxvd2VyUmlnaHRbMl0sIEdMZmxvYXQgdXBwZXJMZWZ0
WzJdLCBHTGZsb2F0IHVwcGVyUmlnaHRbMl0pLCAoaW1hZ2UsIGxvd2VyTGVmdCwgbG93ZXJSaWdo
dCwgdXBwZXJMZWZ0LCB1cHBlclJpZ2h0KSkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNF
KFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xGQk9Db21w
YXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQor
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhl
bEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXksIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NP
TlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVu
ZGVkUGl4ZWxzQm90dG9tS2V5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1Jf
U09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmls
aXR5S2V5LCBDRlN0cmluZ1JlZikKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaAppbmRleCBiMGZlOTllMjFmZTEyZWE1OGVh
Y2U4MDRlNzgyZWFjN2Y1YWIwNTY4Li5mMWYwMWUzMGUzZDZmNzk5ZDViMzU2MmE1NGI2YTljNzcx
NzY5ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRl
b1NvZnRMaW5rLmgKQEAgLTEzMyw0ICsxMzMsMTMgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9I
RUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEYK
ICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xGQk9Db21wYXRpYmlsaXR5S2V5
IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xGQk9Db21wYXRpYmls
aXR5S2V5KCkKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorU09GVF9MSU5LX0NPTlNUQU5U
X0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4
ZWxzUmlnaHRLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVk
UGl4ZWxzUmlnaHRLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxz
UmlnaHRLZXkoKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZp
ZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm90dG9tS2V5LCBDRlN0cmluZ1JlZikK
KyNkZWZpbmUga0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSBnZXRfQ29yZVZp
ZGVvX2tDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkoKQorU09GVF9MSU5LX0NP
TlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5H
TENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlck9w
ZW5HTENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlck9wZW5HTENv
bXBhdGliaWxpdHlLZXkoKQorI2VuZGlmCisKICNlbmRpZiAvLyBDb3JlVmlkZW9Tb2Z0TGlua19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlz
cGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcAppbmRleCBjODIwZDMw
YjlhZmIwY2ZiOTNlNmFlYzZjYjkwYWUzZDJmZWRiYmU1Li40MDk3MzIwNmI5YTRlY2YyZDI3ZGI0
ZjEzOWI3MWJiNGI0YTEyZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJD
b2NvYS5jcHAKQEAgLTMxLDggKzMxLDIxIEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUg
IlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHRGlyZWN0RGlzcGxheS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFBMQVRGT1JNKE1BQykKK3N0YXRpYyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFj
ayhDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKiB1
c2VySW5mbykKK3sKKyAgICBpZiAodXNlckluZm8pCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EqPih1c2VySW5mbyktPnJlZnJlc2hDYXB0dXJlRGV2
aWNlcygpOworfQorI2VuZGlmCisKIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hJiBEaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E+IG1hbmFnZXI7CkBAIC00MSwxNyArNTQs
MTA1IEBAIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hJiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJD
b2NvYTo6c2luZ2xldG9uKCkKIAogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6On5EaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYSgpCiB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtX29i
c2VydmluZ0Rpc3BsYXlDaGFuZ2VzKQorICAgICAgICBDR0Rpc3BsYXlSZW1vdmVSZWNvbmZpZ3Vy
YXRpb25DYWxsYmFjayhkaXNwbGF5UmVjb25maWd1cmF0aW9uQ2FsbEJhY2ssIHRoaXMpOworI2Vu
ZGlmCiB9CiAKIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgRGlzcGxheUNhcHR1cmVNYW5h
Z2VyQ29jb2E6OmNhcHR1cmVEZXZpY2VzKCkKIHsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZDsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIHJlZnJlc2hDYXB0dXJlRGV2aWNl
cygpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBDR0Rpc3BsYXlSZWdpc3RlclJlY29u
ZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjaywgdGhpcyk7
CisjZW5kaWYKKworICAgICAgICBtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzID0gdHJ1ZTsKKyAg
ICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH07CisgICAgCiAgICAgcmV0dXJuIG1fZGlz
cGxheXM7CiB9CiAKK3ZvaWQgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnJlZnJlc2hDYXB0
dXJlRGV2aWNlcygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHVpbnQzMl90IGRpc3BsYXlD
b3VudCA9IDA7CisgICAgYXV0byBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KDAsIG51bGxw
dHIsICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQgd2hlbiB0
cnlpbmcgdG8gZ2V0IGRpc3BsYXkgY291bnQiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXlDb3VudCkgeworICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYSwgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291bnQg
b2YgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBtYXhEaXNwbGF5cyA9
IGRpc3BsYXlDb3VudDsKKyAgICBDR0RpcmVjdERpc3BsYXlJRCBhY3RpdmVEaXNwbGF5c1ttYXhE
aXNwbGF5c107CisgICAgZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdChtYXhEaXNwbGF5cywg
JihhY3RpdmVEaXNwbGF5c1swXSksICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJu
ZWQgZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0IHRoZSBhY3RpdmUgZGlzcGxheSBsaXN0Iiwg
KGludCllcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkaXNwbGF5Q291bnQg
PiBtYXhEaXNwbGF5cykKKyAgICAgICAgZGlzcGxheUNvdW50ID0gbWF4RGlzcGxheXM7CisKKyAg
ICBib29sIGhhdmVEZXZpY2VDaGFuZ2VzID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGRpc3BsYXlJ
RCA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIGlmIChzdGQ6OmFueV9vZihtX2Rpc3BsYXlz
SW50ZXJuYWwuYmVnaW4oKSwgbV9kaXNwbGF5c0ludGVybmFsLmVuZCgpLCBbZGlzcGxheUlEXShh
dXRvJiBkZXZpY2UpIHsgcmV0dXJuIGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCA9PSBkaXNwbGF5
SUQ7IH0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGhhdmVEZXZpY2VDaGFuZ2Vz
ID0gdHJ1ZTsKKyAgICAgICAgbV9kaXNwbGF5c0ludGVybmFsLmFwcGVuZCh7IGRpc3BsYXlJRCwg
Q0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkgfSk7CisgICAgfQorCisg
ICAgZm9yIChhdXRvJiBkaXNwbGF5IDogbV9kaXNwbGF5c0ludGVybmFsKSB7CisgICAgICAgIGF1
dG8gZGlzcGxheU1hc2sgPSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheS5j
Z0RpcmVjdERpc3BsYXlJRCk7CisgICAgICAgIGlmIChkaXNwbGF5LmNnT3BlbkdMRGlzcGxheU1h
c2sgIT0gZGlzcGxheU1hc2spIHsKKyAgICAgICAgICAgIGRpc3BsYXkuY2dPcGVuR0xEaXNwbGF5
TWFzayA9IGRpc3BsYXlNYXNrOworICAgICAgICAgICAgaGF2ZURldmljZUNoYW5nZXMgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXZlRGV2aWNlQ2hhbmdlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBtX2Rpc3BsYXlzID0gVmVjdG9y
PENhcHR1cmVEZXZpY2U+KCk7CisgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2Rpc3BsYXlzSW50
ZXJuYWwpIHsKKyAgICAgICAgQ2FwdHVyZURldmljZSBkaXNwbGF5RGV2aWNlKFN0cmluZzo6bnVt
YmVyKGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
OlNjcmVlbiwgbWFrZVN0cmluZygiU2NyZWVuICIsIFN0cmluZzo6bnVtYmVyKGNvdW50KyspKSk7
CisgICAgICAgIGRpc3BsYXlEZXZpY2Uuc2V0RW5hYmxlZChkZXZpY2UuY2dPcGVuR0xEaXNwbGF5
TWFzayk7CisgICAgICAgIG1fZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkp
OworICAgIH0KKyNlbmRpZgorfQorCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IERpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJ
RChjb25zdCBTdHJpbmcmIGRldmljZUlEKQogeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29s
IG9rOworICAgIGF1dG8gZGlzcGxheUlEID0gZGV2aWNlSUQudG9VSW50U3RyaWN0KCZvayk7Cisg
ICAgaWYgKCFvaykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkRpc3BsYXkgSUQgZG9l
cyBub3QgY29udmVydCB0byAzMi1iaXQgaW50ZWdlciIpOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OnVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGlmICgh
YWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0
byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVhbERpc3BsYXlJRC52
YWx1ZSgpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBBU0NJSUxpdGVyYWwo
IlNjcmVlbkNhcHR1cmVEZXZpY2UiKSk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisK
KyAgICByZXR1cm4gZGV2aWNlOworI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOwog
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKIH0KIAogc3RkOjpvcHRpb25hbDxDYXB0
dXJlRGV2aWNlPiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6Y2FwdHVyZURldmljZVdpdGhQ
ZXJzaXN0ZW50SUQoQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAppbmRleCA4NDk2MmY3
Mjc0OGQ2YzdkNzEzNjk0YTQ5OGVhYTI1YjdiYmIwNDcwLi5kNzYyODY0ZjJlNDI0ZjdmZjU5Yzhi
NWUyNWZhNjNjNGM2YTRlNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29j
b2EuaApAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERpc3BsYXlDYXB0dXJl
TWFuYWdlckNvY29hJiBzaW5nbGV0b24oKTsKICAgICBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YSgpID0gZGVmYXVsdDsKIAorICAgIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCkgZmluYWw7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EoKTsK
IApAQCAtNDMsNyArNDUsMTMgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPENhcHR1cmVE
ZXZpY2U+IGNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGUsIGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURl
dmljZT4gc2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJik7
CiAKKyAgICBzdHJ1Y3QgQ0dEaXNwbGF5Q2FwdHVyZURldmljZSB7CisgICAgICAgIHVpbnQzMl90
IGNnRGlyZWN0RGlzcGxheUlEOworICAgICAgICB1aW50MzJfdCBjZ09wZW5HTERpc3BsYXlNYXNr
OworICAgIH07CisgICAgVmVjdG9yPENHRGlzcGxheUNhcHR1cmVEZXZpY2U+IG1fZGlzcGxheXNJ
bnRlcm5hbDsKICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9kaXNwbGF5czsKKyAgICBib29s
IG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3Bw
CmluZGV4IDczNWUyNjM5OTg0ZDFjZmNiZGM1NzE5MTUyNmE5OWNkNDNlYTJjNTYuLjU4NzUxNDkx
MDhkM2Y0NjIyNThlMGMyMGU0Mjk5MmQ0OTFhMmI2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTU1LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBB
VlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3Ry
YWludHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6U2NyZWVuOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIHJldHVy
biBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50
SWQoKSwgY29uc3RyYWludHMpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAg
Y2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBcHBsaWNhdGlvbjoKICAgICAgICAgY2Fz
ZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6CiAgICAgICAgIGNhc2UgQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6QnJvd3NlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlD
YXB0dXJlU291cmNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc5NTk0YmJhMzY3NzU2ZDc1NGFlYzQ3MmUz
M2U1NDc0N2QwOWUxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMp
CisKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgiCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dEaXNwbGF5U3RyZWFtLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZVJlZi5o
PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQ
aXhlbEJ1ZmZlclJlZjsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNh
bXBsZUJ1ZmZlclJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYyA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBWaWRlb0NhcHR1cmVGYWN0b3J5JiBmYWN0b3J5KCk7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4gdXBkYXRlRGlzcGxheUlE
KENHRGlyZWN0RGlzcGxheUlEKTsKKworcHJpdmF0ZToKKyAgICBTY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYyh1aW50MzJfdCk7CisgICAgdmlydHVhbCB+U2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMoKTsKKworICAgIHN0YXRpYyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxs
QmFjayhDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lk
Kik7CisKKyAgICB2b2lkIGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQs
IENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyk7CisKKyAgICB2b2lkIGZyYW1lQXZhaWxhYmxl
KENHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzLCB1aW50NjRfdCwgSU9TdXJmYWNlUmVmLCBDR0Rp
c3BsYXlTdHJlYW1VcGRhdGVSZWYpOworCisgICAgdm9pZCBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7
CisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9k
dWNpbmdEYXRhKCkgZmluYWw7CisgICAgYm9vbCBhcHBseVNpemUoY29uc3QgSW50U2l6ZSYpIGZp
bmFsOworICAgIGJvb2wgYXBwbHlGcmFtZVJhdGUoZG91YmxlKSBmaW5hbDsKKyAgICB2b2lkIGNv
bW1pdENvbmZpZ3VyYXRpb24oKSBmaW5hbDsKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gc2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOworICAg
IFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9T
dXJmYWNlUmVmKTsKKyAgICBib29sIGNyZWF0ZURpc3BsYXlTdHJlYW0oKTsKKyAgICB2b2lkIHN0
YXJ0RGlzcGxheVN0cmVhbSgpOworICAgIAorICAgIGNsYXNzIERpc3BsYXlTdXJmYWNlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIERpc3BsYXlTdXJmYWNlKCkgPSBkZWZhdWx0OworICAgICAgICB+
RGlzcGxheVN1cmZhY2UoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQor
ICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQo
KSk7CisgICAgICAgIH0KKworICAgICAgICBEaXNwbGF5U3VyZmFjZSYgb3BlcmF0b3I9KElPU3Vy
ZmFjZVJlZiBzdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQor
ICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQo
KSk7CisgICAgICAgICAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgICAgICAgICBJT1N1cmZhY2VJ
bmNyZW1lbnRVc2VDb3VudChzdXJmYWNlKTsKKyAgICAgICAgICAgIG1fc3VyZmFjZSA9IHN1cmZh
Y2U7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBJT1N1
cmZhY2VSZWYgaW9TdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7
CisgICAgfTsKKworICAgIG11dGFibGUgTG9jayBtX2N1cnJlbnRGcmFtZU11dGV4OworICAgIERp
c3BsYXlTdXJmYWNlIG1fY3VycmVudEZyYW1lOworICAgIFJldGFpblB0cjxDR0Rpc3BsYXlTdHJl
YW1SZWY+IG1fZGlzcGxheVN0cmVhbTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4gbV9idWZmZXJBdHRyaWJ1dGVzOworICAgIENHRGlzcGxheVN0cmVhbUZyYW1lQXZhaWxh
YmxlSGFuZGxlciBtX2ZyYW1lQXZhaWxhYmxlQmxvY2s7CisgICAgV2Vha1B0ckZhY3Rvcnk8U2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM+IG1fd2Vha0ZhY3Rvcnk7CisgICAgTWVkaWFUaW1l
IG1fcHJlc2VudGF0aW9uVGltZVN0YW1wOworICAgIE1lZGlhVGltZSBtX2ZyYW1lRHVyYXRpb247
CisKKyAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBtX2NhcHR1cmVRdWV1ZTsKKwor
ICAgIGRvdWJsZSBtX2xhc3RGcmFtZVRpbWUgeyBOQU4gfTsKKyAgICB1aW50MzJfdCBtX2Rpc3Bs
YXlJRCB7IDAgfTsKKyAgICBib29sIG1faXNSdW5uaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
b2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1Nj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI4MmQ5NGYxMzZlODg2Mzg2ZmQyYmJmZTUyOTlmMjE5NTljMmQ1NjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWMubW0KQEAgLTAsMCArMSwzOTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiTWVkaWFDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorCisjaW5jbHVkZSAi
Q29yZVZpZGVvU29mdExpbmsuaCIKKworZXh0ZXJuICJDIiB7CitzaXplX3QgQ0dEaXNwbGF5TW9k
ZUdldFBpeGVsc1dpZGUoQ0dEaXNwbGF5TW9kZVJlZik7CitzaXplX3QgQ0dEaXNwbGF5TW9kZUdl
dFBpeGVsc0hpZ2goQ0dEaXNwbGF5TW9kZVJlZik7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGludDMyX3Qgc2l6
ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9CisKK3N0ZDo6b3B0aW9uYWw8
Q0dEaXJlY3REaXNwbGF5SUQ+IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1cGRhdGVE
aXNwbGF5SUQoQ0dEaXJlY3REaXNwbGF5SUQgZGlzcGxheUlEKQoreworICAgIHVpbnQzMl90IGRp
c3BsYXlDb3VudCA9IDA7CisgICAgYXV0byBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KDAs
IG51bGxwdHIsICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coTWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQg
d2hlbiB0cnlpbmcgdG8gZ2V0IGRpc3BsYXkgY291bnQiLCAoaW50KWVycik7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFkaXNwbGF5Q291bnQpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJu
ZWQgYSBkaXNwbGF5IGNvdW50IG9mIDAiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBhdXRvIG1heERpc3BsYXlzID0gZGlzcGxheUNvdW50OworICAgIENHRGly
ZWN0RGlzcGxheUlEIGFjdGl2ZURpc3BsYXlzW21heERpc3BsYXlzXTsKKyAgICBlcnIgPSBDR0dl
dEFjdGl2ZURpc3BsYXlMaXN0KG1heERpc3BsYXlzLCAmKGFjdGl2ZURpc3BsYXlzWzBdKSwgJmRp
c3BsYXlDb3VudCk7CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0
byBnZXQgdGhlIGFjdGl2ZSBkaXNwbGF5IGxpc3QiLCAoaW50KWVycik7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorICAgIGlmIChkaXNwbGF5Q291bnQgPiBtYXhEaXNwbGF5
cykKKyAgICAgICAgZGlzcGxheUNvdW50ID0gbWF4RGlzcGxheXM7CisKKyAgICBhdXRvIGRpc3Bs
YXlNYXNrID0gQ0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCk7CisgICAg
Zm9yIChhdXRvIGRpc3BsYXkgOiBhY3RpdmVEaXNwbGF5cykgeworICAgICAgICBpZiAoZGlzcGxh
eU1hc2sgPT0gQ0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXkpKQorICAgICAg
ICAgICAgcmV0dXJuIGRpc3BsYXk7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
K30KKworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBj
b25zdHJhaW50cykKK3sKKyAgICBib29sIG9rOworICAgIGF1dG8gZGlzcGxheUlEID0gZGV2aWNl
SUQudG9VSW50U3RyaWN0KCZvayk7CisgICAgaWYgKCFvaykgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkRpc3BsYXkgSUQgZG9lcyBub3QgY29udmVydCB0byAzMi1iaXQgaW50ZWdlciIp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlE
ID0gdXBkYXRlRGlzcGxheUlEKGRpc3BsYXlJRCk7CisgICAgaWYgKCFhY3R1YWxEaXNwbGF5SUQp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcg
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoYWN0dWFsRGlzcGxheUlELnZhbHVlKCkpKTsK
KyAgICBpZiAoY29uc3RyYWludHMgJiYgc291cmNlLT5hcHBseUNvbnN0cmFpbnRzKCpjb25zdHJh
aW50cykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9y
RXJyb3IoV1RGTW92ZShzb3VyY2UpKTsKK30KKworU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKHVpbnQzMl90IGRpc3BsYXlJRCkKKyAg
ICA6IERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoIlNjcmVlbiIpCisgICAgLCBtX2Rpc3BsYXlJ
RChkaXNwbGF5SUQpCit7Cit9CisKK1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp+U2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKQoreworICAgIGlmIChtX29ic2VydmluZ0Rpc3Bs
YXlDaGFuZ2VzKQorICAgICAgICBDR0Rpc3BsYXlSZW1vdmVSZWNvbmZpZ3VyYXRpb25DYWxsYmFj
ayhkaXNwbGF5UmVjb25maWd1cmF0aW9uQ2FsbEJhY2ssIHRoaXMpOworCisgICAgbV9jdXJyZW50
RnJhbWUgPSBudWxscHRyOworfQorCitib29sIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpjcmVhdGVEaXNwbGF5U3RyZWFtKCkKK3sKKyAgICBhdXRvIGFjdHVhbERpc3BsYXlJRCA9IHVw
ZGF0ZURpc3BsYXlJRChtX2Rpc3BsYXlJRCk7CisgICAgaWYgKCFhY3R1YWxEaXNwbGF5SUQpIHsK
KyAgICAgICAgY2FwdHVyZUZhaWxlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG1fZGlzcGxheUlEICE9IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSB7CisgICAg
ICAgIG1fZGlzcGxheUlEID0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCk7CisgICAgICAgIFJFTEVB
U0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZSglcCks
IGRpc3BsYXkgSUQgY2hhbmdlZCB0byAlZCIsIHRoaXMsIG1fZGlzcGxheUlEKTsKKyAgICB9CisK
KyAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgeworCisgICAgICAgIGlmIChzaXplKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBDR0Rpc3BsYXlNb2RlUmVmIGRpc3BsYXlNb2RlID0gQ0dEaXNw
bGF5Q29weURpc3BsYXlNb2RlKG1fZGlzcGxheUlEKTsKKyAgICAgICAgICAgIGF1dG8gc2NyZWVu
V2lkdGggPSBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzV2lkZShkaXNwbGF5TW9kZSk7CisgICAgICAg
ICAgICBhdXRvIHNjcmVlbkhlaWdodCA9IENHRGlzcGxheU1vZGVHZXRQaXhlbHNIaWdoKGRpc3Bs
YXlNb2RlKTsKKyAgICAgICAgICAgIGlmICghc2NyZWVuV2lkdGggfHwgIXNjcmVlbkhlaWdodCkg
eworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0oJXApLCB1bmFibGUgdG8gZ2V0IHNjcmVl
biB3aWR0aC9oZWlnaHQiLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBzY3JlZW5XaWR0aCA9IDY0
MDsKKyAgICAgICAgICAgICAgICBzY3JlZW5IZWlnaHQgPSA0ODA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzZXRXaWR0aChzY3JlZW5XaWR0aCk7CisgICAgICAgICAgICBzZXRIZWlnaHQo
c2NyZWVuSGVpZ2h0KTsKKyAgICAgICAgICAgIENHRGlzcGxheU1vZGVSZWxlYXNlKGRpc3BsYXlN
b2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jYXB0dXJlUXVldWUpCisgICAgICAg
ICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRl
KCJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyBDYXB0dXJlIFF1ZXVlIiwgRElTUEFUQ0hf
UVVFVUVfU0VSSUFMKSk7CisKKyAgICAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VS
R0JDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgICAgIGRv
dWJsZSBmcmFtZVRpbWUgPSAxIC8gZnJhbWVSYXRlKCk7CisgICAgICAgIGF1dG8gZnJhbWVUaW1l
Q0YgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJEb3VibGVUeXBl
LCAgJmZyYW1lVGltZSkpOworICAgICAgICBpbnQgZGVwdGggPSA2OworICAgICAgICBhdXRvIGRl
cHRoQ0YgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBl
LCAgJmRlcHRoKSk7CisgICAgICAgIENGVHlwZVJlZiBrZXlzW10gPSB7CisgICAgICAgICAgICBr
Q0dEaXNwbGF5U3RyZWFtTWluaW11bUZyYW1lVGltZSwKKyAgICAgICAgICAgIGtDR0Rpc3BsYXlT
dHJlYW1RdWV1ZURlcHRoLAorICAgICAgICAgICAga0NHRGlzcGxheVN0cmVhbUNvbG9yU3BhY2Us
CisgICAgICAgICAgICBrQ0dEaXNwbGF5U3RyZWFtU2hvd0N1cnNvciwKKyAgICAgICAgfTsKKyAg
ICAgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geworICAgICAgICAgICAgZnJhbWVUaW1lQ0YuZ2V0
KCksCisgICAgICAgICAgICBkZXB0aENGLmdldCgpLAorICAgICAgICAgICAgZGV2aWNlUkdCQ29s
b3JTcGFjZSwKKyAgICAgICAgICAgIGtDRkJvb2xlYW5UcnVlLAorICAgICAgICB9OworICAgICAg
ICBhdXRvIHN0cmVhbU9wdGlvbnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKKworICAgICAgICBhdXRvIHdlYWtUaGlzID0gbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFr
UHRyKCp0aGlzKTsKKyAgICAgICAgbV9mcmFtZUF2YWlsYWJsZUJsb2NrID0gQmxvY2tfY29weShe
KENHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzIHN0YXR1cywgdWludDY0X3QgZGlzcGxheVRpbWUs
IElPU3VyZmFjZVJlZiBmcmFtZVN1cmZhY2UsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZiB1cGRh
dGVSZWYpIHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICB3ZWFrVGhpcy0+ZnJhbWVBdmFpbGFibGUoc3RhdHVzLCBkaXNw
bGF5VGltZSwgZnJhbWVTdXJmYWNlLCB1cGRhdGVSZWYpOworICAgICAgICB9KTsKKworICAgICAg
ICBtX2Rpc3BsYXlTdHJlYW0gPSBhZG9wdENGKENHRGlzcGxheVN0cmVhbUNyZWF0ZVdpdGhEaXNw
YXRjaFF1ZXVlKG1fZGlzcGxheUlELCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBr
Q1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZSwgc3RyZWFtT3B0
aW9ucy5nZXQoKSwgbV9jYXB0dXJlUXVldWUuZ2V0KCksIG1fZnJhbWVBdmFpbGFibGVCbG9jaykp
OworICAgICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgeworICAgICAgICAgICAgUkVMRUFTRV9M
T0coTWVkaWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlzcGxheVN0
cmVhbSglcCksIENHRGlzcGxheVN0cmVhbUNyZWF0ZSBmYWlsZWQiLCB0aGlzKTsKKyAgICAgICAg
ICAgIGNhcHR1cmVGYWlsZWQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghbV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcykgeworICAgICAg
ICBDR0Rpc3BsYXlSZWdpc3RlclJlY29uZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlSZWNvbmZp
Z3VyYXRpb25DYWxsQmFjaywgdGhpcyk7CisgICAgICAgIG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5n
ZXMgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcmVlbkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIERpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2E6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworCisgICAgaWYgKG1f
aXNSdW5uaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGFydERpc3BsYXlTdHJlYW0oKTsK
K30KKwordm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2luZ0Rh
dGEoKQoreworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnN0b3BQcm9kdWNpbmdEYXRh
KCk7CisKKyAgICBpZiAoIW1faXNSdW5uaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9kaXNwbGF5U3RyZWFtKQorICAgICAgICBDR0Rpc3BsYXlTdHJlYW1TdG9wKG1fZGlzcGxheVN0
cmVhbS5nZXQoKSk7CisKKyAgICBtX2lzUnVubmluZyA9IGZhbHNlOworfQorCitSZXRhaW5QdHI8
Q01TYW1wbGVCdWZmZXJSZWY+IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzYW1wbGVC
dWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKK3sKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENNVGlt
ZSBzYW1wbGVUaW1lID0gQ01UaW1lTWFrZSgoZWxhcHNlZFRpbWUoKSArIC4xKSAqIDEwMCwgMTAw
KTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQs
IHNhbXBsZVRpbWUsIHNhbXBsZVRpbWUgfTsKKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byBzdGF0dXMgPSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsK
KyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiRmFpbGVkIHRv
IGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQi
LCBzdGF0dXMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVNhbXBs
ZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVh
dGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZl
clJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxl
QnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0
dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBD
TVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsK
K30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCit7
CisgICAgaWYgKCFtX2J1ZmZlckF0dHJpYnV0ZXMpIHsKKyAgICAgICAgbV9idWZmZXJBdHRyaWJ1
dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKKworICAgICAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1
cmZhY2UpOworICAgICAgICBpZiAoZm9ybWF0ID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENi
Q3I4QmlQbGFuYXJWaWRlb1JhbmdlIHx8IGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyRnVsbFJhbmdlKSB7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSB3aWR0
aCB4IGhlaWdodCBpc24ndCBhIG11bHRpcGxlIG9mIDE2IHggMTYgYW5kIHRoZSBzdXJmYWNlIGhh
cyBleHRyYSBtZW1vcnkgaW4gdGhlIHBsYW5lcywgc2V0IHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVz
IHRvIHJlZmxlY3QgaXQuCisgICAgICAgICAgICBhdXRvIHdpZHRoID0gSU9TdXJmYWNlR2V0V2lk
dGgoc3VyZmFjZSk7CisgICAgICAgICAgICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdo
dChzdXJmYWNlKTsKKyAgICAgICAgICAgIGludDMyX3QgZXh0ZW5kZWRSaWdodCA9IHJvdW5kVXBU
b01hY3JvYmxvY2tNdWx0aXBsZSh3aWR0aCkgLSB3aWR0aDsKKyAgICAgICAgICAgIGludDMyX3Qg
ZXh0ZW5kZWRCb3R0b20gPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaGVpZ2h0KSAtIGhl
aWdodDsKKworICAgICAgICAgICAgaWYgKChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUo
c3VyZmFjZSwgMCkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQorICAgICAgICAgICAgICAgICYm
IChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMSkgPj0gd2lkdGggKyBl
eHRlbmRlZFJpZ2h0KQorICAgICAgICAgICAgICAgICYmIChJT1N1cmZhY2VHZXRBbGxvY1NpemUo
c3VyZmFjZSkgPj0gKGhlaWdodCArIGV4dGVuZGVkQm90dG9tKSAqIElPU3VyZmFjZUdldEJ5dGVz
UGVyUm93T2ZQbGFuZShzdXJmYWNlLCAwKSAqIDMgLyAyKSkgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNmSW50ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVy
SW50VHlwZSwgICZleHRlbmRlZFJpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJFeHRl
bmRlZFBpeGVsc1JpZ2h0S2V5LCBjZkludC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGNm
SW50ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwg
ICZleHRlbmRlZEJvdHRvbSkpOworICAgICAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhl
bHNCb3R0b21LZXksIGNmSW50LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NW
UGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAg
fQorCisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsKKyAgICBhdXRvIHN0YXR1cyA9
IENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHN1
cmZhY2UsIG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwgJnBpeGVsQnVmZmVyKTsKKyAgICBpZiAo
c3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiRmFpbGVkIHRvIGluaXRpYWxp
emUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0dXMp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRDRihw
aXhlbEJ1ZmZlcik7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6Omdl
bmVyYXRlRnJhbWUoKQoreworICAgIGlmICghbV9jdXJyZW50RnJhbWUuaW9TdXJmYWNlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXlTdXJmYWNlIGN1cnJlbnRGcmFtZTsKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2N1cnJlbnRGcmFtZU11dGV4KTsKKyAgICAgICAg
Y3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWUuaW9TdXJmYWNlKCk7CisgICAgfQorCisgICAg
YXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShjdXJyZW50RnJhbWUu
aW9TdXJmYWNlKCkpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gc2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLmdldCgpKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2Ft
cGxlQnVmZmVyLmdldCgpKSk7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OnN0YXJ0RGlzcGxheVN0cmVhbSgpCit7CisgICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1
cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpOworICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kaXNwbGF5SUQgIT0gYWN0dWFsRGlzcGxheUlE
LnZhbHVlKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5SUQgPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUo
KTsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Y3JlYXRlKCVwKSwgZGlzcGxheSBJRCBjaGFuZ2VkIHRvICVkIiwgdGhpcywgbV9kaXNw
bGF5SUQpOworICAgIH0KKworICAgIGlmICghbV9kaXNwbGF5U3RyZWFtICYmICFjcmVhdGVEaXNw
bGF5U3RyZWFtKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZXJyID0gQ0dEaXNwbGF5
U3RyZWFtU3RhcnQobV9kaXNwbGF5U3RyZWFtLmdldCgpKTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0
YXJ0UHJvZHVjaW5nRGF0YSglcCksIENHRGlzcGxheVN0cmVhbVN0YXJ0IGZhaWxlZCB3aXRoIGVy
cm9yICVkIiwgdGhpcywgZXJyKTsKKyAgICAgICAgY2FwdHVyZUZhaWxlZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9pc1J1bm5pbmcgPSB0cnVlOworfQorCitib29sIFNjcmVl
bkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjphcHBseVNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6
ZSkKK3sKKyAgICBpZiAoc2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKKyAgICBtX2Rpc3BsYXlTdHJlYW0g
PSBudWxscHRyOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNjcmVlbkRpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjphcHBseUZyYW1lUmF0ZShkb3VibGUgcmF0ZSkKK3sKKyAgICBpZiAoZnJh
bWVSYXRlKCkgIT0gcmF0ZSkgeworICAgICAgICBtX2J1ZmZlckF0dHJpYnV0ZXMgPSBudWxscHRy
OworICAgICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBudWxscHRyOworICAgIH0KKworICAgIHJldHVy
biBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjphcHBseUZyYW1lUmF0ZShyYXRlKTsKK30KKwor
dm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y29tbWl0Q29uZmlndXJhdGlvbigp
Cit7CisgICAgaWYgKG1faXNSdW5uaW5nICYmICFtX2Rpc3BsYXlTdHJlYW0pCisgICAgICAgIHN0
YXJ0RGlzcGxheVN0cmVhbSgpOworfQorCit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlD
aGFuZ2VTdW1tYXJ5RmxhZ3MpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCEKK30KKwordm9p
ZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNh
bGxCYWNrKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXksIENHRGlzcGxheUNoYW5nZVN1bW1hcnlG
bGFncyBmbGFncywgdm9pZCAqdXNlckluZm8pCit7CisgICAgaWYgKHVzZXJJbmZvKQorICAgICAg
ICByZWludGVycHJldF9jYXN0PFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjICo+KHVzZXJJ
bmZvKS0+ZGlzcGxheVdhc1JlY29uZmlndXJlZChkaXNwbGF5LCBmbGFncyk7Cit9CisKK3ZvaWQg
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmZyYW1lQXZhaWxhYmxlKENHRGlzcGxheVN0
cmVhbUZyYW1lU3RhdHVzIHN0YXR1cywgdWludDY0X3QgZGlzcGxheVRpbWUsIElPU3VyZmFjZVJl
ZiBmcmFtZVN1cmZhY2UsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZiB1cGRhdGVSZWYpCit7Cisg
ICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1
c0ZyYW1lQ29tcGxldGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dEaXNwbGF5U3Ry
ZWFtRnJhbWVTdGF0dXNGcmFtZUlkbGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dE
aXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUJsYW5rOgorICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYSwgIlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpmcmFtZUF2YWlsYWJsZSglcCks
IGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c0ZyYW1lQmxhbmsiLCB0aGlzKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c1N0b3BwZWQ6Cisg
ICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OmZyYW1lQXZhaWxhYmxlKCVwKSwga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZCIs
IHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWZyYW1lU3VyZmFjZSB8
fCAhZGlzcGxheVRpbWUpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBjb3VudDsKKyAg
ICBhdXRvKiByZWN0cyA9IENHRGlzcGxheVN0cmVhbVVwZGF0ZUdldFJlY3RzKHVwZGF0ZVJlZiwg
a0NHRGlzcGxheVN0cmVhbVVwZGF0ZURpcnR5UmVjdHMsICZjb3VudCk7CisgICAgaWYgKCFyZWN0
cyB8fCAhY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIExvY2tIb2xkZXIgbG9jayhtX2N1
cnJlbnRGcmFtZU11dGV4KTsKKyAgICBtX2xhc3RGcmFtZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyAgICBtX2N1cnJlbnRGcmFtZSA9IGZyYW1lU3VyZmFjZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330576</attachid>
            <date>2018-01-05 13:28:30 -0800</date>
            <delta_ts>2018-01-05 15:11:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181333-20180105132830.patch</filename>
            <type>text/plain</type>
            <size>37392</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRjNmI5YmI4MmVkMjA0
NjdlOGRmYjg1ZjQyOTczYTljNGY5MjI0MC4uN2Q0Y2Y1ZjUxMjBlNmE1MDAyODM1ZTY0MTA5MGMz
YTYzZTUwMGExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA1ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQWRkIE1hYyBzY3JlZW4gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTMzMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzYzMjMyMTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMu
bW0uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwOiBEZWNs
YXJlIG5ldyBjb25zdGFudHMgdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oOgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlSZWNv
bmZpZ3VyYXRpb25DYWxsQmFjayk6IENhbGwgcmVmcmVzaENhcHR1cmVEZXZpY2VzLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6On5EaXNwbGF5Q2FwdHVyZU1h
bmFnZXJDb2NvYSk6IFVucmVnaXN0ZXIgZm9yIGRpc3BsYXkKKyAgICAgICAgcmVjb25maWd1cmF0
aW9uIGNhbGxiYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlTWFuYWdlckNv
Y29hOjpjYXB0dXJlRGV2aWNlcyk6IFJlZ2lzdGVyIGZvciBkaXNwbGF5IHJlY29uZmlncmF0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjpyZWZyZXNo
Q2FwdHVyZURldmljZXMpOiBVc2UgQ0dBY3RpdmVEaXNwbGF5TGlzdCB0bworICAgICAgICBnZXQg
bGlzdCBvZiBhY3RpdmUgc2NyZWVucy4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJl
TWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRCk6IFZhbGlk
YXRlIHNjcmVlbgorICAgICAgICBJRCwgcmV0dXJuIENhcHR1cmVEZXZpY2UuCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmg6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0NhcHR1cmVTb3VyY2VGYWN0b3J5
TWFjOjpjcmVhdGVWaWRlb0NhcHR1cmVTb3VyY2UpOiBEZWFsIHdpdGggc2NyZWVuIGNhcHR1cmUK
KyAgICAgICAgb24gbWFjT1MuCisKKyAgICAgICAgSW1wbGVtZW50IE1hYyBzY3JlZW4gY2FwdHVy
ZSB3aXRoIENHRGlzcGxheVN0cmVhbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheVN1cmZhY2U6On5EaXNw
bGF5U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6RGlzcGxheVN1cmZhY2U6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheVN1cmZhY2U6OmlvU3VyZmFjZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0
dXJlU291cmNlTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kVXBUb01hY3Jv
YmxvY2tNdWx0aXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6dXBkYXRlRGlzcGxheUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWM6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp+U2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2lu
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFy
dERpc3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OmFwcGx5U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6YXBwbHlGcmFtZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNvbW1pdENvbmZpZ3VyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OmRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZnJhbWVBdmFpbGFibGUpOgorCiAyMDE4LTAxLTA1
ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIyNjQwMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDIyOTRhYTlmOWFkZjk4
NmY1MzdkNGQ4NDZmNTVhZjRhN2YxYzIwZjIuLjBlMzBkYzlmNjJmODQzNWM4ZmI3ZDA3ODIxZDBl
ZjBiNjY2NDdjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE4LTAx
LTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtN
ZWRpYVN0cmVhbV0gQWRkIE1hYyBzY3JlZW4gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTMzMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzYzMjMyMTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oOiBEZWNsYXJlIHNvbWUg
Q0dEaXNwbGF5TW9kZSBTUEkuCisKIDIwMTgtMDEtMDMgIFRpbmctV2VpIExhbiAgPGxhbnR3NDRA
Z21haWwuY29tPgogCiAgICAgICAgIFJlcGxhY2UgaGFyZC1jb2RlZCBwYXRocyBpbiBzaGViYW5n
cyB3aXRoICMhL3Vzci9iaW4vZW52CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oCmluZGV4IDFhMTJkODNhNmQzN2VhODUyMTdhZjUwY2RhZjA3ZGU1
ODgxOTQ0NmUuLjg4NDFkNmRjNmE3YWQyYmRhYzE3YTE0ZmIyYzk4ZjI1N2RiYmUzM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oCkBAIC0y
OTYsNiArMjk2LDEwIEBAIENHRXJyb3IgQ0dTR2V0U2NyZWVuUmVjdEZvcldpbmRvdyhDR1NDb25u
ZWN0aW9uSUQsIENHU1dpbmRvd0lELCBDR1JlY3QgKik7CiBDR0Vycm9yIENHU1JlZ2lzdGVyQ29u
bmVjdGlvbk5vdGlmeVByb2MoQ0dTQ29ubmVjdGlvbklELCBDR1NOb3RpZnlDb25uZWN0aW9uUHJv
Y1B0ciwgQ0dTTm90aWZpY2F0aW9uVHlwZSwgdm9pZCogYXJnKTsKIENHRXJyb3IgQ0dTUmVnaXN0
ZXJOb3RpZnlQcm9jKENHU05vdGlmeVByb2NQdHIsIENHU05vdGlmaWNhdGlvblR5cGUsIHZvaWQq
IGFyZyk7CiBib29sIENvbG9yU3luY1Byb2ZpbGVJc1dpZGVHYW11dChDb2xvclN5bmNQcm9maWxl
UmVmKTsKKworc2l6ZV90IENHRGlzcGxheU1vZGVHZXRQaXhlbHNXaWRlKENHRGlzcGxheU1vZGVS
ZWYpOworc2l6ZV90IENHRGlzcGxheU1vZGVHZXRQaXhlbHNIaWdoKENHRGlzcGxheU1vZGVSZWYp
OworCiAjZW5kaWYKIAogV1RGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5k
ZXggZWMxMTY5Mjg0Nzg4OWFjNGZhMTllZGZmZmFkMzljNzE1YjIzZWE4Mi4uNmFhYjRjOTFhMzFi
YWFhMzE0Mzg4Njg0NjdiYjBlZTI5NmM3ZDUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBA
IC0zNjEsNiArMzYxLDcgQEAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUNvY29hLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2EuY3BwCitwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KIAogcGxhdGZvcm0vYXVkaW8v
bWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGUxOTBhMTJmMWUwMzA5ZWMyNWJi
YWViYTM1NjEyMGM5YTNmN2I3YS4uNzMzOWZjMzE3NDIyZmQ2MzVmZTJiYTFmNjMzYTI1YTUzYTZk
MzY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNTAzNSw2ICs1MDM1LDggQEAKIAkJMDcwOUQ3OTExQUU1NTU3RTAwNEU0MkY4
IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzA5RDc5NDFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFu
YWdlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJNZWRpYVNl
c3Npb25NYW5hZ2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDlG
QzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTbGlkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDcwQTlGNUUxRkZFQ0M3MDAwM0RGNjQ5IC8qIFNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3MEE5RjYwMUZGRUNDNzEwMDNERjY0OSAvKiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcmVlbkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3MEUwOTE4MTg3NUVEOTMwMDNBMUQzQyAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzBFMDkxQTE4NzVFRjcxMDAzQTFEM0MgLyog
UGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQ4NDgsNiArMTQ4NTAsOCBAQAogCQkJCTQxMTAzQUE4MUUzOTc5MEEwMDc2OUYxNCAv
KiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VDb2NvYS5oICovLAogCQkJCTVDREQ4MzNCMUU0
MzI0QkIwMDYyMUI4MyAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAgKi8s
CiAJCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUNvY29hLmggKi8sCisJCQkJMDcwQTlGNUUxRkZFQ0M3MDAwM0RGNjQ5IC8qIFNjcmVlbkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjLmggKi8sCisJCQkJMDcwQTlGNjAxRkZFQ0M3MTAwM0RGNjQ5
IC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tICovLAogCQkJCTA3RDYzNzNFMUJC
MEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oICovLAogCQkJ
CTA3RDYzNzNGMUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5tbSAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5jcHAKaW5kZXggZWQ4MWNjOTNhOWE5MGNhMzQ1NzE4Y2JiODM2NDk2
Y2E4YmY2N2EwMi4uN2FmMTAwYzVhNTI1ZGUyN2UyY2M4MzJiZTc5OGE4NzkwYWVkMzk4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5r
LmNwcApAQCAtODIsMyArODIsMTAgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1cmVHZXROYW1lLCBHTHVpbnQKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZPcGVuR0xUZXh0dXJl
R2V0Q2xlYW5UZXhDb29yZHMsIHZvaWQsIChDVk9wZW5HTFRleHR1cmVSZWYgaW1hZ2UsIEdMZmxv
YXQgbG93ZXJMZWZ0WzJdLCBHTGZsb2F0IGxvd2VyUmlnaHRbMl0sIEdMZmxvYXQgdXBwZXJMZWZ0
WzJdLCBHTGZsb2F0IHVwcGVyUmlnaHRbMl0pLCAoaW1hZ2UsIGxvd2VyTGVmdCwgbG93ZXJSaWdo
dCwgdXBwZXJMZWZ0LCB1cHBlclJpZ2h0KSkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNF
KFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xGQk9Db21w
YXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQor
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhl
bEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXksIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NP
TlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVu
ZGVkUGl4ZWxzQm90dG9tS2V5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1Jf
U09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmls
aXR5S2V5LCBDRlN0cmluZ1JlZikKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaAppbmRleCBiMGZlOTllMjFmZTEyZWE1OGVh
Y2U4MDRlNzgyZWFjN2Y1YWIwNTY4Li5mMWYwMWUzMGUzZDZmNzk5ZDViMzU2MmE1NGI2YTljNzcx
NzY5ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRl
b1NvZnRMaW5rLmgKQEAgLTEzMyw0ICsxMzMsMTMgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9I
RUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEYK
ICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xGQk9Db21wYXRpYmlsaXR5S2V5
IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VPcGVuR0xGQk9Db21wYXRpYmls
aXR5S2V5KCkKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorU09GVF9MSU5LX0NPTlNUQU5U
X0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4
ZWxzUmlnaHRLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVk
UGl4ZWxzUmlnaHRLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxz
UmlnaHRLZXkoKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZp
ZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm90dG9tS2V5LCBDRlN0cmluZ1JlZikK
KyNkZWZpbmUga0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSBnZXRfQ29yZVZp
ZGVvX2tDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkoKQorU09GVF9MSU5LX0NP
TlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5H
TENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQorI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlck9w
ZW5HTENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlck9wZW5HTENv
bXBhdGliaWxpdHlLZXkoKQorI2VuZGlmCisKICNlbmRpZiAvLyBDb3JlVmlkZW9Tb2Z0TGlua19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlz
cGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmNwcAppbmRleCBjODIwZDMw
YjlhZmIwY2ZiOTNlNmFlYzZjYjkwYWUzZDJmZWRiYmU1Li40MDk3MzIwNmI5YTRlY2YyZDI3ZGI0
ZjEzOWI3MWJiNGI0YTEyZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJD
b2NvYS5jcHAKQEAgLTMxLDggKzMxLDIxIEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUg
IlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHRGlyZWN0RGlzcGxheS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFBMQVRGT1JNKE1BQykKK3N0YXRpYyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFj
ayhDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKiB1
c2VySW5mbykKK3sKKyAgICBpZiAodXNlckluZm8pCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EqPih1c2VySW5mbyktPnJlZnJlc2hDYXB0dXJlRGV2
aWNlcygpOworfQorI2VuZGlmCisKIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hJiBEaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E+IG1hbmFnZXI7CkBAIC00MSwxNyArNTQs
MTA1IEBAIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hJiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJD
b2NvYTo6c2luZ2xldG9uKCkKIAogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6On5EaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYSgpCiB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtX29i
c2VydmluZ0Rpc3BsYXlDaGFuZ2VzKQorICAgICAgICBDR0Rpc3BsYXlSZW1vdmVSZWNvbmZpZ3Vy
YXRpb25DYWxsYmFjayhkaXNwbGF5UmVjb25maWd1cmF0aW9uQ2FsbEJhY2ssIHRoaXMpOworI2Vu
ZGlmCiB9CiAKIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgRGlzcGxheUNhcHR1cmVNYW5h
Z2VyQ29jb2E6OmNhcHR1cmVEZXZpY2VzKCkKIHsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZDsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIHJlZnJlc2hDYXB0dXJlRGV2aWNl
cygpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBDR0Rpc3BsYXlSZWdpc3RlclJlY29u
ZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjaywgdGhpcyk7
CisjZW5kaWYKKworICAgICAgICBtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzID0gdHJ1ZTsKKyAg
ICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH07CisgICAgCiAgICAgcmV0dXJuIG1fZGlz
cGxheXM7CiB9CiAKK3ZvaWQgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnJlZnJlc2hDYXB0
dXJlRGV2aWNlcygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHVpbnQzMl90IGRpc3BsYXlD
b3VudCA9IDA7CisgICAgYXV0byBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KDAsIG51bGxw
dHIsICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQgd2hlbiB0
cnlpbmcgdG8gZ2V0IGRpc3BsYXkgY291bnQiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXlDb3VudCkgeworICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYSwgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291bnQg
b2YgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBtYXhEaXNwbGF5cyA9
IGRpc3BsYXlDb3VudDsKKyAgICBDR0RpcmVjdERpc3BsYXlJRCBhY3RpdmVEaXNwbGF5c1ttYXhE
aXNwbGF5c107CisgICAgZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdChtYXhEaXNwbGF5cywg
JihhY3RpdmVEaXNwbGF5c1swXSksICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJu
ZWQgZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0IHRoZSBhY3RpdmUgZGlzcGxheSBsaXN0Iiwg
KGludCllcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkaXNwbGF5Q291bnQg
PiBtYXhEaXNwbGF5cykKKyAgICAgICAgZGlzcGxheUNvdW50ID0gbWF4RGlzcGxheXM7CisKKyAg
ICBib29sIGhhdmVEZXZpY2VDaGFuZ2VzID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGRpc3BsYXlJ
RCA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIGlmIChzdGQ6OmFueV9vZihtX2Rpc3BsYXlz
SW50ZXJuYWwuYmVnaW4oKSwgbV9kaXNwbGF5c0ludGVybmFsLmVuZCgpLCBbZGlzcGxheUlEXShh
dXRvJiBkZXZpY2UpIHsgcmV0dXJuIGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCA9PSBkaXNwbGF5
SUQ7IH0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGhhdmVEZXZpY2VDaGFuZ2Vz
ID0gdHJ1ZTsKKyAgICAgICAgbV9kaXNwbGF5c0ludGVybmFsLmFwcGVuZCh7IGRpc3BsYXlJRCwg
Q0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkgfSk7CisgICAgfQorCisg
ICAgZm9yIChhdXRvJiBkaXNwbGF5IDogbV9kaXNwbGF5c0ludGVybmFsKSB7CisgICAgICAgIGF1
dG8gZGlzcGxheU1hc2sgPSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheS5j
Z0RpcmVjdERpc3BsYXlJRCk7CisgICAgICAgIGlmIChkaXNwbGF5LmNnT3BlbkdMRGlzcGxheU1h
c2sgIT0gZGlzcGxheU1hc2spIHsKKyAgICAgICAgICAgIGRpc3BsYXkuY2dPcGVuR0xEaXNwbGF5
TWFzayA9IGRpc3BsYXlNYXNrOworICAgICAgICAgICAgaGF2ZURldmljZUNoYW5nZXMgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXZlRGV2aWNlQ2hhbmdlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBtX2Rpc3BsYXlzID0gVmVjdG9y
PENhcHR1cmVEZXZpY2U+KCk7CisgICAgZm9yIChhdXRvICZkZXZpY2UgOiBtX2Rpc3BsYXlzSW50
ZXJuYWwpIHsKKyAgICAgICAgQ2FwdHVyZURldmljZSBkaXNwbGF5RGV2aWNlKFN0cmluZzo6bnVt
YmVyKGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
OlNjcmVlbiwgbWFrZVN0cmluZygiU2NyZWVuICIsIFN0cmluZzo6bnVtYmVyKGNvdW50KyspKSk7
CisgICAgICAgIGRpc3BsYXlEZXZpY2Uuc2V0RW5hYmxlZChkZXZpY2UuY2dPcGVuR0xEaXNwbGF5
TWFzayk7CisgICAgICAgIG1fZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkp
OworICAgIH0KKyNlbmRpZgorfQorCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IERpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJ
RChjb25zdCBTdHJpbmcmIGRldmljZUlEKQogeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29s
IG9rOworICAgIGF1dG8gZGlzcGxheUlEID0gZGV2aWNlSUQudG9VSW50U3RyaWN0KCZvayk7Cisg
ICAgaWYgKCFvaykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkRpc3BsYXkgSUQgZG9l
cyBub3QgY29udmVydCB0byAzMi1iaXQgaW50ZWdlciIpOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OnVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGlmICgh
YWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0
byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVhbERpc3BsYXlJRC52
YWx1ZSgpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBBU0NJSUxpdGVyYWwo
IlNjcmVlbkNhcHR1cmVEZXZpY2UiKSk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisK
KyAgICByZXR1cm4gZGV2aWNlOworI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOwog
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKIH0KIAogc3RkOjpvcHRpb25hbDxDYXB0
dXJlRGV2aWNlPiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6Y2FwdHVyZURldmljZVdpdGhQ
ZXJzaXN0ZW50SUQoQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAppbmRleCA4NDk2MmY3
Mjc0OGQ2YzdkNzEzNjk0YTQ5OGVhYTI1YjdiYmIwNDcwLi5kNzYyODY0ZjJlNDI0ZjdmZjU5Yzhi
NWUyNWZhNjNjNGM2YTRlNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29j
b2EuaApAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERpc3BsYXlDYXB0dXJl
TWFuYWdlckNvY29hJiBzaW5nbGV0b24oKTsKICAgICBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YSgpID0gZGVmYXVsdDsKIAorICAgIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCkgZmluYWw7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EoKTsK
IApAQCAtNDMsNyArNDUsMTMgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPENhcHR1cmVE
ZXZpY2U+IGNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGUsIGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURl
dmljZT4gc2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJik7
CiAKKyAgICBzdHJ1Y3QgQ0dEaXNwbGF5Q2FwdHVyZURldmljZSB7CisgICAgICAgIHVpbnQzMl90
IGNnRGlyZWN0RGlzcGxheUlEOworICAgICAgICB1aW50MzJfdCBjZ09wZW5HTERpc3BsYXlNYXNr
OworICAgIH07CisgICAgVmVjdG9yPENHRGlzcGxheUNhcHR1cmVEZXZpY2U+IG1fZGlzcGxheXNJ
bnRlcm5hbDsKICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9kaXNwbGF5czsKKyAgICBib29s
IG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3Bw
CmluZGV4IDczNWUyNjM5OTg0ZDFjZmNiZGM1NzE5MTUyNmE5OWNkNDNlYTJjNTYuLjU4NzUxNDkx
MDhkM2Y0NjIyNThlMGMyMGU0Mjk5MmQ0OTFhMmI2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTU1LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBB
VlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3Ry
YWludHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6U2NyZWVuOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIHJldHVy
biBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50
SWQoKSwgY29uc3RyYWludHMpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAg
Y2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBcHBsaWNhdGlvbjoKICAgICAgICAgY2Fz
ZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6CiAgICAgICAgIGNhc2UgQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6QnJvd3NlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlD
YXB0dXJlU291cmNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWUxODc0OGI0ZTVmYmM1MGI2MTFmZjNhMDA1
MTlkYzdjZDZkZmViOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCkBAIC0wLDAg
KzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMp
CisKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgiCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dEaXNwbGF5U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvT1NPYmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCit0eXBlZGVmIHN0
cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVmZmVyUmVmOwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVl
Q01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjIDogcHVibGljIERpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2EgeworcHVibGljOgorICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JF
cnJvciBjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpZGVvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENHRGlyZWN0RGlzcGxh
eUlEPiB1cGRhdGVEaXNwbGF5SUQoQ0dEaXJlY3REaXNwbGF5SUQpOworCitwcml2YXRlOgorICAg
IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKHVpbnQzMl90KTsKKyAgICB2aXJ0dWFsIH5T
Y3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYygpOworCisgICAgc3RhdGljIHZvaWQgZGlzcGxh
eVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFu
Z2VTdW1tYXJ5RmxhZ3MsIHZvaWQqKTsKKworICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJl
ZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzKTsKKworICAg
IHZvaWQgZnJhbWVBdmFpbGFibGUoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90
LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik7CisKKyAgICB2b2lkIGdl
bmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFs
OworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBib29sIGFwcGx5U2l6
ZShjb25zdCBJbnRTaXplJikgZmluYWw7CisgICAgYm9vbCBhcHBseUZyYW1lUmF0ZShkb3VibGUp
IGZpbmFsOworICAgIHZvaWQgY29tbWl0Q29uZmlndXJhdGlvbigpIGZpbmFsOworCisgICAgUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQ
aXhlbEJ1ZmZlclJlZik7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVm
ZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VSZWYpOworICAgIGJvb2wgY3JlYXRlRGlzcGxheVN0
cmVhbSgpOworICAgIHZvaWQgc3RhcnREaXNwbGF5U3RyZWFtKCk7CisgICAgCisgICAgY2xhc3Mg
RGlzcGxheVN1cmZhY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGlzcGxheVN1cmZhY2UoKSA9
IGRlZmF1bHQ7CisgICAgICAgIH5EaXNwbGF5U3VyZmFjZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNl
Q291bnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIERpc3BsYXlTdXJm
YWNlJiBvcGVyYXRvcj0oSU9TdXJmYWNlUmVmIHN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNl
Q291bnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzdXJmYWNlKQorICAgICAg
ICAgICAgICAgIElPU3VyZmFjZUluY3JlbWVudFVzZUNvdW50KHN1cmZhY2UpOworICAgICAgICAg
ICAgbV9zdXJmYWNlID0gc3VyZmFjZTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBt
X3N1cmZhY2UuZ2V0KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJldGFpblB0cjxJT1N1
cmZhY2VSZWY+IG1fc3VyZmFjZTsKKyAgICB9OworCisgICAgbXV0YWJsZSBMb2NrIG1fY3VycmVu
dEZyYW1lTXV0ZXg7CisgICAgRGlzcGxheVN1cmZhY2UgbV9jdXJyZW50RnJhbWU7CisgICAgUmV0
YWluUHRyPENHRGlzcGxheVN0cmVhbVJlZj4gbV9kaXNwbGF5U3RyZWFtOworICAgIFJldGFpblB0
cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2J1ZmZlckF0dHJpYnV0ZXM7CisgICAgQ0dEaXNw
bGF5U3RyZWFtRnJhbWVBdmFpbGFibGVIYW5kbGVyIG1fZnJhbWVBdmFpbGFibGVCbG9jazsKKyAg
ICBXZWFrUHRyRmFjdG9yeTxTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYz4gbV93ZWFrRmFj
dG9yeTsKKyAgICBNZWRpYVRpbWUgbV9wcmVzZW50YXRpb25UaW1lU3RhbXA7CisgICAgTWVkaWFU
aW1lIG1fZnJhbWVEdXJhdGlvbjsKKworICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+
IG1fY2FwdHVyZVF1ZXVlOworCisgICAgZG91YmxlIG1fbGFzdEZyYW1lVGltZSB7IE5BTiB9Owor
ICAgIHVpbnQzMl90IG1fZGlzcGxheUlEIHsgMCB9OworICAgIGJvb2wgbV9pc1J1bm5pbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcyB7IGZhbHNlIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA1ZmE4MmJiOWNkZjQyZThmY2FiNzA5MWIxZjc5NDc2
MWE5MmU4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMCwwICsxLDM5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
IgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW5jbHVkZSAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzLmgiCisKKyNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorCitleHRlcm4gIkMiIHsK
K3NpemVfdCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzV2lkZShDR0Rpc3BsYXlNb2RlUmVmKTsKK3Np
emVfdCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChDR0Rpc3BsYXlNb2RlUmVmKTsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW50MzJfdCByb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUoaW50MzJfdCBzaXplKQoreworICAgIHJldHVybiAoc2l6ZSArIDE1KSAmIH4xNTsK
K30KKworc3RkOjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4gU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OnVwZGF0ZURpc3BsYXlJRChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQp
Cit7CisgICAgdWludDMyX3QgZGlzcGxheUNvdW50ID0gMDsKKyAgICBhdXRvIGVyciA9IENHR2V0
QWN0aXZlRGlzcGxheUxpc3QoMCwgbnVsbHB0ciwgJmRpc3BsYXlDb3VudCk7CisgICAgaWYgKGVy
cikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3Qo
KSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIHN0
YXRpY19jYXN0PGludD4oZXJyKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgaWYgKCFkaXNwbGF5Q291bnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgYSBkaXNwbGF5IGNvdW50IG9mIDAi
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIG1heERp
c3BsYXlzID0gZGlzcGxheUNvdW50OworICAgIENHRGlyZWN0RGlzcGxheUlEIGFjdGl2ZURpc3Bs
YXlzW21heERpc3BsYXlzXTsKKyAgICBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KG1heERp
c3BsYXlzLCAmKGFjdGl2ZURpc3BsYXlzWzBdKSwgJmRpc3BsYXlDb3VudCk7CisgICAgaWYgKGVy
cikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3Qo
KSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgdGhlIGFjdGl2ZSBkaXNwbGF5
IGxpc3QiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKyAgICBpZiAoZGlzcGxheUNvdW50ID4gbWF4RGlzcGxheXMpCisgICAgICAg
IGRpc3BsYXlDb3VudCA9IG1heERpc3BsYXlzOworCisgICAgYXV0byBkaXNwbGF5TWFzayA9IENH
RGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpOworICAgIGZvciAoYXV0byBk
aXNwbGF5IDogYWN0aXZlRGlzcGxheXMpIHsKKyAgICAgICAgaWYgKGRpc3BsYXlNYXNrID09IENH
RGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5KSkKKyAgICAgICAgICAgIHJldHVy
biBkaXNwbGF5OworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK0NhcHR1
cmVTb3VyY2VPckVycm9yIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMp
Cit7CisgICAgYm9vbCBvazsKKyAgICBhdXRvIGRpc3BsYXlJRCA9IGRldmljZUlELnRvVUludFN0
cmljdCgmb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJE
aXNwbGF5IElEIGRvZXMgbm90IGNvbnZlcnQgdG8gMzItYml0IGludGVnZXIiKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGFjdHVhbERpc3BsYXlJRCA9IHVwZGF0ZURp
c3BsYXlJRChkaXNwbGF5SUQpOworICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjKGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSk7CisgICAgaWYgKGNv
bnN0cmFpbnRzICYmIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1v
dmUoc291cmNlKSk7Cit9CisKK1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyh1aW50MzJfdCBkaXNwbGF5SUQpCisgICAgOiBEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hKCJTY3JlZW4iKQorICAgICwgbV9kaXNwbGF5SUQoZGlzcGxheUlE
KQoreworfQorCitTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6flNjcmVlbkRpc3BsYXlD
YXB0dXJlU291cmNlTWFjKCkKK3sKKyAgICBpZiAobV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcykK
KyAgICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJl
Y29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKKworICAgIG1fY3VycmVudEZyYW1lID0gbnVs
bHB0cjsKK30KKworYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlz
cGxheVN0cmVhbSgpCit7CisgICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5
SUQobV9kaXNwbGF5SUQpOworICAgIGlmICghYWN0dWFsRGlzcGxheUlEKSB7CisgICAgICAgIGNh
cHR1cmVGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICht
X2Rpc3BsYXlJRCAhPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUoKSkgeworICAgICAgICBtX2Rpc3Bs
YXlJRCA9IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpOworICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoJXApLCBkaXNwbGF5IElE
IGNoYW5nZWQgdG8gJWQiLCB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGlzcGxheUlEKSk7Cisg
ICAgfQorCisgICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0pIHsKKworICAgICAgICBpZiAoc2l6ZSgp
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQ0dEaXNwbGF5TW9kZVJlZiBkaXNwbGF5TW9kZSA9
IENHRGlzcGxheUNvcHlEaXNwbGF5TW9kZShtX2Rpc3BsYXlJRCk7CisgICAgICAgICAgICBhdXRv
IHNjcmVlbldpZHRoID0gQ0dEaXNwbGF5TW9kZUdldFBpeGVsc1dpZGUoZGlzcGxheU1vZGUpOwor
ICAgICAgICAgICAgYXV0byBzY3JlZW5IZWlnaHQgPSBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGln
aChkaXNwbGF5TW9kZSk7CisgICAgICAgICAgICBpZiAoIXNjcmVlbldpZHRoIHx8ICFzY3JlZW5I
ZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKCVwKSwgdW5hYmxlIHRvIGdl
dCBzY3JlZW4gd2lkdGgvaGVpZ2h0IiwgdGhpcyk7CisgICAgICAgICAgICAgICAgc2NyZWVuV2lk
dGggPSA2NDA7CisgICAgICAgICAgICAgICAgc2NyZWVuSGVpZ2h0ID0gNDgwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2V0V2lkdGgoc2NyZWVuV2lkdGgpOworICAgICAgICAgICAgc2V0
SGVpZ2h0KHNjcmVlbkhlaWdodCk7CisgICAgICAgICAgICBDR0Rpc3BsYXlNb2RlUmVsZWFzZShk
aXNwbGF5TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fY2FwdHVyZVF1ZXVlKQor
ICAgICAgICAgICAgbV9jYXB0dXJlUXVldWUgPSBhZG9wdE9TT2JqZWN0KGRpc3BhdGNoX3F1ZXVl
X2NyZWF0ZSgiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMgQ2FwdHVyZSBRdWV1ZSIsIERJ
U1BBVENIX1FVRVVFX1NFUklBTCkpOworCisgICAgICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYg
ZGV2aWNlUkdCQ29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
ICAgICBkb3VibGUgZnJhbWVUaW1lID0gMSAvIGZyYW1lUmF0ZSgpOworICAgICAgICBhdXRvIGZy
YW1lVGltZUNGID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVyRG91
YmxlVHlwZSwgICZmcmFtZVRpbWUpKTsKKyAgICAgICAgaW50IGRlcHRoID0gNjsKKyAgICAgICAg
YXV0byBkZXB0aENGID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVy
SW50VHlwZSwgICZkZXB0aCkpOworICAgICAgICBDRlR5cGVSZWYga2V5c1tdID0geworICAgICAg
ICAgICAga0NHRGlzcGxheVN0cmVhbU1pbmltdW1GcmFtZVRpbWUsCisgICAgICAgICAgICBrQ0dE
aXNwbGF5U3RyZWFtUXVldWVEZXB0aCwKKyAgICAgICAgICAgIGtDR0Rpc3BsYXlTdHJlYW1Db2xv
clNwYWNlLAorICAgICAgICAgICAga0NHRGlzcGxheVN0cmVhbVNob3dDdXJzb3IsCisgICAgICAg
IH07CisgICAgICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgICAgIGZyYW1lVGlt
ZUNGLmdldCgpLAorICAgICAgICAgICAgZGVwdGhDRi5nZXQoKSwKKyAgICAgICAgICAgIGRldmlj
ZVJHQkNvbG9yU3BhY2UsCisgICAgICAgICAgICBrQ0ZCb29sZWFuVHJ1ZSwKKyAgICAgICAgfTsK
KyAgICAgICAgYXV0byBzdHJlYW1PcHRpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMp
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKSk7CisKKyAgICAgICAgYXV0byB3ZWFrVGhpcyA9IG1fd2Vha0ZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigqdGhpcyk7CisgICAgICAgIG1fZnJhbWVBdmFpbGFibGVCbG9jayA9IEJsb2Nr
X2NvcHkoXihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2NF90IGRpc3Bs
YXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVS
ZWYgdXBkYXRlUmVmKSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgd2Vha1RoaXMtPmZyYW1lQXZhaWxhYmxlKHN0YXR1
cywgZGlzcGxheVRpbWUsIGZyYW1lU3VyZmFjZSwgdXBkYXRlUmVmKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgbV9kaXNwbGF5U3RyZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVX
aXRoRGlzcGF0Y2hRdWV1ZShtX2Rpc3BsYXlJRCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWln
aHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UsIHN0
cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxl
QmxvY2spKTsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0pIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0oJXApLCBDR0Rpc3BsYXlTdHJlYW1DcmVhdGUgZmFpbGVkIiwgdGhpcyk7Cisg
ICAgICAgICAgICBjYXB0dXJlRmFpbGVkKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMpIHsK
KyAgICAgICAgQ0dEaXNwbGF5UmVnaXN0ZXJSZWNvbmZpZ3VyYXRpb25DYWxsYmFjayhkaXNwbGF5
UmVjb25maWd1cmF0aW9uQ2FsbEJhY2ssIHRoaXMpOworICAgICAgICBtX29ic2VydmluZ0Rpc3Bs
YXlDaGFuZ2VzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBT
Y3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAg
ICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzdGFydFByb2R1Y2luZ0RhdGEoKTsKKworICAg
IGlmIChtX2lzUnVubmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhcnREaXNwbGF5U3Ry
ZWFtKCk7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQcm9k
dWNpbmdEYXRhKCkKK3sKKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzdG9wUHJvZHVj
aW5nRGF0YSgpOworCisgICAgaWYgKCFtX2lzUnVubmluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgQ0dEaXNwbGF5U3RyZWFtU3RvcChtX2Rp
c3BsYXlTdHJlYW0uZ2V0KCkpOworCisgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKK30KKworUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
c2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIp
Cit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBDTVRpbWUgc2FtcGxlVGltZSA9IENNVGltZU1ha2UoKGVsYXBzZWRUaW1lKCkgKyAuMSkgKiAx
MDAsIDEwMCk7CisgICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJ
bnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07CisKKyAgICBDTVZpZGVvRm9ybWF0RGVz
Y3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVz
ID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlw
dGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZh
aWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOworICAgIHN0
YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0
aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7CisgICAgQ0ZSZWxlYXNlKGZvcm1hdERl
c2NyaXB0aW9uKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAl
ZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Cit9CisKK1JldGFpblB0
cjxDVlBpeGVsQnVmZmVyUmVmPiBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4ZWxC
dWZmZXJGcm9tSU9TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmICghbV9i
dWZmZXJBdHRyaWJ1dGVzKSB7CisgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICAg
ICAgYXV0byBmb3JtYXQgPSBJT1N1cmZhY2VHZXRQaXhlbEZvcm1hdChzdXJmYWNlKTsKKyAgICAg
ICAgaWYgKGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlk
ZW9SYW5nZSB8fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5h
ckZ1bGxSYW5nZSkgeworCisgICAgICAgICAgICAvLyBJZiB0aGUgd2lkdGggeCBoZWlnaHQgaXNu
J3QgYSBtdWx0aXBsZSBvZiAxNiB4IDE2IGFuZCB0aGUgc3VyZmFjZSBoYXMgZXh0cmEgbWVtb3J5
IGluIHRoZSBwbGFuZXMsIHNldCBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyB0byByZWZsZWN0IGl0
LgorICAgICAgICAgICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2UpOwor
ICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZSk7Cisg
ICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVs
dGlwbGUod2lkdGgpIC0gd2lkdGg7CisgICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkQm90dG9t
ID0gcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7CisKKyAgICAg
ICAgICAgIGlmICgoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApID49
IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0
Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkK
KyAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1cmZhY2UpID49ICho
ZWlnaHQgKyBleHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUo
c3VyZmFjZSwgMCkgKiAzIC8gMikpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjZkludCA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0
ZW5kZWRSaWdodCkpOworICAgICAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSht
X2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdo
dEtleSwgY2ZJbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBjZkludCA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRCb3R0
b20pKTsKKyAgICAgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZmZXJB
dHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm90dG9tS2V5LCBj
ZkludC5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyT3Bl
bkdMQ29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIENWUGl4
ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7CisgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
Q3JlYXRlV2l0aElPU3VyZmFjZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdXJmYWNlLCBtX2J1ZmZl
ckF0dHJpYnV0ZXMuZ2V0KCksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAg
ICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0
Q0YocGl4ZWxCdWZmZXIpOworfQorCit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpnZW5lcmF0ZUZyYW1lKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBEaXNwbGF5U3VyZmFjZSBjdXJyZW50RnJhbWU7Cisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jdXJyZW50RnJhbWVNdXRleCk7CisgICAg
ICAgIGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpOworICAgIH0KKwor
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoY3VycmVudEZy
YW1lLmlvU3VyZmFjZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IHNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihw
aXhlbEJ1ZmZlci5nZXQoKSk7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRl
KHNhbXBsZUJ1ZmZlci5nZXQoKSkpOworfQorCit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpzdGFydERpc3BsYXlTdHJlYW0oKQoreworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlE
ID0gdXBkYXRlRGlzcGxheUlEKG1fZGlzcGxheUlEKTsKKyAgICBpZiAoIWFjdHVhbERpc3BsYXlJ
RCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGlzcGxheUlEICE9IGFjdHVhbERpc3Bs
YXlJRC52YWx1ZSgpKSB7CisgICAgICAgIG1fZGlzcGxheUlEID0gYWN0dWFsRGlzcGxheUlELnZh
bHVlKCk7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OmNyZWF0ZSglcCksIGRpc3BsYXkgSUQgY2hhbmdlZCB0byAlZCIsIHRoaXMsIHN0
YXRpY19jYXN0PGludD4obV9kaXNwbGF5SUQpKTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGlzcGxh
eVN0cmVhbSAmJiAhY3JlYXRlRGlzcGxheVN0cmVhbSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGVyciA9IENHRGlzcGxheVN0cmVhbVN0YXJ0KG1fZGlzcGxheVN0cmVhbS5nZXQoKSk7
CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpzdGFydFByb2R1Y2luZ0RhdGEoJXApLCBDR0Rpc3BsYXlTdHJl
YW1TdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIHRoaXMsIHN0YXRpY19jYXN0PGludD4oZXJy
KSk7CisgICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1faXNSdW5uaW5nID0gdHJ1ZTsKK30KKworYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6YXBwbHlTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKHNp
emUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fYnVmZmVyQXR0
cmlidXRlcyA9IG51bGxwdHI7CisgICAgbV9kaXNwbGF5U3RyZWFtID0gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6YXBw
bHlGcmFtZVJhdGUoZG91YmxlIHJhdGUpCit7CisgICAgaWYgKGZyYW1lUmF0ZSgpICE9IHJhdGUp
IHsKKyAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKKyAgICAgICAgbV9kaXNw
bGF5U3RyZWFtID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6YXBwbHlGcmFtZVJhdGUocmF0ZSk7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OmNvbW1pdENvbmZpZ3VyYXRpb24oKQoreworICAgIGlmIChtX2lz
UnVubmluZyAmJiAhbV9kaXNwbGF5U3RyZWFtKQorICAgICAgICBzdGFydERpc3BsYXlTdHJlYW0o
KTsKK30KKwordm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZGlzcGxheVdhc1Jl
Y29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdz
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQhCit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OmRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERp
c3BsYXlJRCBkaXNwbGF5LCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MgZmxhZ3MsIHZvaWQg
KnVzZXJJbmZvKQoreworICAgIGlmICh1c2VySW5mbykKKyAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyAqPih1c2VySW5mbyktPmRpc3BsYXlXYXNS
ZWNvbmZpZ3VyZWQoZGlzcGxheSwgZmxhZ3MpOworfQorCit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpmcmFtZUF2YWlsYWJsZShDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBz
dGF0dXMsIHVpbnQ2NF90IGRpc3BsYXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBD
R0Rpc3BsYXlTdHJlYW1VcGRhdGVSZWYgdXBkYXRlUmVmKQoreworICAgIHN3aXRjaCAoc3RhdHVz
KSB7CisgICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUNvbXBsZXRlOgor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJh
bWVJZGxlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1l
U3RhdHVzRnJhbWVCbGFuazoKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJTY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZnJhbWVBdmFpbGFibGUoJXApLCBrQ0dEaXNwbGF5U3RyZWFt
RnJhbWVTdGF0dXNGcmFtZUJsYW5rIiwgdGhpcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNTdG9wcGVkOgorICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpmcmFtZUF2YWlsYWJsZSgl
cCksIGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c1N0b3BwZWQiLCB0aGlzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgaWYgKCFmcmFtZVN1cmZhY2UgfHwgIWRpc3BsYXlUaW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgY291bnQ7CisgICAgYXV0byogcmVjdHMgPSBD
R0Rpc3BsYXlTdHJlYW1VcGRhdGVHZXRSZWN0cyh1cGRhdGVSZWYsIGtDR0Rpc3BsYXlTdHJlYW1V
cGRhdGVEaXJ0eVJlY3RzLCAmY291bnQpOworICAgIGlmICghcmVjdHMgfHwgIWNvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBMb2NrSG9sZGVyIGxvY2sobV9jdXJyZW50RnJhbWVNdXRleCk7
CisgICAgbV9sYXN0RnJhbWVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Cisg
ICAgbV9jdXJyZW50RnJhbWUgPSBmcmFtZVN1cmZhY2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330592</attachid>
            <date>2018-01-05 15:11:19 -0800</date>
            <delta_ts>2018-01-05 15:34:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181333-20180105151118.patch</filename>
            <type>text/plain</type>
            <size>37237</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRjNmI5YmI4MmVkMjA0
NjdlOGRmYjg1ZjQyOTczYTljNGY5MjI0MC4uZTgyYzcwYzBkMDBhMTNhMTU2Mjg3MmFiZjkwMTdm
ZmQxNDExNTEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA1ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQWRkIE1hYyBzY3JlZW4gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTMzMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzYzMjMyMTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAg
ICogU291cmNlc0NvY29hLnR4dDogQWRkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1t
LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmNwcDogRGVjbGFy
ZSBuZXcgY29uc3RhbnRzIHVzZWQuCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVv
U29mdExpbmsuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXNwbGF5UmVjb25m
aWd1cmF0aW9uQ2FsbEJhY2spOiBDYWxsIHJlZnJlc2hDYXB0dXJlRGV2aWNlcy4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjp+RGlzcGxheUNhcHR1cmVNYW5h
Z2VyQ29jb2EpOiBVbnJlZ2lzdGVyIGZvciBkaXNwbGF5CisgICAgICAgIHJlY29uZmlndXJhdGlv
biBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YTo6Y2FwdHVyZURldmljZXMpOiBSZWdpc3RlciBmb3IgZGlzcGxheSByZWNvbmZpZ3JhdGlvbnMu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6cmVmcmVzaENh
cHR1cmVEZXZpY2VzKTogVXNlIENHQWN0aXZlRGlzcGxheUxpc3QgdG8KKyAgICAgICAgZ2V0IGxp
c3Qgb2YgYWN0aXZlIHNjcmVlbnMuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1h
bmFnZXJDb2NvYTo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQpOiBWYWxpZGF0
ZSBzY3JlZW4KKyAgICAgICAgSUQsIHJldHVybiBDYXB0dXJlRGV2aWNlLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5oOgorCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9DYXB0dXJlU291cmNlRmFjdG9yeU1h
Yzo6Y3JlYXRlVmlkZW9DYXB0dXJlU291cmNlKTogRGVhbCB3aXRoIHNjcmVlbiBjYXB0dXJlCisg
ICAgICAgIG9uIG1hY09TLgorCisgICAgICAgIEltcGxlbWVudCBNYWMgc2NyZWVuIGNhcHR1cmUg
d2l0aCBDR0Rpc3BsYXlTdHJlYW0uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlTdXJmYWNlOjp+RGlzcGxh
eVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OkRpc3BsYXlTdXJmYWNlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlTdXJmYWNlOjppb1N1cmZhY2UgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Js
b2NrTXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OnVwZGF0ZURpc3BsYXlJRCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6flNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQcm9kdWNpbmdE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpz
YW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RhcnRE
aXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjphcHBseVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OmFwcGx5RnJhbWVSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjpjb21taXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpkaXNwbGF5V2FzUmVjb25maWd1
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpk
aXNwbGF5UmVjb25maWd1cmF0aW9uQ2FsbEJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmZyYW1lQXZhaWxhYmxlKToKKwogMjAxOC0wMS0wNSAg
TWF0dCBMZXdpcyAgPGpsZXdpczNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyMjY0MDEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCAyMjk0YWE5ZjlhZGY5ODZm
NTM3ZDRkODQ2ZjU1YWY0YTdmMWMyMGYyLi5lY2Q2OTc5NmNmZDM3YmU1NTM4OWZiZmY5YTQzMGMx
YjlhZTRjNTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOC0wMS0w
NSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVk
aWFTdHJlYW1dIEFkZCBNYWMgc2NyZWVuIGNhcHR1cmUgc291cmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMzMKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2MzIzMjE5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKwor
ICAgICAgICAqIHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg6IERlY2xhcmUgc29tZSBDR0Rp
c3BsYXlNb2RlIFNQSS4KKwogMjAxOC0wMS0wMyAgVGluZy1XZWkgTGFuICA8bGFudHc0NEBnbWFp
bC5jb20+CiAKICAgICAgICAgUmVwbGFjZSBoYXJkLWNvZGVkIHBhdGhzIGluIHNoZWJhbmdzIHdp
dGggIyEvdXNyL2Jpbi9lbnYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmgKaW5kZXggMWExMmQ4M2E2ZDM3ZWE4NTIxN2FmNTBjZGFmMDdkZTU4ODE5
NDQ2ZS4uODg0MWQ2ZGM2YTdhZDJiZGFjMTdhMTRmYjJjOThmMjU3ZGJiZTMzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmgKQEAgLTI5Niw2
ICsyOTYsMTAgQEAgQ0dFcnJvciBDR1NHZXRTY3JlZW5SZWN0Rm9yV2luZG93KENHU0Nvbm5lY3Rp
b25JRCwgQ0dTV2luZG93SUQsIENHUmVjdCAqKTsKIENHRXJyb3IgQ0dTUmVnaXN0ZXJDb25uZWN0
aW9uTm90aWZ5UHJvYyhDR1NDb25uZWN0aW9uSUQsIENHU05vdGlmeUNvbm5lY3Rpb25Qcm9jUHRy
LCBDR1NOb3RpZmljYXRpb25UeXBlLCB2b2lkKiBhcmcpOwogQ0dFcnJvciBDR1NSZWdpc3Rlck5v
dGlmeVByb2MoQ0dTTm90aWZ5UHJvY1B0ciwgQ0dTTm90aWZpY2F0aW9uVHlwZSwgdm9pZCogYXJn
KTsKIGJvb2wgQ29sb3JTeW5jUHJvZmlsZUlzV2lkZUdhbXV0KENvbG9yU3luY1Byb2ZpbGVSZWYp
OworCitzaXplX3QgQ0dEaXNwbGF5TW9kZUdldFBpeGVsc1dpZGUoQ0dEaXNwbGF5TW9kZVJlZik7
CitzaXplX3QgQ0dEaXNwbGF5TW9kZUdldFBpeGVsc0hpZ2goQ0dEaXNwbGF5TW9kZVJlZik7CisK
ICNlbmRpZgogCiBXVEZfRVhURVJOX0NfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBl
YzExNjkyODQ3ODg5YWM0ZmExOWVkZmZmYWQzOWM3MTViMjNlYTgyLi42YWFiNGM5MWEzMWJhYWEz
MTQzODg2ODQ2N2JiMGVlMjk2YzdkNTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM2
MSw2ICszNjEsNyBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck1hYy5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5jcHAKK3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQogCiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZTE5MGExMmYxZTAzMDllYzI1YmJhZWJh
MzU2MTIwYzlhM2Y3YjdhLi43MzM5ZmMzMTc0MjJmZDYzNWZlMmJhMWY2MzNhMjVhNTNhNmQzNjdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC01MDM1LDYgKzUwMzUsOCBAQAogCQkwNzA5RDc5MTFBRTU1NTdFMDA0RTQyRjggLyog
V2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3MDlENzk0MUFFNTVBMjkwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk1lZGlhU2Vzc2lv
bk1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZDNEQx
MDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwNzBBOUY1RTFGRkVDQzcwMDAzREY2NDkgLyogU2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDcwQTlGNjAxRkZFQ0M3MTAwM0RGNjQ5IC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MERE
OEY1MEYwMTg2ODAwMDcyN0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBtZWRpYUNvbnRyb2xzLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDcwRTA5MTgxODc1RUQ5MzAwM0ExRDNDIC8qIFBsYXRmb3JtTWVkaWFTZXNzaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEUwOTFBMTg3NUVGNzEwMDNBMUQzQyAvKiBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNDg0OCw2ICsxNDg1MCw4IEBACiAJCQkJNDExMDNBQTgxRTM5NzkwQTAwNzY5RjE0IC8qIFJl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUNvY29hLmggKi8sCiAJCQkJNUNERDgzM0IxRTQzMjRC
QjAwNjIxQjgzIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcCAqLywKIAkJ
CQk1Q0REODMzQzFFNDMyNEJCMDA2MjFCODMgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
Q29jb2EuaCAqLywKKwkJCQkwNzBBOUY1RTFGRkVDQzcwMDAzREY2NDkgLyogU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWMuaCAqLywKKwkJCQkwNzBBOUY2MDFGRkVDQzcxMDAzREY2NDkgLyog
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gKi8sCiAJCQkJMDdENjM3M0UxQkIwQjEx
MzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi8sCiAJCQkJMDdE
NjM3M0YxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1t
ICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0Nv
cmVWaWRlb1NvZnRMaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVW
aWRlb1NvZnRMaW5rLmNwcAppbmRleCBlZDgxY2M5M2E5YTkwY2EzNDU3MThjYmI4MzY0OTZjYThi
ZjY3YTAyLi43YWYxMDBjNWE1MjVkZTI3ZTJjYzgzMmJlNzk4YTg3OTBhZWQzOTgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3Bw
CkBAIC04MiwzICs4MiwxMCBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3Jl
LCBDb3JlVmlkZW8sIENWT3BlbkdMVGV4dHVyZUdldE5hbWUsIEdMdWludAogU09GVF9MSU5LX0ZV
TkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBDVk9wZW5HTFRleHR1cmVHZXRD
bGVhblRleENvb3Jkcywgdm9pZCwgKENWT3BlbkdMVGV4dHVyZVJlZiBpbWFnZSwgR0xmbG9hdCBs
b3dlckxlZnRbMl0sIEdMZmxvYXQgbG93ZXJSaWdodFsyXSwgR0xmbG9hdCB1cHBlckxlZnRbMl0s
IEdMZmxvYXQgdXBwZXJSaWdodFsyXSksIChpbWFnZSwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1
cHBlckxlZnQsIHVwcGVyUmlnaHQpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEZCT0NvbXBhdGli
aWxpdHlLZXksIENGU3RyaW5nUmVmKQogI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVm
ZmVyRXh0ZW5kZWRQaXhlbHNSaWdodEtleSwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RB
TlRfRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQ
aXhlbHNCb3R0b21LZXksIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VS
Q0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlL
ZXksIENGU3RyaW5nUmVmKQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCmluZGV4IGIwZmU5OWUyMWZlMTJlYTU4ZWFjZTgw
NGU3ODJlYWM3ZjVhYjA1NjguLmYxZjAxZTMwZTNkNmY3OTlkNWIzNTYyYTU0YjZhOWM3NzE3Njll
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1Nv
ZnRMaW5rLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29m
dExpbmsuaApAQCAtMTMzLDQgKzEzMywxMyBAQCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURF
UihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVySU9TdXJmYWNlT3BlbkdMRgogI2Rl
ZmluZSBrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEZCT0NvbXBhdGliaWxpdHlLZXkgZ2V0
X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZU9wZW5HTEZCT0NvbXBhdGliaWxpdHlL
ZXkoKQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9S
X0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNS
aWdodEtleSwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhl
bHNSaWdodEtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdo
dEtleSgpCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8s
IGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXksIENGU3RyaW5nUmVmKQorI2Rl
ZmluZSBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm90dG9tS2V5IGdldF9Db3JlVmlkZW9f
a0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSgpCitTT0ZUX0xJTktfQ09OU1RB
TlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29t
cGF0aWJpbGl0eUtleSwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtDVlBpeGVsQnVmZmVyT3BlbkdM
Q29tcGF0aWJpbGl0eUtleSBnZXRfQ29yZVZpZGVvX2tDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0
aWJpbGl0eUtleSgpCisjZW5kaWYKKwogI2VuZGlmIC8vIENvcmVWaWRlb1NvZnRMaW5rX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCmluZGV4IGM4MjBkMzBiOWFm
YjBjZmI5M2U2YWVjNmNiOTBhZTNkMmZlZGJiZTUuLmNlYjJhOGI1ZGZmYjZiYzQ4MjBhNGE1MzRm
NjM0MzNjZDM1OTBiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29h
LmNwcApAQCAtMzEsOCArMzEsMjEgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiU2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dE
aXJlY3REaXNwbGF5Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgUExB
VEZPUk0oTUFDKQorc3RhdGljIHZvaWQgZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENH
RGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MsIHZvaWQqIHVzZXJJ
bmZvKQoreworICAgIGlmICh1c2VySW5mbykKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxEaXNw
bGF5Q2FwdHVyZU1hbmFnZXJDb2NvYSo+KHVzZXJJbmZvKS0+cmVmcmVzaENhcHR1cmVEZXZpY2Vz
KCk7Cit9CisjZW5kaWYKKwogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EmIERpc3BsYXlDYXB0
dXJlTWFuYWdlckNvY29hOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYT4gbWFuYWdlcjsKQEAgLTQxLDE3ICs1NCwxMDIg
QEAgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EmIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29h
OjpzaW5nbGV0b24oKQogCiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6fkRpc3BsYXlDYXB0
dXJlTWFuYWdlckNvY29hKCkKIHsKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1fb2JzZXJ2
aW5nRGlzcGxheUNoYW5nZXMpCisgICAgICAgIENHRGlzcGxheVJlbW92ZVJlY29uZmlndXJhdGlv
bkNhbGxiYWNrKGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjaywgdGhpcyk7CisjZW5kaWYK
IH0KIAogY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJD
b2NvYTo6Y2FwdHVyZURldmljZXMoKQogeworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwor
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCk7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1
cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKKyNl
bmRpZgorCisgICAgICAgIG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgPSB0cnVlOworICAgICAg
ICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfTsKKyAgICAKICAgICByZXR1cm4gbV9kaXNwbGF5
czsKIH0KIAordm9pZCBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6cmVmcmVzaENhcHR1cmVE
ZXZpY2VzKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgdWludDMyX3QgZGlzcGxheUNvdW50
ID0gMDsKKyAgICBhdXRvIGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoMCwgbnVsbHB0ciwg
JmRpc3BsYXlDb3VudCk7CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWlu
ZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIChpbnQpZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghZGlzcGxheUNvdW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGEgZGlzcGxheSBjb3VudCBvZiAw
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDR0RpcmVjdERpc3BsYXlJRCBhY3Rp
dmVEaXNwbGF5c1tkaXNwbGF5Q291bnRdOworICAgIGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxp
c3QoZGlzcGxheUNvdW50LCAmKGFjdGl2ZURpc3BsYXlzWzBdKSwgJmRpc3BsYXlDb3VudCk7Cisg
ICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNHR2V0QWN0aXZlRGlz
cGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgdGhlIGFjdGl2
ZSBkaXNwbGF5IGxpc3QiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBib29sIGhhdmVEZXZpY2VDaGFuZ2VzID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGRpc3BsYXlJ
RCA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIGlmIChzdGQ6OmFueV9vZihtX2Rpc3BsYXlz
SW50ZXJuYWwuYmVnaW4oKSwgbV9kaXNwbGF5c0ludGVybmFsLmVuZCgpLCBbZGlzcGxheUlEXShh
dXRvJiBkZXZpY2UpIHsgcmV0dXJuIGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCA9PSBkaXNwbGF5
SUQ7IH0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGhhdmVEZXZpY2VDaGFuZ2Vz
ID0gdHJ1ZTsKKyAgICAgICAgbV9kaXNwbGF5c0ludGVybmFsLmFwcGVuZCh7IGRpc3BsYXlJRCwg
Q0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkgfSk7CisgICAgfQorCisg
ICAgZm9yIChhdXRvJiBkaXNwbGF5IDogbV9kaXNwbGF5c0ludGVybmFsKSB7CisgICAgICAgIGF1
dG8gZGlzcGxheU1hc2sgPSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheS5j
Z0RpcmVjdERpc3BsYXlJRCk7CisgICAgICAgIGlmIChkaXNwbGF5LmNnT3BlbkdMRGlzcGxheU1h
c2sgIT0gZGlzcGxheU1hc2spIHsKKyAgICAgICAgICAgIGRpc3BsYXkuY2dPcGVuR0xEaXNwbGF5
TWFzayA9IGRpc3BsYXlNYXNrOworICAgICAgICAgICAgaGF2ZURldmljZUNoYW5nZXMgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXZlRGV2aWNlQ2hhbmdlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBtX2Rpc3BsYXlzID0gVmVjdG9y
PENhcHR1cmVEZXZpY2U+KCk7CisgICAgZm9yIChhdXRvJiBkZXZpY2UgOiBtX2Rpc3BsYXlzSW50
ZXJuYWwpIHsKKyAgICAgICAgQ2FwdHVyZURldmljZSBkaXNwbGF5RGV2aWNlKFN0cmluZzo6bnVt
YmVyKGRldmljZS5jZ0RpcmVjdERpc3BsYXlJRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
OlNjcmVlbiwgbWFrZVN0cmluZygiU2NyZWVuICIsIFN0cmluZzo6bnVtYmVyKGNvdW50KyspKSk7
CisgICAgICAgIGRpc3BsYXlEZXZpY2Uuc2V0RW5hYmxlZChkZXZpY2UuY2dPcGVuR0xEaXNwbGF5
TWFzayk7CisgICAgICAgIG1fZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkp
OworICAgIH0KKyNlbmRpZgorfQorCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IERpc3Bs
YXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJ
RChjb25zdCBTdHJpbmcmIGRldmljZUlEKQogeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29s
IG9rOworICAgIGF1dG8gZGlzcGxheUlEID0gZGV2aWNlSUQudG9VSW50U3RyaWN0KCZvayk7Cisg
ICAgaWYgKCFvaykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkRpc3BsYXkgSUQgZG9l
cyBub3QgY29udmVydCB0byAzMi1iaXQgaW50ZWdlciIpOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OnVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQpOworICAgIGlmICgh
YWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0
byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVhbERpc3BsYXlJRC52
YWx1ZSgpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBBU0NJSUxpdGVyYWwo
IlNjcmVlbkNhcHR1cmVEZXZpY2UiKSk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisK
KyAgICByZXR1cm4gZGV2aWNlOworI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOwog
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKIH0KIAogc3RkOjpvcHRpb25hbDxDYXB0
dXJlRGV2aWNlPiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6Y2FwdHVyZURldmljZVdpdGhQ
ZXJzaXN0ZW50SUQoQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAppbmRleCA4NDk2MmY3
Mjc0OGQ2YzdkNzEzNjk0YTQ5OGVhYTI1YjdiYmIwNDcwLi5kNzYyODY0ZjJlNDI0ZjdmZjU5Yzhi
NWUyNWZhNjNjNGM2YTRlNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29j
b2EuaApAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERpc3BsYXlDYXB0dXJl
TWFuYWdlckNvY29hJiBzaW5nbGV0b24oKTsKICAgICBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YSgpID0gZGVmYXVsdDsKIAorICAgIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VzKCkgZmluYWw7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EoKTsK
IApAQCAtNDMsNyArNDUsMTMgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPENhcHR1cmVE
ZXZpY2U+IGNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGUsIGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURl
dmljZT4gc2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJik7
CiAKKyAgICBzdHJ1Y3QgQ0dEaXNwbGF5Q2FwdHVyZURldmljZSB7CisgICAgICAgIHVpbnQzMl90
IGNnRGlyZWN0RGlzcGxheUlEOworICAgICAgICB1aW50MzJfdCBjZ09wZW5HTERpc3BsYXlNYXNr
OworICAgIH07CisgICAgVmVjdG9yPENHRGlzcGxheUNhcHR1cmVEZXZpY2U+IG1fZGlzcGxheXNJ
bnRlcm5hbDsKICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4gbV9kaXNwbGF5czsKKyAgICBib29s
IG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3Bw
CmluZGV4IDczNWUyNjM5OTg0ZDFjZmNiZGM1NzE5MTUyNmE5OWNkNDNlYTJjNTYuLjU4NzUxNDkx
MDhkM2Y0NjIyNThlMGMyMGU0Mjk5MmQ0OTFhMmI2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTU1LDYgKzU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBB
VlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSwgY29uc3Ry
YWludHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6U2NyZWVuOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIHJldHVy
biBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50
SWQoKSwgY29uc3RyYWludHMpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAg
Y2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBcHBsaWNhdGlvbjoKICAgICAgICAgY2Fz
ZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6CiAgICAgICAgIGNhc2UgQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6QnJvd3NlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlD
YXB0dXJlU291cmNlTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWUxODc0OGI0ZTVmYmM1MGI2MTFmZjNhMDA1
MTlkYzdjZDZkZmViOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCkBAIC0wLDAg
KzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMp
CisKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgiCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRpb24uaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dEaXNwbGF5U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvT1NPYmplY3RQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCit0eXBlZGVmIHN0
cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVmZmVyUmVmOwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVl
Q01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjIDogcHVibGljIERpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2EgeworcHVibGljOgorICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JF
cnJvciBjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyopOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpZGVvQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENHRGlyZWN0RGlzcGxh
eUlEPiB1cGRhdGVEaXNwbGF5SUQoQ0dEaXJlY3REaXNwbGF5SUQpOworCitwcml2YXRlOgorICAg
IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKHVpbnQzMl90KTsKKyAgICB2aXJ0dWFsIH5T
Y3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYygpOworCisgICAgc3RhdGljIHZvaWQgZGlzcGxh
eVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFu
Z2VTdW1tYXJ5RmxhZ3MsIHZvaWQqKTsKKworICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJl
ZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzKTsKKworICAg
IHZvaWQgZnJhbWVBdmFpbGFibGUoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90
LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik7CisKKyAgICB2b2lkIGdl
bmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFs
OworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBib29sIGFwcGx5U2l6
ZShjb25zdCBJbnRTaXplJikgZmluYWw7CisgICAgYm9vbCBhcHBseUZyYW1lUmF0ZShkb3VibGUp
IGZpbmFsOworICAgIHZvaWQgY29tbWl0Q29uZmlndXJhdGlvbigpIGZpbmFsOworCisgICAgUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQ
aXhlbEJ1ZmZlclJlZik7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVm
ZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VSZWYpOworICAgIGJvb2wgY3JlYXRlRGlzcGxheVN0
cmVhbSgpOworICAgIHZvaWQgc3RhcnREaXNwbGF5U3RyZWFtKCk7CisgICAgCisgICAgY2xhc3Mg
RGlzcGxheVN1cmZhY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGlzcGxheVN1cmZhY2UoKSA9
IGRlZmF1bHQ7CisgICAgICAgIH5EaXNwbGF5U3VyZmFjZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNl
Q291bnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIERpc3BsYXlTdXJm
YWNlJiBvcGVyYXRvcj0oSU9TdXJmYWNlUmVmIHN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNl
Q291bnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzdXJmYWNlKQorICAgICAg
ICAgICAgICAgIElPU3VyZmFjZUluY3JlbWVudFVzZUNvdW50KHN1cmZhY2UpOworICAgICAgICAg
ICAgbV9zdXJmYWNlID0gc3VyZmFjZTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBt
X3N1cmZhY2UuZ2V0KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJldGFpblB0cjxJT1N1
cmZhY2VSZWY+IG1fc3VyZmFjZTsKKyAgICB9OworCisgICAgbXV0YWJsZSBMb2NrIG1fY3VycmVu
dEZyYW1lTXV0ZXg7CisgICAgRGlzcGxheVN1cmZhY2UgbV9jdXJyZW50RnJhbWU7CisgICAgUmV0
YWluUHRyPENHRGlzcGxheVN0cmVhbVJlZj4gbV9kaXNwbGF5U3RyZWFtOworICAgIFJldGFpblB0
cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2J1ZmZlckF0dHJpYnV0ZXM7CisgICAgQ0dEaXNw
bGF5U3RyZWFtRnJhbWVBdmFpbGFibGVIYW5kbGVyIG1fZnJhbWVBdmFpbGFibGVCbG9jazsKKyAg
ICBXZWFrUHRyRmFjdG9yeTxTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYz4gbV93ZWFrRmFj
dG9yeTsKKyAgICBNZWRpYVRpbWUgbV9wcmVzZW50YXRpb25UaW1lU3RhbXA7CisgICAgTWVkaWFU
aW1lIG1fZnJhbWVEdXJhdGlvbjsKKworICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+
IG1fY2FwdHVyZVF1ZXVlOworCisgICAgZG91YmxlIG1fbGFzdEZyYW1lVGltZSB7IE5BTiB9Owor
ICAgIHVpbnQzMl90IG1fZGlzcGxheUlEIHsgMCB9OworICAgIGJvb2wgbV9pc1J1bm5pbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcyB7IGZhbHNlIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE0YTE3MmU0YTBlYTU3NTRlMTBiYmVkMTljYTU0NmIy
MmM4OGE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMCwwICsxLDM5
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
IgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW5jbHVkZSAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzLmgiCisKKyNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorCitleHRlcm4gIkMiIHsK
K3NpemVfdCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzV2lkZShDR0Rpc3BsYXlNb2RlUmVmKTsKK3Np
emVfdCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChDR0Rpc3BsYXlNb2RlUmVmKTsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW50MzJfdCByb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUoaW50MzJfdCBzaXplKQoreworICAgIHJldHVybiAoc2l6ZSArIDE1KSAmIH4xNTsK
K30KKworc3RkOjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4gU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OnVwZGF0ZURpc3BsYXlJRChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQp
Cit7CisgICAgdWludDMyX3QgZGlzcGxheUNvdW50ID0gMDsKKyAgICBhdXRvIGVyciA9IENHR2V0
QWN0aXZlRGlzcGxheUxpc3QoMCwgbnVsbHB0ciwgJmRpc3BsYXlDb3VudCk7CisgICAgaWYgKGVy
cikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3Qo
KSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIHN0
YXRpY19jYXN0PGludD4oZXJyKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgaWYgKCFkaXNwbGF5Q291bnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgYSBkaXNwbGF5IGNvdW50IG9mIDAi
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBDR0RpcmVjdERp
c3BsYXlJRCBhY3RpdmVEaXNwbGF5c1tkaXNwbGF5Q291bnRdOworICAgIGVyciA9IENHR2V0QWN0
aXZlRGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCAmKGFjdGl2ZURpc3BsYXlzWzBdKSwgJmRpc3Bs
YXlDb3VudCk7CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNH
R2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBn
ZXQgdGhlIGFjdGl2ZSBkaXNwbGF5IGxpc3QiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycikpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gZGlzcGxheU1hc2sg
PSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheUlEKTsKKyAgICBmb3IgKGF1
dG8gZGlzcGxheSA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIGlmIChkaXNwbGF5TWFzayA9
PSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheSkpCisgICAgICAgICAgICBy
ZXR1cm4gZGlzcGxheTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitD
YXB0dXJlU291cmNlT3JFcnJvciBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFp
bnRzKQoreworICAgIGJvb2wgb2s7CisgICAgYXV0byBkaXNwbGF5SUQgPSBkZXZpY2VJRC50b1VJ
bnRTdHJpY3QoJm9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiRGlzcGxheSBJRCBkb2VzIG5vdCBjb252ZXJ0IHRvIDMyLWJpdCBpbnRlZ2VyIik7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRh
dGVEaXNwbGF5SUQoZGlzcGxheUlEKTsKKyAgICBpZiAoIWFjdHVhbERpc3BsYXlJRCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyhhY3R1YWxEaXNwbGF5SUQudmFsdWUoKSkpOworICAgIGlm
IChjb25zdHJhaW50cyAmJiBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihX
VEZNb3ZlKHNvdXJjZSkpOworfQorCitTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6U2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWModWludDMyX3QgZGlzcGxheUlEKQorICAgIDogRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYSgiU2NyZWVuIikKKyAgICAsIG1fZGlzcGxheUlEKGRpc3Bs
YXlJRCkKK3sKK30KKworU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6On5TY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYygpCit7CisgICAgaWYgKG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5n
ZXMpCisgICAgICAgIENHRGlzcGxheVJlbW92ZVJlY29uZmlndXJhdGlvbkNhbGxiYWNrKGRpc3Bs
YXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjaywgdGhpcyk7CisKKyAgICBtX2N1cnJlbnRGcmFtZSA9
IG51bGxwdHI7Cit9CisKK2Jvb2wgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0
ZURpc3BsYXlTdHJlYW0oKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgc2NyZWVuUXVldWVNYXhp
bXVtTGVuZ3RoID0gNjsKKworICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gdXBkYXRlRGlzcGxh
eUlEKG1fZGlzcGxheUlEKTsKKyAgICBpZiAoIWFjdHVhbERpc3BsYXlJRCkgeworICAgICAgICBj
YXB0dXJlRmFpbGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
bV9kaXNwbGF5SUQgIT0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCkpIHsKKyAgICAgICAgbV9kaXNw
bGF5SUQgPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUoKTsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVk
aWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKCVwKSwgZGlzcGxheSBJ
RCBjaGFuZ2VkIHRvICVkIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihtX2Rpc3BsYXlJRCkpOwor
ICAgIH0KKworICAgIGlmICghbV9kaXNwbGF5U3RyZWFtKSB7CisKKyAgICAgICAgaWYgKHNpemUo
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIENHRGlzcGxheU1vZGVSZWYgZGlzcGxheU1vZGUg
PSBDR0Rpc3BsYXlDb3B5RGlzcGxheU1vZGUobV9kaXNwbGF5SUQpOworICAgICAgICAgICAgYXV0
byBzY3JlZW5XaWR0aCA9IENHRGlzcGxheU1vZGVHZXRQaXhlbHNXaWRlKGRpc3BsYXlNb2RlKTsK
KyAgICAgICAgICAgIGF1dG8gc2NyZWVuSGVpZ2h0ID0gQ0dEaXNwbGF5TW9kZUdldFBpeGVsc0hp
Z2goZGlzcGxheU1vZGUpOworICAgICAgICAgICAgaWYgKCFzY3JlZW5XaWR0aCB8fCAhc2NyZWVu
SGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJTY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlzcGxheVN0cmVhbSglcCksIHVuYWJsZSB0byBn
ZXQgc2NyZWVuIHdpZHRoL2hlaWdodCIsIHRoaXMpOworICAgICAgICAgICAgICAgIGNhcHR1cmVG
YWlsZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzZXRXaWR0aChzY3JlZW5XaWR0aCk7CisgICAgICAgICAgICBzZXRIZWlnaHQo
c2NyZWVuSGVpZ2h0KTsKKyAgICAgICAgICAgIENHRGlzcGxheU1vZGVSZWxlYXNlKGRpc3BsYXlN
b2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jYXB0dXJlUXVldWUpCisgICAgICAg
ICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRl
KCJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyBDYXB0dXJlIFF1ZXVlIiwgRElTUEFUQ0hf
UVVFVUVfU0VSSUFMKSk7CisKKyAgICAgICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VS
R0JDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgICAgIGRv
dWJsZSBmcmFtZVRpbWUgPSAxIC8gZnJhbWVSYXRlKCk7CisgICAgICAgIGF1dG8gZnJhbWVUaW1l
Q0YgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJEb3VibGVUeXBl
LCAgJmZyYW1lVGltZSkpOworICAgICAgICBpbnQgZGVwdGggPSBzY3JlZW5RdWV1ZU1heGltdW1M
ZW5ndGg7CisgICAgICAgIGF1dG8gZGVwdGhDRiA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVs
bHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZGVwdGgpKTsKKyAgICAgICAgQ0ZUeXBlUmVmIGtl
eXNbXSA9IHsKKyAgICAgICAgICAgIGtDR0Rpc3BsYXlTdHJlYW1NaW5pbXVtRnJhbWVUaW1lLAor
ICAgICAgICAgICAga0NHRGlzcGxheVN0cmVhbVF1ZXVlRGVwdGgsCisgICAgICAgICAgICBrQ0dE
aXNwbGF5U3RyZWFtQ29sb3JTcGFjZSwKKyAgICAgICAgICAgIGtDR0Rpc3BsYXlTdHJlYW1TaG93
Q3Vyc29yLAorICAgICAgICB9OworICAgICAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7CisgICAg
ICAgICAgICBmcmFtZVRpbWVDRi5nZXQoKSwKKyAgICAgICAgICAgIGRlcHRoQ0YuZ2V0KCksCisg
ICAgICAgICAgICBkZXZpY2VSR0JDb2xvclNwYWNlLAorICAgICAgICAgICAga0NGQm9vbGVhblRy
dWUsCisgICAgICAgIH07CisgICAgICAgIGF1dG8gc3RyZWFtT3B0aW9ucyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FS
UkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgICAgIGF1dG8gd2Vha1RoaXMgPSBt
X3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOworICAgICAgICBtX2ZyYW1lQXZhaWxh
YmxlQmxvY2sgPSBCbG9ja19jb3B5KF4oQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMgc3RhdHVz
LCB1aW50NjRfdCBkaXNwbGF5VGltZSwgSU9TdXJmYWNlUmVmIGZyYW1lU3VyZmFjZSwgQ0dEaXNw
bGF5U3RyZWFtVXBkYXRlUmVmIHVwZGF0ZVJlZikgeworICAgICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHdlYWtUaGlzLT5mcmFt
ZUF2YWlsYWJsZShzdGF0dXMsIGRpc3BsYXlUaW1lLCBmcmFtZVN1cmZhY2UsIHVwZGF0ZVJlZik7
CisgICAgICAgIH0pOworCisgICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNw
bGF5U3RyZWFtQ3JlYXRlV2l0aERpc3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFu
YXJWaWRlb1JhbmdlLCBzdHJlYW1PcHRpb25zLmdldCgpLCBtX2NhcHR1cmVRdWV1ZS5nZXQoKSwg
bV9mcmFtZUF2YWlsYWJsZUJsb2NrKSk7CisgICAgICAgIGlmICghbV9kaXNwbGF5U3RyZWFtKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKCVwKSwgQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlIGZh
aWxlZCIsIHRoaXMpOworICAgICAgICAgICAgY2FwdHVyZUZhaWxlZCgpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX29ic2VydmluZ0Rp
c3BsYXlDaGFuZ2VzKSB7CisgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9u
Q2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKKyAgICAgICAg
bV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcyA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0UHJvZHVj
aW5nRGF0YSgpCit7CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c3RhcnRQcm9kdWNp
bmdEYXRhKCk7CisKKyAgICBpZiAobV9pc1J1bm5pbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IHN0YXJ0RGlzcGxheVN0cmVhbSgpOworfQorCit2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYTo6c3RvcFByb2R1Y2luZ0RhdGEoKTsKKworICAgIGlmICghbV9pc1J1bm5pbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2Rpc3BsYXlTdHJlYW0pCisgICAgICAgIENHRGlzcGxh
eVN0cmVhbVN0b3AobV9kaXNwbGF5U3RyZWFtLmdldCgpKTsKKworICAgIG1faXNSdW5uaW5nID0g
ZmFsc2U7Cit9CisKK1JldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gU2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVy
UmVmIHBpeGVsQnVmZmVyKQoreworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQ01UaW1lIHNhbXBsZVRpbWUgPSBDTVRpbWVNYWtlKChlbGFwc2Vk
VGltZSgpICsgLjEpICogMTAwLCAxMDApOworICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJ
bmZvID0geyBrQ01UaW1lSW52YWxpZCwgc2FtcGxlVGltZSwgc2FtcGxlVGltZSB9OworCisgICAg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsK
KyAgICBhdXRvIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdl
QnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVy
LCAmZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdl
QnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVy
LCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIENG
UmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdp
dGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIp
OworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gU2NyZWVuRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VSZWYgc3VyZmFjZSkK
K3sKKyAgICBpZiAoIW1fYnVmZmVyQXR0cmlidXRlcykgeworICAgICAgICBtX2J1ZmZlckF0dHJp
YnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUobnVsbHB0ciwgMCwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOworCisgICAgICAgIGF1dG8gZm9ybWF0ID0gSU9TdXJmYWNlR2V0UGl4ZWxGb3JtYXQo
c3VyZmFjZSk7CisgICAgICAgIGlmIChmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlw
Q2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVsRm9ybWF0VHlwZV80
MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHdp
ZHRoIHggaGVpZ2h0IGlzbid0IGEgbXVsdGlwbGUgb2YgMTYgeCAxNiBhbmQgdGhlIHN1cmZhY2Ug
aGFzIGV4dHJhIG1lbW9yeSBpbiB0aGUgcGxhbmVzLCBzZXQgcGl4ZWwgYnVmZmVyIGF0dHJpYnV0
ZXMgdG8gcmVmbGVjdCBpdC4KKyAgICAgICAgICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRX
aWR0aChzdXJmYWNlKTsKKyAgICAgICAgICAgIGF1dG8gaGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVp
Z2h0KHN1cmZhY2UpOworICAgICAgICAgICAgaW50MzJfdCBleHRlbmRlZFJpZ2h0ID0gcm91bmRV
cFRvTWFjcm9ibG9ja011bHRpcGxlKHdpZHRoKSAtIHdpZHRoOworICAgICAgICAgICAgaW50MzJf
dCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZShoZWlnaHQpIC0g
aGVpZ2h0OworCisgICAgICAgICAgICBpZiAoKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFu
ZShzdXJmYWNlLCAwKSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCisgICAgICAgICAgICAgICAg
JiYgKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShzdXJmYWNlLCAxKSA+PSB3aWR0aCAr
IGV4dGVuZGVkUmlnaHQpCisgICAgICAgICAgICAgICAgJiYgKElPU3VyZmFjZUdldEFsbG9jU2l6
ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9TdXJmYWNlR2V0Qnl0
ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY2ZJbnQgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1i
ZXJJbnRUeXBlLCAgJmV4dGVuZGVkUmlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4
dGVuZGVkUGl4ZWxzUmlnaHRLZXksIGNmSW50LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2ZJbnQgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBl
LCAgJmV4dGVuZGVkQm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBp
eGVsc0JvdHRvbUtleSwgY2ZJbnQuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKKyAg
ICB9CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOworICAgIGF1dG8gc3RhdHVz
ID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
c3VyZmFjZSwgbV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCAmcGl4ZWxCdWZmZXIpOworICAgIGlm
IChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlh
bGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRp
Y19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHJldHVybiBhZG9wdENGKHBpeGVsQnVmZmVyKTsKK30KKwordm9pZCBTY3JlZW5EaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCit7CisgICAgaWYgKCFtX2N1cnJlbnRG
cmFtZS5pb1N1cmZhY2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxheVN1cmZhY2Ug
Y3VycmVudEZyYW1lOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY3VycmVudEZy
YW1lTXV0ZXgpOworICAgICAgICBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZS5pb1N1cmZh
Y2UoKTsKKyAgICB9CisKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tSU9T
dXJmYWNlKGN1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBzYW1wbGVCdWZmZXJG
cm9tUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOworICAgIGlmICghc2FtcGxlQnVmZmVy
KQorICAgICAgICByZXR1cm47CisKKyAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBs
ZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCkpKTsKK30KKwordm9pZCBTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RhcnREaXNwbGF5U3RyZWFtKCkKK3sKKyAgICBhdXRv
IGFjdHVhbERpc3BsYXlJRCA9IHVwZGF0ZURpc3BsYXlJRChtX2Rpc3BsYXlJRCk7CisgICAgaWYg
KCFhY3R1YWxEaXNwbGF5SUQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Rpc3BsYXlJ
RCAhPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUoKSkgeworICAgICAgICBtX2Rpc3BsYXlJRCA9IGFj
dHVhbERpc3BsYXlJRC52YWx1ZSgpOworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVl
bkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoJXApLCBkaXNwbGF5IElEIGNoYW5nZWQg
dG8gJWQiLCB0aGlzLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGlzcGxheUlEKSk7CisgICAgfQorCisg
ICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0gJiYgIWNyZWF0ZURpc3BsYXlTdHJlYW0oKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBlcnIgPSBDR0Rpc3BsYXlTdHJlYW1TdGFydChtX2Rpc3Bs
YXlTdHJlYW0uZ2V0KCkpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVk
aWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RhcnRQcm9kdWNpbmdEYXRhKCVw
KSwgQ0dEaXNwbGF5U3RyZWFtU3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCB0aGlzLCBzdGF0
aWNfY2FzdDxpbnQ+KGVycikpOworICAgICAgICBjYXB0dXJlRmFpbGVkKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2lzUnVubmluZyA9IHRydWU7Cit9CisKK2Jvb2wgU2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmFwcGx5U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXpl
KQoreworICAgIGlmIChzaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBtX2J1ZmZlckF0dHJpYnV0ZXMgPSBudWxscHRyOworICAgIG1fZGlzcGxheVN0cmVhbSA9
IG51bGxwdHI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OmFwcGx5RnJhbWVSYXRlKGRvdWJsZSByYXRlKQoreworICAgIGlmIChmcmFt
ZVJhdGUoKSAhPSByYXRlKSB7CisgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IG51bGxwdHI7
CisgICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmFwcGx5RnJhbWVSYXRlKHJhdGUpOworfQorCit2
b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjb21taXRDb25maWd1cmF0aW9uKCkK
K3sKKyAgICBpZiAobV9pc1J1bm5pbmcgJiYgIW1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgc3Rh
cnREaXNwbGF5U3RyZWFtKCk7Cit9CisKK3ZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNo
YW5nZVN1bW1hcnlGbGFncykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IQorfQorCit2b2lk
IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpkaXNwbGF5UmVjb25maWd1cmF0aW9uQ2Fs
bEJhY2soQ0dEaXJlY3REaXNwbGF5SUQgZGlzcGxheSwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZs
YWdzIGZsYWdzLCB2b2lkICp1c2VySW5mbykKK3sKKyAgICBpZiAodXNlckluZm8pCisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMgKj4odXNlcklu
Zm8pLT5kaXNwbGF5V2FzUmVjb25maWd1cmVkKGRpc3BsYXksIGZsYWdzKTsKK30KKwordm9pZCBT
Y3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZnJhbWVBdmFpbGFibGUoQ0dEaXNwbGF5U3Ry
ZWFtRnJhbWVTdGF0dXMgc3RhdHVzLCB1aW50NjRfdCBkaXNwbGF5VGltZSwgSU9TdXJmYWNlUmVm
IGZyYW1lU3VyZmFjZSwgQ0dEaXNwbGF5U3RyZWFtVXBkYXRlUmVmIHVwZGF0ZVJlZikKK3sKKyAg
ICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVz
RnJhbWVDb21wbGV0ZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtDR0Rpc3BsYXlTdHJl
YW1GcmFtZVN0YXR1c0ZyYW1lSWRsZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtDR0Rp
c3BsYXlTdHJlYW1GcmFtZVN0YXR1c0ZyYW1lQmxhbms6CisgICAgICAgIFJFTEVBU0VfTE9HKE1l
ZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmZyYW1lQXZhaWxhYmxlKCVwKSwg
a0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVCbGFuayIsIHRoaXMpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZDoKKyAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
ZnJhbWVBdmFpbGFibGUoJXApLCBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNTdG9wcGVkIiwg
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghZnJhbWVTdXJmYWNlIHx8
ICFkaXNwbGF5VGltZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGNvdW50OworICAg
IGF1dG8qIHJlY3RzID0gQ0dEaXNwbGF5U3RyZWFtVXBkYXRlR2V0UmVjdHModXBkYXRlUmVmLCBr
Q0dEaXNwbGF5U3RyZWFtVXBkYXRlRGlydHlSZWN0cywgJmNvdW50KTsKKyAgICBpZiAoIXJlY3Rz
IHx8ICFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTG9ja0hvbGRlciBsb2NrKG1fY3Vy
cmVudEZyYW1lTXV0ZXgpOworICAgIG1fbGFzdEZyYW1lVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIG1fY3VycmVudEZyYW1lID0gZnJhbWVTdXJmYWNlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>