<?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>212470</bug_id>
          
          <creation_ts>2020-05-28 08:42:54 -0700</creation_ts>
          <short_desc>[WebXR] Refactor OpenXR platform code</short_desc>
          <delta_ts>2020-06-10 13:46:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>213045</dependson>
          <blocked>208988</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>darin</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656866</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-28 08:42:54 -0700</bug_when>
    <thetext>[WebXR] Refactor OpenXR platform code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656873</commentid>
    <comment_count>1</comment_count>
      <attachid>400466</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-28 09:00:07 -0700</bug_when>
    <thetext>Created attachment 400466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656875</commentid>
    <comment_count>2</comment_count>
      <attachid>400468</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-28 09:05:13 -0700</bug_when>
    <thetext>Created attachment 400468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657197</commentid>
    <comment_count>3</comment_count>
      <attachid>400468</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-05-29 03:09:24 -0700</bug_when>
    <thetext>Comment on attachment 400468
Patch

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

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:60
&gt; +    return this == &amp;other ? true : false;

Should be able to avoid the ternary operator.

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:83
&gt; +        RETURN_IF_FAILED(result, &quot;xrEnumerateApiLayerProperties()&quot;, m_instance);

How is m_instance supposed to be used here when it&apos;s not yet initialized? It&apos;s passed to xrResultToString(), but the docs for that entrypoint suggest it must be a valid handle.

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:149
&gt; +Instance::Impl::~Impl()
&gt; +{
&gt; +}

Can be `= default;`-ed, unless it should destroy the XrInstance object.

&gt; Source/WebCore/testing/WebFakeXRDevice.h:73
&gt; +    bool operator==(const Device&amp; other) const final { return this == &amp;other ? true : false; }

As before, the ?: operator can be omitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657205</commentid>
    <comment_count>4</comment_count>
      <attachid>400468</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-29 03:35:43 -0700</bug_when>
    <thetext>Comment on attachment 400468
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:83
&gt;&gt; +        RETURN_IF_FAILED(result, &quot;xrEnumerateApiLayerProperties()&quot;, m_instance);
&gt; 
&gt; How is m_instance supposed to be used here when it&apos;s not yet initialized? It&apos;s passed to xrResultToString(), but the docs for that entrypoint suggest it must be a valid handle.

It&apos;s initialized to XR_NULL_HANDLE but that&apos;s indeed an invalid handle. The Monado runtime early returns with invalid handles but I agree we&apos;re not respecting the API contract. 

I&apos;ll add a check in resultToString() before landing.

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:149
&gt;&gt; +}
&gt; 
&gt; Can be `= default;`-ed, unless it should destroy the XrInstance object.

Right, we should call xrDestroyInstance here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657206</commentid>
    <comment_count>5</comment_count>
      <attachid>400468</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-29 03:36:11 -0700</bug_when>
    <thetext>Comment on attachment 400468
Patch

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

&gt; Source/WebCore/platform/xr/PlatformXR.h:55
&gt; +    virtual bool operator==(const Device&amp; other) const = 0;

In theory, we could have A == B be true and B == A be false.
Maybe we should have a function operator==(const Device&amp;, const Device&amp;) that would return false if the two device types are not the same derived type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657217</commentid>
    <comment_count>6</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-29 04:56:45 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Comment on attachment 400468 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400468&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/xr/PlatformXR.h:55
&gt; &gt; +    virtual bool operator==(const Device&amp; other) const = 0;
&gt; 
&gt; In theory, we could have A == B be true and B == A be false.
&gt; Maybe we should have a function operator==(const Device&amp;, const Device&amp;)
&gt; that would return false if the two device types are not the same derived
&gt; type.

I am not sure whether I understand this proposal. Looks like you are suggesting to replace the virtual member operator by a function operator to check that the derived types are the same.

My question is, where would you then define the operator== for the OpenXRDevice subclasses which compares the ids? Because all the code outside of platform (and WebCore/testing) should have to only deal with Device classes and not any of their subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657312</commentid>
    <comment_count>7</comment_count>
      <attachid>400468</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-29 10:21:21 -0700</bug_when>
    <thetext>Comment on attachment 400468
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/xr/PlatformXR.h:55
&gt;&gt;&gt; +    virtual bool operator==(const Device&amp; other) const = 0;
&gt;&gt; 
&gt;&gt; In theory, we could have A == B be true and B == A be false.
&gt;&gt; Maybe we should have a function operator==(const Device&amp;, const Device&amp;) that would return false if the two device types are not the same derived type.
&gt; 
&gt; I am not sure whether I understand this proposal. Looks like you are suggesting to replace the virtual member operator by a function operator to check that the derived types are the same.
&gt; 
&gt; My question is, where would you then define the operator== for the OpenXRDevice subclasses which compares the ids? Because all the code outside of platform (and WebCore/testing) should have to only deal with Device classes and not any of their subclasses.

It’s true, virtual operators are typically not a good pattern. It’s easy to get them wrong.

I suggest we name this operation rather than overloading ==. Just call it isSameDevice.
If it’s an error to call this with a derived class pointer, then at the very least the derived classes should make their overloads private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657485</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-29 16:07:36 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 400468 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400468&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/xr/PlatformXR.h:55
&gt; &gt;&gt;&gt; +    virtual bool operator==(const Device&amp; other) const = 0;
&gt; &gt;&gt; 
&gt; &gt;&gt; In theory, we could have A == B be true and B == A be false.
&gt; &gt;&gt; Maybe we should have a function operator==(const Device&amp;, const Device&amp;) that would return false if the two device types are not the same derived type.
&gt; &gt; 
&gt; &gt; I am not sure whether I understand this proposal. Looks like you are suggesting to replace the virtual member operator by a function operator to check that the derived types are the same.
&gt; &gt; 
&gt; &gt; My question is, where would you then define the operator== for the OpenXRDevice subclasses which compares the ids? Because all the code outside of platform (and WebCore/testing) should have to only deal with Device classes and not any of their subclasses.
&gt; 
&gt; It’s true, virtual operators are typically not a good pattern. It’s easy to
&gt; get them wrong.
&gt; 
&gt; I suggest we name this operation rather than overloading ==. Just call it
&gt; isSameDevice.
&gt; If it’s an error to call this with a derived class pointer, then at the very
&gt; least the derived classes should make their overloads private.

Well I was overloading == because I want all the operations in containers to just work without any extra code. What would you suggest?

In the end we might now strictly need it because those containers will typically store a Ref&lt;&gt;, RefPtr&lt;&gt; of those objects.

Another option could be to just keep the current code, i.e., we generate consecutive integers to identify devices and that&apos;s it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657486</commentid>
    <comment_count>9</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-29 16:08:36 -0700</bug_when>
    <thetext>(In reply to Sergio Villar Senin from comment #8) 
&gt; In the end we might now strictly need it because those containers
                      ^^^
                      not</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657500</commentid>
    <comment_count>10</comment_count>
      <attachid>400468</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-29 16:23:52 -0700</bug_when>
    <thetext>Comment on attachment 400468
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/xr/PlatformXR.h:55
&gt;&gt;&gt;&gt;&gt; +    virtual bool operator==(const Device&amp; other) const = 0;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; In theory, we could have A == B be true and B == A be false.
&gt;&gt;&gt;&gt; Maybe we should have a function operator==(const Device&amp;, const Device&amp;) that would return false if the two device types are not the same derived type.
&gt;&gt;&gt; 
&gt;&gt;&gt; I am not sure whether I understand this proposal. Looks like you are suggesting to replace the virtual member operator by a function operator to check that the derived types are the same.
&gt;&gt;&gt; 
&gt;&gt;&gt; My question is, where would you then define the operator== for the OpenXRDevice subclasses which compares the ids? Because all the code outside of platform (and WebCore/testing) should have to only deal with Device classes and not any of their subclasses.
&gt;&gt; 
&gt;&gt; It’s true, virtual operators are typically not a good pattern. It’s easy to get them wrong.
&gt;&gt; 
&gt;&gt; I suggest we name this operation rather than overloading ==. Just call it isSameDevice.
&gt;&gt; If it’s an error to call this with a derived class pointer, then at the very least the derived classes should make their overloads private.
&gt; 
&gt; Well I was overloading == because I want all the operations in containers to just work without any extra code. What would you suggest?
&gt; 
&gt; In the end we might now strictly need it because those containers will typically store a Ref&lt;&gt;, RefPtr&lt;&gt; of those objects.
&gt; 
&gt; Another option could be to just keep the current code, i.e., we generate consecutive integers to identify devices and that&apos;s it.

OK. Please give me one or more specific examples of a useful container operation so I can consider the value and comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657502</commentid>
    <comment_count>11</comment_count>
      <attachid>400468</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-29 16:24:21 -0700</bug_when>
    <thetext>Comment on attachment 400468
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/xr/PlatformXR.h:55
&gt;&gt;&gt;&gt;&gt;&gt; +    virtual bool operator==(const Device&amp; other) const = 0;
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; In theory, we could have A == B be true and B == A be false.
&gt;&gt;&gt;&gt;&gt; Maybe we should have a function operator==(const Device&amp;, const Device&amp;) that would return false if the two device types are not the same derived type.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I am not sure whether I understand this proposal. Looks like you are suggesting to replace the virtual member operator by a function operator to check that the derived types are the same.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; My question is, where would you then define the operator== for the OpenXRDevice subclasses which compares the ids? Because all the code outside of platform (and WebCore/testing) should have to only deal with Device classes and not any of their subclasses.
&gt;&gt;&gt; 
&gt;&gt;&gt; It’s true, virtual operators are typically not a good pattern. It’s easy to get them wrong.
&gt;&gt;&gt; 
&gt;&gt;&gt; I suggest we name this operation rather than overloading ==. Just call it isSameDevice.
&gt;&gt;&gt; If it’s an error to call this with a derived class pointer, then at the very least the derived classes should make their overloads private.
&gt;&gt; 
&gt;&gt; Well I was overloading == because I want all the operations in containers to just work without any extra code. What would you suggest?
&gt;&gt; 
&gt;&gt; In the end we might now strictly need it because those containers will typically store a Ref&lt;&gt;, RefPtr&lt;&gt; of those objects.
&gt;&gt; 
&gt;&gt; Another option could be to just keep the current code, i.e., we generate consecutive integers to identify devices and that&apos;s it.
&gt; 
&gt; OK. Please give me one or more specific examples of a useful container operation so I can consider the value and comment.

Typically you can’t store a polymorphic object in a container: As you said you’ll be storing pointers in the containers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659535</commentid>
    <comment_count>12</comment_count>
      <attachid>401135</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-06-05 03:20:50 -0700</bug_when>
    <thetext>Created attachment 401135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659539</commentid>
    <comment_count>13</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-06-05 03:27:40 -0700</bug_when>
    <thetext>Darin, Youenn PTAL

I finally removed the equality operator overloading. So far there is no need for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659552</commentid>
    <comment_count>14</comment_count>
      <attachid>401135</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-06-05 04:16:33 -0700</bug_when>
    <thetext>Comment on attachment 401135
Patch

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

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:95
&gt; +    }();

Why do we need these lambdas? It seems its purpose is to not do an if/else.
Can we remove them, maybe by using functions with a name that will tell what it does?

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:157
&gt; +    XrResult result = xrEnumerateViewConfigurations(m_instance, device.xrSystemId(), 0, &amp;viewConfigurationCount, nullptr);

auto

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:167
&gt; +        WTFLogAlways(&quot;xrEnumerateViewConfigurations(): error %s\n&quot;, resultToString(result, m_instance).utf8().data());

No need for these two WTFLogAlways.
Maybe we should use RELEASE_LOG(XR, ...) as well instead.

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:182
&gt; +            supportedModes.append(SessionMode::ImmersiveVr);

Should we use a switch here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659612</commentid>
    <comment_count>15</comment_count>
      <attachid>401135</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-06-05 09:15:43 -0700</bug_when>
    <thetext>Comment on attachment 401135
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:95
&gt;&gt; +    }();
&gt; 
&gt; Why do we need these lambdas? It seems its purpose is to not do an if/else.
&gt; Can we remove them, maybe by using functions with a name that will tell what it does?

Also creating different scopes for variables with the same name. But yeah we don&apos;t really need them.

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:157
&gt;&gt; +    XrResult result = xrEnumerateViewConfigurations(m_instance, device.xrSystemId(), 0, &amp;viewConfigurationCount, nullptr);
&gt; 
&gt; auto

OK.

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:167
&gt;&gt; +        WTFLogAlways(&quot;xrEnumerateViewConfigurations(): error %s\n&quot;, resultToString(result, m_instance).utf8().data());
&gt; 
&gt; No need for these two WTFLogAlways.
&gt; Maybe we should use RELEASE_LOG(XR, ...) as well instead.

The duplication is likely a merge issue. I&apos;ll replace them by the RELEASE_LOG.

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:182
&gt;&gt; +            supportedModes.append(SessionMode::ImmersiveVr);
&gt; 
&gt; Should we use a switch here?

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661141</commentid>
    <comment_count>16</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-06-10 06:17:39 -0700</bug_when>
    <thetext>Committed r262838: &lt;https://trac.webkit.org/changeset/262838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661142</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-10 06:18:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/64206806&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661313</commentid>
    <comment_count>18</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-10 13:13:02 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 213045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661341</commentid>
    <comment_count>19</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-06-10 13:46:45 -0700</bug_when>
    <thetext>Sorry I managed to fix that one. Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400466</attachid>
            <date>2020-05-28 09:00:07 -0700</date>
            <delta_ts>2020-05-28 09:04:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212470-20200528180005.patch</filename>
            <type>text/plain</type>
            <size>38636</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWZmZTg4M2E2YTkwN2Zl
