<?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>224931</bug_id>
          
          <creation_ts>2021-04-22 07:58:56 -0700</creation_ts>
          <short_desc>Implement OpenXR input sources</short_desc>
          <delta_ts>2021-05-24 09:07:42 -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>WebXR</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>
          
          <blocked>208988</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Imanol Fernandez">ifernandez</reporter>
          <assigned_to name="Imanol Fernandez">ifernandez</assigned_to>
          <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1753166</commentid>
    <comment_count>0</comment_count>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-04-22 07:58:56 -0700</bug_when>
    <thetext>Now that bug 223257 has landed we can add the OpenXR platform implementation for input sources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753174</commentid>
    <comment_count>1</comment_count>
      <attachid>426814</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-04-22 08:32:35 -0700</bug_when>
    <thetext>Created attachment 426814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753573</commentid>
    <comment_count>2</comment_count>
      <attachid>426904</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-04-23 07:32:01 -0700</bug_when>
    <thetext>Created attachment 426904
Patch

Fix compilation error in debug builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755380</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-29 07:59:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/77321283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759769</commentid>
    <comment_count>4</comment_count>
      <attachid>426904</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-05-13 12:01:04 -0700</bug_when>
    <thetext>Comment on attachment 426904
Patch

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

Looking great.

&gt; Source/WebCore/ChangeLog:42
&gt; +        (PlatformXR::XrPoseIdentity): Creates a identify pose.

identify-&gt;identity

&gt; Source/WebCore/Sources.txt:2200
&gt; +platform/xr/openxr/OpenXRInputSource.cpp @no-unify

Not for this patch, but as the feature matures we should think about removing the @no-unify at some point and get the benefit of unified builds.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.cpp:52
&gt; +        m_handleIndex++;

Does 0 have any special meaning or can it be freely used as handle index.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.cpp:54
&gt; +        if (inputSource)

You can instead do

if (auto inputSource = OpenXRInputSource::create(m_instance, m_session, handeness, m_handleIndex))

&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.h:39
&gt; +    OpenXRInput(XrInstance, XrSession, XrSpace);

I guess the constructor should be private.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:98
&gt; +    const OpenXRProfileId* profileIds { nullptr };

Why not using a Vector?. Same for the other fields

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:110
&gt; +

It&apos;s unfortunate to have all this specific stuff for one device, i.e., it isn&apos;t scalable to include here every single device profile. Isn&apos;t there any library providing those (or any other generic mechanism)?

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:34
&gt; +    return input;

We can even use a ternary operator here

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:39
&gt; +    if (m_actionSet != XR_NULL_HANDLE)

We can do it in a followup patch but we should definitely add a isXrNullHandle() (or similar) method to the OpenXRUtils header and replace all those comparisons.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:52
&gt; +    m_handle = handle;

I prefer to have these initializations in the constructor.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:59
&gt; +    String prefix = &quot;input_&quot; + handenessName;

Doesn&apos;t those special prefixes/suffixes have a name defined in OpenXR? If not, maybe it does make sense to define some constexpr for them.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:96
&gt; +        RETURN_RESULT_IF_FAILED(createBinding(profile.path, m_pointerAction, m_subactionPathName + &quot;/input/aim/pose&quot;, bindings), m_instance);

Ditto, using constexpr for the strings

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:158
&gt; +        return WTF::nullopt; // Trigger is mandatory in xr-standard mapping

Move the comment above the if.

BTW comments must have a full stop at the end.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:211
&gt; +            for (size_t i = 0; i &lt; profile.profileIdsSize; ++i)

for (auto profileId : profile.profileIds)

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:223
&gt; +    ASSERT(space);

Knowing that it cannot be null, we better pass a reference here.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:235
&gt; +    ASSERT(action);

Ditto reference.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:249
&gt; +    ASSERT(actions);

Ditto.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:280
&gt; +    ASSERT(pose);

Ditto

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:337
&gt; +    ASSERT(value);

Ditto

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:352
&gt; +    ASSERT(value);

Ditto

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:367
&gt; +    ASSERT(value);

Ditto.

&gt; Source/WebCore/platform/xr/openxr/OpenXRUtils.h:130
&gt; +    case XRHandedness::Right: return &quot;right&quot;;

Nit: I think the returns should be in a different line

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:586
&gt; +    if (!didNotifyInputInitialization) {

Better invert the condition and early return. That way we could save an indentation level

&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:590
&gt; +            fprintf(stderr, &quot;OpenXRDevice::updateInteractionProfile6 \n&quot;);

Remove debug code or use LOG() instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761894</commentid>
    <comment_count>5</comment_count>
      <attachid>429155</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-05-20 04:11:20 -0700</bug_when>
    <thetext>Created attachment 429155
Patch

Address review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761895</commentid>
    <comment_count>6</comment_count>
      <attachid>426904</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-05-20 04:12:10 -0700</bug_when>
    <thetext>Comment on attachment 426904
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:42
&gt;&gt; +        (PlatformXR::XrPoseIdentity): Creates a identify pose.
&gt; 
&gt; identify-&gt;identity

done

&gt;&gt; Source/WebCore/Sources.txt:2200
&gt;&gt; +platform/xr/openxr/OpenXRInputSource.cpp @no-unify
&gt; 
&gt; Not for this patch, but as the feature matures we should think about removing the @no-unify at some point and get the benefit of unified builds.

makes sense, I&apos;ll address it as a follow-up

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.cpp:54
&gt;&gt; +        if (inputSource)
&gt; 
&gt; You can instead do
&gt; 
&gt; if (auto inputSource = OpenXRInputSource::create(m_instance, m_session, handeness, m_handleIndex))

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.h:39
&gt;&gt; +    OpenXRInput(XrInstance, XrSession, XrSpace);
&gt; 
&gt; I guess the constructor should be private.

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:98
&gt;&gt; +    const OpenXRProfileId* profileIds { nullptr };
&gt; 
&gt; Why not using a Vector?. Same for the other fields

Vector doesn&apos;t support constexpr. I&apos;m trying to define a constexpr with all the available bindings in a declarative way.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:110
&gt;&gt; +
&gt; 
&gt; It&apos;s unfortunate to have all this specific stuff for one device, i.e., it isn&apos;t scalable to include here every single device profile. Isn&apos;t there any library providing those (or any other generic mechanism)?

AFAIK there isn&apos;t any library or generic way, just the khr/simple_controller fallback, but only supports a limited subset of controller buttons. Chromium is also definining bindings for each controller they want to have full support of.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:34
&gt;&gt; +    return input;
&gt; 
&gt; We can even use a ternary operator here

unique_ptr complains when using the ternary operator because of the deleted copy constructor will nullptr. I also tried with {} but didn&apos;t work either.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:39
&gt;&gt; +    if (m_actionSet != XR_NULL_HANDLE)
&gt; 
&gt; We can do it in a followup patch but we should definitely add a isXrNullHandle() (or similar) method to the OpenXRUtils header and replace all those comparisons.

Ok, I&apos;ll address that as a follow-up

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:52
&gt;&gt; +    m_handle = handle;
&gt; 
&gt; I prefer to have these initializations in the constructor.

Done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:59
&gt;&gt; +    String prefix = &quot;input_&quot; + handenessName;
&gt; 
&gt; Doesn&apos;t those special prefixes/suffixes have a name defined in OpenXR? If not, maybe it does make sense to define some constexpr for them.

I have created a constexpr as they are not defined in OpenXR constant.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:96
&gt;&gt; +        RETURN_RESULT_IF_FAILED(createBinding(profile.path, m_pointerAction, m_subactionPathName + &quot;/input/aim/pose&quot;, bindings), m_instance);
&gt; 
&gt; Ditto, using constexpr for the strings

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:158
&gt;&gt; +        return WTF::nullopt; // Trigger is mandatory in xr-standard mapping
&gt; 
&gt; Move the comment above the if.
&gt; 
&gt; BTW comments must have a full stop at the end.

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:223
&gt;&gt; +    ASSERT(space);
&gt; 
&gt; Knowing that it cannot be null, we better pass a reference here.

Done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:235
&gt;&gt; +    ASSERT(action);
&gt; 
&gt; Ditto reference.

Done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:280
&gt;&gt; +    ASSERT(pose);
&gt; 
&gt; Ditto

Done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:337
&gt;&gt; +    ASSERT(value);
&gt; 
&gt; Ditto

Done.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:352
&gt;&gt; +    ASSERT(value);
&gt; 
&gt; Ditto

Done.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:367
&gt;&gt; +    ASSERT(value);
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRUtils.h:130
&gt;&gt; +    case XRHandedness::Right: return &quot;right&quot;;
&gt; 
&gt; Nit: I think the returns should be in a different line

Done

&gt;&gt; Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp:590
&gt;&gt; +            fprintf(stderr, &quot;OpenXRDevice::updateInteractionProfile6 \n&quot;);
&gt; 
&gt; Remove debug code or use LOG() instead

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762427</commentid>
    <comment_count>7</comment_count>
      <attachid>429155</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-05-21 08:39:45 -0700</bug_when>
    <thetext>Comment on attachment 429155
Patch

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

Pretty happy with the patch. I have just a few comments on some stuff I didn&apos;t spot on the first review.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.cpp:82
&gt; +    Vector&lt;Device::FrameData::InputSource&gt; result;

Supernit for landing: move the declaration down to the place we first use it.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.h:40
&gt; +    Vector&lt;Device::FrameData::InputSource&gt; getInputSources(const XrFrameState&amp;) const;

Didn&apos;t spot this in this first pass but we don&apos;t usually use the &quot;get&quot; prefix for methods. This is not exactly a getter anyway as we&apos;re constructing it, so I&apos;d use another prefix like collect/construct/...

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:42
&gt; +constexpr std::array&lt;OpenXRButtonType, 7&gt; OpenXRButtonTypes {

This should be openXRButtonTypes. Alternatively if you want to preserve the capitalized &quot;O&quot; then prepend something like availableOpenXR..., validOpenXR..., supportedOpenXR... what

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:76
&gt; +constexpr std::array&lt;OpenXRAxisType, 2&gt; OpenXRAxisTypes {

Ditto openXRAxisTypes

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:133
&gt; +// Default fallback when thre isn&apos;t a specific controller binding.

Nit: thre -&gt; there

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:152
&gt; +constexpr std::array&lt;OpenXRInputProfile, 2&gt; OpenXRInputProfiles { HTCViveInputProfile, KHRSimpleInputProfile };

Ditto openXRInputProfiles

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:65
&gt; +    // Initialize Action Set

Nit: missing dot at the end. Same for the other comments.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:218
&gt; +        if (!strcmp(profile.path, buffer)) {

Can we use strncmp with writtenCount ?

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:244
&gt; +    createInfo.subactionPaths = &amp;m_subactionPath;

Why are you getting a reference here? Shouldn&apos;t be just m_subactionPath ?

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:273
&gt; +    if (it != bindings.end())

I guess we can do
if (auto it = bindings.find(profilePath); it != bindings.end())

since &quot;it&quot; is only used in this branch

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:303
&gt; +    if (actions.press != XR_NULL_HANDLE &amp;&amp; XR_SUCCEEDED(getActionState(actions.press, &amp;result.pressed)))

Looks like we can convert these tree if conditions into a lambda as they&apos;re basically doing the same with different arguments. Also the hasValue=true assignment could be moved into the lambda as well. We could call it getActionStateIfNotNull() for example.

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:321
&gt; +    return result;

return hasValue ? makeOptional(result) : WTF::nullopt;

&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:334
&gt; +    return WTF::nullopt;

I know it&apos;s a matter of taste but I think I prefer to do the failure return in the if block. Otherwise it looks like the &quot;normal&quot; flow is to return a null axis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763087</commentid>
    <comment_count>8</comment_count>
      <attachid>429521</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-05-24 04:14:45 -0700</bug_when>
    <thetext>Created attachment 429521
Patch

Address review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763091</commentid>
    <comment_count>9</comment_count>
      <attachid>429522</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-05-24 04:23:50 -0700</bug_when>
    <thetext>Created attachment 429522
Patch

Fix nits in OpenXRInput.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763092</commentid>
    <comment_count>10</comment_count>
      <attachid>429155</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-05-24 04:24:20 -0700</bug_when>
    <thetext>Comment on attachment 429155
Patch

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

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.cpp:82
&gt;&gt; +    Vector&lt;Device::FrameData::InputSource&gt; result;
&gt; 
&gt; Supernit for landing: move the declaration down to the place we first use it.

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInput.h:40
&gt;&gt; +    Vector&lt;Device::FrameData::InputSource&gt; getInputSources(const XrFrameState&amp;) const;
&gt; 
&gt; Didn&apos;t spot this in this first pass but we don&apos;t usually use the &quot;get&quot; prefix for methods. This is not exactly a getter anyway as we&apos;re constructing it, so I&apos;d use another prefix like collect/construct/...

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:42
&gt;&gt; +constexpr std::array&lt;OpenXRButtonType, 7&gt; OpenXRButtonTypes {
&gt; 
&gt; This should be openXRButtonTypes. Alternatively if you want to preserve the capitalized &quot;O&quot; then prepend something like availableOpenXR..., validOpenXR..., supportedOpenXR... what

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:76
&gt;&gt; +constexpr std::array&lt;OpenXRAxisType, 2&gt; OpenXRAxisTypes {
&gt; 
&gt; Ditto openXRAxisTypes

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:133
&gt;&gt; +// Default fallback when thre isn&apos;t a specific controller binding.
&gt; 
&gt; Nit: thre -&gt; there

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputMappings.h:152
&gt;&gt; +constexpr std::array&lt;OpenXRInputProfile, 2&gt; OpenXRInputProfiles { HTCViveInputProfile, KHRSimpleInputProfile };
&gt; 
&gt; Ditto openXRInputProfiles

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:65
&gt;&gt; +    // Initialize Action Set
&gt; 
&gt; Nit: missing dot at the end. Same for the other comments.

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:218
&gt;&gt; +        if (!strcmp(profile.path, buffer)) {
&gt; 
&gt; Can we use strncmp with writtenCount ?

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:244
&gt;&gt; +    createInfo.subactionPaths = &amp;m_subactionPath;
&gt; 
&gt; Why are you getting a reference here? Shouldn&apos;t be just m_subactionPath ?

It&apos;s because createInfo.subactionPaths expects a pointer to an array, and we are treating a single variable as a one sized array,

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:273
&gt;&gt; +    if (it != bindings.end())
&gt; 
&gt; I guess we can do
&gt; if (auto it = bindings.find(profilePath); it != bindings.end())
&gt; 
&gt; since &quot;it&quot; is only used in this branch

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:303
&gt;&gt; +    if (actions.press != XR_NULL_HANDLE &amp;&amp; XR_SUCCEEDED(getActionState(actions.press, &amp;result.pressed)))
&gt; 
&gt; Looks like we can convert these tree if conditions into a lambda as they&apos;re basically doing the same with different arguments. Also the hasValue=true assignment could be moved into the lambda as well. We could call it getActionStateIfNotNull() for example.

good idea, done.

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:321
&gt;&gt; +    return result;
&gt; 
&gt; return hasValue ? makeOptional(result) : WTF::nullopt;

done

&gt;&gt; Source/WebCore/platform/xr/openxr/OpenXRInputSource.cpp:334
&gt;&gt; +    return WTF::nullopt;
&gt; 
&gt; I know it&apos;s a matter of taste but I think I prefer to do the failure return in the if block. Otherwise it looks like the &quot;normal&quot; flow is to return a null axis.

Makes sense, done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763152</commentid>
    <comment_count>11</comment_count>
      <attachid>429522</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-05-24 09:02:44 -0700</bug_when>
    <thetext>Comment on attachment 429522
Patch

Nice! Looking forward to trying it locally</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763153</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-24 09:07:40 -0700</bug_when>
    <thetext>Committed r277954 (238081@main): &lt;https://commits.webkit.org/238081@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429522.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426814</attachid>
            <date>2021-04-22 08:32:35 -0700</date>
            <delta_ts>2021-04-23 07:31:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224931-20210422173234.patch</filename>
            <type>text/plain</type>
            <size>45371</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgwNjAwNGFiNGMyZTAw
ZDZjZTk2ODI5OGVlMWE5ZGM4YjE1NWNiOS4uZWMzNGRjNDU0Nzc0OTJkNjM3Njc3NDI2NzgyZDg5
ZGI0ODdjM2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBPcGVuWFIgaW5wdXQgc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDogQWRkIE9wZW5YUklucHV0IGFuZCBPcGVuWFJJ
bnB1dFNvdXJjZSBmaWxlcworCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmNwcDogRW50cnkgcG9pbnQgdG8gcXVlcnkgYW5kIHN5bmMgaW5wdXQgaW4gT3BlblhSLgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXQ6OmNyZWF0ZSk6CisgICAgICAgIChQbGF0
Zm9ybVhSOjpPcGVuWFJJbnB1dDo6T3BlblhSSW5wdXQpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5w
dXQ6OmdldElucHV0U291cmNlcyBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJ
bnB1dDo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5wdXQuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oOiBNYXBwaW5nIGRlZmluaXRpb24gZm9yIHN1cHBvcnRl
ZCBpbnB1dCBwcm9maWxlcy4KKyAgICAgICAgKFBsYXRmb3JtWFI6OmJ1dHRvblR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpheGlzVHlwZXRvU3RyaW5nKToKKworICAgICAgICAq
IHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHA6IEhhbmRsZXMgdHJhY2tp
bmcgYW5kIHN0YXR1cyBvZiBhIHNwZWNpZmljIGlucHV0IHNvdXJjZS4KKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNvdXJjZSk6CisgICAgICAgIChQbGF0Zm9y
bVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChQbGF0Zm9ybVhS
OjpPcGVuWFJJbnB1dFNvdXJjZTo6c3VnZ2VzdEJpbmRpbmdzIGNvbnN0KToKKyAgICAgICAgKFBs
YXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRJbnB1dFNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGVTcGFj
ZUFjdGlvbiBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6
Y3JlYXRlQWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291
cmNlOjpjcmVhdGVCdXR0b25BY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9w
ZW5YUklucHV0U291cmNlOjpjcmVhdGVCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24gY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEF4aXMgY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuaDogQWRkZWQuCisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6T3BlblhSSW5wdXRTb3VyY2UpOgorICAg
ICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmFjdGlvblNldCBjb25zdCk6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaDoKKyAgICAgICAgKFBs
YXRmb3JtWFI6OlhyUG9zZUlkZW50aXR5KTogQ3JlYXRlcyBhIGlkZW50aWZ5IHBvc2UuCisgICAg
ICAgIChQbGF0Zm9ybVhSOjpoYW5kZW5lc3NUb1N0cmluZyk6IENvbnZlcnQgZnJvbSBoYW5kZW5l
c3MgZW51bSB0byBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZv
cm1YUk9wZW5YUi5jcHA6IEhhbmRsZSBpbnB1dCBzb3VyY2VzIGluIHRoZSBPcGVuWFIgcmVuZGVy
IGxvb3AuCisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFj
a2luZ0FuZFJlbmRlcmluZyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJl
cXVlc3RGcmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnBvbGxFdmVu
dHMpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24pOgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmg6CisK
IDIwMjEtMDQtMjIgIEltYW5vbCBGZXJuYW5kZXogIDxpZmVybmFuZGV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgSW1wbGVtZW50IFdlYlhSIElucHV0IFNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MTRkNDlmYjk0NTFjYTA2ZjQ5YjUyYWM1YWJiZWNjZTM5MjU2OTJkZC4uNTNjNzFhM2E2YTQwNDZk
YWUxMmQwMmNkYjI3NzQ2NGMwNWMzYTM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxOTYsNiArMjE5
Niw4IEBAIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiBwbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJ
Q1UuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorcGxhdGZvcm0v
eHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBAbm8tdW5pZnkKK3BsYXRmb3JtL3hyL29wZW54ci9P
cGVuWFJJbnB1dFNvdXJjZS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
SW5zdGFuY2UuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lv
bnMuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkxheWVyLmNwcCBAbm8t
dW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2NDA1ZDBhMzYxZDFiY2U0MTBiMTQ4NGJkMWM5Nzg0MTBjMzYwNzZhLi5lYTAw
MjZlZDc4ZDgyNTBhMDhjZWNlYmNmMWNkNWZjYzk0MWVkMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02Mzg1LDYgKzYzODUs
MTEgQEAKIAkJMTE2M0Y4MjMyNEU1RDU5QjAwMEFCOTYwIC8qIFJlbmRlclRyZWVNdXRhdGlvbkRp
c2FsbG93ZWRTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlTXV0YXRpb25E
aXNhbGxvd2VkU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTY0OEI0
MTI2MEEzRjZDMDA0QUYxRjIgLyogSlNXZWJYUlJpZ2lkVHJhbnNmb3JtQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViWFJSaWdpZFRyYW5zZm9ybUN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExNjQ4QjQzMjYwQTNGNkMw
MDRBRjFGMiAvKiBKU1dlYlhSVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1dlYlhSVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTExODBGN0ZFMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTExODBGODAwMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1
dE1hcHBpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0TWFwcGluZ3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5Y
UklucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTExODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxMThCMDY4NjI1RTQxRTUxMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJFeHRlbnNpb25z
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE4QjA2ODgyNUU0MUU1MjAwNzBC
RTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3BlblhSRXh0ZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMThC
MDY4OTI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSSW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BlblhSSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjkxMTcsNiArMjkxMjIsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTExOEIwNjg2MjVFNDFFNTEwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25zLmNwcCAqLywK
IAkJCQkxMThCMDY4ODI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9ucy5oICovLAor
CQkJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAgKi8sCisJCQkJ
MTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5YUklucHV0LmggKi8sCisJCQkJMTE4MEY4
MDAyNjMxQ0Q5MjAwMDBFNjI0IC8qIE9wZW5YUklucHV0TWFwcGluZ3MuaCAqLywKKwkJCQkxMTgw
RjdGRTI2MzFDRDkyMDAwMEU2MjQgLyogT3BlblhSSW5wdXRTb3VyY2UuY3BwICovLAorCQkJCTEx
ODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5oICovLAogCQkJCTEx
OEIwNjg5MjVFNDFFNTIwMDcwQkU0QiAvKiBPcGVuWFJJbnN0YW5jZS5jcHAgKi8sCiAJCQkJMTE4
QjA2OEEyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUlV0aWxzLmggKi8sCiAJCQkJRTFDMUEzOUIy
NDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzIwMDExNTBiYWJhMWZiZGZlNWQ1ZGUxZmU2ZjM1YmRhYTgxMjc4NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisKKyNpZiBFTkFCTEUo
V0VCWFIpICYmIFVTRShPUEVOWFIpCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3VyY2UuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKworc3Rk
Ojp1bmlxdWVfcHRyPE9wZW5YUklucHV0PiBPcGVuWFJJbnB1dDo6Y3JlYXRlKFhySW5zdGFuY2Ug
aW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNlKQoreworICAgIGF1dG8g
aW5wdXQgPSBtYWtlVW5pcXVlPE9wZW5YUklucHV0PihpbnN0YW5jZSwgc2Vzc2lvbiwgc3BhY2Up
OworICAgIGlmIChYUl9GQUlMRUQoaW5wdXQtPmluaXRpYWxpemUoKSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBpbnB1dDsKK30KKworT3BlblhSSW5wdXQ6Ok9wZW5YUklu
cHV0KFhySW5zdGFuY2UgaW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNl
KQorICAgIDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQor
ICAgICwgbV9sb2NhbFNwYWNlKHNwYWNlKQoreworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dDo6
aW5pdGlhbGl6ZSgpCit7CisgICAgc3RkOjphcnJheTxYUkhhbmRlZG5lc3MsIDI+IGhhbmRzIHsK
KyAgICAgICAgWFJIYW5kZWRuZXNzOjpMZWZ0LCBYUkhhbmRlZG5lc3M6OlJpZ2h0CisgICAgfTsK
KworICAgIGZvciAoYXV0byBoYW5kZW5lc3MgOiBoYW5kcykgeworICAgICAgICBtX2hhbmRsZUlu
ZGV4Kys7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2UgPSBPcGVuWFJJbnB1dFNvdXJjZTo6Y3Jl
YXRlKG1faW5zdGFuY2UsIG1fc2Vzc2lvbiwgaGFuZGVuZXNzLCBtX2hhbmRsZUluZGV4KTsKKyAg
ICAgICAgaWYgKGlucHV0U291cmNlKQorICAgICAgICAgICAgbV9pbnB1dFNvdXJjZXMuYXBwZW5k
KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGlucHV0U291cmNlKSkp
OworICAgIH0KKworICAgIE9wZW5YUklucHV0U291cmNlOjpTdWdnZXN0ZWRCaW5kaW5ncyBiaW5k
aW5nczsKKyAgICBWZWN0b3I8WHJBY3Rpb25TZXQ+IGFjdGlvblNldHM7CisgICAgZm9yIChhdXRv
JiBpbnB1dCA6IG1faW5wdXRTb3VyY2VzKSB7CisgICAgICAgIGlucHV0LT5zdWdnZXN0QmluZGlu
Z3MoYmluZGluZ3MpOworICAgICAgICBhY3Rpb25TZXRzLmFwcGVuZChpbnB1dC0+YWN0aW9uU2V0
KCkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8mIGJpbmRpbmcgOiBiaW5kaW5ncykgewor
ICAgICAgICBhdXRvIHN1Z2dlc3RlZEJpbmRpbmcgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJJbnRlcmFj
dGlvblByb2ZpbGVTdWdnZXN0ZWRCaW5kaW5nLCBYUl9UWVBFX0lOVEVSQUNUSU9OX1BST0ZJTEVf
U1VHR0VTVEVEX0JJTkRJTkc+KCk7CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhy
U3RyaW5nVG9QYXRoKG1faW5zdGFuY2UsIGJpbmRpbmcua2V5LCAmc3VnZ2VzdGVkQmluZGluZy5p
bnRlcmFjdGlvblByb2ZpbGUpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgc3VnZ2VzdGVkQmluZGlu
Zy5jb3VudFN1Z2dlc3RlZEJpbmRpbmdzID0gYmluZGluZy52YWx1ZS5zaXplKCk7CisgICAgICAg
IHN1Z2dlc3RlZEJpbmRpbmcuc3VnZ2VzdGVkQmluZGluZ3MgPSBiaW5kaW5nLnZhbHVlLmRhdGEo
KTsKKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJTdWdnZXN0SW50ZXJhY3Rpb25Q
cm9maWxlQmluZGluZ3MobV9pbnN0YW5jZSwgJnN1Z2dlc3RlZEJpbmRpbmcpLCBtX2luc3RhbmNl
KTsKKyAgICB9CisKKyAgICBhdXRvIGF0dGFjaEluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTZXNz
aW9uQWN0aW9uU2V0c0F0dGFjaEluZm8sIFhSX1RZUEVfU0VTU0lPTl9BQ1RJT05fU0VUU19BVFRB
Q0hfSU5GTz4oKTsKKyAgICBhdHRhY2hJbmZvLmNvdW50QWN0aW9uU2V0cyA9IGFjdGlvblNldHMu
c2l6ZSgpOworICAgIGF0dGFjaEluZm8uYWN0aW9uU2V0cyA9IGFjdGlvblNldHMuZGF0YSgpOwor
ICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyQXR0YWNoU2Vzc2lvbkFjdGlvblNldHMobV9z
ZXNzaW9uLCAmYXR0YWNoSW5mbyksIG1faW5zdGFuY2UpOworCisgICAgcmV0dXJuIFhSX1NVQ0NF
U1M7Cit9CisKK1ZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IE9wZW5YUklu
cHV0OjpnZXRJbnB1dFNvdXJjZXMoY29uc3QgWHJGcmFtZVN0YXRlJiBmcmFtZVN0YXRlKSBjb25z
dAoreworICAgIFZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IHJlc3VsdDsK
KworICAgIFZlY3RvcjxYckFjdGl2ZUFjdGlvblNldD4gYWN0aW9uU2V0czsKKyAgICBmb3IgKGF1
dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMpCisgICAgICAgIGFjdGlvblNldHMuYXBwZW5kKFhy
QWN0aXZlQWN0aW9uU2V0IHsgaW5wdXQtPmFjdGlvblNldCgpLCBYUl9OVUxMX1BBVEggfSk7CisK
KyAgICBhdXRvIHN5bmNJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uc1N5bmNJbmZvLCBY
Ul9UWVBFX0FDVElPTlNfU1lOQ19JTkZPPigpOworICAgIHN5bmNJbmZvLmNvdW50QWN0aXZlQWN0
aW9uU2V0cyA9IGFjdGlvblNldHMuc2l6ZSgpOworICAgIHN5bmNJbmZvLmFjdGl2ZUFjdGlvblNl
dHMgPSBhY3Rpb25TZXRzLmRhdGEoKTsKKyAgICBSRVRVUk5fSUZfRkFJTEVEKHhyU3luY0FjdGlv
bnMobV9zZXNzaW9uLCAmc3luY0luZm8pLCAieHJTeW5jQWN0aW9ucyIsIG1faW5zdGFuY2UsIHJl
c3VsdCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMpIHsKKyAgICAg
ICAgaWYgKGF1dG8gZGF0YSA9IGlucHV0LT5nZXRJbnB1dFNvdXJjZShtX2xvY2FsU3BhY2UsIGZy
YW1lU3RhdGUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqZGF0YSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPcGVuWFJJbnB1dDo6dXBkYXRlSW50ZXJhY3Rp
b25Qcm9maWxlKCkKK3sKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMpCisg
ICAgICAgIGlucHV0LT51cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zY2QwYTcxMThjODlhY2Y0MWJiMzUzOTQ4ODRkMDczOTVhYjBlN2M3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEs
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKwor
I2luY2x1ZGUgIk9wZW5YUklucHV0TWFwcGluZ3MuaCIKKyNpbmNsdWRlICJPcGVuWFJVdGlscy5o
IgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK2NsYXNzIE9wZW5YUklucHV0U291cmNlOwor
CitjbGFzcyBPcGVuWFJJbnB1dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoT3BlblhSSW5wdXQpOworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXQ+IGNyZWF0ZShYckluc3RhbmNlLCBYclNlc3Npb24s
IFhyU3BhY2UpOworICAgIE9wZW5YUklucHV0KFhySW5zdGFuY2UsIFhyU2Vzc2lvbiwgWHJTcGFj
ZSk7CisKKyAgICBWZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiBnZXRJbnB1
dFNvdXJjZXMoY29uc3QgWHJGcmFtZVN0YXRlJikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVJbnRl
cmFjdGlvblByb2ZpbGUoKTsKKworcHJpdmF0ZToKKyAgICBYclJlc3VsdCBpbml0aWFsaXplKCk7
CisKKyAgICBYckluc3RhbmNlIG1faW5zdGFuY2UgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhy
U2Vzc2lvbiBtX3Nlc3Npb24geyBYUl9OVUxMX0hBTkRMRSB9OyAKKyAgICBYclNwYWNlIG1fbG9j
YWxTcGFjZSB7IFhSX05VTExfSEFORExFIH07CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxPcGVuWFJJ
bnB1dFNvdXJjZT4+IG1faW5wdXRTb3VyY2VzOworICAgIElucHV0U291cmNlSGFuZGxlIG1faGFu
ZGxlSW5kZXggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGluZ3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OTYzMWM2MzZkMTFjNDQyYmI1ZWJhMmYzNzE5Y2VlMDJmNGY1Y2U0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGlu
Z3MuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEs
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKwor
I2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgUGxhdGZvcm1YUiB7CisKK3VzaW5nIE9wZW5YUlByb2ZpbGVJZCA9IGNvbnN0IGNoYXIq
IGNvbnN0OwordXNpbmcgT3BlblhSQnV0dG9uUGF0aCA9IGNvbnN0IGNoYXIqIGNvbnN0OworCitl
bnVtIGNsYXNzIE9wZW5YUkJ1dHRvblR5cGUgeworICAgIFRyaWdnZXIsCisgICAgU3F1ZWV6ZSwK
KyAgICBUb3VjaHBhZCwKKyAgICBUaHVtYnN0aWNrLAorICAgIFRodW1icmVzdCwKKyAgICBCdXR0
b25BLAorICAgIEJ1dHRvbkIKK307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5YUkJ1dHRv
blR5cGUsIDc+IE9wZW5YUkJ1dHRvblR5cGVzIHsKKyAgICBPcGVuWFJCdXR0b25UeXBlOjpUcmln
Z2VyLCBPcGVuWFJCdXR0b25UeXBlOjpTcXVlZXplLCBPcGVuWFJCdXR0b25UeXBlOjpUb3VjaHBh
ZCwgT3BlblhSQnV0dG9uVHlwZTo6VGh1bWJzdGljaywgT3BlblhSQnV0dG9uVHlwZTo6VGh1bWJy
ZXN0LAorICAgIE9wZW5YUkJ1dHRvblR5cGU6OkJ1dHRvbkEsIE9wZW5YUkJ1dHRvblR5cGU6OkJ1
dHRvbkIKK307CisKK2lubGluZSBTdHJpbmcgYnV0dG9uVHlwZVRvU3RyaW5nKE9wZW5YUkJ1dHRv
blR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE9wZW5YUkJ1dHRv
blR5cGU6OlRyaWdnZXI6IHJldHVybiAidHJpZ2dlciI7CisgICAgY2FzZSBPcGVuWFJCdXR0b25U
eXBlOjpTcXVlZXplOiByZXR1cm4gInNxdWVlemUiOworICAgIGNhc2UgT3BlblhSQnV0dG9uVHlw
ZTo6VG91Y2hwYWQ6IHJldHVybiAidG91Y2hwYWQiOworICAgIGNhc2UgT3BlblhSQnV0dG9uVHlw
ZTo6VGh1bWJzdGljazogcmV0dXJuICJ0aHVtYnN0aWNrIjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRv
blR5cGU6OlRodW1icmVzdDogcmV0dXJuICJ0aHVtYnJlc3QiOworICAgIGNhc2UgT3BlblhSQnV0
dG9uVHlwZTo6QnV0dG9uQTogcmV0dXJuICJidXR0b25hIjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRv
blR5cGU6OkJ1dHRvbkI6IHJldHVybiAiYnV0dG9uYiI7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKwor
c3RydWN0IE9wZW5YUkJ1dHRvbiB7CisgICAgT3BlblhSQnV0dG9uVHlwZSB0eXBlOworICAgIE9w
ZW5YUkJ1dHRvblBhdGggcHJlc3MgeyBudWxscHRyIH07CisgICAgT3BlblhSQnV0dG9uUGF0aCB0
b3VjaCB7IG51bGxwdHIgfTsKKyAgICBPcGVuWFJCdXR0b25QYXRoIHZhbHVlIHsgbnVsbHB0ciB9
OworfTsKKworZW51bSBjbGFzcyBPcGVuWFJBeGlzVHlwZSB7CisgICAgVG91Y2hwYWQsCisgICAg
VGh1bWJzdGljaworfTsKKworY29uc3RleHByIHN0ZDo6YXJyYXk8T3BlblhSQXhpc1R5cGUsIDI+
IE9wZW5YUkF4aXNUeXBlcyB7CisgICAgT3BlblhSQXhpc1R5cGU6OlRvdWNocGFkLCBPcGVuWFJB
eGlzVHlwZTo6VGh1bWJzdGljaworfTsKKworaW5saW5lIFN0cmluZyBheGlzVHlwZXRvU3RyaW5n
KE9wZW5YUkF4aXNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBP
cGVuWFJBeGlzVHlwZTo6VG91Y2hwYWQ6IHJldHVybiAidG91Y2hwYWQiOworICAgIGNhc2UgT3Bl
blhSQXhpc1R5cGU6OlRodW1ic3RpY2s6IHJldHVybiAidGh1bWJzdGljayI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9Cit9CisKK3N0cnVjdCBPcGVuWFJBeGlzIHsKKyAgICBPcGVuWFJBeGlzVHlwZSB0eXBlOwor
ICAgIE9wZW5YUkJ1dHRvblBhdGggcGF0aDsKK307IAorCitzdHJ1Y3QgT3BlblhSSW5wdXRQcm9m
aWxlIHsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBwYXRoIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IE9wZW5YUlByb2ZpbGVJZCogcHJvZmlsZUlkcyB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgcHJv
ZmlsZUlkc1NpemUgeyAwIH07CisgICAgY29uc3QgT3BlblhSQnV0dG9uKiBsZWZ0QnV0dG9ucyB7
IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbGVmdEJ1dHRvbnNTaXplIHsgMCB9OworICAgIGNvbnN0
IE9wZW5YUkJ1dHRvbiogcmlnaHRCdXR0b25zIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCByaWdo
dEJ1dHRvbnNTaXplIHsgMCB9OworICAgIGNvbnN0IE9wZW5YUkF4aXMqIGF4ZXMgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IGF4ZXNTaXplIHsgMCB9OworfTsKKworLy8gaHR0cHM6Ly9naXRodWIu
Y29tL2ltbWVyc2l2ZS13ZWIvd2VieHItaW5wdXQtcHJvZmlsZXMvYmxvYi9tYXN0ZXIvcGFja2Fn
ZXMvcmVnaXN0cnkvcHJvZmlsZXMvaHRjL2h0Yy12aXZlLmpzb24KK2NvbnN0ZXhwciBzdGQ6OmFy
cmF5PE9wZW5YUlByb2ZpbGVJZCwgMj4gSFRDVml2ZVByb2ZpbGVJZHMgeyAiaHRjLXZpdmUiLCAi
Z2VuZXJpYy10cmlnZ2VyLXNxdWVlemUtdG91Y2hwYWQiIH07CisKK2NvbnN0ZXhwciBzdGQ6OmFy
cmF5PE9wZW5YUkJ1dHRvbiwgMz4gSFRDVml2ZUJ1dHRvbnMgeworICAgIE9wZW5YUkJ1dHRvbiB7
IC50eXBlID0gT3BlblhSQnV0dG9uVHlwZTo6VHJpZ2dlciwgLnByZXNzID0gIi9pbnB1dC90cmln
Z2VyL2NsaWNrIiwgLnZhbHVlID0gIi9pbnB1dC90cmlnZ2VyL3ZhbHVlIiB9LAorICAgIE9wZW5Y
UkJ1dHRvbiB7IC50eXBlID0gT3BlblhSQnV0dG9uVHlwZTo6U3F1ZWV6ZSwgLnByZXNzID0gIi9p
bnB1dC9zcXVlZXplL2NsaWNrIiB9LAorICAgIE9wZW5YUkJ1dHRvbiB7IC50eXBlID0gT3BlblhS
QnV0dG9uVHlwZTo6VG91Y2hwYWQsIC5wcmVzcyA9ICIvaW5wdXQvdHJhY2twYWQvY2xpY2siLCAu
dG91Y2ggPSAiL2lucHV0L3RyYWNrcGFkL3RvdWNoIiB9Cit9OworCitjb25zdGV4cHIgc3RkOjph
cnJheTxPcGVuWFJBeGlzLCAxPiBIVENWaXZlQXhlcyB7CisgICAgeyBPcGVuWFJBeGlzVHlwZTo6
VG91Y2hwYWQsICIvaW5wdXQvdHJhY2twYWQiIH0KK307CisKK2NvbnN0ZXhwciBPcGVuWFJJbnB1
dFByb2ZpbGUgSFRDVml2ZUlucHV0UHJvZmlsZSB7CisgICAgIi9pbnRlcmFjdGlvbl9wcm9maWxl
cy9odGMvdml2ZV9jb250cm9sbGVyIiwKKyAgICBIVENWaXZlUHJvZmlsZUlkcy5kYXRhKCksCisg
ICAgSFRDVml2ZVByb2ZpbGVJZHMuc2l6ZSgpLAorICAgIEhUQ1ZpdmVCdXR0b25zLmRhdGEoKSwK
KyAgICBIVENWaXZlQnV0dG9ucy5zaXplKCksCisgICAgSFRDVml2ZUJ1dHRvbnMuZGF0YSgpLAor
ICAgIEhUQ1ZpdmVCdXR0b25zLnNpemUoKSwKKyAgICBIVENWaXZlQXhlcy5kYXRhKCksCisgICAg
SFRDVml2ZUF4ZXMuc2l6ZSgpCit9OworCisvLyBEZWZhdWx0IGZhbGxiYWNrIHdoZW4gdGhyZSBp
c24ndCBhIHNwZWNpZmljIGNvbnRyb2xsZXIgYmluZGluZy4KK2NvbnN0ZXhwciBzdGQ6OmFycmF5
PGNvbnN0IGNoYXIqLCAxPiBLSFJTaW1wbGVQcm9maWxlSWRzIHsgImdlbmVyaWMtYnV0dG9uIiB9
OworCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJCdXR0b24sIDE+IEtIUlNpbXBsZUJ1dHRv
bnMgeworICAgIE9wZW5YUkJ1dHRvbiB7IC50eXBlID0gT3BlblhSQnV0dG9uVHlwZTo6VHJpZ2dl
ciwgLnByZXNzID0gIi9pbnB1dC9zZWxlY3QvY2xpY2siIH0KK307CisKK2NvbnN0ZXhwciBPcGVu
WFJJbnB1dFByb2ZpbGUgS0hSU2ltcGxlSW5wdXRQcm9maWxlIHsKKyAgICAiL2ludGVyYWN0aW9u
X3Byb2ZpbGVzL2toci9zaW1wbGVfY29udHJvbGxlciIsCisgICAgS0hSU2ltcGxlUHJvZmlsZUlk
cy5kYXRhKCksCisgICAgS0hSU2ltcGxlUHJvZmlsZUlkcy5zaXplKCksCisgICAgS0hSU2ltcGxl
QnV0dG9ucy5kYXRhKCksCisgICAgS0hSU2ltcGxlQnV0dG9ucy5zaXplKCksCisgICAgS0hSU2lt
cGxlQnV0dG9ucy5kYXRhKCksCisgICAgS0hSU2ltcGxlQnV0dG9ucy5zaXplKCksCisgICAgbnVs
bHB0ciwKKyAgICAwCit9OworCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJJbnB1dFByb2Zp
bGUsIDI+IE9wZW5YUklucHV0UHJvZmlsZXMgeyBIVENWaXZlSW5wdXRQcm9maWxlLCBLSFJTaW1w
bGVJbnB1dFByb2ZpbGUgfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODM0ODNkNWRhMGFmNThhYWQ0MTRkNzA1YWYxNzA0MjQ0ZDI1YjFiZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5j
cHAKQEAgLTAsMCArMSwzODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0U291cmNlLmgiCisK
KyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK3N0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJ
bnB1dFNvdXJjZT4gT3BlblhSSW5wdXRTb3VyY2U6OmNyZWF0ZShYckluc3RhbmNlIGluc3RhbmNl
LCBYclNlc3Npb24gc2Vzc2lvbiwgWFJIYW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VI
YW5kbGUgaGFuZGxlKQoreworICAgIGF1dG8gaW5wdXQgPSBtYWtlVW5pcXVlPE9wZW5YUklucHV0
U291cmNlPigpOworICAgIGlmIChYUl9GQUlMRUQoaW5wdXQtPmluaXRpYWxpemUoaW5zdGFuY2Us
IHNlc3Npb24sIGhhbmRlbmVzcywgaGFuZGxlKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBpbnB1dDsKK30KKworT3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNv
dXJjZSgpCit7CisgICAgaWYgKG1fYWN0aW9uU2V0ICE9IFhSX05VTExfSEFORExFKQorICAgICAg
ICB4ckRlc3Ryb3lBY3Rpb25TZXQobV9hY3Rpb25TZXQpOworICAgIGlmIChtX2dyaXBTcGFjZSAh
PSBYUl9OVUxMX0hBTkRMRSkKKyAgICAgICAgeHJEZXN0cm95U3BhY2UobV9ncmlwU3BhY2UpOwor
ICAgIGlmIChtX3BvaW50ZXJTcGFjZSAhPSBYUl9OVUxMX0hBTkRMRSkKKyAgICAgICAgeHJEZXN0
cm95U3BhY2UobV9wb2ludGVyU3BhY2UpOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJj
ZTo6aW5pdGlhbGl6ZShYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Npb24gc2Vzc2lvbiwgWFJI
YW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUgaGFuZGxlKQoreworICAgIG1f
aW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICBtX3Nlc3Npb24gPSBzZXNzaW9uOworICAgIG1faGFu
ZGVuZXNzID0gaGFuZGVuZXNzOworICAgIG1faGFuZGxlID0gaGFuZGxlOworCisgICAgU3RyaW5n
IGhhbmRlbmVzc05hbWUgPSBoYW5kZW5lc3NUb1N0cmluZyhoYW5kZW5lc3MpOworICAgIG1fc3Vi
YWN0aW9uUGF0aE5hbWUgPSAiL3VzZXIvaGFuZC8iICsgaGFuZGVuZXNzTmFtZTsKKyAgICBSRVRV
Uk5fUkVTVUxUX0lGX0ZBSUxFRCh4clN0cmluZ1RvUGF0aChtX2luc3RhbmNlLCBtX3N1YmFjdGlv
blBhdGhOYW1lLnV0ZjgoKS5kYXRhKCksICZtX3N1YmFjdGlvblBhdGgpLCBtX2luc3RhbmNlKTsK
KworICAgIC8vIEluaXRpYWxpemUgQWN0aW9uIFNldAorICAgIFN0cmluZyBwcmVmaXggPSAiaW5w
dXRfIiArIGhhbmRlbmVzc05hbWU7CisgICAgU3RyaW5nIGFjdGlvblNldE5hbWUgPSBwcmVmaXgg
KyAiX2FjdGlvbl9zZXQiOworICAgIGF1dG8gY3JlYXRlSW5mbyA9ICBjcmVhdGVTdHJ1Y3R1cmU8
WHJBY3Rpb25TZXRDcmVhdGVJbmZvLCBYUl9UWVBFX0FDVElPTl9TRVRfQ1JFQVRFX0lORk8+KCk7
CisgICAgc3RkOjpzdHJuY3B5KGNyZWF0ZUluZm8uYWN0aW9uU2V0TmFtZSwgYWN0aW9uU2V0TmFt
ZS51dGY4KCkuZGF0YSgpLCBYUl9NQVhfQUNUSU9OX1NFVF9OQU1FX1NJWkUgLSAxKTsKKyAgICBz
dGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5sb2NhbGl6ZWRBY3Rpb25TZXROYW1lLCBhY3Rpb25TZXRO
YW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOworCisg
ICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJDcmVhdGVBY3Rpb25TZXQobV9pbnN0YW5jZSwg
JmNyZWF0ZUluZm8sICZtX2FjdGlvblNldCksICJ4ckNyZWF0ZUFjdGlvblNldCIsIG1faW5zdGFu
Y2UpOworCisgICAgLy8gSW5pdGlhbGl6ZSBwb3NlIGFjdGlvbnMgYW5kIHNwYWNlcworICAgIFJF
VFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9QT1NFX0lO
UFVULCBwcmVmaXggKyAiX2dyaXAiLCAmbV9ncmlwQWN0aW9uKSwgImNyZWF0ZUFjdGlvbiIsIG1f
aW5zdGFuY2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZVNwYWNlQWN0aW9u
KG1fZ3JpcEFjdGlvbiwgJm1fZ3JpcFNwYWNlKSwgImNyZWF0ZVNwYWNlQWN0aW9uIiwgbV9pbnN0
YW5jZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElP
Tl9UWVBFX1BPU0VfSU5QVVQsIHByZWZpeCArICJfcG9pbnRlciIsICZtX3BvaW50ZXJBY3Rpb24p
LCAiY3JlYXRlQWN0aW9uIiwgbV9pbnN0YW5jZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlM
RUQoY3JlYXRlU3BhY2VBY3Rpb24obV9wb2ludGVyQWN0aW9uLCAmbV9wb2ludGVyU3BhY2UpLCAi
Y3JlYXRlU3BhY2VBY3Rpb24iLCBtX2luc3RhbmNlKTsKKworICAgIC8vIEluaXRpYWxpemUgYnV0
dG9uIGFjdGlvbnMKKyAgICBmb3IgKGF1dG8gYnV0dG9uVHlwZSA6IE9wZW5YUkJ1dHRvblR5cGVz
KSB7CisgICAgICAgIE9wZW5YUkJ1dHRvbkFjdGlvbnMgYWN0aW9uczsKKyAgICAgICAgY3JlYXRl
QnV0dG9uQWN0aW9ucyhidXR0b25UeXBlLCBwcmVmaXgsICZhY3Rpb25zKTsKKyAgICAgICAgbV9i
dXR0b25BY3Rpb25zLmFkZChidXR0b25UeXBlLCBhY3Rpb25zKTsKKyAgICB9CisKKyAgICAvLyBJ
bml0aWFsaXplIGF4ZXMKKyAgICBmb3IgKGF1dG8gYXhpc1R5cGUgOiBPcGVuWFJBeGlzVHlwZXMp
IHsKKyAgICAgICAgWHJBY3Rpb24gYXhpc0FjdGlvbiA9IFhSX05VTExfSEFORExFOworICAgICAg
ICBTdHJpbmcgbmFtZSA9IHByZWZpeCArICJfYXhpc18iICsgYXhpc1R5cGV0b1N0cmluZyhheGlz
VHlwZSk7CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUFjdGlvbihYUl9B
Q1RJT05fVFlQRV9WRUNUT1IyRl9JTlBVVCwgbmFtZSwgJmF4aXNBY3Rpb24pLCAiY3JlYXRlQWN0
aW9uIiwgbV9pbnN0YW5jZSwgZmFsc2UpOworICAgICAgICBtX2F4aXNBY3Rpb25zLmFkZChheGlz
VHlwZSwgYXhpc0FjdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisK
K1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpzdWdnZXN0QmluZGluZ3MoU3VnZ2VzdGVkQmlu
ZGluZ3MmIGJpbmRpbmdzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgcHJvZmlsZSA6IE9wZW5Y
UklucHV0UHJvZmlsZXMpIHsKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5kaW5nIGZvciBwb3NlIGFj
dGlvbnMKKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9m
aWxlLnBhdGgsIG1fZ3JpcEFjdGlvbiwgbV9zdWJhY3Rpb25QYXRoTmFtZSArICIvaW5wdXQvZ3Jp
cC9wb3NlIiwgYmluZGluZ3MpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgUkVUVVJOX1JFU1VMVF9J
Rl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIG1fcG9pbnRlckFjdGlvbiwgbV9z
dWJhY3Rpb25QYXRoTmFtZSArICIvaW5wdXQvYWltL3Bvc2UiLCBiaW5kaW5ncyksIG1faW5zdGFu
Y2UpOworCisgICAgICAgIC8vIFN1Z2dlc3QgYmluZGluZyBmb3IgYnV0dG9uIGFjdGlvbnMKKyAg
ICAgICAgY29uc3QgT3BlblhSQnV0dG9uKiBidXR0b25zOworICAgICAgICBzaXplX3QgYnV0dG9u
c1NpemU7CisgICAgICAgIGlmIChtX2hhbmRlbmVzcyA9PSBYUkhhbmRlZG5lc3M6OkxlZnQpIHsK
KyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9maWxlLmxlZnRCdXR0b25zOworICAgICAgICAgICAg
YnV0dG9uc1NpemUgPSBwcm9maWxlLmxlZnRCdXR0b25zU2l6ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9maWxlLnJpZ2h0QnV0dG9uczsKKyAgICAgICAgICAg
IGJ1dHRvbnNTaXplID0gcHJvZmlsZS5yaWdodEJ1dHRvbnNTaXplOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidXR0b25zU2l6ZTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBidXR0b24gPSBidXR0b25zW2ldOworICAgICAgICAgICAgY29uc3Qg
YXV0byYgYWN0aW9ucyA9IG1fYnV0dG9uQWN0aW9ucy5nZXQoYnV0dG9uLnR5cGUpOworICAgICAg
ICAgICAgaWYgKGJ1dHRvbi5wcmVzcykgeworICAgICAgICAgICAgICAgIEFTU0VSVChhY3Rpb25z
LnByZXNzICE9IFhSX05VTExfSEFORExFKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUkVTVUxU
X0lGX0ZBSUxFRChjcmVhdGVCaW5kaW5nKHByb2ZpbGUucGF0aCwgYWN0aW9ucy5wcmVzcywgbV9z
dWJhY3Rpb25QYXRoTmFtZSArIGJ1dHRvbi5wcmVzcywgYmluZGluZ3MpLCBtX2luc3RhbmNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChidXR0b24udG91Y2gpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoYWN0aW9ucy50b3VjaCAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBh
dGgsIGFjdGlvbnMudG91Y2gsIG1fc3ViYWN0aW9uUGF0aE5hbWUgKyBidXR0b24udG91Y2gsIGJp
bmRpbmdzKSwgbV9pbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnV0
dG9uLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGlvbnMudmFsdWUgIT0gWFJf
TlVMTF9IQU5ETEUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNy
ZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBhY3Rpb25zLnZhbHVlLCBtX3N1YmFjdGlvblBhdGhO
YW1lICsgYnV0dG9uLnZhbHVlLCBiaW5kaW5ncyksIG1faW5zdGFuY2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5kaW5nIGZvciBheGlzIGFjdGlv
bnMKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9maWxlLmF4ZXNTaXplOyArK2kp
IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGF4aXMgPSBwcm9maWxlLmF4ZXNbaV07CisgICAg
ICAgICAgICBhdXRvIGFjdGlvbiA9IG1fYXhpc0FjdGlvbnMuZ2V0KGF4aXMudHlwZSk7CisgICAg
ICAgICAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKyAgICAgICAgICAgIFJF
VFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBhY3Rpb24s
IG1fc3ViYWN0aW9uUGF0aE5hbWUgKyBheGlzLnBhdGgsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gWFJfU1VDQ0VTUzsKK30KKworT3B0aW9u
YWw8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0
SW5wdXRTb3VyY2UoWHJTcGFjZSBsb2NhbFNwYWNlLCBjb25zdCBYckZyYW1lU3RhdGUmIGZyYW1l
U3RhdGUpIGNvbnN0Cit7CisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlIGRhdGE7
CisgICAgZGF0YS5oYW5kZW5lc3MgPSBtX2hhbmRlbmVzczsKKyAgICBkYXRhLmhhbmRsZSA9IG1f
aGFuZGxlOworICAgIGRhdGEudGFyZ2V0UmF5TW9kZSA9IFhSVGFyZ2V0UmF5TW9kZTo6VHJhY2tl
ZFBvaW50ZXI7CisgICAgZGF0YS5wcm9maWxlcyA9IG1fcHJvZmlsZXM7CisKKyAgICAvLyBQb3Nl
IHRyYW5zZm9ybXMKKyAgICBnZXRQb3NlKG1fcG9pbnRlclNwYWNlLCBsb2NhbFNwYWNlLCBmcmFt
ZVN0YXRlLCAmZGF0YS5wb2ludGVyT3JpZ2luKTsKKyAgICBEZXZpY2U6OkZyYW1lRGF0YTo6SW5w
dXRTb3VyY2VQb3NlIGdyaXBQb3NlOworICAgIGlmIChYUl9TVUNDRUVERUQoZ2V0UG9zZShtX2dy
aXBTcGFjZSwgbG9jYWxTcGFjZSwgZnJhbWVTdGF0ZSwgJmdyaXBQb3NlKSkpCisgICAgICAgIGRh
dGEuZ3JpcE9yaWdpbiA9IGdyaXBQb3NlOworCisgICAgLy8gQnV0dG9ucworICAgIFZlY3RvcjxP
cHRpb25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0b24+PiBidXR0b25zOwor
ICAgIGZvciAoYXV0byYgdHlwZSA6IE9wZW5YUkJ1dHRvblR5cGVzKSAKKyAgICAgICAgYnV0dG9u
cy5hcHBlbmQoZ2V0QnV0dG9uKHR5cGUpKTsKKworICAgIGlmIChidXR0b25zLmlzRW1wdHkoKSB8
fCAhYnV0dG9ucy5maXJzdCgpLmhhc1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7IC8vIFRyaWdnZXIgaXMgbWFuZGF0b3J5IGluIHhyLXN0YW5kYXJkIG1hcHBpbmcKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnV0dG9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoYnV0dG9uc1tpXSkgeworICAgICAgICAgICAgZGF0YS5idXR0b25zLmFwcGVuZCgqYnV0dG9u
c1tpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBBZGQg
cGxhY2Vob2xkZXIgaWYgdGhlcmUgYXJlIG1vcmUgdmFsaWQgYnV0dG9ucyBpbiB0aGUgbGlzdAor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBidXR0b25zLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICBpZiAoYnV0dG9uc1tqXSkgeworICAgICAgICAgICAgICAgIGRhdGEuYnV0
dG9ucy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEF4ZXMKKyAgICBWZWN0b3I8T3B0aW9uYWw8WHJW
ZWN0b3IyZj4+IGF4ZXM7CisgICAgZm9yIChhdXRvJiB0eXBlIDogT3BlblhSQXhpc1R5cGVzKSAK
KyAgICAgICAgYXhlcy5hcHBlbmQoZ2V0QXhpcyh0eXBlKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGF4ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGF4ZXNbaV0pIHsKKyAg
ICAgICAgICAgIGRhdGEuYXhlcy5hcHBlbmQoYXhlc1tpXS0+eCk7CisgICAgICAgICAgICBkYXRh
LmF4ZXMuYXBwZW5kKGF4ZXNbaV0tPnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgLy8gQWRkIHBsYWNlaG9sZGVyIGlmIHRoZXJlIGFyZSBtb3JlIHZhbGlkIGF4
ZXMgaW4gdGhlIGxpc3QKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgYnV0dG9u
cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKGF4ZXNbal0pIHsKKyAgICAgICAgICAg
ICAgICBkYXRhLmF4ZXMuYXBwZW5kKDAuMGYpOworICAgICAgICAgICAgICAgIGRhdGEuYXhlcy5h
cHBlbmQoMC4wZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworWHJSZXN1bHQgT3BlblhSSW5w
dXRTb3VyY2U6OnVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgpCit7CisgICAgYXV0byBzdGF0ZSA9
IGNyZWF0ZVN0cnVjdHVyZTxYckludGVyYWN0aW9uUHJvZmlsZVN0YXRlLCBYUl9UWVBFX0lOVEVS
QUNUSU9OX1BST0ZJTEVfU1RBVEU+KCk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJH
ZXRDdXJyZW50SW50ZXJhY3Rpb25Qcm9maWxlKG1fc2Vzc2lvbiwgbV9zdWJhY3Rpb25QYXRoLCAm
c3RhdGUpLCBtX2luc3RhbmNlKTsKKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBidWZmZXJTaXpl
ID0gMTAwOyAKKyAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXplXTsKKyAgICB1aW50MzJfdCB3cml0
dGVuQ291bnQgPSAwOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyUGF0aFRvU3RyaW5n
KG1faW5zdGFuY2UsIHN0YXRlLmludGVyYWN0aW9uUHJvZmlsZSwgYnVmZmVyU2l6ZSwgJndyaXR0
ZW5Db3VudCwgYnVmZmVyKSwgbV9pbnN0YW5jZSk7CisKKyAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7
CisgICAgZm9yIChhdXRvJiBwcm9maWxlIDogT3BlblhSSW5wdXRQcm9maWxlcykgeworICAgICAg
ICBpZiAoIXN0cmNtcChwcm9maWxlLnBhdGgsIGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZS5wcm9maWxlSWRzU2l6ZTsgKytpKQorICAgICAgICAg
ICAgICAgIG1fcHJvZmlsZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgocHJvZmlsZS5wcm9maWxl
SWRzW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBYUl9TVUNDRVNTOworfQorCisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpjcmVh
dGVTcGFjZUFjdGlvbihYckFjdGlvbiBhY3Rpb24sIFhyU3BhY2UqIHNwYWNlKSBjb25zdAorewor
ICAgIEFTU0VSVChzcGFjZSk7CisgICAgCisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0ZVN0
cnVjdHVyZTxYckFjdGlvblNwYWNlQ3JlYXRlSW5mbywgWFJfVFlQRV9BQ1RJT05fU1BBQ0VfQ1JF
QVRFX0lORk8+KCk7CisgICAgY3JlYXRlSW5mby5hY3Rpb24gPSBhY3Rpb247CisgICAgY3JlYXRl
SW5mby5zdWJhY3Rpb25QYXRoID0gbV9zdWJhY3Rpb25QYXRoOworICAgIGNyZWF0ZUluZm8ucG9z
ZUluQWN0aW9uU3BhY2UgPSBYclBvc2VJZGVudGl0eSgpOworCisgICAgcmV0dXJuIHhyQ3JlYXRl
QWN0aW9uU3BhY2UobV9zZXNzaW9uLCAmY3JlYXRlSW5mbywgc3BhY2UpOworfQorCitYclJlc3Vs
dCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQWN0aW9uKFhyQWN0aW9uVHlwZSBhY3Rpb25UeXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFhyQWN0aW9uKiBhY3Rpb24pIGNvbnN0Cit7CisgICAgQVNT
RVJUKGFjdGlvbik7CisgICAgCisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0ZVN0cnVjdHVy
ZTxYckFjdGlvbkNyZWF0ZUluZm8sIFhSX1RZUEVfQUNUSU9OX0NSRUFURV9JTkZPPigpOworICAg
IGNyZWF0ZUluZm8uYWN0aW9uVHlwZSA9IGFjdGlvblR5cGU7CisgICAgY3JlYXRlSW5mby5jb3Vu
dFN1YmFjdGlvblBhdGhzID0gMTsKKyAgICBjcmVhdGVJbmZvLnN1YmFjdGlvblBhdGhzID0gJm1f
c3ViYWN0aW9uUGF0aDsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5hY3Rpb25OYW1lLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOworICAg
IHN0ZDo6c3RybmNweShjcmVhdGVJbmZvLmxvY2FsaXplZEFjdGlvbk5hbWUsIG5hbWUudXRmOCgp
LmRhdGEoKSwgWFJfTUFYX0FDVElPTl9TRVRfTkFNRV9TSVpFIC0gMSk7CisKKyAgICByZXR1cm4g
eHJDcmVhdGVBY3Rpb24obV9hY3Rpb25TZXQsICZjcmVhdGVJbmZvLCBhY3Rpb24pOworfQorCitY
clJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQnV0dG9uQWN0aW9ucyhPcGVuWFJCdXR0
b25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBPcGVuWFJCdXR0b25BY3Rpb25zKiBh
Y3Rpb25zKSBjb25zdAoreworICAgIEFTU0VSVChhY3Rpb25zKTsKKyAgICBhdXRvIG5hbWUgPSBw
cmVmaXggKyAiX2J1dHRvbl8iICsgYnV0dG9uVHlwZVRvU3RyaW5nKHR5cGUpOworCisgICAgUkVU
VVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX0JPT0xFQU5f
SU5QVVQsIG5hbWUgKyAiX3ByZXNzIiwgJmFjdGlvbnMtPnByZXNzKSwgbV9pbnN0YW5jZSk7Cisg
ICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX0JP
T0xFQU5fSU5QVVQsIG5hbWUgKyAiX3RvdWNoIiwgJmFjdGlvbnMtPnRvdWNoKSwgbV9pbnN0YW5j
ZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9U
WVBFX0ZMT0FUX0lOUFVULCBuYW1lICsgIl92YWx1ZSIsICZhY3Rpb25zLT52YWx1ZSksIG1faW5z
dGFuY2UpOworICAgIAorICAgIHJldHVybiBYUl9TVUNDRVNTOworfQorCitYclJlc3VsdCBPcGVu
WFJJbnB1dFNvdXJjZTo6Y3JlYXRlQmluZGluZyhjb25zdCBjaGFyKiBwcm9maWxlUGF0aCwgWHJB
Y3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIGJpbmRpbmdQYXRoLCBTdWdnZXN0ZWRCaW5kaW5n
cyYgYmluZGluZ3MpIGNvbnN0Cit7CisgICAgQVNTRVJUKHByb2ZpbGVQYXRoICE9IFhSX05VTExf
UEFUSCk7CisgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAgQVNTRVJU
KCFiaW5kaW5nUGF0aC5pc0VtcHR5KCkpOworCisgICAgWHJQYXRoIHBhdGggPSBYUl9OVUxMX1BB
VEg7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJTdHJpbmdUb1BhdGgobV9pbnN0YW5j
ZSwgYmluZGluZ1BhdGgudXRmOCgpLmRhdGEoKSwgJnBhdGgpLCBtX2luc3RhbmNlKTsKKworICAg
IFhyQWN0aW9uU3VnZ2VzdGVkQmluZGluZyBiaW5kaW5nIHsgYWN0aW9uLCBwYXRoIH07CisgICAg
YXV0byBpdCA9IGJpbmRpbmdzLmZpbmQocHJvZmlsZVBhdGgpOworICAgIGlmIChpdCAhPSBiaW5k
aW5ncy5lbmQoKSkKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChiaW5kaW5nKTsKKyAgICBlbHNl
CisgICAgICAgIGJpbmRpbmdzLmFkZChwcm9maWxlUGF0aCwgVmVjdG9yPFhyQWN0aW9uU3VnZ2Vz
dGVkQmluZGluZz4geyBiaW5kaW5nIH0pOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisK
K1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlKFhyU3BhY2Ugc3BhY2UsIFhyU3Bh
Y2UgYmFzZVNwYWNlLCBjb25zdCBYckZyYW1lU3RhdGUmIGZyYW1lU3RhdGUsIERldmljZTo6RnJh
bWVEYXRhOjpJbnB1dFNvdXJjZVBvc2UqIHBvc2UpIGNvbnN0Cit7CisgICAgQVNTRVJUKHBvc2Up
OworICAgIGF1dG8gbG9jYXRpb24gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTcGFjZUxvY2F0aW9uLCBY
Ul9UWVBFX1NQQUNFX0xPQ0FUSU9OPigpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhy
TG9jYXRlU3BhY2Uoc3BhY2UsIGJhc2VTcGFjZSwgZnJhbWVTdGF0ZS5wcmVkaWN0ZWREaXNwbGF5
VGltZSwgJmxvY2F0aW9uKSwgbV9pbnN0YW5jZSk7CisKKyAgICBpZiAobG9jYXRpb24ubG9jYXRp
b25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09SSUVOVEFUSU9OX1RSQUNLRURfQklUKQorICAg
ICAgICBwb3NlLT5wb3NlID0gWHJQb3NlZlRvUG9zZShsb2NhdGlvbi5wb3NlKTsKKyAgICBwb3Nl
LT5pc1Bvc2l0aW9uRW11bGF0ZWQgPSAhKGxvY2F0aW9uLmxvY2F0aW9uRmxhZ3MgJiBYUl9TUEFD
RV9MT0NBVElPTl9QT1NJVElPTl9WQUxJRF9CSVQpOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7
Cit9CisKK09wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJbnB1dFNvdXJjZUJ1dHRvbj4gT3Bl
blhSSW5wdXRTb3VyY2U6OmdldEJ1dHRvbihPcGVuWFJCdXR0b25UeXBlIGJ1dHRvblR5cGUpIGNv
bnN0Cit7CisgICAgYXV0byBpdCA9IG1fYnV0dG9uQWN0aW9ucy5maW5kKGJ1dHRvblR5cGUpOwor
ICAgIGlmIChpdCA9PSBtX2J1dHRvbkFjdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0b24gcmVz
dWx0OworICAgIGJvb2wgaGFzVmFsdWUgPSBmYWxzZTsKKyAgICBhdXRvJiBhY3Rpb25zID0gaXQt
PnZhbHVlOworCisgICAgaWYgKGFjdGlvbnMucHJlc3MgIT0gWFJfTlVMTF9IQU5ETEUgJiYgWFJf
U1VDQ0VFREVEKGdldEFjdGlvblN0YXRlKGFjdGlvbnMucHJlc3MsICZyZXN1bHQucHJlc3NlZCkp
KQorICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CisgICAgZWxzZQorICAgICAgICByZXN1bHQucHJl
c3NlZCA9IGZhbHNlOworCisgICAgaWYgKGFjdGlvbnMudG91Y2ggIT0gWFJfTlVMTF9IQU5ETEUg
JiYgWFJfU1VDQ0VFREVEKGdldEFjdGlvblN0YXRlKGFjdGlvbnMudG91Y2gsICZyZXN1bHQudG91
Y2hlZCkpKQorICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CisgICAgZWxzZQorICAgICAgICByZXN1
bHQudG91Y2hlZCA9IHJlc3VsdC5wcmVzc2VkOworCisgICAgaWYgKGFjdGlvbnMudmFsdWUgIT0g
WFJfTlVMTF9IQU5ETEUgJiYgWFJfU1VDQ0VFREVEKGdldEFjdGlvblN0YXRlKGFjdGlvbnMudmFs
dWUsICZyZXN1bHQucHJlc3NlZFZhbHVlKSkpCisgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTsKKyAg
ICBlbHNlCisgICAgICAgIHJlc3VsdC50b3VjaGVkID0gcmVzdWx0LnByZXNzZWQgPyAxLjAgOiAw
LjA7CisKKyAgICBpZiAoIWhhc1ZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8WHJWZWN0b3IyZj4gT3BlblhSSW5w
dXRTb3VyY2U6OmdldEF4aXMoT3BlblhSQXhpc1R5cGUgYXhpc1R5cGUpIGNvbnN0Cit7CisgICAg
YXV0byBpdCA9IG1fYXhpc0FjdGlvbnMuZmluZChheGlzVHlwZSk7CisgICAgaWYgKGl0ID09IG1f
YXhpc0FjdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBY
clZlY3RvcjJmIGF4aXM7CisgICAgaWYgKFhSX1NVQ0NFRURFRChnZXRBY3Rpb25TdGF0ZShpdC0+
dmFsdWUsICZheGlzKSkpCisgICAgICAgIHJldHVybiBheGlzOworCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0YXRl
KFhyQWN0aW9uIGFjdGlvbiwgYm9vbCogdmFsdWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZhbHVl
KTsKKyAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKworICAgIGF1dG8gc3Rh
dGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUJvb2xlYW4sIFhSX1RZUEVfQUNUSU9O
X1NUQVRFX0JPT0xFQU4+KCk7CisgICAgYXV0byBpbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0
aW9uU3RhdGVHZXRJbmZvLCBYUl9UWVBFX0FDVElPTl9TVEFURV9HRVRfSU5GTz4oKTsKKyAgICBp
bmZvLmFjdGlvbiA9IGFjdGlvbjsKKworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyR2V0
QWN0aW9uU3RhdGVCb29sZWFuKG1fc2Vzc2lvbiwgJmluZm8sICZzdGF0ZSksIG1faW5zdGFuY2Up
OworICAgICp2YWx1ZSA9IHN0YXRlLmN1cnJlbnRTdGF0ZTsKKworICAgIHJldHVybiBYUl9TVUND
RVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QWN0aW9uU3RhdGUoWHJB
Y3Rpb24gYWN0aW9uLCBmbG9hdCogdmFsdWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZhbHVlKTsK
KyAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKworICAgIGF1dG8gc3RhdGUg
PSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUZsb2F0LCBYUl9UWVBFX0FDVElPTl9TVEFU
RV9GTE9BVD4oKTsKKyAgICBhdXRvIGluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0
ZUdldEluZm8sIFhSX1RZUEVfQUNUSU9OX1NUQVRFX0dFVF9JTkZPPigpOworICAgIGluZm8uYWN0
aW9uID0gYWN0aW9uOworCisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJHZXRBY3Rpb25T
dGF0ZUZsb2F0KG1fc2Vzc2lvbiwgJmluZm8sICZzdGF0ZSksIG1faW5zdGFuY2UpOworICAgICp2
YWx1ZSA9IHN0YXRlLmN1cnJlbnRTdGF0ZTsKKworICAgIHJldHVybiBYUl9TVUNDRVNTOworfQor
CitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24gYWN0
aW9uLCBYclZlY3RvcjJmKiB2YWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAg
IEFTU0VSVChhY3Rpb24gIT0gWFJfTlVMTF9IQU5ETEUpOworCisgICAgYXV0byBzdGF0ZSA9IGNy
ZWF0ZVN0cnVjdHVyZTxYckFjdGlvblN0YXRlVmVjdG9yMmYsIFhSX1RZUEVfQUNUSU9OX1NUQVRF
X1ZFQ1RPUjJGPigpOworICAgIGF1dG8gaW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblN0
YXRlR2V0SW5mbywgWFJfVFlQRV9BQ1RJT05fU1RBVEVfR0VUX0lORk8+KCk7CisgICAgaW5mby5h
Y3Rpb24gPSBhY3Rpb247CisKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckdldEFjdGlv
blN0YXRlVmVjdG9yMmYobV9zZXNzaW9uLCAmaW5mbywgJnN0YXRlKSwgbV9pbnN0YW5jZSk7Cisg
ICAgKnZhbHVlID0gc3RhdGUuY3VycmVudFN0YXRlOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShXRUJY
UikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hy
L29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIv
b3BlbnhyL09wZW5YUklucHV0U291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZlYjg2NWY4MDFhNGI1MDdj
OTc3ZWM2Yzc1MWQ2ZjU3ZDIwYmNiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5oCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKKyNpbmNsdWRlICJPcGVuWFJJbnB1dE1h
cHBpbmdzLmgiCisjaW5jbHVkZSAiT3BlblhSVXRpbHMuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBsYXRmb3Jt
WFIgeworCitjbGFzcyBPcGVuWFJJbnB1dFNvdXJjZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BlblhSSW5wdXRTb3VyY2UpOworcHVi
bGljOgorICAgIHVzaW5nIFN1Z2dlc3RlZEJpbmRpbmdzID0gSGFzaE1hcDxjb25zdCBjaGFyKiwg
VmVjdG9yPFhyQWN0aW9uU3VnZ2VzdGVkQmluZGluZz4+OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8T3BlblhSSW5wdXRTb3VyY2U+IGNyZWF0ZShYckluc3RhbmNlLCBYclNlc3Npb24sIFhS
SGFuZGVkbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUpOworICAgIE9wZW5YUklucHV0U291cmNlKCkg
eyB9OworICAgIH5PcGVuWFJJbnB1dFNvdXJjZSgpOworCisgICAgWHJSZXN1bHQgc3VnZ2VzdEJp
bmRpbmdzKFN1Z2dlc3RlZEJpbmRpbmdzJikgY29uc3Q7CisgICAgT3B0aW9uYWw8RGV2aWNlOjpG
cmFtZURhdGE6OklucHV0U291cmNlPiBnZXRJbnB1dFNvdXJjZShYclNwYWNlLCBjb25zdCBYckZy
YW1lU3RhdGUmKSBjb25zdDsKKyAgICBYckFjdGlvblNldCBhY3Rpb25TZXQoKSBjb25zdCB7IHJl
dHVybiBtX2FjdGlvblNldDsgfQorICAgIFhyUmVzdWx0IHVwZGF0ZUludGVyYWN0aW9uUHJvZmls
ZSgpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBPcGVuWFJCdXR0b25BY3Rpb25zIHsKKyAgICAg
ICAgWHJBY3Rpb24gcHJlc3MgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgICAgICBYckFjdGlvbiB0
b3VjaCB7IFhSX05VTExfSEFORExFIH07CisgICAgICAgIFhyQWN0aW9uIHZhbHVlIHsgWFJfTlVM
TF9IQU5ETEUgfTsKKyAgICB9OworCisgICAgWHJSZXN1bHQgaW5pdGlhbGl6ZShYckluc3RhbmNl
LCBYclNlc3Npb24sIFhSSGFuZGVkbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUpOworICAgIFhyUmVz
dWx0IGNyZWF0ZVNwYWNlQWN0aW9uKFhyQWN0aW9uLCBYclNwYWNlKikgY29uc3Q7CisgICAgWHJS
ZXN1bHQgY3JlYXRlQWN0aW9uKFhyQWN0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBYckFj
dGlvbiopIGNvbnN0OworICAgIFhyUmVzdWx0IGNyZWF0ZUJ1dHRvbkFjdGlvbnMoT3BlblhSQnV0
dG9uVHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmaXgsIE9wZW5YUkJ1dHRvbkFjdGlvbnMqKSBjb25z
dDsKKyAgICBYclJlc3VsdCBjcmVhdGVCaW5kaW5nKGNvbnN0IGNoYXIqIHByb2ZpbGVQYXRoLCBY
ckFjdGlvbiwgY29uc3QgU3RyaW5nJiBiaW5kaW5nUGF0aCwgU3VnZ2VzdGVkQmluZGluZ3MmKSBj
b25zdDsKKworICAgIFhyUmVzdWx0IGdldFBvc2UoWHJTcGFjZSwgWHJTcGFjZSwgY29uc3QgWHJG
cmFtZVN0YXRlJiwgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlUG9zZSopIGNvbnN0Owor
ICAgIE9wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJbnB1dFNvdXJjZUJ1dHRvbj4gZ2V0QnV0
dG9uKE9wZW5YUkJ1dHRvblR5cGUpIGNvbnN0OworICAgIE9wdGlvbmFsPFhyVmVjdG9yMmY+IGdl
dEF4aXMoT3BlblhSQXhpc1R5cGUpIGNvbnN0OworICAgIFhyUmVzdWx0IGdldEFjdGlvblN0YXRl
KFhyQWN0aW9uLCBib29sKikgY29uc3Q7CisgICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJB
Y3Rpb24sIGZsb2F0KikgY29uc3Q7CisgICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJBY3Rp
b24sIFhyVmVjdG9yMmYqKSBjb25zdDsKKworICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhS
X05VTExfSEFORExFIH07CisgICAgWHJTZXNzaW9uIG1fc2Vzc2lvbiB7IFhSX05VTExfSEFORExF
IH07CisgICAgWFJIYW5kZWRuZXNzIG1faGFuZGVuZXNzIHsgWFJIYW5kZWRuZXNzOjpMZWZ0IH07
CisgICAgSW5wdXRTb3VyY2VIYW5kbGUgbV9oYW5kbGUgeyAwIH07CisgICAgU3RyaW5nIG1fc3Vi
YWN0aW9uUGF0aE5hbWU7CisgICAgWHJQYXRoIG1fc3ViYWN0aW9uUGF0aCB7IFhSX05VTExfUEFU
SCB9OworICAgIFhyQWN0aW9uU2V0IG1fYWN0aW9uU2V0IHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAg
ICBYckFjdGlvbiBtX2dyaXBBY3Rpb24geyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhyU3BhY2Ug
bV9ncmlwU3BhY2UgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhyQWN0aW9uIG1fcG9pbnRlckFj
dGlvbiB7IFhSX05VTExfSEFORExFIH07CisgICAgWHJTcGFjZSBtX3BvaW50ZXJTcGFjZSB7IFhS
X05VTExfSEFORExFIH07CisgICAgdXNpbmcgT3BlblhSQnV0dG9uQWN0aW9uc01hcCA9IEhhc2hN
YXA8T3BlblhSQnV0dG9uVHlwZSwgT3BlblhSQnV0dG9uQWN0aW9ucywgSW50SGFzaDxPcGVuWFJC
dXR0b25UeXBlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxPcGVuWFJCdXR0b25UeXBlPj47
CisgICAgT3BlblhSQnV0dG9uQWN0aW9uc01hcCBtX2J1dHRvbkFjdGlvbnM7CisgICAgdXNpbmcg
T3BlblhSQXhlc01hcCA9IEhhc2hNYXA8T3BlblhSQXhpc1R5cGUsIFhyQWN0aW9uLCBJbnRIYXNo
PE9wZW5YUkF4aXNUeXBlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxPcGVuWFJBeGlzVHlw
ZT4+OworICAgIE9wZW5YUkF4ZXNNYXAgbV9heGlzQWN0aW9uczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBtX3Byb2ZpbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUlV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaAppbmRleCA2MmM1Y2IxYTZiZDdmOGNhNDQxYTY0
NjBiZjdlOGI2NmM4OTBlNjdhLi5iYzdlNzc1OWM1M2MxNDJjNWExZmU2ZDUzN2IyMjQzNjgxNDYz
YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
VXRpbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRp
bHMuaApAQCAtNjQsMTAgKzY0LDIyIEBAIGlubGluZSBTdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJS
ZXN1bHQgdmFsdWUsIFhySW5zdGFuY2UgaW5zdGFuY2UpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmco
Ijx1bmtub3duICIsIGludCh2YWx1ZSksICI+Iik7CiB9CiAKLSNkZWZpbmUgUkVUVVJOX0lGX0ZB
SUxFRChyZXN1bHQsIGNhbGwsIGluc3RhbmNlLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgTE9HKFhSLCAiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgY2FsbCwgcmVz
dWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7IFwKLSAgICAgICAg
cmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxF
RChjYWxsLCBsYWJlbCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdXRvIHhyUmVzdWx0ID0gY2FsbDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFhSX0ZBSUxFRCh4clJlc3VsdCkpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBMT0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVuY19f
LCBsYWJlbCwgcmVzdWx0VG9TdHJpbmcoeHJSZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgp
KTsgICAgXAorICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfQorCisjZGVmaW5lIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNhbGwsIGluc3RhbmNlLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYXV0byB4clJlc3VsdCA9IGNhbGw7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChYUl9GQUlMRUQoeHJSZXN1
bHQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTE9HKFhSLCAi
JXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgI2NhbGwsIHJlc3VsdFRvU3RyaW5nKHhyUmVzdWx0LCBp
bnN0YW5jZSkudXRmOCgpLmRhdGEoKSwgX19WQV9BUkdTX18pOyAgIFwKKyAgICAgICAgICAgIHJl
dHVybiB4clJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0KIAogI2RlZmluZSBMT0dfSUZfRkFJTEVEKHJlc3VsdCwgY2FsbCwgaW5zdGFuY2UsIC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtOTEsNiAr
MTAzLDEzIEBAIGlubGluZSBEZXZpY2U6OkZyYW1lRGF0YTo6VmlldyB4clZpZXdUb1Bvc2UoWHJW
aWV3IHZpZXcpCiAgICAgcmV0dXJuIHBvc2U7CiB9CiAKK2lubGluZSBYclBvc2VmIFhyUG9zZUlk
ZW50aXR5KCkKK3sKKyAgICBYclBvc2VmIHBvc2U7CisgICAgcG9zZS5vcmllbnRhdGlvbi53ID0g
MS4wOworICAgIHJldHVybiBwb3NlOworfQorCiBpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlvblR5
cGUgdG9YclZpZXdDb25maWd1cmF0aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQogewogICAgIHN3
aXRjaCAobW9kZSkgewpAQCAtMTA0LDYgKzEyMywxNyBAQCBpbmxpbmUgWHJWaWV3Q29uZmlndXJh
dGlvblR5cGUgdG9YclZpZXdDb25maWd1cmF0aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQogICAg
IHJldHVybiBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk87CiB9CiAKK2lu
bGluZSBTdHJpbmcgaGFuZGVuZXNzVG9TdHJpbmcoWFJIYW5kZWRuZXNzIGhhbmRlbmVzcykKK3sK
KyAgICBzd2l0Y2ggKGhhbmRlbmVzcykgeworICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpMZWZ0OiBy
ZXR1cm4gImxlZnQiOworICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpSaWdodDogcmV0dXJuICJyaWdo
dCI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAiIjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcAppbmRleCBhNzkz
NmNjMjhjNThlZDYzOGI1YTlmNWJiNDMxY2NiZmQxMDRiNGRlLi40ZWRiZTFkMjM4YTg1NmJhODg2
MjU5MTE2NTEyN2NjYTc2NjBlNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCkBAIC0yMyw2ICsyMyw4IEBACiAj
aWYgRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQogCiAjaW5jbHVkZSAiT3BlblhSRXh0ZW5z
aW9ucy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisjaW5jbHVkZSAiT3BlblhSSW5wdXRT
b3VyY2UuaCIKIAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgpAQCAtMTM1LDYgKzEzNyw5IEBAIHZvaWQgT3BlblhSRGV2aWNlOjppbml0
aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUgbW9kZSkKICAgICAgICAgLy8g
Q3JlYXRlIHRoZSBkZWZhdWx0IHJlZmVyZW5jZSBzcGFjZXMKICAgICAgICAgbV9sb2NhbFNwYWNl
ID0gY3JlYXRlUmVmZXJlbmNlU3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfTE9DQUwpOwog
ICAgICAgICBtX3ZpZXdTcGFjZSA9IGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9T
UEFDRV9UWVBFX1ZJRVcpOworCisgICAgICAgIC8vIEluaXRpYWxpemUgaW5wdXQgdHJhY2tpbmcK
KyAgICAgICAgbV9pbnB1dCA9IE9wZW5YUklucHV0OjpjcmVhdGUobV9pbnN0YW5jZSwgbV9zZXNz
aW9uLCBtX2xvY2FsU3BhY2UpOwogICAgIH0pOwogfQogCkBAIC0yMzEsNiArMjM2LDEwIEBAIHZv
aWQgT3BlblhSRGV2aWNlOjpyZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1lQ2FsbGJhY2smJiBjYWxs
YmFjaykKICAgICAgICAgICAgICAgICBpZiAobGF5ZXJEYXRhKQogICAgICAgICAgICAgICAgICAg
ICBmcmFtZURhdGEubGF5ZXJzLmFkZChsYXllci5rZXksICpsYXllckRhdGEpOwogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobV9pbnB1dCkKKyAgICAgICAgICAgICAgICBmcmFtZURh
dGEuaW5wdXRTb3VyY2VzID0gbV9pbnB1dC0+Z2V0SW5wdXRTb3VyY2VzKG1fZnJhbWVTdGF0ZSk7
CisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mu
b3JnL3JlZ2lzdHJ5L09wZW5YUi9zcGVjcy8xLjAvbWFuL2h0bWwvWHJGcmFtZVN0YXRlLmh0bWwK
ICAgICAgICAgICAgIC8vIFdoZW4gc2hvdWxkUmVuZGVyIGlzIGZhbHNlIHRoZSBhcHBsaWNhdGlv
biBzaG91bGQgYXZvaWQgaGVhdnkgR1BVIHdvcmsgd2hlcmUgcG9zc2libGUsCkBAIC00NTQsNiAr
NDYzLDggQEAgdm9pZCBPcGVuWFJEZXZpY2U6OnBvbGxFdmVudHMoKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RBVEFfSU5URVJBQ1RJ
T05fUFJPRklMRV9DSEFOR0VEOgorICAgICAgICAgICAgdXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxl
KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RBVEFf
TUFJTl9TRVNTSU9OX1ZJU0lCSUxJVFlfQ0hBTkdFRF9FWFRYOgogICAgICAgICBjYXNlIFhSX1RZ
UEVfRVZFTlRfREFUQV9WSVNJQklMSVRZX01BU0tfQ0hBTkdFRF9LSFI6CiAgICAgICAgIGNhc2Ug
WFJfVFlQRV9FVkVOVF9EQVRBX1BFUkZfU0VUVElOR1NfRVhUOgpAQCAtNTAwLDYgKzUxMSw3IEBA
IHZvaWQgT3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24oKQogewogICAgIEFTU0VSVCgmUnVuTG9v
cDo6Y3VycmVudCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7CiAgICAgbV9sYXllcnMuY2xlYXIo
KTsKKyAgICBtX2lucHV0LnJlc2V0KCk7CiAgICAgaWYgKG1fc2Vzc2lvbiAhPSBYUl9OVUxMX0hB
TkRMRSkgewogICAgICAgICB4ckRlc3Ryb3lTZXNzaW9uKG1fc2Vzc2lvbik7CiAgICAgICAgIG1f
c2Vzc2lvbiA9IFhSX05VTExfSEFORExFOwpAQCAtNTY0LDYgKzU3NiwyNiBAQCB2b2lkIE9wZW5Y
UkRldmljZTo6dXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCkKICAgICB9CiB9CiAKK3ZvaWQgT3BlblhS
RGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKQoreworICAgIGlmICghbV9pbnB1dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dC0+dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxl
KCk7CisKKyAgICBpZiAoIWRpZE5vdGlmeUlucHV0SW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAg
ZGlkTm90aWZ5SW5wdXRJbml0aWFsaXphdGlvbiA9IHRydWU7CisgICAgICAgIGF1dG8gaW5wdXRT
b3VyY2VzID0gbV9pbnB1dC0+Z2V0SW5wdXRTb3VyY2VzKG1fZnJhbWVTdGF0ZSk7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBp
bnB1dFNvdXJjZXMgPSBXVEZNb3ZlKGlucHV0U291cmNlcyldKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIk9wZW5YUkRldmljZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlNiBcbiIpOworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBpZiAobV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCkKKyAg
ICAgICAgICAgICAgICBtX3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50LT5zZXNzaW9uRGlkSW5p
dGlhbGl6ZUlucHV0U291cmNlcyhXVEZNb3ZlKGlucHV0U291cmNlcykpOworICAgICAgICB9KTsK
KyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCmluZGV4IGE4NmQ1Yzk0OTMxNmE2ODY4MDA3
NGE0NzU2YWQ0YzMzYWE3OWE5YzkuLmNkYjYzNjZlOTE5NjMxYmFiNTZhOWE4ZTVhYzY1OWVhMTFl
OThhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0
Zm9ybVhST3BlblhSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1Bs
YXRmb3JtWFJPcGVuWFIuaApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFBsYXRmb3JtWFIg
ewogCiBjbGFzcyBPcGVuWFJFeHRlbnNpb25zOworY2xhc3MgT3BlblhSSW5wdXQ7CiAKIC8vIGh0
dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5YUi9zcGVjcy8xLjAvaHRtbC94cnNw
ZWMuaHRtbCNzeXN0ZW0KIC8vIEEgc3lzdGVtIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHJl
bGF0ZWQgZGV2aWNlcyBpbiB0aGUgcnVudGltZSwgb2Z0ZW4gbWFkZSB1cCBvZiBzZXZlcmFsIGlu
ZGl2aWR1YWwKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVNlc3Np
b25TdGF0ZUNoYW5nZSgpOwogICAgIHZvaWQgd2FpdFVudGlsU3RvcHBpbmcoKTsKICAgICB2b2lk
IHVwZGF0ZVN0YWdlUGFyYW1ldGVycygpOworICAgIHZvaWQgdXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKCk7CiAgICAgTGF5ZXJIYW5kbGUgZ2VuZXJhdGVMYXllckhhbmRsZSgpIHsgcmV0dXJuICsr
bV9oYW5kbGVJbmRleDsgfQogCiAgICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlOwpAQCAtOTMsNiAr
OTUsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxYclZpZXc+IG1fZnJhbWVWaWV3czsKICAgICBI
YXNoTWFwPExheWVySGFuZGxlLCBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSTGF5ZXI+PiBtX2xheWVy
czsKICAgICBMYXllckhhbmRsZSBtX2hhbmRsZUluZGV4IHsgMCB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxPcGVuWFJJbnB1dD4gbV9pbnB1dDsKKyAgICBib29sIGRpZE5vdGlmeUlucHV0SW5pdGlh
bGl6YXRpb24geyBmYWxzZSB9OwogCiAgICAgdXNpbmcgVmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0
aWVzTWFwID0gSGFzaE1hcDxYclZpZXdDb25maWd1cmF0aW9uVHlwZSwgWHJWaWV3Q29uZmlndXJh
dGlvblByb3BlcnRpZXMsIEludEhhc2g8WHJWaWV3Q29uZmlndXJhdGlvblR5cGU+LCBXVEY6OlN0
cm9uZ0VudW1IYXNoVHJhaXRzPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlPj47CiAgICAgVmlld0Nv
bmZpZ3VyYXRpb25Qcm9wZXJ0aWVzTWFwIG1fdmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426904</attachid>
            <date>2021-04-23 07:32:01 -0700</date>
            <delta_ts>2021-05-20 04:12:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224931-20210423163200.patch</filename>
            <type>text/plain</type>
            <size>45260</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgwNjAwNGFiNGMyZTAw
ZDZjZTk2ODI5OGVlMWE5ZGM4YjE1NWNiOS4uZWMzNGRjNDU0Nzc0OTJkNjM3Njc3NDI2NzgyZDg5
ZGI0ODdjM2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBPcGVuWFIgaW5wdXQgc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDogQWRkIE9wZW5YUklucHV0IGFuZCBPcGVuWFJJ
bnB1dFNvdXJjZSBmaWxlcworCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmNwcDogRW50cnkgcG9pbnQgdG8gcXVlcnkgYW5kIHN5bmMgaW5wdXQgaW4gT3BlblhSLgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXQ6OmNyZWF0ZSk6CisgICAgICAgIChQbGF0
Zm9ybVhSOjpPcGVuWFJJbnB1dDo6T3BlblhSSW5wdXQpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5w
dXQ6OmdldElucHV0U291cmNlcyBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJ
bnB1dDo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5wdXQuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oOiBNYXBwaW5nIGRlZmluaXRpb24gZm9yIHN1cHBvcnRl
ZCBpbnB1dCBwcm9maWxlcy4KKyAgICAgICAgKFBsYXRmb3JtWFI6OmJ1dHRvblR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpheGlzVHlwZXRvU3RyaW5nKToKKworICAgICAgICAq
IHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHA6IEhhbmRsZXMgdHJhY2tp
bmcgYW5kIHN0YXR1cyBvZiBhIHNwZWNpZmljIGlucHV0IHNvdXJjZS4KKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNvdXJjZSk6CisgICAgICAgIChQbGF0Zm9y
bVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChQbGF0Zm9ybVhS
OjpPcGVuWFJJbnB1dFNvdXJjZTo6c3VnZ2VzdEJpbmRpbmdzIGNvbnN0KToKKyAgICAgICAgKFBs
YXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRJbnB1dFNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGVTcGFj
ZUFjdGlvbiBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6
Y3JlYXRlQWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291
cmNlOjpjcmVhdGVCdXR0b25BY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9w
ZW5YUklucHV0U291cmNlOjpjcmVhdGVCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24gY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEF4aXMgY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuaDogQWRkZWQuCisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6T3BlblhSSW5wdXRTb3VyY2UpOgorICAg
ICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmFjdGlvblNldCBjb25zdCk6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaDoKKyAgICAgICAgKFBs
YXRmb3JtWFI6OlhyUG9zZUlkZW50aXR5KTogQ3JlYXRlcyBhIGlkZW50aWZ5IHBvc2UuCisgICAg
ICAgIChQbGF0Zm9ybVhSOjpoYW5kZW5lc3NUb1N0cmluZyk6IENvbnZlcnQgZnJvbSBoYW5kZW5l
c3MgZW51bSB0byBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZv
cm1YUk9wZW5YUi5jcHA6IEhhbmRsZSBpbnB1dCBzb3VyY2VzIGluIHRoZSBPcGVuWFIgcmVuZGVy
IGxvb3AuCisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFj
a2luZ0FuZFJlbmRlcmluZyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJl
cXVlc3RGcmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnBvbGxFdmVu
dHMpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24pOgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmg6CisK
IDIwMjEtMDQtMjIgIEltYW5vbCBGZXJuYW5kZXogIDxpZmVybmFuZGV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgSW1wbGVtZW50IFdlYlhSIElucHV0IFNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MTRkNDlmYjk0NTFjYTA2ZjQ5YjUyYWM1YWJiZWNjZTM5MjU2OTJkZC4uNTNjNzFhM2E2YTQwNDZk
YWUxMmQwMmNkYjI3NzQ2NGMwNWMzYTM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxOTYsNiArMjE5
Niw4IEBAIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiBwbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJ
Q1UuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorcGxhdGZvcm0v
eHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBAbm8tdW5pZnkKK3BsYXRmb3JtL3hyL29wZW54ci9P
cGVuWFJJbnB1dFNvdXJjZS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
SW5zdGFuY2UuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lv
bnMuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkxheWVyLmNwcCBAbm8t
dW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2NDA1ZDBhMzYxZDFiY2U0MTBiMTQ4NGJkMWM5Nzg0MTBjMzYwNzZhLi5lYTAw
MjZlZDc4ZDgyNTBhMDhjZWNlYmNmMWNkNWZjYzk0MWVkMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02Mzg1LDYgKzYzODUs
MTEgQEAKIAkJMTE2M0Y4MjMyNEU1RDU5QjAwMEFCOTYwIC8qIFJlbmRlclRyZWVNdXRhdGlvbkRp
c2FsbG93ZWRTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlTXV0YXRpb25E
aXNhbGxvd2VkU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTY0OEI0
MTI2MEEzRjZDMDA0QUYxRjIgLyogSlNXZWJYUlJpZ2lkVHJhbnNmb3JtQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViWFJSaWdpZFRyYW5zZm9ybUN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExNjQ4QjQzMjYwQTNGNkMw
MDRBRjFGMiAvKiBKU1dlYlhSVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1dlYlhSVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTExODBGN0ZFMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTExODBGODAwMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1
dE1hcHBpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0TWFwcGluZ3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5Y
UklucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTExODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxMThCMDY4NjI1RTQxRTUxMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJFeHRlbnNpb25z
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE4QjA2ODgyNUU0MUU1MjAwNzBC
RTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3BlblhSRXh0ZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMThC
MDY4OTI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSSW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BlblhSSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjkxMTcsNiArMjkxMjIsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTExOEIwNjg2MjVFNDFFNTEwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25zLmNwcCAqLywK
IAkJCQkxMThCMDY4ODI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9ucy5oICovLAor
CQkJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAgKi8sCisJCQkJ
MTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5YUklucHV0LmggKi8sCisJCQkJMTE4MEY4
MDAyNjMxQ0Q5MjAwMDBFNjI0IC8qIE9wZW5YUklucHV0TWFwcGluZ3MuaCAqLywKKwkJCQkxMTgw
RjdGRTI2MzFDRDkyMDAwMEU2MjQgLyogT3BlblhSSW5wdXRTb3VyY2UuY3BwICovLAorCQkJCTEx
ODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5oICovLAogCQkJCTEx
OEIwNjg5MjVFNDFFNTIwMDcwQkU0QiAvKiBPcGVuWFJJbnN0YW5jZS5jcHAgKi8sCiAJCQkJMTE4
QjA2OEEyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUlV0aWxzLmggKi8sCiAJCQkJRTFDMUEzOUIy
NDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzIwMDExNTBiYWJhMWZiZGZlNWQ1ZGUxZmU2ZjM1YmRhYTgxMjc4NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisKKyNpZiBFTkFCTEUo
V0VCWFIpICYmIFVTRShPUEVOWFIpCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3VyY2UuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKworc3Rk
Ojp1bmlxdWVfcHRyPE9wZW5YUklucHV0PiBPcGVuWFJJbnB1dDo6Y3JlYXRlKFhySW5zdGFuY2Ug
aW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNlKQoreworICAgIGF1dG8g
aW5wdXQgPSBtYWtlVW5pcXVlPE9wZW5YUklucHV0PihpbnN0YW5jZSwgc2Vzc2lvbiwgc3BhY2Up
OworICAgIGlmIChYUl9GQUlMRUQoaW5wdXQtPmluaXRpYWxpemUoKSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBpbnB1dDsKK30KKworT3BlblhSSW5wdXQ6Ok9wZW5YUklu
cHV0KFhySW5zdGFuY2UgaW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNl
KQorICAgIDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQor
ICAgICwgbV9sb2NhbFNwYWNlKHNwYWNlKQoreworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dDo6
aW5pdGlhbGl6ZSgpCit7CisgICAgc3RkOjphcnJheTxYUkhhbmRlZG5lc3MsIDI+IGhhbmRzIHsK
KyAgICAgICAgWFJIYW5kZWRuZXNzOjpMZWZ0LCBYUkhhbmRlZG5lc3M6OlJpZ2h0CisgICAgfTsK
KworICAgIGZvciAoYXV0byBoYW5kZW5lc3MgOiBoYW5kcykgeworICAgICAgICBtX2hhbmRsZUlu
ZGV4Kys7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2UgPSBPcGVuWFJJbnB1dFNvdXJjZTo6Y3Jl
YXRlKG1faW5zdGFuY2UsIG1fc2Vzc2lvbiwgaGFuZGVuZXNzLCBtX2hhbmRsZUluZGV4KTsKKyAg
ICAgICAgaWYgKGlucHV0U291cmNlKQorICAgICAgICAgICAgbV9pbnB1dFNvdXJjZXMuYXBwZW5k
KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGlucHV0U291cmNlKSkp
OworICAgIH0KKworICAgIE9wZW5YUklucHV0U291cmNlOjpTdWdnZXN0ZWRCaW5kaW5ncyBiaW5k
aW5nczsKKyAgICBWZWN0b3I8WHJBY3Rpb25TZXQ+IGFjdGlvblNldHM7CisgICAgZm9yIChhdXRv
JiBpbnB1dCA6IG1faW5wdXRTb3VyY2VzKSB7CisgICAgICAgIGlucHV0LT5zdWdnZXN0QmluZGlu
Z3MoYmluZGluZ3MpOworICAgICAgICBhY3Rpb25TZXRzLmFwcGVuZChpbnB1dC0+YWN0aW9uU2V0
KCkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8mIGJpbmRpbmcgOiBiaW5kaW5ncykgewor
ICAgICAgICBhdXRvIHN1Z2dlc3RlZEJpbmRpbmcgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJJbnRlcmFj
dGlvblByb2ZpbGVTdWdnZXN0ZWRCaW5kaW5nLCBYUl9UWVBFX0lOVEVSQUNUSU9OX1BST0ZJTEVf
U1VHR0VTVEVEX0JJTkRJTkc+KCk7CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhy
U3RyaW5nVG9QYXRoKG1faW5zdGFuY2UsIGJpbmRpbmcua2V5LCAmc3VnZ2VzdGVkQmluZGluZy5p
bnRlcmFjdGlvblByb2ZpbGUpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgc3VnZ2VzdGVkQmluZGlu
Zy5jb3VudFN1Z2dlc3RlZEJpbmRpbmdzID0gYmluZGluZy52YWx1ZS5zaXplKCk7CisgICAgICAg
IHN1Z2dlc3RlZEJpbmRpbmcuc3VnZ2VzdGVkQmluZGluZ3MgPSBiaW5kaW5nLnZhbHVlLmRhdGEo
KTsKKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJTdWdnZXN0SW50ZXJhY3Rpb25Q
cm9maWxlQmluZGluZ3MobV9pbnN0YW5jZSwgJnN1Z2dlc3RlZEJpbmRpbmcpLCBtX2luc3RhbmNl
KTsKKyAgICB9CisKKyAgICBhdXRvIGF0dGFjaEluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTZXNz
aW9uQWN0aW9uU2V0c0F0dGFjaEluZm8sIFhSX1RZUEVfU0VTU0lPTl9BQ1RJT05fU0VUU19BVFRB
Q0hfSU5GTz4oKTsKKyAgICBhdHRhY2hJbmZvLmNvdW50QWN0aW9uU2V0cyA9IGFjdGlvblNldHMu
c2l6ZSgpOworICAgIGF0dGFjaEluZm8uYWN0aW9uU2V0cyA9IGFjdGlvblNldHMuZGF0YSgpOwor
ICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyQXR0YWNoU2Vzc2lvbkFjdGlvblNldHMobV9z
ZXNzaW9uLCAmYXR0YWNoSW5mbyksIG1faW5zdGFuY2UpOworCisgICAgcmV0dXJuIFhSX1NVQ0NF
U1M7Cit9CisKK1ZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IE9wZW5YUklu
cHV0OjpnZXRJbnB1dFNvdXJjZXMoY29uc3QgWHJGcmFtZVN0YXRlJiBmcmFtZVN0YXRlKSBjb25z
dAoreworICAgIFZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IHJlc3VsdDsK
KworICAgIFZlY3RvcjxYckFjdGl2ZUFjdGlvblNldD4gYWN0aW9uU2V0czsKKyAgICBmb3IgKGF1
dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMpCisgICAgICAgIGFjdGlvblNldHMuYXBwZW5kKFhy
QWN0aXZlQWN0aW9uU2V0IHsgaW5wdXQtPmFjdGlvblNldCgpLCBYUl9OVUxMX1BBVEggfSk7CisK
KyAgICBhdXRvIHN5bmNJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uc1N5bmNJbmZvLCBY
Ul9UWVBFX0FDVElPTlNfU1lOQ19JTkZPPigpOworICAgIHN5bmNJbmZvLmNvdW50QWN0aXZlQWN0
aW9uU2V0cyA9IGFjdGlvblNldHMuc2l6ZSgpOworICAgIHN5bmNJbmZvLmFjdGl2ZUFjdGlvblNl
dHMgPSBhY3Rpb25TZXRzLmRhdGEoKTsKKyAgICBSRVRVUk5fSUZfRkFJTEVEKHhyU3luY0FjdGlv
bnMobV9zZXNzaW9uLCAmc3luY0luZm8pLCAieHJTeW5jQWN0aW9ucyIsIG1faW5zdGFuY2UsIHJl
c3VsdCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMpIHsKKyAgICAg
ICAgaWYgKGF1dG8gZGF0YSA9IGlucHV0LT5nZXRJbnB1dFNvdXJjZShtX2xvY2FsU3BhY2UsIGZy
YW1lU3RhdGUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqZGF0YSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPcGVuWFJJbnB1dDo6dXBkYXRlSW50ZXJhY3Rp
b25Qcm9maWxlKCkKK3sKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMpCisg
ICAgICAgIGlucHV0LT51cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zY2QwYTcxMThjODlhY2Y0MWJiMzUzOTQ4ODRkMDczOTVhYjBlN2M3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEs
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKwor
I2luY2x1ZGUgIk9wZW5YUklucHV0TWFwcGluZ3MuaCIKKyNpbmNsdWRlICJPcGVuWFJVdGlscy5o
IgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK2NsYXNzIE9wZW5YUklucHV0U291cmNlOwor
CitjbGFzcyBPcGVuWFJJbnB1dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoT3BlblhSSW5wdXQpOworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXQ+IGNyZWF0ZShYckluc3RhbmNlLCBYclNlc3Npb24s
IFhyU3BhY2UpOworICAgIE9wZW5YUklucHV0KFhySW5zdGFuY2UsIFhyU2Vzc2lvbiwgWHJTcGFj
ZSk7CisKKyAgICBWZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiBnZXRJbnB1
dFNvdXJjZXMoY29uc3QgWHJGcmFtZVN0YXRlJikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVJbnRl
cmFjdGlvblByb2ZpbGUoKTsKKworcHJpdmF0ZToKKyAgICBYclJlc3VsdCBpbml0aWFsaXplKCk7
CisKKyAgICBYckluc3RhbmNlIG1faW5zdGFuY2UgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhy
U2Vzc2lvbiBtX3Nlc3Npb24geyBYUl9OVUxMX0hBTkRMRSB9OyAKKyAgICBYclNwYWNlIG1fbG9j
YWxTcGFjZSB7IFhSX05VTExfSEFORExFIH07CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxPcGVuWFJJ
bnB1dFNvdXJjZT4+IG1faW5wdXRTb3VyY2VzOworICAgIElucHV0U291cmNlSGFuZGxlIG1faGFu
ZGxlSW5kZXggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGluZ3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OTYzMWM2MzZkMTFjNDQyYmI1ZWJhMmYzNzE5Y2VlMDJmNGY1Y2U0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGlu
Z3MuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEs
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKwor
I2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgUGxhdGZvcm1YUiB7CisKK3VzaW5nIE9wZW5YUlByb2ZpbGVJZCA9IGNvbnN0IGNoYXIq
IGNvbnN0OwordXNpbmcgT3BlblhSQnV0dG9uUGF0aCA9IGNvbnN0IGNoYXIqIGNvbnN0OworCitl
bnVtIGNsYXNzIE9wZW5YUkJ1dHRvblR5cGUgeworICAgIFRyaWdnZXIsCisgICAgU3F1ZWV6ZSwK
KyAgICBUb3VjaHBhZCwKKyAgICBUaHVtYnN0aWNrLAorICAgIFRodW1icmVzdCwKKyAgICBCdXR0
b25BLAorICAgIEJ1dHRvbkIKK307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5YUkJ1dHRv
blR5cGUsIDc+IE9wZW5YUkJ1dHRvblR5cGVzIHsKKyAgICBPcGVuWFJCdXR0b25UeXBlOjpUcmln
Z2VyLCBPcGVuWFJCdXR0b25UeXBlOjpTcXVlZXplLCBPcGVuWFJCdXR0b25UeXBlOjpUb3VjaHBh
ZCwgT3BlblhSQnV0dG9uVHlwZTo6VGh1bWJzdGljaywgT3BlblhSQnV0dG9uVHlwZTo6VGh1bWJy
ZXN0LAorICAgIE9wZW5YUkJ1dHRvblR5cGU6OkJ1dHRvbkEsIE9wZW5YUkJ1dHRvblR5cGU6OkJ1
dHRvbkIKK307CisKK2lubGluZSBTdHJpbmcgYnV0dG9uVHlwZVRvU3RyaW5nKE9wZW5YUkJ1dHRv
blR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE9wZW5YUkJ1dHRv
blR5cGU6OlRyaWdnZXI6IHJldHVybiAidHJpZ2dlciI7CisgICAgY2FzZSBPcGVuWFJCdXR0b25U
eXBlOjpTcXVlZXplOiByZXR1cm4gInNxdWVlemUiOworICAgIGNhc2UgT3BlblhSQnV0dG9uVHlw
ZTo6VG91Y2hwYWQ6IHJldHVybiAidG91Y2hwYWQiOworICAgIGNhc2UgT3BlblhSQnV0dG9uVHlw
ZTo6VGh1bWJzdGljazogcmV0dXJuICJ0aHVtYnN0aWNrIjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRv
blR5cGU6OlRodW1icmVzdDogcmV0dXJuICJ0aHVtYnJlc3QiOworICAgIGNhc2UgT3BlblhSQnV0
dG9uVHlwZTo6QnV0dG9uQTogcmV0dXJuICJidXR0b25hIjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRv
blR5cGU6OkJ1dHRvbkI6IHJldHVybiAiYnV0dG9uYiI7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKwor
c3RydWN0IE9wZW5YUkJ1dHRvbiB7CisgICAgT3BlblhSQnV0dG9uVHlwZSB0eXBlOworICAgIE9w
ZW5YUkJ1dHRvblBhdGggcHJlc3MgeyBudWxscHRyIH07CisgICAgT3BlblhSQnV0dG9uUGF0aCB0
b3VjaCB7IG51bGxwdHIgfTsKKyAgICBPcGVuWFJCdXR0b25QYXRoIHZhbHVlIHsgbnVsbHB0ciB9
OworfTsKKworZW51bSBjbGFzcyBPcGVuWFJBeGlzVHlwZSB7CisgICAgVG91Y2hwYWQsCisgICAg
VGh1bWJzdGljaworfTsKKworY29uc3RleHByIHN0ZDo6YXJyYXk8T3BlblhSQXhpc1R5cGUsIDI+
IE9wZW5YUkF4aXNUeXBlcyB7CisgICAgT3BlblhSQXhpc1R5cGU6OlRvdWNocGFkLCBPcGVuWFJB
eGlzVHlwZTo6VGh1bWJzdGljaworfTsKKworaW5saW5lIFN0cmluZyBheGlzVHlwZXRvU3RyaW5n
KE9wZW5YUkF4aXNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBP
cGVuWFJBeGlzVHlwZTo6VG91Y2hwYWQ6IHJldHVybiAidG91Y2hwYWQiOworICAgIGNhc2UgT3Bl
blhSQXhpc1R5cGU6OlRodW1ic3RpY2s6IHJldHVybiAidGh1bWJzdGljayI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9Cit9CisKK3N0cnVjdCBPcGVuWFJBeGlzIHsKKyAgICBPcGVuWFJBeGlzVHlwZSB0eXBlOwor
ICAgIE9wZW5YUkJ1dHRvblBhdGggcGF0aDsKK307IAorCitzdHJ1Y3QgT3BlblhSSW5wdXRQcm9m
aWxlIHsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBwYXRoIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IE9wZW5YUlByb2ZpbGVJZCogcHJvZmlsZUlkcyB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgcHJv
ZmlsZUlkc1NpemUgeyAwIH07CisgICAgY29uc3QgT3BlblhSQnV0dG9uKiBsZWZ0QnV0dG9ucyB7
IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbGVmdEJ1dHRvbnNTaXplIHsgMCB9OworICAgIGNvbnN0
IE9wZW5YUkJ1dHRvbiogcmlnaHRCdXR0b25zIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCByaWdo
dEJ1dHRvbnNTaXplIHsgMCB9OworICAgIGNvbnN0IE9wZW5YUkF4aXMqIGF4ZXMgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IGF4ZXNTaXplIHsgMCB9OworfTsKKworLy8gaHR0cHM6Ly9naXRodWIu
Y29tL2ltbWVyc2l2ZS13ZWIvd2VieHItaW5wdXQtcHJvZmlsZXMvYmxvYi9tYXN0ZXIvcGFja2Fn
ZXMvcmVnaXN0cnkvcHJvZmlsZXMvaHRjL2h0Yy12aXZlLmpzb24KK2NvbnN0ZXhwciBzdGQ6OmFy
cmF5PE9wZW5YUlByb2ZpbGVJZCwgMj4gSFRDVml2ZVByb2ZpbGVJZHMgeyAiaHRjLXZpdmUiLCAi
Z2VuZXJpYy10cmlnZ2VyLXNxdWVlemUtdG91Y2hwYWQiIH07CisKK2NvbnN0ZXhwciBzdGQ6OmFy
cmF5PE9wZW5YUkJ1dHRvbiwgMz4gSFRDVml2ZUJ1dHRvbnMgeworICAgIE9wZW5YUkJ1dHRvbiB7
IC50eXBlID0gT3BlblhSQnV0dG9uVHlwZTo6VHJpZ2dlciwgLnByZXNzID0gIi9pbnB1dC90cmln
Z2VyL2NsaWNrIiwgLnZhbHVlID0gIi9pbnB1dC90cmlnZ2VyL3ZhbHVlIiB9LAorICAgIE9wZW5Y
UkJ1dHRvbiB7IC50eXBlID0gT3BlblhSQnV0dG9uVHlwZTo6U3F1ZWV6ZSwgLnByZXNzID0gIi9p
bnB1dC9zcXVlZXplL2NsaWNrIiB9LAorICAgIE9wZW5YUkJ1dHRvbiB7IC50eXBlID0gT3BlblhS
QnV0dG9uVHlwZTo6VG91Y2hwYWQsIC5wcmVzcyA9ICIvaW5wdXQvdHJhY2twYWQvY2xpY2siLCAu
dG91Y2ggPSAiL2lucHV0L3RyYWNrcGFkL3RvdWNoIiB9Cit9OworCitjb25zdGV4cHIgc3RkOjph
cnJheTxPcGVuWFJBeGlzLCAxPiBIVENWaXZlQXhlcyB7CisgICAgeyBPcGVuWFJBeGlzVHlwZTo6
VG91Y2hwYWQsICIvaW5wdXQvdHJhY2twYWQiIH0KK307CisKK2NvbnN0ZXhwciBPcGVuWFJJbnB1
dFByb2ZpbGUgSFRDVml2ZUlucHV0UHJvZmlsZSB7CisgICAgIi9pbnRlcmFjdGlvbl9wcm9maWxl
cy9odGMvdml2ZV9jb250cm9sbGVyIiwKKyAgICBIVENWaXZlUHJvZmlsZUlkcy5kYXRhKCksCisg
ICAgSFRDVml2ZVByb2ZpbGVJZHMuc2l6ZSgpLAorICAgIEhUQ1ZpdmVCdXR0b25zLmRhdGEoKSwK
KyAgICBIVENWaXZlQnV0dG9ucy5zaXplKCksCisgICAgSFRDVml2ZUJ1dHRvbnMuZGF0YSgpLAor
ICAgIEhUQ1ZpdmVCdXR0b25zLnNpemUoKSwKKyAgICBIVENWaXZlQXhlcy5kYXRhKCksCisgICAg
SFRDVml2ZUF4ZXMuc2l6ZSgpCit9OworCisvLyBEZWZhdWx0IGZhbGxiYWNrIHdoZW4gdGhyZSBp
c24ndCBhIHNwZWNpZmljIGNvbnRyb2xsZXIgYmluZGluZy4KK2NvbnN0ZXhwciBzdGQ6OmFycmF5
PGNvbnN0IGNoYXIqLCAxPiBLSFJTaW1wbGVQcm9maWxlSWRzIHsgImdlbmVyaWMtYnV0dG9uIiB9
OworCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJCdXR0b24sIDE+IEtIUlNpbXBsZUJ1dHRv
bnMgeworICAgIE9wZW5YUkJ1dHRvbiB7IC50eXBlID0gT3BlblhSQnV0dG9uVHlwZTo6VHJpZ2dl
ciwgLnByZXNzID0gIi9pbnB1dC9zZWxlY3QvY2xpY2siIH0KK307CisKK2NvbnN0ZXhwciBPcGVu
WFJJbnB1dFByb2ZpbGUgS0hSU2ltcGxlSW5wdXRQcm9maWxlIHsKKyAgICAiL2ludGVyYWN0aW9u
X3Byb2ZpbGVzL2toci9zaW1wbGVfY29udHJvbGxlciIsCisgICAgS0hSU2ltcGxlUHJvZmlsZUlk
cy5kYXRhKCksCisgICAgS0hSU2ltcGxlUHJvZmlsZUlkcy5zaXplKCksCisgICAgS0hSU2ltcGxl
QnV0dG9ucy5kYXRhKCksCisgICAgS0hSU2ltcGxlQnV0dG9ucy5zaXplKCksCisgICAgS0hSU2lt
cGxlQnV0dG9ucy5kYXRhKCksCisgICAgS0hSU2ltcGxlQnV0dG9ucy5zaXplKCksCisgICAgbnVs
bHB0ciwKKyAgICAwCit9OworCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJJbnB1dFByb2Zp
bGUsIDI+IE9wZW5YUklucHV0UHJvZmlsZXMgeyBIVENWaXZlSW5wdXRQcm9maWxlLCBLSFJTaW1w
bGVJbnB1dFByb2ZpbGUgfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjY5Yzg5ODQwMjlmYjBjOWJiNjA5YThhNTYzMDljOTM0NTc4OTk2YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5j
cHAKQEAgLTAsMCArMSwzODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0U291cmNlLmgiCisK
KyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK3N0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJ
bnB1dFNvdXJjZT4gT3BlblhSSW5wdXRTb3VyY2U6OmNyZWF0ZShYckluc3RhbmNlIGluc3RhbmNl
LCBYclNlc3Npb24gc2Vzc2lvbiwgWFJIYW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VI
YW5kbGUgaGFuZGxlKQoreworICAgIGF1dG8gaW5wdXQgPSBtYWtlVW5pcXVlPE9wZW5YUklucHV0
U291cmNlPigpOworICAgIGlmIChYUl9GQUlMRUQoaW5wdXQtPmluaXRpYWxpemUoaW5zdGFuY2Us
IHNlc3Npb24sIGhhbmRlbmVzcywgaGFuZGxlKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBpbnB1dDsKK30KKworT3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNv
dXJjZSgpCit7CisgICAgaWYgKG1fYWN0aW9uU2V0ICE9IFhSX05VTExfSEFORExFKQorICAgICAg
ICB4ckRlc3Ryb3lBY3Rpb25TZXQobV9hY3Rpb25TZXQpOworICAgIGlmIChtX2dyaXBTcGFjZSAh
PSBYUl9OVUxMX0hBTkRMRSkKKyAgICAgICAgeHJEZXN0cm95U3BhY2UobV9ncmlwU3BhY2UpOwor
ICAgIGlmIChtX3BvaW50ZXJTcGFjZSAhPSBYUl9OVUxMX0hBTkRMRSkKKyAgICAgICAgeHJEZXN0
cm95U3BhY2UobV9wb2ludGVyU3BhY2UpOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJj
ZTo6aW5pdGlhbGl6ZShYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Npb24gc2Vzc2lvbiwgWFJI
YW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUgaGFuZGxlKQoreworICAgIG1f
aW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICBtX3Nlc3Npb24gPSBzZXNzaW9uOworICAgIG1faGFu
ZGVuZXNzID0gaGFuZGVuZXNzOworICAgIG1faGFuZGxlID0gaGFuZGxlOworCisgICAgU3RyaW5n
IGhhbmRlbmVzc05hbWUgPSBoYW5kZW5lc3NUb1N0cmluZyhoYW5kZW5lc3MpOworICAgIG1fc3Vi
YWN0aW9uUGF0aE5hbWUgPSAiL3VzZXIvaGFuZC8iICsgaGFuZGVuZXNzTmFtZTsKKyAgICBSRVRV
Uk5fUkVTVUxUX0lGX0ZBSUxFRCh4clN0cmluZ1RvUGF0aChtX2luc3RhbmNlLCBtX3N1YmFjdGlv
blBhdGhOYW1lLnV0ZjgoKS5kYXRhKCksICZtX3N1YmFjdGlvblBhdGgpLCBtX2luc3RhbmNlKTsK
KworICAgIC8vIEluaXRpYWxpemUgQWN0aW9uIFNldAorICAgIFN0cmluZyBwcmVmaXggPSAiaW5w
dXRfIiArIGhhbmRlbmVzc05hbWU7CisgICAgU3RyaW5nIGFjdGlvblNldE5hbWUgPSBwcmVmaXgg
KyAiX2FjdGlvbl9zZXQiOworICAgIGF1dG8gY3JlYXRlSW5mbyA9ICBjcmVhdGVTdHJ1Y3R1cmU8
WHJBY3Rpb25TZXRDcmVhdGVJbmZvLCBYUl9UWVBFX0FDVElPTl9TRVRfQ1JFQVRFX0lORk8+KCk7
CisgICAgc3RkOjpzdHJuY3B5KGNyZWF0ZUluZm8uYWN0aW9uU2V0TmFtZSwgYWN0aW9uU2V0TmFt
ZS51dGY4KCkuZGF0YSgpLCBYUl9NQVhfQUNUSU9OX1NFVF9OQU1FX1NJWkUgLSAxKTsKKyAgICBz
dGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5sb2NhbGl6ZWRBY3Rpb25TZXROYW1lLCBhY3Rpb25TZXRO
YW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOworCisg
ICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJDcmVhdGVBY3Rpb25TZXQobV9pbnN0YW5jZSwg
JmNyZWF0ZUluZm8sICZtX2FjdGlvblNldCksIG1faW5zdGFuY2UpOworCisgICAgLy8gSW5pdGlh
bGl6ZSBwb3NlIGFjdGlvbnMgYW5kIHNwYWNlcworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVE
KGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9QT1NFX0lOUFVULCBwcmVmaXggKyAiX2dyaXAi
LCAmbV9ncmlwQWN0aW9uKSwgbV9pbnN0YW5jZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlM
RUQoY3JlYXRlU3BhY2VBY3Rpb24obV9ncmlwQWN0aW9uLCAmbV9ncmlwU3BhY2UpLCBtX2luc3Rh
bmNlKTsKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVBY3Rpb24oWFJfQUNUSU9O
X1RZUEVfUE9TRV9JTlBVVCwgcHJlZml4ICsgIl9wb2ludGVyIiwgJm1fcG9pbnRlckFjdGlvbiks
IG1faW5zdGFuY2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZVNwYWNlQWN0
aW9uKG1fcG9pbnRlckFjdGlvbiwgJm1fcG9pbnRlclNwYWNlKSwgbV9pbnN0YW5jZSk7CisKKyAg
ICAvLyBJbml0aWFsaXplIGJ1dHRvbiBhY3Rpb25zCisgICAgZm9yIChhdXRvIGJ1dHRvblR5cGUg
OiBPcGVuWFJCdXR0b25UeXBlcykgeworICAgICAgICBPcGVuWFJCdXR0b25BY3Rpb25zIGFjdGlv
bnM7CisgICAgICAgIGNyZWF0ZUJ1dHRvbkFjdGlvbnMoYnV0dG9uVHlwZSwgcHJlZml4LCAmYWN0
aW9ucyk7CisgICAgICAgIG1fYnV0dG9uQWN0aW9ucy5hZGQoYnV0dG9uVHlwZSwgYWN0aW9ucyk7
CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSBheGVzCisgICAgZm9yIChhdXRvIGF4aXNUeXBl
IDogT3BlblhSQXhpc1R5cGVzKSB7CisgICAgICAgIFhyQWN0aW9uIGF4aXNBY3Rpb24gPSBYUl9O
VUxMX0hBTkRMRTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmVmaXggKyAiX2F4aXNfIiArIGF4
aXNUeXBldG9TdHJpbmcoYXhpc1R5cGUpOworICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxF
RChjcmVhdGVBY3Rpb24oWFJfQUNUSU9OX1RZUEVfVkVDVE9SMkZfSU5QVVQsIG5hbWUsICZheGlz
QWN0aW9uKSwgbV9pbnN0YW5jZSwgZmFsc2UpOworICAgICAgICBtX2F4aXNBY3Rpb25zLmFkZChh
eGlzVHlwZSwgYXhpc0FjdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9
CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpzdWdnZXN0QmluZGluZ3MoU3VnZ2VzdGVk
QmluZGluZ3MmIGJpbmRpbmdzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgcHJvZmlsZSA6IE9w
ZW5YUklucHV0UHJvZmlsZXMpIHsKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5kaW5nIGZvciBwb3Nl
IGFjdGlvbnMKKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhw
cm9maWxlLnBhdGgsIG1fZ3JpcEFjdGlvbiwgbV9zdWJhY3Rpb25QYXRoTmFtZSArICIvaW5wdXQv
Z3JpcC9wb3NlIiwgYmluZGluZ3MpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgUkVUVVJOX1JFU1VM
VF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIG1fcG9pbnRlckFjdGlvbiwg
bV9zdWJhY3Rpb25QYXRoTmFtZSArICIvaW5wdXQvYWltL3Bvc2UiLCBiaW5kaW5ncyksIG1faW5z
dGFuY2UpOworCisgICAgICAgIC8vIFN1Z2dlc3QgYmluZGluZyBmb3IgYnV0dG9uIGFjdGlvbnMK
KyAgICAgICAgY29uc3QgT3BlblhSQnV0dG9uKiBidXR0b25zOworICAgICAgICBzaXplX3QgYnV0
dG9uc1NpemU7CisgICAgICAgIGlmIChtX2hhbmRlbmVzcyA9PSBYUkhhbmRlZG5lc3M6OkxlZnQp
IHsKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9maWxlLmxlZnRCdXR0b25zOworICAgICAgICAg
ICAgYnV0dG9uc1NpemUgPSBwcm9maWxlLmxlZnRCdXR0b25zU2l6ZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9maWxlLnJpZ2h0QnV0dG9uczsKKyAgICAgICAg
ICAgIGJ1dHRvbnNTaXplID0gcHJvZmlsZS5yaWdodEJ1dHRvbnNTaXplOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidXR0b25zU2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBidXR0b24gPSBidXR0b25zW2ldOworICAgICAgICAgICAgY29u
c3QgYXV0byYgYWN0aW9ucyA9IG1fYnV0dG9uQWN0aW9ucy5nZXQoYnV0dG9uLnR5cGUpOworICAg
ICAgICAgICAgaWYgKGJ1dHRvbi5wcmVzcykgeworICAgICAgICAgICAgICAgIEFTU0VSVChhY3Rp
b25zLnByZXNzICE9IFhSX05VTExfSEFORExFKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUkVT
VUxUX0lGX0ZBSUxFRChjcmVhdGVCaW5kaW5nKHByb2ZpbGUucGF0aCwgYWN0aW9ucy5wcmVzcywg
bV9zdWJhY3Rpb25QYXRoTmFtZSArIGJ1dHRvbi5wcmVzcywgYmluZGluZ3MpLCBtX2luc3RhbmNl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChidXR0b24udG91Y2gpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoYWN0aW9ucy50b3VjaCAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxl
LnBhdGgsIGFjdGlvbnMudG91Y2gsIG1fc3ViYWN0aW9uUGF0aE5hbWUgKyBidXR0b24udG91Y2gs
IGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YnV0dG9uLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGlvbnMudmFsdWUgIT0g
WFJfTlVMTF9IQU5ETEUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVE
KGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBhY3Rpb25zLnZhbHVlLCBtX3N1YmFjdGlvblBh
dGhOYW1lICsgYnV0dG9uLnZhbHVlLCBiaW5kaW5ncyksIG1faW5zdGFuY2UpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5kaW5nIGZvciBheGlzIGFj
dGlvbnMKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9maWxlLmF4ZXNTaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGF4aXMgPSBwcm9maWxlLmF4ZXNbaV07Cisg
ICAgICAgICAgICBhdXRvIGFjdGlvbiA9IG1fYXhpc0FjdGlvbnMuZ2V0KGF4aXMudHlwZSk7Cisg
ICAgICAgICAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKyAgICAgICAgICAg
IFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBhY3Rp
b24sIG1fc3ViYWN0aW9uUGF0aE5hbWUgKyBheGlzLnBhdGgsIGJpbmRpbmdzKSwgbV9pbnN0YW5j
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gWFJfU1VDQ0VTUzsKK30KKworT3B0
aW9uYWw8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiBPcGVuWFJJbnB1dFNvdXJjZTo6
Z2V0SW5wdXRTb3VyY2UoWHJTcGFjZSBsb2NhbFNwYWNlLCBjb25zdCBYckZyYW1lU3RhdGUmIGZy
YW1lU3RhdGUpIGNvbnN0Cit7CisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlIGRh
dGE7CisgICAgZGF0YS5oYW5kZW5lc3MgPSBtX2hhbmRlbmVzczsKKyAgICBkYXRhLmhhbmRsZSA9
IG1faGFuZGxlOworICAgIGRhdGEudGFyZ2V0UmF5TW9kZSA9IFhSVGFyZ2V0UmF5TW9kZTo6VHJh
Y2tlZFBvaW50ZXI7CisgICAgZGF0YS5wcm9maWxlcyA9IG1fcHJvZmlsZXM7CisKKyAgICAvLyBQ
b3NlIHRyYW5zZm9ybXMKKyAgICBnZXRQb3NlKG1fcG9pbnRlclNwYWNlLCBsb2NhbFNwYWNlLCBm
cmFtZVN0YXRlLCAmZGF0YS5wb2ludGVyT3JpZ2luKTsKKyAgICBEZXZpY2U6OkZyYW1lRGF0YTo6
SW5wdXRTb3VyY2VQb3NlIGdyaXBQb3NlOworICAgIGlmIChYUl9TVUNDRUVERUQoZ2V0UG9zZSht
X2dyaXBTcGFjZSwgbG9jYWxTcGFjZSwgZnJhbWVTdGF0ZSwgJmdyaXBQb3NlKSkpCisgICAgICAg
IGRhdGEuZ3JpcE9yaWdpbiA9IGdyaXBQb3NlOworCisgICAgLy8gQnV0dG9ucworICAgIFZlY3Rv
cjxPcHRpb25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0b24+PiBidXR0b25z
OworICAgIGZvciAoYXV0byYgdHlwZSA6IE9wZW5YUkJ1dHRvblR5cGVzKSAKKyAgICAgICAgYnV0
dG9ucy5hcHBlbmQoZ2V0QnV0dG9uKHR5cGUpKTsKKworICAgIGlmIChidXR0b25zLmlzRW1wdHko
KSB8fCAhYnV0dG9ucy5maXJzdCgpLmhhc1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7IC8vIFRyaWdnZXIgaXMgbWFuZGF0b3J5IGluIHhyLXN0YW5kYXJkIG1hcHBpbmcKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnV0dG9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoYnV0dG9uc1tpXSkgeworICAgICAgICAgICAgZGF0YS5idXR0b25zLmFwcGVuZCgqYnV0
dG9uc1tpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBB
ZGQgcGxhY2Vob2xkZXIgaWYgdGhlcmUgYXJlIG1vcmUgdmFsaWQgYnV0dG9ucyBpbiB0aGUgbGlz
dAorICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBidXR0b25zLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICBpZiAoYnV0dG9uc1tqXSkgeworICAgICAgICAgICAgICAgIGRhdGEu
YnV0dG9ucy5hcHBlbmQoeyB9KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEF4ZXMKKyAgICBWZWN0b3I8T3B0aW9uYWw8
WHJWZWN0b3IyZj4+IGF4ZXM7CisgICAgZm9yIChhdXRvJiB0eXBlIDogT3BlblhSQXhpc1R5cGVz
KSAKKyAgICAgICAgYXhlcy5hcHBlbmQoZ2V0QXhpcyh0eXBlKSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF4ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGF4ZXNbaV0pIHsK
KyAgICAgICAgICAgIGRhdGEuYXhlcy5hcHBlbmQoYXhlc1tpXS0+eCk7CisgICAgICAgICAgICBk
YXRhLmF4ZXMuYXBwZW5kKGF4ZXNbaV0tPnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQWRkIHBsYWNlaG9sZGVyIGlmIHRoZXJlIGFyZSBtb3JlIHZhbGlk
IGF4ZXMgaW4gdGhlIGxpc3QKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgYnV0
dG9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKGF4ZXNbal0pIHsKKyAgICAgICAg
ICAgICAgICBkYXRhLmF4ZXMuYXBwZW5kKDAuMGYpOworICAgICAgICAgICAgICAgIGRhdGEuYXhl
cy5hcHBlbmQoMC4wZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworWHJSZXN1bHQgT3BlblhS
SW5wdXRTb3VyY2U6OnVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgpCit7CisgICAgYXV0byBzdGF0
ZSA9IGNyZWF0ZVN0cnVjdHVyZTxYckludGVyYWN0aW9uUHJvZmlsZVN0YXRlLCBYUl9UWVBFX0lO
VEVSQUNUSU9OX1BST0ZJTEVfU1RBVEU+KCk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQo
eHJHZXRDdXJyZW50SW50ZXJhY3Rpb25Qcm9maWxlKG1fc2Vzc2lvbiwgbV9zdWJhY3Rpb25QYXRo
LCAmc3RhdGUpLCBtX2luc3RhbmNlKTsKKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBidWZmZXJT
aXplID0gMTAwOyAKKyAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXplXTsKKyAgICB1aW50MzJfdCB3
cml0dGVuQ291bnQgPSAwOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyUGF0aFRvU3Ry
aW5nKG1faW5zdGFuY2UsIHN0YXRlLmludGVyYWN0aW9uUHJvZmlsZSwgYnVmZmVyU2l6ZSwgJndy
aXR0ZW5Db3VudCwgYnVmZmVyKSwgbV9pbnN0YW5jZSk7CisKKyAgICBtX3Byb2ZpbGVzLmNsZWFy
KCk7CisgICAgZm9yIChhdXRvJiBwcm9maWxlIDogT3BlblhSSW5wdXRQcm9maWxlcykgeworICAg
ICAgICBpZiAoIXN0cmNtcChwcm9maWxlLnBhdGgsIGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZS5wcm9maWxlSWRzU2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIG1fcHJvZmlsZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgocHJvZmlsZS5wcm9m
aWxlSWRzW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBYUl9TVUNDRVNTOworfQorCisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpj
cmVhdGVTcGFjZUFjdGlvbihYckFjdGlvbiBhY3Rpb24sIFhyU3BhY2UqIHNwYWNlKSBjb25zdAor
eworICAgIEFTU0VSVChzcGFjZSk7CisgICAgCisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0
ZVN0cnVjdHVyZTxYckFjdGlvblNwYWNlQ3JlYXRlSW5mbywgWFJfVFlQRV9BQ1RJT05fU1BBQ0Vf
Q1JFQVRFX0lORk8+KCk7CisgICAgY3JlYXRlSW5mby5hY3Rpb24gPSBhY3Rpb247CisgICAgY3Jl
YXRlSW5mby5zdWJhY3Rpb25QYXRoID0gbV9zdWJhY3Rpb25QYXRoOworICAgIGNyZWF0ZUluZm8u
cG9zZUluQWN0aW9uU3BhY2UgPSBYclBvc2VJZGVudGl0eSgpOworCisgICAgcmV0dXJuIHhyQ3Jl
YXRlQWN0aW9uU3BhY2UobV9zZXNzaW9uLCAmY3JlYXRlSW5mbywgc3BhY2UpOworfQorCitYclJl
c3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQWN0aW9uKFhyQWN0aW9uVHlwZSBhY3Rpb25U
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFhyQWN0aW9uKiBhY3Rpb24pIGNvbnN0Cit7CisgICAg
QVNTRVJUKGFjdGlvbik7CisgICAgCisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0ZVN0cnVj
dHVyZTxYckFjdGlvbkNyZWF0ZUluZm8sIFhSX1RZUEVfQUNUSU9OX0NSRUFURV9JTkZPPigpOwor
ICAgIGNyZWF0ZUluZm8uYWN0aW9uVHlwZSA9IGFjdGlvblR5cGU7CisgICAgY3JlYXRlSW5mby5j
b3VudFN1YmFjdGlvblBhdGhzID0gMTsKKyAgICBjcmVhdGVJbmZvLnN1YmFjdGlvblBhdGhzID0g
Jm1fc3ViYWN0aW9uUGF0aDsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5hY3Rpb25OYW1l
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOwor
ICAgIHN0ZDo6c3RybmNweShjcmVhdGVJbmZvLmxvY2FsaXplZEFjdGlvbk5hbWUsIG5hbWUudXRm
OCgpLmRhdGEoKSwgWFJfTUFYX0FDVElPTl9TRVRfTkFNRV9TSVpFIC0gMSk7CisKKyAgICByZXR1
cm4geHJDcmVhdGVBY3Rpb24obV9hY3Rpb25TZXQsICZjcmVhdGVJbmZvLCBhY3Rpb24pOworfQor
CitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQnV0dG9uQWN0aW9ucyhPcGVuWFJC
dXR0b25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcHJlZml4LCBPcGVuWFJCdXR0b25BY3Rpb25z
KiBhY3Rpb25zKSBjb25zdAoreworICAgIEFTU0VSVChhY3Rpb25zKTsKKyAgICBhdXRvIG5hbWUg
PSBwcmVmaXggKyAiX2J1dHRvbl8iICsgYnV0dG9uVHlwZVRvU3RyaW5nKHR5cGUpOworCisgICAg
UkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX0JPT0xF
QU5fSU5QVVQsIG5hbWUgKyAiX3ByZXNzIiwgJmFjdGlvbnMtPnByZXNzKSwgbV9pbnN0YW5jZSk7
CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBF
X0JPT0xFQU5fSU5QVVQsIG5hbWUgKyAiX3RvdWNoIiwgJmFjdGlvbnMtPnRvdWNoKSwgbV9pbnN0
YW5jZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElP
Tl9UWVBFX0ZMT0FUX0lOUFVULCBuYW1lICsgIl92YWx1ZSIsICZhY3Rpb25zLT52YWx1ZSksIG1f
aW5zdGFuY2UpOworICAgIAorICAgIHJldHVybiBYUl9TVUNDRVNTOworfQorCitYclJlc3VsdCBP
cGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQmluZGluZyhjb25zdCBjaGFyKiBwcm9maWxlUGF0aCwg
WHJBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIGJpbmRpbmdQYXRoLCBTdWdnZXN0ZWRCaW5k
aW5ncyYgYmluZGluZ3MpIGNvbnN0Cit7CisgICAgQVNTRVJUKHByb2ZpbGVQYXRoICE9IFhSX05V
TExfUEFUSCk7CisgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAgQVNT
RVJUKCFiaW5kaW5nUGF0aC5pc0VtcHR5KCkpOworCisgICAgWHJQYXRoIHBhdGggPSBYUl9OVUxM
X1BBVEg7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJTdHJpbmdUb1BhdGgobV9pbnN0
YW5jZSwgYmluZGluZ1BhdGgudXRmOCgpLmRhdGEoKSwgJnBhdGgpLCBtX2luc3RhbmNlKTsKKwor
ICAgIFhyQWN0aW9uU3VnZ2VzdGVkQmluZGluZyBiaW5kaW5nIHsgYWN0aW9uLCBwYXRoIH07Cisg
ICAgYXV0byBpdCA9IGJpbmRpbmdzLmZpbmQocHJvZmlsZVBhdGgpOworICAgIGlmIChpdCAhPSBi
aW5kaW5ncy5lbmQoKSkKKyAgICAgICAgaXQtPnZhbHVlLmFwcGVuZChiaW5kaW5nKTsKKyAgICBl
bHNlCisgICAgICAgIGJpbmRpbmdzLmFkZChwcm9maWxlUGF0aCwgVmVjdG9yPFhyQWN0aW9uU3Vn
Z2VzdGVkQmluZGluZz4geyBiaW5kaW5nIH0pOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9
CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlKFhyU3BhY2Ugc3BhY2UsIFhy
U3BhY2UgYmFzZVNwYWNlLCBjb25zdCBYckZyYW1lU3RhdGUmIGZyYW1lU3RhdGUsIERldmljZTo6
RnJhbWVEYXRhOjpJbnB1dFNvdXJjZVBvc2UqIHBvc2UpIGNvbnN0Cit7CisgICAgQVNTRVJUKHBv
c2UpOworICAgIGF1dG8gbG9jYXRpb24gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTcGFjZUxvY2F0aW9u
LCBYUl9UWVBFX1NQQUNFX0xPQ0FUSU9OPigpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVE
KHhyTG9jYXRlU3BhY2Uoc3BhY2UsIGJhc2VTcGFjZSwgZnJhbWVTdGF0ZS5wcmVkaWN0ZWREaXNw
bGF5VGltZSwgJmxvY2F0aW9uKSwgbV9pbnN0YW5jZSk7CisKKyAgICBpZiAobG9jYXRpb24ubG9j
YXRpb25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09SSUVOVEFUSU9OX1RSQUNLRURfQklUKQor
ICAgICAgICBwb3NlLT5wb3NlID0gWHJQb3NlZlRvUG9zZShsb2NhdGlvbi5wb3NlKTsKKyAgICBw
b3NlLT5pc1Bvc2l0aW9uRW11bGF0ZWQgPSAhKGxvY2F0aW9uLmxvY2F0aW9uRmxhZ3MgJiBYUl9T
UEFDRV9MT0NBVElPTl9QT1NJVElPTl9WQUxJRF9CSVQpOworCisgICAgcmV0dXJuIFhSX1NVQ0NF
U1M7Cit9CisKK09wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJbnB1dFNvdXJjZUJ1dHRvbj4g
T3BlblhSSW5wdXRTb3VyY2U6OmdldEJ1dHRvbihPcGVuWFJCdXR0b25UeXBlIGJ1dHRvblR5cGUp
IGNvbnN0Cit7CisgICAgYXV0byBpdCA9IG1fYnV0dG9uQWN0aW9ucy5maW5kKGJ1dHRvblR5cGUp
OworICAgIGlmIChpdCA9PSBtX2J1dHRvbkFjdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0b24g
cmVzdWx0OworICAgIGJvb2wgaGFzVmFsdWUgPSBmYWxzZTsKKyAgICBhdXRvJiBhY3Rpb25zID0g
aXQtPnZhbHVlOworCisgICAgaWYgKGFjdGlvbnMucHJlc3MgIT0gWFJfTlVMTF9IQU5ETEUgJiYg
WFJfU1VDQ0VFREVEKGdldEFjdGlvblN0YXRlKGFjdGlvbnMucHJlc3MsICZyZXN1bHQucHJlc3Nl
ZCkpKQorICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CisgICAgZWxzZQorICAgICAgICByZXN1bHQu
cHJlc3NlZCA9IGZhbHNlOworCisgICAgaWYgKGFjdGlvbnMudG91Y2ggIT0gWFJfTlVMTF9IQU5E
TEUgJiYgWFJfU1VDQ0VFREVEKGdldEFjdGlvblN0YXRlKGFjdGlvbnMudG91Y2gsICZyZXN1bHQu
dG91Y2hlZCkpKQorICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CisgICAgZWxzZQorICAgICAgICBy
ZXN1bHQudG91Y2hlZCA9IHJlc3VsdC5wcmVzc2VkOworCisgICAgaWYgKGFjdGlvbnMudmFsdWUg
IT0gWFJfTlVMTF9IQU5ETEUgJiYgWFJfU1VDQ0VFREVEKGdldEFjdGlvblN0YXRlKGFjdGlvbnMu
dmFsdWUsICZyZXN1bHQucHJlc3NlZFZhbHVlKSkpCisgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTsK
KyAgICBlbHNlCisgICAgICAgIHJlc3VsdC50b3VjaGVkID0gcmVzdWx0LnByZXNzZWQgPyAxLjAg
OiAwLjA7CisKKyAgICBpZiAoIWhhc1ZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8WHJWZWN0b3IyZj4gT3BlblhS
SW5wdXRTb3VyY2U6OmdldEF4aXMoT3BlblhSQXhpc1R5cGUgYXhpc1R5cGUpIGNvbnN0Cit7Cisg
ICAgYXV0byBpdCA9IG1fYXhpc0FjdGlvbnMuZmluZChheGlzVHlwZSk7CisgICAgaWYgKGl0ID09
IG1fYXhpc0FjdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBYclZlY3RvcjJmIGF4aXM7CisgICAgaWYgKFhSX1NVQ0NFRURFRChnZXRBY3Rpb25TdGF0ZShp
dC0+dmFsdWUsICZheGlzKSkpCisgICAgICAgIHJldHVybiBheGlzOworCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0
YXRlKFhyQWN0aW9uIGFjdGlvbiwgYm9vbCogdmFsdWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZh
bHVlKTsKKyAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKworICAgIGF1dG8g
c3RhdGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUJvb2xlYW4sIFhSX1RZUEVfQUNU
SU9OX1NUQVRFX0JPT0xFQU4+KCk7CisgICAgYXV0byBpbmZvID0gY3JlYXRlU3RydWN0dXJlPFhy
QWN0aW9uU3RhdGVHZXRJbmZvLCBYUl9UWVBFX0FDVElPTl9TVEFURV9HRVRfSU5GTz4oKTsKKyAg
ICBpbmZvLmFjdGlvbiA9IGFjdGlvbjsKKworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhy
R2V0QWN0aW9uU3RhdGVCb29sZWFuKG1fc2Vzc2lvbiwgJmluZm8sICZzdGF0ZSksIG1faW5zdGFu
Y2UpOworICAgICp2YWx1ZSA9IHN0YXRlLmN1cnJlbnRTdGF0ZTsKKworICAgIHJldHVybiBYUl9T
VUNDRVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QWN0aW9uU3RhdGUo
WHJBY3Rpb24gYWN0aW9uLCBmbG9hdCogdmFsdWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZhbHVl
KTsKKyAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKworICAgIGF1dG8gc3Rh
dGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUZsb2F0LCBYUl9UWVBFX0FDVElPTl9T
VEFURV9GTE9BVD4oKTsKKyAgICBhdXRvIGluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25T
dGF0ZUdldEluZm8sIFhSX1RZUEVfQUNUSU9OX1NUQVRFX0dFVF9JTkZPPigpOworICAgIGluZm8u
YWN0aW9uID0gYWN0aW9uOworCisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJHZXRBY3Rp
b25TdGF0ZUZsb2F0KG1fc2Vzc2lvbiwgJmluZm8sICZzdGF0ZSksIG1faW5zdGFuY2UpOworICAg
ICp2YWx1ZSA9IHN0YXRlLmN1cnJlbnRTdGF0ZTsKKworICAgIHJldHVybiBYUl9TVUNDRVNTOwor
fQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24g
YWN0aW9uLCBYclZlY3RvcjJmKiB2YWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodmFsdWUpOwor
ICAgIEFTU0VSVChhY3Rpb24gIT0gWFJfTlVMTF9IQU5ETEUpOworCisgICAgYXV0byBzdGF0ZSA9
IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblN0YXRlVmVjdG9yMmYsIFhSX1RZUEVfQUNUSU9OX1NU
QVRFX1ZFQ1RPUjJGPigpOworICAgIGF1dG8gaW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlv
blN0YXRlR2V0SW5mbywgWFJfVFlQRV9BQ1RJT05fU1RBVEVfR0VUX0lORk8+KCk7CisgICAgaW5m
by5hY3Rpb24gPSBhY3Rpb247CisKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckdldEFj
dGlvblN0YXRlVmVjdG9yMmYobV9zZXNzaW9uLCAmaW5mbywgJnN0YXRlKSwgbV9pbnN0YW5jZSk7
CisgICAgKnZhbHVlID0gc3RhdGUuY3VycmVudFN0YXRlOworCisgICAgcmV0dXJuIFhSX1NVQ0NF
U1M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
eHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZlYjg2NWY4MDFhNGI1
MDdjOTc3ZWM2Yzc1MWQ2ZjU3ZDIwYmNiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5oCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKKyNpbmNsdWRlICJPcGVuWFJJbnB1
dE1hcHBpbmdzLmgiCisjaW5jbHVkZSAiT3BlblhSVXRpbHMuaCIKKworI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBsYXRm
b3JtWFIgeworCitjbGFzcyBPcGVuWFJJbnB1dFNvdXJjZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BlblhSSW5wdXRTb3VyY2UpOwor
cHVibGljOgorICAgIHVzaW5nIFN1Z2dlc3RlZEJpbmRpbmdzID0gSGFzaE1hcDxjb25zdCBjaGFy
KiwgVmVjdG9yPFhyQWN0aW9uU3VnZ2VzdGVkQmluZGluZz4+OworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8T3BlblhSSW5wdXRTb3VyY2U+IGNyZWF0ZShYckluc3RhbmNlLCBYclNlc3Npb24s
IFhSSGFuZGVkbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUpOworICAgIE9wZW5YUklucHV0U291cmNl
KCkgeyB9OworICAgIH5PcGVuWFJJbnB1dFNvdXJjZSgpOworCisgICAgWHJSZXN1bHQgc3VnZ2Vz
dEJpbmRpbmdzKFN1Z2dlc3RlZEJpbmRpbmdzJikgY29uc3Q7CisgICAgT3B0aW9uYWw8RGV2aWNl
OjpGcmFtZURhdGE6OklucHV0U291cmNlPiBnZXRJbnB1dFNvdXJjZShYclNwYWNlLCBjb25zdCBY
ckZyYW1lU3RhdGUmKSBjb25zdDsKKyAgICBYckFjdGlvblNldCBhY3Rpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2FjdGlvblNldDsgfQorICAgIFhyUmVzdWx0IHVwZGF0ZUludGVyYWN0aW9uUHJv
ZmlsZSgpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBPcGVuWFJCdXR0b25BY3Rpb25zIHsKKyAg
ICAgICAgWHJBY3Rpb24gcHJlc3MgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgICAgICBYckFjdGlv
biB0b3VjaCB7IFhSX05VTExfSEFORExFIH07CisgICAgICAgIFhyQWN0aW9uIHZhbHVlIHsgWFJf
TlVMTF9IQU5ETEUgfTsKKyAgICB9OworCisgICAgWHJSZXN1bHQgaW5pdGlhbGl6ZShYckluc3Rh
bmNlLCBYclNlc3Npb24sIFhSSGFuZGVkbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUpOworICAgIFhy
UmVzdWx0IGNyZWF0ZVNwYWNlQWN0aW9uKFhyQWN0aW9uLCBYclNwYWNlKikgY29uc3Q7CisgICAg
WHJSZXN1bHQgY3JlYXRlQWN0aW9uKFhyQWN0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBY
ckFjdGlvbiopIGNvbnN0OworICAgIFhyUmVzdWx0IGNyZWF0ZUJ1dHRvbkFjdGlvbnMoT3BlblhS
QnV0dG9uVHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmaXgsIE9wZW5YUkJ1dHRvbkFjdGlvbnMqKSBj
b25zdDsKKyAgICBYclJlc3VsdCBjcmVhdGVCaW5kaW5nKGNvbnN0IGNoYXIqIHByb2ZpbGVQYXRo
LCBYckFjdGlvbiwgY29uc3QgU3RyaW5nJiBiaW5kaW5nUGF0aCwgU3VnZ2VzdGVkQmluZGluZ3Mm
KSBjb25zdDsKKworICAgIFhyUmVzdWx0IGdldFBvc2UoWHJTcGFjZSwgWHJTcGFjZSwgY29uc3Qg
WHJGcmFtZVN0YXRlJiwgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlUG9zZSopIGNvbnN0
OworICAgIE9wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJbnB1dFNvdXJjZUJ1dHRvbj4gZ2V0
QnV0dG9uKE9wZW5YUkJ1dHRvblR5cGUpIGNvbnN0OworICAgIE9wdGlvbmFsPFhyVmVjdG9yMmY+
IGdldEF4aXMoT3BlblhSQXhpc1R5cGUpIGNvbnN0OworICAgIFhyUmVzdWx0IGdldEFjdGlvblN0
YXRlKFhyQWN0aW9uLCBib29sKikgY29uc3Q7CisgICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUo
WHJBY3Rpb24sIGZsb2F0KikgY29uc3Q7CisgICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJB
Y3Rpb24sIFhyVmVjdG9yMmYqKSBjb25zdDsKKworICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7
IFhSX05VTExfSEFORExFIH07CisgICAgWHJTZXNzaW9uIG1fc2Vzc2lvbiB7IFhSX05VTExfSEFO
RExFIH07CisgICAgWFJIYW5kZWRuZXNzIG1faGFuZGVuZXNzIHsgWFJIYW5kZWRuZXNzOjpMZWZ0
IH07CisgICAgSW5wdXRTb3VyY2VIYW5kbGUgbV9oYW5kbGUgeyAwIH07CisgICAgU3RyaW5nIG1f
c3ViYWN0aW9uUGF0aE5hbWU7CisgICAgWHJQYXRoIG1fc3ViYWN0aW9uUGF0aCB7IFhSX05VTExf
UEFUSCB9OworICAgIFhyQWN0aW9uU2V0IG1fYWN0aW9uU2V0IHsgWFJfTlVMTF9IQU5ETEUgfTsK
KyAgICBYckFjdGlvbiBtX2dyaXBBY3Rpb24geyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhyU3Bh
Y2UgbV9ncmlwU3BhY2UgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhyQWN0aW9uIG1fcG9pbnRl
ckFjdGlvbiB7IFhSX05VTExfSEFORExFIH07CisgICAgWHJTcGFjZSBtX3BvaW50ZXJTcGFjZSB7
IFhSX05VTExfSEFORExFIH07CisgICAgdXNpbmcgT3BlblhSQnV0dG9uQWN0aW9uc01hcCA9IEhh
c2hNYXA8T3BlblhSQnV0dG9uVHlwZSwgT3BlblhSQnV0dG9uQWN0aW9ucywgSW50SGFzaDxPcGVu
WFJCdXR0b25UeXBlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxPcGVuWFJCdXR0b25UeXBl
Pj47CisgICAgT3BlblhSQnV0dG9uQWN0aW9uc01hcCBtX2J1dHRvbkFjdGlvbnM7CisgICAgdXNp
bmcgT3BlblhSQXhlc01hcCA9IEhhc2hNYXA8T3BlblhSQXhpc1R5cGUsIFhyQWN0aW9uLCBJbnRI
YXNoPE9wZW5YUkF4aXNUeXBlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxPcGVuWFJBeGlz
VHlwZT4+OworICAgIE9wZW5YUkF4ZXNNYXAgbV9heGlzQWN0aW9uczsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBtX3Byb2ZpbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUlV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaAppbmRleCA2MmM1Y2IxYTZiZDdmOGNhNDQx
YTY0NjBiZjdlOGI2NmM4OTBlNjdhLi5lNjFkYzJkNjE4YmM2YjBlZjk1ZGM4MDczZTMxMjU3NWU2
M2M2NTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3Bl
blhSVXRpbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
VXRpbHMuaApAQCAtNjQsMTAgKzY0LDIyIEBAIGlubGluZSBTdHJpbmcgcmVzdWx0VG9TdHJpbmco
WHJSZXN1bHQgdmFsdWUsIFhySW5zdGFuY2UgaW5zdGFuY2UpCiAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIjx1bmtub3duICIsIGludCh2YWx1ZSksICI+Iik7CiB9CiAKLSNkZWZpbmUgUkVUVVJOX0lG
X0ZBSUxFRChyZXN1bHQsIGNhbGwsIGluc3RhbmNlLCAuLi4pICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgTE9HKFhSLCAiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgY2FsbCwg
cmVzdWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7IFwKLSAgICAg
ICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgUkVUVVJOX0lGX0ZB
SUxFRChjYWxsLCBsYWJlbCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdXRvIHhyUmVzdWx0ID0gY2FsbDsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFhSX0ZBSUxFRCh4clJlc3VsdCkpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBMT0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVu
Y19fLCBsYWJlbCwgcmVzdWx0VG9TdHJpbmcoeHJSZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0
YSgpKTsgICAgXAorICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfQorCisjZGVmaW5lIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNhbGwsIGluc3RhbmNl
LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYXV0byB4clJlc3VsdCA9IGNhbGw7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChYUl9GQUlMRUQoeHJS
ZXN1bHQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTE9HKFhS
LCAiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgI2NhbGwsIHJlc3VsdFRvU3RyaW5nKHhyUmVzdWx0
LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiB4clJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIH0KIAogI2RlZmluZSBMT0dfSUZfRkFJTEVEKHJlc3VsdCwgY2FsbCwgaW5zdGFuY2Us
IC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtOTEs
NiArMTAzLDEzIEBAIGlubGluZSBEZXZpY2U6OkZyYW1lRGF0YTo6VmlldyB4clZpZXdUb1Bvc2Uo
WHJWaWV3IHZpZXcpCiAgICAgcmV0dXJuIHBvc2U7CiB9CiAKK2lubGluZSBYclBvc2VmIFhyUG9z
ZUlkZW50aXR5KCkKK3sKKyAgICBYclBvc2VmIHBvc2U7CisgICAgcG9zZS5vcmllbnRhdGlvbi53
ID0gMS4wOworICAgIHJldHVybiBwb3NlOworfQorCiBpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlv
blR5cGUgdG9YclZpZXdDb25maWd1cmF0aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQogewogICAg
IHN3aXRjaCAobW9kZSkgewpAQCAtMTA0LDYgKzEyMywxNyBAQCBpbmxpbmUgWHJWaWV3Q29uZmln
dXJhdGlvblR5cGUgdG9YclZpZXdDb25maWd1cmF0aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQog
ICAgIHJldHVybiBYUl9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk87CiB9CiAK
K2lubGluZSBTdHJpbmcgaGFuZGVuZXNzVG9TdHJpbmcoWFJIYW5kZWRuZXNzIGhhbmRlbmVzcykK
K3sKKyAgICBzd2l0Y2ggKGhhbmRlbmVzcykgeworICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpMZWZ0
OiByZXR1cm4gImxlZnQiOworICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpSaWdodDogcmV0dXJuICJy
aWdodCI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcAppbmRleCBh
NzkzNmNjMjhjNThlZDYzOGI1YTlmNWJiNDMxY2NiZmQxMDRiNGRlLi40ZWRiZTFkMjM4YTg1NmJh
ODg2MjU5MTE2NTEyN2NjYTc2NjBlNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCkBAIC0yMyw2ICsyMyw4IEBA
CiAjaWYgRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQogCiAjaW5jbHVkZSAiT3BlblhSRXh0
ZW5zaW9ucy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisjaW5jbHVkZSAiT3BlblhSSW5w
dXRTb3VyY2UuaCIKIAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgpAQCAtMTM1LDYgKzEzNyw5IEBAIHZvaWQgT3BlblhSRGV2aWNlOjpp
bml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUgbW9kZSkKICAgICAgICAg
Ly8gQ3JlYXRlIHRoZSBkZWZhdWx0IHJlZmVyZW5jZSBzcGFjZXMKICAgICAgICAgbV9sb2NhbFNw
YWNlID0gY3JlYXRlUmVmZXJlbmNlU3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfTE9DQUwp
OwogICAgICAgICBtX3ZpZXdTcGFjZSA9IGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5D
RV9TUEFDRV9UWVBFX1ZJRVcpOworCisgICAgICAgIC8vIEluaXRpYWxpemUgaW5wdXQgdHJhY2tp
bmcKKyAgICAgICAgbV9pbnB1dCA9IE9wZW5YUklucHV0OjpjcmVhdGUobV9pbnN0YW5jZSwgbV9z
ZXNzaW9uLCBtX2xvY2FsU3BhY2UpOwogICAgIH0pOwogfQogCkBAIC0yMzEsNiArMjM2LDEwIEBA
IHZvaWQgT3BlblhSRGV2aWNlOjpyZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1lQ2FsbGJhY2smJiBj
YWxsYmFjaykKICAgICAgICAgICAgICAgICBpZiAobGF5ZXJEYXRhKQogICAgICAgICAgICAgICAg
ICAgICBmcmFtZURhdGEubGF5ZXJzLmFkZChsYXllci5rZXksICpsYXllckRhdGEpOwogICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9pbnB1dCkKKyAgICAgICAgICAgICAgICBmcmFt
ZURhdGEuaW5wdXRTb3VyY2VzID0gbV9pbnB1dC0+Z2V0SW5wdXRTb3VyY2VzKG1fZnJhbWVTdGF0
ZSk7CisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9u
b3Mub3JnL3JlZ2lzdHJ5L09wZW5YUi9zcGVjcy8xLjAvbWFuL2h0bWwvWHJGcmFtZVN0YXRlLmh0
bWwKICAgICAgICAgICAgIC8vIFdoZW4gc2hvdWxkUmVuZGVyIGlzIGZhbHNlIHRoZSBhcHBsaWNh
dGlvbiBzaG91bGQgYXZvaWQgaGVhdnkgR1BVIHdvcmsgd2hlcmUgcG9zc2libGUsCkBAIC00NTQs
NiArNDYzLDggQEAgdm9pZCBPcGVuWFJEZXZpY2U6OnBvbGxFdmVudHMoKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RBVEFfSU5URVJB
Q1RJT05fUFJPRklMRV9DSEFOR0VEOgorICAgICAgICAgICAgdXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RB
VEFfTUFJTl9TRVNTSU9OX1ZJU0lCSUxJVFlfQ0hBTkdFRF9FWFRYOgogICAgICAgICBjYXNlIFhS
X1RZUEVfRVZFTlRfREFUQV9WSVNJQklMSVRZX01BU0tfQ0hBTkdFRF9LSFI6CiAgICAgICAgIGNh
c2UgWFJfVFlQRV9FVkVOVF9EQVRBX1BFUkZfU0VUVElOR1NfRVhUOgpAQCAtNTAwLDYgKzUxMSw3
IEBAIHZvaWQgT3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24oKQogewogICAgIEFTU0VSVCgmUnVu
TG9vcDo6Y3VycmVudCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7CiAgICAgbV9sYXllcnMuY2xl
YXIoKTsKKyAgICBtX2lucHV0LnJlc2V0KCk7CiAgICAgaWYgKG1fc2Vzc2lvbiAhPSBYUl9OVUxM
X0hBTkRMRSkgewogICAgICAgICB4ckRlc3Ryb3lTZXNzaW9uKG1fc2Vzc2lvbik7CiAgICAgICAg
IG1fc2Vzc2lvbiA9IFhSX05VTExfSEFORExFOwpAQCAtNTY0LDYgKzU3NiwyNiBAQCB2b2lkIE9w
ZW5YUkRldmljZTo6dXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCkKICAgICB9CiB9CiAKK3ZvaWQgT3Bl
blhSRGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKQoreworICAgIGlmICghbV9pbnB1
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dC0+dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKCk7CisKKyAgICBpZiAoIWRpZE5vdGlmeUlucHV0SW5pdGlhbGl6YXRpb24pIHsKKyAgICAg
ICAgZGlkTm90aWZ5SW5wdXRJbml0aWFsaXphdGlvbiA9IHRydWU7CisgICAgICAgIGF1dG8gaW5w
dXRTb3VyY2VzID0gbV9pbnB1dC0+Z2V0SW5wdXRTb3VyY2VzKG1fZnJhbWVTdGF0ZSk7CisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCBpbnB1dFNvdXJjZXMgPSBXVEZNb3ZlKGlucHV0U291cmNlcyldKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk9wZW5YUkRldmljZTo6dXBkYXRlSW50ZXJhY3Rpb25Q
cm9maWxlNiBcbiIpOworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAobV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudCkK
KyAgICAgICAgICAgICAgICBtX3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50LT5zZXNzaW9uRGlk
SW5pdGlhbGl6ZUlucHV0U291cmNlcyhXVEZNb3ZlKGlucHV0U291cmNlcykpOworICAgICAgICB9
KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCmluZGV4IGE4NmQ1Yzk0OTMxNmE2ODY4
MDA3NGE0NzU2YWQ0YzMzYWE3OWE5YzkuLmNkYjYzNjZlOTE5NjMxYmFiNTZhOWE4ZTVhYzY1OWVh
MTFlOThhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9Q
bGF0Zm9ybVhST3BlblhSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Blbnhy
L1BsYXRmb3JtWFJPcGVuWFIuaApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFBsYXRmb3Jt
WFIgewogCiBjbGFzcyBPcGVuWFJFeHRlbnNpb25zOworY2xhc3MgT3BlblhSSW5wdXQ7CiAKIC8v
IGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5YUi9zcGVjcy8xLjAvaHRtbC94
cnNwZWMuaHRtbCNzeXN0ZW0KIC8vIEEgc3lzdGVtIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9m
IHJlbGF0ZWQgZGV2aWNlcyBpbiB0aGUgcnVudGltZSwgb2Z0ZW4gbWFkZSB1cCBvZiBzZXZlcmFs
IGluZGl2aWR1YWwKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVNl
c3Npb25TdGF0ZUNoYW5nZSgpOwogICAgIHZvaWQgd2FpdFVudGlsU3RvcHBpbmcoKTsKICAgICB2
b2lkIHVwZGF0ZVN0YWdlUGFyYW1ldGVycygpOworICAgIHZvaWQgdXBkYXRlSW50ZXJhY3Rpb25Q
cm9maWxlKCk7CiAgICAgTGF5ZXJIYW5kbGUgZ2VuZXJhdGVMYXllckhhbmRsZSgpIHsgcmV0dXJu
ICsrbV9oYW5kbGVJbmRleDsgfQogCiAgICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlOwpAQCAtOTMs
NiArOTUsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxYclZpZXc+IG1fZnJhbWVWaWV3czsKICAg
ICBIYXNoTWFwPExheWVySGFuZGxlLCBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSTGF5ZXI+PiBtX2xh
eWVyczsKICAgICBMYXllckhhbmRsZSBtX2hhbmRsZUluZGV4IHsgMCB9OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxPcGVuWFJJbnB1dD4gbV9pbnB1dDsKKyAgICBib29sIGRpZE5vdGlmeUlucHV0SW5p
dGlhbGl6YXRpb24geyBmYWxzZSB9OwogCiAgICAgdXNpbmcgVmlld0NvbmZpZ3VyYXRpb25Qcm9w
ZXJ0aWVzTWFwID0gSGFzaE1hcDxYclZpZXdDb25maWd1cmF0aW9uVHlwZSwgWHJWaWV3Q29uZmln
dXJhdGlvblByb3BlcnRpZXMsIEludEhhc2g8WHJWaWV3Q29uZmlndXJhdGlvblR5cGU+LCBXVEY6
OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlPj47CiAgICAgVmll
d0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzTWFwIG1fdmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVz
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429155</attachid>
            <date>2021-05-20 04:11:20 -0700</date>
            <delta_ts>2021-05-24 04:14:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224931-20210520131119.patch</filename>
            <type>text/plain</type>
            <size>45421</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3Nzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjM4NzI4ZDZmYjVmYzY1
ODY4NzE2ZTBjNTk2ODQxNDU4OGQxZmZmMS4uNTU0ZTczYzdiMzdjZmNiNDczZGEzNmJlNDNjMTVl
NDAwNWZmNzdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBPcGVuWFIgaW5wdXQgc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDogQWRkIE9wZW5YUklucHV0IGFuZCBPcGVuWFJJ
bnB1dFNvdXJjZSBmaWxlcworCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmNwcDogRW50cnkgcG9pbnQgdG8gcXVlcnkgYW5kIHN5bmMgaW5wdXQgaW4gT3BlblhSLgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXQ6OmNyZWF0ZSk6CisgICAgICAgIChQbGF0
Zm9ybVhSOjpPcGVuWFJJbnB1dDo6T3BlblhSSW5wdXQpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5w
dXQ6OmdldElucHV0U291cmNlcyBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJ
bnB1dDo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5wdXQuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oOiBNYXBwaW5nIGRlZmluaXRpb24gZm9yIHN1cHBvcnRl
ZCBpbnB1dCBwcm9maWxlcy4KKyAgICAgICAgKFBsYXRmb3JtWFI6OmJ1dHRvblR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpheGlzVHlwZXRvU3RyaW5nKToKKworICAgICAgICAq
IHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHA6IEhhbmRsZXMgdHJhY2tp
bmcgYW5kIHN0YXR1cyBvZiBhIHNwZWNpZmljIGlucHV0IHNvdXJjZS4KKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNvdXJjZSk6CisgICAgICAgIChQbGF0Zm9y
bVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChQbGF0Zm9ybVhS
OjpPcGVuWFJJbnB1dFNvdXJjZTo6c3VnZ2VzdEJpbmRpbmdzIGNvbnN0KToKKyAgICAgICAgKFBs
YXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRJbnB1dFNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGVTcGFj
ZUFjdGlvbiBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6
Y3JlYXRlQWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291
cmNlOjpjcmVhdGVCdXR0b25BY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9w
ZW5YUklucHV0U291cmNlOjpjcmVhdGVCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24gY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEF4aXMgY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuaDogQWRkZWQuCisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6T3BlblhSSW5wdXRTb3VyY2UpOgorICAg
ICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmFjdGlvblNldCBjb25zdCk6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaDoKKyAgICAgICAgKFBs
YXRmb3JtWFI6OlhyUG9zZUlkZW50aXR5KTogQ3JlYXRlcyBhIGlkZW50aXR5IHBvc2UuCisgICAg
ICAgIChQbGF0Zm9ybVhSOjpoYW5kZW5lc3NUb1N0cmluZyk6IENvbnZlcnQgZnJvbSBoYW5kZW5l
c3MgZW51bSB0byBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZv
cm1YUk9wZW5YUi5jcHA6IEhhbmRsZSBpbnB1dCBzb3VyY2VzIGluIHRoZSBPcGVuWFIgcmVuZGVy
IGxvb3AuCisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFj
a2luZ0FuZFJlbmRlcmluZyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJl
cXVlc3RGcmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnBvbGxFdmVu
dHMpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24pOgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmg6CisK
IDIwMjEtMDUtMjAgIEZlbGlwZSBFcmlhcyAgPGZlbGlwZWVyaWFzQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW2Nzcy1mbGV4Ym94XSBXcm9uZyBoZWlnaHQgb2YgYW4gZW1wdHkgdGFibGUgaW5zaWRl
IGFuIG9ydGhvZ29uYWwgZmxleCBwYXJlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMmY2NjA1YzEwMGFm
YmJkM2Q5OWJiOTJhMDM0ZWM2ODA0M2FmNzA5Zi4uOTdjZTU0NzMyMWRjMzdjYmQyNTc1OGY0ZmE2
MzkwZjc0MTJkYTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyMDMsNiArMjIwMyw4IEBAIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCiBwbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorcGxhdGZvcm0veHIvb3BlbnhyL09w
ZW5YUklucHV0LmNwcCBAbm8tdW5pZnkKK3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNv
dXJjZS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5zdGFuY2UuY3Bw
IEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuY3BwIEBuby11
bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkxheWVyLmNwcCBAbm8tdW5pZnkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3
MDlmZjc3YWFmY2UxMmRhOGRiZWE4Njk2NWI3OTJiMzZmMjc1MjBhLi45Mjg4MTc5N2I0NzkzYmVk
M2FlNTEwNmIyZDZkYWIyZDM3MjU1N2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDAzLDYgKzY0MDMsMTEgQEAKIAkJMTE2
M0Y4MjMyNEU1RDU5QjAwMEFCOTYwIC8qIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29w
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTY0OEI0MTI2MEEzRjZDMDA0
QUYxRjIgLyogSlNXZWJYUlJpZ2lkVHJhbnNmb3JtQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViWFJSaWdpZFRyYW5zZm9ybUN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExNjQ4QjQzMjYwQTNGNkMwMDRBRjFGMiAvKiBK
U1dlYlhSVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYlhSVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTEx
ODBGN0ZFMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTExODBGODAwMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dE1hcHBpbmdzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0TWFwcGluZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5YUklucHV0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE9wZW5YUklucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPcGVuWFJJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTEx
ODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPcGVuWFJJbnB1dFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
MThCMDY4NjI1RTQxRTUxMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJFeHRlbnNpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE4QjA2ODgyNUU0MUU1MjAwNzBCRTRCIC8qIE9wZW5Y
UkV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BlblhSRXh0
ZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMThCMDY4OTI1RTQxRTUy
MDA3MEJFNEIgLyogT3BlblhSSW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3BlblhSSW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjkyMDIsNiArMjkyMDcsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOEIwNjg2
MjVFNDFFNTEwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25zLmNwcCAqLywKIAkJCQkxMThCMDY4
ODI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9ucy5oICovLAorCQkJCTExODBGODAy
MjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAgKi8sCisJCQkJMTE4MEY4MDEyNjMx
Q0Q5MzAwMDBFNjI0IC8qIE9wZW5YUklucHV0LmggKi8sCisJCQkJMTE4MEY4MDAyNjMxQ0Q5MjAw
MDBFNjI0IC8qIE9wZW5YUklucHV0TWFwcGluZ3MuaCAqLywKKwkJCQkxMTgwRjdGRTI2MzFDRDky
MDAwMEU2MjQgLyogT3BlblhSSW5wdXRTb3VyY2UuY3BwICovLAorCQkJCTExODBGODAzMjYzMUNE
OTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5oICovLAogCQkJCTExOEIwNjg5MjVFNDFF
NTIwMDcwQkU0QiAvKiBPcGVuWFJJbnN0YW5jZS5jcHAgKi8sCiAJCQkJMTE4QjA2OEEyNUU0MUU1
MzAwNzBCRTRCIC8qIE9wZW5YUlV0aWxzLmggKi8sCiAJCQkJRTFDMUEzOUIyNDgwMDgwNjAwRTBB
RjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhlZmQ2MGJjMTAx
MDkwZmVjNzg3Y2UzODVlZGIwYjZjOTE1NGEwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKQEAgLTAsMCArMSwxMDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVT
RShPUEVOWFIpCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3VyY2UuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKworc3RkOjp1bmlxdWVfcHRy
PE9wZW5YUklucHV0PiBPcGVuWFJJbnB1dDo6Y3JlYXRlKFhySW5zdGFuY2UgaW5zdGFuY2UsIFhy
U2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNlKQoreworICAgIGF1dG8gaW5wdXQgPSBzdGQ6
OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXQ+KG5ldyBPcGVuWFJJbnB1dChpbnN0YW5jZSwgc2Vzc2lv
biwgc3BhY2UpKTsKKyAgICBpZiAoWFJfRkFJTEVEKGlucHV0LT5pbml0aWFsaXplKCkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5wdXQ7Cit9CisKK09wZW5YUklucHV0
OjpPcGVuWFJJbnB1dChYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Npb24gc2Vzc2lvbiwgWHJT
cGFjZSBzcGFjZSkKKyAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgLCBtX3Nlc3Npb24o
c2Vzc2lvbikKKyAgICAsIG1fbG9jYWxTcGFjZShzcGFjZSkKK3sKK30KKworWHJSZXN1bHQgT3Bl
blhSSW5wdXQ6OmluaXRpYWxpemUoKQoreworICAgIHN0ZDo6YXJyYXk8WFJIYW5kZWRuZXNzLCAy
PiBoYW5kcyB7CisgICAgICAgIFhSSGFuZGVkbmVzczo6TGVmdCwgWFJIYW5kZWRuZXNzOjpSaWdo
dAorICAgIH07CisKKyAgICBmb3IgKGF1dG8gaGFuZGVuZXNzIDogaGFuZHMpIHsKKyAgICAgICAg
bV9oYW5kbGVJbmRleCsrOzsKKyAgICAgICAgaWYgKGF1dG8gaW5wdXRTb3VyY2UgPSBPcGVuWFJJ
bnB1dFNvdXJjZTo6Y3JlYXRlKG1faW5zdGFuY2UsIG1fc2Vzc2lvbiwgaGFuZGVuZXNzLCBtX2hh
bmRsZUluZGV4KSkKKyAgICAgICAgICAgIG1faW5wdXRTb3VyY2VzLmFwcGVuZChtYWtlVW5pcXVl
UmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShpbnB1dFNvdXJjZSkpKTsKKyAgICB9CisK
KyAgICBPcGVuWFJJbnB1dFNvdXJjZTo6U3VnZ2VzdGVkQmluZGluZ3MgYmluZGluZ3M7CisgICAg
VmVjdG9yPFhyQWN0aW9uU2V0PiBhY3Rpb25TZXRzOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBt
X2lucHV0U291cmNlcykgeworICAgICAgICBpbnB1dC0+c3VnZ2VzdEJpbmRpbmdzKGJpbmRpbmdz
KTsKKyAgICAgICAgYWN0aW9uU2V0cy5hcHBlbmQoaW5wdXQtPmFjdGlvblNldCgpKTsKKyAgICB9
CisgICAgCisgICAgZm9yIChhdXRvJiBiaW5kaW5nIDogYmluZGluZ3MpIHsKKyAgICAgICAgYXV0
byBzdWdnZXN0ZWRCaW5kaW5nID0gY3JlYXRlU3RydWN0dXJlPFhySW50ZXJhY3Rpb25Qcm9maWxl
U3VnZ2VzdGVkQmluZGluZywgWFJfVFlQRV9JTlRFUkFDVElPTl9QUk9GSUxFX1NVR0dFU1RFRF9C
SU5ESU5HPigpOworICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4clN0cmluZ1RvUGF0
aChtX2luc3RhbmNlLCBiaW5kaW5nLmtleSwgJnN1Z2dlc3RlZEJpbmRpbmcuaW50ZXJhY3Rpb25Q
cm9maWxlKSwgbV9pbnN0YW5jZSk7CisgICAgICAgIHN1Z2dlc3RlZEJpbmRpbmcuY291bnRTdWdn
ZXN0ZWRCaW5kaW5ncyA9IGJpbmRpbmcudmFsdWUuc2l6ZSgpOworICAgICAgICBzdWdnZXN0ZWRC
aW5kaW5nLnN1Z2dlc3RlZEJpbmRpbmdzID0gYmluZGluZy52YWx1ZS5kYXRhKCk7CisgICAgICAg
IFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyU3VnZ2VzdEludGVyYWN0aW9uUHJvZmlsZUJpbmRp
bmdzKG1faW5zdGFuY2UsICZzdWdnZXN0ZWRCaW5kaW5nKSwgbV9pbnN0YW5jZSk7CisgICAgfQor
CisgICAgYXV0byBhdHRhY2hJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyU2Vzc2lvbkFjdGlvblNl
dHNBdHRhY2hJbmZvLCBYUl9UWVBFX1NFU1NJT05fQUNUSU9OX1NFVFNfQVRUQUNIX0lORk8+KCk7
CisgICAgYXR0YWNoSW5mby5jb3VudEFjdGlvblNldHMgPSBhY3Rpb25TZXRzLnNpemUoKTsKKyAg
ICBhdHRhY2hJbmZvLmFjdGlvblNldHMgPSBhY3Rpb25TZXRzLmRhdGEoKTsKKyAgICBSRVRVUk5f
UkVTVUxUX0lGX0ZBSUxFRCh4ckF0dGFjaFNlc3Npb25BY3Rpb25TZXRzKG1fc2Vzc2lvbiwgJmF0
dGFjaEluZm8pLCBtX2luc3RhbmNlKTsKKworICAgIHJldHVybiBYUl9TVUNDRVNTOworfQorCitW
ZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiBPcGVuWFJJbnB1dDo6Z2V0SW5w
dXRTb3VyY2VzKGNvbnN0IFhyRnJhbWVTdGF0ZSYgZnJhbWVTdGF0ZSkgY29uc3QKK3sKKyAgICBW
ZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiByZXN1bHQ7CisKKyAgICBWZWN0
b3I8WHJBY3RpdmVBY3Rpb25TZXQ+IGFjdGlvblNldHM7CisgICAgZm9yIChhdXRvJiBpbnB1dCA6
IG1faW5wdXRTb3VyY2VzKQorICAgICAgICBhY3Rpb25TZXRzLmFwcGVuZChYckFjdGl2ZUFjdGlv
blNldCB7IGlucHV0LT5hY3Rpb25TZXQoKSwgWFJfTlVMTF9QQVRIIH0pOworCisgICAgYXV0byBz
eW5jSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvbnNTeW5jSW5mbywgWFJfVFlQRV9BQ1RJ
T05TX1NZTkNfSU5GTz4oKTsKKyAgICBzeW5jSW5mby5jb3VudEFjdGl2ZUFjdGlvblNldHMgPSBh
Y3Rpb25TZXRzLnNpemUoKTsKKyAgICBzeW5jSW5mby5hY3RpdmVBY3Rpb25TZXRzID0gYWN0aW9u
U2V0cy5kYXRhKCk7CisgICAgUkVUVVJOX0lGX0ZBSUxFRCh4clN5bmNBY3Rpb25zKG1fc2Vzc2lv
biwgJnN5bmNJbmZvKSwgInhyU3luY0FjdGlvbnMiLCBtX2luc3RhbmNlLCByZXN1bHQpOworCisg
ICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRTb3VyY2VzKSB7CisgICAgICAgIGlmIChhdXRv
IGRhdGEgPSBpbnB1dC0+Z2V0SW5wdXRTb3VyY2UobV9sb2NhbFNwYWNlLCBmcmFtZVN0YXRlKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKmRhdGEpOworICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgT3BlblhSSW5wdXQ6OnVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgp
Cit7CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRTb3VyY2VzKQorICAgICAgICBpbnB1
dC0+dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBsYXRm
b3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGMyODcyYjQ1ODQyZjYzN2QzYzUzZjA5ZDU0NjVhYjNjZDhjOGUzYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5oCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKKyNpbmNsdWRlICJP
cGVuWFJJbnB1dE1hcHBpbmdzLmgiCisjaW5jbHVkZSAiT3BlblhSVXRpbHMuaCIKKworI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFBsYXRmb3JtWFIgeworCitjbGFzcyBPcGVuWFJJbnB1dFNvdXJjZTsKKworY2xhc3MgT3Bl
blhSSW5wdXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE9wZW5YUklucHV0KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPE9wZW5YUklucHV0PiBjcmVhdGUoWHJJbnN0YW5jZSwgWHJTZXNzaW9uLCBYclNwYWNlKTsK
KworICAgIFZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IGdldElucHV0U291
cmNlcyhjb25zdCBYckZyYW1lU3RhdGUmKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUludGVyYWN0
aW9uUHJvZmlsZSgpOworCitwcml2YXRlOgorICAgIE9wZW5YUklucHV0KFhySW5zdGFuY2UsIFhy
U2Vzc2lvbiwgWHJTcGFjZSk7CisgICAgWHJSZXN1bHQgaW5pdGlhbGl6ZSgpOworCisgICAgWHJJ
bnN0YW5jZSBtX2luc3RhbmNlIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBYclNlc3Npb24gbV9z
ZXNzaW9uIHsgWFJfTlVMTF9IQU5ETEUgfTsgCisgICAgWHJTcGFjZSBtX2xvY2FsU3BhY2UgeyBY
Ul9OVUxMX0hBTkRMRSB9OworICAgIFZlY3RvcjxVbmlxdWVSZWY8T3BlblhSSW5wdXRTb3VyY2U+
PiBtX2lucHV0U291cmNlczsKKyAgICBJbnB1dFNvdXJjZUhhbmRsZSBtX2hhbmRsZUluZGV4IHsg
MCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dE1hcHBpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk2MzFjNjM2
ZDExYzQ0MmJiNWViYTJmMzcxOWNlZTAyZjRmNWNlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dE1hcHBpbmdzLmgKQEAgLTAs
MCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKKyNpbmNsdWRlIDxh
cnJheT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFBsYXRm
b3JtWFIgeworCit1c2luZyBPcGVuWFJQcm9maWxlSWQgPSBjb25zdCBjaGFyKiBjb25zdDsKK3Vz
aW5nIE9wZW5YUkJ1dHRvblBhdGggPSBjb25zdCBjaGFyKiBjb25zdDsKKworZW51bSBjbGFzcyBP
cGVuWFJCdXR0b25UeXBlIHsKKyAgICBUcmlnZ2VyLAorICAgIFNxdWVlemUsCisgICAgVG91Y2hw
YWQsCisgICAgVGh1bWJzdGljaywKKyAgICBUaHVtYnJlc3QsCisgICAgQnV0dG9uQSwKKyAgICBC
dXR0b25CCit9OworCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJCdXR0b25UeXBlLCA3PiBP
cGVuWFJCdXR0b25UeXBlcyB7CisgICAgT3BlblhSQnV0dG9uVHlwZTo6VHJpZ2dlciwgT3BlblhS
QnV0dG9uVHlwZTo6U3F1ZWV6ZSwgT3BlblhSQnV0dG9uVHlwZTo6VG91Y2hwYWQsIE9wZW5YUkJ1
dHRvblR5cGU6OlRodW1ic3RpY2ssIE9wZW5YUkJ1dHRvblR5cGU6OlRodW1icmVzdCwKKyAgICBP
cGVuWFJCdXR0b25UeXBlOjpCdXR0b25BLCBPcGVuWFJCdXR0b25UeXBlOjpCdXR0b25CCit9Owor
CitpbmxpbmUgU3RyaW5nIGJ1dHRvblR5cGVUb1N0cmluZyhPcGVuWFJCdXR0b25UeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBPcGVuWFJCdXR0b25UeXBlOjpUcmln
Z2VyOiByZXR1cm4gInRyaWdnZXIiOworICAgIGNhc2UgT3BlblhSQnV0dG9uVHlwZTo6U3F1ZWV6
ZTogcmV0dXJuICJzcXVlZXplIjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRvblR5cGU6OlRvdWNocGFk
OiByZXR1cm4gInRvdWNocGFkIjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRvblR5cGU6OlRodW1ic3Rp
Y2s6IHJldHVybiAidGh1bWJzdGljayI7CisgICAgY2FzZSBPcGVuWFJCdXR0b25UeXBlOjpUaHVt
YnJlc3Q6IHJldHVybiAidGh1bWJyZXN0IjsKKyAgICBjYXNlIE9wZW5YUkJ1dHRvblR5cGU6OkJ1
dHRvbkE6IHJldHVybiAiYnV0dG9uYSI7CisgICAgY2FzZSBPcGVuWFJCdXR0b25UeXBlOjpCdXR0
b25COiByZXR1cm4gImJ1dHRvbmIiOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisKK3N0cnVjdCBPcGVu
WFJCdXR0b24geworICAgIE9wZW5YUkJ1dHRvblR5cGUgdHlwZTsKKyAgICBPcGVuWFJCdXR0b25Q
YXRoIHByZXNzIHsgbnVsbHB0ciB9OworICAgIE9wZW5YUkJ1dHRvblBhdGggdG91Y2ggeyBudWxs
cHRyIH07CisgICAgT3BlblhSQnV0dG9uUGF0aCB2YWx1ZSB7IG51bGxwdHIgfTsKK307CisKK2Vu
dW0gY2xhc3MgT3BlblhSQXhpc1R5cGUgeworICAgIFRvdWNocGFkLAorICAgIFRodW1ic3RpY2sK
K307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5YUkF4aXNUeXBlLCAyPiBPcGVuWFJBeGlz
VHlwZXMgeworICAgIE9wZW5YUkF4aXNUeXBlOjpUb3VjaHBhZCwgT3BlblhSQXhpc1R5cGU6OlRo
dW1ic3RpY2sKK307CisKK2lubGluZSBTdHJpbmcgYXhpc1R5cGV0b1N0cmluZyhPcGVuWFJBeGlz
VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgT3BlblhSQXhpc1R5
cGU6OlRvdWNocGFkOiByZXR1cm4gInRvdWNocGFkIjsKKyAgICBjYXNlIE9wZW5YUkF4aXNUeXBl
OjpUaHVtYnN0aWNrOiByZXR1cm4gInRodW1ic3RpY2siOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorfQorCitz
dHJ1Y3QgT3BlblhSQXhpcyB7CisgICAgT3BlblhSQXhpc1R5cGUgdHlwZTsKKyAgICBPcGVuWFJC
dXR0b25QYXRoIHBhdGg7Cit9OyAKKworc3RydWN0IE9wZW5YUklucHV0UHJvZmlsZSB7CisgICAg
Y29uc3QgY2hhciogY29uc3QgcGF0aCB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBPcGVuWFJQcm9m
aWxlSWQqIHByb2ZpbGVJZHMgeyBudWxscHRyIH07CisgICAgc2l6ZV90IHByb2ZpbGVJZHNTaXpl
IHsgMCB9OworICAgIGNvbnN0IE9wZW5YUkJ1dHRvbiogbGVmdEJ1dHRvbnMgeyBudWxscHRyIH07
CisgICAgc2l6ZV90IGxlZnRCdXR0b25zU2l6ZSB7IDAgfTsKKyAgICBjb25zdCBPcGVuWFJCdXR0
b24qIHJpZ2h0QnV0dG9ucyB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgcmlnaHRCdXR0b25zU2l6
ZSB7IDAgfTsKKyAgICBjb25zdCBPcGVuWFJBeGlzKiBheGVzIHsgbnVsbHB0ciB9OworICAgIHNp
emVfdCBheGVzU2l6ZSB7IDAgfTsKK307CisKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pbW1lcnNp
dmUtd2ViL3dlYnhyLWlucHV0LXByb2ZpbGVzL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3JlZ2lzdHJ5
L3Byb2ZpbGVzL2h0Yy9odGMtdml2ZS5qc29uCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJQ
cm9maWxlSWQsIDI+IEhUQ1ZpdmVQcm9maWxlSWRzIHsgImh0Yy12aXZlIiwgImdlbmVyaWMtdHJp
Z2dlci1zcXVlZXplLXRvdWNocGFkIiB9OworCitjb25zdGV4cHIgc3RkOjphcnJheTxPcGVuWFJC
dXR0b24sIDM+IEhUQ1ZpdmVCdXR0b25zIHsKKyAgICBPcGVuWFJCdXR0b24geyAudHlwZSA9IE9w
ZW5YUkJ1dHRvblR5cGU6OlRyaWdnZXIsIC5wcmVzcyA9ICIvaW5wdXQvdHJpZ2dlci9jbGljayIs
IC52YWx1ZSA9ICIvaW5wdXQvdHJpZ2dlci92YWx1ZSIgfSwKKyAgICBPcGVuWFJCdXR0b24geyAu
dHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlNxdWVlemUsIC5wcmVzcyA9ICIvaW5wdXQvc3F1ZWV6
ZS9jbGljayIgfSwKKyAgICBPcGVuWFJCdXR0b24geyAudHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6
OlRvdWNocGFkLCAucHJlc3MgPSAiL2lucHV0L3RyYWNrcGFkL2NsaWNrIiwgLnRvdWNoID0gIi9p
bnB1dC90cmFja3BhZC90b3VjaCIgfQorfTsKKworY29uc3RleHByIHN0ZDo6YXJyYXk8T3BlblhS
QXhpcywgMT4gSFRDVml2ZUF4ZXMgeworICAgIHsgT3BlblhSQXhpc1R5cGU6OlRvdWNocGFkLCAi
L2lucHV0L3RyYWNrcGFkIiB9Cit9OworCitjb25zdGV4cHIgT3BlblhSSW5wdXRQcm9maWxlIEhU
Q1ZpdmVJbnB1dFByb2ZpbGUgeworICAgICIvaW50ZXJhY3Rpb25fcHJvZmlsZXMvaHRjL3ZpdmVf
Y29udHJvbGxlciIsCisgICAgSFRDVml2ZVByb2ZpbGVJZHMuZGF0YSgpLAorICAgIEhUQ1ZpdmVQ
cm9maWxlSWRzLnNpemUoKSwKKyAgICBIVENWaXZlQnV0dG9ucy5kYXRhKCksCisgICAgSFRDVml2
ZUJ1dHRvbnMuc2l6ZSgpLAorICAgIEhUQ1ZpdmVCdXR0b25zLmRhdGEoKSwKKyAgICBIVENWaXZl
QnV0dG9ucy5zaXplKCksCisgICAgSFRDVml2ZUF4ZXMuZGF0YSgpLAorICAgIEhUQ1ZpdmVBeGVz
LnNpemUoKQorfTsKKworLy8gRGVmYXVsdCBmYWxsYmFjayB3aGVuIHRocmUgaXNuJ3QgYSBzcGVj
aWZpYyBjb250cm9sbGVyIGJpbmRpbmcuCitjb25zdGV4cHIgc3RkOjphcnJheTxjb25zdCBjaGFy
KiwgMT4gS0hSU2ltcGxlUHJvZmlsZUlkcyB7ICJnZW5lcmljLWJ1dHRvbiIgfTsKKworY29uc3Rl
eHByIHN0ZDo6YXJyYXk8T3BlblhSQnV0dG9uLCAxPiBLSFJTaW1wbGVCdXR0b25zIHsKKyAgICBP
cGVuWFJCdXR0b24geyAudHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlRyaWdnZXIsIC5wcmVzcyA9
ICIvaW5wdXQvc2VsZWN0L2NsaWNrIiB9Cit9OworCitjb25zdGV4cHIgT3BlblhSSW5wdXRQcm9m
aWxlIEtIUlNpbXBsZUlucHV0UHJvZmlsZSB7CisgICAgIi9pbnRlcmFjdGlvbl9wcm9maWxlcy9r
aHIvc2ltcGxlX2NvbnRyb2xsZXIiLAorICAgIEtIUlNpbXBsZVByb2ZpbGVJZHMuZGF0YSgpLAor
ICAgIEtIUlNpbXBsZVByb2ZpbGVJZHMuc2l6ZSgpLAorICAgIEtIUlNpbXBsZUJ1dHRvbnMuZGF0
YSgpLAorICAgIEtIUlNpbXBsZUJ1dHRvbnMuc2l6ZSgpLAorICAgIEtIUlNpbXBsZUJ1dHRvbnMu
ZGF0YSgpLAorICAgIEtIUlNpbXBsZUJ1dHRvbnMuc2l6ZSgpLAorICAgIG51bGxwdHIsCisgICAg
MAorfTsKKworY29uc3RleHByIHN0ZDo6YXJyYXk8T3BlblhSSW5wdXRQcm9maWxlLCAyPiBPcGVu
WFJJbnB1dFByb2ZpbGVzIHsgSFRDVml2ZUlucHV0UHJvZmlsZSwgS0hSU2ltcGxlSW5wdXRQcm9m
aWxlIH07CisKK30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYmRhYjFiNTg3
MmUzOTFhYjU4ODg1MmY1NTQwYzk0YjQzODY1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3BwCkBAIC0wLDAg
KzEsMzg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuWFJJbnB1dFNvdXJjZS5oIgorCisjaWYgRU5BQkxF
KFdFQlhSKSAmJiBVU0UoT1BFTlhSKQorCitjb25zdGV4cHIgY29uc3QgY2hhciogT1BFTlhSX0lO
UFVUX0hBTkRfUEFUSCB7ICIvdXNlci9oYW5kLyIgfTsKK2NvbnN0ZXhwciBjb25zdCBjaGFyKiBP
UEVOWFJfSU5QVVRfR1JJUF9QQVRIIHsgIi9pbnB1dC9ncmlwL3Bvc2UiIH07Citjb25zdGV4cHIg
Y29uc3QgY2hhciogT1BFTlhSX0lOUFVUX0FJTV9QQVRIIHsgIi9pbnB1dC9haW0vcG9zZSIgfTsK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKwor
c3RkOjp1bmlxdWVfcHRyPE9wZW5YUklucHV0U291cmNlPiBPcGVuWFJJbnB1dFNvdXJjZTo6Y3Jl
YXRlKFhySW5zdGFuY2UgaW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYUkhhbmRlZG5lc3Mg
aGFuZGVuZXNzLCBJbnB1dFNvdXJjZUhhbmRsZSBoYW5kbGUpCit7CisgICAgYXV0byBpbnB1dCA9
IHN0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJbnB1dFNvdXJjZT4obmV3IE9wZW5YUklucHV0U291cmNl
KGluc3RhbmNlLCBzZXNzaW9uLCBoYW5kZW5lc3MsIGhhbmRsZSkpOworICAgIGlmIChYUl9GQUlM
RUQoaW5wdXQtPmluaXRpYWxpemUoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBpbnB1dDsKK30KKworT3BlblhSSW5wdXRTb3VyY2U6Ok9wZW5YUklucHV0U291cmNlKFhy
SW5zdGFuY2UgaW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYUkhhbmRlZG5lc3MgaGFuZGVu
ZXNzLCBJbnB1dFNvdXJjZUhhbmRsZSBoYW5kbGUpCisgICAgOiBtX2luc3RhbmNlKGluc3RhbmNl
KQorICAgICwgbV9zZXNzaW9uKHNlc3Npb24pCisgICAgLCBtX2hhbmRlbmVzcyhoYW5kZW5lc3Mp
CisgICAgLCBtX2hhbmRsZShoYW5kbGUpCit7Cit9CisKK09wZW5YUklucHV0U291cmNlOjp+T3Bl
blhSSW5wdXRTb3VyY2UoKQoreworICAgIGlmIChtX2FjdGlvblNldCAhPSBYUl9OVUxMX0hBTkRM
RSkKKyAgICAgICAgeHJEZXN0cm95QWN0aW9uU2V0KG1fYWN0aW9uU2V0KTsKKyAgICBpZiAobV9n
cmlwU3BhY2UgIT0gWFJfTlVMTF9IQU5ETEUpCisgICAgICAgIHhyRGVzdHJveVNwYWNlKG1fZ3Jp
cFNwYWNlKTsKKyAgICBpZiAobV9wb2ludGVyU3BhY2UgIT0gWFJfTlVMTF9IQU5ETEUpCisgICAg
ICAgIHhyRGVzdHJveVNwYWNlKG1fcG9pbnRlclNwYWNlKTsKK30KKworWHJSZXN1bHQgT3BlblhS
SW5wdXRTb3VyY2U6OmluaXRpYWxpemUoKQoreworICAgIFN0cmluZyBoYW5kZW5lc3NOYW1lID0g
aGFuZGVuZXNzVG9TdHJpbmcobV9oYW5kZW5lc3MpOworICAgIG1fc3ViYWN0aW9uUGF0aE5hbWUg
PSBPUEVOWFJfSU5QVVRfSEFORF9QQVRIICsgaGFuZGVuZXNzTmFtZTsKKyAgICBSRVRVUk5fUkVT
VUxUX0lGX0ZBSUxFRCh4clN0cmluZ1RvUGF0aChtX2luc3RhbmNlLCBtX3N1YmFjdGlvblBhdGhO
YW1lLnV0ZjgoKS5kYXRhKCksICZtX3N1YmFjdGlvblBhdGgpLCBtX2luc3RhbmNlKTsKKworICAg
IC8vIEluaXRpYWxpemUgQWN0aW9uIFNldAorICAgIFN0cmluZyBwcmVmaXggPSAiaW5wdXRfIiAr
IGhhbmRlbmVzc05hbWU7CisgICAgU3RyaW5nIGFjdGlvblNldE5hbWUgPSBwcmVmaXggKyAiX2Fj
dGlvbl9zZXQiOworICAgIGF1dG8gY3JlYXRlSW5mbyA9ICBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rp
b25TZXRDcmVhdGVJbmZvLCBYUl9UWVBFX0FDVElPTl9TRVRfQ1JFQVRFX0lORk8+KCk7CisgICAg
c3RkOjpzdHJuY3B5KGNyZWF0ZUluZm8uYWN0aW9uU2V0TmFtZSwgYWN0aW9uU2V0TmFtZS51dGY4
KCkuZGF0YSgpLCBYUl9NQVhfQUNUSU9OX1NFVF9OQU1FX1NJWkUgLSAxKTsKKyAgICBzdGQ6OnN0
cm5jcHkoY3JlYXRlSW5mby5sb2NhbGl6ZWRBY3Rpb25TZXROYW1lLCBhY3Rpb25TZXROYW1lLnV0
ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOworCisgICAgUkVU
VVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJDcmVhdGVBY3Rpb25TZXQobV9pbnN0YW5jZSwgJmNyZWF0
ZUluZm8sICZtX2FjdGlvblNldCksIG1faW5zdGFuY2UpOworCisgICAgLy8gSW5pdGlhbGl6ZSBw
b3NlIGFjdGlvbnMgYW5kIHNwYWNlcworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0
ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9QT1NFX0lOUFVULCBwcmVmaXggKyAiX2dyaXAiLCBtX2dy
aXBBY3Rpb24pLCBtX2luc3RhbmNlKTsKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVh
dGVTcGFjZUFjdGlvbihtX2dyaXBBY3Rpb24sIG1fZ3JpcFNwYWNlKSwgbV9pbnN0YW5jZSk7Cisg
ICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX1BP
U0VfSU5QVVQsIHByZWZpeCArICJfcG9pbnRlciIsIG1fcG9pbnRlckFjdGlvbiksIG1faW5zdGFu
Y2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZVNwYWNlQWN0aW9uKG1fcG9p
bnRlckFjdGlvbiwgbV9wb2ludGVyU3BhY2UpLCBtX2luc3RhbmNlKTsKKworICAgIC8vIEluaXRp
YWxpemUgYnV0dG9uIGFjdGlvbnMKKyAgICBmb3IgKGF1dG8gYnV0dG9uVHlwZSA6IE9wZW5YUkJ1
dHRvblR5cGVzKSB7CisgICAgICAgIE9wZW5YUkJ1dHRvbkFjdGlvbnMgYWN0aW9uczsKKyAgICAg
ICAgY3JlYXRlQnV0dG9uQWN0aW9ucyhidXR0b25UeXBlLCBwcmVmaXgsIGFjdGlvbnMpOworICAg
ICAgICBtX2J1dHRvbkFjdGlvbnMuYWRkKGJ1dHRvblR5cGUsIGFjdGlvbnMpOworICAgIH0KKwor
ICAgIC8vIEluaXRpYWxpemUgYXhlcworICAgIGZvciAoYXV0byBheGlzVHlwZSA6IE9wZW5YUkF4
aXNUeXBlcykgeworICAgICAgICBYckFjdGlvbiBheGlzQWN0aW9uID0gWFJfTlVMTF9IQU5ETEU7
CisgICAgICAgIFN0cmluZyBuYW1lID0gcHJlZml4ICsgIl9heGlzXyIgKyBheGlzVHlwZXRvU3Ry
aW5nKGF4aXNUeXBlKTsKKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0
aW9uKFhSX0FDVElPTl9UWVBFX1ZFQ1RPUjJGX0lOUFVULCBuYW1lLCBheGlzQWN0aW9uKSwgbV9p
bnN0YW5jZSwgZmFsc2UpOworICAgICAgICBtX2F4aXNBY3Rpb25zLmFkZChheGlzVHlwZSwgYXhp
c0FjdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKK1hyUmVzdWx0
IE9wZW5YUklucHV0U291cmNlOjpzdWdnZXN0QmluZGluZ3MoU3VnZ2VzdGVkQmluZGluZ3MmIGJp
bmRpbmdzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgcHJvZmlsZSA6IE9wZW5YUklucHV0UHJv
ZmlsZXMpIHsKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5kaW5nIGZvciBwb3NlIGFjdGlvbnMKKyAg
ICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgs
IG1fZ3JpcEFjdGlvbiwgbV9zdWJhY3Rpb25QYXRoTmFtZSArIE9QRU5YUl9JTlBVVF9HUklQX1BB
VEgsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJ
TEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBtX3BvaW50ZXJBY3Rpb24sIG1fc3ViYWN0
aW9uUGF0aE5hbWUgKyBPUEVOWFJfSU5QVVRfQUlNX1BBVEgsIGJpbmRpbmdzKSwgbV9pbnN0YW5j
ZSk7CisKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5kaW5nIGZvciBidXR0b24gYWN0aW9ucworICAg
ICAgICBjb25zdCBPcGVuWFJCdXR0b24qIGJ1dHRvbnM7CisgICAgICAgIHNpemVfdCBidXR0b25z
U2l6ZTsKKyAgICAgICAgaWYgKG1faGFuZGVuZXNzID09IFhSSGFuZGVkbmVzczo6TGVmdCkgewor
ICAgICAgICAgICAgYnV0dG9ucyA9IHByb2ZpbGUubGVmdEJ1dHRvbnM7CisgICAgICAgICAgICBi
dXR0b25zU2l6ZSA9IHByb2ZpbGUubGVmdEJ1dHRvbnNTaXplOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYnV0dG9ucyA9IHByb2ZpbGUucmlnaHRCdXR0b25zOworICAgICAgICAgICAg
YnV0dG9uc1NpemUgPSBwcm9maWxlLnJpZ2h0QnV0dG9uc1NpemU7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1dHRvbnNTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIGJ1dHRvbiA9IGJ1dHRvbnNbaV07CisgICAgICAgICAgICBjb25zdCBh
dXRvJiBhY3Rpb25zID0gbV9idXR0b25BY3Rpb25zLmdldChidXR0b24udHlwZSk7CisgICAgICAg
ICAgICBpZiAoYnV0dG9uLnByZXNzKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGlvbnMu
cHJlc3MgIT0gWFJfTlVMTF9IQU5ETEUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9SRVNVTFRf
SUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBhY3Rpb25zLnByZXNzLCBtX3N1
YmFjdGlvblBhdGhOYW1lICsgYnV0dG9uLnByZXNzLCBiaW5kaW5ncyksIG1faW5zdGFuY2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ1dHRvbi50b3VjaCkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChhY3Rpb25zLnRvdWNoICE9IFhSX05VTExfSEFORExFKTsKKyAgICAgICAg
ICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVCaW5kaW5nKHByb2ZpbGUucGF0
aCwgYWN0aW9ucy50b3VjaCwgbV9zdWJhY3Rpb25QYXRoTmFtZSArIGJ1dHRvbi50b3VjaCwgYmlu
ZGluZ3MpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChidXR0
b24udmFsdWUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aW9ucy52YWx1ZSAhPSBYUl9O
VUxMX0hBTkRMRSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3Jl
YXRlQmluZGluZyhwcm9maWxlLnBhdGgsIGFjdGlvbnMudmFsdWUsIG1fc3ViYWN0aW9uUGF0aE5h
bWUgKyBidXR0b24udmFsdWUsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBTdWdnZXN0IGJpbmRpbmcgZm9yIGF4aXMgYWN0aW9u
cworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2ZpbGUuYXhlc1NpemU7ICsraSkg
eworICAgICAgICAgICAgY29uc3QgYXV0byYgYXhpcyA9IHByb2ZpbGUuYXhlc1tpXTsKKyAgICAg
ICAgICAgIGF1dG8gYWN0aW9uID0gbV9heGlzQWN0aW9ucy5nZXQoYXhpcy50eXBlKTsKKyAgICAg
ICAgICAgIEFTU0VSVChhY3Rpb24gIT0gWFJfTlVMTF9IQU5ETEUpOworICAgICAgICAgICAgUkVU
VVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIGFjdGlvbiwg
bV9zdWJhY3Rpb25QYXRoTmFtZSArIGF4aXMucGF0aCwgYmluZGluZ3MpLCBtX2luc3RhbmNlKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBYUl9TVUNDRVNTOworfQorCitPcHRpb25h
bDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IE9wZW5YUklucHV0U291cmNlOjpnZXRJ
bnB1dFNvdXJjZShYclNwYWNlIGxvY2FsU3BhY2UsIGNvbnN0IFhyRnJhbWVTdGF0ZSYgZnJhbWVT
dGF0ZSkgY29uc3QKK3sKKyAgICBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2UgZGF0YTsK
KyAgICBkYXRhLmhhbmRlbmVzcyA9IG1faGFuZGVuZXNzOworICAgIGRhdGEuaGFuZGxlID0gbV9o
YW5kbGU7CisgICAgZGF0YS50YXJnZXRSYXlNb2RlID0gWFJUYXJnZXRSYXlNb2RlOjpUcmFja2Vk
UG9pbnRlcjsKKyAgICBkYXRhLnByb2ZpbGVzID0gbV9wcm9maWxlczsKKworICAgIC8vIFBvc2Ug
dHJhbnNmb3JtcworICAgIGdldFBvc2UobV9wb2ludGVyU3BhY2UsIGxvY2FsU3BhY2UsIGZyYW1l
U3RhdGUsIGRhdGEucG9pbnRlck9yaWdpbik7CisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0
U291cmNlUG9zZSBncmlwUG9zZTsKKyAgICBpZiAoWFJfU1VDQ0VFREVEKGdldFBvc2UobV9ncmlw
U3BhY2UsIGxvY2FsU3BhY2UsIGZyYW1lU3RhdGUsIGdyaXBQb3NlKSkpCisgICAgICAgIGRhdGEu
Z3JpcE9yaWdpbiA9IGdyaXBQb3NlOworCisgICAgLy8gQnV0dG9ucworICAgIFZlY3RvcjxPcHRp
b25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0b24+PiBidXR0b25zOworICAg
IGZvciAoYXV0byYgdHlwZSA6IE9wZW5YUkJ1dHRvblR5cGVzKSAKKyAgICAgICAgYnV0dG9ucy5h
cHBlbmQoZ2V0QnV0dG9uKHR5cGUpKTsKKworICAgIC8vIFRyaWdnZXIgaXMgbWFuZGF0b3J5IGlu
IHhyLXN0YW5kYXJkIG1hcHBpbmcuCisgICAgaWYgKGJ1dHRvbnMuaXNFbXB0eSgpIHx8ICFidXR0
b25zLmZpcnN0KCkuaGFzVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnV0dG9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoYnV0dG9uc1tpXSkgeworICAgICAgICAgICAgZGF0YS5idXR0b25zLmFwcGVuZCgqYnV0
dG9uc1tpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBB
ZGQgcGxhY2Vob2xkZXIgaWYgdGhlcmUgYXJlIG1vcmUgdmFsaWQgYnV0dG9ucyBpbiB0aGUgbGlz
dC4KKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgYnV0dG9ucy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgaWYgKGJ1dHRvbnNbal0pIHsKKyAgICAgICAgICAgICAgICBkYXRh
LmJ1dHRvbnMuYXBwZW5kKHsgfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBeGVzCisgICAgVmVjdG9yPE9wdGlvbmFs
PFhyVmVjdG9yMmY+PiBheGVzOworICAgIGZvciAoYXV0byYgdHlwZSA6IE9wZW5YUkF4aXNUeXBl
cykgCisgICAgICAgIGF4ZXMuYXBwZW5kKGdldEF4aXModHlwZSkpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBheGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChheGVzW2ldKSB7
CisgICAgICAgICAgICBkYXRhLmF4ZXMuYXBwZW5kKGF4ZXNbaV0tPngpOworICAgICAgICAgICAg
ZGF0YS5heGVzLmFwcGVuZChheGVzW2ldLT55KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIC8vIEFkZCBwbGFjZWhvbGRlciBpZiB0aGVyZSBhcmUgbW9yZSB2YWxp
ZCBheGVzIGluIHRoZSBsaXN0LgorICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBi
dXR0b25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoYXhlc1tqXSkgeworICAgICAg
ICAgICAgICAgIGRhdGEuYXhlcy5hcHBlbmQoMC4wZik7CisgICAgICAgICAgICAgICAgZGF0YS5h
eGVzLmFwcGVuZCgwLjBmKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCitYclJlc3VsdCBPcGVu
WFJJbnB1dFNvdXJjZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKCkKK3sKKyAgICBhdXRvIHN0
YXRlID0gY3JlYXRlU3RydWN0dXJlPFhySW50ZXJhY3Rpb25Qcm9maWxlU3RhdGUsIFhSX1RZUEVf
SU5URVJBQ1RJT05fUFJPRklMRV9TVEFURT4oKTsKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxF
RCh4ckdldEN1cnJlbnRJbnRlcmFjdGlvblByb2ZpbGUobV9zZXNzaW9uLCBtX3N1YmFjdGlvblBh
dGgsICZzdGF0ZSksIG1faW5zdGFuY2UpOworCisgICAgY29uc3RleHByIHVpbnQzMl90IGJ1ZmZl
clNpemUgPSAxMDA7IAorICAgIGNoYXIgYnVmZmVyW2J1ZmZlclNpemVdOworICAgIHVpbnQzMl90
IHdyaXR0ZW5Db3VudCA9IDA7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJQYXRoVG9T
dHJpbmcobV9pbnN0YW5jZSwgc3RhdGUuaW50ZXJhY3Rpb25Qcm9maWxlLCBidWZmZXJTaXplLCAm
d3JpdHRlbkNvdW50LCBidWZmZXIpLCBtX2luc3RhbmNlKTsKKworICAgIG1fcHJvZmlsZXMuY2xl
YXIoKTsKKyAgICBmb3IgKGF1dG8mIHByb2ZpbGUgOiBPcGVuWFJJbnB1dFByb2ZpbGVzKSB7Cisg
ICAgICAgIGlmICghc3RyY21wKHByb2ZpbGUucGF0aCwgYnVmZmVyKSkgeworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9maWxlLnByb2ZpbGVJZHNTaXplOyArK2kpCisgICAg
ICAgICAgICAgICAgbV9wcm9maWxlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChwcm9maWxlLnBy
b2ZpbGVJZHNbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6
OmNyZWF0ZVNwYWNlQWN0aW9uKFhyQWN0aW9uIGFjdGlvbiwgWHJTcGFjZSYgc3BhY2UpIGNvbnN0
Cit7CisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblNwYWNl
Q3JlYXRlSW5mbywgWFJfVFlQRV9BQ1RJT05fU1BBQ0VfQ1JFQVRFX0lORk8+KCk7CisgICAgY3Jl
YXRlSW5mby5hY3Rpb24gPSBhY3Rpb247CisgICAgY3JlYXRlSW5mby5zdWJhY3Rpb25QYXRoID0g
bV9zdWJhY3Rpb25QYXRoOworICAgIGNyZWF0ZUluZm8ucG9zZUluQWN0aW9uU3BhY2UgPSBYclBv
c2VJZGVudGl0eSgpOworCisgICAgcmV0dXJuIHhyQ3JlYXRlQWN0aW9uU3BhY2UobV9zZXNzaW9u
LCAmY3JlYXRlSW5mbywgJnNwYWNlKTsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6
OmNyZWF0ZUFjdGlvbihYckFjdGlvblR5cGUgYWN0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBYckFjdGlvbiYgYWN0aW9uKSBjb25zdAoreworICAgIGF1dG8gY3JlYXRlSW5mbyA9ICBjcmVh
dGVTdHJ1Y3R1cmU8WHJBY3Rpb25DcmVhdGVJbmZvLCBYUl9UWVBFX0FDVElPTl9DUkVBVEVfSU5G
Tz4oKTsKKyAgICBjcmVhdGVJbmZvLmFjdGlvblR5cGUgPSBhY3Rpb25UeXBlOworICAgIGNyZWF0
ZUluZm8uY291bnRTdWJhY3Rpb25QYXRocyA9IDE7CisgICAgY3JlYXRlSW5mby5zdWJhY3Rpb25Q
YXRocyA9ICZtX3N1YmFjdGlvblBhdGg7CisgICAgc3RkOjpzdHJuY3B5KGNyZWF0ZUluZm8uYWN0
aW9uTmFtZSwgbmFtZS51dGY4KCkuZGF0YSgpLCBYUl9NQVhfQUNUSU9OX1NFVF9OQU1FX1NJWkUg
LSAxKTsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5sb2NhbGl6ZWRBY3Rpb25OYW1lLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOworCisg
ICAgcmV0dXJuIHhyQ3JlYXRlQWN0aW9uKG1fYWN0aW9uU2V0LCAmY3JlYXRlSW5mbywgJmFjdGlv
bik7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjpjcmVhdGVCdXR0b25BY3Rpb25z
KE9wZW5YUkJ1dHRvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmaXgsIE9wZW5YUkJ1dHRv
bkFjdGlvbnMmIGFjdGlvbnMpIGNvbnN0Cit7CisgICAgYXV0byBuYW1lID0gcHJlZml4ICsgIl9i
dXR0b25fIiArIGJ1dHRvblR5cGVUb1N0cmluZyh0eXBlKTsKKworICAgIFJFVFVSTl9SRVNVTFRf
SUZfRkFJTEVEKGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9CT09MRUFOX0lOUFVULCBuYW1l
ICsgIl9wcmVzcyIsIGFjdGlvbnMucHJlc3MpLCBtX2luc3RhbmNlKTsKKyAgICBSRVRVUk5fUkVT
VUxUX0lGX0ZBSUxFRChjcmVhdGVBY3Rpb24oWFJfQUNUSU9OX1RZUEVfQk9PTEVBTl9JTlBVVCwg
bmFtZSArICJfdG91Y2giLCBhY3Rpb25zLnRvdWNoKSwgbV9pbnN0YW5jZSk7CisgICAgUkVUVVJO
X1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX0ZMT0FUX0lOUFVU
LCBuYW1lICsgIl92YWx1ZSIsIGFjdGlvbnMudmFsdWUpLCBtX2luc3RhbmNlKTsKKyAgICAKKyAg
ICByZXR1cm4gWFJfU1VDQ0VTUzsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OmNy
ZWF0ZUJpbmRpbmcoY29uc3QgY2hhciogcHJvZmlsZVBhdGgsIFhyQWN0aW9uIGFjdGlvbiwgY29u
c3QgU3RyaW5nJiBiaW5kaW5nUGF0aCwgU3VnZ2VzdGVkQmluZGluZ3MmIGJpbmRpbmdzKSBjb25z
dAoreworICAgIEFTU0VSVChwcm9maWxlUGF0aCAhPSBYUl9OVUxMX1BBVEgpOworICAgIEFTU0VS
VChhY3Rpb24gIT0gWFJfTlVMTF9IQU5ETEUpOworICAgIEFTU0VSVCghYmluZGluZ1BhdGguaXNF
bXB0eSgpKTsKKworICAgIFhyUGF0aCBwYXRoID0gWFJfTlVMTF9QQVRIOworICAgIFJFVFVSTl9S
RVNVTFRfSUZfRkFJTEVEKHhyU3RyaW5nVG9QYXRoKG1faW5zdGFuY2UsIGJpbmRpbmdQYXRoLnV0
ZjgoKS5kYXRhKCksICZwYXRoKSwgbV9pbnN0YW5jZSk7CisKKyAgICBYckFjdGlvblN1Z2dlc3Rl
ZEJpbmRpbmcgYmluZGluZyB7IGFjdGlvbiwgcGF0aCB9OworICAgIGF1dG8gaXQgPSBiaW5kaW5n
cy5maW5kKHByb2ZpbGVQYXRoKTsKKyAgICBpZiAoaXQgIT0gYmluZGluZ3MuZW5kKCkpCisgICAg
ICAgIGl0LT52YWx1ZS5hcHBlbmQoYmluZGluZyk7CisgICAgZWxzZQorICAgICAgICBiaW5kaW5n
cy5hZGQocHJvZmlsZVBhdGgsIFZlY3RvcjxYckFjdGlvblN1Z2dlc3RlZEJpbmRpbmc+IHsgYmlu
ZGluZyB9KTsKKworICAgIHJldHVybiBYUl9TVUNDRVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJ
bnB1dFNvdXJjZTo6Z2V0UG9zZShYclNwYWNlIHNwYWNlLCBYclNwYWNlIGJhc2VTcGFjZSwgY29u
c3QgWHJGcmFtZVN0YXRlJiBmcmFtZVN0YXRlLCBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3Vy
Y2VQb3NlJiBwb3NlKSBjb25zdAoreworICAgIGF1dG8gbG9jYXRpb24gPSBjcmVhdGVTdHJ1Y3R1
cmU8WHJTcGFjZUxvY2F0aW9uLCBYUl9UWVBFX1NQQUNFX0xPQ0FUSU9OPigpOworICAgIFJFVFVS
Tl9SRVNVTFRfSUZfRkFJTEVEKHhyTG9jYXRlU3BhY2Uoc3BhY2UsIGJhc2VTcGFjZSwgZnJhbWVT
dGF0ZS5wcmVkaWN0ZWREaXNwbGF5VGltZSwgJmxvY2F0aW9uKSwgbV9pbnN0YW5jZSk7CisKKyAg
ICBpZiAobG9jYXRpb24ubG9jYXRpb25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09SSUVOVEFU
SU9OX1RSQUNLRURfQklUKQorICAgICAgICBwb3NlLnBvc2UgPSBYclBvc2VmVG9Qb3NlKGxvY2F0
aW9uLnBvc2UpOworICAgIHBvc2UuaXNQb3NpdGlvbkVtdWxhdGVkID0gIShsb2NhdGlvbi5sb2Nh
dGlvbkZsYWdzICYgWFJfU1BBQ0VfTE9DQVRJT05fUE9TSVRJT05fVkFMSURfQklUKTsKKworICAg
IHJldHVybiBYUl9TVUNDRVNTOworfQorCitPcHRpb25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5w
dXRTb3VyY2VCdXR0b24+IE9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24oT3BlblhSQnV0dG9u
VHlwZSBidXR0b25UeXBlKSBjb25zdAoreworICAgIGF1dG8gaXQgPSBtX2J1dHRvbkFjdGlvbnMu
ZmluZChidXR0b25UeXBlKTsKKyAgICBpZiAoaXQgPT0gbV9idXR0b25BY3Rpb25zLmVuZCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgRGV2aWNlOjpGcmFtZURhdGE6Oklu
cHV0U291cmNlQnV0dG9uIHJlc3VsdDsKKyAgICBib29sIGhhc1ZhbHVlID0gZmFsc2U7CisgICAg
YXV0byYgYWN0aW9ucyA9IGl0LT52YWx1ZTsKKworICAgIGlmIChhY3Rpb25zLnByZXNzICE9IFhS
X05VTExfSEFORExFICYmIFhSX1NVQ0NFRURFRChnZXRBY3Rpb25TdGF0ZShhY3Rpb25zLnByZXNz
LCAmcmVzdWx0LnByZXNzZWQpKSkKKyAgICAgICAgaGFzVmFsdWUgPSB0cnVlOworICAgIGVsc2UK
KyAgICAgICAgcmVzdWx0LnByZXNzZWQgPSBmYWxzZTsKKworICAgIGlmIChhY3Rpb25zLnRvdWNo
ICE9IFhSX05VTExfSEFORExFICYmIFhSX1NVQ0NFRURFRChnZXRBY3Rpb25TdGF0ZShhY3Rpb25z
LnRvdWNoLCAmcmVzdWx0LnRvdWNoZWQpKSkKKyAgICAgICAgaGFzVmFsdWUgPSB0cnVlOworICAg
IGVsc2UKKyAgICAgICAgcmVzdWx0LnRvdWNoZWQgPSByZXN1bHQucHJlc3NlZDsKKworICAgIGlm
IChhY3Rpb25zLnZhbHVlICE9IFhSX05VTExfSEFORExFICYmIFhSX1NVQ0NFRURFRChnZXRBY3Rp
b25TdGF0ZShhY3Rpb25zLnZhbHVlLCAmcmVzdWx0LnByZXNzZWRWYWx1ZSkpKQorICAgICAgICBo
YXNWYWx1ZSA9IHRydWU7CisgICAgZWxzZQorICAgICAgICByZXN1bHQudG91Y2hlZCA9IHJlc3Vs
dC5wcmVzc2VkID8gMS4wIDogMC4wOworCisgICAgaWYgKCFoYXNWYWx1ZSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlvbmFsPFhy
VmVjdG9yMmY+IE9wZW5YUklucHV0U291cmNlOjpnZXRBeGlzKE9wZW5YUkF4aXNUeXBlIGF4aXNU
eXBlKSBjb25zdAoreworICAgIGF1dG8gaXQgPSBtX2F4aXNBY3Rpb25zLmZpbmQoYXhpc1R5cGUp
OworICAgIGlmIChpdCA9PSBtX2F4aXNBY3Rpb25zLmVuZCgpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgWHJWZWN0b3IyZiBheGlzOworICAgIGlmIChYUl9TVUNDRUVERUQo
Z2V0QWN0aW9uU3RhdGUoaXQtPnZhbHVlLCAmYXhpcykpKQorICAgICAgICByZXR1cm4gYXhpczsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291
cmNlOjpnZXRBY3Rpb25TdGF0ZShYckFjdGlvbiBhY3Rpb24sIGJvb2wqIHZhbHVlKSBjb25zdAor
eworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9OVUxMX0hBTkRM
RSk7CisKKyAgICBhdXRvIHN0YXRlID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3RhdGVCb29s
ZWFuLCBYUl9UWVBFX0FDVElPTl9TVEFURV9CT09MRUFOPigpOworICAgIGF1dG8gaW5mbyA9IGNy
ZWF0ZVN0cnVjdHVyZTxYckFjdGlvblN0YXRlR2V0SW5mbywgWFJfVFlQRV9BQ1RJT05fU1RBVEVf
R0VUX0lORk8+KCk7CisgICAgaW5mby5hY3Rpb24gPSBhY3Rpb247CisKKyAgICBSRVRVUk5fUkVT
VUxUX0lGX0ZBSUxFRCh4ckdldEFjdGlvblN0YXRlQm9vbGVhbihtX3Nlc3Npb24sICZpbmZvLCAm
c3RhdGUpLCBtX2luc3RhbmNlKTsKKyAgICAqdmFsdWUgPSBzdGF0ZS5jdXJyZW50U3RhdGU7CisK
KyAgICByZXR1cm4gWFJfU1VDQ0VTUzsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6
OmdldEFjdGlvblN0YXRlKFhyQWN0aW9uIGFjdGlvbiwgZmxvYXQqIHZhbHVlKSBjb25zdAorewor
ICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9OVUxMX0hBTkRMRSk7
CisKKyAgICBhdXRvIHN0YXRlID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3RhdGVGbG9hdCwg
WFJfVFlQRV9BQ1RJT05fU1RBVEVfRkxPQVQ+KCk7CisgICAgYXV0byBpbmZvID0gY3JlYXRlU3Ry
dWN0dXJlPFhyQWN0aW9uU3RhdGVHZXRJbmZvLCBYUl9UWVBFX0FDVElPTl9TVEFURV9HRVRfSU5G
Tz4oKTsKKyAgICBpbmZvLmFjdGlvbiA9IGFjdGlvbjsKKworICAgIFJFVFVSTl9SRVNVTFRfSUZf
RkFJTEVEKHhyR2V0QWN0aW9uU3RhdGVGbG9hdChtX3Nlc3Npb24sICZpbmZvLCAmc3RhdGUpLCBt
X2luc3RhbmNlKTsKKyAgICAqdmFsdWUgPSBzdGF0ZS5jdXJyZW50U3RhdGU7CisKKyAgICByZXR1
cm4gWFJfU1VDQ0VTUzsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlv
blN0YXRlKFhyQWN0aW9uIGFjdGlvbiwgWHJWZWN0b3IyZiogdmFsdWUpIGNvbnN0Cit7CisgICAg
QVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQoYWN0aW9uICE9IFhSX05VTExfSEFORExFKTsKKwor
ICAgIGF1dG8gc3RhdGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZVZlY3RvcjJmLCBY
Ul9UWVBFX0FDVElPTl9TVEFURV9WRUNUT1IyRj4oKTsKKyAgICBhdXRvIGluZm8gPSBjcmVhdGVT
dHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUdldEluZm8sIFhSX1RZUEVfQUNUSU9OX1NUQVRFX0dFVF9J
TkZPPigpOworICAgIGluZm8uYWN0aW9uID0gYWN0aW9uOworCisgICAgUkVUVVJOX1JFU1VMVF9J
Rl9GQUlMRUQoeHJHZXRBY3Rpb25TdGF0ZVZlY3RvcjJmKG1fc2Vzc2lvbiwgJmluZm8sICZzdGF0
ZSksIG1faW5zdGFuY2UpOworICAgICp2YWx1ZSA9IHN0YXRlLmN1cnJlbnRTdGF0ZTsKKworICAg
IHJldHVybiBYUl9TVUNDRVNTOworfQorCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFiZGMxYmJjZjM4YTFjYzEzYTJmMmFlNTg4MTQyOGU5ZDcwNTA4YmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2Uu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQorCisjaW5j
bHVkZSAiT3BlblhSSW5wdXRNYXBwaW5ncy5oIgorI2luY2x1ZGUgIk9wZW5YUlV0aWxzLmgiCisK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKworY2xhc3MgT3BlblhSSW5wdXRTb3VyY2UgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wZW5Y
UklucHV0U291cmNlKTsKK3B1YmxpYzoKKyAgICB1c2luZyBTdWdnZXN0ZWRCaW5kaW5ncyA9IEhh
c2hNYXA8Y29uc3QgY2hhciosIFZlY3RvcjxYckFjdGlvblN1Z2dlc3RlZEJpbmRpbmc+PjsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE9wZW5YUklucHV0U291cmNlPiBjcmVhdGUoWHJJbnN0
YW5jZSwgWHJTZXNzaW9uLCBYUkhhbmRlZG5lc3MsIElucHV0U291cmNlSGFuZGxlKTsKKyAgICB+
T3BlblhSSW5wdXRTb3VyY2UoKTsKKworICAgIFhyUmVzdWx0IHN1Z2dlc3RCaW5kaW5ncyhTdWdn
ZXN0ZWRCaW5kaW5ncyYpIGNvbnN0OworICAgIE9wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJ
bnB1dFNvdXJjZT4gZ2V0SW5wdXRTb3VyY2UoWHJTcGFjZSwgY29uc3QgWHJGcmFtZVN0YXRlJikg
Y29uc3Q7CisgICAgWHJBY3Rpb25TZXQgYWN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
b25TZXQ7IH0KKyAgICBYclJlc3VsdCB1cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKKworcHJp
dmF0ZToKKyAgICBPcGVuWFJJbnB1dFNvdXJjZShYckluc3RhbmNlLCBYclNlc3Npb24sIFhSSGFu
ZGVkbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUpOworCisgICAgc3RydWN0IE9wZW5YUkJ1dHRvbkFj
dGlvbnMgeworICAgICAgICBYckFjdGlvbiBwcmVzcyB7IFhSX05VTExfSEFORExFIH07CisgICAg
ICAgIFhyQWN0aW9uIHRvdWNoIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICAgICAgWHJBY3Rpb24g
dmFsdWUgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIH07CisKKyAgICBYclJlc3VsdCBpbml0aWFs
aXplKCk7CisgICAgWHJSZXN1bHQgY3JlYXRlU3BhY2VBY3Rpb24oWHJBY3Rpb24sIFhyU3BhY2Um
KSBjb25zdDsKKyAgICBYclJlc3VsdCBjcmVhdGVBY3Rpb24oWHJBY3Rpb25UeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIFhyQWN0aW9uJikgY29uc3Q7CisgICAgWHJSZXN1bHQgY3JlYXRlQnV0dG9u
QWN0aW9ucyhPcGVuWFJCdXR0b25UeXBlLCBjb25zdCBTdHJpbmcmIHByZWZpeCwgT3BlblhSQnV0
dG9uQWN0aW9ucyYpIGNvbnN0OworICAgIFhyUmVzdWx0IGNyZWF0ZUJpbmRpbmcoY29uc3QgY2hh
ciogcHJvZmlsZVBhdGgsIFhyQWN0aW9uLCBjb25zdCBTdHJpbmcmIGJpbmRpbmdQYXRoLCBTdWdn
ZXN0ZWRCaW5kaW5ncyYpIGNvbnN0OworCisgICAgWHJSZXN1bHQgZ2V0UG9zZShYclNwYWNlLCBY
clNwYWNlLCBjb25zdCBYckZyYW1lU3RhdGUmLCBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3Vy
Y2VQb3NlJikgY29uc3Q7CisgICAgT3B0aW9uYWw8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291
cmNlQnV0dG9uPiBnZXRCdXR0b24oT3BlblhSQnV0dG9uVHlwZSkgY29uc3Q7CisgICAgT3B0aW9u
YWw8WHJWZWN0b3IyZj4gZ2V0QXhpcyhPcGVuWFJBeGlzVHlwZSkgY29uc3Q7CisgICAgWHJSZXN1
bHQgZ2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24sIGJvb2wqKSBjb25zdDsKKyAgICBYclJlc3VsdCBn
ZXRBY3Rpb25TdGF0ZShYckFjdGlvbiwgZmxvYXQqKSBjb25zdDsKKyAgICBYclJlc3VsdCBnZXRB
Y3Rpb25TdGF0ZShYckFjdGlvbiwgWHJWZWN0b3IyZiopIGNvbnN0OworCisgICAgWHJJbnN0YW5j
ZSBtX2luc3RhbmNlIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBYclNlc3Npb24gbV9zZXNzaW9u
IHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBYUkhhbmRlZG5lc3MgbV9oYW5kZW5lc3MgeyBYUkhh
bmRlZG5lc3M6OkxlZnQgfTsKKyAgICBJbnB1dFNvdXJjZUhhbmRsZSBtX2hhbmRsZSB7IDAgfTsK
KyAgICBTdHJpbmcgbV9zdWJhY3Rpb25QYXRoTmFtZTsKKyAgICBYclBhdGggbV9zdWJhY3Rpb25Q
YXRoIHsgWFJfTlVMTF9QQVRIIH07CisgICAgWHJBY3Rpb25TZXQgbV9hY3Rpb25TZXQgeyBYUl9O
VUxMX0hBTkRMRSB9OworICAgIFhyQWN0aW9uIG1fZ3JpcEFjdGlvbiB7IFhSX05VTExfSEFORExF
IH07CisgICAgWHJTcGFjZSBtX2dyaXBTcGFjZSB7IFhSX05VTExfSEFORExFIH07CisgICAgWHJB
Y3Rpb24gbV9wb2ludGVyQWN0aW9uIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBYclNwYWNlIG1f
cG9pbnRlclNwYWNlIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICB1c2luZyBPcGVuWFJCdXR0b25B
Y3Rpb25zTWFwID0gSGFzaE1hcDxPcGVuWFJCdXR0b25UeXBlLCBPcGVuWFJCdXR0b25BY3Rpb25z
LCBJbnRIYXNoPE9wZW5YUkJ1dHRvblR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPE9w
ZW5YUkJ1dHRvblR5cGU+PjsKKyAgICBPcGVuWFJCdXR0b25BY3Rpb25zTWFwIG1fYnV0dG9uQWN0
aW9uczsKKyAgICB1c2luZyBPcGVuWFJBeGVzTWFwID0gSGFzaE1hcDxPcGVuWFJBeGlzVHlwZSwg
WHJBY3Rpb24sIEludEhhc2g8T3BlblhSQXhpc1R5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzPE9wZW5YUkF4aXNUeXBlPj47CisgICAgT3BlblhSQXhlc01hcCBtX2F4aXNBY3Rpb25zOwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fcHJvZmlsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQbGF0
Zm9ybVhSCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJVdGlscy5oCmluZGV4IDYyYzVj
YjFhNmJkN2Y4Y2E0NDFhNjQ2MGJmN2U4YjY2Yzg5MGU2N2EuLjllY2M0OGE2YTZmMDE1ZWM3NWVh
MTU4MWYzNjQ4YWEyMDM5ZjdhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3hyL29wZW54ci9PcGVuWFJVdGlscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hy
L29wZW54ci9PcGVuWFJVdGlscy5oCkBAIC02NCwxMCArNjQsMjIgQEAgaW5saW5lIFN0cmluZyBy
ZXN1bHRUb1N0cmluZyhYclJlc3VsdCB2YWx1ZSwgWHJJbnN0YW5jZSBpbnN0YW5jZSkKICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiPHVua25vd24gIiwgaW50KHZhbHVlKSwgIj4iKTsKIH0KIAotI2Rl
ZmluZSBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgY2FsbCwgaW5zdGFuY2UsIC4uLikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChYUl9GQUlMRUQo
cmVzdWx0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBMT0coWFIsICIlcyAlczogJXNcbiIsIF9f
ZnVuY19fLCBjYWxsLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0
YSgpKTsgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmlu
ZSBSRVRVUk5fSUZfRkFJTEVEKGNhbGwsIGxhYmVsLCBpbnN0YW5jZSwgLi4uKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGF1dG8geHJS
ZXN1bHQgPSBjYWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoWFJfRkFJTEVE
KHhyUmVzdWx0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIExPRyhYUiwgIiVzICVz
OiAlc1xuIiwgX19mdW5jX18sIGxhYmVsLCByZXN1bHRUb1N0cmluZyh4clJlc3VsdCwgaW5zdGFu
Y2UpLnV0ZjgoKS5kYXRhKCkpOyAgICBcCisgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQo
Y2FsbCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdXRvIHhyUmVz
dWx0ID0gY2FsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYg
KFhSX0ZBSUxFRCh4clJlc3VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBMT0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVuY19fLCAjY2FsbCwgcmVzdWx0VG9T
dHJpbmcoeHJSZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgcmV0dXJuIHhyUmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgfQogCiAjZGVmaW5lIExPR19JRl9GQUlMRUQocmVzdWx0LCBj
YWxsLCBpbnN0YW5jZSwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCkBAIC05MSw2ICsxMDMsMTMgQEAgaW5saW5lIERldmljZTo6RnJhbWVEYXRhOjpWaWV3
IHhyVmlld1RvUG9zZShYclZpZXcgdmlldykKICAgICByZXR1cm4gcG9zZTsKIH0KIAoraW5saW5l
IFhyUG9zZWYgWHJQb3NlSWRlbnRpdHkoKQoreworICAgIFhyUG9zZWYgcG9zZTsKKyAgICBwb3Nl
Lm9yaWVudGF0aW9uLncgPSAxLjA7CisgICAgcmV0dXJuIHBvc2U7Cit9CisKIGlubGluZSBYclZp
ZXdDb25maWd1cmF0aW9uVHlwZSB0b1hyVmlld0NvbmZpZ3VyYXRpb25UeXBlKFNlc3Npb25Nb2Rl
IG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CkBAIC0xMDQsNiArMTIzLDE5IEBAIGlubGlu
ZSBYclZpZXdDb25maWd1cmF0aW9uVHlwZSB0b1hyVmlld0NvbmZpZ3VyYXRpb25UeXBlKFNlc3Np
b25Nb2RlIG1vZGUpCiAgICAgcmV0dXJuIFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1B
UllfTU9OTzsKIH0KIAoraW5saW5lIFN0cmluZyBoYW5kZW5lc3NUb1N0cmluZyhYUkhhbmRlZG5l
c3MgaGFuZGVuZXNzKQoreworICAgIHN3aXRjaCAoaGFuZGVuZXNzKSB7CisgICAgY2FzZSBYUkhh
bmRlZG5lc3M6OkxlZnQ6CisgICAgICAgIHJldHVybiAibGVmdCI7CisgICAgY2FzZSBYUkhhbmRl
ZG5lc3M6OlJpZ2h0OgorICAgICAgICByZXR1cm4gInJpZ2h0IjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAm
JiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Bl
bnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Bl
bnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCmluZGV4IGE3OTM2Y2MyOGM1OGVkNjM4YjVhOWY1YmI0
MzFjY2JmZDEwNGI0ZGUuLjk5Y2YwZjg0Mjk5MzdlZDBmZWYwNDkzMThjN2ZhMmJiNmE1ZjEzYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
T3BlblhSLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZv
cm1YUk9wZW5YUi5jcHAKQEAgLTIzLDYgKzIzLDggQEAKICNpZiBFTkFCTEUoV0VCWFIpICYmIFVT
RShPUEVOWFIpCiAKICNpbmNsdWRlICJPcGVuWFJFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiT3Bl
blhSSW5wdXQuaCIKKyNpbmNsdWRlICJPcGVuWFJJbnB1dFNvdXJjZS5oIgogCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0xMzUs
NiArMTM3LDkgQEAgdm9pZCBPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFja2luZ0FuZFJlbmRl
cmluZyhTZXNzaW9uTW9kZSBtb2RlKQogICAgICAgICAvLyBDcmVhdGUgdGhlIGRlZmF1bHQgcmVm
ZXJlbmNlIHNwYWNlcwogICAgICAgICBtX2xvY2FsU3BhY2UgPSBjcmVhdGVSZWZlcmVuY2VTcGFj
ZShYUl9SRUZFUkVOQ0VfU1BBQ0VfVFlQRV9MT0NBTCk7CiAgICAgICAgIG1fdmlld1NwYWNlID0g
Y3JlYXRlUmVmZXJlbmNlU3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfVklFVyk7CisKKyAg
ICAgICAgLy8gSW5pdGlhbGl6ZSBpbnB1dCB0cmFja2luZworICAgICAgICBtX2lucHV0ID0gT3Bl
blhSSW5wdXQ6OmNyZWF0ZShtX2luc3RhbmNlLCBtX3Nlc3Npb24sIG1fbG9jYWxTcGFjZSk7CiAg
ICAgfSk7CiB9CiAKQEAgLTIzMSw2ICsyMzYsMTAgQEAgdm9pZCBPcGVuWFJEZXZpY2U6OnJlcXVl
c3RGcmFtZShSZXF1ZXN0RnJhbWVDYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICAgICAgICAg
IGlmIChsYXllckRhdGEpCiAgICAgICAgICAgICAgICAgICAgIGZyYW1lRGF0YS5sYXllcnMuYWRk
KGxheWVyLmtleSwgKmxheWVyRGF0YSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtX2lucHV0KQorICAgICAgICAgICAgICAgIGZyYW1lRGF0YS5pbnB1dFNvdXJjZXMgPSBtX2lu
cHV0LT5nZXRJbnB1dFNvdXJjZXMobV9mcmFtZVN0YXRlKTsKKwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlblhSL3Nw
ZWNzLzEuMC9tYW4vaHRtbC9YckZyYW1lU3RhdGUuaHRtbAogICAgICAgICAgICAgLy8gV2hlbiBz
aG91bGRSZW5kZXIgaXMgZmFsc2UgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhdm9pZCBoZWF2eSBH
UFUgd29yayB3aGVyZSBwb3NzaWJsZSwKQEAgLTQ1NCw2ICs0NjMsOCBAQCB2b2lkIE9wZW5YUkRl
dmljZTo6cG9sbEV2ZW50cygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFhSX1RZUEVfRVZFTlRfREFUQV9JTlRFUkFDVElPTl9QUk9GSUxFX0NIQU5HRUQ6Cisg
ICAgICAgICAgICB1cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFhSX1RZUEVfRVZFTlRfREFUQV9NQUlOX1NFU1NJT05fVklTSUJJTElU
WV9DSEFOR0VEX0VYVFg6CiAgICAgICAgIGNhc2UgWFJfVFlQRV9FVkVOVF9EQVRBX1ZJU0lCSUxJ
VFlfTUFTS19DSEFOR0VEX0tIUjoKICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RBVEFfUEVS
Rl9TRVRUSU5HU19FWFQ6CkBAIC01MDAsNiArNTExLDcgQEAgdm9pZCBPcGVuWFJEZXZpY2U6OnJl
c2V0U2Vzc2lvbigpCiB7CiAgICAgQVNTRVJUKCZSdW5Mb29wOjpjdXJyZW50KCkgPT0gJm1fcXVl
dWUucnVuTG9vcCgpKTsKICAgICBtX2xheWVycy5jbGVhcigpOworICAgIG1faW5wdXQucmVzZXQo
KTsKICAgICBpZiAobV9zZXNzaW9uICE9IFhSX05VTExfSEFORExFKSB7CiAgICAgICAgIHhyRGVz
dHJveVNlc3Npb24obV9zZXNzaW9uKTsKICAgICAgICAgbV9zZXNzaW9uID0gWFJfTlVMTF9IQU5E
TEU7CkBAIC01NjQsNiArNTc2LDI2IEBAIHZvaWQgT3BlblhSRGV2aWNlOjp1cGRhdGVTdGFnZVBh
cmFtZXRlcnMoKQogICAgIH0KIH0KIAordm9pZCBPcGVuWFJEZXZpY2U6OnVwZGF0ZUludGVyYWN0
aW9uUHJvZmlsZSgpCit7CisgICAgaWYgKCFtX2lucHV0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2lucHV0LT51cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKKworICAgIGlmIChkaWROb3Rp
ZnlJbnB1dEluaXRpYWxpemF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWROb3RpZnlJ
bnB1dEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyAgICBhdXRvIGlucHV0U291cmNlcyA9IG1faW5w
dXQtPmdldElucHV0U291cmNlcyhtX2ZyYW1lU3RhdGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBpbnB1dFNvdXJjZXMgPSBXVEZN
b3ZlKGlucHV0U291cmNlcyldKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xp
ZW50KQorICAgICAgICAgICAgbV90cmFja2luZ0FuZFJlbmRlcmluZ0NsaWVudC0+c2Vzc2lvbkRp
ZEluaXRpYWxpemVJbnB1dFNvdXJjZXMoV1RGTW92ZShpbnB1dFNvdXJjZXMpKTsKKyAgICB9KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhS
KSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIv
b3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29w
ZW54ci9QbGF0Zm9ybVhST3BlblhSLmgKaW5kZXggYTg2ZDVjOTQ5MzE2YTY4NjgwMDc0YTQ3NTZh
ZDRjMzNhYTc5YTljOS4uY2RiNjM2NmU5MTk2MzFiYWI1NmE5YThlNWFjNjU5ZWExMWU5OGE1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJP
cGVuWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1Y
Uk9wZW5YUi5oCkBAIC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2UgUGxhdGZvcm1YUiB7CiAKIGNs
YXNzIE9wZW5YUkV4dGVuc2lvbnM7CitjbGFzcyBPcGVuWFJJbnB1dDsKIAogLy8gaHR0cHM6Ly93
d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlblhSL3NwZWNzLzEuMC9odG1sL3hyc3BlYy5odG1s
I3N5c3RlbQogLy8gQSBzeXN0ZW0gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBk
ZXZpY2VzIGluIHRoZSBydW50aW1lLCBvZnRlbiBtYWRlIHVwIG9mIHNldmVyYWwgaW5kaXZpZHVh
bApAQCAtNzgsNiArNzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlU2Vzc2lvblN0YXRl
Q2hhbmdlKCk7CiAgICAgdm9pZCB3YWl0VW50aWxTdG9wcGluZygpOwogICAgIHZvaWQgdXBkYXRl
U3RhZ2VQYXJhbWV0ZXJzKCk7CisgICAgdm9pZCB1cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsK
ICAgICBMYXllckhhbmRsZSBnZW5lcmF0ZUxheWVySGFuZGxlKCkgeyByZXR1cm4gKyttX2hhbmRs
ZUluZGV4OyB9CiAKICAgICBYckluc3RhbmNlIG1faW5zdGFuY2U7CkBAIC05Myw2ICs5NSw4IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPFhyVmlldz4gbV9mcmFtZVZpZXdzOwogICAgIEhhc2hNYXA8
TGF5ZXJIYW5kbGUsIHN0ZDo6dW5pcXVlX3B0cjxPcGVuWFJMYXllcj4+IG1fbGF5ZXJzOwogICAg
IExheWVySGFuZGxlIG1faGFuZGxlSW5kZXggeyAwIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPE9w
ZW5YUklucHV0PiBtX2lucHV0OworICAgIGJvb2wgZGlkTm90aWZ5SW5wdXRJbml0aWFsaXphdGlv
biB7IGZhbHNlIH07CiAKICAgICB1c2luZyBWaWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXNNYXAg
PSBIYXNoTWFwPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlLCBYclZpZXdDb25maWd1cmF0aW9uUHJv
cGVydGllcywgSW50SGFzaDxYclZpZXdDb25maWd1cmF0aW9uVHlwZT4sIFdURjo6U3Ryb25nRW51
bUhhc2hUcmFpdHM8WHJWaWV3Q29uZmlndXJhdGlvblR5cGU+PjsKICAgICBWaWV3Q29uZmlndXJh
dGlvblByb3BlcnRpZXNNYXAgbV92aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429521</attachid>
            <date>2021-05-24 04:14:45 -0700</date>
            <delta_ts>2021-05-24 04:23:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224931-20210524131443.patch</filename>
            <type>text/plain</type>
            <size>45320</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzllMGU4ZDA4NDIyMThh
ODBlODZjZjMzZmI0ZWFiMGJiY2FjMDE1Mi4uZDA1ZTZjYzI4MTFmZmFlYmFlZDMyZmMwZWM3YTg0
MzRlOWNhNzlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBPcGVuWFIgaW5wdXQgc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDogQWRkIE9wZW5YUklucHV0IGFuZCBPcGVuWFJJ
bnB1dFNvdXJjZSBmaWxlcworCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmNwcDogRW50cnkgcG9pbnQgdG8gcXVlcnkgYW5kIHN5bmMgaW5wdXQgaW4gT3BlblhSLgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXQ6OmNyZWF0ZSk6CisgICAgICAgIChQbGF0
Zm9ybVhSOjpPcGVuWFJJbnB1dDo6T3BlblhSSW5wdXQpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5w
dXQ6OmdldElucHV0U291cmNlcyBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJ
bnB1dDo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5wdXQuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oOiBNYXBwaW5nIGRlZmluaXRpb24gZm9yIHN1cHBvcnRl
ZCBpbnB1dCBwcm9maWxlcy4KKyAgICAgICAgKFBsYXRmb3JtWFI6OmJ1dHRvblR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpheGlzVHlwZXRvU3RyaW5nKToKKworICAgICAgICAq
IHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHA6IEhhbmRsZXMgdHJhY2tp
bmcgYW5kIHN0YXR1cyBvZiBhIHNwZWNpZmljIGlucHV0IHNvdXJjZS4KKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNvdXJjZSk6CisgICAgICAgIChQbGF0Zm9y
bVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChQbGF0Zm9ybVhS
OjpPcGVuWFJJbnB1dFNvdXJjZTo6c3VnZ2VzdEJpbmRpbmdzIGNvbnN0KToKKyAgICAgICAgKFBs
YXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRJbnB1dFNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGVTcGFj
ZUFjdGlvbiBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6
Y3JlYXRlQWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291
cmNlOjpjcmVhdGVCdXR0b25BY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9w
ZW5YUklucHV0U291cmNlOjpjcmVhdGVCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24gY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEF4aXMgY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuaDogQWRkZWQuCisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6T3BlblhSSW5wdXRTb3VyY2UpOgorICAg
ICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmFjdGlvblNldCBjb25zdCk6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaDoKKyAgICAgICAgKFBs
YXRmb3JtWFI6OlhyUG9zZUlkZW50aXR5KTogQ3JlYXRlcyBhIGlkZW50aXR5IHBvc2UuCisgICAg
ICAgIChQbGF0Zm9ybVhSOjpoYW5kZW5lc3NUb1N0cmluZyk6IENvbnZlcnQgZnJvbSBoYW5kZW5l
c3MgZW51bSB0byBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZv
cm1YUk9wZW5YUi5jcHA6IEhhbmRsZSBpbnB1dCBzb3VyY2VzIGluIHRoZSBPcGVuWFIgcmVuZGVy
IGxvb3AuCisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFj
a2luZ0FuZFJlbmRlcmluZyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJl
cXVlc3RGcmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnBvbGxFdmVu
dHMpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24pOgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmg6CisK
IDIwMjEtMDUtMjEgIEltYW5vbCBGZXJuYW5kZXogIDxpZmVybmFuZGV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgRml4IHVzZSBhZnRlciBtb3ZlIGJ1ZyBpbiBXZWJYUlNlc3Npb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMmY2NjA1YzEwMGFmYmJkM2Q5OWJiOTJhMDM0ZWM2ODA0M2FmNzA5Zi4uOTdjZTU0
NzMyMWRjMzdjYmQyNTc1OGY0ZmE2MzkwZjc0MTJkYTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIy
MDMsNiArMjIwMyw4IEBAIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiBw
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
RGV0ZWN0b3JJQ1UuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAor
cGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBAbm8tdW5pZnkKK3BsYXRmb3JtL3hy
L29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5zdGFuY2UuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5Y
UkV4dGVuc2lvbnMuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkxheWVy
LmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4NjQ0ZjQzY2JkNzQ1ZjdmYWI3M2M2MjBjNTJiM2Q3MzUyMzkw
NmQyLi4wMTk1OWJlNjcyN2JmZDU2ZTFhNzU2YTU0OWJlYzM1MzFjMmE0YTRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDAz
LDYgKzY0MDMsMTEgQEAKIAkJMTE2M0Y4MjMyNEU1RDU5QjAwMEFCOTYwIC8qIFJlbmRlclRyZWVN
dXRhdGlvbkRpc2FsbG93ZWRTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVl
TXV0YXRpb25EaXNhbGxvd2VkU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMTY0OEI0MTI2MEEzRjZDMDA0QUYxRjIgLyogSlNXZWJYUlJpZ2lkVHJhbnNmb3JtQ3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViWFJSaWdpZFRy
YW5zZm9ybUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExNjQ4QjQz
MjYwQTNGNkMwMDRBRjFGMiAvKiBKU1dlYlhSVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYlhSVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTExODBGN0ZFMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1
dFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTExODBGODAwMjYzMUNEOTIwMDAwRTYyNCAvKiBP
cGVuWFJJbnB1dE1hcHBpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0TWFwcGluZ3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0
IC8qIE9wZW5YUklucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJ
bnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTExODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1
dFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxMThCMDY4NjI1RTQxRTUxMDA3MEJFNEIgLyogT3BlblhSRXh0
ZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJF
eHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE4QjA2ODgyNUU0
MUU1MjAwNzBCRTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3BlblhSRXh0ZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxMThCMDY4OTI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSSW5zdGFuY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BlblhSSW5zdGFuY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkyMDIsNiArMjkyMDcsMTEgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTExOEIwNjg2MjVFNDFFNTEwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25z
LmNwcCAqLywKIAkJCQkxMThCMDY4ODI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9u
cy5oICovLAorCQkJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAg
Ki8sCisJCQkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5YUklucHV0LmggKi8sCisJ
CQkJMTE4MEY4MDAyNjMxQ0Q5MjAwMDBFNjI0IC8qIE9wZW5YUklucHV0TWFwcGluZ3MuaCAqLywK
KwkJCQkxMTgwRjdGRTI2MzFDRDkyMDAwMEU2MjQgLyogT3BlblhSSW5wdXRTb3VyY2UuY3BwICov
LAorCQkJCTExODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5oICov
LAogCQkJCTExOEIwNjg5MjVFNDFFNTIwMDcwQkU0QiAvKiBPcGVuWFJJbnN0YW5jZS5jcHAgKi8s
CiAJCQkJMTE4QjA2OEEyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUlV0aWxzLmggKi8sCiAJCQkJ
RTFDMUEzOUIyNDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjhlZmQ2MGJjMTAxMDkwZmVjNzg3Y2UzODVlZGIwYjZjOTE1NGEwYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1
dC5jcHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlh
LCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisKKyNp
ZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3Vy
Y2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhS
IHsKKworc3RkOjp1bmlxdWVfcHRyPE9wZW5YUklucHV0PiBPcGVuWFJJbnB1dDo6Y3JlYXRlKFhy
SW5zdGFuY2UgaW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNlKQorewor
ICAgIGF1dG8gaW5wdXQgPSBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXQ+KG5ldyBPcGVuWFJJ
bnB1dChpbnN0YW5jZSwgc2Vzc2lvbiwgc3BhY2UpKTsKKyAgICBpZiAoWFJfRkFJTEVEKGlucHV0
LT5pbml0aWFsaXplKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5w
dXQ7Cit9CisKK09wZW5YUklucHV0OjpPcGVuWFJJbnB1dChYckluc3RhbmNlIGluc3RhbmNlLCBY
clNlc3Npb24gc2Vzc2lvbiwgWHJTcGFjZSBzcGFjZSkKKyAgICA6IG1faW5zdGFuY2UoaW5zdGFu
Y2UpCisgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAsIG1fbG9jYWxTcGFjZShzcGFjZSkK
K3sKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXQ6OmluaXRpYWxpemUoKQoreworICAgIHN0ZDo6
YXJyYXk8WFJIYW5kZWRuZXNzLCAyPiBoYW5kcyB7CisgICAgICAgIFhSSGFuZGVkbmVzczo6TGVm
dCwgWFJIYW5kZWRuZXNzOjpSaWdodAorICAgIH07CisKKyAgICBmb3IgKGF1dG8gaGFuZGVuZXNz
IDogaGFuZHMpIHsKKyAgICAgICAgbV9oYW5kbGVJbmRleCsrOzsKKyAgICAgICAgaWYgKGF1dG8g
aW5wdXRTb3VyY2UgPSBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlKG1faW5zdGFuY2UsIG1fc2Vz
c2lvbiwgaGFuZGVuZXNzLCBtX2hhbmRsZUluZGV4KSkKKyAgICAgICAgICAgIG1faW5wdXRTb3Vy
Y2VzLmFwcGVuZChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShpbnB1
dFNvdXJjZSkpKTsKKyAgICB9CisKKyAgICBPcGVuWFJJbnB1dFNvdXJjZTo6U3VnZ2VzdGVkQmlu
ZGluZ3MgYmluZGluZ3M7CisgICAgVmVjdG9yPFhyQWN0aW9uU2V0PiBhY3Rpb25TZXRzOworICAg
IGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0U291cmNlcykgeworICAgICAgICBpbnB1dC0+c3Vn
Z2VzdEJpbmRpbmdzKGJpbmRpbmdzKTsKKyAgICAgICAgYWN0aW9uU2V0cy5hcHBlbmQoaW5wdXQt
PmFjdGlvblNldCgpKTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvJiBiaW5kaW5nIDogYmlu
ZGluZ3MpIHsKKyAgICAgICAgYXV0byBzdWdnZXN0ZWRCaW5kaW5nID0gY3JlYXRlU3RydWN0dXJl
PFhySW50ZXJhY3Rpb25Qcm9maWxlU3VnZ2VzdGVkQmluZGluZywgWFJfVFlQRV9JTlRFUkFDVElP
Tl9QUk9GSUxFX1NVR0dFU1RFRF9CSU5ESU5HPigpOworICAgICAgICBSRVRVUk5fUkVTVUxUX0lG
X0ZBSUxFRCh4clN0cmluZ1RvUGF0aChtX2luc3RhbmNlLCBiaW5kaW5nLmtleSwgJnN1Z2dlc3Rl
ZEJpbmRpbmcuaW50ZXJhY3Rpb25Qcm9maWxlKSwgbV9pbnN0YW5jZSk7CisgICAgICAgIHN1Z2dl
c3RlZEJpbmRpbmcuY291bnRTdWdnZXN0ZWRCaW5kaW5ncyA9IGJpbmRpbmcudmFsdWUuc2l6ZSgp
OworICAgICAgICBzdWdnZXN0ZWRCaW5kaW5nLnN1Z2dlc3RlZEJpbmRpbmdzID0gYmluZGluZy52
YWx1ZS5kYXRhKCk7CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyU3VnZ2VzdElu
dGVyYWN0aW9uUHJvZmlsZUJpbmRpbmdzKG1faW5zdGFuY2UsICZzdWdnZXN0ZWRCaW5kaW5nKSwg
bV9pbnN0YW5jZSk7CisgICAgfQorCisgICAgYXV0byBhdHRhY2hJbmZvID0gY3JlYXRlU3RydWN0
dXJlPFhyU2Vzc2lvbkFjdGlvblNldHNBdHRhY2hJbmZvLCBYUl9UWVBFX1NFU1NJT05fQUNUSU9O
X1NFVFNfQVRUQUNIX0lORk8+KCk7CisgICAgYXR0YWNoSW5mby5jb3VudEFjdGlvblNldHMgPSBh
Y3Rpb25TZXRzLnNpemUoKTsKKyAgICBhdHRhY2hJbmZvLmFjdGlvblNldHMgPSBhY3Rpb25TZXRz
LmRhdGEoKTsKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckF0dGFjaFNlc3Npb25BY3Rp
b25TZXRzKG1fc2Vzc2lvbiwgJmF0dGFjaEluZm8pLCBtX2luc3RhbmNlKTsKKworICAgIHJldHVy
biBYUl9TVUNDRVNTOworfQorCitWZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNl
PiBPcGVuWFJJbnB1dDo6Z2V0SW5wdXRTb3VyY2VzKGNvbnN0IFhyRnJhbWVTdGF0ZSYgZnJhbWVT
dGF0ZSkgY29uc3QKK3sKKyAgICBWZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNl
PiByZXN1bHQ7CisKKyAgICBWZWN0b3I8WHJBY3RpdmVBY3Rpb25TZXQ+IGFjdGlvblNldHM7Cisg
ICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRTb3VyY2VzKQorICAgICAgICBhY3Rpb25TZXRz
LmFwcGVuZChYckFjdGl2ZUFjdGlvblNldCB7IGlucHV0LT5hY3Rpb25TZXQoKSwgWFJfTlVMTF9Q
QVRIIH0pOworCisgICAgYXV0byBzeW5jSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvbnNT
eW5jSW5mbywgWFJfVFlQRV9BQ1RJT05TX1NZTkNfSU5GTz4oKTsKKyAgICBzeW5jSW5mby5jb3Vu
dEFjdGl2ZUFjdGlvblNldHMgPSBhY3Rpb25TZXRzLnNpemUoKTsKKyAgICBzeW5jSW5mby5hY3Rp
dmVBY3Rpb25TZXRzID0gYWN0aW9uU2V0cy5kYXRhKCk7CisgICAgUkVUVVJOX0lGX0ZBSUxFRCh4
clN5bmNBY3Rpb25zKG1fc2Vzc2lvbiwgJnN5bmNJbmZvKSwgInhyU3luY0FjdGlvbnMiLCBtX2lu
c3RhbmNlLCByZXN1bHQpOworCisgICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRTb3VyY2Vz
KSB7CisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBpbnB1dC0+Z2V0SW5wdXRTb3VyY2UobV9sb2Nh
bFNwYWNlLCBmcmFtZVN0YXRlKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKmRhdGEpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgT3BlblhSSW5wdXQ6OnVwZGF0
ZUludGVyYWN0aW9uUHJvZmlsZSgpCit7CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRT
b3VyY2VzKQorICAgICAgICBpbnB1dC0+dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShXRUJYUikgJiYg
VVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54
ci9PcGVuWFJJbnB1dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5Y
UklucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMyODcyYjQ1ODQyZjYzN2QzYzUzZjA5ZDU0NjVhYjNjZDhj
OGUzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54
ci9PcGVuWFJJbnB1dC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShP
UEVOWFIpCisKKyNpbmNsdWRlICJPcGVuWFJJbnB1dE1hcHBpbmdzLmgiCisjaW5jbHVkZSAiT3Bl
blhSVXRpbHMuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBsYXRmb3JtWFIgeworCitjbGFzcyBPcGVuWFJJbnB1
dFNvdXJjZTsKKworY2xhc3MgT3BlblhSSW5wdXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wZW5YUklucHV0KTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE9wZW5YUklucHV0PiBjcmVhdGUoWHJJbnN0YW5jZSwg
WHJTZXNzaW9uLCBYclNwYWNlKTsKKworICAgIFZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5w
dXRTb3VyY2U+IGdldElucHV0U291cmNlcyhjb25zdCBYckZyYW1lU3RhdGUmKSBjb25zdDsKKyAg
ICB2b2lkIHVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgpOworCitwcml2YXRlOgorICAgIE9wZW5Y
UklucHV0KFhySW5zdGFuY2UsIFhyU2Vzc2lvbiwgWHJTcGFjZSk7CisgICAgWHJSZXN1bHQgaW5p
dGlhbGl6ZSgpOworCisgICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlIHsgWFJfTlVMTF9IQU5ETEUg
fTsKKyAgICBYclNlc3Npb24gbV9zZXNzaW9uIHsgWFJfTlVMTF9IQU5ETEUgfTsgCisgICAgWHJT
cGFjZSBtX2xvY2FsU3BhY2UgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFZlY3RvcjxVbmlxdWVS
ZWY8T3BlblhSSW5wdXRTb3VyY2U+PiBtX2lucHV0U291cmNlczsKKyAgICBJbnB1dFNvdXJjZUhh
bmRsZSBtX2hhbmRsZUluZGV4IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1Y
UgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGluZ3MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dE1hcHBpbmdzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWYxY2UyMzQwZTlhMzBkNjdlMzdkYjA3MzBiODI5MzljYjc5ODIzZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJ
bnB1dE1hcHBpbmdzLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShP
UEVOWFIpCisKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFBsYXRmb3JtWFIgeworCit1c2luZyBPcGVuWFJQcm9maWxlSWQgPSBj
b25zdCBjaGFyKiBjb25zdDsKK3VzaW5nIE9wZW5YUkJ1dHRvblBhdGggPSBjb25zdCBjaGFyKiBj
b25zdDsKKworZW51bSBjbGFzcyBPcGVuWFJCdXR0b25UeXBlIHsKKyAgICBUcmlnZ2VyLAorICAg
IFNxdWVlemUsCisgICAgVG91Y2hwYWQsCisgICAgVGh1bWJzdGljaywKKyAgICBUaHVtYnJlc3Qs
CisgICAgQnV0dG9uQSwKKyAgICBCdXR0b25CCit9OworCitjb25zdGV4cHIgc3RkOjphcnJheTxP
cGVuWFJCdXR0b25UeXBlLCA3PiBvcGVuWFJCdXR0b25UeXBlcyB7CisgICAgT3BlblhSQnV0dG9u
VHlwZTo6VHJpZ2dlciwgT3BlblhSQnV0dG9uVHlwZTo6U3F1ZWV6ZSwgT3BlblhSQnV0dG9uVHlw
ZTo6VG91Y2hwYWQsIE9wZW5YUkJ1dHRvblR5cGU6OlRodW1ic3RpY2ssIE9wZW5YUkJ1dHRvblR5
cGU6OlRodW1icmVzdCwKKyAgICBPcGVuWFJCdXR0b25UeXBlOjpCdXR0b25BLCBPcGVuWFJCdXR0
b25UeXBlOjpCdXR0b25CCit9OworCitpbmxpbmUgU3RyaW5nIGJ1dHRvblR5cGVUb1N0cmluZyhP
cGVuWFJCdXR0b25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBP
cGVuWFJCdXR0b25UeXBlOjpUcmlnZ2VyOiByZXR1cm4gInRyaWdnZXIiOworICAgIGNhc2UgT3Bl
blhSQnV0dG9uVHlwZTo6U3F1ZWV6ZTogcmV0dXJuICJzcXVlZXplIjsKKyAgICBjYXNlIE9wZW5Y
UkJ1dHRvblR5cGU6OlRvdWNocGFkOiByZXR1cm4gInRvdWNocGFkIjsKKyAgICBjYXNlIE9wZW5Y
UkJ1dHRvblR5cGU6OlRodW1ic3RpY2s6IHJldHVybiAidGh1bWJzdGljayI7CisgICAgY2FzZSBP
cGVuWFJCdXR0b25UeXBlOjpUaHVtYnJlc3Q6IHJldHVybiAidGh1bWJyZXN0IjsKKyAgICBjYXNl
IE9wZW5YUkJ1dHRvblR5cGU6OkJ1dHRvbkE6IHJldHVybiAiYnV0dG9uYSI7CisgICAgY2FzZSBP
cGVuWFJCdXR0b25UeXBlOjpCdXR0b25COiByZXR1cm4gImJ1dHRvbmIiOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9Cit9CisKK3N0cnVjdCBPcGVuWFJCdXR0b24geworICAgIE9wZW5YUkJ1dHRvblR5cGUgdHlw
ZTsKKyAgICBPcGVuWFJCdXR0b25QYXRoIHByZXNzIHsgbnVsbHB0ciB9OworICAgIE9wZW5YUkJ1
dHRvblBhdGggdG91Y2ggeyBudWxscHRyIH07CisgICAgT3BlblhSQnV0dG9uUGF0aCB2YWx1ZSB7
IG51bGxwdHIgfTsKK307CisKK2VudW0gY2xhc3MgT3BlblhSQXhpc1R5cGUgeworICAgIFRvdWNo
cGFkLAorICAgIFRodW1ic3RpY2sKK307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5YUkF4
aXNUeXBlLCAyPiBvcGVuWFJBeGlzVHlwZXMgeworICAgIE9wZW5YUkF4aXNUeXBlOjpUb3VjaHBh
ZCwgT3BlblhSQXhpc1R5cGU6OlRodW1ic3RpY2sKK307CisKK2lubGluZSBTdHJpbmcgYXhpc1R5
cGV0b1N0cmluZyhPcGVuWFJBeGlzVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgT3BlblhSQXhpc1R5cGU6OlRvdWNocGFkOiByZXR1cm4gInRvdWNocGFkIjsKKyAg
ICBjYXNlIE9wZW5YUkF4aXNUeXBlOjpUaHVtYnN0aWNrOiByZXR1cm4gInRodW1ic3RpY2siOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gIiI7CisgICAgfQorfQorCitzdHJ1Y3QgT3BlblhSQXhpcyB7CisgICAgT3BlblhSQXhpc1R5
cGUgdHlwZTsKKyAgICBPcGVuWFJCdXR0b25QYXRoIHBhdGg7Cit9OyAKKworc3RydWN0IE9wZW5Y
UklucHV0UHJvZmlsZSB7CisgICAgY29uc3QgY2hhciogY29uc3QgcGF0aCB7IG51bGxwdHIgfTsK
KyAgICBjb25zdCBPcGVuWFJQcm9maWxlSWQqIHByb2ZpbGVJZHMgeyBudWxscHRyIH07CisgICAg
c2l6ZV90IHByb2ZpbGVJZHNTaXplIHsgMCB9OworICAgIGNvbnN0IE9wZW5YUkJ1dHRvbiogbGVm
dEJ1dHRvbnMgeyBudWxscHRyIH07CisgICAgc2l6ZV90IGxlZnRCdXR0b25zU2l6ZSB7IDAgfTsK
KyAgICBjb25zdCBPcGVuWFJCdXR0b24qIHJpZ2h0QnV0dG9ucyB7IG51bGxwdHIgfTsKKyAgICBz
aXplX3QgcmlnaHRCdXR0b25zU2l6ZSB7IDAgfTsKKyAgICBjb25zdCBPcGVuWFJBeGlzKiBheGVz
IHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBheGVzU2l6ZSB7IDAgfTsKK307CisKKy8vIGh0dHBz
Oi8vZ2l0aHViLmNvbS9pbW1lcnNpdmUtd2ViL3dlYnhyLWlucHV0LXByb2ZpbGVzL2Jsb2IvbWFz
dGVyL3BhY2thZ2VzL3JlZ2lzdHJ5L3Byb2ZpbGVzL2h0Yy9odGMtdml2ZS5qc29uCitjb25zdGV4
cHIgc3RkOjphcnJheTxPcGVuWFJQcm9maWxlSWQsIDI+IEhUQ1ZpdmVQcm9maWxlSWRzIHsgImh0
Yy12aXZlIiwgImdlbmVyaWMtdHJpZ2dlci1zcXVlZXplLXRvdWNocGFkIiB9OworCitjb25zdGV4
cHIgc3RkOjphcnJheTxPcGVuWFJCdXR0b24sIDM+IEhUQ1ZpdmVCdXR0b25zIHsKKyAgICBPcGVu
WFJCdXR0b24geyAudHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlRyaWdnZXIsIC5wcmVzcyA9ICIv
aW5wdXQvdHJpZ2dlci9jbGljayIsIC52YWx1ZSA9ICIvaW5wdXQvdHJpZ2dlci92YWx1ZSIgfSwK
KyAgICBPcGVuWFJCdXR0b24geyAudHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlNxdWVlemUsIC5w
cmVzcyA9ICIvaW5wdXQvc3F1ZWV6ZS9jbGljayIgfSwKKyAgICBPcGVuWFJCdXR0b24geyAudHlw
ZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlRvdWNocGFkLCAucHJlc3MgPSAiL2lucHV0L3RyYWNrcGFk
L2NsaWNrIiwgLnRvdWNoID0gIi9pbnB1dC90cmFja3BhZC90b3VjaCIgfQorfTsKKworY29uc3Rl
eHByIHN0ZDo6YXJyYXk8T3BlblhSQXhpcywgMT4gSFRDVml2ZUF4ZXMgeworICAgIHsgT3BlblhS
QXhpc1R5cGU6OlRvdWNocGFkLCAiL2lucHV0L3RyYWNrcGFkIiB9Cit9OworCitjb25zdGV4cHIg
T3BlblhSSW5wdXRQcm9maWxlIEhUQ1ZpdmVJbnB1dFByb2ZpbGUgeworICAgICIvaW50ZXJhY3Rp
b25fcHJvZmlsZXMvaHRjL3ZpdmVfY29udHJvbGxlciIsCisgICAgSFRDVml2ZVByb2ZpbGVJZHMu
ZGF0YSgpLAorICAgIEhUQ1ZpdmVQcm9maWxlSWRzLnNpemUoKSwKKyAgICBIVENWaXZlQnV0dG9u
cy5kYXRhKCksCisgICAgSFRDVml2ZUJ1dHRvbnMuc2l6ZSgpLAorICAgIEhUQ1ZpdmVCdXR0b25z
LmRhdGEoKSwKKyAgICBIVENWaXZlQnV0dG9ucy5zaXplKCksCisgICAgSFRDVml2ZUF4ZXMuZGF0
YSgpLAorICAgIEhUQ1ZpdmVBeGVzLnNpemUoKQorfTsKKworLy8gRGVmYXVsdCBmYWxsYmFjayB3
aGVuIHRoZXJlIGlzbid0IGEgc3BlY2lmaWMgY29udHJvbGxlciBiaW5kaW5nLgorY29uc3RleHBy
IHN0ZDo6YXJyYXk8Y29uc3QgY2hhciosIDE+IEtIUlNpbXBsZVByb2ZpbGVJZHMgeyAiZ2VuZXJp
Yy1idXR0b24iIH07CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5YUkJ1dHRvbiwgMT4gS0hS
U2ltcGxlQnV0dG9ucyB7CisgICAgT3BlblhSQnV0dG9uIHsgLnR5cGUgPSBPcGVuWFJCdXR0b25U
eXBlOjpUcmlnZ2VyLCAucHJlc3MgPSAiL2lucHV0L3NlbGVjdC9jbGljayIgfQorfTsKKworY29u
c3RleHByIE9wZW5YUklucHV0UHJvZmlsZSBLSFJTaW1wbGVJbnB1dFByb2ZpbGUgeworICAgICIv
aW50ZXJhY3Rpb25fcHJvZmlsZXMva2hyL3NpbXBsZV9jb250cm9sbGVyIiwKKyAgICBLSFJTaW1w
bGVQcm9maWxlSWRzLmRhdGEoKSwKKyAgICBLSFJTaW1wbGVQcm9maWxlSWRzLnNpemUoKSwKKyAg
ICBLSFJTaW1wbGVCdXR0b25zLmRhdGEoKSwKKyAgICBLSFJTaW1wbGVCdXR0b25zLnNpemUoKSwK
KyAgICBLSFJTaW1wbGVCdXR0b25zLmRhdGEoKSwKKyAgICBLSFJTaW1wbGVCdXR0b25zLnNpemUo
KSwKKyAgICBudWxscHRyLAorICAgIDAKK307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5Y
UklucHV0UHJvZmlsZSwgMj4gb3BlblhSSW5wdXRQcm9maWxlcyB7IEhUQ1ZpdmVJbnB1dFByb2Zp
bGUsIEtIUlNpbXBsZUlucHV0UHJvZmlsZSB9OworCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhS
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kM2E4MGIyZTMzOTdlNTdlYzgwYjIyNTMzYzliMWUzMzk1MjI4N2VjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0U291cmNlLmNwcApAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3BlblhSSW5wdXRT
b3VyY2UuaCIKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKworY29uc3RleHBy
IGNvbnN0IGNoYXIqIE9QRU5YUl9JTlBVVF9IQU5EX1BBVEggeyAiL3VzZXIvaGFuZC8iIH07Citj
b25zdGV4cHIgY29uc3QgY2hhciogT1BFTlhSX0lOUFVUX0dSSVBfUEFUSCB7ICIvaW5wdXQvZ3Jp
cC9wb3NlIiB9OworY29uc3RleHByIGNvbnN0IGNoYXIqIE9QRU5YUl9JTlBVVF9BSU1fUEFUSCB7
ICIvaW5wdXQvYWltL3Bvc2UiIH07CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgUGxhdGZvcm1YUiB7CisKK3N0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJbnB1dFNvdXJjZT4g
T3BlblhSSW5wdXRTb3VyY2U6OmNyZWF0ZShYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Npb24g
c2Vzc2lvbiwgWFJIYW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUgaGFuZGxl
KQoreworICAgIGF1dG8gaW5wdXQgPSBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXRTb3VyY2U+
KG5ldyBPcGVuWFJJbnB1dFNvdXJjZShpbnN0YW5jZSwgc2Vzc2lvbiwgaGFuZGVuZXNzLCBoYW5k
bGUpKTsKKyAgICBpZiAoWFJfRkFJTEVEKGlucHV0LT5pbml0aWFsaXplKCkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5wdXQ7Cit9CisKK09wZW5YUklucHV0U291cmNl
OjpPcGVuWFJJbnB1dFNvdXJjZShYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Npb24gc2Vzc2lv
biwgWFJIYW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUgaGFuZGxlKQorICAg
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQorICAgICwg
bV9oYW5kZW5lc3MoaGFuZGVuZXNzKQorICAgICwgbV9oYW5kbGUoaGFuZGxlKQoreworfQorCitP
cGVuWFJJbnB1dFNvdXJjZTo6fk9wZW5YUklucHV0U291cmNlKCkKK3sKKyAgICBpZiAobV9hY3Rp
b25TZXQgIT0gWFJfTlVMTF9IQU5ETEUpCisgICAgICAgIHhyRGVzdHJveUFjdGlvblNldChtX2Fj
dGlvblNldCk7CisgICAgaWYgKG1fZ3JpcFNwYWNlICE9IFhSX05VTExfSEFORExFKQorICAgICAg
ICB4ckRlc3Ryb3lTcGFjZShtX2dyaXBTcGFjZSk7CisgICAgaWYgKG1fcG9pbnRlclNwYWNlICE9
IFhSX05VTExfSEFORExFKQorICAgICAgICB4ckRlc3Ryb3lTcGFjZShtX3BvaW50ZXJTcGFjZSk7
Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjppbml0aWFsaXplKCkKK3sKKyAgICBT
dHJpbmcgaGFuZGVuZXNzTmFtZSA9IGhhbmRlbmVzc1RvU3RyaW5nKG1faGFuZGVuZXNzKTsKKyAg
ICBtX3N1YmFjdGlvblBhdGhOYW1lID0gT1BFTlhSX0lOUFVUX0hBTkRfUEFUSCArIGhhbmRlbmVz
c05hbWU7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJTdHJpbmdUb1BhdGgobV9pbnN0
YW5jZSwgbV9zdWJhY3Rpb25QYXRoTmFtZS51dGY4KCkuZGF0YSgpLCAmbV9zdWJhY3Rpb25QYXRo
KSwgbV9pbnN0YW5jZSk7CisKKyAgICAvLyBJbml0aWFsaXplIEFjdGlvbiBTZXQuCisgICAgU3Ry
aW5nIHByZWZpeCA9ICJpbnB1dF8iICsgaGFuZGVuZXNzTmFtZTsKKyAgICBTdHJpbmcgYWN0aW9u
U2V0TmFtZSA9IHByZWZpeCArICJfYWN0aW9uX3NldCI7CisgICAgYXV0byBjcmVhdGVJbmZvID0g
IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblNldENyZWF0ZUluZm8sIFhSX1RZUEVfQUNUSU9OX1NF
VF9DUkVBVEVfSU5GTz4oKTsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5hY3Rpb25TZXRO
YW1lLCBhY3Rpb25TZXROYW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVf
U0laRSAtIDEpOworICAgIHN0ZDo6c3RybmNweShjcmVhdGVJbmZvLmxvY2FsaXplZEFjdGlvblNl
dE5hbWUsIGFjdGlvblNldE5hbWUudXRmOCgpLmRhdGEoKSwgWFJfTUFYX0FDVElPTl9TRVRfTkFN
RV9TSVpFIC0gMSk7CisKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckNyZWF0ZUFjdGlv
blNldChtX2luc3RhbmNlLCAmY3JlYXRlSW5mbywgJm1fYWN0aW9uU2V0KSwgbV9pbnN0YW5jZSk7
CisKKyAgICAvLyBJbml0aWFsaXplIHBvc2UgYWN0aW9ucyBhbmQgc3BhY2VzLgorICAgIFJFVFVS
Tl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9QT1NFX0lOUFVU
LCBwcmVmaXggKyAiX2dyaXAiLCBtX2dyaXBBY3Rpb24pLCBtX2luc3RhbmNlKTsKKyAgICBSRVRV
Uk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVTcGFjZUFjdGlvbihtX2dyaXBBY3Rpb24sIG1fZ3Jp
cFNwYWNlKSwgbV9pbnN0YW5jZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3JlYXRl
QWN0aW9uKFhSX0FDVElPTl9UWVBFX1BPU0VfSU5QVVQsIHByZWZpeCArICJfcG9pbnRlciIsIG1f
cG9pbnRlckFjdGlvbiksIG1faW5zdGFuY2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVE
KGNyZWF0ZVNwYWNlQWN0aW9uKG1fcG9pbnRlckFjdGlvbiwgbV9wb2ludGVyU3BhY2UpLCBtX2lu
c3RhbmNlKTsKKworICAgIC8vIEluaXRpYWxpemUgYnV0dG9uIGFjdGlvbnMuCisgICAgZm9yIChh
dXRvIGJ1dHRvblR5cGUgOiBvcGVuWFJCdXR0b25UeXBlcykgeworICAgICAgICBPcGVuWFJCdXR0
b25BY3Rpb25zIGFjdGlvbnM7CisgICAgICAgIGNyZWF0ZUJ1dHRvbkFjdGlvbnMoYnV0dG9uVHlw
ZSwgcHJlZml4LCBhY3Rpb25zKTsKKyAgICAgICAgbV9idXR0b25BY3Rpb25zLmFkZChidXR0b25U
eXBlLCBhY3Rpb25zKTsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIGF4ZXMuCisgICAgZm9y
IChhdXRvIGF4aXNUeXBlIDogb3BlblhSQXhpc1R5cGVzKSB7CisgICAgICAgIFhyQWN0aW9uIGF4
aXNBY3Rpb24gPSBYUl9OVUxMX0hBTkRMRTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmVmaXgg
KyAiX2F4aXNfIiArIGF4aXNUeXBldG9TdHJpbmcoYXhpc1R5cGUpOworICAgICAgICBSRVRVUk5f
UkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVBY3Rpb24oWFJfQUNUSU9OX1RZUEVfVkVDVE9SMkZfSU5Q
VVQsIG5hbWUsIGF4aXNBY3Rpb24pLCBtX2luc3RhbmNlLCBmYWxzZSk7CisgICAgICAgIG1fYXhp
c0FjdGlvbnMuYWRkKGF4aXNUeXBlLCBheGlzQWN0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4g
WFJfU1VDQ0VTUzsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OnN1Z2dlc3RCaW5k
aW5ncyhTdWdnZXN0ZWRCaW5kaW5ncyYgYmluZGluZ3MpIGNvbnN0Cit7CisgICAgZm9yIChhdXRv
JiBwcm9maWxlIDogb3BlblhSSW5wdXRQcm9maWxlcykgeworICAgICAgICAvLyBTdWdnZXN0IGJp
bmRpbmcgZm9yIHBvc2UgYWN0aW9ucy4KKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQo
Y3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIG1fZ3JpcEFjdGlvbiwgbV9zdWJhY3Rpb25QYXRo
TmFtZSArIE9QRU5YUl9JTlBVVF9HUklQX1BBVEgsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7Cisg
ICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRo
LCBtX3BvaW50ZXJBY3Rpb24sIG1fc3ViYWN0aW9uUGF0aE5hbWUgKyBPUEVOWFJfSU5QVVRfQUlN
X1BBVEgsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisKKyAgICAgICAgLy8gU3VnZ2VzdCBiaW5k
aW5nIGZvciBidXR0b24gYWN0aW9ucy4KKyAgICAgICAgY29uc3QgT3BlblhSQnV0dG9uKiBidXR0
b25zOworICAgICAgICBzaXplX3QgYnV0dG9uc1NpemU7CisgICAgICAgIGlmIChtX2hhbmRlbmVz
cyA9PSBYUkhhbmRlZG5lc3M6OkxlZnQpIHsKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9maWxl
LmxlZnRCdXR0b25zOworICAgICAgICAgICAgYnV0dG9uc1NpemUgPSBwcm9maWxlLmxlZnRCdXR0
b25zU2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9maWxl
LnJpZ2h0QnV0dG9uczsKKyAgICAgICAgICAgIGJ1dHRvbnNTaXplID0gcHJvZmlsZS5yaWdodEJ1
dHRvbnNTaXplOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
dXR0b25zU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBidXR0b24gPSBidXR0
b25zW2ldOworICAgICAgICAgICAgY29uc3QgYXV0byYgYWN0aW9ucyA9IG1fYnV0dG9uQWN0aW9u
cy5nZXQoYnV0dG9uLnR5cGUpOworICAgICAgICAgICAgaWYgKGJ1dHRvbi5wcmVzcykgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChhY3Rpb25zLnByZXNzICE9IFhSX05VTExfSEFORExFKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVCaW5kaW5nKHByb2Zp
bGUucGF0aCwgYWN0aW9ucy5wcmVzcywgbV9zdWJhY3Rpb25QYXRoTmFtZSArIGJ1dHRvbi5wcmVz
cywgYmluZGluZ3MpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChidXR0b24udG91Y2gpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aW9ucy50b3VjaCAh
PSBYUl9OVUxMX0hBTkRMRSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlM
RUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIGFjdGlvbnMudG91Y2gsIG1fc3ViYWN0aW9u
UGF0aE5hbWUgKyBidXR0b24udG91Y2gsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYnV0dG9uLnZhbHVlKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGFjdGlvbnMudmFsdWUgIT0gWFJfTlVMTF9IQU5ETEUpOworICAgICAgICAgICAgICAg
IFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBhY3Rp
b25zLnZhbHVlLCBtX3N1YmFjdGlvblBhdGhOYW1lICsgYnV0dG9uLnZhbHVlLCBiaW5kaW5ncyks
IG1faW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU3Vn
Z2VzdCBiaW5kaW5nIGZvciBheGlzIGFjdGlvbnMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvZmlsZS5heGVzU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBh
eGlzID0gcHJvZmlsZS5heGVzW2ldOworICAgICAgICAgICAgYXV0byBhY3Rpb24gPSBtX2F4aXNB
Y3Rpb25zLmdldChheGlzLnR5cGUpOworICAgICAgICAgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9O
VUxMX0hBTkRMRSk7CisgICAgICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVC
aW5kaW5nKHByb2ZpbGUucGF0aCwgYWN0aW9uLCBtX3N1YmFjdGlvblBhdGhOYW1lICsgYXhpcy5w
YXRoLCBiaW5kaW5ncyksIG1faW5zdGFuY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIFhSX1NVQ0NFU1M7Cit9CisKK09wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJbnB1dFNv
dXJjZT4gT3BlblhSSW5wdXRTb3VyY2U6OmdldElucHV0U291cmNlKFhyU3BhY2UgbG9jYWxTcGFj
ZSwgY29uc3QgWHJGcmFtZVN0YXRlJiBmcmFtZVN0YXRlKSBjb25zdAoreworICAgIERldmljZTo6
RnJhbWVEYXRhOjpJbnB1dFNvdXJjZSBkYXRhOworICAgIGRhdGEuaGFuZGVuZXNzID0gbV9oYW5k
ZW5lc3M7CisgICAgZGF0YS5oYW5kbGUgPSBtX2hhbmRsZTsKKyAgICBkYXRhLnRhcmdldFJheU1v
ZGUgPSBYUlRhcmdldFJheU1vZGU6OlRyYWNrZWRQb2ludGVyOworICAgIGRhdGEucHJvZmlsZXMg
PSBtX3Byb2ZpbGVzOworCisgICAgLy8gUG9zZSB0cmFuc2Zvcm1zLgorICAgIGdldFBvc2UobV9w
b2ludGVyU3BhY2UsIGxvY2FsU3BhY2UsIGZyYW1lU3RhdGUsIGRhdGEucG9pbnRlck9yaWdpbik7
CisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlUG9zZSBncmlwUG9zZTsKKyAgICBp
ZiAoWFJfU1VDQ0VFREVEKGdldFBvc2UobV9ncmlwU3BhY2UsIGxvY2FsU3BhY2UsIGZyYW1lU3Rh
dGUsIGdyaXBQb3NlKSkpCisgICAgICAgIGRhdGEuZ3JpcE9yaWdpbiA9IGdyaXBQb3NlOworCisg
ICAgLy8gQnV0dG9ucy4KKyAgICBWZWN0b3I8T3B0aW9uYWw8RGV2aWNlOjpGcmFtZURhdGE6Oklu
cHV0U291cmNlQnV0dG9uPj4gYnV0dG9uczsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiBvcGVuWFJC
dXR0b25UeXBlcykgCisgICAgICAgIGJ1dHRvbnMuYXBwZW5kKGdldEJ1dHRvbih0eXBlKSk7CisK
KyAgICAvLyBUcmlnZ2VyIGlzIG1hbmRhdG9yeSBpbiB4ci1zdGFuZGFyZCBtYXBwaW5nLgorICAg
IGlmIChidXR0b25zLmlzRW1wdHkoKSB8fCAhYnV0dG9ucy5maXJzdCgpLmhhc1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJ1dHRvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1dHRvbnNbaV0pIHsKKyAgICAg
ICAgICAgIGRhdGEuYnV0dG9ucy5hcHBlbmQoKmJ1dHRvbnNbaV0pOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRkIHBsYWNlaG9sZGVyIGlmIHRoZXJlIGFy
ZSBtb3JlIHZhbGlkIGJ1dHRvbnMgaW4gdGhlIGxpc3QuCisgICAgICAgIGZvciAoc2l6ZV90IGog
PSBpICsgMTsgaiA8IGJ1dHRvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGlmIChidXR0
b25zW2pdKSB7CisgICAgICAgICAgICAgICAgZGF0YS5idXR0b25zLmFwcGVuZCh7IH0pOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQXhlcy4KKyAgICBWZWN0b3I8T3B0aW9uYWw8WHJWZWN0b3IyZj4+IGF4ZXM7CisgICAg
Zm9yIChhdXRvJiB0eXBlIDogb3BlblhSQXhpc1R5cGVzKSAKKyAgICAgICAgYXhlcy5hcHBlbmQo
Z2V0QXhpcyh0eXBlKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4ZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGF4ZXNbaV0pIHsKKyAgICAgICAgICAgIGRhdGEuYXhlcy5h
cHBlbmQoYXhlc1tpXS0+eCk7CisgICAgICAgICAgICBkYXRhLmF4ZXMuYXBwZW5kKGF4ZXNbaV0t
PnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRkIHBs
YWNlaG9sZGVyIGlmIHRoZXJlIGFyZSBtb3JlIHZhbGlkIGF4ZXMgaW4gdGhlIGxpc3QuCisgICAg
ICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGJ1dHRvbnMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgICAgIGlmIChheGVzW2pdKSB7CisgICAgICAgICAgICAgICAgZGF0YS5heGVzLmFwcGVu
ZCgwLjBmKTsKKyAgICAgICAgICAgICAgICBkYXRhLmF4ZXMuYXBwZW5kKDAuMGYpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGRhdGE7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjp1cGRhdGVJbnRl
cmFjdGlvblByb2ZpbGUoKQoreworICAgIGF1dG8gc3RhdGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJJ
bnRlcmFjdGlvblByb2ZpbGVTdGF0ZSwgWFJfVFlQRV9JTlRFUkFDVElPTl9QUk9GSUxFX1NUQVRF
PigpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyR2V0Q3VycmVudEludGVyYWN0aW9u
UHJvZmlsZShtX3Nlc3Npb24sIG1fc3ViYWN0aW9uUGF0aCwgJnN0YXRlKSwgbV9pbnN0YW5jZSk7
CisKKyAgICBjb25zdGV4cHIgdWludDMyX3QgYnVmZmVyU2l6ZSA9IDEwMDsgCisgICAgY2hhciBi
dWZmZXJbYnVmZmVyU2l6ZV07CisgICAgdWludDMyX3Qgd3JpdHRlbkNvdW50ID0gMDsKKyAgICBS
RVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4clBhdGhUb1N0cmluZyhtX2luc3RhbmNlLCBzdGF0ZS5p
bnRlcmFjdGlvblByb2ZpbGUsIGJ1ZmZlclNpemUsICZ3cml0dGVuQ291bnQsIGJ1ZmZlciksIG1f
aW5zdGFuY2UpOworCisgICAgbV9wcm9maWxlcy5jbGVhcigpOworICAgIGZvciAoYXV0byYgcHJv
ZmlsZSA6IG9wZW5YUklucHV0UHJvZmlsZXMpIHsKKyAgICAgICAgaWYgKCFzdHJuY21wKHByb2Zp
bGUucGF0aCwgYnVmZmVyLCB3cml0dGVuQ291bnQpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByb2ZpbGUucHJvZmlsZUlkc1NpemU7ICsraSkKKyAgICAgICAgICAgICAg
ICBtX3Byb2ZpbGVzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KHByb2ZpbGUucHJvZmlsZUlkc1tp
XSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
WFJfU1VDQ0VTUzsKK30KKworCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlU3Bh
Y2VBY3Rpb24oWHJBY3Rpb24gYWN0aW9uLCBYclNwYWNlJiBzcGFjZSkgY29uc3QKK3sKKyAgICBh
dXRvIGNyZWF0ZUluZm8gPSAgY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3BhY2VDcmVhdGVJbmZv
LCBYUl9UWVBFX0FDVElPTl9TUEFDRV9DUkVBVEVfSU5GTz4oKTsKKyAgICBjcmVhdGVJbmZvLmFj
dGlvbiA9IGFjdGlvbjsKKyAgICBjcmVhdGVJbmZvLnN1YmFjdGlvblBhdGggPSBtX3N1YmFjdGlv
blBhdGg7CisgICAgY3JlYXRlSW5mby5wb3NlSW5BY3Rpb25TcGFjZSA9IFhyUG9zZUlkZW50aXR5
KCk7CisKKyAgICByZXR1cm4geHJDcmVhdGVBY3Rpb25TcGFjZShtX3Nlc3Npb24sICZjcmVhdGVJ
bmZvLCAmc3BhY2UpOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQWN0
aW9uKFhyQWN0aW9uVHlwZSBhY3Rpb25UeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFhyQWN0aW9u
JiBhY3Rpb24pIGNvbnN0Cit7CisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0ZVN0cnVjdHVy
ZTxYckFjdGlvbkNyZWF0ZUluZm8sIFhSX1RZUEVfQUNUSU9OX0NSRUFURV9JTkZPPigpOworICAg
IGNyZWF0ZUluZm8uYWN0aW9uVHlwZSA9IGFjdGlvblR5cGU7CisgICAgY3JlYXRlSW5mby5jb3Vu
dFN1YmFjdGlvblBhdGhzID0gMTsKKyAgICBjcmVhdGVJbmZvLnN1YmFjdGlvblBhdGhzID0gJm1f
c3ViYWN0aW9uUGF0aDsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5hY3Rpb25OYW1lLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOworICAg
IHN0ZDo6c3RybmNweShjcmVhdGVJbmZvLmxvY2FsaXplZEFjdGlvbk5hbWUsIG5hbWUudXRmOCgp
LmRhdGEoKSwgWFJfTUFYX0FDVElPTl9TRVRfTkFNRV9TSVpFIC0gMSk7CisKKyAgICByZXR1cm4g
eHJDcmVhdGVBY3Rpb24obV9hY3Rpb25TZXQsICZjcmVhdGVJbmZvLCAmYWN0aW9uKTsKK30KKwor
WHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OmNyZWF0ZUJ1dHRvbkFjdGlvbnMoT3BlblhSQnV0
dG9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHByZWZpeCwgT3BlblhSQnV0dG9uQWN0aW9ucyYg
YWN0aW9ucykgY29uc3QKK3sKKyAgICBhdXRvIG5hbWUgPSBwcmVmaXggKyAiX2J1dHRvbl8iICsg
YnV0dG9uVHlwZVRvU3RyaW5nKHR5cGUpOworCisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQo
Y3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX0JPT0xFQU5fSU5QVVQsIG5hbWUgKyAiX3ByZXNz
IiwgYWN0aW9ucy5wcmVzcyksIG1faW5zdGFuY2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJ
TEVEKGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9CT09MRUFOX0lOUFVULCBuYW1lICsgIl90
b3VjaCIsIGFjdGlvbnMudG91Y2gpLCBtX2luc3RhbmNlKTsKKyAgICBSRVRVUk5fUkVTVUxUX0lG
X0ZBSUxFRChjcmVhdGVBY3Rpb24oWFJfQUNUSU9OX1RZUEVfRkxPQVRfSU5QVVQsIG5hbWUgKyAi
X3ZhbHVlIiwgYWN0aW9ucy52YWx1ZSksIG1faW5zdGFuY2UpOworICAgIAorICAgIHJldHVybiBY
Ul9TVUNDRVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQmluZGlu
Zyhjb25zdCBjaGFyKiBwcm9maWxlUGF0aCwgWHJBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcm
IGJpbmRpbmdQYXRoLCBTdWdnZXN0ZWRCaW5kaW5ncyYgYmluZGluZ3MpIGNvbnN0Cit7CisgICAg
QVNTRVJUKHByb2ZpbGVQYXRoICE9IFhSX05VTExfUEFUSCk7CisgICAgQVNTRVJUKGFjdGlvbiAh
PSBYUl9OVUxMX0hBTkRMRSk7CisgICAgQVNTRVJUKCFiaW5kaW5nUGF0aC5pc0VtcHR5KCkpOwor
CisgICAgWHJQYXRoIHBhdGggPSBYUl9OVUxMX1BBVEg7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9G
QUlMRUQoeHJTdHJpbmdUb1BhdGgobV9pbnN0YW5jZSwgYmluZGluZ1BhdGgudXRmOCgpLmRhdGEo
KSwgJnBhdGgpLCBtX2luc3RhbmNlKTsKKworICAgIFhyQWN0aW9uU3VnZ2VzdGVkQmluZGluZyBi
aW5kaW5nIHsgYWN0aW9uLCBwYXRoIH07CisgICAgaWYgKGF1dG8gaXQgPSBiaW5kaW5ncy5maW5k
KHByb2ZpbGVQYXRoKTsgaXQgIT0gYmluZGluZ3MuZW5kKCkpCisgICAgICAgIGl0LT52YWx1ZS5h
cHBlbmQoYmluZGluZyk7CisgICAgZWxzZQorICAgICAgICBiaW5kaW5ncy5hZGQocHJvZmlsZVBh
dGgsIFZlY3RvcjxYckFjdGlvblN1Z2dlc3RlZEJpbmRpbmc+IHsgYmluZGluZyB9KTsKKworICAg
IHJldHVybiBYUl9TVUNDRVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0
UG9zZShYclNwYWNlIHNwYWNlLCBYclNwYWNlIGJhc2VTcGFjZSwgY29uc3QgWHJGcmFtZVN0YXRl
JiBmcmFtZVN0YXRlLCBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VQb3NlJiBwb3NlKSBj
b25zdAoreworICAgIGF1dG8gbG9jYXRpb24gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTcGFjZUxvY2F0
aW9uLCBYUl9UWVBFX1NQQUNFX0xPQ0FUSU9OPigpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJ
TEVEKHhyTG9jYXRlU3BhY2Uoc3BhY2UsIGJhc2VTcGFjZSwgZnJhbWVTdGF0ZS5wcmVkaWN0ZWRE
aXNwbGF5VGltZSwgJmxvY2F0aW9uKSwgbV9pbnN0YW5jZSk7CisKKyAgICBpZiAobG9jYXRpb24u
bG9jYXRpb25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09SSUVOVEFUSU9OX1RSQUNLRURfQklU
KQorICAgICAgICBwb3NlLnBvc2UgPSBYclBvc2VmVG9Qb3NlKGxvY2F0aW9uLnBvc2UpOworICAg
IHBvc2UuaXNQb3NpdGlvbkVtdWxhdGVkID0gIShsb2NhdGlvbi5sb2NhdGlvbkZsYWdzICYgWFJf
U1BBQ0VfTE9DQVRJT05fUE9TSVRJT05fVkFMSURfQklUKTsKKworICAgIHJldHVybiBYUl9TVUND
RVNTOworfQorCitPcHRpb25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0b24+
IE9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24oT3BlblhSQnV0dG9uVHlwZSBidXR0b25UeXBl
KSBjb25zdAoreworICAgIGF1dG8gaXQgPSBtX2J1dHRvbkFjdGlvbnMuZmluZChidXR0b25UeXBl
KTsKKyAgICBpZiAoaXQgPT0gbV9idXR0b25BY3Rpb25zLmVuZCgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlQnV0dG9u
IHJlc3VsdDsKKyAgICBib29sIGhhc1ZhbHVlID0gZmFsc2U7CisgICAgYXV0byYgYWN0aW9ucyA9
IGl0LT52YWx1ZTsKKworICAgIGF1dG8gcXVlcnlBY3Rpb25TdGF0ZSA9IFt0aGlzLCAmaGFzVmFs
dWVdKFhyQWN0aW9uIGFjdGlvbiwgYXV0byYgdmFsdWUsIGF1dG8gZGVmYXVsdFZhbHVlKSB7Cisg
ICAgICAgIGlmIChhY3Rpb24gIT0gWFJfTlVMTF9IQU5ETEUgJiYgWFJfU1VDQ0VFREVEKGdldEFj
dGlvblN0YXRlKGFjdGlvbiwgJnZhbHVlKSkpCisgICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlOworICAgIH07
CisKKyAgICBxdWVyeUFjdGlvblN0YXRlKGFjdGlvbnMucHJlc3MsIHJlc3VsdC5wcmVzc2VkLCBm
YWxzZSk7CisgICAgcXVlcnlBY3Rpb25TdGF0ZShhY3Rpb25zLnRvdWNoLCByZXN1bHQudG91Y2hl
ZCwgcmVzdWx0LnByZXNzZWQpOworICAgIHF1ZXJ5QWN0aW9uU3RhdGUoYWN0aW9ucy52YWx1ZSwg
cmVzdWx0LnByZXNzZWRWYWx1ZSwgcmVzdWx0LnByZXNzZWQgPyAxLjAgOiAwLjApOworCisgICAg
cmV0dXJuIGhhc1ZhbHVlID8gIG1ha2VPcHRpb25hbChyZXN1bHQpIDogV1RGOjpudWxsb3B0Owor
fQorCitPcHRpb25hbDxYclZlY3RvcjJmPiBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QXhpcyhPcGVu
WFJBeGlzVHlwZSBheGlzVHlwZSkgY29uc3QKK3sKKyAgICBhdXRvIGl0ID0gbV9heGlzQWN0aW9u
cy5maW5kKGF4aXNUeXBlKTsKKyAgICBpZiAoaXQgPT0gbV9heGlzQWN0aW9ucy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFhyVmVjdG9yMmYgYXhpczsKKyAgICBp
ZiAoWFJfRkFJTEVEKGdldEFjdGlvblN0YXRlKGl0LT52YWx1ZSwgJmF4aXMpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBheGlzOworfQorCitYclJlc3VsdCBP
cGVuWFJJbnB1dFNvdXJjZTo6Z2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24gYWN0aW9uLCBib29sKiB2
YWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIEFTU0VSVChhY3Rpb24gIT0g
WFJfTlVMTF9IQU5ETEUpOworCisgICAgYXV0byBzdGF0ZSA9IGNyZWF0ZVN0cnVjdHVyZTxYckFj
dGlvblN0YXRlQm9vbGVhbiwgWFJfVFlQRV9BQ1RJT05fU1RBVEVfQk9PTEVBTj4oKTsKKyAgICBh
dXRvIGluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUdldEluZm8sIFhSX1RZUEVf
QUNUSU9OX1NUQVRFX0dFVF9JTkZPPigpOworICAgIGluZm8uYWN0aW9uID0gYWN0aW9uOworCisg
ICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJHZXRBY3Rpb25TdGF0ZUJvb2xlYW4obV9zZXNz
aW9uLCAmaW5mbywgJnN0YXRlKSwgbV9pbnN0YW5jZSk7CisgICAgKnZhbHVlID0gc3RhdGUuY3Vy
cmVudFN0YXRlOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKK1hyUmVzdWx0IE9wZW5Y
UklucHV0U291cmNlOjpnZXRBY3Rpb25TdGF0ZShYckFjdGlvbiBhY3Rpb24sIGZsb2F0KiB2YWx1
ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIEFTU0VSVChhY3Rpb24gIT0gWFJf
TlVMTF9IQU5ETEUpOworCisgICAgYXV0byBzdGF0ZSA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlv
blN0YXRlRmxvYXQsIFhSX1RZUEVfQUNUSU9OX1NUQVRFX0ZMT0FUPigpOworICAgIGF1dG8gaW5m
byA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblN0YXRlR2V0SW5mbywgWFJfVFlQRV9BQ1RJT05f
U1RBVEVfR0VUX0lORk8+KCk7CisgICAgaW5mby5hY3Rpb24gPSBhY3Rpb247CisKKyAgICBSRVRV
Uk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckdldEFjdGlvblN0YXRlRmxvYXQobV9zZXNzaW9uLCAmaW5m
bywgJnN0YXRlKSwgbV9pbnN0YW5jZSk7CisgICAgKnZhbHVlID0gc3RhdGUuY3VycmVudFN0YXRl
OworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291
cmNlOjpnZXRBY3Rpb25TdGF0ZShYckFjdGlvbiBhY3Rpb24sIFhyVmVjdG9yMmYqIHZhbHVlKSBj
b25zdAoreworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9OVUxM
X0hBTkRMRSk7CisKKyAgICBhdXRvIHN0YXRlID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3Rh
dGVWZWN0b3IyZiwgWFJfVFlQRV9BQ1RJT05fU1RBVEVfVkVDVE9SMkY+KCk7CisgICAgYXV0byBp
bmZvID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3RhdGVHZXRJbmZvLCBYUl9UWVBFX0FDVElP
Tl9TVEFURV9HRVRfSU5GTz4oKTsKKyAgICBpbmZvLmFjdGlvbiA9IGFjdGlvbjsKKworICAgIFJF
VFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyR2V0QWN0aW9uU3RhdGVWZWN0b3IyZihtX3Nlc3Npb24s
ICZpbmZvLCAmc3RhdGUpLCBtX2luc3RhbmNlKTsKKyAgICAqdmFsdWUgPSBzdGF0ZS5jdXJyZW50
U3RhdGU7CisKKyAgICByZXR1cm4gWFJfU1VDQ0VTUzsKK30KKworfSAvLyBuYW1lc3BhY2UgUGxh
dGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYmRjMWJiY2YzOGExY2MxM2EyZjJhZTU4ODE0MjhlOWQ3MDUwOGJkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5Y
UklucHV0U291cmNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9Q
RU5YUikKKworI2luY2x1ZGUgIk9wZW5YUklucHV0TWFwcGluZ3MuaCIKKyNpbmNsdWRlICJPcGVu
WFJVdGlscy5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK2NsYXNzIE9wZW5YUklucHV0
U291cmNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShPcGVuWFJJbnB1dFNvdXJjZSk7CitwdWJsaWM6CisgICAgdXNpbmcgU3VnZ2VzdGVk
QmluZGluZ3MgPSBIYXNoTWFwPGNvbnN0IGNoYXIqLCBWZWN0b3I8WHJBY3Rpb25TdWdnZXN0ZWRC
aW5kaW5nPj47CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJbnB1dFNvdXJjZT4g
Y3JlYXRlKFhySW5zdGFuY2UsIFhyU2Vzc2lvbiwgWFJIYW5kZWRuZXNzLCBJbnB1dFNvdXJjZUhh
bmRsZSk7CisgICAgfk9wZW5YUklucHV0U291cmNlKCk7CisKKyAgICBYclJlc3VsdCBzdWdnZXN0
QmluZGluZ3MoU3VnZ2VzdGVkQmluZGluZ3MmKSBjb25zdDsKKyAgICBPcHRpb25hbDxEZXZpY2U6
OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IGdldElucHV0U291cmNlKFhyU3BhY2UsIGNvbnN0IFhy
RnJhbWVTdGF0ZSYpIGNvbnN0OworICAgIFhyQWN0aW9uU2V0IGFjdGlvblNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fYWN0aW9uU2V0OyB9CisgICAgWHJSZXN1bHQgdXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKCk7CisKK3ByaXZhdGU6CisgICAgT3BlblhSSW5wdXRTb3VyY2UoWHJJbnN0YW5jZSwgWHJT
ZXNzaW9uLCBYUkhhbmRlZG5lc3MsIElucHV0U291cmNlSGFuZGxlKTsKKworICAgIHN0cnVjdCBP
cGVuWFJCdXR0b25BY3Rpb25zIHsKKyAgICAgICAgWHJBY3Rpb24gcHJlc3MgeyBYUl9OVUxMX0hB
TkRMRSB9OworICAgICAgICBYckFjdGlvbiB0b3VjaCB7IFhSX05VTExfSEFORExFIH07CisgICAg
ICAgIFhyQWN0aW9uIHZhbHVlIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICB9OworCisgICAgWHJS
ZXN1bHQgaW5pdGlhbGl6ZSgpOworICAgIFhyUmVzdWx0IGNyZWF0ZVNwYWNlQWN0aW9uKFhyQWN0
aW9uLCBYclNwYWNlJikgY29uc3Q7CisgICAgWHJSZXN1bHQgY3JlYXRlQWN0aW9uKFhyQWN0aW9u
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBYckFjdGlvbiYpIGNvbnN0OworICAgIFhyUmVzdWx0
IGNyZWF0ZUJ1dHRvbkFjdGlvbnMoT3BlblhSQnV0dG9uVHlwZSwgY29uc3QgU3RyaW5nJiBwcmVm
aXgsIE9wZW5YUkJ1dHRvbkFjdGlvbnMmKSBjb25zdDsKKyAgICBYclJlc3VsdCBjcmVhdGVCaW5k
aW5nKGNvbnN0IGNoYXIqIHByb2ZpbGVQYXRoLCBYckFjdGlvbiwgY29uc3QgU3RyaW5nJiBiaW5k
aW5nUGF0aCwgU3VnZ2VzdGVkQmluZGluZ3MmKSBjb25zdDsKKworICAgIFhyUmVzdWx0IGdldFBv
c2UoWHJTcGFjZSwgWHJTcGFjZSwgY29uc3QgWHJGcmFtZVN0YXRlJiwgRGV2aWNlOjpGcmFtZURh
dGE6OklucHV0U291cmNlUG9zZSYpIGNvbnN0OworICAgIE9wdGlvbmFsPERldmljZTo6RnJhbWVE
YXRhOjpJbnB1dFNvdXJjZUJ1dHRvbj4gZ2V0QnV0dG9uKE9wZW5YUkJ1dHRvblR5cGUpIGNvbnN0
OworICAgIE9wdGlvbmFsPFhyVmVjdG9yMmY+IGdldEF4aXMoT3BlblhSQXhpc1R5cGUpIGNvbnN0
OworICAgIFhyUmVzdWx0IGdldEFjdGlvblN0YXRlKFhyQWN0aW9uLCBib29sKikgY29uc3Q7Cisg
ICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24sIGZsb2F0KikgY29uc3Q7CisgICAg
WHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24sIFhyVmVjdG9yMmYqKSBjb25zdDsKKwor
ICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhSX05VTExfSEFORExFIH07CisgICAgWHJTZXNz
aW9uIG1fc2Vzc2lvbiB7IFhSX05VTExfSEFORExFIH07CisgICAgWFJIYW5kZWRuZXNzIG1faGFu
ZGVuZXNzIHsgWFJIYW5kZWRuZXNzOjpMZWZ0IH07CisgICAgSW5wdXRTb3VyY2VIYW5kbGUgbV9o
YW5kbGUgeyAwIH07CisgICAgU3RyaW5nIG1fc3ViYWN0aW9uUGF0aE5hbWU7CisgICAgWHJQYXRo
IG1fc3ViYWN0aW9uUGF0aCB7IFhSX05VTExfUEFUSCB9OworICAgIFhyQWN0aW9uU2V0IG1fYWN0
aW9uU2V0IHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBYckFjdGlvbiBtX2dyaXBBY3Rpb24geyBY
Ul9OVUxMX0hBTkRMRSB9OworICAgIFhyU3BhY2UgbV9ncmlwU3BhY2UgeyBYUl9OVUxMX0hBTkRM
RSB9OworICAgIFhyQWN0aW9uIG1fcG9pbnRlckFjdGlvbiB7IFhSX05VTExfSEFORExFIH07Cisg
ICAgWHJTcGFjZSBtX3BvaW50ZXJTcGFjZSB7IFhSX05VTExfSEFORExFIH07CisgICAgdXNpbmcg
T3BlblhSQnV0dG9uQWN0aW9uc01hcCA9IEhhc2hNYXA8T3BlblhSQnV0dG9uVHlwZSwgT3BlblhS
QnV0dG9uQWN0aW9ucywgSW50SGFzaDxPcGVuWFJCdXR0b25UeXBlPiwgV1RGOjpTdHJvbmdFbnVt
SGFzaFRyYWl0czxPcGVuWFJCdXR0b25UeXBlPj47CisgICAgT3BlblhSQnV0dG9uQWN0aW9uc01h
cCBtX2J1dHRvbkFjdGlvbnM7CisgICAgdXNpbmcgT3BlblhSQXhlc01hcCA9IEhhc2hNYXA8T3Bl
blhSQXhpc1R5cGUsIFhyQWN0aW9uLCBJbnRIYXNoPE9wZW5YUkF4aXNUeXBlPiwgV1RGOjpTdHJv
bmdFbnVtSGFzaFRyYWl0czxPcGVuWFJBeGlzVHlwZT4+OworICAgIE9wZW5YUkF4ZXNNYXAgbV9h
eGlzQWN0aW9uczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3Byb2ZpbGVzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BF
TlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5Y
UlV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMu
aAppbmRleCA2MmM1Y2IxYTZiZDdmOGNhNDQxYTY0NjBiZjdlOGI2NmM4OTBlNjdhLi45ZWNjNDhh
NmE2ZjAxNWVjNzVlYTE1ODFmMzY0OGFhMjAzOWY3YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaApAQCAtNjQsMTAgKzY0LDIyIEBAIGlu
bGluZSBTdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJSZXN1bHQgdmFsdWUsIFhySW5zdGFuY2UgaW5z
dGFuY2UpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjx1bmtub3duICIsIGludCh2YWx1ZSksICI+
Iik7CiB9CiAKLSNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsIGNhbGwsIGluc3RhbmNl
LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBp
ZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTE9HKFhSLCAiJXMg
JXM6ICVzXG4iLCBfX2Z1bmNfXywgY2FsbCwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5j
ZSkudXRmOCgpLmRhdGEoKSk7IFwKLSAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxFRChjYWxsLCBsYWJlbCwgaW5zdGFuY2UsIC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBhdXRvIHhyUmVzdWx0ID0gY2FsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
aWYgKFhSX0ZBSUxFRCh4clJlc3VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBM
T0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVuY19fLCBsYWJlbCwgcmVzdWx0VG9TdHJpbmcoeHJS
ZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsgICAgXAorICAgICAgICAgICAgcmV0dXJu
IF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFJFVFVSTl9SRVNV
TFRfSUZfRkFJTEVEKGNhbGwsIGluc3RhbmNlLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgYXV0byB4clJlc3VsdCA9IGNhbGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIGlmIChYUl9GQUlMRUQoeHJSZXN1bHQpKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgTE9HKFhSLCAiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgI2Nh
bGwsIHJlc3VsdFRvU3RyaW5nKHhyUmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7ICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiB4clJlc3VsdDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIAogI2RlZmluZSBMT0dfSUZfRkFJ
TEVEKHJlc3VsdCwgY2FsbCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXApAQCAtOTEsNiArMTAzLDEzIEBAIGlubGluZSBEZXZpY2U6OkZy
YW1lRGF0YTo6VmlldyB4clZpZXdUb1Bvc2UoWHJWaWV3IHZpZXcpCiAgICAgcmV0dXJuIHBvc2U7
CiB9CiAKK2lubGluZSBYclBvc2VmIFhyUG9zZUlkZW50aXR5KCkKK3sKKyAgICBYclBvc2VmIHBv
c2U7CisgICAgcG9zZS5vcmllbnRhdGlvbi53ID0gMS4wOworICAgIHJldHVybiBwb3NlOworfQor
CiBpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdG9YclZpZXdDb25maWd1cmF0aW9uVHlw
ZShTZXNzaW9uTW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTA0LDYgKzEy
MywxOSBAQCBpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdG9YclZpZXdDb25maWd1cmF0
aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQogICAgIHJldHVybiBYUl9WSUVXX0NPTkZJR1VSQVRJ
T05fVFlQRV9QUklNQVJZX01PTk87CiB9CiAKK2lubGluZSBTdHJpbmcgaGFuZGVuZXNzVG9TdHJp
bmcoWFJIYW5kZWRuZXNzIGhhbmRlbmVzcykKK3sKKyAgICBzd2l0Y2ggKGhhbmRlbmVzcykgewor
ICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpMZWZ0OgorICAgICAgICByZXR1cm4gImxlZnQiOworICAg
IGNhc2UgWFJIYW5kZWRuZXNzOjpSaWdodDoKKyAgICAgICAgcmV0dXJuICJyaWdodCI7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAi
IjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcAppbmRleCBhNzkzNmNjMjhjNThl
ZDYzOGI1YTlmNWJiNDMxY2NiZmQxMDRiNGRlLi45OWNmMGY4NDI5OTM3ZWQwZmVmMDQ5MzE4Yzdm
YTJiYjZhNWYxM2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVu
eHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIv
b3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCkBAIC0yMyw2ICsyMyw4IEBACiAjaWYgRU5BQkxF
KFdFQlhSKSAmJiBVU0UoT1BFTlhSKQogCiAjaW5jbHVkZSAiT3BlblhSRXh0ZW5zaW9ucy5oIgor
I2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3VyY2UuaCIK
IAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgpAQCAtMTM1LDYgKzEzNyw5IEBAIHZvaWQgT3BlblhSRGV2aWNlOjppbml0aWFsaXplVHJh
Y2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUgbW9kZSkKICAgICAgICAgLy8gQ3JlYXRlIHRo
ZSBkZWZhdWx0IHJlZmVyZW5jZSBzcGFjZXMKICAgICAgICAgbV9sb2NhbFNwYWNlID0gY3JlYXRl
UmVmZXJlbmNlU3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfTE9DQUwpOwogICAgICAgICBt
X3ZpZXdTcGFjZSA9IGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9TUEFDRV9UWVBF
X1ZJRVcpOworCisgICAgICAgIC8vIEluaXRpYWxpemUgaW5wdXQgdHJhY2tpbmcKKyAgICAgICAg
bV9pbnB1dCA9IE9wZW5YUklucHV0OjpjcmVhdGUobV9pbnN0YW5jZSwgbV9zZXNzaW9uLCBtX2xv
Y2FsU3BhY2UpOwogICAgIH0pOwogfQogCkBAIC0yMzEsNiArMjM2LDEwIEBAIHZvaWQgT3BlblhS
RGV2aWNlOjpyZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1lQ2FsbGJhY2smJiBjYWxsYmFjaykKICAg
ICAgICAgICAgICAgICBpZiAobGF5ZXJEYXRhKQogICAgICAgICAgICAgICAgICAgICBmcmFtZURh
dGEubGF5ZXJzLmFkZChsYXllci5rZXksICpsYXllckRhdGEpOwogICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobV9pbnB1dCkKKyAgICAgICAgICAgICAgICBmcmFtZURhdGEuaW5wdXRT
b3VyY2VzID0gbV9pbnB1dC0+Z2V0SW5wdXRTb3VyY2VzKG1fZnJhbWVTdGF0ZSk7CisKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lz
dHJ5L09wZW5YUi9zcGVjcy8xLjAvbWFuL2h0bWwvWHJGcmFtZVN0YXRlLmh0bWwKICAgICAgICAg
ICAgIC8vIFdoZW4gc2hvdWxkUmVuZGVyIGlzIGZhbHNlIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQg
YXZvaWQgaGVhdnkgR1BVIHdvcmsgd2hlcmUgcG9zc2libGUsCkBAIC00NTQsNiArNDYzLDggQEAg
dm9pZCBPcGVuWFJEZXZpY2U6OnBvbGxFdmVudHMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RBVEFfSU5URVJBQ1RJT05fUFJPRklM
RV9DSEFOR0VEOgorICAgICAgICAgICAgdXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKCk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBYUl9UWVBFX0VWRU5UX0RBVEFfTUFJTl9TRVNT
SU9OX1ZJU0lCSUxJVFlfQ0hBTkdFRF9FWFRYOgogICAgICAgICBjYXNlIFhSX1RZUEVfRVZFTlRf
REFUQV9WSVNJQklMSVRZX01BU0tfQ0hBTkdFRF9LSFI6CiAgICAgICAgIGNhc2UgWFJfVFlQRV9F
VkVOVF9EQVRBX1BFUkZfU0VUVElOR1NfRVhUOgpAQCAtNTAwLDYgKzUxMSw3IEBAIHZvaWQgT3Bl
blhSRGV2aWNlOjpyZXNldFNlc3Npb24oKQogewogICAgIEFTU0VSVCgmUnVuTG9vcDo6Y3VycmVu
dCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7CiAgICAgbV9sYXllcnMuY2xlYXIoKTsKKyAgICBt
X2lucHV0LnJlc2V0KCk7CiAgICAgaWYgKG1fc2Vzc2lvbiAhPSBYUl9OVUxMX0hBTkRMRSkgewog
ICAgICAgICB4ckRlc3Ryb3lTZXNzaW9uKG1fc2Vzc2lvbik7CiAgICAgICAgIG1fc2Vzc2lvbiA9
IFhSX05VTExfSEFORExFOwpAQCAtNTY0LDYgKzU3NiwyNiBAQCB2b2lkIE9wZW5YUkRldmljZTo6
dXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCkKICAgICB9CiB9CiAKK3ZvaWQgT3BlblhSRGV2aWNlOjp1
cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKQoreworICAgIGlmICghbV9pbnB1dCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9pbnB1dC0+dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKCk7CisKKyAg
ICBpZiAoZGlkTm90aWZ5SW5wdXRJbml0aWFsaXphdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZGlkTm90aWZ5SW5wdXRJbml0aWFsaXphdGlvbiA9IHRydWU7CisgICAgYXV0byBpbnB1dFNv
dXJjZXMgPSBtX2lucHV0LT5nZXRJbnB1dFNvdXJjZXMobV9mcmFtZVN0YXRlKTsKKyAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgaW5wdXRT
b3VyY2VzID0gV1RGTW92ZShpbnB1dFNvdXJjZXMpXSgpIG11dGFibGUgeworICAgICAgICBpZiAo
IXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV90cmFja2luZ0Fu
ZFJlbmRlcmluZ0NsaWVudCkKKyAgICAgICAgICAgIG1fdHJhY2tpbmdBbmRSZW5kZXJpbmdDbGll
bnQtPnNlc3Npb25EaWRJbml0aWFsaXplSW5wdXRTb3VyY2VzKFdURk1vdmUoaW5wdXRTb3VyY2Vz
KSk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCmluZGV4IGE4NmQ1Yzk0OTMxNmE2
ODY4MDA3NGE0NzU2YWQ0YzMzYWE3OWE5YzkuLmNkYjYzNjZlOTE5NjMxYmFiNTZhOWE4ZTVhYzY1
OWVhMTFlOThhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54
ci9QbGF0Zm9ybVhST3BlblhSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Bl
bnhyL1BsYXRmb3JtWFJPcGVuWFIuaApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFBsYXRm
b3JtWFIgewogCiBjbGFzcyBPcGVuWFJFeHRlbnNpb25zOworY2xhc3MgT3BlblhSSW5wdXQ7CiAK
IC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5YUi9zcGVjcy8xLjAvaHRt
bC94cnNwZWMuaHRtbCNzeXN0ZW0KIC8vIEEgc3lzdGVtIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9u
IG9mIHJlbGF0ZWQgZGV2aWNlcyBpbiB0aGUgcnVudGltZSwgb2Z0ZW4gbWFkZSB1cCBvZiBzZXZl
cmFsIGluZGl2aWR1YWwKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRs
ZVNlc3Npb25TdGF0ZUNoYW5nZSgpOwogICAgIHZvaWQgd2FpdFVudGlsU3RvcHBpbmcoKTsKICAg
ICB2b2lkIHVwZGF0ZVN0YWdlUGFyYW1ldGVycygpOworICAgIHZvaWQgdXBkYXRlSW50ZXJhY3Rp
b25Qcm9maWxlKCk7CiAgICAgTGF5ZXJIYW5kbGUgZ2VuZXJhdGVMYXllckhhbmRsZSgpIHsgcmV0
dXJuICsrbV9oYW5kbGVJbmRleDsgfQogCiAgICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlOwpAQCAt
OTMsNiArOTUsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxYclZpZXc+IG1fZnJhbWVWaWV3czsK
ICAgICBIYXNoTWFwPExheWVySGFuZGxlLCBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSTGF5ZXI+PiBt
X2xheWVyczsKICAgICBMYXllckhhbmRsZSBtX2hhbmRsZUluZGV4IHsgMCB9OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxPcGVuWFJJbnB1dD4gbV9pbnB1dDsKKyAgICBib29sIGRpZE5vdGlmeUlucHV0
SW5pdGlhbGl6YXRpb24geyBmYWxzZSB9OwogCiAgICAgdXNpbmcgVmlld0NvbmZpZ3VyYXRpb25Q
cm9wZXJ0aWVzTWFwID0gSGFzaE1hcDxYclZpZXdDb25maWd1cmF0aW9uVHlwZSwgWHJWaWV3Q29u
ZmlndXJhdGlvblByb3BlcnRpZXMsIEludEhhc2g8WHJWaWV3Q29uZmlndXJhdGlvblR5cGU+LCBX
VEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlPj47CiAgICAg
Vmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzTWFwIG1fdmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0
aWVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429522</attachid>
            <date>2021-05-24 04:23:50 -0700</date>
            <delta_ts>2021-05-24 09:07:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224931-20210524132348.patch</filename>
            <type>text/plain</type>
            <size>45331</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzllMGU4ZDA4NDIyMThh
ODBlODZjZjMzZmI0ZWFiMGJiY2FjMDE1Mi4uZDA1ZTZjYzI4MTFmZmFlYmFlZDMyZmMwZWM3YTg0
MzRlOWNhNzlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIxLTA0LTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBPcGVuWFIgaW5wdXQgc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI0OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDogQWRkIE9wZW5YUklucHV0IGFuZCBPcGVuWFJJ
bnB1dFNvdXJjZSBmaWxlcworCisgICAgICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklu
cHV0LmNwcDogRW50cnkgcG9pbnQgdG8gcXVlcnkgYW5kIHN5bmMgaW5wdXQgaW4gT3BlblhSLgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXQ6OmNyZWF0ZSk6CisgICAgICAgIChQbGF0
Zm9ybVhSOjpPcGVuWFJJbnB1dDo6T3BlblhSSW5wdXQpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5w
dXQ6OmdldElucHV0U291cmNlcyBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJ
bnB1dDo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5wdXQuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5wdXRNYXBwaW5ncy5oOiBNYXBwaW5nIGRlZmluaXRpb24gZm9yIHN1cHBvcnRl
ZCBpbnB1dCBwcm9maWxlcy4KKyAgICAgICAgKFBsYXRmb3JtWFI6OmJ1dHRvblR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpheGlzVHlwZXRvU3RyaW5nKToKKworICAgICAgICAq
IHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHA6IEhhbmRsZXMgdHJhY2tp
bmcgYW5kIHN0YXR1cyBvZiBhIHNwZWNpZmljIGlucHV0IHNvdXJjZS4KKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSSW5wdXRTb3VyY2U6On5PcGVuWFJJbnB1dFNvdXJjZSk6CisgICAgICAgIChQbGF0Zm9y
bVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChQbGF0Zm9ybVhS
OjpPcGVuWFJJbnB1dFNvdXJjZTo6c3VnZ2VzdEJpbmRpbmdzIGNvbnN0KToKKyAgICAgICAgKFBs
YXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRJbnB1dFNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9m
aWxlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291cmNlOjpjcmVhdGVTcGFj
ZUFjdGlvbiBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6
Y3JlYXRlQWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUklucHV0U291
cmNlOjpjcmVhdGVCdXR0b25BY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9w
ZW5YUklucHV0U291cmNlOjpjcmVhdGVCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRQb3NlIGNvbnN0KToKKyAgICAgICAgKFBsYXRmb3Jt
WFI6Ok9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24gY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEF4aXMgY29uc3QpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmdldEFjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuaDogQWRkZWQuCisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6T3BlblhSSW5wdXRTb3VyY2UpOgorICAg
ICAgICAoUGxhdGZvcm1YUjo6T3BlblhSSW5wdXRTb3VyY2U6OmFjdGlvblNldCBjb25zdCk6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaDoKKyAgICAgICAgKFBs
YXRmb3JtWFI6OlhyUG9zZUlkZW50aXR5KTogQ3JlYXRlcyBhIGlkZW50aXR5IHBvc2UuCisgICAg
ICAgIChQbGF0Zm9ybVhSOjpoYW5kZW5lc3NUb1N0cmluZyk6IENvbnZlcnQgZnJvbSBoYW5kZW5l
c3MgZW51bSB0byBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZv
cm1YUk9wZW5YUi5jcHA6IEhhbmRsZSBpbnB1dCBzb3VyY2VzIGluIHRoZSBPcGVuWFIgcmVuZGVy
IGxvb3AuCisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFj
a2luZ0FuZFJlbmRlcmluZyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJl
cXVlc3RGcmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnBvbGxFdmVu
dHMpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24pOgor
ICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjp1cGRhdGVJbnRlcmFjdGlvblByb2Zp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmg6CisK
IDIwMjEtMDUtMjEgIEltYW5vbCBGZXJuYW5kZXogIDxpZmVybmFuZGV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgRml4IHVzZSBhZnRlciBtb3ZlIGJ1ZyBpbiBXZWJYUlNlc3Npb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMmY2NjA1YzEwMGFmYmJkM2Q5OWJiOTJhMDM0ZWM2ODA0M2FmNzA5Zi4uOTdjZTU0
NzMyMWRjMzdjYmQyNTc1OGY0ZmE2MzkwZjc0MTJkYTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIy
MDMsNiArMjIwMyw4IEBAIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiBw
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
RGV0ZWN0b3JJQ1UuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAor
cGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNwcCBAbm8tdW5pZnkKK3BsYXRmb3JtL3hy
L29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSSW5zdGFuY2UuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5Y
UkV4dGVuc2lvbnMuY3BwIEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkxheWVy
LmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4NjQ0ZjQzY2JkNzQ1ZjdmYWI3M2M2MjBjNTJiM2Q3MzUyMzkw
NmQyLi4wMTk1OWJlNjcyN2JmZDU2ZTFhNzU2YTU0OWJlYzM1MzFjMmE0YTRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDAz
LDYgKzY0MDMsMTEgQEAKIAkJMTE2M0Y4MjMyNEU1RDU5QjAwMEFCOTYwIC8qIFJlbmRlclRyZWVN
dXRhdGlvbkRpc2FsbG93ZWRTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVl
TXV0YXRpb25EaXNhbGxvd2VkU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMTY0OEI0MTI2MEEzRjZDMDA0QUYxRjIgLyogSlNXZWJYUlJpZ2lkVHJhbnNmb3JtQ3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViWFJSaWdpZFRy
YW5zZm9ybUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExNjQ4QjQz
MjYwQTNGNkMwMDRBRjFGMiAvKiBKU1dlYlhSVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYlhSVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTExODBGN0ZFMjYzMUNEOTIwMDAwRTYyNCAvKiBPcGVuWFJJbnB1
dFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTExODBGODAwMjYzMUNEOTIwMDAwRTYyNCAvKiBP
cGVuWFJJbnB1dE1hcHBpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0TWFwcGluZ3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0
IC8qIE9wZW5YUklucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5YUklucHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJ
bnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJJbnB1dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTExODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1
dFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVuWFJJbnB1dFNvdXJjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxMThCMDY4NjI1RTQxRTUxMDA3MEJFNEIgLyogT3BlblhSRXh0
ZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJF
eHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE4QjA2ODgyNUU0
MUU1MjAwNzBCRTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3BlblhSRXh0ZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxMThCMDY4OTI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSSW5zdGFuY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BlblhSSW5zdGFuY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkyMDIsNiArMjkyMDcsMTEgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTExOEIwNjg2MjVFNDFFNTEwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25z
LmNwcCAqLywKIAkJCQkxMThCMDY4ODI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSRXh0ZW5zaW9u
cy5oICovLAorCQkJCTExODBGODAyMjYzMUNEOTMwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dC5jcHAg
Ki8sCisJCQkJMTE4MEY4MDEyNjMxQ0Q5MzAwMDBFNjI0IC8qIE9wZW5YUklucHV0LmggKi8sCisJ
CQkJMTE4MEY4MDAyNjMxQ0Q5MjAwMDBFNjI0IC8qIE9wZW5YUklucHV0TWFwcGluZ3MuaCAqLywK
KwkJCQkxMTgwRjdGRTI2MzFDRDkyMDAwMEU2MjQgLyogT3BlblhSSW5wdXRTb3VyY2UuY3BwICov
LAorCQkJCTExODBGODAzMjYzMUNEOTQwMDAwRTYyNCAvKiBPcGVuWFJJbnB1dFNvdXJjZS5oICov
LAogCQkJCTExOEIwNjg5MjVFNDFFNTIwMDcwQkU0QiAvKiBPcGVuWFJJbnN0YW5jZS5jcHAgKi8s
CiAJCQkJMTE4QjA2OEEyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUlV0aWxzLmggKi8sCiAJCQkJ
RTFDMUEzOUIyNDgwMDgwNjAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjk5OGNjYjk2OTlhOWRhNmU0OTU4MWZhNzhmOTQ2NGVjMWQ5YjNmZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1
dC5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlh
LCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisKKyNp
ZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3Vy
Y2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhS
IHsKKworc3RkOjp1bmlxdWVfcHRyPE9wZW5YUklucHV0PiBPcGVuWFJJbnB1dDo6Y3JlYXRlKFhy
SW5zdGFuY2UgaW5zdGFuY2UsIFhyU2Vzc2lvbiBzZXNzaW9uLCBYclNwYWNlIHNwYWNlKQorewor
ICAgIGF1dG8gaW5wdXQgPSBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXQ+KG5ldyBPcGVuWFJJ
bnB1dChpbnN0YW5jZSwgc2Vzc2lvbiwgc3BhY2UpKTsKKyAgICBpZiAoWFJfRkFJTEVEKGlucHV0
LT5pbml0aWFsaXplKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5w
dXQ7Cit9CisKK09wZW5YUklucHV0OjpPcGVuWFJJbnB1dChYckluc3RhbmNlIGluc3RhbmNlLCBY
clNlc3Npb24gc2Vzc2lvbiwgWHJTcGFjZSBzcGFjZSkKKyAgICA6IG1faW5zdGFuY2UoaW5zdGFu
Y2UpCisgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAsIG1fbG9jYWxTcGFjZShzcGFjZSkK
K3sKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXQ6OmluaXRpYWxpemUoKQoreworICAgIHN0ZDo6
YXJyYXk8WFJIYW5kZWRuZXNzLCAyPiBoYW5kcyB7CisgICAgICAgIFhSSGFuZGVkbmVzczo6TGVm
dCwgWFJIYW5kZWRuZXNzOjpSaWdodAorICAgIH07CisKKyAgICBmb3IgKGF1dG8gaGFuZGVuZXNz
IDogaGFuZHMpIHsKKyAgICAgICAgbV9oYW5kbGVJbmRleCsrOzsKKyAgICAgICAgaWYgKGF1dG8g
aW5wdXRTb3VyY2UgPSBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlKG1faW5zdGFuY2UsIG1fc2Vz
c2lvbiwgaGFuZGVuZXNzLCBtX2hhbmRsZUluZGV4KSkKKyAgICAgICAgICAgIG1faW5wdXRTb3Vy
Y2VzLmFwcGVuZChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShpbnB1
dFNvdXJjZSkpKTsKKyAgICB9CisKKyAgICBPcGVuWFJJbnB1dFNvdXJjZTo6U3VnZ2VzdGVkQmlu
ZGluZ3MgYmluZGluZ3M7CisgICAgVmVjdG9yPFhyQWN0aW9uU2V0PiBhY3Rpb25TZXRzOworICAg
IGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0U291cmNlcykgeworICAgICAgICBpbnB1dC0+c3Vn
Z2VzdEJpbmRpbmdzKGJpbmRpbmdzKTsKKyAgICAgICAgYWN0aW9uU2V0cy5hcHBlbmQoaW5wdXQt
PmFjdGlvblNldCgpKTsKKyAgICB9CisgICAgCisgICAgZm9yIChhdXRvJiBiaW5kaW5nIDogYmlu
ZGluZ3MpIHsKKyAgICAgICAgYXV0byBzdWdnZXN0ZWRCaW5kaW5nID0gY3JlYXRlU3RydWN0dXJl
PFhySW50ZXJhY3Rpb25Qcm9maWxlU3VnZ2VzdGVkQmluZGluZywgWFJfVFlQRV9JTlRFUkFDVElP
Tl9QUk9GSUxFX1NVR0dFU1RFRF9CSU5ESU5HPigpOworICAgICAgICBSRVRVUk5fUkVTVUxUX0lG
X0ZBSUxFRCh4clN0cmluZ1RvUGF0aChtX2luc3RhbmNlLCBiaW5kaW5nLmtleSwgJnN1Z2dlc3Rl
ZEJpbmRpbmcuaW50ZXJhY3Rpb25Qcm9maWxlKSwgbV9pbnN0YW5jZSk7CisgICAgICAgIHN1Z2dl
c3RlZEJpbmRpbmcuY291bnRTdWdnZXN0ZWRCaW5kaW5ncyA9IGJpbmRpbmcudmFsdWUuc2l6ZSgp
OworICAgICAgICBzdWdnZXN0ZWRCaW5kaW5nLnN1Z2dlc3RlZEJpbmRpbmdzID0gYmluZGluZy52
YWx1ZS5kYXRhKCk7CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyU3VnZ2VzdElu
dGVyYWN0aW9uUHJvZmlsZUJpbmRpbmdzKG1faW5zdGFuY2UsICZzdWdnZXN0ZWRCaW5kaW5nKSwg
bV9pbnN0YW5jZSk7CisgICAgfQorCisgICAgYXV0byBhdHRhY2hJbmZvID0gY3JlYXRlU3RydWN0
dXJlPFhyU2Vzc2lvbkFjdGlvblNldHNBdHRhY2hJbmZvLCBYUl9UWVBFX1NFU1NJT05fQUNUSU9O
X1NFVFNfQVRUQUNIX0lORk8+KCk7CisgICAgYXR0YWNoSW5mby5jb3VudEFjdGlvblNldHMgPSBh
Y3Rpb25TZXRzLnNpemUoKTsKKyAgICBhdHRhY2hJbmZvLmFjdGlvblNldHMgPSBhY3Rpb25TZXRz
LmRhdGEoKTsKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckF0dGFjaFNlc3Npb25BY3Rp
b25TZXRzKG1fc2Vzc2lvbiwgJmF0dGFjaEluZm8pLCBtX2luc3RhbmNlKTsKKworICAgIHJldHVy
biBYUl9TVUNDRVNTOworfQorCitWZWN0b3I8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNl
PiBPcGVuWFJJbnB1dDo6Y29sbGVjdElucHV0U291cmNlcyhjb25zdCBYckZyYW1lU3RhdGUmIGZy
YW1lU3RhdGUpIGNvbnN0Cit7CisgICAgVmVjdG9yPFhyQWN0aXZlQWN0aW9uU2V0PiBhY3Rpb25T
ZXRzOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0U291cmNlcykKKyAgICAgICAgYWN0
aW9uU2V0cy5hcHBlbmQoWHJBY3RpdmVBY3Rpb25TZXQgeyBpbnB1dC0+YWN0aW9uU2V0KCksIFhS
X05VTExfUEFUSCB9KTsKKworICAgIGF1dG8gc3luY0luZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJB
Y3Rpb25zU3luY0luZm8sIFhSX1RZUEVfQUNUSU9OU19TWU5DX0lORk8+KCk7CisgICAgc3luY0lu
Zm8uY291bnRBY3RpdmVBY3Rpb25TZXRzID0gYWN0aW9uU2V0cy5zaXplKCk7CisgICAgc3luY0lu
Zm8uYWN0aXZlQWN0aW9uU2V0cyA9IGFjdGlvblNldHMuZGF0YSgpOworICAgIFJFVFVSTl9JRl9G
QUlMRUQoeHJTeW5jQWN0aW9ucyhtX3Nlc3Npb24sICZzeW5jSW5mbyksICJ4clN5bmNBY3Rpb25z
IiwgbV9pbnN0YW5jZSwgeyB9KTsKKworICAgIFZlY3RvcjxEZXZpY2U6OkZyYW1lRGF0YTo6SW5w
dXRTb3VyY2U+IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dFNvdXJjZXMp
IHsKKyAgICAgICAgaWYgKGF1dG8gZGF0YSA9IGlucHV0LT5nZXRJbnB1dFNvdXJjZShtX2xvY2Fs
U3BhY2UsIGZyYW1lU3RhdGUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqZGF0YSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPcGVuWFJJbnB1dDo6dXBkYXRl
SW50ZXJhY3Rpb25Qcm9maWxlKCkKK3sKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dFNv
dXJjZXMpCisgICAgICAgIGlucHV0LT51cGRhdGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBV
U0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Blbnhy
L09wZW5YUklucHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
SW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOGVhNzg3MmE5MjI5MzFhZjcxYjJjYjk3YzY2NGY5YzkzZTJj
OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Blbnhy
L09wZW5YUklucHV0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9Q
RU5YUikKKworI2luY2x1ZGUgIk9wZW5YUklucHV0TWFwcGluZ3MuaCIKKyNpbmNsdWRlICJPcGVu
WFJVdGlscy5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK2NsYXNzIE9wZW5YUklucHV0
U291cmNlOworCitjbGFzcyBPcGVuWFJJbnB1dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3BlblhSSW5wdXQpOworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXQ+IGNyZWF0ZShYckluc3RhbmNlLCBY
clNlc3Npb24sIFhyU3BhY2UpOworCisgICAgVmVjdG9yPERldmljZTo6RnJhbWVEYXRhOjpJbnB1
dFNvdXJjZT4gY29sbGVjdElucHV0U291cmNlcyhjb25zdCBYckZyYW1lU3RhdGUmKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgpOworCitwcml2YXRlOgorICAgIE9w
ZW5YUklucHV0KFhySW5zdGFuY2UsIFhyU2Vzc2lvbiwgWHJTcGFjZSk7CisgICAgWHJSZXN1bHQg
aW5pdGlhbGl6ZSgpOworCisgICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlIHsgWFJfTlVMTF9IQU5E
TEUgfTsKKyAgICBYclNlc3Npb24gbV9zZXNzaW9uIHsgWFJfTlVMTF9IQU5ETEUgfTsgCisgICAg
WHJTcGFjZSBtX2xvY2FsU3BhY2UgeyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFZlY3RvcjxVbmlx
dWVSZWY8T3BlblhSSW5wdXRTb3VyY2U+PiBtX2lucHV0U291cmNlczsKKyAgICBJbnB1dFNvdXJj
ZUhhbmRsZSBtX2hhbmRsZUluZGV4IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZv
cm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0TWFwcGluZ3Mu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dE1hcHBpbmdz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWYxY2UyMzQwZTlhMzBkNjdlMzdkYjA3MzBiODI5MzljYjc5ODIzZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVu
WFJJbnB1dE1hcHBpbmdzLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVT
RShPUEVOWFIpCisKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFBsYXRmb3JtWFIgeworCit1c2luZyBPcGVuWFJQcm9maWxlSWQg
PSBjb25zdCBjaGFyKiBjb25zdDsKK3VzaW5nIE9wZW5YUkJ1dHRvblBhdGggPSBjb25zdCBjaGFy
KiBjb25zdDsKKworZW51bSBjbGFzcyBPcGVuWFJCdXR0b25UeXBlIHsKKyAgICBUcmlnZ2VyLAor
ICAgIFNxdWVlemUsCisgICAgVG91Y2hwYWQsCisgICAgVGh1bWJzdGljaywKKyAgICBUaHVtYnJl
c3QsCisgICAgQnV0dG9uQSwKKyAgICBCdXR0b25CCit9OworCitjb25zdGV4cHIgc3RkOjphcnJh
eTxPcGVuWFJCdXR0b25UeXBlLCA3PiBvcGVuWFJCdXR0b25UeXBlcyB7CisgICAgT3BlblhSQnV0
dG9uVHlwZTo6VHJpZ2dlciwgT3BlblhSQnV0dG9uVHlwZTo6U3F1ZWV6ZSwgT3BlblhSQnV0dG9u
VHlwZTo6VG91Y2hwYWQsIE9wZW5YUkJ1dHRvblR5cGU6OlRodW1ic3RpY2ssIE9wZW5YUkJ1dHRv
blR5cGU6OlRodW1icmVzdCwKKyAgICBPcGVuWFJCdXR0b25UeXBlOjpCdXR0b25BLCBPcGVuWFJC
dXR0b25UeXBlOjpCdXR0b25CCit9OworCitpbmxpbmUgU3RyaW5nIGJ1dHRvblR5cGVUb1N0cmlu
ZyhPcGVuWFJCdXR0b25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBPcGVuWFJCdXR0b25UeXBlOjpUcmlnZ2VyOiByZXR1cm4gInRyaWdnZXIiOworICAgIGNhc2Ug
T3BlblhSQnV0dG9uVHlwZTo6U3F1ZWV6ZTogcmV0dXJuICJzcXVlZXplIjsKKyAgICBjYXNlIE9w
ZW5YUkJ1dHRvblR5cGU6OlRvdWNocGFkOiByZXR1cm4gInRvdWNocGFkIjsKKyAgICBjYXNlIE9w
ZW5YUkJ1dHRvblR5cGU6OlRodW1ic3RpY2s6IHJldHVybiAidGh1bWJzdGljayI7CisgICAgY2Fz
ZSBPcGVuWFJCdXR0b25UeXBlOjpUaHVtYnJlc3Q6IHJldHVybiAidGh1bWJyZXN0IjsKKyAgICBj
YXNlIE9wZW5YUkJ1dHRvblR5cGU6OkJ1dHRvbkE6IHJldHVybiAiYnV0dG9uYSI7CisgICAgY2Fz
ZSBPcGVuWFJCdXR0b25UeXBlOjpCdXR0b25COiByZXR1cm4gImJ1dHRvbmIiOworCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsK
KyAgICB9Cit9CisKK3N0cnVjdCBPcGVuWFJCdXR0b24geworICAgIE9wZW5YUkJ1dHRvblR5cGUg
dHlwZTsKKyAgICBPcGVuWFJCdXR0b25QYXRoIHByZXNzIHsgbnVsbHB0ciB9OworICAgIE9wZW5Y
UkJ1dHRvblBhdGggdG91Y2ggeyBudWxscHRyIH07CisgICAgT3BlblhSQnV0dG9uUGF0aCB2YWx1
ZSB7IG51bGxwdHIgfTsKK307CisKK2VudW0gY2xhc3MgT3BlblhSQXhpc1R5cGUgeworICAgIFRv
dWNocGFkLAorICAgIFRodW1ic3RpY2sKK307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5Y
UkF4aXNUeXBlLCAyPiBvcGVuWFJBeGlzVHlwZXMgeworICAgIE9wZW5YUkF4aXNUeXBlOjpUb3Vj
aHBhZCwgT3BlblhSQXhpc1R5cGU6OlRodW1ic3RpY2sKK307CisKK2lubGluZSBTdHJpbmcgYXhp
c1R5cGV0b1N0cmluZyhPcGVuWFJBeGlzVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgT3BlblhSQXhpc1R5cGU6OlRvdWNocGFkOiByZXR1cm4gInRvdWNocGFkIjsK
KyAgICBjYXNlIE9wZW5YUkF4aXNUeXBlOjpUaHVtYnN0aWNrOiByZXR1cm4gInRodW1ic3RpY2si
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gIiI7CisgICAgfQorfQorCitzdHJ1Y3QgT3BlblhSQXhpcyB7CisgICAgT3BlblhSQXhp
c1R5cGUgdHlwZTsKKyAgICBPcGVuWFJCdXR0b25QYXRoIHBhdGg7Cit9OyAKKworc3RydWN0IE9w
ZW5YUklucHV0UHJvZmlsZSB7CisgICAgY29uc3QgY2hhciogY29uc3QgcGF0aCB7IG51bGxwdHIg
fTsKKyAgICBjb25zdCBPcGVuWFJQcm9maWxlSWQqIHByb2ZpbGVJZHMgeyBudWxscHRyIH07Cisg
ICAgc2l6ZV90IHByb2ZpbGVJZHNTaXplIHsgMCB9OworICAgIGNvbnN0IE9wZW5YUkJ1dHRvbiog
bGVmdEJ1dHRvbnMgeyBudWxscHRyIH07CisgICAgc2l6ZV90IGxlZnRCdXR0b25zU2l6ZSB7IDAg
fTsKKyAgICBjb25zdCBPcGVuWFJCdXR0b24qIHJpZ2h0QnV0dG9ucyB7IG51bGxwdHIgfTsKKyAg
ICBzaXplX3QgcmlnaHRCdXR0b25zU2l6ZSB7IDAgfTsKKyAgICBjb25zdCBPcGVuWFJBeGlzKiBh
eGVzIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBheGVzU2l6ZSB7IDAgfTsKK307CisKKy8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9pbW1lcnNpdmUtd2ViL3dlYnhyLWlucHV0LXByb2ZpbGVzL2Jsb2Iv
bWFzdGVyL3BhY2thZ2VzL3JlZ2lzdHJ5L3Byb2ZpbGVzL2h0Yy9odGMtdml2ZS5qc29uCitjb25z
dGV4cHIgc3RkOjphcnJheTxPcGVuWFJQcm9maWxlSWQsIDI+IEhUQ1ZpdmVQcm9maWxlSWRzIHsg
Imh0Yy12aXZlIiwgImdlbmVyaWMtdHJpZ2dlci1zcXVlZXplLXRvdWNocGFkIiB9OworCitjb25z
dGV4cHIgc3RkOjphcnJheTxPcGVuWFJCdXR0b24sIDM+IEhUQ1ZpdmVCdXR0b25zIHsKKyAgICBP
cGVuWFJCdXR0b24geyAudHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlRyaWdnZXIsIC5wcmVzcyA9
ICIvaW5wdXQvdHJpZ2dlci9jbGljayIsIC52YWx1ZSA9ICIvaW5wdXQvdHJpZ2dlci92YWx1ZSIg
fSwKKyAgICBPcGVuWFJCdXR0b24geyAudHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlNxdWVlemUs
IC5wcmVzcyA9ICIvaW5wdXQvc3F1ZWV6ZS9jbGljayIgfSwKKyAgICBPcGVuWFJCdXR0b24geyAu
dHlwZSA9IE9wZW5YUkJ1dHRvblR5cGU6OlRvdWNocGFkLCAucHJlc3MgPSAiL2lucHV0L3RyYWNr
cGFkL2NsaWNrIiwgLnRvdWNoID0gIi9pbnB1dC90cmFja3BhZC90b3VjaCIgfQorfTsKKworY29u
c3RleHByIHN0ZDo6YXJyYXk8T3BlblhSQXhpcywgMT4gSFRDVml2ZUF4ZXMgeworICAgIHsgT3Bl
blhSQXhpc1R5cGU6OlRvdWNocGFkLCAiL2lucHV0L3RyYWNrcGFkIiB9Cit9OworCitjb25zdGV4
cHIgT3BlblhSSW5wdXRQcm9maWxlIEhUQ1ZpdmVJbnB1dFByb2ZpbGUgeworICAgICIvaW50ZXJh
Y3Rpb25fcHJvZmlsZXMvaHRjL3ZpdmVfY29udHJvbGxlciIsCisgICAgSFRDVml2ZVByb2ZpbGVJ
ZHMuZGF0YSgpLAorICAgIEhUQ1ZpdmVQcm9maWxlSWRzLnNpemUoKSwKKyAgICBIVENWaXZlQnV0
dG9ucy5kYXRhKCksCisgICAgSFRDVml2ZUJ1dHRvbnMuc2l6ZSgpLAorICAgIEhUQ1ZpdmVCdXR0
b25zLmRhdGEoKSwKKyAgICBIVENWaXZlQnV0dG9ucy5zaXplKCksCisgICAgSFRDVml2ZUF4ZXMu
ZGF0YSgpLAorICAgIEhUQ1ZpdmVBeGVzLnNpemUoKQorfTsKKworLy8gRGVmYXVsdCBmYWxsYmFj
ayB3aGVuIHRoZXJlIGlzbid0IGEgc3BlY2lmaWMgY29udHJvbGxlciBiaW5kaW5nLgorY29uc3Rl
eHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciosIDE+IEtIUlNpbXBsZVByb2ZpbGVJZHMgeyAiZ2Vu
ZXJpYy1idXR0b24iIH07CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9wZW5YUkJ1dHRvbiwgMT4g
S0hSU2ltcGxlQnV0dG9ucyB7CisgICAgT3BlblhSQnV0dG9uIHsgLnR5cGUgPSBPcGVuWFJCdXR0
b25UeXBlOjpUcmlnZ2VyLCAucHJlc3MgPSAiL2lucHV0L3NlbGVjdC9jbGljayIgfQorfTsKKwor
Y29uc3RleHByIE9wZW5YUklucHV0UHJvZmlsZSBLSFJTaW1wbGVJbnB1dFByb2ZpbGUgeworICAg
ICIvaW50ZXJhY3Rpb25fcHJvZmlsZXMva2hyL3NpbXBsZV9jb250cm9sbGVyIiwKKyAgICBLSFJT
aW1wbGVQcm9maWxlSWRzLmRhdGEoKSwKKyAgICBLSFJTaW1wbGVQcm9maWxlSWRzLnNpemUoKSwK
KyAgICBLSFJTaW1wbGVCdXR0b25zLmRhdGEoKSwKKyAgICBLSFJTaW1wbGVCdXR0b25zLnNpemUo
KSwKKyAgICBLSFJTaW1wbGVCdXR0b25zLmRhdGEoKSwKKyAgICBLSFJTaW1wbGVCdXR0b25zLnNp
emUoKSwKKyAgICBudWxscHRyLAorICAgIDAKK307CisKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PE9w
ZW5YUklucHV0UHJvZmlsZSwgMj4gb3BlblhSSW5wdXRQcm9maWxlcyB7IEhUQ1ZpdmVJbnB1dFBy
b2ZpbGUsIEtIUlNpbXBsZUlucHV0UHJvZmlsZSB9OworCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9y
bVhSCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kM2E4MGIyZTMzOTdlNTdlYzgwYjIyNTMzYzliMWUzMzk1MjI4N2VjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5Y
UklucHV0U291cmNlLmNwcApAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3BlblhSSW5w
dXRTb3VyY2UuaCIKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKworY29uc3Rl
eHByIGNvbnN0IGNoYXIqIE9QRU5YUl9JTlBVVF9IQU5EX1BBVEggeyAiL3VzZXIvaGFuZC8iIH07
Citjb25zdGV4cHIgY29uc3QgY2hhciogT1BFTlhSX0lOUFVUX0dSSVBfUEFUSCB7ICIvaW5wdXQv
Z3JpcC9wb3NlIiB9OworY29uc3RleHByIGNvbnN0IGNoYXIqIE9QRU5YUl9JTlBVVF9BSU1fUEFU
SCB7ICIvaW5wdXQvYWltL3Bvc2UiIH07CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK3N0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJbnB1dFNvdXJj
ZT4gT3BlblhSSW5wdXRTb3VyY2U6OmNyZWF0ZShYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Np
b24gc2Vzc2lvbiwgWFJIYW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUgaGFu
ZGxlKQoreworICAgIGF1dG8gaW5wdXQgPSBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSSW5wdXRTb3Vy
Y2U+KG5ldyBPcGVuWFJJbnB1dFNvdXJjZShpbnN0YW5jZSwgc2Vzc2lvbiwgaGFuZGVuZXNzLCBo
YW5kbGUpKTsKKyAgICBpZiAoWFJfRkFJTEVEKGlucHV0LT5pbml0aWFsaXplKCkpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaW5wdXQ7Cit9CisKK09wZW5YUklucHV0U291
cmNlOjpPcGVuWFJJbnB1dFNvdXJjZShYckluc3RhbmNlIGluc3RhbmNlLCBYclNlc3Npb24gc2Vz
c2lvbiwgWFJIYW5kZWRuZXNzIGhhbmRlbmVzcywgSW5wdXRTb3VyY2VIYW5kbGUgaGFuZGxlKQor
ICAgIDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQorICAg
ICwgbV9oYW5kZW5lc3MoaGFuZGVuZXNzKQorICAgICwgbV9oYW5kbGUoaGFuZGxlKQoreworfQor
CitPcGVuWFJJbnB1dFNvdXJjZTo6fk9wZW5YUklucHV0U291cmNlKCkKK3sKKyAgICBpZiAobV9h
Y3Rpb25TZXQgIT0gWFJfTlVMTF9IQU5ETEUpCisgICAgICAgIHhyRGVzdHJveUFjdGlvblNldCht
X2FjdGlvblNldCk7CisgICAgaWYgKG1fZ3JpcFNwYWNlICE9IFhSX05VTExfSEFORExFKQorICAg
ICAgICB4ckRlc3Ryb3lTcGFjZShtX2dyaXBTcGFjZSk7CisgICAgaWYgKG1fcG9pbnRlclNwYWNl
ICE9IFhSX05VTExfSEFORExFKQorICAgICAgICB4ckRlc3Ryb3lTcGFjZShtX3BvaW50ZXJTcGFj
ZSk7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjppbml0aWFsaXplKCkKK3sKKyAg
ICBTdHJpbmcgaGFuZGVuZXNzTmFtZSA9IGhhbmRlbmVzc1RvU3RyaW5nKG1faGFuZGVuZXNzKTsK
KyAgICBtX3N1YmFjdGlvblBhdGhOYW1lID0gT1BFTlhSX0lOUFVUX0hBTkRfUEFUSCArIGhhbmRl
bmVzc05hbWU7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJTdHJpbmdUb1BhdGgobV9p
bnN0YW5jZSwgbV9zdWJhY3Rpb25QYXRoTmFtZS51dGY4KCkuZGF0YSgpLCAmbV9zdWJhY3Rpb25Q
YXRoKSwgbV9pbnN0YW5jZSk7CisKKyAgICAvLyBJbml0aWFsaXplIEFjdGlvbiBTZXQuCisgICAg
U3RyaW5nIHByZWZpeCA9ICJpbnB1dF8iICsgaGFuZGVuZXNzTmFtZTsKKyAgICBTdHJpbmcgYWN0
aW9uU2V0TmFtZSA9IHByZWZpeCArICJfYWN0aW9uX3NldCI7CisgICAgYXV0byBjcmVhdGVJbmZv
ID0gIGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblNldENyZWF0ZUluZm8sIFhSX1RZUEVfQUNUSU9O
X1NFVF9DUkVBVEVfSU5GTz4oKTsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5hY3Rpb25T
ZXROYW1lLCBhY3Rpb25TZXROYW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05B
TUVfU0laRSAtIDEpOworICAgIHN0ZDo6c3RybmNweShjcmVhdGVJbmZvLmxvY2FsaXplZEFjdGlv
blNldE5hbWUsIGFjdGlvblNldE5hbWUudXRmOCgpLmRhdGEoKSwgWFJfTUFYX0FDVElPTl9TRVRf
TkFNRV9TSVpFIC0gMSk7CisKKyAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckNyZWF0ZUFj
dGlvblNldChtX2luc3RhbmNlLCAmY3JlYXRlSW5mbywgJm1fYWN0aW9uU2V0KSwgbV9pbnN0YW5j
ZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHBvc2UgYWN0aW9ucyBhbmQgc3BhY2VzLgorICAgIFJF
VFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9QT1NFX0lO
UFVULCBwcmVmaXggKyAiX2dyaXAiLCBtX2dyaXBBY3Rpb24pLCBtX2luc3RhbmNlKTsKKyAgICBS
RVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVTcGFjZUFjdGlvbihtX2dyaXBBY3Rpb24sIG1f
Z3JpcFNwYWNlKSwgbV9pbnN0YW5jZSk7CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoY3Jl
YXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX1BPU0VfSU5QVVQsIHByZWZpeCArICJfcG9pbnRlciIs
IG1fcG9pbnRlckFjdGlvbiksIG1faW5zdGFuY2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJ
TEVEKGNyZWF0ZVNwYWNlQWN0aW9uKG1fcG9pbnRlckFjdGlvbiwgbV9wb2ludGVyU3BhY2UpLCBt
X2luc3RhbmNlKTsKKworICAgIC8vIEluaXRpYWxpemUgYnV0dG9uIGFjdGlvbnMuCisgICAgZm9y
IChhdXRvIGJ1dHRvblR5cGUgOiBvcGVuWFJCdXR0b25UeXBlcykgeworICAgICAgICBPcGVuWFJC
dXR0b25BY3Rpb25zIGFjdGlvbnM7CisgICAgICAgIGNyZWF0ZUJ1dHRvbkFjdGlvbnMoYnV0dG9u
VHlwZSwgcHJlZml4LCBhY3Rpb25zKTsKKyAgICAgICAgbV9idXR0b25BY3Rpb25zLmFkZChidXR0
b25UeXBlLCBhY3Rpb25zKTsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIGF4ZXMuCisgICAg
Zm9yIChhdXRvIGF4aXNUeXBlIDogb3BlblhSQXhpc1R5cGVzKSB7CisgICAgICAgIFhyQWN0aW9u
IGF4aXNBY3Rpb24gPSBYUl9OVUxMX0hBTkRMRTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmVm
aXggKyAiX2F4aXNfIiArIGF4aXNUeXBldG9TdHJpbmcoYXhpc1R5cGUpOworICAgICAgICBSRVRV
Uk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVBY3Rpb24oWFJfQUNUSU9OX1RZUEVfVkVDVE9SMkZf
SU5QVVQsIG5hbWUsIGF4aXNBY3Rpb24pLCBtX2luc3RhbmNlLCBmYWxzZSk7CisgICAgICAgIG1f
YXhpc0FjdGlvbnMuYWRkKGF4aXNUeXBlLCBheGlzQWN0aW9uKTsKKyAgICB9CisKKyAgICByZXR1
cm4gWFJfU1VDQ0VTUzsKK30KKworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OnN1Z2dlc3RC
aW5kaW5ncyhTdWdnZXN0ZWRCaW5kaW5ncyYgYmluZGluZ3MpIGNvbnN0Cit7CisgICAgZm9yIChh
dXRvJiBwcm9maWxlIDogb3BlblhSSW5wdXRQcm9maWxlcykgeworICAgICAgICAvLyBTdWdnZXN0
IGJpbmRpbmcgZm9yIHBvc2UgYWN0aW9ucy4KKyAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlM
RUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIG1fZ3JpcEFjdGlvbiwgbV9zdWJhY3Rpb25Q
YXRoTmFtZSArIE9QRU5YUl9JTlBVVF9HUklQX1BBVEgsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7
CisgICAgICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5w
YXRoLCBtX3BvaW50ZXJBY3Rpb24sIG1fc3ViYWN0aW9uUGF0aE5hbWUgKyBPUEVOWFJfSU5QVVRf
QUlNX1BBVEgsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisKKyAgICAgICAgLy8gU3VnZ2VzdCBi
aW5kaW5nIGZvciBidXR0b24gYWN0aW9ucy4KKyAgICAgICAgY29uc3QgT3BlblhSQnV0dG9uKiBi
dXR0b25zOworICAgICAgICBzaXplX3QgYnV0dG9uc1NpemU7CisgICAgICAgIGlmIChtX2hhbmRl
bmVzcyA9PSBYUkhhbmRlZG5lc3M6OkxlZnQpIHsKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9m
aWxlLmxlZnRCdXR0b25zOworICAgICAgICAgICAgYnV0dG9uc1NpemUgPSBwcm9maWxlLmxlZnRC
dXR0b25zU2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1dHRvbnMgPSBwcm9m
aWxlLnJpZ2h0QnV0dG9uczsKKyAgICAgICAgICAgIGJ1dHRvbnNTaXplID0gcHJvZmlsZS5yaWdo
dEJ1dHRvbnNTaXplOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBidXR0b25zU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBidXR0b24gPSBi
dXR0b25zW2ldOworICAgICAgICAgICAgY29uc3QgYXV0byYgYWN0aW9ucyA9IG1fYnV0dG9uQWN0
aW9ucy5nZXQoYnV0dG9uLnR5cGUpOworICAgICAgICAgICAgaWYgKGJ1dHRvbi5wcmVzcykgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChhY3Rpb25zLnByZXNzICE9IFhSX05VTExfSEFORExFKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVhdGVCaW5kaW5nKHBy
b2ZpbGUucGF0aCwgYWN0aW9ucy5wcmVzcywgbV9zdWJhY3Rpb25QYXRoTmFtZSArIGJ1dHRvbi5w
cmVzcywgYmluZGluZ3MpLCBtX2luc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChidXR0b24udG91Y2gpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aW9ucy50b3Vj
aCAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1JFU1VMVF9JRl9G
QUlMRUQoY3JlYXRlQmluZGluZyhwcm9maWxlLnBhdGgsIGFjdGlvbnMudG91Y2gsIG1fc3ViYWN0
aW9uUGF0aE5hbWUgKyBidXR0b24udG91Y2gsIGJpbmRpbmdzKSwgbV9pbnN0YW5jZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnV0dG9uLnZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGFjdGlvbnMudmFsdWUgIT0gWFJfTlVMTF9IQU5ETEUpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKGNyZWF0ZUJpbmRpbmcocHJvZmlsZS5wYXRoLCBh
Y3Rpb25zLnZhbHVlLCBtX3N1YmFjdGlvblBhdGhOYW1lICsgYnV0dG9uLnZhbHVlLCBiaW5kaW5n
cyksIG1faW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
U3VnZ2VzdCBiaW5kaW5nIGZvciBheGlzIGFjdGlvbnMuCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvZmlsZS5heGVzU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRv
JiBheGlzID0gcHJvZmlsZS5heGVzW2ldOworICAgICAgICAgICAgYXV0byBhY3Rpb24gPSBtX2F4
aXNBY3Rpb25zLmdldChheGlzLnR5cGUpOworICAgICAgICAgICAgQVNTRVJUKGFjdGlvbiAhPSBY
Ul9OVUxMX0hBTkRMRSk7CisgICAgICAgICAgICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRChjcmVh
dGVCaW5kaW5nKHByb2ZpbGUucGF0aCwgYWN0aW9uLCBtX3N1YmFjdGlvblBhdGhOYW1lICsgYXhp
cy5wYXRoLCBiaW5kaW5ncyksIG1faW5zdGFuY2UpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKK09wdGlvbmFsPERldmljZTo6RnJhbWVEYXRhOjpJbnB1
dFNvdXJjZT4gT3BlblhSSW5wdXRTb3VyY2U6OmdldElucHV0U291cmNlKFhyU3BhY2UgbG9jYWxT
cGFjZSwgY29uc3QgWHJGcmFtZVN0YXRlJiBmcmFtZVN0YXRlKSBjb25zdAoreworICAgIERldmlj
ZTo6RnJhbWVEYXRhOjpJbnB1dFNvdXJjZSBkYXRhOworICAgIGRhdGEuaGFuZGVuZXNzID0gbV9o
YW5kZW5lc3M7CisgICAgZGF0YS5oYW5kbGUgPSBtX2hhbmRsZTsKKyAgICBkYXRhLnRhcmdldFJh
eU1vZGUgPSBYUlRhcmdldFJheU1vZGU6OlRyYWNrZWRQb2ludGVyOworICAgIGRhdGEucHJvZmls
ZXMgPSBtX3Byb2ZpbGVzOworCisgICAgLy8gUG9zZSB0cmFuc2Zvcm1zLgorICAgIGdldFBvc2Uo
bV9wb2ludGVyU3BhY2UsIGxvY2FsU3BhY2UsIGZyYW1lU3RhdGUsIGRhdGEucG9pbnRlck9yaWdp
bik7CisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlUG9zZSBncmlwUG9zZTsKKyAg
ICBpZiAoWFJfU1VDQ0VFREVEKGdldFBvc2UobV9ncmlwU3BhY2UsIGxvY2FsU3BhY2UsIGZyYW1l
U3RhdGUsIGdyaXBQb3NlKSkpCisgICAgICAgIGRhdGEuZ3JpcE9yaWdpbiA9IGdyaXBQb3NlOwor
CisgICAgLy8gQnV0dG9ucy4KKyAgICBWZWN0b3I8T3B0aW9uYWw8RGV2aWNlOjpGcmFtZURhdGE6
OklucHV0U291cmNlQnV0dG9uPj4gYnV0dG9uczsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiBvcGVu
WFJCdXR0b25UeXBlcykgCisgICAgICAgIGJ1dHRvbnMuYXBwZW5kKGdldEJ1dHRvbih0eXBlKSk7
CisKKyAgICAvLyBUcmlnZ2VyIGlzIG1hbmRhdG9yeSBpbiB4ci1zdGFuZGFyZCBtYXBwaW5nLgor
ICAgIGlmIChidXR0b25zLmlzRW1wdHkoKSB8fCAhYnV0dG9ucy5maXJzdCgpLmhhc1ZhbHVlKCkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJ1dHRvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1dHRvbnNbaV0pIHsKKyAg
ICAgICAgICAgIGRhdGEuYnV0dG9ucy5hcHBlbmQoKmJ1dHRvbnNbaV0pOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRkIHBsYWNlaG9sZGVyIGlmIHRoZXJl
IGFyZSBtb3JlIHZhbGlkIGJ1dHRvbnMgaW4gdGhlIGxpc3QuCisgICAgICAgIGZvciAoc2l6ZV90
IGogPSBpICsgMTsgaiA8IGJ1dHRvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGlmIChi
dXR0b25zW2pdKSB7CisgICAgICAgICAgICAgICAgZGF0YS5idXR0b25zLmFwcGVuZCh7IH0pOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gQXhlcy4KKyAgICBWZWN0b3I8T3B0aW9uYWw8WHJWZWN0b3IyZj4+IGF4ZXM7Cisg
ICAgZm9yIChhdXRvJiB0eXBlIDogb3BlblhSQXhpc1R5cGVzKSAKKyAgICAgICAgYXhlcy5hcHBl
bmQoZ2V0QXhpcyh0eXBlKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4ZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGF4ZXNbaV0pIHsKKyAgICAgICAgICAgIGRhdGEuYXhl
cy5hcHBlbmQoYXhlc1tpXS0+eCk7CisgICAgICAgICAgICBkYXRhLmF4ZXMuYXBwZW5kKGF4ZXNb
aV0tPnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQWRk
IHBsYWNlaG9sZGVyIGlmIHRoZXJlIGFyZSBtb3JlIHZhbGlkIGF4ZXMgaW4gdGhlIGxpc3QuCisg
ICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGJ1dHRvbnMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgIGlmIChheGVzW2pdKSB7CisgICAgICAgICAgICAgICAgZGF0YS5heGVzLmFw
cGVuZCgwLjBmKTsKKyAgICAgICAgICAgICAgICBkYXRhLmF4ZXMuYXBwZW5kKDAuMGYpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGRhdGE7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0U291cmNlOjp1cGRhdGVJ
bnRlcmFjdGlvblByb2ZpbGUoKQoreworICAgIGF1dG8gc3RhdGUgPSBjcmVhdGVTdHJ1Y3R1cmU8
WHJJbnRlcmFjdGlvblByb2ZpbGVTdGF0ZSwgWFJfVFlQRV9JTlRFUkFDVElPTl9QUk9GSUxFX1NU
QVRFPigpOworICAgIFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyR2V0Q3VycmVudEludGVyYWN0
aW9uUHJvZmlsZShtX3Nlc3Npb24sIG1fc3ViYWN0aW9uUGF0aCwgJnN0YXRlKSwgbV9pbnN0YW5j
ZSk7CisKKyAgICBjb25zdGV4cHIgdWludDMyX3QgYnVmZmVyU2l6ZSA9IDEwMDsgCisgICAgY2hh
ciBidWZmZXJbYnVmZmVyU2l6ZV07CisgICAgdWludDMyX3Qgd3JpdHRlbkNvdW50ID0gMDsKKyAg
ICBSRVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4clBhdGhUb1N0cmluZyhtX2luc3RhbmNlLCBzdGF0
ZS5pbnRlcmFjdGlvblByb2ZpbGUsIGJ1ZmZlclNpemUsICZ3cml0dGVuQ291bnQsIGJ1ZmZlciks
IG1faW5zdGFuY2UpOworCisgICAgbV9wcm9maWxlcy5jbGVhcigpOworICAgIGZvciAoYXV0byYg
cHJvZmlsZSA6IG9wZW5YUklucHV0UHJvZmlsZXMpIHsKKyAgICAgICAgaWYgKCFzdHJuY21wKHBy
b2ZpbGUucGF0aCwgYnVmZmVyLCB3cml0dGVuQ291bnQpKSB7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHByb2ZpbGUucHJvZmlsZUlkc1NpemU7ICsraSkKKyAgICAgICAgICAg
ICAgICBtX3Byb2ZpbGVzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KHByb2ZpbGUucHJvZmlsZUlk
c1tpXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gWFJfU1VDQ0VTUzsKK30KKworCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRl
U3BhY2VBY3Rpb24oWHJBY3Rpb24gYWN0aW9uLCBYclNwYWNlJiBzcGFjZSkgY29uc3QKK3sKKyAg
ICBhdXRvIGNyZWF0ZUluZm8gPSAgY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3BhY2VDcmVhdGVJ
bmZvLCBYUl9UWVBFX0FDVElPTl9TUEFDRV9DUkVBVEVfSU5GTz4oKTsKKyAgICBjcmVhdGVJbmZv
LmFjdGlvbiA9IGFjdGlvbjsKKyAgICBjcmVhdGVJbmZvLnN1YmFjdGlvblBhdGggPSBtX3N1YmFj
dGlvblBhdGg7CisgICAgY3JlYXRlSW5mby5wb3NlSW5BY3Rpb25TcGFjZSA9IFhyUG9zZUlkZW50
aXR5KCk7CisKKyAgICByZXR1cm4geHJDcmVhdGVBY3Rpb25TcGFjZShtX3Nlc3Npb24sICZjcmVh
dGVJbmZvLCAmc3BhY2UpOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRl
QWN0aW9uKFhyQWN0aW9uVHlwZSBhY3Rpb25UeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFhyQWN0
aW9uJiBhY3Rpb24pIGNvbnN0Cit7CisgICAgYXV0byBjcmVhdGVJbmZvID0gIGNyZWF0ZVN0cnVj
dHVyZTxYckFjdGlvbkNyZWF0ZUluZm8sIFhSX1RZUEVfQUNUSU9OX0NSRUFURV9JTkZPPigpOwor
ICAgIGNyZWF0ZUluZm8uYWN0aW9uVHlwZSA9IGFjdGlvblR5cGU7CisgICAgY3JlYXRlSW5mby5j
b3VudFN1YmFjdGlvblBhdGhzID0gMTsKKyAgICBjcmVhdGVJbmZvLnN1YmFjdGlvblBhdGhzID0g
Jm1fc3ViYWN0aW9uUGF0aDsKKyAgICBzdGQ6OnN0cm5jcHkoY3JlYXRlSW5mby5hY3Rpb25OYW1l
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIFhSX01BWF9BQ1RJT05fU0VUX05BTUVfU0laRSAtIDEpOwor
ICAgIHN0ZDo6c3RybmNweShjcmVhdGVJbmZvLmxvY2FsaXplZEFjdGlvbk5hbWUsIG5hbWUudXRm
OCgpLmRhdGEoKSwgWFJfTUFYX0FDVElPTl9TRVRfTkFNRV9TSVpFIC0gMSk7CisKKyAgICByZXR1
cm4geHJDcmVhdGVBY3Rpb24obV9hY3Rpb25TZXQsICZjcmVhdGVJbmZvLCAmYWN0aW9uKTsKK30K
KworWHJSZXN1bHQgT3BlblhSSW5wdXRTb3VyY2U6OmNyZWF0ZUJ1dHRvbkFjdGlvbnMoT3BlblhS
QnV0dG9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHByZWZpeCwgT3BlblhSQnV0dG9uQWN0aW9u
cyYgYWN0aW9ucykgY29uc3QKK3sKKyAgICBhdXRvIG5hbWUgPSBwcmVmaXggKyAiX2J1dHRvbl8i
ICsgYnV0dG9uVHlwZVRvU3RyaW5nKHR5cGUpOworCisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlM
RUQoY3JlYXRlQWN0aW9uKFhSX0FDVElPTl9UWVBFX0JPT0xFQU5fSU5QVVQsIG5hbWUgKyAiX3By
ZXNzIiwgYWN0aW9ucy5wcmVzcyksIG1faW5zdGFuY2UpOworICAgIFJFVFVSTl9SRVNVTFRfSUZf
RkFJTEVEKGNyZWF0ZUFjdGlvbihYUl9BQ1RJT05fVFlQRV9CT09MRUFOX0lOUFVULCBuYW1lICsg
Il90b3VjaCIsIGFjdGlvbnMudG91Y2gpLCBtX2luc3RhbmNlKTsKKyAgICBSRVRVUk5fUkVTVUxU
X0lGX0ZBSUxFRChjcmVhdGVBY3Rpb24oWFJfQUNUSU9OX1RZUEVfRkxPQVRfSU5QVVQsIG5hbWUg
KyAiX3ZhbHVlIiwgYWN0aW9ucy52YWx1ZSksIG1faW5zdGFuY2UpOworICAgIAorICAgIHJldHVy
biBYUl9TVUNDRVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6Y3JlYXRlQmlu
ZGluZyhjb25zdCBjaGFyKiBwcm9maWxlUGF0aCwgWHJBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJp
bmcmIGJpbmRpbmdQYXRoLCBTdWdnZXN0ZWRCaW5kaW5ncyYgYmluZGluZ3MpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHByb2ZpbGVQYXRoICE9IFhSX05VTExfUEFUSCk7CisgICAgQVNTRVJUKGFjdGlv
biAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAgQVNTRVJUKCFiaW5kaW5nUGF0aC5pc0VtcHR5KCkp
OworCisgICAgWHJQYXRoIHBhdGggPSBYUl9OVUxMX1BBVEg7CisgICAgUkVUVVJOX1JFU1VMVF9J
Rl9GQUlMRUQoeHJTdHJpbmdUb1BhdGgobV9pbnN0YW5jZSwgYmluZGluZ1BhdGgudXRmOCgpLmRh
dGEoKSwgJnBhdGgpLCBtX2luc3RhbmNlKTsKKworICAgIFhyQWN0aW9uU3VnZ2VzdGVkQmluZGlu
ZyBiaW5kaW5nIHsgYWN0aW9uLCBwYXRoIH07CisgICAgaWYgKGF1dG8gaXQgPSBiaW5kaW5ncy5m
aW5kKHByb2ZpbGVQYXRoKTsgaXQgIT0gYmluZGluZ3MuZW5kKCkpCisgICAgICAgIGl0LT52YWx1
ZS5hcHBlbmQoYmluZGluZyk7CisgICAgZWxzZQorICAgICAgICBiaW5kaW5ncy5hZGQocHJvZmls
ZVBhdGgsIFZlY3RvcjxYckFjdGlvblN1Z2dlc3RlZEJpbmRpbmc+IHsgYmluZGluZyB9KTsKKwor
ICAgIHJldHVybiBYUl9TVUNDRVNTOworfQorCitYclJlc3VsdCBPcGVuWFJJbnB1dFNvdXJjZTo6
Z2V0UG9zZShYclNwYWNlIHNwYWNlLCBYclNwYWNlIGJhc2VTcGFjZSwgY29uc3QgWHJGcmFtZVN0
YXRlJiBmcmFtZVN0YXRlLCBEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VQb3NlJiBwb3Nl
KSBjb25zdAoreworICAgIGF1dG8gbG9jYXRpb24gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTcGFjZUxv
Y2F0aW9uLCBYUl9UWVBFX1NQQUNFX0xPQ0FUSU9OPigpOworICAgIFJFVFVSTl9SRVNVTFRfSUZf
RkFJTEVEKHhyTG9jYXRlU3BhY2Uoc3BhY2UsIGJhc2VTcGFjZSwgZnJhbWVTdGF0ZS5wcmVkaWN0
ZWREaXNwbGF5VGltZSwgJmxvY2F0aW9uKSwgbV9pbnN0YW5jZSk7CisKKyAgICBpZiAobG9jYXRp
b24ubG9jYXRpb25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09SSUVOVEFUSU9OX1RSQUNLRURf
QklUKQorICAgICAgICBwb3NlLnBvc2UgPSBYclBvc2VmVG9Qb3NlKGxvY2F0aW9uLnBvc2UpOwor
ICAgIHBvc2UuaXNQb3NpdGlvbkVtdWxhdGVkID0gIShsb2NhdGlvbi5sb2NhdGlvbkZsYWdzICYg
WFJfU1BBQ0VfTE9DQVRJT05fUE9TSVRJT05fVkFMSURfQklUKTsKKworICAgIHJldHVybiBYUl9T
VUNDRVNTOworfQorCitPcHRpb25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2VCdXR0
b24+IE9wZW5YUklucHV0U291cmNlOjpnZXRCdXR0b24oT3BlblhSQnV0dG9uVHlwZSBidXR0b25U
eXBlKSBjb25zdAoreworICAgIGF1dG8gaXQgPSBtX2J1dHRvbkFjdGlvbnMuZmluZChidXR0b25U
eXBlKTsKKyAgICBpZiAoaXQgPT0gbV9idXR0b25BY3Rpb25zLmVuZCgpKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgRGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlQnV0
dG9uIHJlc3VsdDsKKyAgICBib29sIGhhc1ZhbHVlID0gZmFsc2U7CisgICAgYXV0byYgYWN0aW9u
cyA9IGl0LT52YWx1ZTsKKworICAgIGF1dG8gcXVlcnlBY3Rpb25TdGF0ZSA9IFt0aGlzLCAmaGFz
VmFsdWVdKFhyQWN0aW9uIGFjdGlvbiwgYXV0byYgdmFsdWUsIGF1dG8gZGVmYXVsdFZhbHVlKSB7
CisgICAgICAgIGlmIChhY3Rpb24gIT0gWFJfTlVMTF9IQU5ETEUgJiYgWFJfU1VDQ0VFREVEKGdl
dEFjdGlvblN0YXRlKGFjdGlvbiwgJnZhbHVlKSkpCisgICAgICAgICAgICBoYXNWYWx1ZSA9IHRy
dWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlOworICAg
IH07CisKKyAgICBxdWVyeUFjdGlvblN0YXRlKGFjdGlvbnMucHJlc3MsIHJlc3VsdC5wcmVzc2Vk
LCBmYWxzZSk7CisgICAgcXVlcnlBY3Rpb25TdGF0ZShhY3Rpb25zLnRvdWNoLCByZXN1bHQudG91
Y2hlZCwgcmVzdWx0LnByZXNzZWQpOworICAgIHF1ZXJ5QWN0aW9uU3RhdGUoYWN0aW9ucy52YWx1
ZSwgcmVzdWx0LnByZXNzZWRWYWx1ZSwgcmVzdWx0LnByZXNzZWQgPyAxLjAgOiAwLjApOworCisg
ICAgcmV0dXJuIGhhc1ZhbHVlID8gIG1ha2VPcHRpb25hbChyZXN1bHQpIDogV1RGOjpudWxsb3B0
OworfQorCitPcHRpb25hbDxYclZlY3RvcjJmPiBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QXhpcyhP
cGVuWFJBeGlzVHlwZSBheGlzVHlwZSkgY29uc3QKK3sKKyAgICBhdXRvIGl0ID0gbV9heGlzQWN0
aW9ucy5maW5kKGF4aXNUeXBlKTsKKyAgICBpZiAoaXQgPT0gbV9heGlzQWN0aW9ucy5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFhyVmVjdG9yMmYgYXhpczsKKyAg
ICBpZiAoWFJfRkFJTEVEKGdldEFjdGlvblN0YXRlKGl0LT52YWx1ZSwgJmF4aXMpKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBheGlzOworfQorCitYclJlc3Vs
dCBPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24gYWN0aW9uLCBib29s
KiB2YWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIEFTU0VSVChhY3Rpb24g
IT0gWFJfTlVMTF9IQU5ETEUpOworCisgICAgYXV0byBzdGF0ZSA9IGNyZWF0ZVN0cnVjdHVyZTxY
ckFjdGlvblN0YXRlQm9vbGVhbiwgWFJfVFlQRV9BQ1RJT05fU1RBVEVfQk9PTEVBTj4oKTsKKyAg
ICBhdXRvIGluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJBY3Rpb25TdGF0ZUdldEluZm8sIFhSX1RZ
UEVfQUNUSU9OX1NUQVRFX0dFVF9JTkZPPigpOworICAgIGluZm8uYWN0aW9uID0gYWN0aW9uOwor
CisgICAgUkVUVVJOX1JFU1VMVF9JRl9GQUlMRUQoeHJHZXRBY3Rpb25TdGF0ZUJvb2xlYW4obV9z
ZXNzaW9uLCAmaW5mbywgJnN0YXRlKSwgbV9pbnN0YW5jZSk7CisgICAgKnZhbHVlID0gc3RhdGUu
Y3VycmVudFN0YXRlOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKK1hyUmVzdWx0IE9w
ZW5YUklucHV0U291cmNlOjpnZXRBY3Rpb25TdGF0ZShYckFjdGlvbiBhY3Rpb24sIGZsb2F0KiB2
YWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIEFTU0VSVChhY3Rpb24gIT0g
WFJfTlVMTF9IQU5ETEUpOworCisgICAgYXV0byBzdGF0ZSA9IGNyZWF0ZVN0cnVjdHVyZTxYckFj
dGlvblN0YXRlRmxvYXQsIFhSX1RZUEVfQUNUSU9OX1NUQVRFX0ZMT0FUPigpOworICAgIGF1dG8g
aW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckFjdGlvblN0YXRlR2V0SW5mbywgWFJfVFlQRV9BQ1RJ
T05fU1RBVEVfR0VUX0lORk8+KCk7CisgICAgaW5mby5hY3Rpb24gPSBhY3Rpb247CisKKyAgICBS
RVRVUk5fUkVTVUxUX0lGX0ZBSUxFRCh4ckdldEFjdGlvblN0YXRlRmxvYXQobV9zZXNzaW9uLCAm
aW5mbywgJnN0YXRlKSwgbV9pbnN0YW5jZSk7CisgICAgKnZhbHVlID0gc3RhdGUuY3VycmVudFN0
YXRlOworCisgICAgcmV0dXJuIFhSX1NVQ0NFU1M7Cit9CisKK1hyUmVzdWx0IE9wZW5YUklucHV0
U291cmNlOjpnZXRBY3Rpb25TdGF0ZShYckFjdGlvbiBhY3Rpb24sIFhyVmVjdG9yMmYqIHZhbHVl
KSBjb25zdAoreworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgQVNTRVJUKGFjdGlvbiAhPSBYUl9O
VUxMX0hBTkRMRSk7CisKKyAgICBhdXRvIHN0YXRlID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9u
U3RhdGVWZWN0b3IyZiwgWFJfVFlQRV9BQ1RJT05fU1RBVEVfVkVDVE9SMkY+KCk7CisgICAgYXV0
byBpbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyQWN0aW9uU3RhdGVHZXRJbmZvLCBYUl9UWVBFX0FD
VElPTl9TVEFURV9HRVRfSU5GTz4oKTsKKyAgICBpbmZvLmFjdGlvbiA9IGFjdGlvbjsKKworICAg
IFJFVFVSTl9SRVNVTFRfSUZfRkFJTEVEKHhyR2V0QWN0aW9uU3RhdGVWZWN0b3IyZihtX3Nlc3Np
b24sICZpbmZvLCAmc3RhdGUpLCBtX2luc3RhbmNlKTsKKyAgICAqdmFsdWUgPSBzdGF0ZS5jdXJy
ZW50U3RhdGU7CisKKyAgICByZXR1cm4gWFJfU1VDQ0VTUzsKK30KKworfSAvLyBuYW1lc3BhY2Ug
UGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3Vy
Y2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYmRjMWJiY2YzOGExY2MxM2EyZjJhZTU4ODE0MjhlOWQ3MDUwOGJk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09w
ZW5YUklucHV0U291cmNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNF
KE9QRU5YUikKKworI2luY2x1ZGUgIk9wZW5YUklucHV0TWFwcGluZ3MuaCIKKyNpbmNsdWRlICJP
cGVuWFJVdGlscy5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK2NsYXNzIE9wZW5YUklu
cHV0U291cmNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShPcGVuWFJJbnB1dFNvdXJjZSk7CitwdWJsaWM6CisgICAgdXNpbmcgU3VnZ2Vz
dGVkQmluZGluZ3MgPSBIYXNoTWFwPGNvbnN0IGNoYXIqLCBWZWN0b3I8WHJBY3Rpb25TdWdnZXN0
ZWRCaW5kaW5nPj47CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxPcGVuWFJJbnB1dFNvdXJj
ZT4gY3JlYXRlKFhySW5zdGFuY2UsIFhyU2Vzc2lvbiwgWFJIYW5kZWRuZXNzLCBJbnB1dFNvdXJj
ZUhhbmRsZSk7CisgICAgfk9wZW5YUklucHV0U291cmNlKCk7CisKKyAgICBYclJlc3VsdCBzdWdn
ZXN0QmluZGluZ3MoU3VnZ2VzdGVkQmluZGluZ3MmKSBjb25zdDsKKyAgICBPcHRpb25hbDxEZXZp
Y2U6OkZyYW1lRGF0YTo6SW5wdXRTb3VyY2U+IGdldElucHV0U291cmNlKFhyU3BhY2UsIGNvbnN0
IFhyRnJhbWVTdGF0ZSYpIGNvbnN0OworICAgIFhyQWN0aW9uU2V0IGFjdGlvblNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fYWN0aW9uU2V0OyB9CisgICAgWHJSZXN1bHQgdXBkYXRlSW50ZXJhY3Rpb25Q
cm9maWxlKCk7CisKK3ByaXZhdGU6CisgICAgT3BlblhSSW5wdXRTb3VyY2UoWHJJbnN0YW5jZSwg
WHJTZXNzaW9uLCBYUkhhbmRlZG5lc3MsIElucHV0U291cmNlSGFuZGxlKTsKKworICAgIHN0cnVj
dCBPcGVuWFJCdXR0b25BY3Rpb25zIHsKKyAgICAgICAgWHJBY3Rpb24gcHJlc3MgeyBYUl9OVUxM
X0hBTkRMRSB9OworICAgICAgICBYckFjdGlvbiB0b3VjaCB7IFhSX05VTExfSEFORExFIH07Cisg
ICAgICAgIFhyQWN0aW9uIHZhbHVlIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICB9OworCisgICAg
WHJSZXN1bHQgaW5pdGlhbGl6ZSgpOworICAgIFhyUmVzdWx0IGNyZWF0ZVNwYWNlQWN0aW9uKFhy
QWN0aW9uLCBYclNwYWNlJikgY29uc3Q7CisgICAgWHJSZXN1bHQgY3JlYXRlQWN0aW9uKFhyQWN0
aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBYckFjdGlvbiYpIGNvbnN0OworICAgIFhyUmVz
dWx0IGNyZWF0ZUJ1dHRvbkFjdGlvbnMoT3BlblhSQnV0dG9uVHlwZSwgY29uc3QgU3RyaW5nJiBw
cmVmaXgsIE9wZW5YUkJ1dHRvbkFjdGlvbnMmKSBjb25zdDsKKyAgICBYclJlc3VsdCBjcmVhdGVC
aW5kaW5nKGNvbnN0IGNoYXIqIHByb2ZpbGVQYXRoLCBYckFjdGlvbiwgY29uc3QgU3RyaW5nJiBi
aW5kaW5nUGF0aCwgU3VnZ2VzdGVkQmluZGluZ3MmKSBjb25zdDsKKworICAgIFhyUmVzdWx0IGdl
dFBvc2UoWHJTcGFjZSwgWHJTcGFjZSwgY29uc3QgWHJGcmFtZVN0YXRlJiwgRGV2aWNlOjpGcmFt
ZURhdGE6OklucHV0U291cmNlUG9zZSYpIGNvbnN0OworICAgIE9wdGlvbmFsPERldmljZTo6RnJh
bWVEYXRhOjpJbnB1dFNvdXJjZUJ1dHRvbj4gZ2V0QnV0dG9uKE9wZW5YUkJ1dHRvblR5cGUpIGNv
bnN0OworICAgIE9wdGlvbmFsPFhyVmVjdG9yMmY+IGdldEF4aXMoT3BlblhSQXhpc1R5cGUpIGNv
bnN0OworICAgIFhyUmVzdWx0IGdldEFjdGlvblN0YXRlKFhyQWN0aW9uLCBib29sKikgY29uc3Q7
CisgICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24sIGZsb2F0KikgY29uc3Q7Cisg
ICAgWHJSZXN1bHQgZ2V0QWN0aW9uU3RhdGUoWHJBY3Rpb24sIFhyVmVjdG9yMmYqKSBjb25zdDsK
KworICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhSX05VTExfSEFORExFIH07CisgICAgWHJT
ZXNzaW9uIG1fc2Vzc2lvbiB7IFhSX05VTExfSEFORExFIH07CisgICAgWFJIYW5kZWRuZXNzIG1f
aGFuZGVuZXNzIHsgWFJIYW5kZWRuZXNzOjpMZWZ0IH07CisgICAgSW5wdXRTb3VyY2VIYW5kbGUg
bV9oYW5kbGUgeyAwIH07CisgICAgU3RyaW5nIG1fc3ViYWN0aW9uUGF0aE5hbWU7CisgICAgWHJQ
YXRoIG1fc3ViYWN0aW9uUGF0aCB7IFhSX05VTExfUEFUSCB9OworICAgIFhyQWN0aW9uU2V0IG1f
YWN0aW9uU2V0IHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBYckFjdGlvbiBtX2dyaXBBY3Rpb24g
eyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhyU3BhY2UgbV9ncmlwU3BhY2UgeyBYUl9OVUxMX0hB
TkRMRSB9OworICAgIFhyQWN0aW9uIG1fcG9pbnRlckFjdGlvbiB7IFhSX05VTExfSEFORExFIH07
CisgICAgWHJTcGFjZSBtX3BvaW50ZXJTcGFjZSB7IFhSX05VTExfSEFORExFIH07CisgICAgdXNp
bmcgT3BlblhSQnV0dG9uQWN0aW9uc01hcCA9IEhhc2hNYXA8T3BlblhSQnV0dG9uVHlwZSwgT3Bl
blhSQnV0dG9uQWN0aW9ucywgSW50SGFzaDxPcGVuWFJCdXR0b25UeXBlPiwgV1RGOjpTdHJvbmdF
bnVtSGFzaFRyYWl0czxPcGVuWFJCdXR0b25UeXBlPj47CisgICAgT3BlblhSQnV0dG9uQWN0aW9u
c01hcCBtX2J1dHRvbkFjdGlvbnM7CisgICAgdXNpbmcgT3BlblhSQXhlc01hcCA9IEhhc2hNYXA8
T3BlblhSQXhpc1R5cGUsIFhyQWN0aW9uLCBJbnRIYXNoPE9wZW5YUkF4aXNUeXBlPiwgV1RGOjpT
dHJvbmdFbnVtSGFzaFRyYWl0czxPcGVuWFJBeGlzVHlwZT4+OworICAgIE9wZW5YUkF4ZXNNYXAg
bV9heGlzQWN0aW9uczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3Byb2ZpbGVzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0Uo
T1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09w
ZW5YUlV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRp
bHMuaAppbmRleCA2MmM1Y2IxYTZiZDdmOGNhNDQxYTY0NjBiZjdlOGI2NmM4OTBlNjdhLi45ZWNj
NDhhNmE2ZjAxNWVjNzVlYTE1ODFmMzY0OGFhMjAzOWY3YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSVXRpbHMuaApAQCAtNjQsMTAgKzY0LDIyIEBA
IGlubGluZSBTdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJSZXN1bHQgdmFsdWUsIFhySW5zdGFuY2Ug
aW5zdGFuY2UpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjx1bmtub3duICIsIGludCh2YWx1ZSks
ICI+Iik7CiB9CiAKLSNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsIGNhbGwsIGluc3Rh
bmNlLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTE9HKFhSLCAi
JXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywgY2FsbCwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0
YW5jZSkudXRmOCgpLmRhdGEoKSk7IFwKLSAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyNkZWZpbmUgUkVUVVJOX0lGX0ZBSUxFRChjYWxsLCBsYWJlbCwgaW5zdGFuY2Us
IC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBhdXRvIHhyUmVzdWx0ID0gY2FsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKFhSX0ZBSUxFRCh4clJlc3VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBMT0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVuY19fLCBsYWJlbCwgcmVzdWx0VG9TdHJpbmco
eHJSZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsgICAgXAorICAgICAgICAgICAgcmV0
dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFJFVFVSTl9S
RVNVTFRfSUZfRkFJTEVEKGNhbGwsIGluc3RhbmNlLCAuLi4pICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgYXV0byB4clJlc3VsdCA9IGNhbGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGlmIChYUl9GQUlMRUQoeHJSZXN1bHQpKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgTE9HKFhSLCAiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywg
I2NhbGwsIHJlc3VsdFRvU3RyaW5nKHhyUmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiB4clJlc3VsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIAogI2RlZmluZSBMT0dfSUZf
RkFJTEVEKHJlc3VsdCwgY2FsbCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXApAQCAtOTEsNiArMTAzLDEzIEBAIGlubGluZSBEZXZpY2U6
OkZyYW1lRGF0YTo6VmlldyB4clZpZXdUb1Bvc2UoWHJWaWV3IHZpZXcpCiAgICAgcmV0dXJuIHBv
c2U7CiB9CiAKK2lubGluZSBYclBvc2VmIFhyUG9zZUlkZW50aXR5KCkKK3sKKyAgICBYclBvc2Vm
IHBvc2U7CisgICAgcG9zZS5vcmllbnRhdGlvbi53ID0gMS4wOworICAgIHJldHVybiBwb3NlOwor
fQorCiBpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdG9YclZpZXdDb25maWd1cmF0aW9u
VHlwZShTZXNzaW9uTW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTA0LDYg
KzEyMywxOSBAQCBpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdG9YclZpZXdDb25maWd1
cmF0aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQogICAgIHJldHVybiBYUl9WSUVXX0NPTkZJR1VS
QVRJT05fVFlQRV9QUklNQVJZX01PTk87CiB9CiAKK2lubGluZSBTdHJpbmcgaGFuZGVuZXNzVG9T
dHJpbmcoWFJIYW5kZWRuZXNzIGhhbmRlbmVzcykKK3sKKyAgICBzd2l0Y2ggKGhhbmRlbmVzcykg
eworICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpMZWZ0OgorICAgICAgICByZXR1cm4gImxlZnQiOwor
ICAgIGNhc2UgWFJIYW5kZWRuZXNzOjpSaWdodDoKKyAgICAgICAgcmV0dXJuICJyaWdodCI7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAiIjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcAppbmRleCBhNzkzNmNjMjhj
NThlZDYzOGI1YTlmNWJiNDMxY2NiZmQxMDRiNGRlLi4wOGViN2IwODUzMjJlNDVjN2Q4NDAzYTQw
N2NiNGMwMTFjOGZhMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9v
cGVueHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
eHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCkBAIC0yMyw2ICsyMyw4IEBACiAjaWYgRU5B
QkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQogCiAjaW5jbHVkZSAiT3BlblhSRXh0ZW5zaW9ucy5o
IgorI2luY2x1ZGUgIk9wZW5YUklucHV0LmgiCisjaW5jbHVkZSAiT3BlblhSSW5wdXRTb3VyY2Uu
aCIKIAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgpAQCAtMTM1LDYgKzEzNyw5IEBAIHZvaWQgT3BlblhSRGV2aWNlOjppbml0aWFsaXpl
VHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUgbW9kZSkKICAgICAgICAgLy8gQ3JlYXRl
IHRoZSBkZWZhdWx0IHJlZmVyZW5jZSBzcGFjZXMKICAgICAgICAgbV9sb2NhbFNwYWNlID0gY3Jl
YXRlUmVmZXJlbmNlU3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfTE9DQUwpOwogICAgICAg
ICBtX3ZpZXdTcGFjZSA9IGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9TUEFDRV9U
WVBFX1ZJRVcpOworCisgICAgICAgIC8vIEluaXRpYWxpemUgaW5wdXQgdHJhY2tpbmcKKyAgICAg
ICAgbV9pbnB1dCA9IE9wZW5YUklucHV0OjpjcmVhdGUobV9pbnN0YW5jZSwgbV9zZXNzaW9uLCBt
X2xvY2FsU3BhY2UpOwogICAgIH0pOwogfQogCkBAIC0yMzEsNiArMjM2LDEwIEBAIHZvaWQgT3Bl
blhSRGV2aWNlOjpyZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1lQ2FsbGJhY2smJiBjYWxsYmFjaykK
ICAgICAgICAgICAgICAgICBpZiAobGF5ZXJEYXRhKQogICAgICAgICAgICAgICAgICAgICBmcmFt
ZURhdGEubGF5ZXJzLmFkZChsYXllci5rZXksICpsYXllckRhdGEpOwogICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAobV9pbnB1dCkKKyAgICAgICAgICAgICAgICBmcmFtZURhdGEuaW5w
dXRTb3VyY2VzID0gbV9pbnB1dC0+Y29sbGVjdElucHV0U291cmNlcyhtX2ZyYW1lU3RhdGUpOwor
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9y
Zy9yZWdpc3RyeS9PcGVuWFIvc3BlY3MvMS4wL21hbi9odG1sL1hyRnJhbWVTdGF0ZS5odG1sCiAg
ICAgICAgICAgICAvLyBXaGVuIHNob3VsZFJlbmRlciBpcyBmYWxzZSB0aGUgYXBwbGljYXRpb24g
c2hvdWxkIGF2b2lkIGhlYXZ5IEdQVSB3b3JrIHdoZXJlIHBvc3NpYmxlLApAQCAtNDU0LDYgKzQ2
Myw4IEBAIHZvaWQgT3BlblhSRGV2aWNlOjpwb2xsRXZlbnRzKCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgWFJfVFlQRV9FVkVOVF9EQVRBX0lOVEVSQUNUSU9O
X1BST0ZJTEVfQ0hBTkdFRDoKKyAgICAgICAgICAgIHVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgWFJfVFlQRV9FVkVOVF9EQVRBX01B
SU5fU0VTU0lPTl9WSVNJQklMSVRZX0NIQU5HRURfRVhUWDoKICAgICAgICAgY2FzZSBYUl9UWVBF
X0VWRU5UX0RBVEFfVklTSUJJTElUWV9NQVNLX0NIQU5HRURfS0hSOgogICAgICAgICBjYXNlIFhS
X1RZUEVfRVZFTlRfREFUQV9QRVJGX1NFVFRJTkdTX0VYVDoKQEAgLTUwMCw2ICs1MTEsNyBAQCB2
b2lkIE9wZW5YUkRldmljZTo6cmVzZXRTZXNzaW9uKCkKIHsKICAgICBBU1NFUlQoJlJ1bkxvb3A6
OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5ydW5Mb29wKCkpOwogICAgIG1fbGF5ZXJzLmNsZWFyKCk7
CisgICAgbV9pbnB1dC5yZXNldCgpOwogICAgIGlmIChtX3Nlc3Npb24gIT0gWFJfTlVMTF9IQU5E
TEUpIHsKICAgICAgICAgeHJEZXN0cm95U2Vzc2lvbihtX3Nlc3Npb24pOwogICAgICAgICBtX3Nl
c3Npb24gPSBYUl9OVUxMX0hBTkRMRTsKQEAgLTU2NCw2ICs1NzYsMjYgQEAgdm9pZCBPcGVuWFJE
ZXZpY2U6OnVwZGF0ZVN0YWdlUGFyYW1ldGVycygpCiAgICAgfQogfQogCit2b2lkIE9wZW5YUkRl
dmljZTo6dXBkYXRlSW50ZXJhY3Rpb25Qcm9maWxlKCkKK3sKKyAgICBpZiAoIW1faW5wdXQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faW5wdXQtPnVwZGF0ZUludGVyYWN0aW9uUHJvZmlsZSgp
OworCisgICAgaWYgKGRpZE5vdGlmeUlucHV0SW5pdGlhbGl6YXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGRpZE5vdGlmeUlucHV0SW5pdGlhbGl6YXRpb24gPSB0cnVlOworICAgIGF1dG8g
aW5wdXRTb3VyY2VzID0gbV9pbnB1dC0+Y29sbGVjdElucHV0U291cmNlcyhtX2ZyYW1lU3RhdGUp
OworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBpbnB1dFNvdXJjZXMgPSBXVEZNb3ZlKGlucHV0U291cmNlcyldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICht
X3RyYWNraW5nQW5kUmVuZGVyaW5nQ2xpZW50KQorICAgICAgICAgICAgbV90cmFja2luZ0FuZFJl
bmRlcmluZ0NsaWVudC0+c2Vzc2lvbkRpZEluaXRpYWxpemVJbnB1dFNvdXJjZXMoV1RGTW92ZShp
bnB1dFNvdXJjZXMpKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmgKaW5kZXggYTg2
ZDVjOTQ5MzE2YTY4NjgwMDc0YTQ3NTZhZDRjMzNhYTc5YTljOS4uY2RiNjM2NmU5MTk2MzFiYWI1
NmE5YThlNWFjNjU5ZWExMWU5OGE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCkBAIC0zMyw2ICszMyw3IEBACiBuYW1l
c3BhY2UgUGxhdGZvcm1YUiB7CiAKIGNsYXNzIE9wZW5YUkV4dGVuc2lvbnM7CitjbGFzcyBPcGVu
WFJJbnB1dDsKIAogLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlblhSL3Nw
ZWNzLzEuMC9odG1sL3hyc3BlYy5odG1sI3N5c3RlbQogLy8gQSBzeXN0ZW0gcmVwcmVzZW50cyBh
IGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBkZXZpY2VzIGluIHRoZSBydW50aW1lLCBvZnRlbiBtYWRl
IHVwIG9mIHNldmVyYWwgaW5kaXZpZHVhbApAQCAtNzgsNiArNzksNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgaGFuZGxlU2Vzc2lvblN0YXRlQ2hhbmdlKCk7CiAgICAgdm9pZCB3YWl0VW50aWxTdG9w
cGluZygpOwogICAgIHZvaWQgdXBkYXRlU3RhZ2VQYXJhbWV0ZXJzKCk7CisgICAgdm9pZCB1cGRh
dGVJbnRlcmFjdGlvblByb2ZpbGUoKTsKICAgICBMYXllckhhbmRsZSBnZW5lcmF0ZUxheWVySGFu
ZGxlKCkgeyByZXR1cm4gKyttX2hhbmRsZUluZGV4OyB9CiAKICAgICBYckluc3RhbmNlIG1faW5z
dGFuY2U7CkBAIC05Myw2ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFhyVmlldz4gbV9m
cmFtZVZpZXdzOwogICAgIEhhc2hNYXA8TGF5ZXJIYW5kbGUsIHN0ZDo6dW5pcXVlX3B0cjxPcGVu
WFJMYXllcj4+IG1fbGF5ZXJzOwogICAgIExheWVySGFuZGxlIG1faGFuZGxlSW5kZXggeyAwIH07
CisgICAgc3RkOjp1bmlxdWVfcHRyPE9wZW5YUklucHV0PiBtX2lucHV0OworICAgIGJvb2wgZGlk
Tm90aWZ5SW5wdXRJbml0aWFsaXphdGlvbiB7IGZhbHNlIH07CiAKICAgICB1c2luZyBWaWV3Q29u
ZmlndXJhdGlvblByb3BlcnRpZXNNYXAgPSBIYXNoTWFwPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBl
LCBYclZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcywgSW50SGFzaDxYclZpZXdDb25maWd1cmF0
aW9uVHlwZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8WHJWaWV3Q29uZmlndXJhdGlvblR5
cGU+PjsKICAgICBWaWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXNNYXAgbV92aWV3Q29uZmlndXJh
dGlvblByb3BlcnRpZXM7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>