MzRhZWIwYTkyYzVlODY4NjRkY2QyMjFmNy4uZDJlMjhkZWM5NzJiZGM5ZDkyZGQxY2VkNjk5NDc0
ODQxYTNlZGRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA1LTI4ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0g
UmVmYWN0b3IgT3BlblhSIHBsYXRmb3JtIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgYSBiaXQgdGhlIHBsYXRmb3JtIGNvZGUg
YmVjYXVzZSB3ZSB3YW50IHRvIGV4dGVuZCB0aGUgUGxhdGZvcm1YUjo6RGV2aWNlIGZvciB0aGUg
T3BlblhSCisgICAgICAgIGxpYnJhcnkuIEFsc28gd2UncmUgcmVtb3ZpbmcgYWxsIHRoZSBkZXZp
Y2UgaWQgY29kZSBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gZXhwb3NlIGl0LCB3ZSBvbmx5
CisgICAgICAgIG5lZWRlZCBpdCB0byBjb21wYXJlIERldmljZXMuIFdlIGNhbiBkbyB0aGUgc2Ft
ZSBieSB2aXJ0dWFsaXppbmcgdGhlIG9wZXJhdG9yPT0gYW5kIGF0IHRoZSBzYW1lIHRpbWUKKyAg
ICAgICAgd2UgaGlkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlIGlkcyB3aGljaCBhcmUg
b3BhcXVlIGF0b21zIGluIHRoZSBjYXNlIG9mIE9wZW5YUiBmb3IgZXhhbXBsZS4KKworICAgICAg
ICBUaGUgaWRlYSBmcm9tIG5vdyBvbiBpcyB0byBvbmx5IGRlZmluZSBpbnRlcmZhY2VzIGluIFBs
YXRmb3JtWFIuaCBhbmQgdGhlbiBhZGQgYWxsIHRoZSBPcGVuWFIgc3BlY2lmaWNzCisgICAgICAg
IGluIHRoZSBuZXdseSByZW5hbWVkIFBsYXRmb3JtWFJPcGVuWFIuW2NoXSBmaWxlcy4KKworICAg
ICAgICBXZSdyZSBhbHNvIHJlbmFtaW5nIFBsYXRmb3JtWFIuY3BwIHRvIFBsYXRmb3JtWFJPcGVu
WFIuY3BwIHRvIGNsZWFybHkgc3RhdGUgdGhhdCBpdCdzIHRoZSBPcGVuWFIKKyAgICAgICAgaW1w
bGVtZW50YXRpb24gYW5kIHRvIGRpZmZlcmVudGlhdGUgaXQgZnJvbSB0aGUgaW1wbGVtZW50YXRp
b24gYWdub3N0aWMgUGxhdGZvcm1YUi5oIGZpbGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFz
IHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogTW9kdWxl
cy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5c3RlbTo6
RHVtbXlJbmxpbmVEZXZpY2U6Om9wZXJhdG9yPT0gY29uc3QpOiBNYWtlIGl0IHZpcnR1YWwuCisg
ICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OiBBZGRlZCByZW5hbWVkIGZpbGVzLiBSZW1vdmVkIFBsYXRmb3JtWFIuY3BwLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0veHIvUGxhdGZvcm1YUi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
eHIvUGxhdGZvcm1YUi5oOgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjppZCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6Om9wZXJhdG9yPT0gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhS
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0
Zm9ybVhSLmNwcC4KKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjplbnVtZXJhdGVJbW1l
cnNpdmVYUkRldmljZXMpOiBDcmVhdGUgYW4gT3BlblhSRGV2aWNlIGluc3RlYWQgb2YgYSBEZXZp
Y2UuCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuaDogQWRk
ZWQuCisgICAgICAgICogdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaDogQWRkIGltcGxlbWVudGF0
aW9uIGZvciBvcGVyYXRvcj09LgorCiAyMDIwLTA1LTI3ICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gUkVHUkVTU0lPTihyMjUzNjc1KSBDcmFzaCB3
aGVuIHVzaW5nIHRocmVhZGVkIHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnhyL1dlYlhSU3lzdGVtLmNwcAppbmRleCBmODhlMjc0OTcwYTgxZjUzOWM5MWJiYzAwZDc3N2Q0
ODc5M2U5YzIzLi43MmExOTVmMzFjMDcyY2Y4YjQxMGE5MzhhNzE3ZmY0ZWJkYjJiNzUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmNwcApAQCAtNTQsNiAr
NTQsMTIgQEAgV2ViWFJTeXN0ZW06OkR1bW15SW5saW5lRGV2aWNlOjpEdW1teUlubGluZURldmlj
ZSgpCiAgICAgc2V0RW5hYmxlZEZlYXR1cmVzKFhSU2Vzc2lvbk1vZGU6OklubGluZSwgeyBYUlJl
ZmVyZW5jZVNwYWNlVHlwZTo6Vmlld2VyIH0pOwogfQogCitib29sIFdlYlhSU3lzdGVtOjpEdW1t
eUlubGluZURldmljZTo6b3BlcmF0b3I9PShjb25zdCBEZXZpY2UmIG90aGVyKSBjb25zdAorewor
ICAgIC8vIFRoZXJlIG11c24ndCBiZSBhbm90aGVyIGR1bW15IGlubGluZSBkZXZpY2UKKyAgICBy
ZXR1cm4gdGhpcyA9PSAmb3RoZXIgPyB0cnVlIDogZmFsc2U7Cit9CisKIFJlZjxXZWJYUlN5c3Rl
bT4gV2ViWFJTeXN0ZW06OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlhSU3lzdGVtKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2Vi
WFJTeXN0ZW0uaAppbmRleCA5YWFkMTI4YjU2ZTZiZmM5N2QzYjRmZDIwNjA5NzA3ZjI1ZDI2YTVl
Li5hOWQ2MGM5Y2QzOWVmMzVkZjliNDg5NzMxMWI0ZGRlOTU2ODNmOWM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oCkBAIC0xMDcsNiArMTA3LDcgQEAgcHJp
dmF0ZToKICAgICBjbGFzcyBEdW1teUlubGluZURldmljZSBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9y
bVhSOjpEZXZpY2UgewogICAgIHB1YmxpYzoKICAgICAgICAgRHVtbXlJbmxpbmVEZXZpY2UoKTsK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERldmljZSYgb3RoZXIpIGNvbnN0IGZpbmFs
OwogICAgIH07CiAgICAgRHVtbXlJbmxpbmVEZXZpY2UgbV9kZWZhdWx0SW5saW5lRGV2aWNlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDUxODNiOWUzODc1MWIxYzg4MjFjNzI5Y2NmZTI0MDFjOTUyYzFi
ODMuLmFiYTZlYjk5M2Q0ZDc2YzM0YTQ4NDc2NTVmM2U1ZmU3NDZhNDA5ZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yMTE2LDggKzIxMTYsNyBAQCBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAK
IHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAogCi1wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmNwcCBA
bm8tdW5pZnkKLXBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhSLmNwcCBAbm8tdW5pZnkKK3Bs
YXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBAbm8tdW5pZnkKIAogcGx1Z2lu
cy9ET01NaW1lVHlwZS5jcHAKIHBsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMTkw
MzQyZDUzNjFmNGE1NzQyNmQyYWY4NDYwMDU5YzhmZjlkMjdlLi5lNTA1NzI4MjNjMTk1MmE3ODBk
NDUzZDBiYzVmYTFiMGFmYjNhNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODIzLDYgKzQ4MjMsOCBAQAogCQlFMUJBNjcx
QTE3NDJCRUY0MDBDMjAyNTEgLyogV2ViQ29yZVRlc3RTaGltTGlicmFyeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJBNjcxOTE3NDJCRUY0MDBD
MjAyNTEgLyogV2ViQ29yZVRlc3RTaGltTGlicmFyeS5jcHAgKi87IH07CiAJCUUxQkQzMzFBMTgy
RDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRDMzMTgxODJEOERE
RDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmggKi87IH07CiAJ
CUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJDMENGNkM1MTIwMDJF
QTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCAqLzsgfTsKKwkJRTFDMUEzOUQyNDgwMDgwODAwRTBB
RjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFDMUEzOUIyNDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJP
cGVuWFIuY3BwICovOyB9OworCQlFMUMxQTM5RTI0ODAwODA4MDBFMEFGNjYgLyogUGxhdGZvcm1Y
Uk9wZW5YUi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFDMUEzOUMyNDgwMDgwNzAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuaCAqLzsgfTsKIAkJ
RTFDMjY2REYxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleVJTQUNvbXBvbmVudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzI2NkREMTgzMTlG
MzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlSU0FDb21wb25lbnRzLmggKi87IH07CiAJCUUxQzM2MkVG
MEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyog
SlNXb3JrZXJMb2NhdGlvbi5oICovOyB9OwogCQlFMUMzNkMwMzBFQjA3NkQ2MDA3NDEwQkMgLyog
SlNET01HbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQzM2QzAyMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODM5
LDggKzQ4NDEsNiBAQAogCQlFMUU2RUVBODBCNjI4REIzMDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFFNkVFQTcwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLzsgfTsK
IAkJRTFFQzI5QTAwQkIwNEM2QjAwRUExODdCIC8qIFhQYXRoTm9kZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFQzI5OUUwQkIwNEM2QjAwRUEx
ODdCIC8qIFhQYXRoTm9kZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUUxRUQ4QUMzMENDNDlCRTAwMEJGQzU1NyAvKiBDU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMUVEOEFDMjBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUUx
RUU4QjcwMjQxMkIyQTgwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU4QjZDMjQxMkIyQTcwMEU3OTRENiAv
KiBQbGF0Zm9ybVhSLmNwcCAqLzsgfTsKLQkJRTFFRThCNzEyNDEyQjJBODAwRTc5NEQ2IC8qIFBs
YXRmb3JtWFIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFFRThCNkUyNDEyQjJBNzAwRTc5NEQ2IC8qIFBsYXRmb3JtWFIuY3BwICovOyB9OwogCQlF
MUVFOEI3MjI0MTJCMkE4MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRThCNkYyNDEyQjJBNzAwRTc5NEQ2IC8q
IFBsYXRmb3JtWFIuaCAqLzsgfTsKIAkJRTFFRThCNzYyNDEzMTkxRjAwRTc5NEQ2IC8qIFdlYlhS
Vmlld2VyUG9zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFFRThBQzcyNDEyQjE2RjAwRTc5NEQ2IC8qIFdlYlhSVmlld2VyUG9zZS5oICovOyB9Owog
CQlFMUVFOEI3NzI0MTMxOTFGMDBFNzk0RDYgLyogWFJSZWZlcmVuY2VTcGFjZVR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU4QUM5MjQxMkIx
NzAwMEU3OTRENiAvKiBYUlJlZmVyZW5jZVNwYWNlVHlwZS5oICovOyB9OwpAQCAtMTUzMDQsNiAr
MTUzMDQsOCBAQAogCQlFMUJEMzMxODE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTFCRTUxMkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyog
WFNMVFVuaWNvZGVTb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTTFRV
bmljb2RlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMxQTM5QjI0ODAw
ODA2MDBFMEFGNjYgLyogUGxhdGZvcm1YUk9wZW5YUi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVhST3BlblhSLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTFDMUEzOUMyNDgwMDgwNzAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1YUk9wZW5YUi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMyNjZENjE4MzE3QUI0MDAzRjhCMzMgLyog
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMyNjZEQzE4MzE5RjMxMDAzRjhC
MzMgLyogQ3J5cHRvS2V5UlNBQ29tcG9uZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFDMjY2REQxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleVJTQUNv
bXBvbmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvS2V5UlNB
Q29tcG9uZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU0MTYsOCArMTU0
MTgsNiBAQAogCQlFMUVFOEIxNjI0MTJCMTcwMDBFNzk0RDYgLyogWFJQb3NlLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBYUlBvc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMUVFOEIxNzI0MTJCMTcwMDBFNzk0RDYgLyogV2ViWFJJbnB1dFNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJYUklucHV0U291cmNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxRUU4QjE4MjQxMkIxNzAwMEU3OTRENiAvKiBYUklucHV0U291
cmNlQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhSSW5wdXRTb3VyY2VBcnJheS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxRUU4QjZDMjQxMkIyQTcwMEU3OTRE
NiAvKiBQbGF0Zm9ybVhSLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBsYXRmb3JtWFIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUVFOEI2RTI0
MTJCMkE3MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQbGF0Zm9ybVhSLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFFRThCNkYyNDEyQjJBNzAwRTc5NEQ2IC8qIFBsYXRmb3JtWFIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1YUi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMUYxRTgyRDBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVuc2lvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVEV4dGVuc2lvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUYxRTgyRTBDM0MyQkI5MDA2REIzOTEgLyog
WFNMVEV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMVEV4
dGVuc2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NTI2LDcgKzI3NTI2
LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTFFRThCNkQy
NDEyQjJBNzAwRTc5NEQ2IC8qIG9wZW54ciAqLywKLQkJCQlFMUVFOEI2QzI0MTJCMkE3MDBFNzk0
RDYgLyogUGxhdGZvcm1YUi5jcHAgKi8sCiAJCQkJRTFFRThCNkYyNDEyQjJBNzAwRTc5NEQ2IC8q
IFBsYXRmb3JtWFIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0geHI7CkBAIC0yNzUzNSw3ICsyNzUz
NCw4IEBACiAJCUUxRUU4QjZEMjQxMkIyQTcwMEU3OTRENiAvKiBvcGVueHIgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUUxRUU4QjZFMjQxMkIyQTcwMEU3
OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCAqLywKKwkJCQlFMUMxQTM5QjI0ODAwODA2MDBFMEFGNjYg
LyogUGxhdGZvcm1YUk9wZW5YUi5jcHAgKi8sCisJCQkJRTFDMUEzOUMyNDgwMDgwNzAwRTBBRjY2
IC8qIFBsYXRmb3JtWFJPcGVuWFIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gb3BlbnhyOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMyNDQ5LDYgKzMyNDQ5LDcgQEAKIAkJCQk1MkIw
RDRCRTFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzVDNDc2QjA5QUM0RDRGMDBBNkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUVFOEI3MjI0MTJCMkE4MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTFDMUEzOUUyNDgwMDgwODAwRTBBRjY2IC8qIFBsYXRmb3JtWFJP
cGVuWFIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgwMUZFODY0QTcwMDIwMzFDQyAvKiBQ
bGF5YmFja0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAw
OTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTMyOTgwLDYgKzMyOTgxLDcgQEAKIAkJCQk5MzMwOUVB
MzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURG
MTlFMkFDMjQ3NzJCQzEwMDdCREFDQiAvKiBTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9j
a2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM2MkU4QzEyMENFRjlDQjAwMjQ1ODg2IC8qIFNo
b3VsZFRyZWF0QXNDb250aW51aW5nTG9hZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MzMUM4OEUy
NDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBsZUNvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDg5
NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTFFMDY3RUUxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTg1RDZFMDQxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzM1NDIsNyArMzM1
NDQsNiBAQAogCQkJCUNEMzM2RjY0MTdGQTBBNEQwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0
ZUFWRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzMzZGNjgxN0ZBMEFDNjAwREREQ0QwIC8qIFZp
ZGVvVHJhY2tQcml2YXRlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q4QjVBNDMxODBE
MTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3QzMxQzg4RTI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29sb3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA3MEU4MUQxMUJGMjc2NTYwMDFGREE0OCAvKiBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRUY0MThDRjExNzk2
NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2
RjlBODM5MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaCBpbiBIZWFk
ZXJzICovLApAQCAtMzQzNTQsOCArMzQzNTUsNyBAQAogCQkJCUUxNjk4MjYwMTEzNDYzNkEwMDg5
NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNFQTI4NDY2
MjE0MUU4NDkwMEU0MDdFOCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUFBMTJERjQ5MTc0M0RGODMwMDREQUZERiAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVySU9TLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFFRThCNzEyNDEyQjJBODAwRTc5NEQ2
IC8qIFBsYXRmb3JtWFIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFFRThCNzAyNDEyQjJBODAw
RTc5NEQ2IC8qIFBsYXRmb3JtWFIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDMUEzOUQyNDgw
MDgwODAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0RBMjlBMzAxQ0JGNzRENDAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBMjlBMTYxQ0JEQTU2QzAwOTAxQ0NGIC8qIFBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxOTI0MjQ5MjEy
N0I5M0UwMDYzNEZDRiAvKiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VDb2NvYS5tbSBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZv
cm1YUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5OGNjNWUzMDQxZDcwY2Q0Y2M0NTg4YTIzYjkw
YzM2NzA1YWI0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhLCBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtWFIuaCIKLQotbmFtZXNwYWNl
IFBsYXRmb3JtWFIgewotCi0jaWYgRU5BQkxFKFdFQlhSKQotCi1EZXZpY2U6OkRldmljZUlkIElu
c3RhbmNlOjpuZXh0RGV2aWNlSWQoKQotewotICAgIHN0YXRpYyBEZXZpY2U6OkRldmljZUlkIHNf
bmV4dERldmljZUlkIHsgMCB9OwotICAgIHJldHVybiBzX25leHREZXZpY2VJZCsrOwotfQotCi1E
ZXZpY2U6OkRldmljZSgpCi0gICAgOiBtX2lkKEluc3RhbmNlOjpuZXh0RGV2aWNlSWQoKSkKLXsK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKLQotfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1Y
UgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCmluZGV4IDBiMDQxM2JjYjU4
N2I5ZjE0YWIzNDBjZGE0ZTQ5ZTliMDZlOTRmNWQuLjI0NGM4MDdjODJjNjA5MTM2Y2MxYmE5Nzk4
NmFmOGY0ZTVmOGIyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1Bs
YXRmb3JtWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgK
QEAgLTQ1LDM0ICs0NSwyOSBAQCBjbGFzcyBEZXZpY2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
RGV2aWNlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRGV2aWNlKTsKIHB1YmxpYzoKLSAgICB1c2luZyBEZXZpY2VJZCA9IHVpbnQzMl90
OwotICAgIERldmljZSgpOwotICAgIERldmljZUlkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQorICAgIHZpcnR1YWwgfkRldmljZSgpID0gZGVmYXVsdDsKIAogICAgIHVzaW5nIExpc3RPZkVu
YWJsZWRGZWF0dXJlcyA9IFZlY3RvcjxSZWZlcmVuY2VTcGFjZVR5cGU+OwogICAgIGJvb2wgc3Vw
cG9ydHMoU2Vzc2lvbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkRmVhdHVyZXNN
YXAuY29udGFpbnMobW9kZSk7IH0KICAgICB2b2lkIHNldEVuYWJsZWRGZWF0dXJlcyhTZXNzaW9u
TW9kZSBtb2RlLCBjb25zdCBMaXN0T2ZFbmFibGVkRmVhdHVyZXMmIGZlYXR1cmVzKSB7IG1fZW5h
YmxlZEZlYXR1cmVzTWFwLnNldChtb2RlLCBmZWF0dXJlcyk7IH0KICAgICBMaXN0T2ZFbmFibGVk
RmVhdHVyZXMgZW5hYmxlZEZlYXR1cmVzKFNlc3Npb25Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJu
IG1fZW5hYmxlZEZlYXR1cmVzTWFwLmdldChtb2RlKTsgfQogCi0gICAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBEZXZpY2UmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVy
Lm1faWQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXZpY2UmIG90aGVy
KSBjb25zdCA9IDA7CiAKIHByb3RlY3RlZDoKKyAgICBEZXZpY2UoKSA9IGRlZmF1bHQ7CisKICAg
ICAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyN4ci1kZXZpY2UtY29u
Y2VwdAogICAgIC8vIEVhY2ggWFIgZGV2aWNlIGhhcyBhIGxpc3Qgb2YgZW5hYmxlZCBmZWF0dXJl
cyBmb3IgZWFjaCBYUlNlc3Npb25Nb2RlIGluIGl0cyBsaXN0IG9mIHN1cHBvcnRlZCBtb2RlcywK
ICAgICAvLyB3aGljaCBpcyBhIGxpc3Qgb2YgZmVhdHVyZSBkZXNjcmlwdG9ycyB3aGljaCBNVVNU
IGJlIGluaXRpYWxseSBhbiBlbXB0eSBsaXN0LgogICAgIHVzaW5nIEVuYWJsZWRGZWF0dXJlc1Bl
ck1vZGVNYXAgPSBXVEY6Okhhc2hNYXA8U2Vzc2lvbk1vZGUsIExpc3RPZkVuYWJsZWRGZWF0dXJl
cywgV1RGOjpJbnRIYXNoPFNlc3Npb25Nb2RlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxT
ZXNzaW9uTW9kZT4+OwogICAgIEVuYWJsZWRGZWF0dXJlc1Blck1vZGVNYXAgbV9lbmFibGVkRmVh
dHVyZXNNYXA7Ci0KLXByaXZhdGU6Ci0gICAgRGV2aWNlSWQgbV9pZDsKIH07CiAKIGNsYXNzIElu
c3RhbmNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5zdGFuY2UmIHNpbmdsZXRvbigpOwogCi0g
ICAgc3RhdGljIERldmljZTo6RGV2aWNlSWQgbmV4dERldmljZUlkKCk7Ci0KICAgICB2b2lkIGVu
dW1lcmF0ZUltbWVyc2l2ZVhSRGV2aWNlcygpOwogICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8RGV2aWNlPj4mIGltbWVyc2l2ZVhSRGV2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1t
ZXJzaXZlWFJEZXZpY2VzOyB9CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0YTY0NzA1MGY5N2U4NjNlNTZmMjU5MjhiNTVhZDlmNjI5YTJhOGNkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3hyL29wZW54ci9QbGF0Zm9ybVhSLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVhSLmgiCi0KLSNpZiBFTkFCTEUoV0VCWFIpCi0KLSNpZiBV
U0VfT1BFTlhSCi0jaW5jbHVkZSA8b3BlbnhyL29wZW54ci5oPgotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2VuZGlmIC8vIFVTRV9PUEVOWFIKLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFBsYXRmb3JtWFIgewot
Ci0jaWYgVVNFX09QRU5YUgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBYclN0cnVjdHVyZVR5cGUg
U3RydWN0dXJlVHlwZT4KLVQgY3JlYXRlU3RydWN0dXJlKCkKLXsKLSAgICBUIG9iamVjdDsKLSAg
ICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoVCkpOwotICAgIG9iamVjdC50eXBlID0g
U3RydWN0dXJlVHlwZTsKLSAgICBvYmplY3QubmV4dCA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIG9i
amVjdDsKLX0KLQotU3RyaW5nIHJlc3VsdFRvU3RyaW5nKFhyUmVzdWx0IHZhbHVlLCBYckluc3Rh
bmNlIGluc3RhbmNlKQotewotICAgIGNoYXIgYnVmZmVyW1hSX01BWF9SRVNVTFRfU1RSSU5HX1NJ
WkVdOwotICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyUmVzdWx0VG9TdHJpbmcoaW5zdGFuY2UsIHZh
bHVlLCBidWZmZXIpOwotICAgIGlmIChyZXN1bHQgPT0gWFJfU1VDQ0VTUykKLSAgICAgICAgcmV0
dXJuIFN0cmluZyhidWZmZXIpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCI8dW5rbm93biAiLCBp
bnQodmFsdWUpLCAiPiIpOwotfQotCi0jZGVmaW5lIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCBj
YWxsLCBpbnN0YW5jZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBXVEZMb2dBbHdheXMoIiVzICVzOiAlc1xuIiwgX19mdW5jX18sIGNhbGwsIHJl
c3VsdFRvU3RyaW5nKHJlc3VsdCwgaW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOyBcCi0gICAgICAg
IHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCi0jZW5kaWYgLy8gVVNFX09QRU5YUgotCi1z
dHJ1Y3QgSW5zdGFuY2U6OkltcGwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIEltcGwoKTsKLSAgICB+SW1wbCgpOwotCi0jaWYgVVNFX09QRU5YUgotICAgIE9w
dGlvbmFsPFZlY3RvcjxTZXNzaW9uTW9kZT4+IGNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMo
RGV2aWNlJiwgWHJTeXN0ZW1JZCk7Ci0gICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlIHsgWFJfTlVM
TF9IQU5ETEUgfTsKLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi19OwotCi1JbnN0YW5jZTo6SW1wbDo6
SW1wbCgpCi17Ci0jaWYgVVNFX09QRU5YUgotICAgIFdURkxvZ0Fsd2F5cygiT3BlblhSOiBpbml0
aWFsaXppbmdcbiIpOwotCi0gICAgWyZdIHsKLSAgICAgICAgdWludDMyX3QgcHJvcGVydHlDb3Vu
dE91dHB1dCB7IDAgfTsKLSAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVtZXJhdGVBcGlM
YXllclByb3BlcnRpZXMoMCwgJnByb3BlcnR5Q291bnRPdXRwdXQsIG51bGxwdHIpOwotICAgICAg
ICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVz
KCkiLCBtX2luc3RhbmNlKTsKLQotICAgICAgICBpZiAoIXByb3BlcnR5Q291bnRPdXRwdXQpIHsK
LSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVBcGlMYXllclByb3BlcnRpZXMo
KTogbm8gcHJvcGVydGllc1xuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBWZWN0b3I8WHJBcGlMYXllclByb3BlcnRpZXM+IHByb3BlcnRpZXMocHJvcGVydHlD
b3VudE91dHB1dCk7Ci0gICAgICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0
aWVzKHByb3BlcnR5Q291bnRPdXRwdXQsIG51bGxwdHIsIHByb3BlcnRpZXMuZGF0YSgpKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVudW1lcmF0ZUFwaUxheWVyUHJvcGVy
dGllcygpIiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0
ZUFwaUxheWVyUHJvcGVydGllcygpOiAlenUgcHJvcGVydGllc1xuIiwgcHJvcGVydGllcy5zaXpl
KCkpOwotICAgIH0oKTsKLQotICAgIFsmXSB7Ci0gICAgICAgIHVpbnQzMl90IHByb3BlcnR5Q291
bnRPdXRwdXQgeyAwIH07Ci0gICAgICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyRW51bWVyYXRlSW5z
dGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKG51bGxwdHIsIDAsICZwcm9wZXJ0eUNvdW50T3V0cHV0
LCBudWxscHRyKTsKLSAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVudW1lcmF0
ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcygpIiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAg
aWYgKCFwcm9wZXJ0eUNvdW50T3V0cHV0KSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoInhy
RW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCk6IG5vIHByb3BlcnRpZXNcbiIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPFhyRXh0
ZW5zaW9uUHJvcGVydGllcz4gcHJvcGVydGllcyhwcm9wZXJ0eUNvdW50T3V0cHV0LAotICAgICAg
ICAgICAgW10gewotICAgICAgICAgICAgICAgIFhyRXh0ZW5zaW9uUHJvcGVydGllcyBvYmplY3Q7
Ci0gICAgICAgICAgICAgICAgc3RkOjptZW1zZXQoJm9iamVjdCwgMCwgc2l6ZW9mKFhyRXh0ZW5z
aW9uUHJvcGVydGllcykpOwotICAgICAgICAgICAgICAgIG9iamVjdC50eXBlID0gWFJfVFlQRV9F
WFRFTlNJT05fUFJPUEVSVElFUzsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
ICAgICAgICAgfSgpKTsKLSAgICAgICAgdWludDMyX3QgcHJvcGVydHlDb3VudFdyaXR0ZW4geyAw
IH07Ci0gICAgICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0
aWVzKG51bGxwdHIsIHByb3BlcnR5Q291bnRPdXRwdXQsICZwcm9wZXJ0eUNvdW50V3JpdHRlbiwg
cHJvcGVydGllcy5kYXRhKCkpOwotICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhy
RW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKLQot
ICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0
aWVzKCk6ICV6dSBleHRlbnNpb24gcHJvcGVydGllc1xuIiwgcHJvcGVydGllcy5zaXplKCkpOwot
ICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogcHJvcGVydGllcykgewotICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCIgIGV4dGVuc2lvbiAnJXMnLCB2ZXJzaW9uICV1XG4iLAotICAgICAgICAg
ICAgICAgIHByb3BlcnR5LmV4dGVuc2lvbk5hbWUsIHByb3BlcnR5LmV4dGVuc2lvblZlcnNpb24p
OwotICAgICAgICB9Ci0gICAgfSgpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNfYXBwbGlj
YXRpb25OYW1lID0gIldlYlhSIChXZWJLaXQpIjsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qg
c19hcHBsaWNhdGlvblZlcnNpb24gPSAxOwotCi0gICAgewotICAgICAgICBhdXRvIGNyZWF0ZUlu
Zm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJJbnN0YW5jZUNyZWF0ZUluZm8sIFhSX1RZUEVfSU5TVEFO
Q0VfQ1JFQVRFX0lORk8+KCk7Ci0gICAgICAgIGNyZWF0ZUluZm8uY3JlYXRlRmxhZ3MgPSAwOwot
ICAgICAgICBzdGQ6Om1lbWNweShjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcHBsaWNhdGlv
bk5hbWUsIHNfYXBwbGljYXRpb25OYW1lLCBYUl9NQVhfQVBQTElDQVRJT05fTkFNRV9TSVpFKTsK
LSAgICAgICAgY3JlYXRlSW5mby5hcHBsaWNhdGlvbkluZm8uYXBpVmVyc2lvbiA9IFhSX0NVUlJF
TlRfQVBJX1ZFUlNJT047Ci0gICAgICAgIGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZvLmFwcGxp
Y2F0aW9uVmVyc2lvbiA9IHNfYXBwbGljYXRpb25WZXJzaW9uOwotICAgICAgICBjcmVhdGVJbmZv
LmVuYWJsZWRBcGlMYXllckNvdW50ID0gMDsKLSAgICAgICAgY3JlYXRlSW5mby5lbmFibGVkRXh0
ZW5zaW9uQ291bnQgPSAwOwotCi0gICAgICAgIFhySW5zdGFuY2UgaW5zdGFuY2U7Ci0gICAgICAg
IFhyUmVzdWx0IHJlc3VsdCA9IHhyQ3JlYXRlSW5zdGFuY2UoJmNyZWF0ZUluZm8sICZpbnN0YW5j
ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJDcmVhdGVJbnN0YW5jZSgp
IiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAgbV9pbnN0YW5jZSA9IGluc3RhbmNlOwotICAgICAg
ICBXVEZMb2dBbHdheXMoInhyQ3JlYXRlSW5zdGFuY2UoKTogdXNpbmcgaW5zdGFuY2UgJXBcbiIs
IG1faW5zdGFuY2UpOwotICAgIH0KLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi19Ci0KLUluc3RhbmNl
OjpJbXBsOjp+SW1wbCgpCi17Ci19Ci0KLSNpZiBVU0VfT1BFTlhSCi0KLU9wdGlvbmFsPFZlY3Rv
cjxTZXNzaW9uTW9kZT4+IEluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1v
ZGVzKERldmljZSYgZGV2aWNlLCBYclN5c3RlbUlkIHN5c3RlbUlkKQotewotICAgIHVpbnQzMl90
IHZpZXdDb25maWd1cmF0aW9uQ291bnQ7Ci0gICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVtZXJh
dGVWaWV3Q29uZmlndXJhdGlvbnMobV9pbnN0YW5jZSwgc3lzdGVtSWQsIDAsICZ2aWV3Q29uZmln
dXJhdGlvbkNvdW50LCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NFU1MpIHsK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9ucygpOiBl
cnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBYclZpZXdD
b25maWd1cmF0aW9uVHlwZSB2aWV3Q29uZmlndXJhdGlvbnNbdmlld0NvbmZpZ3VyYXRpb25Db3Vu
dF07Ci0gICAgcmVzdWx0ID0geHJFbnVtZXJhdGVWaWV3Q29uZmlndXJhdGlvbnMobV9pbnN0YW5j
ZSwgc3lzdGVtSWQsIHZpZXdDb25maWd1cmF0aW9uQ291bnQsICZ2aWV3Q29uZmlndXJhdGlvbkNv
dW50LCB2aWV3Q29uZmlndXJhdGlvbnMpOwotICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykg
ewotICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKCk6
IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRp
b25zKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLQotICAg
IFZlY3RvcjxTZXNzaW9uTW9kZT4gc3VwcG9ydGVkTW9kZXM7Ci0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IHZpZXdDb25maWd1cmF0aW9uQ291bnQ7ICsraSkgewotICAgICAgICBhdXRvIHZp
ZXdDb25maWd1cmF0aW9uUHJvcGVydGllcyA9IGNyZWF0ZVN0cnVjdHVyZTxYclZpZXdDb25maWd1
cmF0aW9uUHJvcGVydGllcywgWFJfVFlQRV9WSUVXX0NPTkZJR1VSQVRJT05fUFJPUEVSVElFUz4o
KTsKLSAgICAgICAgcmVzdWx0ID0geHJHZXRWaWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMobV9p
bnN0YW5jZSwgc3lzdGVtSWQsIHZpZXdDb25maWd1cmF0aW9uc1tpXSwgJnZpZXdDb25maWd1cmF0
aW9uUHJvcGVydGllcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykgewotICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckdldFZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcygp
OiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcy52aWV3Q29uZmlndXJhdGlvblR5
cGUgPT0gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9NT05PKQotICAgICAgICAg
ICAgc3VwcG9ydGVkTW9kZXMuYXBwZW5kKFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVBcik7Ci0gICAg
ICAgIGVsc2UgaWYgKHZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcy52aWV3Q29uZmlndXJhdGlv
blR5cGUgPT0gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9TVEVSRU8pCi0gICAg
ICAgICAgICBzdXBwb3J0ZWRNb2Rlcy5hcHBlbmQoU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZVZyKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHN1cHBvcnRlZE1vZGVzOwotfQotCi0jZW5kaWYgLy8gVVNFX09Q
RU5YUgotCi1JbnN0YW5jZSYgSW5zdGFuY2U6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxJbnN0YW5jZT4gc19pbnN0YW5jZTsKLSAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgc19vbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShzX29uY2VGbGFnLAotICAg
ICAgICBbJl0gewotICAgICAgICAgICAgc19pbnN0YW5jZS0+bV9pbXBsID0gbWFrZVVuaXF1ZTxJ
bXBsPigpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gc19pbnN0YW5jZS5nZXQoKTsKLX0KLQot
SW5zdGFuY2U6Okluc3RhbmNlKCkgPSBkZWZhdWx0OwotSW5zdGFuY2U6On5JbnN0YW5jZSgpID0g
ZGVmYXVsdDsKLQotdm9pZCBJbnN0YW5jZTo6ZW51bWVyYXRlSW1tZXJzaXZlWFJEZXZpY2VzKCkK
LXsKLSNpZiBVU0VfT1BFTlhSCi0gICAgaWYgKG1faW1wbC0+bV9pbnN0YW5jZSA9PSBYUl9OVUxM
X0hBTkRMRSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIiVzIFVuYWJsZSB0byBlbnVtZXJhdGUg
WFIgZGV2aWNlcy4gTm8gWHJJbnN0YW5jZSBwcmVzZW50XG4iLCBfX0ZVTkNUSU9OX18pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzeXN0ZW1HZXRJbmZvID0gY3JlYXRlU3Ry
dWN0dXJlPFhyU3lzdGVtR2V0SW5mbywgWFJfVFlQRV9TWVNURU1fR0VUX0lORk8+KCk7Ci0gICAg
c3lzdGVtR2V0SW5mby5mb3JtRmFjdG9yID0gWFJfRk9STV9GQUNUT1JfSEVBRF9NT1VOVEVEX0RJ
U1BMQVk7Ci0KLSAgICBYclN5c3RlbUlkIHN5c3RlbUlkOwotICAgIFhyUmVzdWx0IHJlc3VsdCA9
IHhyR2V0U3lzdGVtKG1faW1wbC0+bV9pbnN0YW5jZSwgJnN5c3RlbUdldEluZm8sICZzeXN0ZW1J
ZCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygieHJHZXRTeXN0ZW0oKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9p
bXBsLT5tX2luc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gZGV2aWNlID0gbWFrZVVuaXF1ZTxEZXZpY2U+KCk7Ci0gICAgYXV0byBzZXNz
aW9uTW9kZXMgPSBtX2ltcGwtPmNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoKmRldmljZSwg
c3lzdGVtSWQpOwotICAgIGlmIChzZXNzaW9uTW9kZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBt
b2RlIDogc2Vzc2lvbk1vZGVzLnZhbHVlKCkpIHsKLSAgICAgICAgICAgIC8vIFRPRE86IGZpbGwg
aW4gZmVhdHVyZXMKLSAgICAgICAgICAgIGRldmljZS0+c2V0RW5hYmxlZEZlYXR1cmVzKG1vZGUs
IHsgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2ltbWVyc2l2ZVhSRGV2aWNlcy5hcHBl
bmQoV1RGTW92ZShkZXZpY2UpKTsKLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFBsYXRmb3JtWFIKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hN2YzNjY2N2U4NjljZGMyYjhhYmZhNmVkNTFiZDA3NzMwOGYyYjAwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3Jt
WFJPcGVuWFIuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVhST3Bl
blhSLmgiCisKKyNpZiBFTkFCTEUoV0VCWFIpCisKKyNpZiBVU0VfT1BFTlhSCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1i
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjZW5kaWYgLy8gVVNFX09Q
RU5YUgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgUGxhdGZv
cm1YUiB7CisKKyNpZiBVU0VfT1BFTlhSCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFhyU3RydWN0
dXJlVHlwZSBTdHJ1Y3R1cmVUeXBlPgorVCBjcmVhdGVTdHJ1Y3R1cmUoKQoreworICAgIFQgb2Jq
ZWN0OworICAgIHN0ZDo6bWVtc2V0KCZvYmplY3QsIDAsIHNpemVvZihUKSk7CisgICAgb2JqZWN0
LnR5cGUgPSBTdHJ1Y3R1cmVUeXBlOworICAgIG9iamVjdC5uZXh0ID0gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCitTdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJSZXN1bHQgdmFsdWUs
IFhySW5zdGFuY2UgaW5zdGFuY2UpCit7CisgICAgY2hhciBidWZmZXJbWFJfTUFYX1JFU1VMVF9T
VFJJTkdfU0laRV07CisgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJSZXN1bHRUb1N0cmluZyhpbnN0
YW5jZSwgdmFsdWUsIGJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdCA9PSBYUl9TVUNDRVNTKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlcik7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjx1bmtu
b3duICIsIGludCh2YWx1ZSksICI+Iik7Cit9CisKKyNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxFRChy
ZXN1bHQsIGNhbGwsIGluc3RhbmNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChYUl9GQUlMRUQocmVzdWx0KSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywg
Y2FsbCwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7IFwK
KyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbmRpZiAvLyBVU0VfT1BF
TlhSCisKK3N0cnVjdCBJbnN0YW5jZTo6SW1wbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgSW1wbCgpOworICAgIH5JbXBsKCk7CisKKyNpZiBVU0VfT1BFTlhS
CisgICAgT3B0aW9uYWw8VmVjdG9yPFNlc3Npb25Nb2RlPj4gY29sbGVjdFN1cHBvcnRlZFNlc3Np
b25Nb2RlcyhEZXZpY2UmLCBYclN5c3RlbUlkKTsKKyAgICBYckluc3RhbmNlIG1faW5zdGFuY2Ug
eyBYUl9OVUxMX0hBTkRMRSB9OworI2VuZGlmIC8vIFVTRV9PUEVOWFIKK307CisKK0luc3RhbmNl
OjpJbXBsOjpJbXBsKCkKK3sKKyNpZiBVU0VfT1BFTlhSCisgICAgV1RGTG9nQWx3YXlzKCJPcGVu
WFI6IGluaXRpYWxpemluZ1xuIik7CisKKyAgICBbJl0geworICAgICAgICB1aW50MzJfdCBwcm9w
ZXJ0eUNvdW50T3V0cHV0IHsgMCB9OworICAgICAgICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1l
cmF0ZUFwaUxheWVyUHJvcGVydGllcygwLCAmcHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0cik7
CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJhdGVBcGlMYXllclBy
b3BlcnRpZXMoKSIsIG1faW5zdGFuY2UpOworCisgICAgICAgIGlmICghcHJvcGVydHlDb3VudE91
dHB1dCkgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZUFwaUxheWVyUHJv
cGVydGllcygpOiBubyBwcm9wZXJ0aWVzXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIFZlY3RvcjxYckFwaUxheWVyUHJvcGVydGllcz4gcHJvcGVydGllcyhw
cm9wZXJ0eUNvdW50T3V0cHV0KTsKKyAgICAgICAgcmVzdWx0ID0geHJFbnVtZXJhdGVBcGlMYXll
clByb3BlcnRpZXMocHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0ciwgcHJvcGVydGllcy5kYXRh
KCkpOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlQXBpTGF5
ZXJQcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKKworICAgICAgICBXVEZMb2dBbHdheXMoInhy
RW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVzKCk6ICV6dSBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0
aWVzLnNpemUoKSk7CisgICAgfSgpOworCisgICAgWyZdIHsKKyAgICAgICAgdWludDMyX3QgcHJv
cGVydHlDb3VudE91dHB1dCB7IDAgfTsKKyAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVt
ZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMobnVsbHB0ciwgMCwgJnByb3BlcnR5Q291
bnRPdXRwdXQsIG51bGxwdHIpOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhy
RW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKKwor
ICAgICAgICBpZiAoIXByb3BlcnR5Q291bnRPdXRwdXQpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fs
d2F5cygieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKTogbm8gcHJvcGVy
dGllc1xuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWZWN0
b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKHByb3BlcnR5Q291bnRPdXRwdXQs
CisgICAgICAgICAgICBbXSB7CisgICAgICAgICAgICAgICAgWHJFeHRlbnNpb25Qcm9wZXJ0aWVz
IG9iamVjdDsKKyAgICAgICAgICAgICAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2Yo
WHJFeHRlbnNpb25Qcm9wZXJ0aWVzKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LnR5cGUgPSBY
Ul9UWVBFX0VYVEVOU0lPTl9QUk9QRVJUSUVTOworICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgICAgICAgICB9KCkpOworICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUNvdW50V3Jp
dHRlbiB7IDAgfTsKKyAgICAgICAgcmVzdWx0ID0geHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lv
blByb3BlcnRpZXMobnVsbHB0ciwgcHJvcGVydHlDb3VudE91dHB1dCwgJnByb3BlcnR5Q291bnRX
cml0dGVuLCBwcm9wZXJ0aWVzLmRhdGEoKSk7CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVz
dWx0LCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSIsIG1faW5zdGFu
Y2UpOworCisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lv
blByb3BlcnRpZXMoKTogJXp1IGV4dGVuc2lvbiBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0aWVzLnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0aWVzKSB7CisgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIiAgZXh0ZW5zaW9uICclcycsIHZlcnNpb24gJXVcbiIsCisg
ICAgICAgICAgICAgICAgcHJvcGVydHkuZXh0ZW5zaW9uTmFtZSwgcHJvcGVydHkuZXh0ZW5zaW9u
VmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9KCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c19hcHBsaWNhdGlvbk5hbWUgPSAiV2ViWFIgKFdlYktpdCkiOworICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBzX2FwcGxpY2F0aW9uVmVyc2lvbiA9IDE7CisKKyAgICB7CisgICAgICAgIGF1dG8g
Y3JlYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckluc3RhbmNlQ3JlYXRlSW5mbywgWFJfVFlQ
RV9JTlNUQU5DRV9DUkVBVEVfSU5GTz4oKTsKKyAgICAgICAgY3JlYXRlSW5mby5jcmVhdGVGbGFn
cyA9IDA7CisgICAgICAgIHN0ZDo6bWVtY3B5KGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZvLmFw
cGxpY2F0aW9uTmFtZSwgc19hcHBsaWNhdGlvbk5hbWUsIFhSX01BWF9BUFBMSUNBVElPTl9OQU1F
X1NJWkUpOworICAgICAgICBjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcGlWZXJzaW9uID0g
WFJfQ1VSUkVOVF9BUElfVkVSU0lPTjsKKyAgICAgICAgY3JlYXRlSW5mby5hcHBsaWNhdGlvbklu
Zm8uYXBwbGljYXRpb25WZXJzaW9uID0gc19hcHBsaWNhdGlvblZlcnNpb247CisgICAgICAgIGNy
ZWF0ZUluZm8uZW5hYmxlZEFwaUxheWVyQ291bnQgPSAwOworICAgICAgICBjcmVhdGVJbmZvLmVu
YWJsZWRFeHRlbnNpb25Db3VudCA9IDA7CisKKyAgICAgICAgWHJJbnN0YW5jZSBpbnN0YW5jZTsK
KyAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJDcmVhdGVJbnN0YW5jZSgmY3JlYXRlSW5mbywg
Jmluc3RhbmNlKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckNyZWF0ZUlu
c3RhbmNlKCkiLCBtX2luc3RhbmNlKTsKKworICAgICAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7
CisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJDcmVhdGVJbnN0YW5jZSgpOiB1c2luZyBpbnN0YW5j
ZSAlcFxuIiwgbV9pbnN0YW5jZSk7CisgICAgfQorI2VuZGlmIC8vIFVTRV9PUEVOWFIKK30KKwor
SW5zdGFuY2U6OkltcGw6On5JbXBsKCkKK3sKK30KKworI2lmIFVTRV9PUEVOWFIKKworT3B0aW9u
YWw8VmVjdG9yPFNlc3Npb25Nb2RlPj4gSW5zdGFuY2U6OkltcGw6OmNvbGxlY3RTdXBwb3J0ZWRT
ZXNzaW9uTW9kZXMoRGV2aWNlJiBkZXZpY2UsIFhyU3lzdGVtSWQgc3lzdGVtSWQpCit7CisgICAg
dWludDMyX3Qgdmlld0NvbmZpZ3VyYXRpb25Db3VudDsKKyAgICBYclJlc3VsdCByZXN1bHQgPSB4
ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9ucyhtX2luc3RhbmNlLCBzeXN0ZW1JZCwgMCwgJnZp
ZXdDb25maWd1cmF0aW9uQ291bnQsIG51bGxwdHIpOworICAgIGlmIChyZXN1bHQgIT0gWFJfU1VD
Q0VTUykgeworICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRp
b25zKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAg
IFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlIHZpZXdDb25maWd1cmF0aW9uc1t2aWV3Q29uZmlndXJh
dGlvbkNvdW50XTsKKyAgICByZXN1bHQgPSB4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9ucyht
X2luc3RhbmNlLCBzeXN0ZW1JZCwgdmlld0NvbmZpZ3VyYXRpb25Db3VudCwgJnZpZXdDb25maWd1
cmF0aW9uQ291bnQsIHZpZXdDb25maWd1cmF0aW9ucyk7CisgICAgaWYgKHJlc3VsdCAhPSBYUl9T
VUNDRVNTKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3Q29uZmlndXJh
dGlvbnMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3Q29u
ZmlndXJhdGlvbnMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0
YW5jZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
fQorCisgICAgVmVjdG9yPFNlc3Npb25Nb2RlPiBzdXBwb3J0ZWRNb2RlczsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgdmlld0NvbmZpZ3VyYXRpb25Db3VudDsgKytpKSB7CisgICAgICAg
IGF1dG8gdmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzID0gY3JlYXRlU3RydWN0dXJlPFhyVmll
d0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLCBYUl9UWVBFX1ZJRVdfQ09ORklHVVJBVElPTl9QUk9Q
RVJUSUVTPigpOworICAgICAgICByZXN1bHQgPSB4ckdldFZpZXdDb25maWd1cmF0aW9uUHJvcGVy
dGllcyhtX2luc3RhbmNlLCBzeXN0ZW1JZCwgdmlld0NvbmZpZ3VyYXRpb25zW2ldLCAmdmlld0Nv
bmZpZ3VyYXRpb25Qcm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNT
KSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoInhyR2V0Vmlld0NvbmZpZ3VyYXRpb25Qcm9w
ZXJ0aWVzKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2Up
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1
cmF0aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk8pCisg
ICAgICAgICAgICBzdXBwb3J0ZWRNb2Rlcy5hcHBlbmQoU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFy
KTsKKyAgICAgICAgZWxzZSBpZiAodmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25m
aWd1cmF0aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX1NURVJF
TykKKyAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChTZXNzaW9uTW9kZTo6SW1tZXJz
aXZlVnIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkTW9kZXM7Cit9CisKKyNlbmRpZiAv
LyBVU0VfT1BFTlhSCisKK0luc3RhbmNlJiBJbnN0YW5jZTo6c2luZ2xldG9uKCkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEluc3RhbmNlPiBzX2luc3RhbmNlOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBzX29uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNfb25jZUZs
YWcsCisgICAgICAgIFsmXSB7CisgICAgICAgICAgICBzX2luc3RhbmNlLT5tX2ltcGwgPSBtYWtl
VW5pcXVlPEltcGw+KCk7CisgICAgICAgIH0pOworICAgIHJldHVybiBzX2luc3RhbmNlLmdldCgp
OworfQorCitJbnN0YW5jZTo6SW5zdGFuY2UoKSA9IGRlZmF1bHQ7CitJbnN0YW5jZTo6fkluc3Rh
bmNlKCkgPSBkZWZhdWx0OworCit2b2lkIEluc3RhbmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRl
dmljZXMoKQoreworI2lmIFVTRV9PUEVOWFIKKyAgICBpZiAobV9pbXBsLT5tX2luc3RhbmNlID09
IFhSX05VTExfSEFORExFKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXMgVW5hYmxlIHRvIGVu
dW1lcmF0ZSBYUiBkZXZpY2VzLiBObyBYckluc3RhbmNlIHByZXNlbnRcbiIsIF9fRlVOQ1RJT05f
Xyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHN5c3RlbUdldEluZm8gPSBj
cmVhdGVTdHJ1Y3R1cmU8WHJTeXN0ZW1HZXRJbmZvLCBYUl9UWVBFX1NZU1RFTV9HRVRfSU5GTz4o
KTsKKyAgICBzeXN0ZW1HZXRJbmZvLmZvcm1GYWN0b3IgPSBYUl9GT1JNX0ZBQ1RPUl9IRUFEX01P
VU5URURfRElTUExBWTsKKworICAgIFhyU3lzdGVtSWQgc3lzdGVtSWQ7CisgICAgWHJSZXN1bHQg
cmVzdWx0ID0geHJHZXRTeXN0ZW0obV9pbXBsLT5tX2luc3RhbmNlLCAmc3lzdGVtR2V0SW5mbywg
JnN5c3RlbUlkKTsKKyAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NFU1MpIHsKKyAgICAgICAgV1RG
TG9nQWx3YXlzKCJ4ckdldFN5c3RlbSgpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVz
dWx0LCBtX2ltcGwtPm1faW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byBkZXZpY2UgPSBtYWtlVW5pcXVlPE9wZW5YUkRldmljZT4oKTsK
KyAgICBhdXRvIHNlc3Npb25Nb2RlcyA9IG1faW1wbC0+Y29sbGVjdFN1cHBvcnRlZFNlc3Npb25N
b2RlcygqZGV2aWNlLCBzeXN0ZW1JZCk7CisgICAgaWYgKHNlc3Npb25Nb2RlcykgeworICAgICAg
ICBmb3IgKGF1dG8mIG1vZGUgOiBzZXNzaW9uTW9kZXMudmFsdWUoKSkgeworICAgICAgICAgICAg
Ly8gVE9ETzogZmlsbCBpbiBmZWF0dXJlcworICAgICAgICAgICAgZGV2aWNlLT5zZXRFbmFibGVk
RmVhdHVyZXMobW9kZSwgeyB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1faW1tZXJzaXZl
WFJEZXZpY2VzLmFwcGVuZChXVEZNb3ZlKGRldmljZSkpOworI2VuZGlmIC8vIFVTRV9PUEVOWFIK
K30KKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3Jt
WFJPcGVuWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
T3BlblhSLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMwZjEwNGI3MzI0MzQ4YzJhZDU3OWU1ZjUxOWE4OTNhZTU0
ZTU0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54
ci9QbGF0Zm9ybVhST3BlblhSLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikKKyNp
bmNsdWRlICJQbGF0Zm9ybVhSLmgiCisKKyNpZiBVU0VfT1BFTlhSCisjaW5jbHVkZSA8b3Blbnhy
L29wZW54ci5oPgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKKy8vIGh0dHBzOi8vd3d3Lmto
cm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5YUi9zcGVjcy8xLjAvaHRtbC94cnNwZWMuaHRtbCNzeXN0
ZW0KKy8vIEEgc3lzdGVtIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZGV2aWNl
cyBpbiB0aGUgcnVudGltZSwgb2Z0ZW4gbWFkZSB1cCBvZiBzZXZlcmFsIGluZGl2aWR1YWwKKy8v
IGhhcmR3YXJlIGNvbXBvbmVudHMgd29ya2luZyB0b2dldGhlciB0byBlbmFibGUgWFIgZXhwZXJp
ZW5jZXMuCisvLworLy8gV2ViWFIgdGFsa3MgYWJvdXQgWFIgZGV2aWNlcywgaXMgYSBwaHlzaWNh
bCB1bml0IG9mIGhhcmR3YXJlIHRoYXQgY2FuIHByZXNlbnQgaW1hZ2VyeSB0byB0aGUgdXNlciwg
c28KKy8vIHRoZXJlIGlzIG5vdCBkaXJlY3QgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBhbiBPcGVu
WFIgc3lzdGVtIGFuZCBhIFdlYlhSIGRldmljZSBiZWNhdXNlIHRoZSBzeXN0ZW0gQVBJCisvLyBp
cyBhbiBhYnN0cmFjdGlvbiBmb3IgYSBjb2xsZWN0aW9uIG9mIGRldmljZXMgd2hpbGUgdGhlIFdl
YlhSIGRldmljZSBpcyBtb3N0bHkgb25lIHBoeXNpY2FsIHVuaXQsCisvLyB1c3VhbGx5IGFuIEhN
RCBvciBhIHBob25lL3RhYmxldC4KKy8vCisvLyBJdCdzIGltcG9ydGFudCBhbHNvIG5vdCB0byB0
cnkgdG8gYXNzb2NpYXRlIE9wZW5YUiBzeXN0ZW0gd2l0aCBXZWJYUidzIFhSU3lzdGVtIGJlY2F1
c2UgdGhleSdyZSB0b3RhbGx5CisvLyBkaWZmZXJlbnQgY29uY2VwdHMuIFRoZSBzeXN0ZW0gaW4g
T3BlblhSIHdhcyBkZWZpbmVkIGFib3ZlIGFzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIGRldmlj
ZXMuIEluIFdlYlhSLAorLy8gdGhlIFhSU3lzdGVtIGlzIGJhc2ljYWxseSB0aGUgZW50cnkgcG9p
bnQgZm9yIHRoZSBXZWJYUiBBUEkgYXZhaWxhYmxlIHZpYSB0aGUgTmF2aWdhdG9yIG9iamVjdC4K
K2NsYXNzIE9wZW5YUkRldmljZSBmaW5hbCA6IHB1YmxpYyBEZXZpY2UgeworcHVibGljOgorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERldmljZSYgb3RoZXIpIGNvbnN0IGZpbmFsCisgICAg
eworICAgICAgICBBU1NFUlQoaXM8T3BlblhSRGV2aWNlPihvdGhlcikpOworICAgICAgICByZXR1
cm4gbV9zeXN0ZW1JZCA9PSBkb3duY2FzdDxPcGVuWFJEZXZpY2U+KG90aGVyKS5tX3N5c3RlbUlk
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBYclN5c3RlbUlkIG1fc3lzdGVtSWQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNlbmRpZiAvLyBVU0VfT1BFTlhSCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJG
YWtlWFJEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmgK
aW5kZXggYjRjNTg0ZDU0Y2FmM2RlYjVlOGI3MGJmMTFkOGNkM2MzNzBjOTNiZS4uNTM1NGFkZTg0
N2Q1ZWE1YzRkYzM1NmVlZmQzNTA2MmU4MjE5YjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L1dlYkZha2VYUkRldmljZS5oCkBAIC02OCw2ICs2OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRGbG9vck9yaWdpbihSZWZQdHI8V2ViWFJSaWdpZFRyYW5zZm9ybT4mJiBvcmlnaW4pIHsgbV9m
bG9vck9yaWdpbiA9IFdURk1vdmUob3JpZ2luKTsgfQogICAgIHZvaWQgc2V0RW11bGF0ZWRQb3Np
dGlvbihib29sIGVtdWxhdGVkKSB7IG1fZW11bGF0ZWRQb3NpdGlvbiA9IGVtdWxhdGVkOyB9CiAg
ICAgVmVjdG9yPFJlZjxGYWtlWFJWaWV3Pj4mIHZpZXdzKCkgeyByZXR1cm4gbV92aWV3czsgfQor
CisgICAgLy8gVGhlcmUgbXVzbid0IGJlIGFub3RoZXIgc2ltdWxhdGVkIFhSIGRldmljZQorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXZpY2UmIG90aGVyKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0aGlzID09ICZvdGhlciA/IHRydWUgOiBmYWxzZTsgfQorCiBwcml2YXRlOgogICAgIE9wdGlv
bmFsPFZlY3RvcjxGYWtlWFJCb3VuZHNQb2ludD4+IG1fbmF0aXZlQm91bmRzR2VvbWV0cnk7CiAg
ICAgUmVmUHRyPFdlYlhSUmlnaWRUcmFuc2Zvcm0+IG1fdmlld2VyT3JpZ2luOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400468</attachid>
            <date>2020-05-28 09:05:13 -0700</date>
            <delta_ts>2020-06-05 03:20:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212470-20200528180511.patch</filename>
            <type>text/plain</type>
            <size>38578</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFmMGU5ODEwNzZkOGMy
MmVhYTAyNzQyNTU0ZGJiNmRlMTQ1YzIwNS4uZDM2ZTY3ZTZhYWIxZTBlMDIwZDMxNTg1YjAyYmQ5
NjFlZGE3OWIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA1LTI4ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0g
UmVmYWN0b3IgT3BlblhSIHBsYXRmb3JtIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgYSBiaXQgdGhlIHBsYXRmb3JtIGNvZGUg
YmVjYXVzZSB3ZSB3YW50IHRvIGV4dGVuZCB0aGUgUGxhdGZvcm1YUjo6RGV2aWNlIGZvciB0aGUg
T3BlblhSCisgICAgICAgIGxpYnJhcnkuIEFsc28gd2UncmUgcmVtb3ZpbmcgYWxsIHRoZSBkZXZp
Y2UgaWQgY29kZSBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gZXhwb3NlIGl0LCB3ZSBvbmx5
CisgICAgICAgIG5lZWRlZCBpdCB0byBjb21wYXJlIERldmljZXMuIFdlIGNhbiBkbyB0aGUgc2Ft
ZSBieSB2aXJ0dWFsaXppbmcgdGhlIG9wZXJhdG9yPT0gYW5kIGF0IHRoZSBzYW1lIHRpbWUKKyAg
ICAgICAgd2UgaGlkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlIGlkcyB3aGljaCBhcmUg
b3BhcXVlIGF0b21zIGluIHRoZSBjYXNlIG9mIE9wZW5YUiBmb3IgZXhhbXBsZS4KKworICAgICAg
ICBUaGUgaWRlYSBmcm9tIG5vdyBvbiBpcyB0byBvbmx5IGRlZmluZSBpbnRlcmZhY2VzIGluIFBs
YXRmb3JtWFIuaCBhbmQgdGhlbiBhZGQgYWxsIHRoZSBPcGVuWFIgc3BlY2lmaWNzCisgICAgICAg
IGluIHRoZSBuZXdseSByZW5hbWVkIFBsYXRmb3JtWFJPcGVuWFIuW2NoXSBmaWxlcy4KKworICAg
ICAgICBXZSdyZSBhbHNvIHJlbmFtaW5nIFBsYXRmb3JtWFIuY3BwIHRvIFBsYXRmb3JtWFJPcGVu
WFIuY3BwIHRvIGNsZWFybHkgc3RhdGUgdGhhdCBpdCdzIHRoZSBPcGVuWFIKKyAgICAgICAgaW1w
bGVtZW50YXRpb24gYW5kIHRvIGRpZmZlcmVudGlhdGUgaXQgZnJvbSB0aGUgaW1wbGVtZW50YXRp
b24gYWdub3N0aWMgUGxhdGZvcm1YUi5oIGZpbGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFz
IHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogTW9kdWxl
cy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5c3RlbTo6
RHVtbXlJbmxpbmVEZXZpY2U6Om9wZXJhdG9yPT0gY29uc3QpOiBNYWtlIGl0IHZpcnR1YWwuCisg
ICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OiBBZGRlZCByZW5hbWVkIGZpbGVzLiBSZW1vdmVkIFBsYXRmb3JtWFIuY3BwLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0veHIvUGxhdGZvcm1YUi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
eHIvUGxhdGZvcm1YUi5oOgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjppZCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6Om9wZXJhdG9yPT0gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhS
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0
Zm9ybVhSLmNwcC4KKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjplbnVtZXJhdGVJbW1l
cnNpdmVYUkRldmljZXMpOiBDcmVhdGUgYW4gT3BlblhSRGV2aWNlIGluc3RlYWQgb2YgYSBEZXZp
Y2UuCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuaDogQWRk
ZWQuCisgICAgICAgICogdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaDogQWRkIGltcGxlbWVudGF0
aW9uIGZvciBvcGVyYXRvcj09LgorCiAyMDIwLTA1LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNjcm9sbGluZ1RyZWVNYWM6OmV2ZW50TGlzdGVu
ZXJSZWdpb25UeXBlc0ZvclBvaW50KCkgbmVlZHMgdG8gY29udmVydCB0aGUgcG9pbnQgdG8gbG9j
YWwgY29vcmRpbmF0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIv
V2ViWFJTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3Rl
bS5jcHAKaW5kZXggZjg4ZTI3NDk3MGE4MWY1MzljOTFiYmMwMGQ3NzdkNDg3OTNlOWMyMy4uNzJh
MTk1ZjMxYzA3MmNmOGI0MTBhOTM4YTcxN2ZmNGViZGIyYjc1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHAKQEAgLTU0LDYgKzU0LDEyIEBAIFdlYlhS
U3lzdGVtOjpEdW1teUlubGluZURldmljZTo6RHVtbXlJbmxpbmVEZXZpY2UoKQogICAgIHNldEVu
YWJsZWRGZWF0dXJlcyhYUlNlc3Npb25Nb2RlOjpJbmxpbmUsIHsgWFJSZWZlcmVuY2VTcGFjZVR5
cGU6OlZpZXdlciB9KTsKIH0KIAorYm9vbCBXZWJYUlN5c3RlbTo6RHVtbXlJbmxpbmVEZXZpY2U6
Om9wZXJhdG9yPT0oY29uc3QgRGV2aWNlJiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBUaGVyZSBt
dXNuJ3QgYmUgYW5vdGhlciBkdW1teSBpbmxpbmUgZGV2aWNlCisgICAgcmV0dXJuIHRoaXMgPT0g
Jm90aGVyID8gdHJ1ZSA6IGZhbHNlOworfQorCiBSZWY8V2ViWFJTeXN0ZW0+IFdlYlhSU3lzdGVt
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJYUlN5c3RlbShzY3JpcHRFeGVjdXRpb25D
b250ZXh0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhS
U3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmgKaW5k
ZXggOWFhZDEyOGI1NmU2YmZjOTdkM2I0ZmQyMDYwOTcwN2YyNWQyNmE1ZS4uYTlkNjBjOWNkMzll
ZjM1ZGY5YjQ4OTczMTFiNGRkZTk1NjgzZjljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VieHIvV2ViWFJTeXN0ZW0uaApAQCAtMTA3LDYgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgY2xh
c3MgRHVtbXlJbmxpbmVEZXZpY2UgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1YUjo6RGV2aWNlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIER1bW15SW5saW5lRGV2aWNlKCk7CisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBEZXZpY2UmIG90aGVyKSBjb25zdCBmaW5hbDsKICAgICB9OwogICAg
IER1bW15SW5saW5lRGV2aWNlIG1fZGVmYXVsdElubGluZURldmljZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA0NzYyMmI5NWMyNTBkYmZkYjVmNjBjMjNmOTAzMzQyYzA0OWZhYzNiLi44ZDYxMTY0YmQw
Y2VkZjk0NjcxM2I3YTk3YTY3MzEyODFlMjcwOWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjExOCw4
ICsyMTE4LDcgQEAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAKIAotcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5jcHAgQG5vLXVuaWZ5Ci1wbGF0
Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUi5jcHAgQG5vLXVuaWZ5CitwbGF0Zm9ybS94ci9vcGVu
eHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAgQG5vLXVuaWZ5CiAKIHBsdWdpbnMvRE9NTWltZVR5cGUu
Y3BwCiBwbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmY2OTg1YjE2YzdkZDg0ZmEw
ZTg0MGExMzYxNmE3M2EyMGZmMGNiZC4uODJkNjVlY2RiYzU2ZGQzOTM1OWQ4YTIwNWRmNGNiODJk
Zjk2ZmEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNDgyNSw2ICs0ODI1LDggQEAKIAkJRTFCQTY3MUExNzQyQkVGNDAwQzIw
MjUxIC8qIFdlYkNvcmVUZXN0U2hpbUxpYnJhcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQTY3MTkxNzQyQkVGNDAwQzIwMjUxIC8qIFdlYkNv
cmVUZXN0U2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlFMUJEMzMxQTE4MkQ4REREMDBDMDVEOUYg
LyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkQzMzE4MTgyRDhEREQwMEMwNUQ5RiAvKiBD
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oICovOyB9OwogCQlFMUJFNTEyRTBDRjZD
NTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVu
aWNvZGVTb3J0LmggKi87IH07CisJCUUxQzFBMzlEMjQ4MDA4MDgwMEUwQUY2NiAvKiBQbGF0Zm9y
bVhST3BlblhSLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQzFBMzlCMjQ4MDA4MDYwMEUwQUY2NiAvKiBQbGF0Zm9ybVhST3BlblhSLmNwcCAqLzsg
fTsKKwkJRTFDMUEzOUUyNDgwMDgwODAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzFBMzlDMjQ4MDA4
MDcwMEUwQUY2NiAvKiBQbGF0Zm9ybVhST3BlblhSLmggKi87IH07CiAJCUUxQzI2NkRGMTgzMTlG
MzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlSU0FDb21wb25lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMyNjZERDE4MzE5RjMxMDAzRjhCMzMgLyog
Q3J5cHRvS2V5UlNBQ29tcG9uZW50cy5oICovOyB9OwogCQlFMUMzNjJFRjBFQUYyQUE5MDA3NDEw
QkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDMzYyRUQwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRp
b24uaCAqLzsgfTsKIAkJRTFDMzZDMDMwRUIwNzZENjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMz
NkMwMjBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDg0MSw4ICs0ODQzLDYgQEAK
IAkJRTFFNkVFQTgwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUE3MEI2MjhE
QjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmggKi87IH07CiAJCUUxRUMyOUEwMEJC
MDRDNkIwMEVBMTg3QiAvKiBYUGF0aE5vZGVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUMyOTlFMEJCMDRDNkIwMEVBMTg3QiAvKiBYUGF0aE5v
ZGVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFMUVEOEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRDhBQzIw
Q0M0OUJFMDAwQkZDNTU3IC8qIENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFMUVFOEI3MDI0MTJCMkE4
MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUVFOEI2QzI0MTJCMkE3MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5j
cHAgKi87IH07Ci0JCUUxRUU4QjcxMjQxMkIyQTgwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU4QjZFMjQx
MkIyQTcwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCAqLzsgfTsKIAkJRTFFRThCNzIyNDEyQjJB
ODAwRTc5NEQ2IC8qIFBsYXRmb3JtWFIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxRUU4QjZGMjQxMkIyQTcwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmgg
Ki87IH07CiAJCUUxRUU4Qjc2MjQxMzE5MUYwMEU3OTRENiAvKiBXZWJYUlZpZXdlclBvc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU4QUM3MjQx
MkIxNkYwMEU3OTRENiAvKiBXZWJYUlZpZXdlclBvc2UuaCAqLzsgfTsKIAkJRTFFRThCNzcyNDEz
MTkxRjAwRTc5NEQ2IC8qIFhSUmVmZXJlbmNlU3BhY2VUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFOEFDOTI0MTJCMTcwMDBFNzk0RDYgLyog
WFJSZWZlcmVuY2VTcGFjZVR5cGUuaCAqLzsgfTsKQEAgLTE1MzEwLDYgKzE1MzEwLDggQEAKIAkJ
RTFCRDMzMTgxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobVJT
QVNTQV9QS0NTMV92MV81Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkU1MTJC
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDMUEzOUIyNDgwMDgwNjAwRTBBRjY2IC8q
IFBsYXRmb3JtWFJPcGVuWFIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGxhdGZvcm1YUk9wZW5YUi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
QzFBMzlDMjQ4MDA4MDcwMEUwQUY2NiAvKiBQbGF0Zm9ybVhST3BlblhSLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtWFJPcGVuWFIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFDMjY2RDYxODMxN0FCNDAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMjY2REMxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tl
eVJTQUNvbXBvbmVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q3J5cHRvS2V5UlNBQ29tcG9uZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxQzI2NkREMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlSU0FDb21wb25lbnRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleVJTQUNvbXBvbmVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDIyLDggKzE1NDI0LDYgQEAKIAkJRTFF
RThCMTYyNDEyQjE3MDAwRTc5NEQ2IC8qIFhSUG9zZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gWFJQb3NlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFRThCMTcyNDEy
QjE3MDAwRTc5NEQ2IC8qIFdlYlhSSW5wdXRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViWFJJbnB1dFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUVFOEIxODI0MTJCMTcwMDBFNzk0RDYgLyogWFJJbnB1dFNvdXJjZUFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUklucHV0U291cmNlQXJyYXkuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFMUVFOEI2QzI0MTJCMkE3MDBFNzk0RDYgLyogUGxhdGZvcm1Y
Ui5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVhSLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFFRThCNkUyNDEyQjJBNzAwRTc5NEQ2
IC8qIFBsYXRmb3JtWFIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGxhdGZvcm1YUi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRUU4QjZGMjQx
MkIyQTcwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtWFIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGMUU4
MkQwQzNDMkJCOTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhTTFRFeHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFGMUU4MkUwQzNDMkJCOTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTTFRFeHRlbnNpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzUzOSw3ICsyNzUzOSw2IEBACiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUUxRUU4QjZEMjQxMkIyQTcwMEU3OTRE
NiAvKiBvcGVueHIgKi8sCi0JCQkJRTFFRThCNkMyNDEyQjJBNzAwRTc5NEQ2IC8qIFBsYXRmb3Jt
WFIuY3BwICovLAogCQkJCUUxRUU4QjZGMjQxMkIyQTcwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IHhyOwpAQCAtMjc1NDgsNyArMjc1NDcsOCBAQAogCQlFMUVF
OEI2RDI0MTJCMkE3MDBFNzk0RDYgLyogb3BlbnhyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlFMUVFOEI2RTI0MTJCMkE3MDBFNzk0RDYgLyogUGxhdGZv
cm1YUi5jcHAgKi8sCisJCQkJRTFDMUEzOUIyNDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJP
cGVuWFIuY3BwICovLAorCQkJCUUxQzFBMzlDMjQ4MDA4MDcwMEUwQUY2NiAvKiBQbGF0Zm9ybVhS
T3BlblhSLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IG9wZW54cjsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0yOTk3MCw2ICsyOTk3MCw3IEBACiAJCQkJQzMzMEEyMjMxM0VDMTk2QjAw
MDBCNDVCIC8qIENvbG9yQ2hvb3Nlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzM3Q0RFQkQxNDlF
RjIwMzAwNDIwOTBEIC8qIENvbG9yQ2hvb3NlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjQ4RDJBQTUyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdDQUM2QUYwMjQ3RjQxMTAwMEU2MUQ1OSAvKiBDb2xvckNvbXBvbmVudHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDNCN0RGMURCMDE1NjcwMDhCQjg5MCAvKiBDb2xvckhhc2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY1NUIzREI0MTI1MUYxMkQwMDNFRjI2OSAvKiBDb2xvcklucHV0VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1MTY5RTcyMUYxQjg0NzAwRUE0Rjc4IC8qIENvbG9y
SU9TLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNDg0LDYgKzMyNDg1LDcgQEAKIAkJCQk1MkIwRDRC
RTFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzVDNDc2QjA5QUM0RDRGMDBBNkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMUVFOEI3MjI0MTJCMkE4MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTFDMUEzOUUyNDgwMDgwODAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVu
WFIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgwMUZFODY0QTcwMDIwMzFDQyAvKiBQbGF5
YmFja0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmggaW4gSGVhZGVycyAqLywKQEAgLTMyODAwLDcgKzMyODAyLDYgQEAKIAkJCQlBNTA3MUU4NzFD
NTZEMEUxMDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDE4OTM4QjIyNDI5RjlCNDAwN0ZEQzQxIC8qIFJldHJpZXZlUmVjb3Jkc09wdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE1MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmIuaCBp
biBIZWFkZXJzICovLAotCQkJCTdDQUM2QUYwMjQ3RjQxMTAwMEU2MUQ1OSAvKiBDb2xvckNvbXBv
bmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE3MTJCMDI2RjcwMEMxQTM1OSAvKiBS
ZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE5MTJC
MDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJDb252b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
MzE2MEFCMTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJDb252b2x2ZXJTdGFnZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNDM5MCw4ICszNDM5MSw3IEBACiAJCQkJRTE2OTgyNjAxMTM0NjM2QTAwODk0
MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VBMjg0NjYy
MTQxRTg0OTAwRTQwN0U4IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQUExMkRGNDkxNzQzREY4MzAwNERBRkRGIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2l6ZXJJT1MubW0gaW4gU291cmNlcyAqLywKLQkJCQlFMUVFOEI3MTI0MTJCMkE4MDBFNzk0RDYg
LyogUGxhdGZvcm1YUi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUVFOEI3MDI0MTJCMkE4MDBF
Nzk0RDYgLyogUGxhdGZvcm1YUi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUMxQTM5RDI0ODAw
ODA4MDBFMEFGNjYgLyogUGxhdGZvcm1YUk9wZW5YUi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
REEyOUEzMDFDQkY3NEQ0MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDREEyOUExNjFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE5MjQyNDkyMTI3
QjkzRTAwNjM0RkNGIC8qIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9y
bVhSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzk4Y2M1ZTMwNDFkNzBjZDRjYzQ1ODhhMjNiOTBj
MzY3MDVhYjRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEsIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1YUi5oIgotCi1uYW1lc3BhY2Ug
UGxhdGZvcm1YUiB7Ci0KLSNpZiBFTkFCTEUoV0VCWFIpCi0KLURldmljZTo6RGV2aWNlSWQgSW5z
dGFuY2U6Om5leHREZXZpY2VJZCgpCi17Ci0gICAgc3RhdGljIERldmljZTo6RGV2aWNlSWQgc19u
ZXh0RGV2aWNlSWQgeyAwIH07Ci0gICAgcmV0dXJuIHNfbmV4dERldmljZUlkKys7Ci19Ci0KLURl
dmljZTo6RGV2aWNlKCkKLSAgICA6IG1faWQoSW5zdGFuY2U6Om5leHREZXZpY2VJZCgpKQotewot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQlhSKQotCi19IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhS
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmgKaW5kZXggMGIwNDEzYmNiNTg3
YjlmMTRhYjM0MGNkYTRlNDllOWIwNmU5NGY1ZC4uMjQ0YzgwN2M4MmM2MDkxMzZjYzFiYTk3OTg2
YWY4ZjRlNWY4YjIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxh
dGZvcm1YUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaApA
QCAtNDUsMzQgKzQ1LDI5IEBAIGNsYXNzIERldmljZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxE
ZXZpY2U+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEZXZpY2UpOwogcHVibGljOgotICAgIHVzaW5nIERldmljZUlkID0gdWludDMyX3Q7
Ci0gICAgRGV2aWNlKCk7Ci0gICAgRGV2aWNlSWQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
CisgICAgdmlydHVhbCB+RGV2aWNlKCkgPSBkZWZhdWx0OwogCiAgICAgdXNpbmcgTGlzdE9mRW5h
YmxlZEZlYXR1cmVzID0gVmVjdG9yPFJlZmVyZW5jZVNwYWNlVHlwZT47CiAgICAgYm9vbCBzdXBw
b3J0cyhTZXNzaW9uTW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWRGZWF0dXJlc01h
cC5jb250YWlucyhtb2RlKTsgfQogICAgIHZvaWQgc2V0RW5hYmxlZEZlYXR1cmVzKFNlc3Npb25N
b2RlIG1vZGUsIGNvbnN0IExpc3RPZkVuYWJsZWRGZWF0dXJlcyYgZmVhdHVyZXMpIHsgbV9lbmFi
bGVkRmVhdHVyZXNNYXAuc2V0KG1vZGUsIGZlYXR1cmVzKTsgfQogICAgIExpc3RPZkVuYWJsZWRG
ZWF0dXJlcyBlbmFibGVkRmVhdHVyZXMoU2Vzc2lvbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4g
bV9lbmFibGVkRmVhdHVyZXNNYXAuZ2V0KG1vZGUpOyB9CiAKLSAgICBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IERldmljZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faWQgPT0gb3RoZXIu
bV9pZDsgfQorICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERldmljZSYgb3RoZXIp
IGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgorICAgIERldmljZSgpID0gZGVmYXVsdDsKKwogICAg
IC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI3hyLWRldmljZS1jb25j
ZXB0CiAgICAgLy8gRWFjaCBYUiBkZXZpY2UgaGFzIGEgbGlzdCBvZiBlbmFibGVkIGZlYXR1cmVz
IGZvciBlYWNoIFhSU2Vzc2lvbk1vZGUgaW4gaXRzIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZGVzLAog
ICAgIC8vIHdoaWNoIGlzIGEgbGlzdCBvZiBmZWF0dXJlIGRlc2NyaXB0b3JzIHdoaWNoIE1VU1Qg
YmUgaW5pdGlhbGx5IGFuIGVtcHR5IGxpc3QuCiAgICAgdXNpbmcgRW5hYmxlZEZlYXR1cmVzUGVy
TW9kZU1hcCA9IFdURjo6SGFzaE1hcDxTZXNzaW9uTW9kZSwgTGlzdE9mRW5hYmxlZEZlYXR1cmVz
LCBXVEY6OkludEhhc2g8U2Vzc2lvbk1vZGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFNl
c3Npb25Nb2RlPj47CiAgICAgRW5hYmxlZEZlYXR1cmVzUGVyTW9kZU1hcCBtX2VuYWJsZWRGZWF0
dXJlc01hcDsKLQotcHJpdmF0ZToKLSAgICBEZXZpY2VJZCBtX2lkOwogfTsKIAogY2xhc3MgSW5z
dGFuY2UgewogcHVibGljOgogICAgIHN0YXRpYyBJbnN0YW5jZSYgc2luZ2xldG9uKCk7CiAKLSAg
ICBzdGF0aWMgRGV2aWNlOjpEZXZpY2VJZCBuZXh0RGV2aWNlSWQoKTsKLQogICAgIHZvaWQgZW51
bWVyYXRlSW1tZXJzaXZlWFJEZXZpY2VzKCk7CiAgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxEZXZpY2U+PiYgaW1tZXJzaXZlWFJEZXZpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbW1l
cnNpdmVYUkRldmljZXM7IH0KIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS94ci9vcGVueHIvUGxhdGZvcm1YUi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRhNjQ3MDUwZjk3ZTg2M2U1NmYyNTkyOGI1NWFkOWY2MjlhMmE4Y2QuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
eHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtWFIuaCIKLQotI2lmIEVOQUJMRShXRUJYUikKLQotI2lmIFVT
RV9PUEVOWFIKLSNpbmNsdWRlIDxvcGVueHIvb3BlbnhyLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jZW5kaWYgLy8gVVNFX09QRU5YUgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgUGxhdGZvcm1YUiB7Ci0K
LSNpZiBVU0VfT1BFTlhSCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIFhyU3RydWN0dXJlVHlwZSBT
dHJ1Y3R1cmVUeXBlPgotVCBjcmVhdGVTdHJ1Y3R1cmUoKQotewotICAgIFQgb2JqZWN0OwotICAg
IHN0ZDo6bWVtc2V0KCZvYmplY3QsIDAsIHNpemVvZihUKSk7Ci0gICAgb2JqZWN0LnR5cGUgPSBT
dHJ1Y3R1cmVUeXBlOwotICAgIG9iamVjdC5uZXh0ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gb2Jq
ZWN0OwotfQotCi1TdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJSZXN1bHQgdmFsdWUsIFhySW5zdGFu
Y2UgaW5zdGFuY2UpCi17Ci0gICAgY2hhciBidWZmZXJbWFJfTUFYX1JFU1VMVF9TVFJJTkdfU0la
RV07Ci0gICAgWHJSZXN1bHQgcmVzdWx0ID0geHJSZXN1bHRUb1N0cmluZyhpbnN0YW5jZSwgdmFs
dWUsIGJ1ZmZlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBYUl9TVUNDRVNTKQotICAgICAgICByZXR1
cm4gU3RyaW5nKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIjx1bmtub3duICIsIGlu
dCh2YWx1ZSksICI+Iik7Ci19Ci0KLSNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsIGNh
bGwsIGluc3RhbmNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGlmIChYUl9GQUlMRUQocmVzdWx0KSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgY2FsbCwgcmVz
dWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7IFwKLSAgICAgICAg
cmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0KLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi0KLXN0
cnVjdCBJbnN0YW5jZTo6SW1wbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgSW1wbCgpOwotICAgIH5JbXBsKCk7Ci0KLSNpZiBVU0VfT1BFTlhSCi0gICAgT3B0
aW9uYWw8VmVjdG9yPFNlc3Npb25Nb2RlPj4gY29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcyhE
ZXZpY2UmLCBYclN5c3RlbUlkKTsKLSAgICBYckluc3RhbmNlIG1faW5zdGFuY2UgeyBYUl9OVUxM
X0hBTkRMRSB9OwotI2VuZGlmIC8vIFVTRV9PUEVOWFIKLX07Ci0KLUluc3RhbmNlOjpJbXBsOjpJ
bXBsKCkKLXsKLSNpZiBVU0VfT1BFTlhSCi0gICAgV1RGTG9nQWx3YXlzKCJPcGVuWFI6IGluaXRp
YWxpemluZ1xuIik7Ci0KLSAgICBbJl0gewotICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUNvdW50
T3V0cHV0IHsgMCB9OwotICAgICAgICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1lcmF0ZUFwaUxh
eWVyUHJvcGVydGllcygwLCAmcHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0cik7Ci0gICAgICAg
IFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJhdGVBcGlMYXllclByb3BlcnRpZXMo
KSIsIG1faW5zdGFuY2UpOwotCi0gICAgICAgIGlmICghcHJvcGVydHlDb3VudE91dHB1dCkgewot
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZUFwaUxheWVyUHJvcGVydGllcygp
OiBubyBwcm9wZXJ0aWVzXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIFZlY3RvcjxYckFwaUxheWVyUHJvcGVydGllcz4gcHJvcGVydGllcyhwcm9wZXJ0eUNv
dW50T3V0cHV0KTsKLSAgICAgICAgcmVzdWx0ID0geHJFbnVtZXJhdGVBcGlMYXllclByb3BlcnRp
ZXMocHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0ciwgcHJvcGVydGllcy5kYXRhKCkpOwotICAg
ICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0
aWVzKCkiLCBtX2luc3RhbmNlKTsKLQotICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRl
QXBpTGF5ZXJQcm9wZXJ0aWVzKCk6ICV6dSBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0aWVzLnNpemUo
KSk7Ci0gICAgfSgpOwotCi0gICAgWyZdIHsKLSAgICAgICAgdWludDMyX3QgcHJvcGVydHlDb3Vu
dE91dHB1dCB7IDAgfTsKLSAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVtZXJhdGVJbnN0
YW5jZUV4dGVuc2lvblByb3BlcnRpZXMobnVsbHB0ciwgMCwgJnByb3BlcnR5Q291bnRPdXRwdXQs
IG51bGxwdHIpOwotICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRl
SW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKLQotICAgICAgICBp
ZiAoIXByb3BlcnR5Q291bnRPdXRwdXQpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJF
bnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKTogbm8gcHJvcGVydGllc1xuIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8WHJFeHRl
bnNpb25Qcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKHByb3BlcnR5Q291bnRPdXRwdXQsCi0gICAgICAg
ICAgICBbXSB7Ci0gICAgICAgICAgICAgICAgWHJFeHRlbnNpb25Qcm9wZXJ0aWVzIG9iamVjdDsK
LSAgICAgICAgICAgICAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoWHJFeHRlbnNp
b25Qcm9wZXJ0aWVzKSk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0LnR5cGUgPSBYUl9UWVBFX0VY
VEVOU0lPTl9QUk9QRVJUSUVTOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAg
ICAgICAgICB9KCkpOwotICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUNvdW50V3JpdHRlbiB7IDAg
fTsKLSAgICAgICAgcmVzdWx0ID0geHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRp
ZXMobnVsbHB0ciwgcHJvcGVydHlDb3VudE91dHB1dCwgJnByb3BlcnR5Q291bnRXcml0dGVuLCBw
cm9wZXJ0aWVzLmRhdGEoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJF
bnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSIsIG1faW5zdGFuY2UpOwotCi0g
ICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRp
ZXMoKTogJXp1IGV4dGVuc2lvbiBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0aWVzLnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBX
VEZMb2dBbHdheXMoIiAgZXh0ZW5zaW9uICclcycsIHZlcnNpb24gJXVcbiIsCi0gICAgICAgICAg
ICAgICAgcHJvcGVydHkuZXh0ZW5zaW9uTmFtZSwgcHJvcGVydHkuZXh0ZW5zaW9uVmVyc2lvbik7
Ci0gICAgICAgIH0KLSAgICB9KCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogc19hcHBsaWNh
dGlvbk5hbWUgPSAiV2ViWFIgKFdlYktpdCkiOwotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBz
X2FwcGxpY2F0aW9uVmVyc2lvbiA9IDE7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8gY3JlYXRlSW5m
byA9IGNyZWF0ZVN0cnVjdHVyZTxYckluc3RhbmNlQ3JlYXRlSW5mbywgWFJfVFlQRV9JTlNUQU5D
RV9DUkVBVEVfSU5GTz4oKTsKLSAgICAgICAgY3JlYXRlSW5mby5jcmVhdGVGbGFncyA9IDA7Ci0g
ICAgICAgIHN0ZDo6bWVtY3B5KGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZvLmFwcGxpY2F0aW9u
TmFtZSwgc19hcHBsaWNhdGlvbk5hbWUsIFhSX01BWF9BUFBMSUNBVElPTl9OQU1FX1NJWkUpOwot
ICAgICAgICBjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcGlWZXJzaW9uID0gWFJfQ1VSUkVO
VF9BUElfVkVSU0lPTjsKLSAgICAgICAgY3JlYXRlSW5mby5hcHBsaWNhdGlvbkluZm8uYXBwbGlj
YXRpb25WZXJzaW9uID0gc19hcHBsaWNhdGlvblZlcnNpb247Ci0gICAgICAgIGNyZWF0ZUluZm8u
ZW5hYmxlZEFwaUxheWVyQ291bnQgPSAwOwotICAgICAgICBjcmVhdGVJbmZvLmVuYWJsZWRFeHRl
bnNpb25Db3VudCA9IDA7Ci0KLSAgICAgICAgWHJJbnN0YW5jZSBpbnN0YW5jZTsKLSAgICAgICAg
WHJSZXN1bHQgcmVzdWx0ID0geHJDcmVhdGVJbnN0YW5jZSgmY3JlYXRlSW5mbywgJmluc3RhbmNl
KTsKLSAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckNyZWF0ZUluc3RhbmNlKCki
LCBtX2luc3RhbmNlKTsKLQotICAgICAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygieHJDcmVhdGVJbnN0YW5jZSgpOiB1c2luZyBpbnN0YW5jZSAlcFxuIiwg
bV9pbnN0YW5jZSk7Ci0gICAgfQotI2VuZGlmIC8vIFVTRV9PUEVOWFIKLX0KLQotSW5zdGFuY2U6
OkltcGw6On5JbXBsKCkKLXsKLX0KLQotI2lmIFVTRV9PUEVOWFIKLQotT3B0aW9uYWw8VmVjdG9y
PFNlc3Npb25Nb2RlPj4gSW5zdGFuY2U6OkltcGw6OmNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9k
ZXMoRGV2aWNlJiBkZXZpY2UsIFhyU3lzdGVtSWQgc3lzdGVtSWQpCi17Ci0gICAgdWludDMyX3Qg
dmlld0NvbmZpZ3VyYXRpb25Db3VudDsKLSAgICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1lcmF0
ZVZpZXdDb25maWd1cmF0aW9ucyhtX2luc3RhbmNlLCBzeXN0ZW1JZCwgMCwgJnZpZXdDb25maWd1
cmF0aW9uQ291bnQsIG51bGxwdHIpOwotICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykgewot
ICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKCk6IGVy
cm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0KLQotICAgIFhyVmlld0Nv
bmZpZ3VyYXRpb25UeXBlIHZpZXdDb25maWd1cmF0aW9uc1t2aWV3Q29uZmlndXJhdGlvbkNvdW50
XTsKLSAgICByZXN1bHQgPSB4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9ucyhtX2luc3RhbmNl
LCBzeXN0ZW1JZCwgdmlld0NvbmZpZ3VyYXRpb25Db3VudCwgJnZpZXdDb25maWd1cmF0aW9uQ291
bnQsIHZpZXdDb25maWd1cmF0aW9ucyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNTKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3Q29uZmlndXJhdGlvbnMoKTog
ZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3Q29uZmlndXJhdGlv
bnMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAg
VmVjdG9yPFNlc3Npb25Nb2RlPiBzdXBwb3J0ZWRNb2RlczsKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgdmlld0NvbmZpZ3VyYXRpb25Db3VudDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmll
d0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzID0gY3JlYXRlU3RydWN0dXJlPFhyVmlld0NvbmZpZ3Vy
YXRpb25Qcm9wZXJ0aWVzLCBYUl9UWVBFX1ZJRVdfQ09ORklHVVJBVElPTl9QUk9QRVJUSUVTPigp
OwotICAgICAgICByZXN1bHQgPSB4ckdldFZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcyhtX2lu
c3RhbmNlLCBzeXN0ZW1JZCwgdmlld0NvbmZpZ3VyYXRpb25zW2ldLCAmdmlld0NvbmZpZ3VyYXRp
b25Qcm9wZXJ0aWVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNTKSB7Ci0gICAg
ICAgICAgICBXVEZMb2dBbHdheXMoInhyR2V0Vmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzKCk6
IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAodmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1cmF0aW9uVHlw
ZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk8pCi0gICAgICAgICAg
ICBzdXBwb3J0ZWRNb2Rlcy5hcHBlbmQoU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyKTsKLSAgICAg
ICAgZWxzZSBpZiAodmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1cmF0aW9u
VHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX1NURVJFTykKLSAgICAg
ICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChTZXNzaW9uTW9kZTo6SW1tZXJzaXZlVnIpOwot
ICAgIH0KLSAgICByZXR1cm4gc3VwcG9ydGVkTW9kZXM7Ci19Ci0KLSNlbmRpZiAvLyBVU0VfT1BF
TlhSCi0KLUluc3RhbmNlJiBJbnN0YW5jZTo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPEluc3RhbmNlPiBzX2luc3RhbmNlOwotICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBzX29uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKHNfb25jZUZsYWcsCi0gICAg
ICAgIFsmXSB7Ci0gICAgICAgICAgICBzX2luc3RhbmNlLT5tX2ltcGwgPSBtYWtlVW5pcXVlPElt
cGw+KCk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiBzX2luc3RhbmNlLmdldCgpOwotfQotCi1J
bnN0YW5jZTo6SW5zdGFuY2UoKSA9IGRlZmF1bHQ7Ci1JbnN0YW5jZTo6fkluc3RhbmNlKCkgPSBk
ZWZhdWx0OwotCi12b2lkIEluc3RhbmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmljZXMoKQot
ewotI2lmIFVTRV9PUEVOWFIKLSAgICBpZiAobV9pbXBsLT5tX2luc3RhbmNlID09IFhSX05VTExf
SEFORExFKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiJXMgVW5hYmxlIHRvIGVudW1lcmF0ZSBY
UiBkZXZpY2VzLiBObyBYckluc3RhbmNlIHByZXNlbnRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHN5c3RlbUdldEluZm8gPSBjcmVhdGVTdHJ1
Y3R1cmU8WHJTeXN0ZW1HZXRJbmZvLCBYUl9UWVBFX1NZU1RFTV9HRVRfSU5GTz4oKTsKLSAgICBz
eXN0ZW1HZXRJbmZvLmZvcm1GYWN0b3IgPSBYUl9GT1JNX0ZBQ1RPUl9IRUFEX01PVU5URURfRElT
UExBWTsKLQotICAgIFhyU3lzdGVtSWQgc3lzdGVtSWQ7Ci0gICAgWHJSZXN1bHQgcmVzdWx0ID0g
eHJHZXRTeXN0ZW0obV9pbXBsLT5tX2luc3RhbmNlLCAmc3lzdGVtR2V0SW5mbywgJnN5c3RlbUlk
KTsKLSAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJ4ckdldFN5c3RlbSgpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2lt
cGwtPm1faW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXV0byBkZXZpY2UgPSBtYWtlVW5pcXVlPERldmljZT4oKTsKLSAgICBhdXRvIHNlc3Np
b25Nb2RlcyA9IG1faW1wbC0+Y29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcygqZGV2aWNlLCBz
eXN0ZW1JZCk7Ci0gICAgaWYgKHNlc3Npb25Nb2RlcykgewotICAgICAgICBmb3IgKGF1dG8mIG1v
ZGUgOiBzZXNzaW9uTW9kZXMudmFsdWUoKSkgewotICAgICAgICAgICAgLy8gVE9ETzogZmlsbCBp
biBmZWF0dXJlcwotICAgICAgICAgICAgZGV2aWNlLT5zZXRFbmFibGVkRmVhdHVyZXMobW9kZSwg
eyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1faW1tZXJzaXZlWFJEZXZpY2VzLmFwcGVu
ZChXVEZNb3ZlKGRldmljZSkpOwotI2VuZGlmIC8vIFVTRV9PUEVOWFIKLX0KLQotfSAvLyBuYW1l
c3BhY2UgUGxhdGZvcm1YUgotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQlhSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE3ZjM2NjY3ZTg2OWNkYzJiOGFiZmE2ZWQ1MWJkMDc3MzA4ZjJiMDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1Y
Uk9wZW5YUi5jcHAKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtWFJPcGVu
WFIuaCIKKworI2lmIEVOQUJMRShXRUJYUikKKworI2lmIFVTRV9PUEVOWFIKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNlbmRpZiAvLyBVU0VfT1BF
TlhSCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBQbGF0Zm9y
bVhSIHsKKworI2lmIFVTRV9PUEVOWFIKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgWHJTdHJ1Y3R1
cmVUeXBlIFN0cnVjdHVyZVR5cGU+CitUIGNyZWF0ZVN0cnVjdHVyZSgpCit7CisgICAgVCBvYmpl
Y3Q7CisgICAgc3RkOjptZW1zZXQoJm9iamVjdCwgMCwgc2l6ZW9mKFQpKTsKKyAgICBvYmplY3Qu
dHlwZSA9IFN0cnVjdHVyZVR5cGU7CisgICAgb2JqZWN0Lm5leHQgPSBudWxscHRyOworICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK1N0cmluZyByZXN1bHRUb1N0cmluZyhYclJlc3VsdCB2YWx1ZSwg
WHJJbnN0YW5jZSBpbnN0YW5jZSkKK3sKKyAgICBjaGFyIGJ1ZmZlcltYUl9NQVhfUkVTVUxUX1NU
UklOR19TSVpFXTsKKyAgICBYclJlc3VsdCByZXN1bHQgPSB4clJlc3VsdFRvU3RyaW5nKGluc3Rh
bmNlLCB2YWx1ZSwgYnVmZmVyKTsKKyAgICBpZiAocmVzdWx0ID09IFhSX1NVQ0NFU1MpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoYnVmZmVyKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiPHVua25v
d24gIiwgaW50KHZhbHVlKSwgIj4iKTsKK30KKworI2RlZmluZSBSRVRVUk5fSUZfRkFJTEVEKHJl
c3VsdCwgY2FsbCwgaW5zdGFuY2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgaWYgKFhSX0ZBSUxFRChyZXN1bHQpKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgV1RGTG9nQWx3YXlzKCIlcyAlczogJXNcbiIsIF9fZnVuY19fLCBj
YWxsLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsgXAor
ICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKworI2VuZGlmIC8vIFVTRV9PUEVO
WFIKKworc3RydWN0IEluc3RhbmNlOjpJbXBsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBJbXBsKCk7CisgICAgfkltcGwoKTsKKworI2lmIFVTRV9PUEVOWFIK
KyAgICBPcHRpb25hbDxWZWN0b3I8U2Vzc2lvbk1vZGU+PiBjb2xsZWN0U3VwcG9ydGVkU2Vzc2lv
bk1vZGVzKERldmljZSYsIFhyU3lzdGVtSWQpOworICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7
IFhSX05VTExfSEFORExFIH07CisjZW5kaWYgLy8gVVNFX09QRU5YUgorfTsKKworSW5zdGFuY2U6
OkltcGw6OkltcGwoKQoreworI2lmIFVTRV9PUEVOWFIKKyAgICBXVEZMb2dBbHdheXMoIk9wZW5Y
UjogaW5pdGlhbGl6aW5nXG4iKTsKKworICAgIFsmXSB7CisgICAgICAgIHVpbnQzMl90IHByb3Bl
cnR5Q291bnRPdXRwdXQgeyAwIH07CisgICAgICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyRW51bWVy
YXRlQXBpTGF5ZXJQcm9wZXJ0aWVzKDAsICZwcm9wZXJ0eUNvdW50T3V0cHV0LCBudWxscHRyKTsK
KyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVudW1lcmF0ZUFwaUxheWVyUHJv
cGVydGllcygpIiwgbV9pbnN0YW5jZSk7CisKKyAgICAgICAgaWYgKCFwcm9wZXJ0eUNvdW50T3V0
cHV0KSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlQXBpTGF5ZXJQcm9w
ZXJ0aWVzKCk6IG5vIHByb3BlcnRpZXNcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgVmVjdG9yPFhyQXBpTGF5ZXJQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKHBy
b3BlcnR5Q291bnRPdXRwdXQpOworICAgICAgICByZXN1bHQgPSB4ckVudW1lcmF0ZUFwaUxheWVy
UHJvcGVydGllcyhwcm9wZXJ0eUNvdW50T3V0cHV0LCBudWxscHRyLCBwcm9wZXJ0aWVzLmRhdGEo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJhdGVBcGlMYXll
clByb3BlcnRpZXMoKSIsIG1faW5zdGFuY2UpOworCisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJF
bnVtZXJhdGVBcGlMYXllclByb3BlcnRpZXMoKTogJXp1IHByb3BlcnRpZXNcbiIsIHByb3BlcnRp
ZXMuc2l6ZSgpKTsKKyAgICB9KCk7CisKKyAgICBbJl0geworICAgICAgICB1aW50MzJfdCBwcm9w
ZXJ0eUNvdW50T3V0cHV0IHsgMCB9OworICAgICAgICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1l
cmF0ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcyhudWxscHRyLCAwLCAmcHJvcGVydHlDb3Vu
dE91dHB1dCwgbnVsbHB0cik7CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJF
bnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSIsIG1faW5zdGFuY2UpOworCisg
ICAgICAgIGlmICghcHJvcGVydHlDb3VudE91dHB1dCkgeworICAgICAgICAgICAgV1RGTG9nQWx3
YXlzKCJ4ckVudW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcygpOiBubyBwcm9wZXJ0
aWVzXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3Rv
cjxYckV4dGVuc2lvblByb3BlcnRpZXM+IHByb3BlcnRpZXMocHJvcGVydHlDb3VudE91dHB1dCwK
KyAgICAgICAgICAgIFtdIHsKKyAgICAgICAgICAgICAgICBYckV4dGVuc2lvblByb3BlcnRpZXMg
b2JqZWN0OworICAgICAgICAgICAgICAgIHN0ZDo6bWVtc2V0KCZvYmplY3QsIDAsIHNpemVvZihY
ckV4dGVuc2lvblByb3BlcnRpZXMpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QudHlwZSA9IFhS
X1RZUEVfRVhURU5TSU9OX1BST1BFUlRJRVM7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICAgICAgICAgIH0oKSk7CisgICAgICAgIHVpbnQzMl90IHByb3BlcnR5Q291bnRXcml0
dGVuIHsgMCB9OworICAgICAgICByZXN1bHQgPSB4ckVudW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9u
UHJvcGVydGllcyhudWxscHRyLCBwcm9wZXJ0eUNvdW50T3V0cHV0LCAmcHJvcGVydHlDb3VudFdy
aXR0ZW4sIHByb3BlcnRpZXMuZGF0YSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1
bHQsICJ4ckVudW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcygpIiwgbV9pbnN0YW5j
ZSk7CisKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9u
UHJvcGVydGllcygpOiAlenUgZXh0ZW5zaW9uIHByb3BlcnRpZXNcbiIsIHByb3BlcnRpZXMuc2l6
ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IHByb3BlcnRpZXMpIHsKKyAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiICBleHRlbnNpb24gJyVzJywgdmVyc2lvbiAldVxuIiwKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eS5leHRlbnNpb25OYW1lLCBwcm9wZXJ0eS5leHRlbnNpb25W
ZXJzaW9uKTsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
X2FwcGxpY2F0aW9uTmFtZSA9ICJXZWJYUiAoV2ViS2l0KSI7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfYXBwbGljYXRpb25WZXJzaW9uID0gMTsKKworICAgIHsKKyAgICAgICAgYXV0byBj
cmVhdGVJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhySW5zdGFuY2VDcmVhdGVJbmZvLCBYUl9UWVBF
X0lOU1RBTkNFX0NSRUFURV9JTkZPPigpOworICAgICAgICBjcmVhdGVJbmZvLmNyZWF0ZUZsYWdz
ID0gMDsKKyAgICAgICAgc3RkOjptZW1jcHkoY3JlYXRlSW5mby5hcHBsaWNhdGlvbkluZm8uYXBw
bGljYXRpb25OYW1lLCBzX2FwcGxpY2F0aW9uTmFtZSwgWFJfTUFYX0FQUExJQ0FUSU9OX05BTUVf
U0laRSk7CisgICAgICAgIGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZvLmFwaVZlcnNpb24gPSBY
Ul9DVVJSRU5UX0FQSV9WRVJTSU9OOworICAgICAgICBjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5m
by5hcHBsaWNhdGlvblZlcnNpb24gPSBzX2FwcGxpY2F0aW9uVmVyc2lvbjsKKyAgICAgICAgY3Jl
YXRlSW5mby5lbmFibGVkQXBpTGF5ZXJDb3VudCA9IDA7CisgICAgICAgIGNyZWF0ZUluZm8uZW5h
YmxlZEV4dGVuc2lvbkNvdW50ID0gMDsKKworICAgICAgICBYckluc3RhbmNlIGluc3RhbmNlOwor
ICAgICAgICBYclJlc3VsdCByZXN1bHQgPSB4ckNyZWF0ZUluc3RhbmNlKCZjcmVhdGVJbmZvLCAm
aW5zdGFuY2UpOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyQ3JlYXRlSW5z
dGFuY2UoKSIsIG1faW5zdGFuY2UpOworCisgICAgICAgIG1faW5zdGFuY2UgPSBpbnN0YW5jZTsK
KyAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckNyZWF0ZUluc3RhbmNlKCk6IHVzaW5nIGluc3RhbmNl
ICVwXG4iLCBtX2luc3RhbmNlKTsKKyAgICB9CisjZW5kaWYgLy8gVVNFX09QRU5YUgorfQorCitJ
bnN0YW5jZTo6SW1wbDo6fkltcGwoKQoreworfQorCisjaWYgVVNFX09QRU5YUgorCitPcHRpb25h
bDxWZWN0b3I8U2Vzc2lvbk1vZGU+PiBJbnN0YW5jZTo6SW1wbDo6Y29sbGVjdFN1cHBvcnRlZFNl
c3Npb25Nb2RlcyhEZXZpY2UmIGRldmljZSwgWHJTeXN0ZW1JZCBzeXN0ZW1JZCkKK3sKKyAgICB1
aW50MzJfdCB2aWV3Q29uZmlndXJhdGlvbkNvdW50OworICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhy
RW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKG1faW5zdGFuY2UsIHN5c3RlbUlkLCAwLCAmdmll
d0NvbmZpZ3VyYXRpb25Db3VudCwgbnVsbHB0cik7CisgICAgaWYgKHJlc3VsdCAhPSBYUl9TVUND
RVNTKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3Q29uZmlndXJhdGlv
bnMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAg
WHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdmlld0NvbmZpZ3VyYXRpb25zW3ZpZXdDb25maWd1cmF0
aW9uQ291bnRdOworICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKG1f
aW5zdGFuY2UsIHN5c3RlbUlkLCB2aWV3Q29uZmlndXJhdGlvbkNvdW50LCAmdmlld0NvbmZpZ3Vy
YXRpb25Db3VudCwgdmlld0NvbmZpZ3VyYXRpb25zKTsKKyAgICBpZiAocmVzdWx0ICE9IFhSX1NV
Q0NFU1MpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0
aW9ucygpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZVZpZXdDb25m
aWd1cmF0aW9ucygpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3Rh
bmNlKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBWZWN0b3I8U2Vzc2lvbk1vZGU+IHN1cHBvcnRlZE1vZGVzOworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCB2aWV3Q29uZmlndXJhdGlvbkNvdW50OyArK2kpIHsKKyAgICAgICAg
YXV0byB2aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJWaWV3
Q29uZmlndXJhdGlvblByb3BlcnRpZXMsIFhSX1RZUEVfVklFV19DT05GSUdVUkFUSU9OX1BST1BF
UlRJRVM+KCk7CisgICAgICAgIHJlc3VsdCA9IHhyR2V0Vmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0
aWVzKG1faW5zdGFuY2UsIHN5c3RlbUlkLCB2aWV3Q29uZmlndXJhdGlvbnNbaV0sICZ2aWV3Q29u
ZmlndXJhdGlvblByb3BlcnRpZXMpOworICAgICAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NFU1Mp
IHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJHZXRWaWV3Q29uZmlndXJhdGlvblByb3Bl
cnRpZXMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICB9CisgICAgICAgIGlmICh2aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMudmlld0NvbmZpZ3Vy
YXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfTU9OTykKKyAg
ICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChTZXNzaW9uTW9kZTo6SW1tZXJzaXZlQXIp
OworICAgICAgICBlbHNlIGlmICh2aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMudmlld0NvbmZp
Z3VyYXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfU1RFUkVP
KQorICAgICAgICAgICAgc3VwcG9ydGVkTW9kZXMuYXBwZW5kKFNlc3Npb25Nb2RlOjpJbW1lcnNp
dmVWcik7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0ZWRNb2RlczsKK30KKworI2VuZGlmIC8v
IFVTRV9PUEVOWFIKKworSW5zdGFuY2UmIEluc3RhbmNlOjpzaW5nbGV0b24oKQoreworICAgIHN0
YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SW5zdGFuY2U+IHNfaW5zdGFuY2U7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIHNfb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc19vbmNlRmxh
ZywKKyAgICAgICAgWyZdIHsKKyAgICAgICAgICAgIHNfaW5zdGFuY2UtPm1faW1wbCA9IG1ha2VV
bmlxdWU8SW1wbD4oKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHNfaW5zdGFuY2UuZ2V0KCk7
Cit9CisKK0luc3RhbmNlOjpJbnN0YW5jZSgpID0gZGVmYXVsdDsKK0luc3RhbmNlOjp+SW5zdGFu
Y2UoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgSW5zdGFuY2U6OmVudW1lcmF0ZUltbWVyc2l2ZVhSRGV2
aWNlcygpCit7CisjaWYgVVNFX09QRU5YUgorICAgIGlmIChtX2ltcGwtPm1faW5zdGFuY2UgPT0g
WFJfTlVMTF9IQU5ETEUpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCIlcyBVbmFibGUgdG8gZW51
bWVyYXRlIFhSIGRldmljZXMuIE5vIFhySW5zdGFuY2UgcHJlc2VudFxuIiwgX19GVU5DVElPTl9f
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc3lzdGVtR2V0SW5mbyA9IGNy
ZWF0ZVN0cnVjdHVyZTxYclN5c3RlbUdldEluZm8sIFhSX1RZUEVfU1lTVEVNX0dFVF9JTkZPPigp
OworICAgIHN5c3RlbUdldEluZm8uZm9ybUZhY3RvciA9IFhSX0ZPUk1fRkFDVE9SX0hFQURfTU9V
TlRFRF9ESVNQTEFZOworCisgICAgWHJTeXN0ZW1JZCBzeXN0ZW1JZDsKKyAgICBYclJlc3VsdCBy
ZXN1bHQgPSB4ckdldFN5c3RlbShtX2ltcGwtPm1faW5zdGFuY2UsICZzeXN0ZW1HZXRJbmZvLCAm
c3lzdGVtSWQpOworICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykgeworICAgICAgICBXVEZM
b2dBbHdheXMoInhyR2V0U3lzdGVtKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1
bHQsIG1faW1wbC0+bV9pbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvIGRldmljZSA9IG1ha2VVbmlxdWU8T3BlblhSRGV2aWNlPigpOwor
ICAgIGF1dG8gc2Vzc2lvbk1vZGVzID0gbV9pbXBsLT5jb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1v
ZGVzKCpkZXZpY2UsIHN5c3RlbUlkKTsKKyAgICBpZiAoc2Vzc2lvbk1vZGVzKSB7CisgICAgICAg
IGZvciAoYXV0byYgbW9kZSA6IHNlc3Npb25Nb2Rlcy52YWx1ZSgpKSB7CisgICAgICAgICAgICAv
LyBUT0RPOiBmaWxsIGluIGZlYXR1cmVzCisgICAgICAgICAgICBkZXZpY2UtPnNldEVuYWJsZWRG
ZWF0dXJlcyhtb2RlLCB7IH0pOworICAgICAgICB9CisgICAgfQorCisgICAgbV9pbW1lcnNpdmVY
UkRldmljZXMuYXBwZW5kKFdURk1vdmUoZGV2aWNlKSk7CisjZW5kaWYgLy8gVVNFX09QRU5YUgor
fQorCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1Y
Uk9wZW5YUi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJP
cGVuWFIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kYzBmMTA0YjczMjQzNDhjMmFkNTc5ZTVmNTE5YTg5M2FlNTRl
NTRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Blbnhy
L1BsYXRmb3JtWFJPcGVuWFIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQlhSKQorI2lu
Y2x1ZGUgIlBsYXRmb3JtWFIuaCIKKworI2lmIFVTRV9PUEVOWFIKKyNpbmNsdWRlIDxvcGVueHIv
b3BlbnhyLmg+CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKworLy8gaHR0cHM6Ly93d3cua2hy
b25vcy5vcmcvcmVnaXN0cnkvT3BlblhSL3NwZWNzLzEuMC9odG1sL3hyc3BlYy5odG1sI3N5c3Rl
bQorLy8gQSBzeXN0ZW0gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBkZXZpY2Vz
IGluIHRoZSBydW50aW1lLCBvZnRlbiBtYWRlIHVwIG9mIHNldmVyYWwgaW5kaXZpZHVhbAorLy8g
aGFyZHdhcmUgY29tcG9uZW50cyB3b3JraW5nIHRvZ2V0aGVyIHRvIGVuYWJsZSBYUiBleHBlcmll
bmNlcy4KKy8vCisvLyBXZWJYUiB0YWxrcyBhYm91dCBYUiBkZXZpY2VzLCBpcyBhIHBoeXNpY2Fs
IHVuaXQgb2YgaGFyZHdhcmUgdGhhdCBjYW4gcHJlc2VudCBpbWFnZXJ5IHRvIHRoZSB1c2VyLCBz
bworLy8gdGhlcmUgaXMgbm90IGRpcmVjdCBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGFuIE9wZW5Y
UiBzeXN0ZW0gYW5kIGEgV2ViWFIgZGV2aWNlIGJlY2F1c2UgdGhlIHN5c3RlbSBBUEkKKy8vIGlz
IGFuIGFic3RyYWN0aW9uIGZvciBhIGNvbGxlY3Rpb24gb2YgZGV2aWNlcyB3aGlsZSB0aGUgV2Vi
WFIgZGV2aWNlIGlzIG1vc3RseSBvbmUgcGh5c2ljYWwgdW5pdCwKKy8vIHVzdWFsbHkgYW4gSE1E
IG9yIGEgcGhvbmUvdGFibGV0LgorLy8KKy8vIEl0J3MgaW1wb3J0YW50IGFsc28gbm90IHRvIHRy
eSB0byBhc3NvY2lhdGUgT3BlblhSIHN5c3RlbSB3aXRoIFdlYlhSJ3MgWFJTeXN0ZW0gYmVjYXVz
ZSB0aGV5J3JlIHRvdGFsbHkKKy8vIGRpZmZlcmVudCBjb25jZXB0cy4gVGhlIHN5c3RlbSBpbiBP
cGVuWFIgd2FzIGRlZmluZWQgYWJvdmUgYXMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZGV2aWNl
cy4gSW4gV2ViWFIsCisvLyB0aGUgWFJTeXN0ZW0gaXMgYmFzaWNhbGx5IHRoZSBlbnRyeSBwb2lu
dCBmb3IgdGhlIFdlYlhSIEFQSSBhdmFpbGFibGUgdmlhIHRoZSBOYXZpZ2F0b3Igb2JqZWN0Lgor
Y2xhc3MgT3BlblhSRGV2aWNlIGZpbmFsIDogcHVibGljIERldmljZSB7CitwdWJsaWM6CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGV2aWNlJiBvdGhlcikgY29uc3QgZmluYWwKKyAgICB7
CisgICAgICAgIEFTU0VSVChpczxPcGVuWFJEZXZpY2U+KG90aGVyKSk7CisgICAgICAgIHJldHVy
biBtX3N5c3RlbUlkID09IGRvd25jYXN0PE9wZW5YUkRldmljZT4ob3RoZXIpLm1fc3lzdGVtSWQ7
CisgICAgfQorCitwcml2YXRlOgorICAgIFhyU3lzdGVtSWQgbV9zeXN0ZW1JZDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIFVTRV9PUEVOWFIKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCWFIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYkZh
a2VYUkRldmljZS5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuaApp
bmRleCBiNGM1ODRkNTRjYWYzZGViNWU4YjcwYmYxMWQ4Y2QzYzM3MGM5M2JlLi41MzU0YWRlODQ3
ZDVlYTVjNGRjMzU2ZWVmZDM1MDYyZTgyMTliNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
V2ViRmFrZVhSRGV2aWNlLmgKQEAgLTY4LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEZsb29yT3JpZ2luKFJlZlB0cjxXZWJYUlJpZ2lkVHJhbnNmb3JtPiYmIG9yaWdpbikgeyBtX2Zs
b29yT3JpZ2luID0gV1RGTW92ZShvcmlnaW4pOyB9CiAgICAgdm9pZCBzZXRFbXVsYXRlZFBvc2l0
aW9uKGJvb2wgZW11bGF0ZWQpIHsgbV9lbXVsYXRlZFBvc2l0aW9uID0gZW11bGF0ZWQ7IH0KICAg
ICBWZWN0b3I8UmVmPEZha2VYUlZpZXc+PiYgdmlld3MoKSB7IHJldHVybiBtX3ZpZXdzOyB9CisK
KyAgICAvLyBUaGVyZSBtdXNuJ3QgYmUgYW5vdGhlciBzaW11bGF0ZWQgWFIgZGV2aWNlCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IERldmljZSYgb3RoZXIpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRoaXMgPT0gJm90aGVyID8gdHJ1ZSA6IGZhbHNlOyB9CisKIHByaXZhdGU6CiAgICAgT3B0aW9u
YWw8VmVjdG9yPEZha2VYUkJvdW5kc1BvaW50Pj4gbV9uYXRpdmVCb3VuZHNHZW9tZXRyeTsKICAg
ICBSZWZQdHI8V2ViWFJSaWdpZFRyYW5zZm9ybT4gbV92aWV3ZXJPcmlnaW47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401135</attachid>
            <date>2020-06-05 03:20:50 -0700</date>
            <delta_ts>2020-06-05 04:16:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212470-20200605122048.patch</filename>
            <type>text/plain</type>
            <size>35143</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY1ODBhNGQyNDI1Njdl
ZWQ2NWYyYzNjNGI4MjdmYTc5ZWZhNDRhNi4uOWY4ZWFiMzFjZTY5YmMwNGRjZmM5OTU0MDAxNWQz
YzUxOGI5MjM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA2LTA1ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0g
UmVmYWN0b3IgT3BlblhSIHBsYXRmb3JtIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgYSBiaXQgdGhlIHBsYXRmb3JtIGNvZGUg
YmVjYXVzZSB3ZSB3YW50IHRvIGV4dGVuZCB0aGUgUGxhdGZvcm1YUjo6RGV2aWNlIGZvciB0aGUg
T3BlblhSCisgICAgICAgIGxpYnJhcnkuIEFsc28gd2UncmUgcmVtb3ZpbmcgYWxsIHRoZSBkZXZp
Y2UgaWQgY29kZSBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gZXhwb3NlIGl0LgorCisgICAg
ICAgIFRoZSBpZGVhIGZyb20gbm93IG9uIGlzIHRvIG9ubHkgZGVmaW5lIGludGVyZmFjZXMgaW4g
UGxhdGZvcm1YUi5oIGFuZCB0aGVuIGFkZCBhbGwgdGhlIE9wZW5YUiBzcGVjaWZpY3MKKyAgICAg
ICAgaW4gdGhlIG5ld2x5IHJlbmFtZWQgUGxhdGZvcm1YUk9wZW5YUi5bY2hdIGZpbGVzLiBXZSdy
ZSBhbHNvIHJlbmFtaW5nIFBsYXRmb3JtWFIuY3BwIHRvCisgICAgICAgIFBsYXRmb3JtWFJPcGVu
WFIuY3BwIHRvIGNsZWFybHkgc3RhdGUgdGhhdCBpdCdzIHRoZSBPcGVuWFIgaW1wbGVtZW50YXRp
b24gYW5kIHRvIGRpZmZlcmVudGlhdGUgaXQgZnJvbQorICAgICAgICB0aGUgaW1wbGVtZW50YXRp
b24gYWdub3N0aWMgUGxhdGZvcm1YUi5oIGZpbGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFz
IHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogU291cmNl
cy50eHQ6IEFkZGVkIHJlbmFtZWQgZmlsZXMuIFJlbW92ZWQgUGxhdGZvcm1YUi5jcHAuCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS94ci9QbGF0Zm9ybVhSLmg6CisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OmlkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6b3BlcmF0b3I9PSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVu
WFIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1Bs
YXRmb3JtWFIuY3BwLgorICAgICAgICAoUGxhdGZvcm1YUjo6SW5zdGFuY2U6OkltcGw6On5JbXBs
KTogQ2FsbCB4ckRlc3Ryb3lJbnN0YW5jZSgpIG9uIG1faW5zdGFuY2UuCisgICAgICAgIChQbGF0
Zm9ybVhSOjpJbnN0YW5jZTo6SW1wbDo6Y29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2Rlcyk6IERv
IG5vdCBwYXNzIFhyU3lzdGVtSWQgYXMgYXJndW1lbnQKKyAgICAgICAgYXMgaXQncyBzdG9yZWQg
aW4gdGhlIE9wZW5YUkRldmljZSBvYmplY3QuCisgICAgICAgIChQbGF0Zm9ybVhSOjpJbnN0YW5j
ZTo6ZW51bWVyYXRlSW1tZXJzaXZlWFJEZXZpY2VzKTogQ3JlYXRlIGFuIE9wZW5YUkRldmljZSBp
bnN0ZWFkIG9mIGEgRGV2aWNlLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9y
bVhST3BlblhSLmg6IEFkZGVkLgorCiAyMDIwLTA2LTAxICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gQ2hpbGRJbnRyaW5z
aWNMb2dpY2FsV2lkdGggc2hvdWxkIHVzZSBmaXQtY29udGVudCwgbm90IG1heC1jb250ZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDU5ZGM5YzYxYjM1MjZlMjExM2ViYTg3ZTdiYzNhYmY4MDczZjEwN2Yu
LmU2NTk5YmJhNzQ1OWQ4YWMwMmQ3NTIwMjJlNTczZTY4NjIwYWFlOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0yMTE3LDggKzIxMTcsNyBAQCBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKIHBs
YXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAogCi1wbGF0Zm9ybS94ci9QbGF0Zm9ybVhSLmNwcCBAbm8t
dW5pZnkKLXBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhSLmNwcCBAbm8tdW5pZnkKK3BsYXRm
b3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBAbm8tdW5pZnkKIAogcGx1Z2lucy9E
T01NaW1lVHlwZS5jcHAKIHBsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNmEyNGY0
NWYzYWE2ZmEwZDEzZmQxYmYzZDI3MGUwMWQ2OTY4YmU3Li4xNDc1MTMwY2YyMmI0YTRlOGZlZWQx
ZmI3NWY2MzE3MzUzYTQyODc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODE0LDYgKzQ4MTQsOCBAQAogCQlFMUJBNjcxQTE3
NDJCRUY0MDBDMjAyNTEgLyogV2ViQ29yZVRlc3RTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJBNjcxOTE3NDJCRUY0MDBDMjAy
NTEgLyogV2ViQ29yZVRlc3RTaGltTGlicmFyeS5jcHAgKi87IH07CiAJCUUxQkQzMzFBMTgyRDhE
REQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRDMzMTgxODJEOERERDAw
QzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmggKi87IH07CiAJCUUx
QkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJDMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuaCAqLzsgfTsKKwkJRTFDMUEzOUQyNDgwMDgwODAwRTBBRjY2
IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDMUEzOUIyNDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVu
WFIuY3BwICovOyB9OworCQlFMUMxQTM5RTI0ODAwODA4MDBFMEFGNjYgLyogUGxhdGZvcm1YUk9w
ZW5YUi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
MUEzOUMyNDgwMDgwNzAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuaCAqLzsgfTsKIAkJRTFD
MjY2REYxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleVJTQUNvbXBvbmVudHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzI2NkREMTgzMTlGMzEw
MDNGOEIzMyAvKiBDcnlwdG9LZXlSU0FDb21wb25lbnRzLmggKi87IH07CiAJCUUxQzM2MkVGMEVB
RjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyogSlNX
b3JrZXJMb2NhdGlvbi5oICovOyB9OwogCQlFMUMzNkMwMzBFQjA3NkQ2MDA3NDEwQkMgLyogSlNE
T01HbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQzM2QzAyMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODMwLDgg
KzQ4MzIsNiBAQAogCQlFMUU2RUVBODBCNjI4REIzMDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFF
NkVFQTcwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLzsgfTsKIAkJ
RTFFQzI5QTAwQkIwNEM2QjAwRUExODdCIC8qIFhQYXRoTm9kZVNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFQzI5OUUwQkIwNEM2QjAwRUExODdC
IC8qIFhQYXRoTm9kZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUUxRUQ4QUMzMENDNDlCRTAwMEJGQzU1NyAvKiBDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUVEOEFDMjBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUUxRUU4
QjcwMjQxMkIyQTgwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU4QjZDMjQxMkIyQTcwMEU3OTRENiAvKiBQ
bGF0Zm9ybVhSLmNwcCAqLzsgfTsKLQkJRTFFRThCNzEyNDEyQjJBODAwRTc5NEQ2IC8qIFBsYXRm
b3JtWFIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFFRThCNkUyNDEyQjJBNzAwRTc5NEQ2IC8qIFBsYXRmb3JtWFIuY3BwICovOyB9OwogCQlFMUVF
OEI3MjI0MTJCMkE4MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRThCNkYyNDEyQjJBNzAwRTc5NEQ2IC8qIFBs
YXRmb3JtWFIuaCAqLzsgfTsKIAkJRTFFRThCNzYyNDEzMTkxRjAwRTc5NEQ2IC8qIFdlYlhSVmll
d2VyUG9zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFFRThBQzcyNDEyQjE2RjAwRTc5NEQ2IC8qIFdlYlhSVmlld2VyUG9zZS5oICovOyB9OwogCQlF
MUVFOEI3NzI0MTMxOTFGMDBFNzk0RDYgLyogWFJSZWZlcmVuY2VTcGFjZVR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU4QUM5MjQxMkIxNzAw
MEU3OTRENiAvKiBYUlJlZmVyZW5jZVNwYWNlVHlwZS5oICovOyB9OwpAQCAtMTUyOTEsNiArMTUy
OTEsOCBAQAogCQlFMUJEMzMxODE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFCRTUxMkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTTFRVbmlj
b2RlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMxQTM5QjI0ODAwODA2
MDBFMEFGNjYgLyogUGxhdGZvcm1YUk9wZW5YUi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQbGF0Zm9ybVhST3BlblhSLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTFDMUEzOUMyNDgwMDgwNzAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1YUk9wZW5YUi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMyNjZENjE4MzE3QUI0MDAzRjhCMzMgLyogQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMyNjZEQzE4MzE5RjMxMDAzRjhCMzMg
LyogQ3J5cHRvS2V5UlNBQ29tcG9uZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDcnlwdG9LZXlSU0FDb21wb25lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTFDMjY2REQxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleVJTQUNvbXBv
bmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvS2V5UlNBQ29t
cG9uZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU0MDMsOCArMTU0MDUs
NiBAQAogCQlFMUVFOEIxNjI0MTJCMTcwMDBFNzk0RDYgLyogWFJQb3NlLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBYUlBvc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUVFOEIxNzI0MTJCMTcwMDBFNzk0RDYgLyogV2ViWFJJbnB1dFNvdXJjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJYUklucHV0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxRUU4QjE4MjQxMkIxNzAwMEU3OTRENiAvKiBYUklucHV0U291cmNl
QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhSSW5wdXRTb3VyY2VBcnJheS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxRUU4QjZDMjQxMkIyQTcwMEU3OTRENiAv
KiBQbGF0Zm9ybVhSLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBs
YXRmb3JtWFIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUVFOEI2RTI0MTJC
MkE3MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQbGF0Zm9ybVhSLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFFRThCNkYyNDEyQjJBNzAwRTc5NEQ2IC8qIFBsYXRmb3JtWFIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1YUi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUYxRTgyRDBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVuc2lvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVEV4dGVuc2lvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUYxRTgyRTBDM0MyQkI5MDA2REIzOTEgLyogWFNM
VEV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMVEV4dGVu
c2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NTE5LDcgKzI3NTE5LDYg
QEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTFFRThCNkQyNDEy
QjJBNzAwRTc5NEQ2IC8qIG9wZW54ciAqLywKLQkJCQlFMUVFOEI2QzI0MTJCMkE3MDBFNzk0RDYg
LyogUGxhdGZvcm1YUi5jcHAgKi8sCiAJCQkJRTFFRThCNkYyNDEyQjJBNzAwRTc5NEQ2IC8qIFBs
YXRmb3JtWFIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0geHI7CkBAIC0yNzUyOCw3ICsyNzUyNyw4
IEBACiAJCUUxRUU4QjZEMjQxMkIyQTcwMEU3OTRENiAvKiBvcGVueHIgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUUxRUU4QjZFMjQxMkIyQTcwMEU3OTRE
NiAvKiBQbGF0Zm9ybVhSLmNwcCAqLywKKwkJCQlFMUMxQTM5QjI0ODAwODA2MDBFMEFGNjYgLyog
UGxhdGZvcm1YUk9wZW5YUi5jcHAgKi8sCisJCQkJRTFDMUEzOUMyNDgwMDgwNzAwRTBBRjY2IC8q
IFBsYXRmb3JtWFJPcGVuWFIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gb3BlbnhyOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMyNDY1LDYgKzMyNDY1LDcgQEAKIAkJCQk1MkIwRDRC
RTFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzVDNDc2QjA5QUM0RDRGMDBBNkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMUVFOEI3MjI0MTJCMkE4MDBFNzk0RDYgLyogUGxhdGZvcm1YUi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTFDMUEzOUUyNDgwMDgwODAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVu
WFIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgwMUZFODY0QTcwMDIwMzFDQyAvKiBQbGF5
YmFja0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBMjlBMzIxQ0MwMUE5NTAwOTAx
Q0NGIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREEyOUExNzFDQkRBNTZDMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
LmggaW4gSGVhZGVycyAqLywKQEAgLTM0MzQ3LDggKzM0MzQ4LDcgQEAKIAkJCQlFMTY5ODI2MDEx
MzQ2MzZBMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlDRUEyODQ2NjIxNDFFODQ5MDBFNDA3RTggLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBQTEyREY0OTE3NDNERjgzMDA0REFGREYgLyogUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplcklPUy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUUxRUU4QjcxMjQxMkIy
QTgwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxRUU4Qjcw
MjQxMkIyQTgwMEU3OTRENiAvKiBQbGF0Zm9ybVhSLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUx
QzFBMzlEMjQ4MDA4MDgwMEUwQUY2NiAvKiBQbGF0Zm9ybVhST3BlblhSLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUNEQTI5QTMwMUNCRjc0RDQwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQTI5QTE2MUNCREE1NkMwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0
MTkyNDI0OTIxMjdCOTNFMDA2MzRGQ0YgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29j
b2EubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3hyL1BsYXRmb3JtWFIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1Y
Ui5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOThjYzVlMzA0MWQ3MGNkNGNj
NDU4OGEyM2I5MGMzNjcwNWFiNGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEln
YWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVhSLmgiCi0K
LW5hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKLQotI2lmIEVOQUJMRShXRUJYUikKLQotRGV2aWNlOjpE
ZXZpY2VJZCBJbnN0YW5jZTo6bmV4dERldmljZUlkKCkKLXsKLSAgICBzdGF0aWMgRGV2aWNlOjpE
ZXZpY2VJZCBzX25leHREZXZpY2VJZCB7IDAgfTsKLSAgICByZXR1cm4gc19uZXh0RGV2aWNlSWQr
KzsKLX0KLQotRGV2aWNlOjpEZXZpY2UoKQotICAgIDogbV9pZChJbnN0YW5jZTo6bmV4dERldmlj
ZUlkKCkpCi17Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpCi0KLX0gLy8gbmFtZXNwYWNl
IFBsYXRmb3JtWFIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRm
b3JtWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaAppbmRleCAw
YjA0MTNiY2I1ODdiOWYxNGFiMzQwY2RhNGU0OWU5YjA2ZTk0ZjVkLi5kNWI1N2RlNTA3OGMzMTVh
M2JkMGM0ZDM1ZmZmYzFiMmE1YmRkMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9QbGF0Zm9ybVhSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxh
dGZvcm1YUi5oCkBAIC00NSwzNCArNDUsMjcgQEAgY2xhc3MgRGV2aWNlIDogcHVibGljIENhbk1h
a2VXZWFrUHRyPERldmljZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERldmljZSk7CiBwdWJsaWM6Ci0gICAgdXNpbmcgRGV2aWNlSWQg
PSB1aW50MzJfdDsKLSAgICBEZXZpY2UoKTsKLSAgICBEZXZpY2VJZCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KKyAgICB2aXJ0dWFsIH5EZXZpY2UoKSA9IGRlZmF1bHQ7CiAKICAgICB1c2lu
ZyBMaXN0T2ZFbmFibGVkRmVhdHVyZXMgPSBWZWN0b3I8UmVmZXJlbmNlU3BhY2VUeXBlPjsKICAg
ICBib29sIHN1cHBvcnRzKFNlc3Npb25Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxl
ZEZlYXR1cmVzTWFwLmNvbnRhaW5zKG1vZGUpOyB9CiAgICAgdm9pZCBzZXRFbmFibGVkRmVhdHVy
ZXMoU2Vzc2lvbk1vZGUgbW9kZSwgY29uc3QgTGlzdE9mRW5hYmxlZEZlYXR1cmVzJiBmZWF0dXJl
cykgeyBtX2VuYWJsZWRGZWF0dXJlc01hcC5zZXQobW9kZSwgZmVhdHVyZXMpOyB9CiAgICAgTGlz
dE9mRW5hYmxlZEZlYXR1cmVzIGVuYWJsZWRGZWF0dXJlcyhTZXNzaW9uTW9kZSBtb2RlKSBjb25z
dCB7IHJldHVybiBtX2VuYWJsZWRGZWF0dXJlc01hcC5nZXQobW9kZSk7IH0KIAotICAgIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRGV2aWNlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9p
ZCA9PSBvdGhlci5tX2lkOyB9Ci0KIHByb3RlY3RlZDoKKyAgICBEZXZpY2UoKSA9IGRlZmF1bHQ7
CisKICAgICAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyN4ci1kZXZp
Y2UtY29uY2VwdAogICAgIC8vIEVhY2ggWFIgZGV2aWNlIGhhcyBhIGxpc3Qgb2YgZW5hYmxlZCBm
ZWF0dXJlcyBmb3IgZWFjaCBYUlNlc3Npb25Nb2RlIGluIGl0cyBsaXN0IG9mIHN1cHBvcnRlZCBt
b2RlcywKICAgICAvLyB3aGljaCBpcyBhIGxpc3Qgb2YgZmVhdHVyZSBkZXNjcmlwdG9ycyB3aGlj
aCBNVVNUIGJlIGluaXRpYWxseSBhbiBlbXB0eSBsaXN0LgogICAgIHVzaW5nIEVuYWJsZWRGZWF0
dXJlc1Blck1vZGVNYXAgPSBXVEY6Okhhc2hNYXA8U2Vzc2lvbk1vZGUsIExpc3RPZkVuYWJsZWRG
ZWF0dXJlcywgV1RGOjpJbnRIYXNoPFNlc3Npb25Nb2RlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRy
YWl0czxTZXNzaW9uTW9kZT4+OwogICAgIEVuYWJsZWRGZWF0dXJlc1Blck1vZGVNYXAgbV9lbmFi
bGVkRmVhdHVyZXNNYXA7Ci0KLXByaXZhdGU6Ci0gICAgRGV2aWNlSWQgbV9pZDsKIH07CiAKIGNs
YXNzIEluc3RhbmNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5zdGFuY2UmIHNpbmdsZXRvbigp
OwogCi0gICAgc3RhdGljIERldmljZTo6RGV2aWNlSWQgbmV4dERldmljZUlkKCk7Ci0KICAgICB2
b2lkIGVudW1lcmF0ZUltbWVyc2l2ZVhSRGV2aWNlcygpOwogICAgIGNvbnN0IFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8RGV2aWNlPj4mIGltbWVyc2l2ZVhSRGV2aWNlcygpIGNvbnN0IHsgcmV0dXJu
IG1faW1tZXJzaXZlWFJEZXZpY2VzOyB9CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YTY0NzA1MGY5N2U4NjNlNTZmMjU5MjhiNTVhZDlmNjI5YTJhOGNkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhSLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSwgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVhSLmgiCi0KLSNpZiBFTkFCTEUoV0VCWFIpCi0K
LSNpZiBVU0VfT1BFTlhSCi0jaW5jbHVkZSA8b3BlbnhyL29wZW54ci5oPgotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVy
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2VuZGlmIC8vIFVTRV9PUEVO
WFIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFBsYXRmb3Jt
WFIgewotCi0jaWYgVVNFX09QRU5YUgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBYclN0cnVjdHVy
ZVR5cGUgU3RydWN0dXJlVHlwZT4KLVQgY3JlYXRlU3RydWN0dXJlKCkKLXsKLSAgICBUIG9iamVj
dDsKLSAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoVCkpOwotICAgIG9iamVjdC50
eXBlID0gU3RydWN0dXJlVHlwZTsKLSAgICBvYmplY3QubmV4dCA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuIG9iamVjdDsKLX0KLQotU3RyaW5nIHJlc3VsdFRvU3RyaW5nKFhyUmVzdWx0IHZhbHVlLCBY
ckluc3RhbmNlIGluc3RhbmNlKQotewotICAgIGNoYXIgYnVmZmVyW1hSX01BWF9SRVNVTFRfU1RS
SU5HX1NJWkVdOwotICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyUmVzdWx0VG9TdHJpbmcoaW5zdGFu
Y2UsIHZhbHVlLCBidWZmZXIpOwotICAgIGlmIChyZXN1bHQgPT0gWFJfU1VDQ0VTUykKLSAgICAg
ICAgcmV0dXJuIFN0cmluZyhidWZmZXIpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCI8dW5rbm93
biAiLCBpbnQodmFsdWUpLCAiPiIpOwotfQotCi0jZGVmaW5lIFJFVFVSTl9JRl9GQUlMRUQocmVz
dWx0LCBjYWxsLCBpbnN0YW5jZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBXVEZMb2dBbHdheXMoIiVzICVzOiAlc1xuIiwgX19mdW5jX18sIGNh
bGwsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgaW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOyBcCi0g
ICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCi0jZW5kaWYgLy8gVVNFX09QRU5Y
UgotCi1zdHJ1Y3QgSW5zdGFuY2U6OkltcGwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIEltcGwoKTsKLSAgICB+SW1wbCgpOwotCi0jaWYgVVNFX09QRU5YUgot
ICAgIE9wdGlvbmFsPFZlY3RvcjxTZXNzaW9uTW9kZT4+IGNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9u
TW9kZXMoRGV2aWNlJiwgWHJTeXN0ZW1JZCk7Ci0gICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlIHsg
WFJfTlVMTF9IQU5ETEUgfTsKLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi19OwotCi1JbnN0YW5jZTo6
SW1wbDo6SW1wbCgpCi17Ci0jaWYgVVNFX09QRU5YUgotICAgIFdURkxvZ0Fsd2F5cygiT3BlblhS
OiBpbml0aWFsaXppbmdcbiIpOwotCi0gICAgWyZdIHsKLSAgICAgICAgdWludDMyX3QgcHJvcGVy
dHlDb3VudE91dHB1dCB7IDAgfTsKLSAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVtZXJh
dGVBcGlMYXllclByb3BlcnRpZXMoMCwgJnByb3BlcnR5Q291bnRPdXRwdXQsIG51bGxwdHIpOwot
ICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlQXBpTGF5ZXJQcm9w
ZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKLQotICAgICAgICBpZiAoIXByb3BlcnR5Q291bnRPdXRw
dXQpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVBcGlMYXllclByb3Bl
cnRpZXMoKTogbm8gcHJvcGVydGllc1xuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBWZWN0b3I8WHJBcGlMYXllclByb3BlcnRpZXM+IHByb3BlcnRpZXMocHJv
cGVydHlDb3VudE91dHB1dCk7Ci0gICAgICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlQXBpTGF5ZXJQ
cm9wZXJ0aWVzKHByb3BlcnR5Q291bnRPdXRwdXQsIG51bGxwdHIsIHByb3BlcnRpZXMuZGF0YSgp
KTsKLSAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVudW1lcmF0ZUFwaUxheWVy
UHJvcGVydGllcygpIiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVu
dW1lcmF0ZUFwaUxheWVyUHJvcGVydGllcygpOiAlenUgcHJvcGVydGllc1xuIiwgcHJvcGVydGll
cy5zaXplKCkpOwotICAgIH0oKTsKLQotICAgIFsmXSB7Ci0gICAgICAgIHVpbnQzMl90IHByb3Bl
cnR5Q291bnRPdXRwdXQgeyAwIH07Ci0gICAgICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyRW51bWVy
YXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKG51bGxwdHIsIDAsICZwcm9wZXJ0eUNvdW50
T3V0cHV0LCBudWxscHRyKTsKLSAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVu
dW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcygpIiwgbV9pbnN0YW5jZSk7Ci0KLSAg
ICAgICAgaWYgKCFwcm9wZXJ0eUNvdW50T3V0cHV0KSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdh
eXMoInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCk6IG5vIHByb3BlcnRp
ZXNcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9y
PFhyRXh0ZW5zaW9uUHJvcGVydGllcz4gcHJvcGVydGllcyhwcm9wZXJ0eUNvdW50T3V0cHV0LAot
ICAgICAgICAgICAgW10gewotICAgICAgICAgICAgICAgIFhyRXh0ZW5zaW9uUHJvcGVydGllcyBv
YmplY3Q7Ci0gICAgICAgICAgICAgICAgc3RkOjptZW1zZXQoJm9iamVjdCwgMCwgc2l6ZW9mKFhy
RXh0ZW5zaW9uUHJvcGVydGllcykpOwotICAgICAgICAgICAgICAgIG9iamVjdC50eXBlID0gWFJf
VFlQRV9FWFRFTlNJT05fUFJPUEVSVElFUzsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwotICAgICAgICAgICAgfSgpKTsKLSAgICAgICAgdWludDMyX3QgcHJvcGVydHlDb3VudFdyaXR0
ZW4geyAwIH07Ci0gICAgICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Q
cm9wZXJ0aWVzKG51bGxwdHIsIHByb3BlcnR5Q291bnRPdXRwdXQsICZwcm9wZXJ0eUNvdW50V3Jp
dHRlbiwgcHJvcGVydGllcy5kYXRhKCkpOwotICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3Vs
dCwgInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNl
KTsKLQotICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Q
cm9wZXJ0aWVzKCk6ICV6dSBleHRlbnNpb24gcHJvcGVydGllc1xuIiwgcHJvcGVydGllcy5zaXpl
KCkpOwotICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogcHJvcGVydGllcykgewotICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCIgIGV4dGVuc2lvbiAnJXMnLCB2ZXJzaW9uICV1XG4iLAotICAg
ICAgICAgICAgICAgIHByb3BlcnR5LmV4dGVuc2lvbk5hbWUsIHByb3BlcnR5LmV4dGVuc2lvblZl
cnNpb24pOwotICAgICAgICB9Ci0gICAgfSgpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNf
YXBwbGljYXRpb25OYW1lID0gIldlYlhSIChXZWJLaXQpIjsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dDMyX3Qgc19hcHBsaWNhdGlvblZlcnNpb24gPSAxOwotCi0gICAgewotICAgICAgICBhdXRvIGNy
ZWF0ZUluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJJbnN0YW5jZUNyZWF0ZUluZm8sIFhSX1RZUEVf
SU5TVEFOQ0VfQ1JFQVRFX0lORk8+KCk7Ci0gICAgICAgIGNyZWF0ZUluZm8uY3JlYXRlRmxhZ3Mg
PSAwOwotICAgICAgICBzdGQ6Om1lbWNweShjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcHBs
aWNhdGlvbk5hbWUsIHNfYXBwbGljYXRpb25OYW1lLCBYUl9NQVhfQVBQTElDQVRJT05fTkFNRV9T
SVpFKTsKLSAgICAgICAgY3JlYXRlSW5mby5hcHBsaWNhdGlvbkluZm8uYXBpVmVyc2lvbiA9IFhS
X0NVUlJFTlRfQVBJX1ZFUlNJT047Ci0gICAgICAgIGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZv
LmFwcGxpY2F0aW9uVmVyc2lvbiA9IHNfYXBwbGljYXRpb25WZXJzaW9uOwotICAgICAgICBjcmVh
dGVJbmZvLmVuYWJsZWRBcGlMYXllckNvdW50ID0gMDsKLSAgICAgICAgY3JlYXRlSW5mby5lbmFi
bGVkRXh0ZW5zaW9uQ291bnQgPSAwOwotCi0gICAgICAgIFhySW5zdGFuY2UgaW5zdGFuY2U7Ci0g
ICAgICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyQ3JlYXRlSW5zdGFuY2UoJmNyZWF0ZUluZm8sICZp
bnN0YW5jZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJDcmVhdGVJbnN0
YW5jZSgpIiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAgbV9pbnN0YW5jZSA9IGluc3RhbmNlOwot
ICAgICAgICBXVEZMb2dBbHdheXMoInhyQ3JlYXRlSW5zdGFuY2UoKTogdXNpbmcgaW5zdGFuY2Ug
JXBcbiIsIG1faW5zdGFuY2UpOwotICAgIH0KLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi19Ci0KLUlu
c3RhbmNlOjpJbXBsOjp+SW1wbCgpCi17Ci19Ci0KLSNpZiBVU0VfT1BFTlhSCi0KLU9wdGlvbmFs
PFZlY3RvcjxTZXNzaW9uTW9kZT4+IEluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9ydGVkU2Vz
c2lvbk1vZGVzKERldmljZSYgZGV2aWNlLCBYclN5c3RlbUlkIHN5c3RlbUlkKQotewotICAgIHVp
bnQzMl90IHZpZXdDb25maWd1cmF0aW9uQ291bnQ7Ci0gICAgWHJSZXN1bHQgcmVzdWx0ID0geHJF
bnVtZXJhdGVWaWV3Q29uZmlndXJhdGlvbnMobV9pbnN0YW5jZSwgc3lzdGVtSWQsIDAsICZ2aWV3
Q29uZmlndXJhdGlvbkNvdW50LCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NF
U1MpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9u
cygpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBY
clZpZXdDb25maWd1cmF0aW9uVHlwZSB2aWV3Q29uZmlndXJhdGlvbnNbdmlld0NvbmZpZ3VyYXRp
b25Db3VudF07Ci0gICAgcmVzdWx0ID0geHJFbnVtZXJhdGVWaWV3Q29uZmlndXJhdGlvbnMobV9p
bnN0YW5jZSwgc3lzdGVtSWQsIHZpZXdDb25maWd1cmF0aW9uQ291bnQsICZ2aWV3Q29uZmlndXJh
dGlvbkNvdW50LCB2aWV3Q29uZmlndXJhdGlvbnMpOwotICAgIGlmIChyZXN1bHQgIT0gWFJfU1VD
Q0VTUykgewotICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRp
b25zKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZp
Z3VyYXRpb25zKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFu
Y2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIH0K
LQotICAgIFZlY3RvcjxTZXNzaW9uTW9kZT4gc3VwcG9ydGVkTW9kZXM7Ci0gICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IHZpZXdDb25maWd1cmF0aW9uQ291bnQ7ICsraSkgewotICAgICAgICBh
dXRvIHZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcyA9IGNyZWF0ZVN0cnVjdHVyZTxYclZpZXdD
b25maWd1cmF0aW9uUHJvcGVydGllcywgWFJfVFlQRV9WSUVXX0NPTkZJR1VSQVRJT05fUFJPUEVS
VElFUz4oKTsKLSAgICAgICAgcmVzdWx0ID0geHJHZXRWaWV3Q29uZmlndXJhdGlvblByb3BlcnRp
ZXMobV9pbnN0YW5jZSwgc3lzdGVtSWQsIHZpZXdDb25maWd1cmF0aW9uc1tpXSwgJnZpZXdDb25m
aWd1cmF0aW9uUHJvcGVydGllcyk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykg
ewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckdldFZpZXdDb25maWd1cmF0aW9uUHJvcGVy
dGllcygpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcy52aWV3Q29uZmlndXJh
dGlvblR5cGUgPT0gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9NT05PKQotICAg
ICAgICAgICAgc3VwcG9ydGVkTW9kZXMuYXBwZW5kKFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVBcik7
Ci0gICAgICAgIGVsc2UgaWYgKHZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcy52aWV3Q29uZmln
dXJhdGlvblR5cGUgPT0gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9TVEVSRU8p
Ci0gICAgICAgICAgICBzdXBwb3J0ZWRNb2Rlcy5hcHBlbmQoU2Vzc2lvbk1vZGU6OkltbWVyc2l2
ZVZyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1cHBvcnRlZE1vZGVzOwotfQotCi0jZW5kaWYgLy8g
VVNFX09QRU5YUgotCi1JbnN0YW5jZSYgSW5zdGFuY2U6OnNpbmdsZXRvbigpCi17Ci0gICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxJbnN0YW5jZT4gc19pbnN0YW5jZTsKLSAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgc19vbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShzX29uY2VGbGFn
LAotICAgICAgICBbJl0gewotICAgICAgICAgICAgc19pbnN0YW5jZS0+bV9pbXBsID0gbWFrZVVu
aXF1ZTxJbXBsPigpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gc19pbnN0YW5jZS5nZXQoKTsK
LX0KLQotSW5zdGFuY2U6Okluc3RhbmNlKCkgPSBkZWZhdWx0OwotSW5zdGFuY2U6On5JbnN0YW5j
ZSgpID0gZGVmYXVsdDsKLQotdm9pZCBJbnN0YW5jZTo6ZW51bWVyYXRlSW1tZXJzaXZlWFJEZXZp
Y2VzKCkKLXsKLSNpZiBVU0VfT1BFTlhSCi0gICAgaWYgKG1faW1wbC0+bV9pbnN0YW5jZSA9PSBY
Ul9OVUxMX0hBTkRMRSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIiVzIFVuYWJsZSB0byBlbnVt
ZXJhdGUgWFIgZGV2aWNlcy4gTm8gWHJJbnN0YW5jZSBwcmVzZW50XG4iLCBfX0ZVTkNUSU9OX18p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzeXN0ZW1HZXRJbmZvID0gY3Jl
YXRlU3RydWN0dXJlPFhyU3lzdGVtR2V0SW5mbywgWFJfVFlQRV9TWVNURU1fR0VUX0lORk8+KCk7
Ci0gICAgc3lzdGVtR2V0SW5mby5mb3JtRmFjdG9yID0gWFJfRk9STV9GQUNUT1JfSEVBRF9NT1VO
VEVEX0RJU1BMQVk7Ci0KLSAgICBYclN5c3RlbUlkIHN5c3RlbUlkOwotICAgIFhyUmVzdWx0IHJl
c3VsdCA9IHhyR2V0U3lzdGVtKG1faW1wbC0+bV9pbnN0YW5jZSwgJnN5c3RlbUdldEluZm8sICZz
eXN0ZW1JZCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdURkxv
Z0Fsd2F5cygieHJHZXRTeXN0ZW0oKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3Vs
dCwgbV9pbXBsLT5tX2luc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8gZGV2aWNlID0gbWFrZVVuaXF1ZTxEZXZpY2U+KCk7Ci0gICAgYXV0
byBzZXNzaW9uTW9kZXMgPSBtX2ltcGwtPmNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoKmRl
dmljZSwgc3lzdGVtSWQpOwotICAgIGlmIChzZXNzaW9uTW9kZXMpIHsKLSAgICAgICAgZm9yIChh
dXRvJiBtb2RlIDogc2Vzc2lvbk1vZGVzLnZhbHVlKCkpIHsKLSAgICAgICAgICAgIC8vIFRPRE86
IGZpbGwgaW4gZmVhdHVyZXMKLSAgICAgICAgICAgIGRldmljZS0+c2V0RW5hYmxlZEZlYXR1cmVz
KG1vZGUsIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2ltbWVyc2l2ZVhSRGV2aWNl
cy5hcHBlbmQoV1RGTW92ZShkZXZpY2UpKTsKLSNlbmRpZiAvLyBVU0VfT1BFTlhSCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhS
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhS
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZWQyYmE1NGMzNDBkYWM5ZTkzMGY3NzQ5NzljOTQ0OGU3NTk1MDdk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1Bs
YXRmb3JtWFJPcGVuWFIuY3BwCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVhST3BlblhSLmgiCisKKyNpZiBFTkFCTEUoV0VCWFIpCisKKyNpZiBVU0VfT1BFTlhSCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjZW5kaWYgLy8g
VVNFX09QRU5YUgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2Ug
UGxhdGZvcm1YUiB7CisKKyNpZiBVU0VfT1BFTlhSCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFhy
U3RydWN0dXJlVHlwZSBTdHJ1Y3R1cmVUeXBlPgorVCBjcmVhdGVTdHJ1Y3R1cmUoKQoreworICAg
IFQgb2JqZWN0OworICAgIHN0ZDo6bWVtc2V0KCZvYmplY3QsIDAsIHNpemVvZihUKSk7CisgICAg
b2JqZWN0LnR5cGUgPSBTdHJ1Y3R1cmVUeXBlOworICAgIG9iamVjdC5uZXh0ID0gbnVsbHB0cjsK
KyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJSZXN1bHQg
dmFsdWUsIFhySW5zdGFuY2UgaW5zdGFuY2UpCit7CisgICAgY2hhciBidWZmZXJbWFJfTUFYX1JF
U1VMVF9TVFJJTkdfU0laRV07CisgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJSZXN1bHRUb1N0cmlu
ZyhpbnN0YW5jZSwgdmFsdWUsIGJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdCA9PSBYUl9TVUNDRVNT
KQorICAgICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlcik7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
Ijx1bmtub3duICIsIGludCh2YWx1ZSksICI+Iik7Cit9CisKKyNkZWZpbmUgUkVUVVJOX0lGX0ZB
SUxFRChyZXN1bHQsIGNhbGwsIGluc3RhbmNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChYUl9GQUlMRUQocmVzdWx0KSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXMgJXM6ICVzXG4iLCBfX2Z1
bmNfXywgY2FsbCwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEo
KSk7IFwKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbmRpZiAvLyBV
U0VfT1BFTlhSCisKK3N0cnVjdCBJbnN0YW5jZTo6SW1wbCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgSW1wbCgpOworICAgIH5JbXBsKCk7CisKKyNpZiBVU0Vf
T1BFTlhSCisgICAgT3B0aW9uYWw8VmVjdG9yPFNlc3Npb25Nb2RlPj4gY29sbGVjdFN1cHBvcnRl
ZFNlc3Npb25Nb2RlcyhPcGVuWFJEZXZpY2UmKTsKKyAgICBYckluc3RhbmNlIG1faW5zdGFuY2Ug
eyBYUl9OVUxMX0hBTkRMRSB9OworI2VuZGlmIC8vIFVTRV9PUEVOWFIKK307CisKK0luc3RhbmNl
OjpJbXBsOjpJbXBsKCkKK3sKKyNpZiBVU0VfT1BFTlhSCisgICAgV1RGTG9nQWx3YXlzKCJPcGVu
WFI6IGluaXRpYWxpemluZ1xuIik7CisKKyAgICBbJl0geworICAgICAgICB1aW50MzJfdCBwcm9w
ZXJ0eUNvdW50T3V0cHV0IHsgMCB9OworICAgICAgICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1l
cmF0ZUFwaUxheWVyUHJvcGVydGllcygwLCAmcHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0cik7
CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJhdGVBcGlMYXllclBy
b3BlcnRpZXMoKSIsIG1faW5zdGFuY2UpOworCisgICAgICAgIGlmICghcHJvcGVydHlDb3VudE91
dHB1dCkgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZUFwaUxheWVyUHJv
cGVydGllcygpOiBubyBwcm9wZXJ0aWVzXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIFZlY3RvcjxYckFwaUxheWVyUHJvcGVydGllcz4gcHJvcGVydGllcyhw
cm9wZXJ0eUNvdW50T3V0cHV0KTsKKyAgICAgICAgcmVzdWx0ID0geHJFbnVtZXJhdGVBcGlMYXll
clByb3BlcnRpZXMocHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0ciwgcHJvcGVydGllcy5kYXRh
KCkpOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlQXBpTGF5
ZXJQcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKKworICAgICAgICBXVEZMb2dBbHdheXMoInhy
RW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVzKCk6ICV6dSBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0
aWVzLnNpemUoKSk7CisgICAgfSgpOworCisgICAgWyZdIHsKKyAgICAgICAgdWludDMyX3QgcHJv
cGVydHlDb3VudE91dHB1dCB7IDAgfTsKKyAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVt
ZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMobnVsbHB0ciwgMCwgJnByb3BlcnR5Q291
bnRPdXRwdXQsIG51bGxwdHIpOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhy
RW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKKwor
ICAgICAgICBpZiAoIXByb3BlcnR5Q291bnRPdXRwdXQpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fs
d2F5cygieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKTogbm8gcHJvcGVy
dGllc1xuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBWZWN0
b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKHByb3BlcnR5Q291bnRPdXRwdXQs
CisgICAgICAgICAgICBbXSB7CisgICAgICAgICAgICAgICAgWHJFeHRlbnNpb25Qcm9wZXJ0aWVz
IG9iamVjdDsKKyAgICAgICAgICAgICAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2Yo
WHJFeHRlbnNpb25Qcm9wZXJ0aWVzKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LnR5cGUgPSBY
Ul9UWVBFX0VYVEVOU0lPTl9QUk9QRVJUSUVTOworICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgICAgICAgICB9KCkpOworICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUNvdW50V3Jp
dHRlbiB7IDAgfTsKKyAgICAgICAgcmVzdWx0ID0geHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lv
blByb3BlcnRpZXMobnVsbHB0ciwgcHJvcGVydHlDb3VudE91dHB1dCwgJnByb3BlcnR5Q291bnRX
cml0dGVuLCBwcm9wZXJ0aWVzLmRhdGEoKSk7CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVz
dWx0LCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSIsIG1faW5zdGFu
Y2UpOworCisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lv
blByb3BlcnRpZXMoKTogJXp1IGV4dGVuc2lvbiBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0aWVzLnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0aWVzKSB7CisgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIiAgZXh0ZW5zaW9uICclcycsIHZlcnNpb24gJXVcbiIsCisg
ICAgICAgICAgICAgICAgcHJvcGVydHkuZXh0ZW5zaW9uTmFtZSwgcHJvcGVydHkuZXh0ZW5zaW9u
VmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9KCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c19hcHBsaWNhdGlvbk5hbWUgPSAiV2ViWFIgKFdlYktpdCkiOworICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBzX2FwcGxpY2F0aW9uVmVyc2lvbiA9IDE7CisKKyAgICB7CisgICAgICAgIGF1dG8g
Y3JlYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckluc3RhbmNlQ3JlYXRlSW5mbywgWFJfVFlQ
RV9JTlNUQU5DRV9DUkVBVEVfSU5GTz4oKTsKKyAgICAgICAgY3JlYXRlSW5mby5jcmVhdGVGbGFn
cyA9IDA7CisgICAgICAgIHN0ZDo6bWVtY3B5KGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZvLmFw
cGxpY2F0aW9uTmFtZSwgc19hcHBsaWNhdGlvbk5hbWUsIFhSX01BWF9BUFBMSUNBVElPTl9OQU1F
X1NJWkUpOworICAgICAgICBjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcGlWZXJzaW9uID0g
WFJfQ1VSUkVOVF9BUElfVkVSU0lPTjsKKyAgICAgICAgY3JlYXRlSW5mby5hcHBsaWNhdGlvbklu
Zm8uYXBwbGljYXRpb25WZXJzaW9uID0gc19hcHBsaWNhdGlvblZlcnNpb247CisgICAgICAgIGNy
ZWF0ZUluZm8uZW5hYmxlZEFwaUxheWVyQ291bnQgPSAwOworICAgICAgICBjcmVhdGVJbmZvLmVu
YWJsZWRFeHRlbnNpb25Db3VudCA9IDA7CisKKyAgICAgICAgWHJJbnN0YW5jZSBpbnN0YW5jZTsK
KyAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJDcmVhdGVJbnN0YW5jZSgmY3JlYXRlSW5mbywg
Jmluc3RhbmNlKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckNyZWF0ZUlu
c3RhbmNlKCkiLCBtX2luc3RhbmNlKTsKKworICAgICAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7
CisgICAgICAgIFdURkxvZ0Fsd2F5cygieHJDcmVhdGVJbnN0YW5jZSgpOiB1c2luZyBpbnN0YW5j
ZSAlcFxuIiwgbV9pbnN0YW5jZSk7CisgICAgfQorI2VuZGlmIC8vIFVTRV9PUEVOWFIKK30KKwor
SW5zdGFuY2U6OkltcGw6On5JbXBsKCkKK3sKKyAgICB4ckRlc3Ryb3lJbnN0YW5jZShtX2luc3Rh
bmNlKTsKK30KKworI2lmIFVTRV9PUEVOWFIKKworT3B0aW9uYWw8VmVjdG9yPFNlc3Npb25Nb2Rl
Pj4gSW5zdGFuY2U6OkltcGw6OmNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoT3BlblhSRGV2
aWNlJiBkZXZpY2UpCit7CisgICAgdWludDMyX3Qgdmlld0NvbmZpZ3VyYXRpb25Db3VudDsKKyAg
ICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9ucyhtX2luc3Rh
bmNlLCBkZXZpY2UueHJTeXN0ZW1JZCgpLCAwLCAmdmlld0NvbmZpZ3VyYXRpb25Db3VudCwgbnVs
bHB0cik7CisgICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNTKSB7CisgICAgICAgIFdURkxvZ0Fs
d2F5cygieHJFbnVtZXJhdGVWaWV3Q29uZmlndXJhdGlvbnMoKTogZXJyb3IgJXNcbiIsIHJlc3Vs
dFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUg
dmlld0NvbmZpZ3VyYXRpb25zW3ZpZXdDb25maWd1cmF0aW9uQ291bnRdOworICAgIHJlc3VsdCA9
IHhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKG1faW5zdGFuY2UsIGRldmljZS54clN5c3Rl
bUlkKCksIHZpZXdDb25maWd1cmF0aW9uQ291bnQsICZ2aWV3Q29uZmlndXJhdGlvbkNvdW50LCB2
aWV3Q29uZmlndXJhdGlvbnMpOworICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykgeworICAg
ICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKCk6IGVycm9y
ICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKCk6
IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3Rv
cjxTZXNzaW9uTW9kZT4gc3VwcG9ydGVkTW9kZXM7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IHZpZXdDb25maWd1cmF0aW9uQ291bnQ7ICsraSkgeworICAgICAgICBhdXRvIHZpZXdDb25m
aWd1cmF0aW9uUHJvcGVydGllcyA9IGNyZWF0ZVN0cnVjdHVyZTxYclZpZXdDb25maWd1cmF0aW9u
UHJvcGVydGllcywgWFJfVFlQRV9WSUVXX0NPTkZJR1VSQVRJT05fUFJPUEVSVElFUz4oKTsKKyAg
ICAgICAgcmVzdWx0ID0geHJHZXRWaWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMobV9pbnN0YW5j
ZSwgZGV2aWNlLnhyU3lzdGVtSWQoKSwgdmlld0NvbmZpZ3VyYXRpb25zW2ldLCAmdmlld0NvbmZp
Z3VyYXRpb25Qcm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBYUl9TVUNDRVNTKSB7
CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoInhyR2V0Vmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0
aWVzKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
fQorICAgICAgICBpZiAodmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1cmF0
aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk8pCisgICAg
ICAgICAgICBzdXBwb3J0ZWRNb2Rlcy5hcHBlbmQoU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyKTsK
KyAgICAgICAgZWxzZSBpZiAodmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1
cmF0aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX1NURVJFTykK
KyAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChTZXNzaW9uTW9kZTo6SW1tZXJzaXZl
VnIpOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydGVkTW9kZXM7Cit9CisKKyNlbmRpZiAvLyBV
U0VfT1BFTlhSCisKK0luc3RhbmNlJiBJbnN0YW5jZTo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPEluc3RhbmNlPiBzX2luc3RhbmNlOworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBzX29uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNfb25jZUZsYWcs
CisgICAgICAgIFsmXSB7CisgICAgICAgICAgICBzX2luc3RhbmNlLT5tX2ltcGwgPSBtYWtlVW5p
cXVlPEltcGw+KCk7CisgICAgICAgIH0pOworICAgIHJldHVybiBzX2luc3RhbmNlLmdldCgpOwor
fQorCitJbnN0YW5jZTo6SW5zdGFuY2UoKSA9IGRlZmF1bHQ7CitJbnN0YW5jZTo6fkluc3RhbmNl
KCkgPSBkZWZhdWx0OworCit2b2lkIEluc3RhbmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmlj
ZXMoKQoreworI2lmIFVTRV9PUEVOWFIKKyAgICBpZiAobV9pbXBsLT5tX2luc3RhbmNlID09IFhS
X05VTExfSEFORExFKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXMgVW5hYmxlIHRvIGVudW1l
cmF0ZSBYUiBkZXZpY2VzLiBObyBYckluc3RhbmNlIHByZXNlbnRcbiIsIF9fRlVOQ1RJT05fXyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHN5c3RlbUdldEluZm8gPSBjcmVh
dGVTdHJ1Y3R1cmU8WHJTeXN0ZW1HZXRJbmZvLCBYUl9UWVBFX1NZU1RFTV9HRVRfSU5GTz4oKTsK
KyAgICBzeXN0ZW1HZXRJbmZvLmZvcm1GYWN0b3IgPSBYUl9GT1JNX0ZBQ1RPUl9IRUFEX01PVU5U
RURfRElTUExBWTsKKworICAgIFhyU3lzdGVtSWQgc3lzdGVtSWQ7CisgICAgWHJSZXN1bHQgcmVz
dWx0ID0geHJHZXRTeXN0ZW0obV9pbXBsLT5tX2luc3RhbmNlLCAmc3lzdGVtR2V0SW5mbywgJnN5
c3RlbUlkKTsKKyAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NFU1MpIHsKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJ4ckdldFN5c3RlbSgpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0
LCBtX2ltcGwtPm1faW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBkZXZpY2UgPSBtYWtlVW5pcXVlPE9wZW5YUkRldmljZT4oKTsKKyAg
ICBkZXZpY2UtPnNldFhyU3lzdGVtSWQoc3lzdGVtSWQpOworICAgIGF1dG8gc2Vzc2lvbk1vZGVz
ID0gbV9pbXBsLT5jb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKCpkZXZpY2UpOworICAgIGlm
IChzZXNzaW9uTW9kZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtb2RlIDogc2Vzc2lvbk1vZGVz
LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IGZpbGwgaW4gZmVhdHVyZXMKKyAgICAg
ICAgICAgIGRldmljZS0+c2V0RW5hYmxlZEZlYXR1cmVzKG1vZGUsIHsgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX2ltbWVyc2l2ZVhSRGV2aWNlcy5hcHBlbmQoV1RGTW92ZShkZXZpY2Up
KTsKKyNlbmRpZiAvLyBVU0VfT1BFTlhSCit9CisKK30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJYUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NzA4ODM4MDlk
N2JjNmMyYTcwNmYyYmQyMjJiMThiMmM3MGE3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhLCBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCWFIpCisjaW5jbHVkZSAiUGxhdGZvcm1YUi5oIgorCisjaWYgVVNF
X09QRU5YUgorI2luY2x1ZGUgPG9wZW54ci9vcGVueHIuaD4KKworbmFtZXNwYWNlIFBsYXRmb3Jt
WFIgeworCisvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuWFIvc3BlY3Mv
MS4wL2h0bWwveHJzcGVjLmh0bWwjc3lzdGVtCisvLyBBIHN5c3RlbSByZXByZXNlbnRzIGEgY29s
bGVjdGlvbiBvZiByZWxhdGVkIGRldmljZXMgaW4gdGhlIHJ1bnRpbWUsIG9mdGVuIG1hZGUgdXAg
b2Ygc2V2ZXJhbCBpbmRpdmlkdWFsCisvLyBoYXJkd2FyZSBjb21wb25lbnRzIHdvcmtpbmcgdG9n
ZXRoZXIgdG8gZW5hYmxlIFhSIGV4cGVyaWVuY2VzLgorLy8KKy8vIFdlYlhSIHRhbGtzIGFib3V0
IFhSIGRldmljZXMsIGlzIGEgcGh5c2ljYWwgdW5pdCBvZiBoYXJkd2FyZSB0aGF0IGNhbiBwcmVz
ZW50IGltYWdlcnkgdG8gdGhlIHVzZXIsIHNvCisvLyB0aGVyZSBpcyBub3QgZGlyZWN0IGNvcnJl
c3BvbmRlbmNlIGJldHdlZW4gYW4gT3BlblhSIHN5c3RlbSBhbmQgYSBXZWJYUiBkZXZpY2UgYmVj
YXVzZSB0aGUgc3lzdGVtIEFQSQorLy8gaXMgYW4gYWJzdHJhY3Rpb24gZm9yIGEgY29sbGVjdGlv
biBvZiBkZXZpY2VzIHdoaWxlIHRoZSBXZWJYUiBkZXZpY2UgaXMgbW9zdGx5IG9uZSBwaHlzaWNh
bCB1bml0LAorLy8gdXN1YWxseSBhbiBITUQgb3IgYSBwaG9uZS90YWJsZXQuCisvLworLy8gSXQn
cyBpbXBvcnRhbnQgYWxzbyBub3QgdG8gdHJ5IHRvIGFzc29jaWF0ZSBPcGVuWFIgc3lzdGVtIHdp
dGggV2ViWFIncyBYUlN5c3RlbSBiZWNhdXNlIHRoZXkncmUgdG90YWxseQorLy8gZGlmZmVyZW50
IGNvbmNlcHRzLiBUaGUgc3lzdGVtIGluIE9wZW5YUiB3YXMgZGVmaW5lZCBhYm92ZSBhcyBhIGNv
bGxlY3Rpb24gb2YgcmVsYXRlZCBkZXZpY2VzLiBJbiBXZWJYUiwKKy8vIHRoZSBYUlN5c3RlbSBp
cyBiYXNpY2FsbHkgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgV2ViWFIgQVBJIGF2YWlsYWJsZSB2
aWEgdGhlIE5hdmlnYXRvciBvYmplY3QuCitjbGFzcyBPcGVuWFJEZXZpY2UgZmluYWwgOiBwdWJs
aWMgRGV2aWNlIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldFhyU3lzdGVtSWQoWHJTeXN0ZW1JZCBp
ZCkgeyBtX3N5c3RlbUlkID0gaWQ7IH0KKyAgICBYclN5c3RlbUlkIHhyU3lzdGVtSWQoKSBjb25z
dCB7IHJldHVybiBtX3N5c3RlbUlkOyB9Citwcml2YXRlOgorICAgIFhyU3lzdGVtSWQgbV9zeXN0
ZW1JZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIFVTRV9P
UEVOWFIKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpCg==
</data>
<flag name="review"
          id="416536"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
      

    </bug>

</bugzilla>