<?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>212115</bug_id>
          
          <creation_ts>2020-05-19 17:30:18 -0700</creation_ts>
          <short_desc>Use OptionSet&lt;DragDestinationAction&gt; for mask values</short_desc>
          <delta_ts>2020-06-07 13:02:26 -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>DOM</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=212605</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=212885</see_also>
          <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>211988</blocked>
    
    <blocked>212397</blocked>
    
    <blocked>212507</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>useafterfree</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1654252</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-19 17:30:18 -0700</bug_when>
    <thetext>Use OptionSet&lt;DragDestinationAction&gt; for mask values.

WebCore::DragData::m_dragDestinationAction can&apos;t be validated as an individual enum value in IPC::Decoder and IPC::Encoder since it&apos;s a bit mask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654257</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-19 17:37:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/63423380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654268</commentid>
    <comment_count>2</comment_count>
      <attachid>399793</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-19 17:58:56 -0700</bug_when>
    <thetext>Created attachment 399793
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654757</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-20 17:42:33 -0700</bug_when>
    <thetext>So the mac-debug-wk1 layout tests fail here:
&lt;https://ews-build.webkit.org/#/builders/32/builds/10215&gt;

Due to this assert in OptionSet constructor:

    constexpr OptionSet(T t)
        : m_storage(static_cast&lt;StorageType&gt;(t))
    {
#ifndef NDEBUG
        // This assertion will conflict with the constexpr attribute if we enable it on NDEBUG builds.
        ASSERT_WITH_MESSAGE(!m_storage || hasOneBitSet(m_storage), &quot;Enumerator is not a zero or a positive power of two.&quot;);
#endif
    }

Because DragData() constructors want to set an default OptionSet&lt;DragApplicationData&gt; value of DragDestinationAction::Any (which has all bits set):

    WEBCORE_EXPORT DragData(DragDataRef, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet&lt;DragDestinationAction&gt; actionMask = DragDestinationAction::Any);
    WEBCORE_EXPORT DragData(const String&amp; dragStorageName, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet&lt;DragDestinationAction&gt; actionMask = DragDestinationAction::Any);

I see a few ways to solve this:

1. Use OptionSet::fromRaw() to work around the debug assertion.

2. Get rid of DragDestinationAction::Any and write a template function like OptionSet::allBits() that does the equivalent of logical-or-ing all the enum values together to produce an equivalent to DragDestinationAction::Any.  This would also likely require the use of EnumTraits to list all the valid values so they could be logical-or-ed together.

3. Change OptionSet() constructors (both for individual enum values and for std::initializer_list) to verify that the value(s) passed in are valid enum value(s), again after defining EnumTraits for the bit masks.

Note that #2 and #3 might be a lot more work because most OptionSet() enums don&apos;t have EnumTraits defined, but would probably catch more errors in the long term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654763</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-20 18:20:23 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #3)
&gt; I see a few ways to solve this:
&gt; 
&gt; 1. Use OptionSet::fromRaw() to work around the debug assertion.
&gt; 
&gt; 2. Get rid of DragDestinationAction::Any and write a template function like
&gt; OptionSet::allBits() that does the equivalent of logical-or-ing all the enum
&gt; values together to produce an equivalent to DragDestinationAction::Any. 
&gt; This would also likely require the use of EnumTraits to list all the valid
&gt; values so they could be logical-or-ed together.
&gt; 
&gt; 3. Change OptionSet() constructors (both for individual enum values and for
&gt; std::initializer_list) to verify that the value(s) passed in are valid enum
&gt; value(s), again after defining EnumTraits for the bit masks.
&gt; 
&gt; Note that #2 and #3 might be a lot more work because most OptionSet() enums
&gt; don&apos;t have EnumTraits defined, but would probably catch more errors in the
&gt; long term.

4. Allow values with &quot;all bits set&quot; as valid for the OptionSet(T) constructor.

That seems like the best option in the short term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654772</commentid>
    <comment_count>5</comment_count>
      <attachid>399923</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-20 18:57:09 -0700</bug_when>
    <thetext>Created attachment 399923
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654784</commentid>
    <comment_count>6</comment_count>
      <attachid>399923</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-20 20:01:40 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654789</commentid>
    <comment_count>7</comment_count>
      <attachid>399923</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-05-20 21:16:46 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt; Source/WTF/wtf/OptionSet.h:84
&gt; +        ASSERT_WITH_MESSAGE(!m_storage || hasOneBitSet(m_storage) || m_storage == std::numeric_limits&lt;std::underlying_type_t&lt;T&gt;&gt;::max(), &quot;Enumerator is not a zero, a positive power of two or has all bits set.&quot;);

I don&apos;t really like this.  If we did this we should probably have a static_assert that std::underlying_type&lt;T&gt; is unsigned.

&gt; Source/WebCore/page/DragActions.h:34
&gt; +enum class DragDestinationAction : uint32_t {

This only needs to be 1 byte.  Can&apos;t we use a uint8_t?

&gt; Source/WebCore/page/DragActions.h:35
&gt; +    None  = 0,

Do we still need this?  The default constructor of OptionSet should take care of this case.

&gt; Source/WebCore/page/DragActions.h:39
&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()

What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654982</commentid>
    <comment_count>8</comment_count>
      <attachid>399923</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-21 10:28:46 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt;&gt; Source/WTF/wtf/OptionSet.h:84
&gt;&gt; +        ASSERT_WITH_MESSAGE(!m_storage || hasOneBitSet(m_storage) || m_storage == std::numeric_limits&lt;std::underlying_type_t&lt;T&gt;&gt;::max(), &quot;Enumerator is not a zero, a positive power of two or has all bits set.&quot;);
&gt; 
&gt; I don&apos;t really like this.  If we did this we should probably have a static_assert that std::underlying_type&lt;T&gt; is unsigned.

I can change the the words &quot;all bits set&quot; to something like &quot;all maskable bits set&quot;.  This is actually still correct for an enum with a signed underlying type if you were to create an &quot;Every&quot; or &quot;All&quot; or &quot;Max&quot; enum value.  Only the sign bit isn&apos;t masked (set) in that case.

&gt;&gt; Source/WebCore/page/DragActions.h:34
&gt;&gt; +enum class DragDestinationAction : uint32_t {
&gt; 
&gt; This only needs to be 1 byte.  Can&apos;t we use a uint8_t?

Technically, this should be uint64_t (uint32_t on 32-bit) to match NSUInteger used for WKDragDestinationAction in WKDragDestinationAction.h:

typedef NS_OPTIONS(NSUInteger, WKDragDestinationAction) {
    WKDragDestinationActionNone    = 0,
    WKDragDestinationActionDHTML   = 1,
    WKDragDestinationActionEdit    = 2,
    WKDragDestinationActionLoad    = 4,
    WKDragDestinationActionAny     = NSUIntegerMax
} WK_API_AVAILABLE(macos(10.13), ios(11.0));

I was taking the &quot;kept in sync&quot; comment in a more literal sense, especially since we freely cast from one to the other in the WebKit project.

&gt;&gt; Source/WebCore/page/DragActions.h:35
&gt;&gt; +    None  = 0,
&gt; 
&gt; Do we still need this?  The default constructor of OptionSet should take care of this case.

We do not strictly need this, but I thought we should keep it in sync with WKDragDestinationAction.

How loose can we be with keeping them in sync?

&gt;&gt; Source/WebCore/page/DragActions.h:39
&gt;&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()
&gt; 
&gt; What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?

Again, I thought we should keep it in sync with WKDragDestinationAction, which also has an &quot;Any&quot; value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655000</commentid>
    <comment_count>9</comment_count>
      <attachid>399923</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-21 10:58:45 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt;&gt;&gt; Source/WebCore/page/DragActions.h:35
&gt;&gt;&gt; +    None  = 0,
&gt;&gt; 
&gt;&gt; Do we still need this?  The default constructor of OptionSet should take care of this case.
&gt; 
&gt; We do not strictly need this, but I thought we should keep it in sync with WKDragDestinationAction.
&gt; 
&gt; How loose can we be with keeping them in sync?

I don’t think we need to keep them in sync. We need to translate from one to the other, not try to make them the same.

&gt;&gt;&gt; Source/WebCore/page/DragActions.h:39
&gt;&gt;&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()
&gt;&gt; 
&gt;&gt; What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?
&gt; 
&gt; Again, I thought we should keep it in sync with WKDragDestinationAction, which also has an &quot;Any&quot; value.

I agree with Alex, this should be a constexpr function. And it should have the value 0x7, not 0xFFFFFFFF. Something like this:

    constexpr OptionSet&lt;DragDestinationAction&gt; anyDragDestination { return DHTML | Edit | Load; }

Critically, &quot;any&quot; and &quot;none&quot; must not be enumeration values, but should instead be possible OptionSet values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655006</commentid>
    <comment_count>10</comment_count>
      <attachid>399923</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-21 11:13:25 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt;&gt;&gt;&gt; Source/WebCore/page/DragActions.h:35
&gt;&gt;&gt;&gt; +    None  = 0,
&gt;&gt;&gt; 
&gt;&gt;&gt; Do we still need this?  The default constructor of OptionSet should take care of this case.
&gt;&gt; 
&gt;&gt; We do not strictly need this, but I thought we should keep it in sync with WKDragDestinationAction.
&gt;&gt; 
&gt;&gt; How loose can we be with keeping them in sync?
&gt; 
&gt; I don’t think we need to keep them in sync. We need to translate from one to the other, not try to make them the same.

Okay.

&gt;&gt;&gt;&gt; Source/WebCore/page/DragActions.h:39
&gt;&gt;&gt;&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()
&gt;&gt;&gt; 
&gt;&gt;&gt; What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?
&gt;&gt; 
&gt;&gt; Again, I thought we should keep it in sync with WKDragDestinationAction, which also has an &quot;Any&quot; value.
&gt; 
&gt; I agree with Alex, this should be a constexpr function. And it should have the value 0x7, not 0xFFFFFFFF. Something like this:
&gt; 
&gt;     constexpr OptionSet&lt;DragDestinationAction&gt; anyDragDestination { return DHTML | Edit | Load; }
&gt; 
&gt; Critically, &quot;any&quot; and &quot;none&quot; must not be enumeration values, but should instead be possible OptionSet values.

I made a template that would calculate the &quot;any&quot; value using EnumTraits in Bug 211988 Attachment #399615.  Does that seem like it&apos;s worth doing here?

&lt;https://bugs.webkit.org/attachment.cgi?id=399615&amp;action=review&gt;

(Alex didn&apos;t like the way I added the IsEnumBitfield &quot;trait&quot; to distinguish bitfield enums from other enums, though.)

template&lt;typename T, typename E&gt; struct EnumBitfieldValueChecker;

template&lt;typename T, typename E, E e, E... es&gt;
struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, e, es...&gt;&gt; {
    static constexpr T allValidBits()
    {
        return static_cast&lt;T&gt;(e) | EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, es...&gt;&gt;::allValidBits();
    }
};

template&lt;typename T, typename E&gt;
struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E&gt;&gt; {
    static constexpr T allValidBits()
    {
        return 0;
    }
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655009</commentid>
    <comment_count>11</comment_count>
      <attachid>399923</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-21 11:27:35 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/page/DragActions.h:39
&gt;&gt;&gt;&gt;&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?
&gt;&gt;&gt; 
&gt;&gt;&gt; Again, I thought we should keep it in sync with WKDragDestinationAction, which also has an &quot;Any&quot; value.
&gt;&gt; 
&gt;&gt; I agree with Alex, this should be a constexpr function. And it should have the value 0x7, not 0xFFFFFFFF. Something like this:
&gt;&gt; 
&gt;&gt;     constexpr OptionSet&lt;DragDestinationAction&gt; anyDragDestination { return DHTML | Edit | Load; }
&gt;&gt; 
&gt;&gt; Critically, &quot;any&quot; and &quot;none&quot; must not be enumeration values, but should instead be possible OptionSet values.
&gt; 
&gt; I made a template that would calculate the &quot;any&quot; value using EnumTraits in Bug 211988 Attachment #399615 [details].  Does that seem like it&apos;s worth doing here?
&gt; 
&gt; &lt;https://bugs.webkit.org/attachment.cgi?id=399615&amp;action=review&gt;
&gt; 
&gt; (Alex didn&apos;t like the way I added the IsEnumBitfield &quot;trait&quot; to distinguish bitfield enums from other enums, though.)
&gt; 
&gt; template&lt;typename T, typename E&gt; struct EnumBitfieldValueChecker;
&gt; 
&gt; template&lt;typename T, typename E, E e, E... es&gt;
&gt; struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, e, es...&gt;&gt; {
&gt;     static constexpr T allValidBits()
&gt;     {
&gt;         return static_cast&lt;T&gt;(e) | EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, es...&gt;&gt;::allValidBits();
&gt;     }
&gt; };
&gt; 
&gt; template&lt;typename T, typename E&gt;
&gt; struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E&gt;&gt; {
&gt;     static constexpr T allValidBits()
&gt;     {
&gt;         return 0;
&gt;     }
&gt; };

Actually, I could make this an OptionSetTrait&lt;&gt; since it&apos;s similar but separate from EnumTrait&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655041</commentid>
    <comment_count>12</comment_count>
      <attachid>399923</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-21 13:04:15 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/page/DragActions.h:39
&gt;&gt;&gt;&gt;&gt;&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Again, I thought we should keep it in sync with WKDragDestinationAction, which also has an &quot;Any&quot; value.
&gt;&gt;&gt; 
&gt;&gt;&gt; I agree with Alex, this should be a constexpr function. And it should have the value 0x7, not 0xFFFFFFFF. Something like this:
&gt;&gt;&gt; 
&gt;&gt;&gt;     constexpr OptionSet&lt;DragDestinationAction&gt; anyDragDestination { return DHTML | Edit | Load; }
&gt;&gt;&gt; 
&gt;&gt;&gt; Critically, &quot;any&quot; and &quot;none&quot; must not be enumeration values, but should instead be possible OptionSet values.
&gt;&gt; 
&gt;&gt; I made a template that would calculate the &quot;any&quot; value using EnumTraits in Bug 211988 Attachment #399615 [details].  Does that seem like it&apos;s worth doing here?
&gt;&gt; 
&gt;&gt; &lt;https://bugs.webkit.org/attachment.cgi?id=399615&amp;action=review&gt;
&gt;&gt; 
&gt;&gt; (Alex didn&apos;t like the way I added the IsEnumBitfield &quot;trait&quot; to distinguish bitfield enums from other enums, though.)
&gt;&gt; 
&gt;&gt; template&lt;typename T, typename E&gt; struct EnumBitfieldValueChecker;
&gt;&gt; 
&gt;&gt; template&lt;typename T, typename E, E e, E... es&gt;
&gt;&gt; struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, e, es...&gt;&gt; {
&gt;&gt;     static constexpr T allValidBits()
&gt;&gt;     {
&gt;&gt;         return static_cast&lt;T&gt;(e) | EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, es...&gt;&gt;::allValidBits();
&gt;&gt;     }
&gt;&gt; };
&gt;&gt; 
&gt;&gt; template&lt;typename T, typename E&gt;
&gt;&gt; struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E&gt;&gt; {
&gt;&gt;     static constexpr T allValidBits()
&gt;&gt;     {
&gt;&gt;         return 0;
&gt;&gt;     }
&gt;&gt; };
&gt; 
&gt; Actually, I could make this an OptionSetTrait&lt;&gt; since it&apos;s similar but separate from EnumTrait&lt;&gt;.

I suppose it’s elegant to not have to list all the bits all in a function and keep it updated.

On the other hand, in my opinion there’s not necessarily a valuable meaning, for every OptionSet, of setting all the bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655544</commentid>
    <comment_count>13</comment_count>
      <attachid>400097</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-22 18:19:58 -0700</bug_when>
    <thetext>Created attachment 400097
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655555</commentid>
    <comment_count>14</comment_count>
      <attachid>400097</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-22 19:01:11 -0700</bug_when>
    <thetext>Comment on attachment 400097
Patch v3

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

&gt; Source/WTF/ChangeLog:22
&gt; +        fall back to the original validation checks. (The !m_storage
&gt; +        check in the OptionSet&lt;&gt; constructor was removed to re-enforce
&gt; +        that ::None enums don&apos;t need to be defined when used with
&gt; +        OptionSet&lt;&gt;.)

Sigh.  Looks like PaintBehavior::None is causing problems after the !m_storage check was removed.  Probably just need to add that back for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655566</commentid>
    <comment_count>15</comment_count>
      <attachid>400097</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-22 20:28:28 -0700</bug_when>
    <thetext>Comment on attachment 400097
Patch v3

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

&gt;&gt; Source/WTF/ChangeLog:22
&gt;&gt; +        OptionSet&lt;&gt;.)
&gt; 
&gt; Sigh.  Looks like PaintBehavior::None is causing problems after the !m_storage check was removed.  Probably just need to add that back for now.

Oops, that should be PaintBehavior::Normal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655606</commentid>
    <comment_count>16</comment_count>
      <attachid>400121</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-23 07:26:29 -0700</bug_when>
    <thetext>Created attachment 400121
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655607</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-23 07:28:04 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #16)
&gt; Created attachment 400121 [details]
&gt; Patch v4

Compared to Patch v3, this adds back the `!m_storage` check to the OptionSet constructor due to use of PaintBehavior::Normal:

     constexpr OptionSet(E e)
         : m_storage(static_cast&lt;StorageType&gt;(e))
     {
-        ASSERT(isValidOptionSetEnum(e));
+        ASSERT(!m_storage || isValidOptionSetEnum(e));
     }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655608</commentid>
    <comment_count>18</comment_count>
      <attachid>399923</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-23 07:40:17 -0700</bug_when>
    <thetext>Comment on attachment 399923
Patch v2

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

&gt;&gt;&gt; Source/WTF/wtf/OptionSet.h:84
&gt;&gt;&gt; +        ASSERT_WITH_MESSAGE(!m_storage || hasOneBitSet(m_storage) || m_storage == std::numeric_limits&lt;std::underlying_type_t&lt;T&gt;&gt;::max(), &quot;Enumerator is not a zero, a positive power of two or has all bits set.&quot;);
&gt;&gt; 
&gt;&gt; I don&apos;t really like this.  If we did this we should probably have a static_assert that std::underlying_type&lt;T&gt; is unsigned.
&gt; 
&gt; I can change the the words &quot;all bits set&quot; to something like &quot;all maskable bits set&quot;.  This is actually still correct for an enum with a signed underlying type if you were to create an &quot;Every&quot; or &quot;All&quot; or &quot;Max&quot; enum value.  Only the sign bit isn&apos;t masked (set) in that case.

In Patches v3 &amp; v4, I removed this and instead added support for OptionSetTraits&lt;&gt;, which validates individual enum values using OptionSetTraits&lt;&gt; if it exists for that enum, otherwise it falls back to the assertion above.

&gt;&gt;&gt;&gt;&gt; Source/WebCore/page/DragActions.h:35
&gt;&gt;&gt;&gt;&gt; +    None  = 0,
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Do we still need this?  The default constructor of OptionSet should take care of this case.
&gt;&gt;&gt; 
&gt;&gt;&gt; We do not strictly need this, but I thought we should keep it in sync with WKDragDestinationAction.
&gt;&gt;&gt; 
&gt;&gt;&gt; How loose can we be with keeping them in sync?
&gt;&gt; 
&gt;&gt; I don’t think we need to keep them in sync. We need to translate from one to the other, not try to make them the same.
&gt; 
&gt; Okay.

I found that translating from WebKitLegacy/WebKit types back to WebCore types meant that more bits were set than necessary since the *Any value in WebKitLegacy/WebKit/AppKit typically use the &quot;set all bits&quot; idiom.

To address this, I apply the OptionSet&lt;&gt;::any() bit mask (made possible to compute with OptionSetTraits&lt;&gt;) when constructing an OptionSet&lt;&gt; using the ::fromRaw() method to make sure each OptionSet&lt;&gt; with OptionSetTraits&lt;&gt; only has valid bits set at any time.  See WTF::maskRawValue() in Patches v3 &amp; v4.  (Initially I tried to validate the WebKitLegacy/WebKit/AppKit values, but this frequently failed due to the &quot;set all bits&quot; idiom for *Any values noted above.)

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/page/DragActions.h:39
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +    Any   = std::numeric_limits&lt;uint32_t&gt;::max()
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; What if instead of this we made a function that returned an OptionSet&lt;DragDestinationAction&gt; called anyDragDestination()?
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Again, I thought we should keep it in sync with WKDragDestinationAction, which also has an &quot;Any&quot; value.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I agree with Alex, this should be a constexpr function. And it should have the value 0x7, not 0xFFFFFFFF. Something like this:
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;     constexpr OptionSet&lt;DragDestinationAction&gt; anyDragDestination { return DHTML | Edit | Load; }
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Critically, &quot;any&quot; and &quot;none&quot; must not be enumeration values, but should instead be possible OptionSet values.
&gt;&gt;&gt; 
&gt;&gt;&gt; I made a template that would calculate the &quot;any&quot; value using EnumTraits in Bug 211988 Attachment #399615 [details].  Does that seem like it&apos;s worth doing here?
&gt;&gt;&gt; 
&gt;&gt;&gt; &lt;https://bugs.webkit.org/attachment.cgi?id=399615&amp;action=review&gt;
&gt;&gt;&gt; 
&gt;&gt;&gt; (Alex didn&apos;t like the way I added the IsEnumBitfield &quot;trait&quot; to distinguish bitfield enums from other enums, though.)
&gt;&gt;&gt; 
&gt;&gt;&gt; template&lt;typename T, typename E&gt; struct EnumBitfieldValueChecker;
&gt;&gt;&gt; 
&gt;&gt;&gt; template&lt;typename T, typename E, E e, E... es&gt;
&gt;&gt;&gt; struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, e, es...&gt;&gt; {
&gt;&gt;&gt;     static constexpr T allValidBits()
&gt;&gt;&gt;     {
&gt;&gt;&gt;         return static_cast&lt;T&gt;(e) | EnumBitfieldValueChecker&lt;T, EnumValues&lt;E, es...&gt;&gt;::allValidBits();
&gt;&gt;&gt;     }
&gt;&gt;&gt; };
&gt;&gt;&gt; 
&gt;&gt;&gt; template&lt;typename T, typename E&gt;
&gt;&gt;&gt; struct EnumBitfieldValueChecker&lt;T, EnumValues&lt;E&gt;&gt; {
&gt;&gt;&gt;     static constexpr T allValidBits()
&gt;&gt;&gt;     {
&gt;&gt;&gt;         return 0;
&gt;&gt;&gt;     }
&gt;&gt;&gt; };
&gt;&gt; 
&gt;&gt; Actually, I could make this an OptionSetTrait&lt;&gt; since it&apos;s similar but separate from EnumTrait&lt;&gt;.
&gt; 
&gt; I suppose it’s elegant to not have to list all the bits all in a function and keep it updated.
&gt; 
&gt; On the other hand, in my opinion there’s not necessarily a valuable meaning, for every OptionSet, of setting all the bits.

I made it possible to use an optional OptionSetTraits&lt;&gt; for an OptionSet&lt;&gt; in Patches v3 &amp; v4.  This makes it possible to generate an OptionSet&lt;&gt;::any() bit mask with all valid bits set, and to validate individual enum values if it exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655625</commentid>
    <comment_count>19</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-23 09:55:08 -0700</bug_when>
    <thetext>Patch v4 is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655894</commentid>
    <comment_count>20</comment_count>
      <attachid>400121</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-05-25 11:17:26 -0700</bug_when>
    <thetext>Comment on attachment 400121
Patch v4

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

I think this adds too much complexity to OptionSet.  Let&apos;s push this complexity towards DragDestinationAction.
I think OptionSetValues should be added in a different patch.  Right now OptionSet serialization is basically unchecked and that&apos;s not a known issue because if a compromised process sends invalid bits, they won&apos;t be used.

&gt; Source/WTF/wtf/OptionSet.h:244
&gt; +constexpr OptionSet&lt;E&gt; OptionSet&lt;E&gt;::any()

I don&apos;t think this is a good name for this.  Just because DragDestinationAction had an any doesn&apos;t mean other enums call it &quot;any&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656158</commentid>
    <comment_count>21</comment_count>
      <attachid>400121</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-26 13:44:46 -0700</bug_when>
    <thetext>Comment on attachment 400121
Patch v4

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

&gt;&gt; Source/WTF/wtf/OptionSet.h:244
&gt;&gt; +constexpr OptionSet&lt;E&gt; OptionSet&lt;E&gt;::any()
&gt; 
&gt; I don&apos;t think this is a good name for this.  Just because DragDestinationAction had an any doesn&apos;t mean other enums call it &quot;any&quot;.

I don&apos;t have a strong feeling about using ::any().  What would you suggest instead?  ::all()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656171</commentid>
    <comment_count>22</comment_count>
      <attachid>400121</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-05-26 14:08:39 -0700</bug_when>
    <thetext>Comment on attachment 400121
Patch v4

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

&gt;&gt;&gt; Source/WTF/wtf/OptionSet.h:244
&gt;&gt;&gt; +constexpr OptionSet&lt;E&gt; OptionSet&lt;E&gt;::any()
&gt;&gt; 
&gt;&gt; I don&apos;t think this is a good name for this.  Just because DragDestinationAction had an any doesn&apos;t mean other enums call it &quot;any&quot;.
&gt; 
&gt; I don&apos;t have a strong feeling about using ::any().  What would you suggest instead?  ::all()?

I would suggest making this just a function that returns an OptionSet&lt;DragDestinationAction&gt;, not generalizing it for OptionSet&lt;E&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656190</commentid>
    <comment_count>23</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-26 14:52:27 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #20)
&gt; Comment on attachment 400121 [details]
&gt; Patch v4
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400121&amp;action=review
&gt; 
&gt; I think this adds too much complexity to OptionSet.  Let&apos;s push this
&gt; complexity towards DragDestinationAction.

I guess you mean this?

&quot;I would suggest making this just a function that returns an OptionSet&lt;DragDestinationAction&gt;, not generalizing it for OptionSet&lt;E&gt;.&quot;

(I got so distracted between my last comment and replying to this that you answered in the meantime. :)

Sounds good.  We can generalize ::all()/::any() if other OptionSet&lt;&gt; values need this later.

&gt; I think OptionSetValues should be added in a different patch.  Right now
&gt; OptionSet serialization is basically unchecked and that&apos;s not a known issue
&gt; because if a compromised process sends invalid bits, they won&apos;t be used.

Okay, I will break this up into a separate patch.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656250</commentid>
    <comment_count>24</comment_count>
      <attachid>400294</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-26 19:05:56 -0700</bug_when>
    <thetext>Created attachment 400294
Patch v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656254</commentid>
    <comment_count>25</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-26 19:11:15 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #24)
&gt; Created attachment 400294 [details]
&gt; Patch v5

- Removed OptionSet.h changes.
- Removed OptionSetTraits&lt;WebCore::DragDestinationAction&gt;.
- Replaced OptionSetTraits&lt;WebCore::DragDestinationAction&gt;::any() with DragDestinationActionAny() function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656330</commentid>
    <comment_count>26</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-27 03:23:21 -0700</bug_when>
    <thetext>Committed r262190: &lt;https://trac.webkit.org/changeset/262190&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400294.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656435</commentid>
    <comment_count>27</comment_count>
      <attachid>400294</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-27 10:52:10 -0700</bug_when>
    <thetext>Comment on attachment 400294
Patch v5

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

&gt; Source/WebCore/page/DragActions.h:42
&gt; +inline constexpr OptionSet&lt;DragDestinationAction&gt; DragDestinationActionAny()

No need for inline if we also have constexpr, which means inline.

Should not name this with a leading capital letter. I suggest the name anyDragDestinationAction().

&gt; Source/WebCore/platform/DragData.h:79
&gt; +    WEBCORE_EXPORT DragData(DragDataRef, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet&lt;DragDestinationAction&gt; actionMask = DragDestinationActionAny());
&gt; +    WEBCORE_EXPORT DragData(const String&amp; dragStorageName, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet&lt;DragDestinationAction&gt; actionMask = DragDestinationActionAny());

I suggest omitting the argument name &quot;actionMask&quot; here.

&gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3948
&gt; +    auto dragDestinationActionMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);

This conversion should *not* be done with fromRaw. We should write a function to do the conversion. We don’t want code that depends on WKDragDestinationAction being identical to OptionSet&lt;WebCore::DragDestinationAction&gt;. Instead we want to write a simple translation function.

&gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3949
&gt; +    WebCore::DragData dragData(draggingInfo, client, global, static_cast&lt;WebCore::DragOperation&gt;(draggingInfo.draggingSourceOperationMask), applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);

Same here with the static_cast.

&gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3961
&gt; +    auto dragDestinationActionMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);

Ditto.

&gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3962
&gt; +    WebCore::DragData dragData(draggingInfo, client, global, static_cast&lt;WebCore::DragOperation&gt;(draggingInfo.draggingSourceOperationMask), applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);

Ditto.

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:7314
&gt; +    auto dragDestinationActionMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw(dragDestinationAction);

Ditto.

&gt; Source/WebKitLegacy/mac/WebCoreSupport/WebDragClient.mm:89
&gt; +    [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragDestinationAction:static_cast&lt;WebDragDestinationAction&gt;(action) forDraggingInfo:dragData.platformData()];

Same thing again. We should use a function to convert, not rely on the internal mask matching the API one. We’d like to be able to add things internally without being in lock step with public API.

&gt; Source/WebKitLegacy/mac/WebView/WebView.mm:1915
&gt; +    auto dragDestinationMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([self dragDestinationActionMaskForSession:session]);

Ditto.

&gt; Source/WebKitLegacy/mac/WebView/WebView.mm:6729
&gt; +    return OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([[self _UIDelegateForwarder] webView:self dragDestinationActionMaskForDraggingInfo:draggingInfo]);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657136</commentid>
    <comment_count>28</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-28 20:22:39 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #27)
&gt; Comment on attachment 400294 [details]
&gt; Patch v5
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400294&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/DragActions.h:42
&gt; &gt; +inline constexpr OptionSet&lt;DragDestinationAction&gt; DragDestinationActionAny()
&gt; 
&gt; No need for inline if we also have constexpr, which means inline.
&gt; 
&gt; Should not name this with a leading capital letter. I suggest the name
&gt; anyDragDestinationAction().
&gt; 
&gt; &gt; Source/WebCore/platform/DragData.h:79
&gt; &gt; +    WEBCORE_EXPORT DragData(DragDataRef, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet&lt;DragDestinationAction&gt; actionMask = DragDestinationActionAny());
&gt; &gt; +    WEBCORE_EXPORT DragData(const String&amp; dragStorageName, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet&lt;DragDestinationAction&gt; actionMask = DragDestinationActionAny());
&gt; 
&gt; I suggest omitting the argument name &quot;actionMask&quot; here.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3948
&gt; &gt; +    auto dragDestinationActionMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);
&gt; 
&gt; This conversion should *not* be done with fromRaw. We should write a
&gt; function to do the conversion. We don’t want code that depends on
&gt; WKDragDestinationAction being identical to
&gt; OptionSet&lt;WebCore::DragDestinationAction&gt;. Instead we want to write a simple
&gt; translation function.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3949
&gt; &gt; +    WebCore::DragData dragData(draggingInfo, client, global, static_cast&lt;WebCore::DragOperation&gt;(draggingInfo.draggingSourceOperationMask), applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);
&gt; 
&gt; Same here with the static_cast.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3961
&gt; &gt; +    auto dragDestinationActionMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm:3962
&gt; &gt; +    WebCore::DragData dragData(draggingInfo, client, global, static_cast&lt;WebCore::DragOperation&gt;(draggingInfo.draggingSourceOperationMask), applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:7314
&gt; &gt; +    auto dragDestinationActionMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw(dragDestinationAction);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebCoreSupport/WebDragClient.mm:89
&gt; &gt; +    [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragDestinationAction:static_cast&lt;WebDragDestinationAction&gt;(action) forDraggingInfo:dragData.platformData()];
&gt; 
&gt; Same thing again. We should use a function to convert, not rely on the
&gt; internal mask matching the API one. We’d like to be able to add things
&gt; internally without being in lock step with public API.
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebView.mm:1915
&gt; &gt; +    auto dragDestinationMask = OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([self dragDestinationActionMaskForSession:session]);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/WebView/WebView.mm:6729
&gt; &gt; +    return OptionSet&lt;WebCore::DragDestinationAction&gt;::fromRaw([[self _UIDelegateForwarder] webView:self dragDestinationActionMaskForDraggingInfo:draggingInfo]);
&gt; 
&gt; Ditto.

Bug 212507: Don&apos;t use casts to convert between WebCore types and {Web,WK}DragDestinationActionMask/{NS,WK}DragOperation</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399793</attachid>
            <date>2020-05-19 17:58:56 -0700</date>
            <delta_ts>2020-05-20 18:57:08 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-212115-20200519175944.patch</filename>
            <type>text/plain</type>
            <size>32694</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFkMjczOTI3NjQ5Mzlk
NWIzMGUwNjk5NzE4MWQ1NzdlYjUyMzFjNi4uZjI4N2VmZTZmMzFjZjFmMWM0NGYzZWE0MTUwMGJj
MDA3MWRhNGY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIwLTA1LTE5ICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE9wdGlvblNldDxE
cmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBtYXNrIHZhbHVlcworICAgICAgICA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjM0MjMzODA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uIGlzIHVzZWQgYXMgYm90aCBpbmRpdmlkdWFsIHZhbHVlcyBhbmQgYXMgYQor
ICAgICAgICBiaXQgbWFzay4gVGhpcyBjaGFuZ2VzIGJpdCBtYXNrIHVzZXMgdG8gT3B0aW9uU2V0
PD4gYW5kIHJlbmFtZXMKKyAgICAgICAgdmFyaWFibGVzIHRvIGRlbm90ZSBtYXNrcy4KKworICAg
ICAgICAqIHBhZ2UvRHJhZ0FjdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbik6CisgICAgICAgIC0gQ29udmVydCB0byBlbnVtIGNsYXNzLgorICAgICAgICAq
IHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xs
ZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpkcmFnRW50ZXJlZE9yVXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6dHJ5RG9jdW1lbnREcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
Ojpjb25jbHVkZUVkaXREcmFnKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGNv
bnN0KTogUmVuYW1lLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2sgY29uc3QpOgorICAgICAgICAtIFJlbmFtZSBkcmFnRGVzdGluYXRp
b25BY3Rpb24oKSB0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCkuCisgICAgICAgICogcGxh
dGZvcm0vRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0RhdGE6OkRyYWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpkcmFnRGVzdGlu
YXRpb25BY3Rpb24gY29uc3QpOiBSZW5hbWUuCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayBjb25zdCk6CisgICAgICAgIC0gUmVuYW1lIGRyYWdE
ZXN0aW5hdGlvbkFjdGlvbigpIHRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpvcGVyYXRvciA9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9EcmFnRGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdE
YXRhKToKKwogMjAyMC0wNS0xOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIElEQlJlcXVlc3REYXRhIGFuZCBJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uIHNob3VsZCBpbml0aWFsaXplIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIGZpZWxkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDRlZTFhMDI0ZGQ1ZmVkYzVkZGM3MTRjMjNlYTdlYTliNmJiM2U0ZGYuLjM2NDM3
MDg2OWVhMjEyZjMxYmVlNTkwOWJhYTQ3ZTUyOTdkZjU1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjQgQEAKKzIwMjAtMDUtMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZm9yIG1hc2sgdmFs
dWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIxMTU+CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmRlY29kZSk6CisgICAgICAgIC0gU3dpdGNoIGZyb20g
ZGVjb2RlRW51bSgpIGFuZCBlbmNvZGVFbnVtKCkgdG8gbW9kZXJuCisgICAgICAgICAgZXF1aXZh
bGVudHMgdGhhdCBjaGVjayBmb3IgdmFsaWQgZW51bSB2YWx1ZXMuCisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
ZHJhZ2dpbmdFbnRlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdnaW5n
VXBkYXRlZCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZHJhZ0RhdGFGb3JEcm9wU2Vzc2lvbjpk
cmFnRGVzdGluYXRpb25BY3Rpb246XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6
d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorCiAyMDIwLTA1LTE5ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGaXggbWVzc2Fn
ZSBmaWx0ZXIgc2FuZGJveCB2aW9sYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRl
eCBhYTBhZGUyMWY1ZjdjNjI3MzJlMDc0MWIyN2Y3ZWE5YjZjNWU5NzUzLi42ZmMwM2RkYmM2ODE3
NzNjMjVmMGJjN2U4YTU5NTM4OWZhOGNjZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDUtMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFw
cGxlLmNvbT4KKworICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4g
Zm9yIG1hc2sgdmFsdWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIxMTU+Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
bW06CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbik6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3
IGRyYWdEYXRhRm9yU2Vzc2lvbjpjbGllbnQ6Z2xvYmFsOm9wZXJhdGlvbjpdKToKKyAgICAgICAg
KC1bV2ViVmlldyBhY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOl0pOgorCiAyMDIwLTA1LTE4ICBE
YXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBUZXh0
SW5kaWNhdG9yT3B0aW9ucyB3aXRoIE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQWN0aW9ucy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQWN0aW9ucy5oCmluZGV4IGI2Nzc2YmJkNzUzODM2MWM4MTEzMDVmM2Q5OTBk
NGI1OTNkMWYwODYuLjRjNTM4YjNiOGY5YTc0ZTExNDMyNDcyNmViNDU3Njg2ZjcwOTVkODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0FjdGlvbnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdBY3Rpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTQgKzMwLDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gV2ViQ29yZURyYWdEZXN0aW5hdGlvbkFjdGlvbiBzaG91bGQg
YmUga2VwdCBpbiBzeW5jIHdpdGggV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLgotdHlwZWRlZiBl
bnVtIHsKLSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lICAgID0gMCwKLSAgICBEcmFnRGVz
dGluYXRpb25BY3Rpb25ESFRNTCAgID0gMSwKLSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0
ICAgID0gMiwKLSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkICAgID0gNCwKLSAgICBEcmFn
RGVzdGluYXRpb25BY3Rpb25BbnkgICAgID0gVUlOVF9NQVgKLX0gRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uOworLy8gV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIG11c3QgYmUga2VwdCBpbiBz
eW5jIHdpdGggV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFuZCBXS0RyYWdEZXN0aW5hdGlvbkFj
dGlvbi4KK2VudW0gY2xhc3MgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIDogdWludDMyX3QgeworICAg
IE5vbmUgID0gMCwKKyAgICBESFRNTCA9IDEsCisgICAgRWRpdCAgPSAyLAorICAgIExvYWQgID0g
NCwKKyAgICBBbnkgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQorfTsK
IAogLy8gV2ViQ29yZURyYWdTb3VyY2VBY3Rpb24gc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRo
IFdlYkRyYWdTb3VyY2VBY3Rpb24uCiB0eXBlZGVmIGVudW0gewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA1Y2FjMTgwYmY1N2ZiZDU2ZWRlNTk4NGMwOTg3MzliOTBi
ZDFkYThlLi5lM2E4OTAxYTQ4NTBiMmUwMDBkY2ZkMTRmYTM4ZGMyOGNkMWI0NDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjU1LDggKzI1NSw4IEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFn
RGF0YSkKICAgICBpZiAobV9kb2N1bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgPSBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeVRvUHJvcGFnYXRlKCk7CiAKLSAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uREhUTUwpICYmIGRyYWdJc0hhbmRsZWRCeURv
Y3VtZW50KG1fZHJhZ0hhbmRsaW5nTWV0aG9kKSkgewotICAgICAgICBjbGllbnQoKS53aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25ESFRNTCwgZHJh
Z0RhdGEpOworICAgIGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERy
YWdEZXN0aW5hdGlvbkFjdGlvbjo6REhUTUwpKSAmJiBkcmFnSXNIYW5kbGVkQnlEb2N1bWVudCht
X2RyYWdIYW5kbGluZ01ldGhvZCkpIHsKKyAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpESFRNTCwgZHJhZ0RhdGEp
OwogICAgICAgICBSZWY8RnJhbWU+IG1haW5GcmFtZShtX3BhZ2UubWFpbkZyYW1lKCkpOwogICAg
ICAgICBib29sIHByZXZlbnRlZERlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1haW5GcmFt
ZS0+dmlldygpKQpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZv
cm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gJiBEcmFnRGVzdGluYXRpb25B
Y3Rpb25FZGl0KSAmJiBjb25jbHVkZUVkaXREcmFnKGRyYWdEYXRhKSkgeworICAgIGlmICgobV9k
cmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6
RWRpdCkpICYmIGNvbmNsdWRlRWRpdERyYWcoZHJhZ0RhdGEpKSB7CiAgICAgICAgIGNsaWVudCgp
LmRpZENvbmNsdWRlRWRpdERyYWcoKTsKICAgICAgICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBu
dWxscHRyOwogICAgICAgICBjbGVhckRyYWdDYXJldCgpOwpAQCAtMjg1LDcgKzI4NSw3IEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSkKICAgICBpZiAodXJsU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgZHJhZ0RhdGEpOworICAgIGNsaWVudCgpLndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6TG9hZCwgZHJh
Z0RhdGEpOwogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7IG1fcGFnZS5t
YWluRnJhbWUoKSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0gfTsKICAgICBmcmFtZUxv
YWRSZXF1ZXN0LnNldFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSk7CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRJc1JlcXVlc3RGcm9tQ2xp
ZW50T3JVc2VySW5wdXQoKTsKQEAgLTMwOCwxNSArMzA4LDE1IEBAIERyYWdPcGVyYXRpb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKIHsKICAgICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1
bWVudEF0UG9pbnQoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSkpOwogCi0gICAgbV9kcmFnRGVz
dGluYXRpb25BY3Rpb24gPSBkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25BY3Rpb24oKTsKLSAgICBp
ZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gPT0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSkg
eworICAgIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayA9IGRyYWdEYXRhLmRyYWdEZXN0aW5h
dGlvbkFjdGlvbk1hc2soKTsKKyAgICBpZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmlz
RW1wdHkoKSkgewogICAgICAgICBjbGVhckRyYWdDYXJldCgpOyAvLyBGSVhNRTogV2h5IG5vdCBj
YWxsIG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQobnVsbHB0cik/CiAgICAgICAgIHJldHVybiBEcmFn
T3BlcmF0aW9uTm9uZTsKICAgICB9CiAKICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24g
PSBEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IHRyeURvY3Vt
ZW50RHJhZyhkcmFnRGF0YSwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24sIGRyYWdPcGVyYXRpb24p
OwotICAgIGlmIChtX2RyYWdIYW5kbGluZ01ldGhvZCA9PSBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5v
bmUgJiYgKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9h
ZCkpIHsKKyAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IHRyeURvY3VtZW50RHJhZyhkcmFnRGF0
YSwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLCBkcmFnT3BlcmF0aW9uKTsKKyAgICBpZiAo
bV9kcmFnSGFuZGxpbmdNZXRob2QgPT0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lICYmIChtX2Ry
YWdEZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFpbnMoRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpM
b2FkKSkpIHsKICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG9wZXJhdGlvbkZvckxvYWQoZHJhZ0Rh
dGEpOwogICAgICAgICBpZiAoZHJhZ09wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkKICAg
ICAgICAgICAgIG1fZHJhZ0hhbmRsaW5nTWV0aG9kID0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpQYWdl
TG9hZDsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjp1cGRhdGVTdXBw
b3J0ZWRUeXBlSWRlbnRpZmllcnNGb3JEcmFnSGFuZGxpbmdNZXRob2QoRHJhZ0hhbgogCiAjZW5k
aWYKIAotRHJhZ0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWco
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFz
aywgRHJhZ09wZXJhdGlvbiYgZHJhZ09wZXJhdGlvbikKK0RyYWdIYW5kbGluZ01ldGhvZCBEcmFn
Q29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgT3B0
aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZGVzdGluYXRpb25BY3Rpb25NYXNrLCBEcmFn
T3BlcmF0aW9uJiBkcmFnT3BlcmF0aW9uKQogewogICAgIGlmICghbV9kb2N1bWVudFVuZGVyTW91
c2UpCiAgICAgICAgIHJldHVybiBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmU7CkBAIC0zOTcsNyAr
Mzk3LDcgQEAgRHJhZ0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmEKICAgICAgICAgcmV0dXJuIERyYWdIYW5k
bGluZ01ldGhvZDo6Tm9uZTsKIAogICAgIGJvb2wgaXNIYW5kbGluZ0RyYWcgPSBmYWxzZTsKLSAg
ICBpZiAoYWN0aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRIVE1MKSB7CisgICAgaWYg
KGRlc3RpbmF0aW9uQWN0aW9uTWFzay5jb250YWlucyhEcmFnRGVzdGluYXRpb25BY3Rpb246OkRI
VE1MKSkgewogICAgICAgICBpc0hhbmRsaW5nRHJhZyA9IHRyeURIVE1MRHJhZyhkcmFnRGF0YSwg
ZHJhZ09wZXJhdGlvbik7CiAgICAgICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiBtX2RvY3VtZW50
VW5kZXJNb3VzZSBoYXMgYmVlbiByZXNldCBieSB0cnlESFRNTERyYWcuCiAgICAgICAgIC8vIHRy
eURIVE1MRHJhZyBmaXJlcyBkcmFnZW50ZXIgZXZlbnQuIFRoZSBldmVudCBsaXN0ZW5lciB0aGF0
IGxpc3RlbnMKQEAgLTQyMCw3ICs0MjAsNyBAQCBEcmFnSGFuZGxpbmdNZXRob2QgRHJhZ0NvbnRy
b2xsZXI6OnRyeURvY3VtZW50RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYQogICAg
ICAgICByZXR1cm4gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25EZWZhdWx0OwogICAgIH0KIAotICAg
IGlmICgoYWN0aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNhblByb2Nl
c3NEcmFnKGRyYWdEYXRhKSkgeworICAgIGlmIChkZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFp
bnMoRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0KSAmJiBjYW5Qcm9jZXNzRHJhZyhkcmFnRGF0
YSkpIHsKICAgICAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zQ29sb3IoKSkgewogICAgICAgICAg
ICAgZHJhZ09wZXJhdGlvbiA9IERyYWdPcGVyYXRpb25HZW5lcmljOwogICAgICAgICAgICAgcmV0
dXJuIERyYWdIYW5kbGluZ01ldGhvZDo6U2V0Q29sb3I7CkBAIC01NjksNyArNTY5LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5z
ZXJpYWxpemVkKCksIGZhbHNlKTsKICAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5z
aG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSku
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjbGllbnQoKS53aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBk
cmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5l
ckZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRD
b2xvcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYwNSw3ICs2MDUsNyBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFn
RGF0YSkKICAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBj
bGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25B
Y3Rpb25FZGl0LCBkcmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwog
CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3Jt
VHdvU3RlcERyb3AoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjMxLDcgKzYzMSw3IEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAg
ICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQs
IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3Bw
ZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNsaWVudCgpLndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRy
YWdEYXRhKTsKKyAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rp
b24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGF1dG8g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCB0ZXh0KTsKICAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCkt
PnBlcmZvcm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuaAppbmRleCAxY2Y2NjUyZmQxOGQwOTAxZTJhZTMxMTQ1ZTk1ZWVkNGExNWRi
Mzc1Li44ODA2OTU3MmJkNGYwMzE1NWE5ODIxNWVjNGFmODEwMzZhYjhiMjcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJE
cmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBQcm9taXNlZEF0dGFjaG1l
bnRJbmZvOwogICAgICAgICBEcmFnSGFuZGxpbmdNZXRob2QgZHJhZ0hhbmRsaW5nTWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gbV9kcmFnSGFuZGxpbmdNZXRob2Q7IH0KIAogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnRVbmRlck1vdXNlKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91
c2UuZ2V0KCk7IH0KLSAgICAgICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRyYWdEZXN0aW5hdGlv
bkFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOyB9CisgICAg
ICAgIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5hdGlvbkFjdGlv
bk1hc2soKSBjb25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7IH0KICAg
ICAgICAgRHJhZ1NvdXJjZUFjdGlvbiBkZWxlZ2F0ZURyYWdTb3VyY2VBY3Rpb24oY29uc3QgSW50
UG9pbnQmIHJvb3RWaWV3UG9pbnQpOwogICAgICAgICAKICAgICAgICAgRWxlbWVudCogZHJhZ2dh
YmxlRWxlbWVudChjb25zdCBGcmFtZSosIEVsZW1lbnQqIHN0YXJ0LCBjb25zdCBJbnRQb2ludCYs
IERyYWdTdGF0ZSYpIGNvbnN0OwpAQCAtMTA4LDcgKzEwOSw3IEBAIHN0cnVjdCBQcm9taXNlZEF0
dGFjaG1lbnRJbmZvOwogICAgICAgICBib29sIGNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0Rh
dGEmKTsKICAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnRW50ZXJlZE9yVXBkYXRlZChjb25zdCBE
cmFnRGF0YSYpOwogICAgICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbkZvckxvYWQoY29uc3Qg
RHJhZ0RhdGEmKTsKLSAgICAgICAgRHJhZ0hhbmRsaW5nTWV0aG9kIHRyeURvY3VtZW50RHJhZyhj
b25zdCBEcmFnRGF0YSYsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ09wZXJhdGlvbiYpOwor
ICAgICAgICBEcmFnSGFuZGxpbmdNZXRob2QgdHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRh
JiwgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4sIERyYWdPcGVyYXRpb24mKTsKICAg
ICAgICAgYm9vbCB0cnlESFRNTERyYWcoY29uc3QgRHJhZ0RhdGEmLCBEcmFnT3BlcmF0aW9uJik7
CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihjb25zdCBEcmFnRGF0YSYpOwog
ICAgICAgICB2b2lkIGNsZWFyRHJhZ0NhcmV0KCk7CkBAIC0xNDksNyArMTUwLDcgQEAgc3RydWN0
IFByb21pc2VkQXR0YWNobWVudEluZm87CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZJdGVt
c1RvQmVBY2NlcHRlZCB7IDAgfTsKICAgICAgICAgRHJhZ0hhbmRsaW5nTWV0aG9kIG1fZHJhZ0hh
bmRsaW5nTWV0aG9kIHsgRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lIH07CiAKLSAgICAgICAgRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIHsgRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uTm9uZSB9OworICAgICAgICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
PiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7CiAgICAgICAgIERyYWdTb3VyY2VBY3Rpb24g
bV9kcmFnU291cmNlQWN0aW9uIHsgRHJhZ1NvdXJjZUFjdGlvbk5vbmUgfTsKICAgICAgICAgYm9v
bCBtX2RpZEluaXRpYXRlRHJhZyB7IGZhbHNlIH07CiAgICAgICAgIERyYWdPcGVyYXRpb24gbV9z
b3VyY2VEcmFnT3BlcmF0aW9uIHsgRHJhZ09wZXJhdGlvbk5vbmUgfTsgLy8gU2V0IGluIHN0YXJ0
RHJhZyB3aGVuIGEgZHJhZyBzdGFydHMgZnJvbSBhIG1vdXNlIGRvd24gd2l0aGluIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCmluZGV4IGI0MjhjMzczOTNmZWNkNGExYTg4
MDU4MGZlZDY4ZWI5YmNlNGM0YTAuLjhmNjc1NWY1NzYxYTE0NTRlOWI0MDYwMDJlMDg4NDNjNmI3
MTg4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDIzICszMiwyMyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotRHJhZ0RhdGE6
OkRyYWdEYXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlv
biwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9w
ZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25B
Y3Rpb24gZGVzdGluYXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYg
ZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xv
YmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxp
Y2F0aW9uRmxhZ3MgZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3Rp
bmF0aW9uQWN0aW9uTWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24p
CiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0Zm9y
bURyYWdEYXRhKGRhdGEpCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3Vy
Y2VPcGVyYXRpb25NYXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQotICAgICwg
bV9kcmFnRGVzdGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCisgICAgLCBtX2RyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25NYXNrKQogeyAgCiB9CiAKLURy
YWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9z
aXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3Vy
Y2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywgRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0aW9uKQorRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0
cmluZyYsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGds
b2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBs
aWNhdGlvbkZsYWdzIGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkZXN0
aW5hdGlvbkFjdGlvbk1hc2spCiAgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9u
KQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZv
cm1EcmFnRGF0YSgwKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNl
T3BlcmF0aW9uTWFzaykKICAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAsIG1f
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9kcmFnRGVz
dGluYXRpb25BY3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKIHsKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggZTkzMDk1ZmM3YjJhMGIxMzZkNDY2MTZk
MDIyMGNjZWJhMzk5YTAzNC4uNGY0MzI1NzA5MTE4MzRlODdlNWVmMGEwY2Y0ZWMwMDdmY2UwYzhh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJJbnRQb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC03NCw4ICs3NSw4IEBA
IHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIERyYWdnaW5nUHVycG9zZSB7IEZvckVkaXRpbmcsIEZv
ckZpbGVVcGxvYWQsIEZvckNvbG9yQ29udHJvbCB9OwogCiAgICAgLy8gY2xpZW50UG9zaXRpb24g
aXMgdGFrZW4gdG8gYmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnIGV2ZW50IHdpdGhpbiB0aGUg
dGFyZ2V0IHdpbmRvdywgd2l0aCAoMCwwKSBhdCB0aGUgdG9wIGxlZnQKLSAgICBXRUJDT1JFX0VY
UE9SVCBEcmFnRGF0YShEcmFnRGF0YVJlZiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9u
LCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdBcHBs
aWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uTm9uZSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGFjdGlvbnMgPSBEcmFnRGVzdGluYXRpb25BY3Rpb25BbnkpOwotICAgIFdFQkNPUkVfRVhQT1JU
IERyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBJbnRQb2ludCYg
Y2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJh
dGlvbiwgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgPSBEcmFnQXBwbGljYXRpb25Ob25lLCBEcmFnRGVz
dGluYXRpb25BY3Rpb24gYWN0aW9ucyA9IERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRHJhZ0RhdGEoRHJhZ0RhdGFSZWYsIGNvbnN0IEludFBvaW50JiBjbGll
bnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9u
LCBEcmFnQXBwbGljYXRpb25GbGFncyA9IERyYWdBcHBsaWNhdGlvbk5vbmUsIE9wdGlvblNldDxE
cmFnRGVzdGluYXRpb25BY3Rpb24+IGFjdGlvbk1hc2sgPSB7IERyYWdEZXN0aW5hdGlvbkFjdGlv
bjo6QW55IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIERyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBv
aW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiwgRHJhZ0FwcGxpY2F0aW9uRmxhZ3Mg
PSBEcmFnQXBwbGljYXRpb25Ob25lLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBh
Y3Rpb25NYXNrID0geyBEcmFnRGVzdGluYXRpb25BY3Rpb246OkFueSB9KTsKICAgICAvLyBUaGlz
IGNvbnN0cnVjdG9yIHNob3VsZCB1c2VkIG9ubHkgYnkgV2ViS2l0MiBJUEMgYmVjYXVzZSBEcmFn
RGF0YQogICAgIC8vIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBkZWNvZGVyIGFuZCBub3QgaW4gdGhl
IGNvbnN0cnVjdG9yLgogICAgIERyYWdEYXRhKCkgeyB9CkBAIC0xMDEsNyArMTAyLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgY29udGFpbnNDb2xvcigpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNG
aWxlcygpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRmlsZXMoKSBjb25zdDsKLSAgICBE
cmFnRGVzdGluYXRpb25BY3Rpb24gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kcmFnRGVzdGluYXRpb25BY3Rpb247IH0KKyAgICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uPiBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCkgY29uc3QgeyByZXR1cm4gbV9k
cmFnRGVzdGluYXRpb25BY3Rpb25NYXNrOyB9CiAgICAgdm9pZCBzZXRGaWxlTmFtZXMoVmVjdG9y
PFN0cmluZz4mIGZpbGVOYW1lcykgeyBtX2ZpbGVOYW1lcyA9IFdURk1vdmUoZmlsZU5hbWVzKTsg
fQogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlTmFtZXMoKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVOYW1lczsgfQogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTE5LDcgKzEyMCw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhID0gZGF0YS5tX3BsYXRmb3JtRHJhZ0Rh
dGE7CiAgICAgICAgIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrID0gZGF0YS5tX2RyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFzazsKICAgICAgICAgbV9hcHBsaWNhdGlvbkZsYWdzID0gZGF0
YS5tX2FwcGxpY2F0aW9uRmxhZ3M7Ci0gICAgICAgIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID0g
ZGF0YS5tX2RyYWdEZXN0aW5hdGlvbkFjdGlvbjsKKyAgICAgICAgbV9kcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrID0gZGF0YS5tX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7CiAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICB9CiAjZW5kaWYKQEAgLTEzMSw3ICsxMzIsNyBAQCBwcml2YXRlOgog
ICAgIERyYWdPcGVyYXRpb24gbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2s7CiAgICAgRHJh
Z0FwcGxpY2F0aW9uRmxhZ3MgbV9hcHBsaWNhdGlvbkZsYWdzOwogICAgIFZlY3RvcjxTdHJpbmc+
IG1fZmlsZU5hbWVzOwotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBtX2RyYWdEZXN0aW5hdGlv
bkFjdGlvbjsKKyAgICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBtX2RyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2s7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgU3RyaW5nIG1fcGFz
dGVib2FyZE5hbWU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL0RyYWdEYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9E
cmFnRGF0YUNvY29hLm1tCmluZGV4IGEzNmY0Y2QwZTk3ODliNTViMDE4MzJmYjE5YzEwMDYxYTdi
MTE4Y2QuLjljY2FmYzBjZDdhODM2ZTZjOTFlMWYyMzNlMTg5MGIzMzhhNGQzNDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0RhdGFDb2NvYS5tbQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYs
MTMgKzExNiwxMyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyB0aWZmUGFzdGVib2FyZFR5cGUoKQog
I2VuZGlmCiB9CiAKLURyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJ
bnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwg
RHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBm
bGFncywgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0aW9uKQorRHJhZ0RhdGE6
OkRyYWdEYXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlv
biwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9w
ZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uPiBkZXN0aW5hdGlvbkFjdGlvbk1hc2spCiAgICAgOiBtX2NsaWVudFBv
c2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3Np
dGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKICAgICAsIG1fYXBwbGljYXRp
b25GbGFncyhmbGFncykKLSAgICAsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9u
QWN0aW9uKQorICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0
aW9uTWFzaykKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX3Bhc3RlYm9hcmROYW1lKFtbbV9w
bGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pCiAjZWxzZQpAQCAtMTMx
LDEzICsxMzEsMTMgQEAgRHJhZ0RhdGE6OkRyYWdEYXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0
IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG8KIHsKIH0KIAotRHJhZ0RhdGE6
OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBJbnRQb2ludCYg
Y2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJh
dGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywgRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0aW9uKQorRHJhZ0RhdGE6OkRyYWdEYXRh
KGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9z
aXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3Vy
Y2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywgT3B0aW9uU2V0PERy
YWdEZXN0aW5hdGlvbkFjdGlvbj4gZGVzdGluYXRpb25BY3Rpb25NYXNrKQogICAgIDogbV9jbGll
bnRQb3NpdGlvbihjbGllbnRQb3NpdGlvbikKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFs
UG9zaXRpb24pCiAgICAgLCBtX3BsYXRmb3JtRHJhZ0RhdGEoMCkKICAgICAsIG1fZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrKHNvdXJjZU9wZXJhdGlvbk1hc2spCiAgICAgLCBtX2FwcGxpY2F0
aW9uRmxhZ3MoZmxhZ3MpCi0gICAgLCBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbihkZXN0aW5hdGlv
bkFjdGlvbikKKyAgICAsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayhkZXN0aW5hdGlvbkFj
dGlvbk1hc2spCiAgICAgLCBtX3Bhc3RlYm9hcmROYW1lKGRyYWdTdG9yYWdlTmFtZSkKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4
IGQ5ZWJiMWIyM2ZkM2ExODhmMmE4MDViOTc1NDMxNGYwOGEwYmI2NzUuLmMyOTc2ZmRhY2I2MmFk
OGVmNjQyNjBhNDhlOTRmNzAzNWU0NGIzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMTYxNSw3ICsxNjE1LDcgQEAgdm9pZCBBcmd1
bWVudENvZGVyPERyYWdEYXRhPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERyYWdE
YXRhJiBkcmFnRGF0YSkKICAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLnBhc3RlYm9hcmROYW1lKCk7
CiAgICAgZW5jb2RlciA8PCBkcmFnRGF0YS5maWxlTmFtZXMoKTsKICNlbmRpZgotICAgIGVuY29k
ZXIuZW5jb2RlRW51bShkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25BY3Rpb24oKSk7CisgICAgZW5j
b2RlciA8PCBkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCk7CiB9CiAKIGJvb2wg
QXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCkBAIC0xNjQ2LDExICsxNjQ2LDExIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxE
cmFnRGF0YT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGRlc3RpbmF0aW9uQWN0aW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGRlc3RpbmF0
aW9uQWN0aW9uKSkKKyAgICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkcmFnRGVz
dGluYXRpb25BY3Rpb25NYXNrOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uTWFzaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRyYWdEYXRhID0g
RHJhZ0RhdGEocGFzdGVib2FyZE5hbWUsIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwg
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBhcHBsaWNhdGlvbkZsYWdzLCBkZXN0aW5hdGlv
bkFjdGlvbik7CisgICAgZHJhZ0RhdGEgPSBEcmFnRGF0YShwYXN0ZWJvYXJkTmFtZSwgY2xpZW50
UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGFw
cGxpY2F0aW9uRmxhZ3MsIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2spOwogICAgIGRyYWdEYXRh
LnNldEZpbGVOYW1lcyhmaWxlTmFtZXMpOwogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IDFkNjNiYzA1MTI2MmFh
Nzc4NWM3ZWVkOTM2MDM1NTI3ZDY4ODFhODIuLjY1ZDAwZWY4MDk4ZGNjNjhjYTBiMzQ1NGY2M2U3
MDQwMjM2ZjNhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzk0Miw4ICszOTQyLDggQEAgTlNEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBs
OjpkcmFnZ2luZ0VudGVyZWQoaWQgPE5TRHJhZ2dpbmdJbmZvPiBkcmFnZ2luZ0luZm8pCiB7CiAg
ICAgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50KFttX3ZpZXcgY29udmVydFBvaW50OmRyYWdnaW5n
SW5mby5kcmFnZ2luZ0xvY2F0aW9uIGZyb21WaWV3Om5pbF0pOwogICAgIFdlYkNvcmU6OkludFBv
aW50IGdsb2JhbChXZWJDb3JlOjpnbG9iYWxQb2ludChkcmFnZ2luZ0luZm8uZHJhZ2dpbmdMb2Nh
dGlvbiwgW21fdmlldyB3aW5kb3ddKSk7Ci0gICAgYXV0byBkcmFnRGVzdGluYXRpb25BY3Rpb24g
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+KFttX3ZpZXcgX3dl
Yl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXSk7Ci0g
ICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2Jh
bCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oZHJhZ2dpbmdJbmZvLmRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFnKG1fdmlldy5n
ZXRBdXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKTsK
KyAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBPcHRpb25TZXQ8V2ViQ29yZTo6
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6ZnJvbVJhdyhbbV92aWV3IF93ZWJfZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOworICAgIFdlYkNvcmU6OkRy
YWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0
PFdlYkNvcmU6OkRyYWdPcGVyYXRpb24+KGRyYWdnaW5nSW5mby5kcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2spLCBhcHBsaWNhdGlvbkZsYWdzRm9yRHJhZyhtX3ZpZXcuZ2V0QXV0b3JlbGVhc2Vk
KCksIGRyYWdnaW5nSW5mbyksIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2spOwogCiAgICAgbV9w
YWdlLT5yZXNldEN1cnJlbnREcmFnSW5mb3JtYXRpb24oKTsKICAgICBtX3BhZ2UtPmRyYWdFbnRl
cmVkKGRyYWdEYXRhLCBkcmFnZ2luZ0luZm8uZHJhZ2dpbmdQYXN0ZWJvYXJkLm5hbWUpOwpAQCAt
Mzk1NSw4ICszOTU1LDggQEAgTlNEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnZ2luZ1Vw
ZGF0ZWQoaWQgPE5TRHJhZ2dpbmdJbmZvPiBkcmFnZ2luZ0luZm8pCiB7CiAgICAgV2ViQ29yZTo6
SW50UG9pbnQgY2xpZW50KFttX3ZpZXcgY29udmVydFBvaW50OmRyYWdnaW5nSW5mby5kcmFnZ2lu
Z0xvY2F0aW9uIGZyb21WaWV3Om5pbF0pOwogICAgIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbChX
ZWJDb3JlOjpnbG9iYWxQb2ludChkcmFnZ2luZ0luZm8uZHJhZ2dpbmdMb2NhdGlvbiwgW21fdmll
dyB3aW5kb3ddKSk7Ci0gICAgYXV0byBkcmFnRGVzdGluYXRpb25BY3Rpb24gPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+KFttX3ZpZXcgX3dlYl9kcmFnRGVzdGlu
YXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgV2ViQ29yZTo6
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oZHJhZ2dpbmdJbmZvLmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzayksIGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFnKG1fdmlldy5nZXRBdXRvcmVsZWFz
ZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKTsKKyAgICBhdXRvIGRy
YWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uPjo6ZnJvbVJhdyhbbV92aWV3IF93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9y
RHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOworICAgIFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdE
YXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkRy
YWdPcGVyYXRpb24+KGRyYWdnaW5nSW5mby5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2spLCBh
cHBsaWNhdGlvbkZsYWdzRm9yRHJhZyhtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCksIGRyYWdnaW5n
SW5mbyksIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2spOwogICAgIG1fcGFnZS0+ZHJhZ1VwZGF0
ZWQoZHJhZ0RhdGEsIGRyYWdnaW5nSW5mby5kcmFnZ2luZ1Bhc3RlYm9hcmQubmFtZSk7CiAKICAg
ICBOU0ludGVnZXIgbnVtYmVyT2ZWYWxpZEl0ZW1zRm9yRHJvcCA9IG1fcGFnZS0+Y3VycmVudERy
YWdOdW1iZXJPZkZpbGVzVG9CZUFjY2VwdGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA4NWU2ZTZh
NDRjMDk1MjRjYzk1MTg4Y2E5Mzk2ODUwYmNjZTFmZDAzLi4wZTAwZjQ1NTI1MWQ3OGFkNGE5YzQ0
ZDQ3M2UwMmI3ZjE4OGM4NTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MzA1LDcgKzczMDUsOCBA
QCAtIChXZWJDb3JlOjpEcmFnRGF0YSlkcmFnRGF0YUZvckRyb3BTZXNzaW9uOihpZCA8VUlEcm9w
U2Vzc2lvbj4pc2Vzc2lvbiBkcmFnRGVzdAogICAgIFtzZWxmIGNvbXB1dGVDbGllbnRBbmRHbG9i
YWxQb2ludHNGb3JEcm9wU2Vzc2lvbjpzZXNzaW9uIG91dENsaWVudFBvaW50OiZjbGllbnQgb3V0
R2xvYmFsUG9pbnQ6Jmdsb2JhbF07CiAKICAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIGRyYWdP
cGVyYXRpb25NYXNrID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oc2Vzc2lv
bi5hbGxvd3NNb3ZlT3BlcmF0aW9uID8gV2ViQ29yZTo6RHJhZ09wZXJhdGlvbkV2ZXJ5IDogKFdl
YkNvcmU6OkRyYWdPcGVyYXRpb25FdmVyeSAmIH5XZWJDb3JlOjpEcmFnT3BlcmF0aW9uTW92ZSkp
OwotICAgIHJldHVybiB7IHNlc3Npb24sIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChjbGllbnQp
LCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoZ2xvYmFsKSwgZHJhZ09wZXJhdGlvbk1hc2ssIFdl
YkNvcmU6OkRyYWdBcHBsaWNhdGlvbk5vbmUsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0
aW5hdGlvbkFjdGlvbj4oZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKSB9OworICAgIGF1dG8gZHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uTWFzayA9IE9wdGlvblNldDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25B
Y3Rpb24+Ojpmcm9tUmF3KGRyYWdEZXN0aW5hdGlvbkFjdGlvbik7CisgICAgcmV0dXJuIHsgc2Vz
c2lvbiwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGNsaWVudCksIFdlYkNvcmU6OnJvdW5kZWRJ
bnRQb2ludChnbG9iYWwpLCBkcmFnT3BlcmF0aW9uTWFzaywgV2ViQ29yZTo6RHJhZ0FwcGxpY2F0
aW9uTm9uZSwgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayB9OwogfQogCiAtICh2b2lkKWNsZWFu
VXBEcmFnU291cmNlU2Vzc2lvblN0YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKaW5kZXggMWE5YTRlOWFj
ZDgwNjYwNGM1Mjc2YjdhMjNhMTI3MWE5OWY0NTA2My4uODFiNzlhNzdjODdlMGFkZTE2NmEwODZm
NDU2NDZhZWJkYjkzYzhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIGNvbnN0IERy
YWdEYXRhJikKIHsKLSAgICBpZiAoYWN0aW9uID09IERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQp
CisgICAgaWYgKGFjdGlvbiA9PSBEcmFnRGVzdGluYXRpb25BY3Rpb246OkxvYWQpCiAgICAgICAg
IG1fcGFnZS0+d2lsbFBlcmZvcm1Mb2FkRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7CiAgICAgZWxz
ZQogICAgICAgICBtX3BhZ2UtPm1heVBlcmZvcm1VcGxvYWREcmFnRGVzdGluYXRpb25BY3Rpb24o
KTsgLy8gVXBsb2FkIGNhbiBoYXBwZW4gZnJvbSBhIGRyb3AgZXZlbnQgaGFuZGxlciwgc28gd2Ug
c2hvdWxkIHByZXBhcmUgZWFybHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbQppbmRleCA0Mjc4YjAzNDJmOWExYTBh
YWJhM2U5NDIzNWI2YzgwYTU3MGQ4NjA3Li40YmJlODE3YTE0NzFlY2JjZWM0YjQwOWJkNjI4ZThl
NjUzZDY2YjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJEcmFnQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgV2Vi
SFRNTFZpZXcgKmdldFRvcEhUTUxWaWV3KEZyYW1lKiBmcmFtZSkKIAogdm9pZCBXZWJEcmFnQ2xp
ZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24gYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7
Ci0gICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3
IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOihXZWJEcmFnRGVzdGluYXRpb25BY3Rp
b24pYWN0aW9uIGZvckRyYWdnaW5nSW5mbzpkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKV07CisgICAg
W1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHdpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOnN0YXRpY19jYXN0PFdlYkRyYWdEZXN0aW5hdGlv
bkFjdGlvbj4oYWN0aW9uKSBmb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCld
OwogfQogCiAKQEAgLTIxNCw3ICsyMTQsNyBAQCBib29sIFdlYkRyYWdDbGllbnQ6OnVzZUxlZ2Fj
eURyYWdDbGllbnQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6
OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
Y29uc3QgRHJhZ0RhdGEmKQordm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIGNvbnN0IERyYWdE
YXRhJikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IGZkY2JhNGVmMGE2Y2FjNDc3Y2RjZTlmNDc2YjJlZDU0ZjJjNGVjN2UuLjZkYTkzMWE3
MDBkMWQ2YzA1MWZiNGViMzNkNmNhN2VkNDNiOWJhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5MDgsNyArMTkwOCw3IEBAIC0gKFdlYkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbilkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yU2Vzc2lvbjooaWQg
PFVJRHJvcFNlc3NpCiAtIChXZWJDb3JlOjpEcmFnRGF0YSlkcmFnRGF0YUZvclNlc3Npb246KGlk
IDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIGNsaWVudDooQ0dQb2ludCljbGllbnRQb3NpdGlvbiBn
bG9iYWw6KENHUG9pbnQpZ2xvYmFsUG9zaXRpb24gb3BlcmF0aW9uOih1aW50NjRfdClvcGVyYXRp
b24KIHsKICAgICBhdXRvIGRyYWdPcGVyYXRpb25NYXNrID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RHJhZ09wZXJhdGlvbj4ob3BlcmF0aW9uKTsKLSAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbk1hc2sg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+KFtzZWxmIGRyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JTZXNzaW9uOnNlc3Npb25dKTsKKyAgICBhdXRvIGRyYWdE
ZXN0aW5hdGlvbk1hc2sgPSBPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
Pjo6ZnJvbVJhdyhbc2VsZiBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yU2Vzc2lvbjpzZXNz
aW9uXSk7CiAgICAgcmV0dXJuIHsgc2Vzc2lvbiwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGNs
aWVudFBvc2l0aW9uKSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGdsb2JhbFBvc2l0aW9uKSwg
ZHJhZ09wZXJhdGlvbk1hc2ssIFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbk5vbmUsIGRyYWdEZXN0
aW5hdGlvbk1hc2sgfTsKIH0KIApAQCAtNjcyMCw5ICs2NzIwLDkgQEAgLSAoV2ViQ29yZTo6RHJh
Z0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilk
cmFnZ2luZ0kKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9u
RmxhZ3M+KGZsYWdzKTsKIH0KIAotLSAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFj
dGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZv
CistIChPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPilhY3Rpb25NYXNr
Rm9yRHJhZ2dpbmdJbmZvOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwogewotICAg
IHJldHVybiAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKVtbc2VsZiBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzpzZWxmIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFn
Z2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKKyAgICByZXR1cm4gT3B0aW9uU2V0PFdlYkNvcmU6OkRy
YWdEZXN0aW5hdGlvbkFjdGlvbj46OmZyb21SYXcoW1tzZWxmIF9VSURlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3OnNlbGYgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzpk
cmFnZ2luZ0luZm9dKTsKIH0KIAogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDoo
aWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399923</attachid>
            <date>2020-05-20 18:57:09 -0700</date>
            <delta_ts>2020-05-22 18:19:56 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-212115-20200520185804.patch</filename>
            <type>text/plain</type>
            <size>34724</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZhODhkYWM1MTY1NjlhYjVjNzdhZjZj
YzVlNmNlMmNmZTFlZjBmZmEuLjVkZWM4ZWMxODY5YWQ2ZjA1NWVkYWIxNWUwZjZiN2E4ZTE1OTIz
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDUtMjAgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFj
dGlvbj4gZm9yIG1hc2sgdmFsdWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIx
MTU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9PcHRpb25TZXQuaDoKKyAgICAg
ICAgKFdURjo6T3B0aW9uU2V0OjpPcHRpb25TZXQpOgorICAgICAgICAtIEFsbG93IGFuIGVudW0g
d2l0aCBhbGwgYml0cyBzZXQgdG8gYmUgdXNlZCBhcyBhIHNpbmdsZSBlbnVtCisgICAgICAgICAg
Y29uc3RydWN0b3IgdmFsdWUuCisKIDIwMjAtMDUtMTkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFB1dCBQdHJUYWdMb29rdXAgZGF0YSBzdHJ1Y3R1cmVzIGluIENv
bmZpZ3MgZm9yIGZyZWV6aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIxZDI3MzkyNzY0OTM5ZDViMzBlMDY5
OTcxODFkNTc3ZWI1MjMxYzYuLjU0MjRiMGU4ZDAwZTM3NDBkMWUyMDEwZmZmOTQwMjAyOTUyODM3
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAyMC0wNS0yMCAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBPcHRpb25TZXQ8RHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uPiBmb3IgbWFzayB2YWx1ZXMKKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIxMjExNT4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNDIzMzgwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyYWdEZXN0aW5hdGlvbkFj
dGlvbiBpcyB1c2VkIGFzIGJvdGggaW5kaXZpZHVhbCB2YWx1ZXMgYW5kIGFzIGEKKyAgICAgICAg
Yml0IG1hc2suIFRoaXMgY2hhbmdlcyBiaXQgbWFzayB1c2VzIHRvIE9wdGlvblNldDw+IGFuZCBy
ZW5hbWVzCisgICAgICAgIHZhcmlhYmxlcyB0byBkZW5vdGUgbWFza3MuCisKKyAgICAgICAgKiBw
YWdlL0RyYWdBY3Rpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rp
b24pOgorICAgICAgICAtIENvbnZlcnQgdG8gZW51bSBjbGFzcy4KKyAgICAgICAgKiBwYWdlL0Ry
YWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpwZXJm
b3JtRHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJh
Z0VudGVyZWRPclVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnRy
eURvY3VtZW50RHJhZyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1
ZGVFZGl0RHJhZyk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5oOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdEZXN0aW5hdGlvbkFjdGlvbiBjb25zdCk6IFJl
bmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrIGNvbnN0KToKKyAgICAgICAgLSBSZW5hbWUgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KCkgdG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzaygpLgorICAgICAgICAqIHBsYXRmb3JtL0Ry
YWdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpEcmFnRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpE
cmFnRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6ZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uIGNvbnN0KTogUmVuYW1lLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2sgY29uc3QpOgorICAgICAgICAtIFJlbmFtZSBkcmFnRGVzdGluYXRp
b25BY3Rpb24oKSB0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCkuCisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6b3BlcmF0b3IgPSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvRHJh
Z0RhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpEcmFnRGF0YSk6CisK
IDIwMjAtMDUtMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBJREJSZXF1ZXN0RGF0YSBhbmQgSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiBzaG91
bGQgaW5pdGlhbGl6ZSBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBmaWVsZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA0ZWUxYTAyNGRkNWZlZGM1ZGRjNzE0YzIzZWE3ZWE5YjZiYjNlNGRmLi5kY2ViZTM5Yzc2YTRk
MGE3NjMyODZmMTkyZjI5ZWZhNGE4OWFlM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisy
MDIwLTA1LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBtYXNrIHZhbHVlcworICAg
ICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNjM0MjMzODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50
Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUpOgorICAgICAgICAtIFN3aXRjaCBmcm9tIGRlY29kZUVu
dW0oKSBhbmQgZW5jb2RlRW51bSgpIHRvIG1vZGVybgorICAgICAgICAgIGVxdWl2YWxlbnRzIHRo
YXQgY2hlY2sgZm9yIHZhbGlkIGVudW0gdmFsdWVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdnaW5n
RW50ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnZ2luZ1VwZGF0ZWQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdEYXRhRm9yRHJvcFNlc3Npb246ZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKwogMjAyMC0wNS0xOSAgUGVyIEFybmUgVm9sbGFu
ICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gRml4IG1lc3NhZ2UgZmlsdGVy
IHNhbmRib3ggdmlvbGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYWEwYWRl
MjFmNWY3YzYyNzMyZTA3NDFiMjdmN2VhOWI2YzVlOTc1My4uMDRmYWY5NGQ1ODUwNWNjNzQyNDQ2
MDAwODUwNzcxYWJlNzg1ZTdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA1LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CisKKyAgICAgICAgVXNlIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBtYXNr
IHZhbHVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjM0MjMzODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tOgorICAg
ICAgICAoV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBkcmFnRGF0
YUZvclNlc3Npb246Y2xpZW50Omdsb2JhbDpvcGVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgYWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzpdKToKKwogMjAyMC0wNS0xOCAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgVGV4dEluZGljYXRv
ck9wdGlvbnMgd2l0aCBPcHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmgK
aW5kZXggNzBjYjllYzFhOGRkYWI3MzNlZDM2NmE3NTBlYTI4YWVkMWYyNTU2MS4uMWNjNDU0MjY3
NDllNzhkMDQ2MTRkOTkzMGMzMjdiMjcxZTZmNGE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvT3B0aW9uU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3
ICs4MSw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGlz
IGFzc2VydGlvbiB3aWxsIGNvbmZsaWN0IHdpdGggdGhlIGNvbnN0ZXhwciBhdHRyaWJ1dGUgaWYg
d2UgZW5hYmxlIGl0IG9uIE5ERUJVRyBidWlsZHMuCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIW1fc3RvcmFnZSB8fCBoYXNPbmVCaXRTZXQobV9zdG9yYWdlKSwgIkVudW1lcmF0b3IgaXMg
bm90IGEgemVybyBvciBhIHBvc2l0aXZlIHBvd2VyIG9mIHR3by4iKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghbV9zdG9yYWdlIHx8IGhhc09uZUJpdFNldChtX3N0b3JhZ2UpIHx8IG1f
c3RvcmFnZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8VD4+
OjptYXgoKSwgIkVudW1lcmF0b3IgaXMgbm90IGEgemVybywgYSBwb3NpdGl2ZSBwb3dlciBvZiB0
d28gb3IgaGFzIGFsbCBiaXRzIHNldC4iKTsKICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQWN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQWN0aW9ucy5oCmluZGV4IGI2Nzc2YmJkNzUzODM2MWM4MTEzMDVmM2Q5OTBkNGI1OTNkMWYw
ODYuLjRjNTM4YjNiOGY5YTc0ZTExNDMyNDcyNmViNDU3Njg2ZjcwOTVkODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0FjdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdBY3Rpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTQgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLy8gV2ViQ29yZURyYWdEZXN0aW5hdGlvbkFjdGlvbiBzaG91bGQgYmUga2VwdCBp
biBzeW5jIHdpdGggV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLgotdHlwZWRlZiBlbnVtIHsKLSAg
ICBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lICAgID0gMCwKLSAgICBEcmFnRGVzdGluYXRpb25B
Y3Rpb25ESFRNTCAgID0gMSwKLSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0ICAgID0gMiwK
LSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkICAgID0gNCwKLSAgICBEcmFnRGVzdGluYXRp
b25BY3Rpb25BbnkgICAgID0gVUlOVF9NQVgKLX0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOworLy8g
V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGgg
V2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFuZCBXS0RyYWdEZXN0aW5hdGlvbkFjdGlvbi4KK2Vu
dW0gY2xhc3MgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIDogdWludDMyX3QgeworICAgIE5vbmUgID0g
MCwKKyAgICBESFRNTCA9IDEsCisgICAgRWRpdCAgPSAyLAorICAgIExvYWQgID0gNCwKKyAgICBB
bnkgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQorfTsKIAogLy8gV2Vi
Q29yZURyYWdTb3VyY2VBY3Rpb24gc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIFdlYkRyYWdT
b3VyY2VBY3Rpb24uCiB0eXBlZGVmIGVudW0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcAppbmRleCA1Y2FjMTgwYmY1N2ZiZDU2ZWRlNTk4NGMwOTg3MzliOTBiZDFkYThlLi5l
M2E4OTAxYTQ4NTBiMmUwMDBkY2ZkMTRmYTM4ZGMyOGNkMWI0NDY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjU1LDggKzI1NSw4IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAg
ICBpZiAobV9kb2N1bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kgPSBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeVRvUHJvcGFnYXRlKCk7CiAKLSAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uICYg
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uREhUTUwpICYmIGRyYWdJc0hhbmRsZWRCeURvY3VtZW50KG1f
ZHJhZ0hhbmRsaW5nTWV0aG9kKSkgewotICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdE
ZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25ESFRNTCwgZHJhZ0RhdGEpOwor
ICAgIGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERyYWdEZXN0aW5h
dGlvbkFjdGlvbjo6REhUTUwpKSAmJiBkcmFnSXNIYW5kbGVkQnlEb2N1bWVudChtX2RyYWdIYW5k
bGluZ01ldGhvZCkpIHsKKyAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpESFRNTCwgZHJhZ0RhdGEpOwogICAgICAg
ICBSZWY8RnJhbWU+IG1haW5GcmFtZShtX3BhZ2UubWFpbkZyYW1lKCkpOwogICAgICAgICBib29s
IHByZXZlbnRlZERlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1haW5GcmFtZS0+dmlldygp
KQpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3Bl
cmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gJiBEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0
KSAmJiBjb25jbHVkZUVkaXREcmFnKGRyYWdEYXRhKSkgeworICAgIGlmICgobV9kcmFnRGVzdGlu
YXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCkpICYm
IGNvbmNsdWRlRWRpdERyYWcoZHJhZ0RhdGEpKSB7CiAgICAgICAgIGNsaWVudCgpLmRpZENvbmNs
dWRlRWRpdERyYWcoKTsKICAgICAgICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBudWxscHRyOwog
ICAgICAgICBjbGVhckRyYWdDYXJldCgpOwpAQCAtMjg1LDcgKzI4NSw3IEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkK
ICAgICBpZiAodXJsU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uTG9hZCwgZHJhZ0RhdGEpOworICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6TG9hZCwgZHJhZ0RhdGEpOwog
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7IG1fcGFnZS5tYWluRnJhbWUo
KSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0gfTsKICAgICBmcmFtZUxvYWRSZXF1ZXN0
LnNldFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koc2hvdWxkT3BlbkV4dGVybmFsVVJMc1Bv
bGljeSk7CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRJc1JlcXVlc3RGcm9tQ2xpZW50T3JVc2Vy
SW5wdXQoKTsKQEAgLTMwOCwxNSArMzA4LDE1IEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xs
ZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAg
ICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9p
bnQoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSkpOwogCi0gICAgbV9kcmFnRGVzdGluYXRpb25B
Y3Rpb24gPSBkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25BY3Rpb24oKTsKLSAgICBpZiAobV9kcmFn
RGVzdGluYXRpb25BY3Rpb24gPT0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSkgeworICAgIG1f
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayA9IGRyYWdEYXRhLmRyYWdEZXN0aW5hdGlvbkFjdGlv
bk1hc2soKTsKKyAgICBpZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmlzRW1wdHkoKSkg
ewogICAgICAgICBjbGVhckRyYWdDYXJldCgpOyAvLyBGSVhNRTogV2h5IG5vdCBjYWxsIG1vdXNl
TW92ZWRJbnRvRG9jdW1lbnQobnVsbHB0cik/CiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9u
Tm9uZTsKICAgICB9CiAKICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24gPSBEcmFnT3Bl
cmF0aW9uTm9uZTsKLSAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IHRyeURvY3VtZW50RHJhZyhk
cmFnRGF0YSwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24sIGRyYWdPcGVyYXRpb24pOwotICAgIGlm
IChtX2RyYWdIYW5kbGluZ01ldGhvZCA9PSBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmUgJiYgKG1f
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCkpIHsKKyAg
ICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IHRyeURvY3VtZW50RHJhZyhkcmFnRGF0YSwgbV9kcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrLCBkcmFnT3BlcmF0aW9uKTsKKyAgICBpZiAobV9kcmFnSGFu
ZGxpbmdNZXRob2QgPT0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lICYmIChtX2RyYWdEZXN0aW5h
dGlvbkFjdGlvbk1hc2suY29udGFpbnMoRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpMb2FkKSkpIHsK
ICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG9wZXJhdGlvbkZvckxvYWQoZHJhZ0RhdGEpOwogICAg
ICAgICBpZiAoZHJhZ09wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkKICAgICAgICAgICAg
IG1fZHJhZ0hhbmRsaW5nTWV0aG9kID0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpQYWdlTG9hZDsKQEAg
LTM4OCw3ICszODgsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjp1cGRhdGVTdXBwb3J0ZWRUeXBl
SWRlbnRpZmllcnNGb3JEcmFnSGFuZGxpbmdNZXRob2QoRHJhZ0hhbgogCiAjZW5kaWYKIAotRHJh
Z0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoY29uc3QgRHJh
Z0RhdGEmIGRyYWdEYXRhLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFzaywgRHJhZ09w
ZXJhdGlvbiYgZHJhZ09wZXJhdGlvbikKK0RyYWdIYW5kbGluZ01ldGhvZCBEcmFnQ29udHJvbGxl
cjo6dHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgT3B0aW9uU2V0PERy
YWdEZXN0aW5hdGlvbkFjdGlvbj4gZGVzdGluYXRpb25BY3Rpb25NYXNrLCBEcmFnT3BlcmF0aW9u
JiBkcmFnT3BlcmF0aW9uKQogewogICAgIGlmICghbV9kb2N1bWVudFVuZGVyTW91c2UpCiAgICAg
ICAgIHJldHVybiBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmU7CkBAIC0zOTcsNyArMzk3LDcgQEAg
RHJhZ0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmEKICAgICAgICAgcmV0dXJuIERyYWdIYW5kbGluZ01ldGhv
ZDo6Tm9uZTsKIAogICAgIGJvb2wgaXNIYW5kbGluZ0RyYWcgPSBmYWxzZTsKLSAgICBpZiAoYWN0
aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRIVE1MKSB7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWN0aW9uTWFzay5jb250YWlucyhEcmFnRGVzdGluYXRpb25BY3Rpb246OkRIVE1MKSkgewog
ICAgICAgICBpc0hhbmRsaW5nRHJhZyA9IHRyeURIVE1MRHJhZyhkcmFnRGF0YSwgZHJhZ09wZXJh
dGlvbik7CiAgICAgICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiBtX2RvY3VtZW50VW5kZXJNb3Vz
ZSBoYXMgYmVlbiByZXNldCBieSB0cnlESFRNTERyYWcuCiAgICAgICAgIC8vIHRyeURIVE1MRHJh
ZyBmaXJlcyBkcmFnZW50ZXIgZXZlbnQuIFRoZSBldmVudCBsaXN0ZW5lciB0aGF0IGxpc3RlbnMK
QEAgLTQyMCw3ICs0MjAsNyBAQCBEcmFnSGFuZGxpbmdNZXRob2QgRHJhZ0NvbnRyb2xsZXI6OnRy
eURvY3VtZW50RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYQogICAgICAgICByZXR1
cm4gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25EZWZhdWx0OwogICAgIH0KIAotICAgIGlmICgoYWN0
aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNhblByb2Nlc3NEcmFnKGRy
YWdEYXRhKSkgeworICAgIGlmIChkZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFpbnMoRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uOjpFZGl0KSAmJiBjYW5Qcm9jZXNzRHJhZyhkcmFnRGF0YSkpIHsKICAg
ICAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zQ29sb3IoKSkgewogICAgICAgICAgICAgZHJhZ09w
ZXJhdGlvbiA9IERyYWdPcGVyYXRpb25HZW5lcmljOwogICAgICAgICAgICAgcmV0dXJuIERyYWdI
YW5kbGluZ01ldGhvZDo6U2V0Q29sb3I7CkBAIC01NjksNyArNTY5LDcgQEAgYm9vbCBEcmFnQ29u
dHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJpYWxpemVk
KCksIGZhbHNlKTsKICAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURy
YWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7
CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdE
ZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5lckZyYW1lLT5l
ZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRDb2xvcik7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYwNSw3ICs2MDUsNyBAQCBib29sIERyYWdD
b250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAg
ICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFn
bWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpE
cm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBjbGllbnQoKS53
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0
LCBkcmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogCiAgICAgICAg
IGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERy
b3AoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNjMxLDcgKzYzMSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICBpZiAo
dGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxp
dmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsK
KyAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGF1dG8gZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KTsK
ICAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1U
d29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlzTW92
ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuaAppbmRleCAxY2Y2NjUyZmQxOGQwOTAxZTJhZTMxMTQ1ZTk1ZWVkNGExNWRiMzc1Li44ODA2
OTU3MmJkNGYwMzE1NWE5ODIxNWVjNGFmODEwMzZhYjhiMjcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEcmFnSW1hZ2Uu
aCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwog
ICAgICAgICBEcmFnSGFuZGxpbmdNZXRob2QgZHJhZ0hhbmRsaW5nTWV0aG9kKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmFnSGFuZGxpbmdNZXRob2Q7IH0KIAogICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnRVbmRlck1vdXNlKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UuZ2V0KCk7
IH0KLSAgICAgICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRyYWdEZXN0aW5hdGlvbkFjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOyB9CisgICAgICAgIE9wdGlv
blNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKSBj
b25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7IH0KICAgICAgICAgRHJh
Z1NvdXJjZUFjdGlvbiBkZWxlZ2F0ZURyYWdTb3VyY2VBY3Rpb24oY29uc3QgSW50UG9pbnQmIHJv
b3RWaWV3UG9pbnQpOwogICAgICAgICAKICAgICAgICAgRWxlbWVudCogZHJhZ2dhYmxlRWxlbWVu
dChjb25zdCBGcmFtZSosIEVsZW1lbnQqIHN0YXJ0LCBjb25zdCBJbnRQb2ludCYsIERyYWdTdGF0
ZSYpIGNvbnN0OwpAQCAtMTA4LDcgKzEwOSw3IEBAIHN0cnVjdCBQcm9taXNlZEF0dGFjaG1lbnRJ
bmZvOwogICAgICAgICBib29sIGNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmKTsKICAg
ICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnRW50ZXJlZE9yVXBkYXRlZChjb25zdCBEcmFnRGF0YSYp
OwogICAgICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbkZvckxvYWQoY29uc3QgRHJhZ0RhdGEm
KTsKLSAgICAgICAgRHJhZ0hhbmRsaW5nTWV0aG9kIHRyeURvY3VtZW50RHJhZyhjb25zdCBEcmFn
RGF0YSYsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ09wZXJhdGlvbiYpOworICAgICAgICBE
cmFnSGFuZGxpbmdNZXRob2QgdHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiwgT3B0aW9u
U2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4sIERyYWdPcGVyYXRpb24mKTsKICAgICAgICAgYm9v
bCB0cnlESFRNTERyYWcoY29uc3QgRHJhZ0RhdGEmLCBEcmFnT3BlcmF0aW9uJik7CiAgICAgICAg
IERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihjb25zdCBEcmFnRGF0YSYpOwogICAgICAgICB2
b2lkIGNsZWFyRHJhZ0NhcmV0KCk7CkBAIC0xNDksNyArMTUwLDcgQEAgc3RydWN0IFByb21pc2Vk
QXR0YWNobWVudEluZm87CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZJdGVtc1RvQmVBY2Nl
cHRlZCB7IDAgfTsKICAgICAgICAgRHJhZ0hhbmRsaW5nTWV0aG9kIG1fZHJhZ0hhbmRsaW5nTWV0
aG9kIHsgRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lIH07CiAKLSAgICAgICAgRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIHsgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
Tm9uZSB9OworICAgICAgICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBtX2RyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2s7CiAgICAgICAgIERyYWdTb3VyY2VBY3Rpb24gbV9kcmFnU291
cmNlQWN0aW9uIHsgRHJhZ1NvdXJjZUFjdGlvbk5vbmUgfTsKICAgICAgICAgYm9vbCBtX2RpZElu
aXRpYXRlRHJhZyB7IGZhbHNlIH07CiAgICAgICAgIERyYWdPcGVyYXRpb24gbV9zb3VyY2VEcmFn
T3BlcmF0aW9uIHsgRHJhZ09wZXJhdGlvbk5vbmUgfTsgLy8gU2V0IGluIHN0YXJ0RHJhZyB3aGVu
IGEgZHJhZyBzdGFydHMgZnJvbSBhIG1vdXNlIGRvd24gd2l0aGluIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0RhdGEuY3BwCmluZGV4IGI0MjhjMzczOTNmZWNkNGExYTg4MDU4MGZlZDY4
ZWI5YmNlNGM0YTAuLjhmNjc1NWY1NzYxYTE0NTRlOWI0MDYwMDJlMDg4NDNjNmI3MTg4N2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDIzICszMiwyMyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotRHJhZ0RhdGE6OkRyYWdEYXRh
KERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3Qg
SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1h
c2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVz
dGluYXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29u
c3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxh
Z3MgZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3RpbmF0aW9uQWN0
aW9uTWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24pCiAgICAgLCBt
X2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0Zm9ybURyYWdEYXRh
KGRhdGEpCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3VyY2VPcGVyYXRp
b25NYXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQotICAgICwgbV9kcmFnRGVz
dGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCisgICAgLCBtX2RyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25NYXNrKQogeyAgCiB9CiAKLURyYWdEYXRhOjpE
cmFnRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNv
bnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRp
b25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGRlc3RpbmF0aW9uQWN0aW9uKQorRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0
aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZs
YWdzIGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkZXN0aW5hdGlvbkFj
dGlvbk1hc2spCiAgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwg
bV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0
YSgwKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9u
TWFzaykKICAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAsIG1fZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9kcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKIHsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggZTkzMDk1ZmM3YjJhMGIxMzZkNDY2MTZkMDIyMGNjZWJh
Mzk5YTAzNC4uNmE2ZDgzYjU4YjJhNjJhYWZkNjZiMTYxZmJhYWU1N2FlMDA3YWEwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC03NCwxMSArNzUsMTEgQEAgcHVibGlj
OgogICAgIGVudW0gY2xhc3MgRHJhZ2dpbmdQdXJwb3NlIHsgRm9yRWRpdGluZywgRm9yRmlsZVVw
bG9hZCwgRm9yQ29sb3JDb250cm9sIH07CiAKICAgICAvLyBjbGllbnRQb3NpdGlvbiBpcyB0YWtl
biB0byBiZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRyYWcgZXZlbnQgd2l0aGluIHRoZSB0YXJnZXQg
d2luZG93LCB3aXRoICgwLDApIGF0IHRoZSB0b3AgbGVmdAotICAgIFdFQkNPUkVfRVhQT1JUIERy
YWdEYXRhKERyYWdEYXRhUmVmLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0
IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiwgRHJhZ0FwcGxpY2F0aW9u
RmxhZ3MgPSBEcmFnQXBwbGljYXRpb25Ob25lLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9u
cyA9IERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhZ0Rh
dGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQ
b3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uLCBE
cmFnQXBwbGljYXRpb25GbGFncyA9IERyYWdBcHBsaWNhdGlvbk5vbmUsIERyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb25zID0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBEcmFnRGF0YShEcmFnRGF0YVJlZiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdB
cHBsaWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uTm9uZSwgT3B0aW9uU2V0PERyYWdEZXN0
aW5hdGlvbkFjdGlvbj4gYWN0aW9uTWFzayA9IERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6QW55KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBEcmFnRGF0YShjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFt
ZSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxp
Y2F0aW9uTm9uZSwgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gYWN0aW9uTWFzayA9
IERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6QW55KTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHNo
b3VsZCB1c2VkIG9ubHkgYnkgV2ViS2l0MiBJUEMgYmVjYXVzZSBEcmFnRGF0YQogICAgIC8vIGlz
IGluaXRpYWxpemVkIGJ5IHRoZSBkZWNvZGVyIGFuZCBub3QgaW4gdGhlIGNvbnN0cnVjdG9yLgot
ICAgIERyYWdEYXRhKCkgeyB9CisgICAgRHJhZ0RhdGEoKSA9IGRlZmF1bHQ7CiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIFdFQkNPUkVfRVhQT1JUIERyYWdEYXRhKGNvbnN0IERyYWdEYXRhTWFwJiwg
Y29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9z
aXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9u
RmxhZ3MgPSBEcmFnQXBwbGljYXRpb25Ob25lKTsKICAgICBjb25zdCBEcmFnRGF0YU1hcCYgZHJh
Z0RhdGFNYXAoKTsKQEAgLTEwMSw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlu
c0NvbG9yKCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0ZpbGVzKCkgY29uc3Q7CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZGaWxlcygpIGNvbnN0OwotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBk
cmFnRGVzdGluYXRpb25BY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlvbkFj
dGlvbjsgfQorICAgIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5h
dGlvbkFjdGlvbk1hc2soKSBjb25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1h
c2s7IH0KICAgICB2b2lkIHNldEZpbGVOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZmlsZU5hbWVzKSB7
IG1fZmlsZU5hbWVzID0gV1RGTW92ZShmaWxlTmFtZXMpOyB9CiAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWVzOyB9CiAjaWYgUExB
VEZPUk0oQ09DT0EpCkBAIC0xMTksNyArMTIwLDcgQEAgcHVibGljOgogICAgICAgICBtX3BsYXRm
b3JtRHJhZ0RhdGEgPSBkYXRhLm1fcGxhdGZvcm1EcmFnRGF0YTsKICAgICAgICAgbV9kcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2sgPSBkYXRhLm1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNr
OwogICAgICAgICBtX2FwcGxpY2F0aW9uRmxhZ3MgPSBkYXRhLm1fYXBwbGljYXRpb25GbGFnczsK
LSAgICAgICAgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24gPSBkYXRhLm1fZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uOworICAgICAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBkYXRhLm1fZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTWFzazsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICNl
bmRpZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgRHJhZ09wZXJhdGlvbiBtX2Ry
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFzazsKICAgICBEcmFnQXBwbGljYXRpb25GbGFncyBtX2Fw
cGxpY2F0aW9uRmxhZ3M7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9maWxlTmFtZXM7Ci0gICAgRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOworICAgIE9wdGlvblNl
dDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzazsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICBTdHJpbmcgbV9wYXN0ZWJvYXJkTmFtZTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0RhdGFDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0KaW5kZXgg
YTM2ZjRjZDBlOTc4OWI1NWIwMTgzMmZiMTljMTAwNjFhN2IxMThjZC4uOWNjYWZjMGNkN2E4MzZl
NmM5MWUxZjIzM2UxODkwYjMzOGE0ZDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvRHJhZ0RhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9EcmFnRGF0YUNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiwxMyArMTE2LDEzIEBAIHN0YXRpYyBp
bmxpbmUgU3RyaW5nIHRpZmZQYXN0ZWJvYXJkVHlwZSgpCiAjZW5kaWYKIH0KIAotRHJhZ0RhdGE6
OkRyYWdEYXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlv
biwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9w
ZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25B
Y3Rpb24gZGVzdGluYXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYg
ZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xv
YmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxp
Y2F0aW9uRmxhZ3MgZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3Rp
bmF0aW9uQWN0aW9uTWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24p
CiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0Zm9y
bURyYWdEYXRhKGRhdGEpCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3Vy
Y2VPcGVyYXRpb25NYXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQotICAgICwg
bV9kcmFnRGVzdGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCisgICAgLCBtX2RyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25NYXNrKQogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAsIG1fcGFzdGVib2FyZE5hbWUoW1ttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dp
bmdQYXN0ZWJvYXJkXSBuYW1lXSkKICNlbHNlCkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBEcmFnRGF0
YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uLCBjb25zdCBJbnRQbwogewogfQogCi1EcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5n
JiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3Qg
SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1h
c2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVz
dGluYXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdB
cHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBk
ZXN0aW5hdGlvbkFjdGlvbk1hc2spCiAgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0
aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKICAgICAsIG1fcGxh
dGZvcm1EcmFnRGF0YSgwKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291
cmNlT3BlcmF0aW9uTWFzaykKICAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAs
IG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9kcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKICAgICAsIG1fcGFz
dGVib2FyZE5hbWUoZHJhZ1N0b3JhZ2VOYW1lKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggZDllYmIxYjIzZmQzYTE4OGYyYTgw
NWI5NzU0MzE0ZjA4YTBiYjY3NS4uYzI5NzZmZGFjYjYyYWQ4ZWY2NDI2MGE0OGU5NGY3MDM1ZTQ0
YjNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCkBAIC0xNjE1LDcgKzE2MTUsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGVu
Y29kZXIgPDwgZHJhZ0RhdGEucGFzdGVib2FyZE5hbWUoKTsKICAgICBlbmNvZGVyIDw8IGRyYWdE
YXRhLmZpbGVOYW1lcygpOwogI2VuZGlmCi0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKGRyYWdEYXRh
LmRyYWdEZXN0aW5hdGlvbkFjdGlvbigpKTsKKyAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLmRyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2soKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRh
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIERyYWdEYXRhJiBkcmFnRGF0YSkKQEAgLTE2NDYs
MTEgKzE2NDYsMTEgQEAgYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmCiAKLSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rpb247Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oZGVzdGluYXRpb25BY3Rpb24pKQorICAgIE9wdGlv
blNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZHJhZ0RhdGEgPSBEcmFnRGF0YShwYXN0ZWJvYXJkTmFt
ZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2ssIGFwcGxpY2F0aW9uRmxhZ3MsIGRlc3RpbmF0aW9uQWN0aW9uKTsKKyAgICBkcmFnRGF0
YSA9IERyYWdEYXRhKHBhc3RlYm9hcmROYW1lLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRp
b24sIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgYXBwbGljYXRpb25GbGFncywgZHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uTWFzayk7CiAgICAgZHJhZ0RhdGEuc2V0RmlsZU5hbWVzKGZpbGVOYW1l
cyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW0KaW5kZXggMWQ2M2JjMDUxMjYyYWE3Nzg1YzdlZWQ5MzYwMzU1MjdkNjg4
MWE4Mi4uNjVkMDBlZjgwOThkY2M2OGNhMGIzNDU0ZjYzZTcwNDAyMzZmM2FiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTQyLDggKzM5
NDIsOCBAQCBOU0RyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdnaW5nRW50ZXJlZChpZCA8
TlNEcmFnZ2luZ0luZm8+IGRyYWdnaW5nSW5mbykKIHsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBj
bGllbnQoW21fdmlldyBjb252ZXJ0UG9pbnQ6ZHJhZ2dpbmdJbmZvLmRyYWdnaW5nTG9jYXRpb24g
ZnJvbVZpZXc6bmlsXSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsKFdlYkNvcmU6Omds
b2JhbFBvaW50KGRyYWdnaW5nSW5mby5kcmFnZ2luZ0xvY2F0aW9uLCBbbV92aWV3IHdpbmRvd10p
KTsKLSAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj4oW21fdmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlv
bkZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dKTsKLSAgICBXZWJDb3JlOjpEcmFnRGF0YSBk
cmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpEcmFnT3BlcmF0aW9uPihkcmFnZ2luZ0luZm8uZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNr
KSwgYXBwbGljYXRpb25GbGFnc0ZvckRyYWcobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpLCBkcmFn
Z2luZ0luZm8pLCBkcmFnRGVzdGluYXRpb25BY3Rpb24pOworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uTWFzayA9IE9wdGlvblNldDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+
Ojpmcm9tUmF3KFttX3ZpZXcgX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0lu
Zm86ZHJhZ2dpbmdJbmZvXSk7CisgICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dp
bmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlv
bj4oZHJhZ2dpbmdJbmZvLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0aW9u
RmxhZ3NGb3JEcmFnKG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTWFzayk7CiAKICAgICBtX3BhZ2UtPnJlc2V0Q3VycmVudERyYWdJ
bmZvcm1hdGlvbigpOwogICAgIG1fcGFnZS0+ZHJhZ0VudGVyZWQoZHJhZ0RhdGEsIGRyYWdnaW5n
SW5mby5kcmFnZ2luZ1Bhc3RlYm9hcmQubmFtZSk7CkBAIC0zOTU1LDggKzM5NTUsOCBAQCBOU0Ry
YWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdnaW5nVXBkYXRlZChpZCA8TlNEcmFnZ2luZ0lu
Zm8+IGRyYWdnaW5nSW5mbykKIHsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnQoW21fdmll
dyBjb252ZXJ0UG9pbnQ6ZHJhZ2dpbmdJbmZvLmRyYWdnaW5nTG9jYXRpb24gZnJvbVZpZXc6bmls
XSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsKFdlYkNvcmU6Omdsb2JhbFBvaW50KGRy
YWdnaW5nSW5mby5kcmFnZ2luZ0xvY2F0aW9uLCBbbV92aWV3IHdpbmRvd10pKTsKLSAgICBhdXRv
IGRyYWdEZXN0aW5hdGlvbkFjdGlvbiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbj4oW21fdmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5n
SW5mbzpkcmFnZ2luZ0luZm9dKTsKLSAgICBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YShkcmFn
Z2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0
aW9uPihkcmFnZ2luZ0luZm8uZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKSwgYXBwbGljYXRp
b25GbGFnc0ZvckRyYWcobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpLCBkcmFnZ2luZ0luZm8pLCBk
cmFnRGVzdGluYXRpb25BY3Rpb24pOworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFz
ayA9IE9wdGlvblNldDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9tUmF3KFtt
X3ZpZXcgX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJ
bmZvXSk7CisgICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGll
bnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oZHJhZ2dpbmdJ
bmZvLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFn
KG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uTWFzayk7CiAgICAgbV9wYWdlLT5kcmFnVXBkYXRlZChkcmFnRGF0YSwgZHJhZ2dpbmdJ
bmZvLmRyYWdnaW5nUGFzdGVib2FyZC5uYW1lKTsKIAogICAgIE5TSW50ZWdlciBudW1iZXJPZlZh
bGlkSXRlbXNGb3JEcm9wID0gbV9wYWdlLT5jdXJyZW50RHJhZ051bWJlck9mRmlsZXNUb0JlQWNj
ZXB0ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDg1ZTZlNmE0NGMwOTUyNGNjOTUxODhjYTkzOTY4
NTBiY2NlMWZkMDMuLjBlMDBmNDU1MjUxZDc4YWQ0YTljNDRkNDczZTAyYjdmMTg4Yzg1NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTczMDUsNyArNzMwNSw4IEBAIC0gKFdlYkNvcmU6OkRyYWdEYXRh
KWRyYWdEYXRhRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIGRyYWdE
ZXN0CiAgICAgW3NlbGYgY29tcHV0ZUNsaWVudEFuZEdsb2JhbFBvaW50c0ZvckRyb3BTZXNzaW9u
OnNlc3Npb24gb3V0Q2xpZW50UG9pbnQ6JmNsaWVudCBvdXRHbG9iYWxQb2ludDomZ2xvYmFsXTsK
IAogICAgIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbk1hc2sgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihzZXNzaW9uLmFsbG93c01vdmVPcGVyYXRpb24g
PyBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uRXZlcnkgOiAoV2ViQ29yZTo6RHJhZ09wZXJhdGlvbkV2
ZXJ5ICYgfldlYkNvcmU6OkRyYWdPcGVyYXRpb25Nb3ZlKSk7Ci0gICAgcmV0dXJuIHsgc2Vzc2lv
biwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGNsaWVudCksIFdlYkNvcmU6OnJvdW5kZWRJbnRQ
b2ludChnbG9iYWwpLCBkcmFnT3BlcmF0aW9uTWFzaywgV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9u
Tm9uZSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPihkcmFnRGVz
dGluYXRpb25BY3Rpb24pIH07CisgICAgYXV0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrID0g
T3B0aW9uU2V0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmZyb21SYXcoZHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKTsKKyAgICByZXR1cm4geyBzZXNzaW9uLCBXZWJDb3JlOjpyb3VuZGVk
SW50UG9pbnQoY2xpZW50KSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGdsb2JhbCksIGRyYWdP
cGVyYXRpb25NYXNrLCBXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25Ob25lLCBkcmFnRGVzdGluYXRp
b25BY3Rpb25NYXNrIH07CiB9CiAKIC0gKHZvaWQpY2xlYW5VcERyYWdTb3VyY2VTZXNzaW9uU3Rh
dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJEcmFnQ2xpZW50LmNwcAppbmRleCAxYTlhNGU5YWNkODA2NjA0YzUyNzZiN2EyM2ExMjcx
YTk5ZjQ1MDYzLi44MWI3OWE3N2M4N2UwYWRlMTY2YTA4NmY0NTY0NmFlYmRiOTNjOGIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IHZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgY29uc3QgRHJhZ0RhdGEmKQogewotICAgIGlmIChh
Y3Rpb24gPT0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCkKKyAgICBpZiAoYWN0aW9uID09IERy
YWdEZXN0aW5hdGlvbkFjdGlvbjo6TG9hZCkKICAgICAgICAgbV9wYWdlLT53aWxsUGVyZm9ybUxv
YWREcmFnRGVzdGluYXRpb25BY3Rpb24oKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGFnZS0+bWF5
UGVyZm9ybVVwbG9hZERyYWdEZXN0aW5hdGlvbkFjdGlvbigpOyAvLyBVcGxvYWQgY2FuIGhhcHBl
biBmcm9tIGEgZHJvcCBldmVudCBoYW5kbGVyLCBzbyB3ZSBzaG91bGQgcHJlcGFyZSBlYXJseS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRy
YWdDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJE
cmFnQ2xpZW50Lm1tCmluZGV4IDQyNzhiMDM0MmY5YTFhMGFhYmEzZTk0MjM1YjZjODBhNTcwZDg2
MDcuLjRiYmU4MTdhMTQ3MWVjYmNlYzRiNDA5YmQ2MjhlOGU2NTNkNjZiMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqZ2V0VG9wSFRNTFZp
ZXcoRnJhbWUqIGZyYW1lKQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIGNv
bnN0IFdlYkNvcmU6OkRyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBbW21fd2ViVmlldyBfVUlE
ZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb246KFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbilhY3Rpb24gZm9yRHJhZ2dpbmdJ
bmZvOmRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25B
Y3Rpb246c3RhdGljX2Nhc3Q8V2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPihhY3Rpb24pIGZvckRy
YWdnaW5nSW5mbzpkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKV07CiB9CiAKIApAQCAtMjE0LDcgKzIx
NCw3IEBAIGJvb2wgV2ViRHJhZ0NsaWVudDo6dXNlTGVnYWN5RHJhZ0NsaWVudCgpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBjb25zdCBEcmFnRGF0YSYpCit2b2lk
IFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6
OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgY29uc3QgRHJhZ0RhdGEmKQogewogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggZmRjYmE0ZWYwYTZjYWM0
NzdjZGNlOWY0NzZiMmVkNTRmMmM0ZWM3ZS4uNmRhOTMxYTcwMGQxZDZjMDUxZmI0ZWIzM2Q2Y2E3
ZWQ0M2I5YmFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQpAQCAtMTkwOCw3ICsxOTA4LDcgQEAgLSAoV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWRyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2kKIC0gKFdlYkNv
cmU6OkRyYWdEYXRhKWRyYWdEYXRhRm9yU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Np
b24gY2xpZW50OihDR1BvaW50KWNsaWVudFBvc2l0aW9uIGdsb2JhbDooQ0dQb2ludClnbG9iYWxQ
b3NpdGlvbiBvcGVyYXRpb246KHVpbnQ2NF90KW9wZXJhdGlvbgogewogICAgIGF1dG8gZHJhZ09w
ZXJhdGlvbk1hc2sgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihvcGVyYXRp
b24pOwotICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uTWFzayA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj4oW3NlbGYgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFza0Zv
clNlc3Npb246c2Vzc2lvbl0pOworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uTWFzayA9IE9wdGlv
blNldDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9tUmF3KFtzZWxmIGRyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JTZXNzaW9uOnNlc3Npb25dKTsKICAgICByZXR1cm4geyBz
ZXNzaW9uLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoY2xpZW50UG9zaXRpb24pLCBXZWJDb3Jl
Ojpyb3VuZGVkSW50UG9pbnQoZ2xvYmFsUG9zaXRpb24pLCBkcmFnT3BlcmF0aW9uTWFzaywgV2Vi
Q29yZTo6RHJhZ0FwcGxpY2F0aW9uTm9uZSwgZHJhZ0Rlc3RpbmF0aW9uTWFzayB9OwogfQogCkBA
IC02NzIwLDkgKzY3MjAsOSBAQCAtIChXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncylhcHBs
aWNhdGlvbkZsYWdzOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpOwogfQogCi0t
IChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24pYWN0aW9uTWFza0ZvckRyYWdnaW5nSW5m
bzooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KKy0gKE9wdGlvblNldDxXZWJDb3Jl
OjpEcmFnRGVzdGluYXRpb25BY3Rpb24+KWFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86KGlkIDxO
U0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCiB7Ci0gICAgcmV0dXJuIChXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24pW1tzZWxmIF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnNl
bGYgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9d
OworICAgIHJldHVybiBPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6
ZnJvbVJhdyhbW3NlbGYgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBkcmFnRGVz
dGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOwogfQogCiAt
IChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdFbnRlcmVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRy
YWdnaW5nSW5mbwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400097</attachid>
            <date>2020-05-22 18:19:58 -0700</date>
            <delta_ts>2020-05-23 07:26:27 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-212115-20200522182105.patch</filename>
            <type>text/plain</type>
            <size>42294</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY2MTU5NjYyMTgzOTljMTc5NTZhMTcx
NTQzOGRmZWE3ZDM5OWRmNDYuLjg1ODIyZTEyMzZhYTYwMzVhM2Q5OTExMjRmNTY2NjI4ZDk3Yzc0
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjAtMDUtMjIgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFj
dGlvbj4gZm9yIG1hc2sgdmFsdWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIx
MTU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgT3B0aW9uU2V0VHJhaXRzPD4gKHNp
bWlsYXIgdG8gRW51bVRyYWl0czw+KSB0byBkZWZpbmUgYWxsCisgICAgICAgIHZhbGlkIHZhbHVl
cyBmb3IgYSBnaXZlbiBlbnVtIHR5cGUuICBUaGlzIGFsbG93cyB1cyB0byBkZWZpbmUKKyAgICAg
ICAgT3B0aW9uU2V0PD46OmFueSgpIHRvIHByb3ZpZGUgYSBiaXRtYXNrIHdpdGggYWxsIHZhbGlk
IGJpdHMgc2V0LAorICAgICAgICB0byB1c2UgdGhhdCBiaXRtYXNrIHdpdGggT3B0aW9uU2V0PD46
OmZyb21SYXcoKSB0byBjbGVhcgorICAgICAgICB1bmRlZmluZWQgYml0cywgYW5kIHRvIHZhbGlk
YXRlIGVudW0gdmFsdWVzIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgT3B0aW9uU2V0PD4gY29uc3Ry
dWN0b3JzLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgZXh0cmEgdmFsaWRhdGlvbiBwb3NzaWJs
ZSB3aXRoIE9wdGlvblNldFRyYWl0czw+CisgICAgICAgIGlzIGVuYWJsZWQgYmFzZWQgb24gdGhl
IGV4aXN0ZW5jZSBvZiB0aGF0IHR5cGUgdXNpbmcgdGhlIG5ldworICAgICAgICBXVEY6OmlzX3R5
cGVfY29tcGxldGVfdjw+IHR5cGUgdHJhaXQuICBPdGhlciBPcHRpb25TZXQ8PiBlbnVtcworICAg
ICAgICBmYWxsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHZhbGlkYXRpb24gY2hlY2tzLiAoVGhlICFt
X3N0b3JhZ2UKKyAgICAgICAgY2hlY2sgaW4gdGhlIE9wdGlvblNldDw+IGNvbnN0cnVjdG9yIHdh
cyByZW1vdmVkIHRvIHJlLWVuZm9yY2UKKyAgICAgICAgdGhhdCA6Ok5vbmUgZW51bXMgZG9uJ3Qg
bmVlZCB0byBiZSBkZWZpbmVkIHdoZW4gdXNlZCB3aXRoCisgICAgICAgIE9wdGlvblNldDw+LikK
KworICAgICAgICBGaW5hbGx5LCB0eXBlbmFtZSA8VD4gaXMgY2hhbmdlZCB0byA8RT4gZm9yIE9w
dGlvblNldDw+IHRvCisgICAgICAgIGVtcGhhc2l6ZSB0aGF0IGl0J3MgYW4gZW51bSB0eXBlbmFt
ZS4KKworICAgICAgICAqIHd0Zi9PcHRpb25TZXQuaDoKKyAgICAgICAgKFdURjo6aXNfdHlwZV9j
b21wbGV0ZV92KTogQWRkLgorICAgICAgICAoV1RGOjpPcHRpb25TZXRUcmFpdHMpOiBBZGQuCisg
ICAgICAgIChXVEY6Ok9wdGlvblNldFZhbHVlcyk6IEFkZC4KKyAgICAgICAgKFdURjo6T3B0aW9u
U2V0VmFsdWVDaGVja2VyKTogQWRkLgorICAgICAgICAoV1RGOjppc1ZhbGlkT3B0aW9uU2V0RW51
bSk6IEFkZC4KKyAgICAgICAgKFdURjo6bWFza1Jhd1ZhbHVlKTogQWRkLgorICAgICAgICAoV1RG
OjpPcHRpb25TZXQ6Okl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpP
cHRpb25TZXQ6OmZyb21SYXcpOgorICAgICAgICAoV1RGOjpPcHRpb25TZXQ6Ok9wdGlvblNldCk6
CisgICAgICAgIChXVEY6Ok9wdGlvblNldDo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RG
OjpPcHRpb25TZXQ8RT46OmFueSk6IEFkZC4KKwogMjAyMC0wNS0yMiAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdURjo6aXNWYWxpZEVudW0oKSBoYXMgYSB0
eXBvIGluIHN0YXRpY19hc3NlcnQgbWFraW5nIGl0IGEgdGF1dG9sb2dpY2FsIGNvbXBhcmlzb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMWQyNzM5Mjc2NDkzOWQ1YjMwZTA2OTk3MTgxZDU3N2ViNTIzMWM2Li4z
YmUzMDBkMjIwNDgyYjQ5YjgyZWY0YmU1MzkyMGIxYmNjOTM1NzJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMjAtMDUtMjIgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZm9yIG1h
c2sgdmFsdWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIxMTU+CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEcmFnRGVzdGluYXRpb25BY3Rpb24gaXMgdXNlZCBhcyBib3Ro
IGluZGl2aWR1YWwgdmFsdWVzIGFuZCBhcyBhCisgICAgICAgIGJpdCBtYXNrLiBUaGlzIGNoYW5n
ZXMgYml0IG1hc2sgdXNlcyB0byBPcHRpb25TZXQ8PiBhbmQgcmVuYW1lcworICAgICAgICB2YXJp
YWJsZXMgdG8gZGVub3RlIG1hc2tzLgorCisgICAgICAgICogcGFnZS9EcmFnQWN0aW9ucy5oOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgLSBDb252
ZXJ0IHRvIGVudW0gY2xhc3MgYW5kIHJlbW92ZSAqTm9uZSBhbmQgKkFueSB2YWx1ZXMuCisgICAg
ICAgIChXVEY6Ok9wdGlvblNldFRyYWl0czxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+
KToKKyAgICAgICAgLSBBZGQgZm9yIHVzZSB3aXRoIE9wdGlvblNldDw+LgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OnBlcmZvcm1EcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
OjpkcmFnRW50ZXJlZE9yVXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxl
cjo6dHJ5RG9jdW1lbnREcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpj
b25jbHVkZUVkaXREcmFnKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGNvbnN0
KTogUmVuYW1lLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdEZXN0aW5h
dGlvbkFjdGlvbk1hc2sgY29uc3QpOgorICAgICAgICAtIFJlbmFtZSBkcmFnRGVzdGluYXRpb25B
Y3Rpb24oKSB0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCkuCisgICAgICAgICogcGxhdGZv
cm0vRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Rh
dGE6OkRyYWdEYXRhKToKKyAgICAgICAgLSBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFj
dGlvbj46OmFueSgpIGluIHBsYWNlIG9mIHJlbW92ZWQKKyAgICAgICAgICBEcmFnRGVzdGluYXRp
b25BY3Rpb25BbnkuCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6ZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uIGNvbnN0KTogUmVuYW1lLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmRyYWdE
ZXN0aW5hdGlvbkFjdGlvbk1hc2sgY29uc3QpOgorICAgICAgICAtIFJlbmFtZSBkcmFnRGVzdGlu
YXRpb25BY3Rpb24oKSB0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCkuCisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6b3BlcmF0b3IgPSk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
RHJhZ0RhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpEcmFnRGF0YSk6
CisKIDIwMjAtMDUtMTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJREJSZXF1ZXN0RGF0YSBhbmQgSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiBz
aG91bGQgaW5pdGlhbGl6ZSBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBmaWVsZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCA0ZWUxYTAyNGRkNWZlZGM1ZGRjNzE0YzIzZWE3ZWE5YjZiYjNlNGRmLi5kY2ViZTM5Yzc2
YTRkMGE3NjMyODZmMTkyZjI5ZWZhNGE4OWFlM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBA
CisyMDIwLTA1LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXNlIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBtYXNrIHZhbHVlcwor
ICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNjM0MjMzODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUpOgorICAgICAgICAtIFN3aXRjaCBmcm9tIGRlY29k
ZUVudW0oKSBhbmQgZW5jb2RlRW51bSgpIHRvIG1vZGVybgorICAgICAgICAgIGVxdWl2YWxlbnRz
IHRoYXQgY2hlY2sgZm9yIHZhbGlkIGVudW0gdmFsdWVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdn
aW5nRW50ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnZ2luZ1VwZGF0
ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdEYXRhRm9yRHJvcFNlc3Npb246ZHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKwogMjAyMC0wNS0xOSAgUGVyIEFybmUgVm9s
bGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gRml4IG1lc3NhZ2UgZmls
dGVyIHNhbmRib3ggdmlvbGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYWEw
YWRlMjFmNWY3YzYyNzMyZTA3NDFiMjdmN2VhOWI2YzVlOTc1My4uMDRmYWY5NGQ1ODUwNWNjNzQy
NDQ2MDAwODUwNzcxYWJlNzg1ZTdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDIwLTA1LTIwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5j
b20+CisKKyAgICAgICAgVXNlIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBt
YXNrIHZhbHVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNjM0MjMzODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tOgor
ICAgICAgICAoV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24p
OgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBkcmFn
RGF0YUZvclNlc3Npb246Y2xpZW50Omdsb2JhbDpvcGVyYXRpb246XSk6CisgICAgICAgICgtW1dl
YlZpZXcgYWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzpdKToKKwogMjAyMC0wNS0xOCAgRGF2aWQg
S2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgVGV4dEluZGlj
YXRvck9wdGlvbnMgd2l0aCBPcHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL09wdGlvblNldC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0
LmgKaW5kZXggNzBjYjllYzFhOGRkYWI3MzNlZDM2NmE3NTBlYTI4YWVkMWYyNTU2MS4uMmU5ZTFm
MDY3NmMzNjk0MTk4MjUzNjcwZGY4OTYyMmMxMzhiNGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvT3B0aW9uU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uU2V0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MywyMSArMzMsOTYgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKKy8vIERldGVjdGluZyBpbiBDKysg
d2hldGhlciBhIHR5cGUgaXMgZGVmaW5lZCwgcGFydCAzOiBTRklOQUUgYW5kIGluY29tcGxldGUg
dHlwZXMKKy8vIDxodHRwczovL2RldmJsb2dzLm1pY3Jvc29mdC5jb20vb2xkbmV3dGhpbmcvMjAx
OTA3MTAtMDAvP3A9MTAyNjc4PgordGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4K
K2NvbnN0ZXhwciBib29sIGlzX3R5cGVfY29tcGxldGVfdiA9IGZhbHNlOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY29uc3RleHByIGJvb2wgaXNfdHlwZV9jb21wbGV0ZV92PFQsIHN0ZDo6dm9p
ZF90PGRlY2x0eXBlKHNpemVvZihUKSk+PiA9IHRydWU7CisKKwordGVtcGxhdGU8dHlwZW5hbWUg
RT4gY2xhc3MgT3B0aW9uU2V0OworCisKKy8vIE9wdGlvblNldFRyYWl0cyBhcmUgbGlrZSBFbnVt
VHJhaXRzLCBidXQgZm9yIHZhbGlkYXRpbmcgT3B0aW9uU2V0IHZhbHVlcy4KK3RlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgT3B0aW9uU2V0VHJhaXRzOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBF
Li4uPiBzdHJ1Y3QgT3B0aW9uU2V0VmFsdWVzOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFPiBzdHJ1Y3QgT3B0aW9uU2V0VmFsdWVDaGVja2VyOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFLCBFIGUsIEUuLi4gZXM+CitzdHJ1Y3QgT3B0aW9uU2V0VmFsdWVDaGVj
a2VyPFQsIE9wdGlvblNldFZhbHVlczxFLCBlLCBlcy4uLj4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFQgYWxsVmFsaWRCaXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihlKSB8IE9wdGlvblNldFZhbHVlQ2hlY2tlcjxULCBPcHRpb25TZXRWYWx1ZXM8RSwgZXMuLi4+
Pjo6YWxsVmFsaWRCaXRzKCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
VmFsaWRPcHRpb25TZXRFbnVtKFQgdCkKKyAgICB7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nh
c3Q8VD4oZSkgPT0gdCkgPyB0cnVlIDogT3B0aW9uU2V0VmFsdWVDaGVja2VyPFQsIE9wdGlvblNl
dFZhbHVlczxFLCBlcy4uLj4+Ojppc1ZhbGlkT3B0aW9uU2V0RW51bSh0KTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFPgorc3RydWN0IE9wdGlvblNldFZhbHVl
Q2hlY2tlcjxULCBPcHRpb25TZXRWYWx1ZXM8RT4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIFQg
YWxsVmFsaWRCaXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc1ZhbGlkT3B0aW9uU2V0RW51bShUKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKKwordGVtcGxhdGU8dHlwZW5hbWUgRSwgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlICYmIGlzX3R5cGVfY29tcGxldGVf
djxPcHRpb25TZXRUcmFpdHM8RT4+PiogPSBudWxscHRyPgorY29uc3RleHByIGJvb2wgaXNWYWxp
ZE9wdGlvblNldEVudW0oRSBlKQoreworICAgIHJldHVybiBPcHRpb25TZXRWYWx1ZUNoZWNrZXI8
c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFPiwgdHlwZW5hbWUgT3B0aW9uU2V0VHJhaXRzPEU+Ojp2
YWx1ZXM+Ojppc1ZhbGlkT3B0aW9uU2V0RW51bShzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdf
dHlwZV90PEU+PihlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZSAmJiAhaXNfdHlwZV9jb21wbGV0ZV92PE9wdGlvblNl
dFRyYWl0czxFPj4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgYm9vbCBpc1ZhbGlkT3B0aW9uU2V0
RW51bShFIGUpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIGFsbCBPcHRpb25TZXQ8PiBl
bnVtcyBoYXZlIE9wdGlvblNldFRyYWl0czw+IGRlZmluZWQuCisgICAgcmV0dXJuIGhhc09uZUJp
dFNldChzdGF0aWNfY2FzdDx0eXBlbmFtZSBPcHRpb25TZXQ8RT46OlN0b3JhZ2VUeXBlPihlKSk7
Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Vu
dW08RT46OnZhbHVlICYmIGlzX3R5cGVfY29tcGxldGVfdjxPcHRpb25TZXRUcmFpdHM8RT4+Piog
PSBudWxscHRyPgorY29uc3RleHByIHR5cGVuYW1lIE9wdGlvblNldDxFPjo6U3RvcmFnZVR5cGUg
bWFza1Jhd1ZhbHVlKHR5cGVuYW1lIE9wdGlvblNldDxFPjo6U3RvcmFnZVR5cGUgcmF3VmFsdWUp
Cit7CisgICAgYXV0byBhbGxWYWxpZEJpdHNWYWx1ZSA9IE9wdGlvblNldFZhbHVlQ2hlY2tlcjxz
dGQ6OnVuZGVybHlpbmdfdHlwZV90PEU+LCB0eXBlbmFtZSBPcHRpb25TZXRUcmFpdHM8RT46OnZh
bHVlcz46OmFsbFZhbGlkQml0cygpOworICAgIHJldHVybiByYXdWYWx1ZSAmIGFsbFZhbGlkQml0
c1ZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfZW51bTxFPjo6dmFsdWUgJiYgIWlzX3R5cGVfY29tcGxldGVfdjxPcHRpb25TZXRUcmFpdHM8
RT4+PiogPSBudWxscHRyPgorY29uc3RleHByIHR5cGVuYW1lIE9wdGlvblNldDxFPjo6U3RvcmFn
ZVR5cGUgbWFza1Jhd1ZhbHVlKHR5cGVuYW1lIE9wdGlvblNldDxFPjo6U3RvcmFnZVR5cGUgcmF3
VmFsdWUpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIGFsbCBPcHRpb25TZXQ8PiBlbnVt
cyBoYXZlIE9wdGlvblNldFRyYWl0czw+IGRlZmluZWQuCisgICAgcmV0dXJuIHJhd1ZhbHVlOwor
fQorCisKIC8vIE9wdGlvblNldCBpcyBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHNldCBvZiBl
bnVtZXJhdG9ycyBpbiBhIHNwYWNlLWVmZmljaWVudCBtYW5uZXIuIFRoZSBlbnVtZXJhdG9ycwog
Ly8gbXVzdCBiZSBwb3dlcnMgb2YgdHdvIGdyZWF0ZXIgdGhhbiAwLiBUaGlzIGNsYXNzIGlzIHVz
ZWZ1bCBhcyBhIHJlcGxhY2VtZW50IGZvciBwYXNzaW5nIGEgYml0bWFzayBvZgogLy8gZW51bWVy
YXRvcnMgYXJvdW5kLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgT3B0aW9uU2V0IHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEU+IGNsYXNzIE9wdGlvblNldCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2VudW08VD46OnZhbHVlLCAiVCBp
cyBub3QgYW4gZW51bSB0eXBlIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2VudW08RT46
OnZhbHVlLCAiVCBpcyBub3QgYW4gZW51bSB0eXBlIik7CiAKIHB1YmxpYzoKLSAgICB1c2luZyBT
dG9yYWdlVHlwZSA9IHN0ZDo6bWFrZV91bnNpZ25lZF90PHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8
VD4+OworICAgIHVzaW5nIFN0b3JhZ2VUeXBlID0gc3RkOjptYWtlX3Vuc2lnbmVkX3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGVfdDxFPj47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlVHlw
ZT4gY2xhc3MgSXRlcmF0b3IgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIC8vIElzb2xhdGUgdGhlIHJpZ2h0bW9zdCBzZXQgYml0LgotICAg
ICAgICBUIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1fdmFsdWUg
JiAtbV92YWx1ZSk7IH0KKyAgICAgICAgRSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxFPihtX3ZhbHVlICYgLW1fdmFsdWUpOyB9CiAKICAgICAgICAgLy8gSXRlcmF0ZXMg
ZnJvbSBzbWFsbGVzdCB0byBsYXJnZXN0IGVudW0gdmFsdWUgYnkgdHVybmluZyBvZmYgdGhlIHJp
Z2h0bW9zdCBzZXQgYml0LgogICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCkBAIC02OSwy
OSArMTQ0LDI1IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHVzaW5nIGl0ZXJhdG9yID0gSXRlcmF0
b3I8U3RvcmFnZVR5cGU+OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQgZnJvbVJh
dyhTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKKyAgICBzdGF0aWMgY29uc3RleHByIE9wdGlvblNl
dCBhbnkoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgT3B0aW9uU2V0IGZyb21SYXcoU3RvcmFn
ZVR5cGUgcmF3VmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gT3B0aW9uU2V0KHN0YXRpY19j
YXN0PFQ+KHN0b3JhZ2VUeXBlKSwgRnJvbVJhd1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIE9wdGlv
blNldChzdGF0aWNfY2FzdDxFPihtYXNrUmF3VmFsdWU8RT4ocmF3VmFsdWUpKSwgRnJvbVJhd1Zh
bHVlKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgT3B0aW9uU2V0KCkgPSBkZWZhdWx0OwogCi0g
ICAgY29uc3RleHByIE9wdGlvblNldChUIHQpCi0gICAgICAgIDogbV9zdG9yYWdlKHN0YXRpY19j
YXN0PFN0b3JhZ2VUeXBlPih0KSkKKyAgICBjb25zdGV4cHIgT3B0aW9uU2V0KEUgZSkKKyAgICAg
ICAgOiBtX3N0b3JhZ2Uoc3RhdGljX2Nhc3Q8U3RvcmFnZVR5cGU+KGUpKQogICAgIHsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIHdpbGwgY29uZmxpY3Qgd2l0aCB0
aGUgY29uc3RleHByIGF0dHJpYnV0ZSBpZiB3ZSBlbmFibGUgaXQgb24gTkRFQlVHIGJ1aWxkcy4K
LSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9zdG9yYWdlIHx8IGhhc09uZUJpdFNldCht
X3N0b3JhZ2UpLCAiRW51bWVyYXRvciBpcyBub3QgYSB6ZXJvIG9yIGEgcG9zaXRpdmUgcG93ZXIg
b2YgdHdvLiIpOwotI2VuZGlmCisgICAgICAgIEFTU0VSVChpc1ZhbGlkT3B0aW9uU2V0RW51bShl
KSk7CiAgICAgfQogCi0gICAgY29uc3RleHByIE9wdGlvblNldChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VD4gaW5pdGlhbGl6ZXJMaXN0KQorICAgIGNvbnN0ZXhwciBPcHRpb25TZXQoc3RkOjppbml0
aWFsaXplcl9saXN0PEU+IGluaXRpYWxpemVyTGlzdCkKICAgICB7CiAgICAgICAgIGZvciAoYXV0
byYgb3B0aW9uIDogaW5pdGlhbGl6ZXJMaXN0KSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAg
ICAgLy8gVGhpcyBhc3NlcnRpb24gd2lsbCBjb25mbGljdCB3aXRoIHRoZSBjb25zdGV4cHIgYXR0
cmlidXRlIGlmIHdlIGVuYWJsZSBpdCBvbiBOREVCVUcgYnVpbGRzLgotICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShoYXNPbmVCaXRTZXQoc3RhdGljX2Nhc3Q8U3RvcmFnZVR5cGU+KG9w
dGlvbikpLCAiRW51bWVyYXRvciBpcyBub3QgYSBwb3NpdGl2ZSBwb3dlciBvZiB0d28uIik7Ci0j
ZW5kaWYKKyAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT3B0aW9uU2V0RW51bShvcHRpb24pKTsK
ICAgICAgICAgICAgIG1fc3RvcmFnZSB8PSBzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4ob3B0aW9u
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNSw3ICsxNzYsNyBAQCBwdWJsaWM6CiAKICAgICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICFpc0VtcHR5KCk7IH0K
IAotICAgIGNvbnN0ZXhwciBib29sIGNvbnRhaW5zKFQgb3B0aW9uKSBjb25zdAorICAgIGNvbnN0
ZXhwciBib29sIGNvbnRhaW5zKEUgb3B0aW9uKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IGNvbnRhaW5zQW55KG9wdGlvbik7CiAgICAgfQpAQCAtMTYyLDEzICsyMzMsMTkgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIGVudW0gSW5pdGlhbGl6YXRpb25UYWcgeyBGcm9tUmF3VmFsdWUg
fTsKLSAgICBjb25zdGV4cHIgT3B0aW9uU2V0KFQgdCwgSW5pdGlhbGl6YXRpb25UYWcpCi0gICAg
ICAgIDogbV9zdG9yYWdlKHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPih0KSkKKyAgICBjb25zdGV4
cHIgT3B0aW9uU2V0KEUgZSwgSW5pdGlhbGl6YXRpb25UYWcpCisgICAgICAgIDogbV9zdG9yYWdl
KHN0YXRpY19jYXN0PFN0b3JhZ2VUeXBlPihlKSkKICAgICB7CiAgICAgfQogICAgIFN0b3JhZ2VU
eXBlIG1fc3RvcmFnZSB7IDAgfTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEU+Citjb25zdGV4
cHIgT3B0aW9uU2V0PEU+IE9wdGlvblNldDxFPjo6YW55KCkKK3sKKyAgICByZXR1cm4gZnJvbVJh
dyhPcHRpb25TZXRWYWx1ZUNoZWNrZXI8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxFPiwgdHlwZW5h
bWUgT3B0aW9uU2V0VHJhaXRzPEU+Ojp2YWx1ZXM+OjphbGxWYWxpZEJpdHMoKSk7CiB9CiAKK30g
Ly8gbmFtZXNwYWNlIFdURgorCiB1c2luZyBXVEY6Ok9wdGlvblNldDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0FjdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0FjdGlvbnMuaAppbmRleCBiNjc3NmJiZDc1MzgzNjFjODExMzA1ZjNkOTkwZDRiNTkzZDFmMDg2
Li45NmMwMmI2NmQwZTk2OWZmZTYwMjZmNzVmNjAwZGZiNWRiYWY4MTAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdBY3Rpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQWN0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE4ICsyNiwxOCBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIFdlYkNvcmVEcmFnRGVzdGluYXRpb25BY3Rpb24gc2hvdWxkIGJlIGtl
cHQgaW4gc3luYyB3aXRoIFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbi4KLXR5cGVkZWYgZW51bSB7
Ci0gICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSAgICA9IDAsCi0gICAgRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uREhUTUwgICA9IDEsCi0gICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCAgICA9
IDIsCi0gICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCAgICA9IDQsCi0gICAgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uQW55ICAgICA9IFVJTlRfTUFYCi19IERyYWdEZXN0aW5hdGlvbkFjdGlvbjsK
Ky8vIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBtdXN0IGJlIGtlcHQgaW4gc3luYyB3
aXRoIFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhbmQgV0tEcmFnRGVzdGluYXRpb25BY3Rpb24u
CitlbnVtIGNsYXNzIERyYWdEZXN0aW5hdGlvbkFjdGlvbiA6IHVpbnQ4X3QgeworICAgIERIVE1M
ID0gMSwKKyAgICBFZGl0ICA9IDIsCisgICAgTG9hZCAgPSA0Cit9OwogCiAvLyBXZWJDb3JlRHJh
Z1NvdXJjZUFjdGlvbiBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggV2ViRHJhZ1NvdXJjZUFj
dGlvbi4KIHR5cGVkZWYgZW51bSB7CkBAIC04OCw0ICs4OCwxMyBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRyYWdIYW5kbGluZ01ldGhvZD4gewogICAgID47CiB9Owog
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBPcHRpb25TZXRUcmFpdHM8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gT3B0aW9uU2V0VmFsdWVzPAorICAgICAg
ICBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sCisgICAgICAgIFdlYkNvcmU6OkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbjo6REhUTUwsCisgICAgICAgIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlv
bkFjdGlvbjo6RWRpdCwKKyAgICAgICAgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpM
b2FkCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA1Y2FjMTgwYmY1N2ZiZDU2ZWRlNTk4NGMwOTg3MzliOTBi
ZDFkYThlLi5lM2E4OTAxYTQ4NTBiMmUwMDBkY2ZkMTRmYTM4ZGMyOGNkMWI0NDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjU1LDggKzI1NSw4IEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFn
RGF0YSkKICAgICBpZiAobV9kb2N1bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3kgPSBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeVRvUHJvcGFnYXRlKCk7CiAKLSAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uREhUTUwpICYmIGRyYWdJc0hhbmRsZWRCeURv
Y3VtZW50KG1fZHJhZ0hhbmRsaW5nTWV0aG9kKSkgewotICAgICAgICBjbGllbnQoKS53aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25ESFRNTCwgZHJh
Z0RhdGEpOworICAgIGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERy
YWdEZXN0aW5hdGlvbkFjdGlvbjo6REhUTUwpKSAmJiBkcmFnSXNIYW5kbGVkQnlEb2N1bWVudCht
X2RyYWdIYW5kbGluZ01ldGhvZCkpIHsKKyAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpESFRNTCwgZHJhZ0RhdGEp
OwogICAgICAgICBSZWY8RnJhbWU+IG1haW5GcmFtZShtX3BhZ2UubWFpbkZyYW1lKCkpOwogICAg
ICAgICBib29sIHByZXZlbnRlZERlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1haW5GcmFt
ZS0+dmlldygpKQpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZv
cm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gJiBEcmFnRGVzdGluYXRpb25B
Y3Rpb25FZGl0KSAmJiBjb25jbHVkZUVkaXREcmFnKGRyYWdEYXRhKSkgeworICAgIGlmICgobV9k
cmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6
RWRpdCkpICYmIGNvbmNsdWRlRWRpdERyYWcoZHJhZ0RhdGEpKSB7CiAgICAgICAgIGNsaWVudCgp
LmRpZENvbmNsdWRlRWRpdERyYWcoKTsKICAgICAgICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBu
dWxscHRyOwogICAgICAgICBjbGVhckRyYWdDYXJldCgpOwpAQCAtMjg1LDcgKzI4NSw3IEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnT3BlcmF0aW9uKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSkKICAgICBpZiAodXJsU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgZHJhZ0RhdGEpOworICAgIGNsaWVudCgpLndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6TG9hZCwgZHJh
Z0RhdGEpOwogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7IG1fcGFnZS5t
YWluRnJhbWUoKSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0gfTsKICAgICBmcmFtZUxv
YWRSZXF1ZXN0LnNldFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeSk7CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRJc1JlcXVlc3RGcm9tQ2xp
ZW50T3JVc2VySW5wdXQoKTsKQEAgLTMwOCwxNSArMzA4LDE1IEBAIERyYWdPcGVyYXRpb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKIHsKICAgICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1
bWVudEF0UG9pbnQoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSkpOwogCi0gICAgbV9kcmFnRGVz
dGluYXRpb25BY3Rpb24gPSBkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25BY3Rpb24oKTsKLSAgICBp
ZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gPT0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSkg
eworICAgIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayA9IGRyYWdEYXRhLmRyYWdEZXN0aW5h
dGlvbkFjdGlvbk1hc2soKTsKKyAgICBpZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmlz
RW1wdHkoKSkgewogICAgICAgICBjbGVhckRyYWdDYXJldCgpOyAvLyBGSVhNRTogV2h5IG5vdCBj
YWxsIG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQobnVsbHB0cik/CiAgICAgICAgIHJldHVybiBEcmFn
T3BlcmF0aW9uTm9uZTsKICAgICB9CiAKICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24g
PSBEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IHRyeURvY3Vt
ZW50RHJhZyhkcmFnRGF0YSwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24sIGRyYWdPcGVyYXRpb24p
OwotICAgIGlmIChtX2RyYWdIYW5kbGluZ01ldGhvZCA9PSBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5v
bmUgJiYgKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9h
ZCkpIHsKKyAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IHRyeURvY3VtZW50RHJhZyhkcmFnRGF0
YSwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLCBkcmFnT3BlcmF0aW9uKTsKKyAgICBpZiAo
bV9kcmFnSGFuZGxpbmdNZXRob2QgPT0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lICYmIChtX2Ry
YWdEZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFpbnMoRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpM
b2FkKSkpIHsKICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG9wZXJhdGlvbkZvckxvYWQoZHJhZ0Rh
dGEpOwogICAgICAgICBpZiAoZHJhZ09wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkKICAg
ICAgICAgICAgIG1fZHJhZ0hhbmRsaW5nTWV0aG9kID0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpQYWdl
TG9hZDsKQEAgLTM4OCw3ICszODgsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjp1cGRhdGVTdXBw
b3J0ZWRUeXBlSWRlbnRpZmllcnNGb3JEcmFnSGFuZGxpbmdNZXRob2QoRHJhZ0hhbgogCiAjZW5k
aWYKIAotRHJhZ0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWco
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFz
aywgRHJhZ09wZXJhdGlvbiYgZHJhZ09wZXJhdGlvbikKK0RyYWdIYW5kbGluZ01ldGhvZCBEcmFn
Q29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgT3B0
aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZGVzdGluYXRpb25BY3Rpb25NYXNrLCBEcmFn
T3BlcmF0aW9uJiBkcmFnT3BlcmF0aW9uKQogewogICAgIGlmICghbV9kb2N1bWVudFVuZGVyTW91
c2UpCiAgICAgICAgIHJldHVybiBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmU7CkBAIC0zOTcsNyAr
Mzk3LDcgQEAgRHJhZ0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmEKICAgICAgICAgcmV0dXJuIERyYWdIYW5k
bGluZ01ldGhvZDo6Tm9uZTsKIAogICAgIGJvb2wgaXNIYW5kbGluZ0RyYWcgPSBmYWxzZTsKLSAg
ICBpZiAoYWN0aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRIVE1MKSB7CisgICAgaWYg
KGRlc3RpbmF0aW9uQWN0aW9uTWFzay5jb250YWlucyhEcmFnRGVzdGluYXRpb25BY3Rpb246OkRI
VE1MKSkgewogICAgICAgICBpc0hhbmRsaW5nRHJhZyA9IHRyeURIVE1MRHJhZyhkcmFnRGF0YSwg
ZHJhZ09wZXJhdGlvbik7CiAgICAgICAgIC8vIERvIG5vdCBjb250aW51ZSBpZiBtX2RvY3VtZW50
VW5kZXJNb3VzZSBoYXMgYmVlbiByZXNldCBieSB0cnlESFRNTERyYWcuCiAgICAgICAgIC8vIHRy
eURIVE1MRHJhZyBmaXJlcyBkcmFnZW50ZXIgZXZlbnQuIFRoZSBldmVudCBsaXN0ZW5lciB0aGF0
IGxpc3RlbnMKQEAgLTQyMCw3ICs0MjAsNyBAQCBEcmFnSGFuZGxpbmdNZXRob2QgRHJhZ0NvbnRy
b2xsZXI6OnRyeURvY3VtZW50RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYQogICAg
ICAgICByZXR1cm4gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25EZWZhdWx0OwogICAgIH0KIAotICAg
IGlmICgoYWN0aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNhblByb2Nl
c3NEcmFnKGRyYWdEYXRhKSkgeworICAgIGlmIChkZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFp
bnMoRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0KSAmJiBjYW5Qcm9jZXNzRHJhZyhkcmFnRGF0
YSkpIHsKICAgICAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zQ29sb3IoKSkgewogICAgICAgICAg
ICAgZHJhZ09wZXJhdGlvbiA9IERyYWdPcGVyYXRpb25HZW5lcmljOwogICAgICAgICAgICAgcmV0
dXJuIERyYWdIYW5kbGluZ01ldGhvZDo6U2V0Q29sb3I7CkBAIC01NjksNyArNTY5LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5z
ZXJpYWxpemVkKCksIGZhbHNlKTsKICAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5z
aG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSku
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjbGllbnQoKS53aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBk
cmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5l
ckZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRD
b2xvcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTYwNSw3ICs2MDUsNyBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFn
RGF0YSkKICAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdt
ZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0
QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBj
bGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25B
Y3Rpb25FZGl0LCBkcmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwog
CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3Jt
VHdvU3RlcERyb3AoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjMxLDcgKzYzMSw3IEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAg
ICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQs
IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3Bw
ZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNsaWVudCgpLndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRy
YWdEYXRhKTsKKyAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rp
b24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGF1dG8g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCB0ZXh0KTsKICAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCkt
PnBlcmZvcm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuaAppbmRleCAxY2Y2NjUyZmQxOGQwOTAxZTJhZTMxMTQ1ZTk1ZWVkNGExNWRi
Mzc1Li40NTFkZDU4YzVlM2M1YzdmMWUzY2IyODViMDJlMTllNmQ4NWI3Y2Q2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDcgKzc5LDcgQEAgc3RydWN0IFByb21p
c2VkQXR0YWNobWVudEluZm87CiAgICAgICAgIERyYWdIYW5kbGluZ01ldGhvZCBkcmFnSGFuZGxp
bmdNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2RyYWdIYW5kbGluZ01ldGhvZDsgfQogCiAgICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudFVuZGVyTW91c2UoKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50VW5kZXJNb3VzZS5nZXQoKTsgfQotICAgICAgICBEcmFnRGVzdGluYXRpb25BY3Rpb24gZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnRGVzdGluYXRpb25BY3Rp
b247IH0KKyAgICAgICAgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
TWFzazsgfQogICAgICAgICBEcmFnU291cmNlQWN0aW9uIGRlbGVnYXRlRHJhZ1NvdXJjZUFjdGlv
bihjb25zdCBJbnRQb2ludCYgcm9vdFZpZXdQb2ludCk7CiAgICAgICAgIAogICAgICAgICBFbGVt
ZW50KiBkcmFnZ2FibGVFbGVtZW50KGNvbnN0IEZyYW1lKiwgRWxlbWVudCogc3RhcnQsIGNvbnN0
IEludFBvaW50JiwgRHJhZ1N0YXRlJikgY29uc3Q7CkBAIC0xMDgsNyArMTA4LDcgQEAgc3RydWN0
IFByb21pc2VkQXR0YWNobWVudEluZm87CiAgICAgICAgIGJvb2wgY29uY2x1ZGVFZGl0RHJhZyhj
b25zdCBEcmFnRGF0YSYpOwogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdFbnRlcmVkT3JVcGRh
dGVkKGNvbnN0IERyYWdEYXRhJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uRm9y
TG9hZChjb25zdCBEcmFnRGF0YSYpOwotICAgICAgICBEcmFnSGFuZGxpbmdNZXRob2QgdHJ5RG9j
dW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnT3Bl
cmF0aW9uJik7CisgICAgICAgIERyYWdIYW5kbGluZ01ldGhvZCB0cnlEb2N1bWVudERyYWcoY29u
c3QgRHJhZ0RhdGEmLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiwgRHJhZ09wZXJh
dGlvbiYpOwogICAgICAgICBib29sIHRyeURIVE1MRHJhZyhjb25zdCBEcmFnRGF0YSYsIERyYWdP
cGVyYXRpb24mKTsKICAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uKGNvbnN0IERy
YWdEYXRhJik7CiAgICAgICAgIHZvaWQgY2xlYXJEcmFnQ2FyZXQoKTsKQEAgLTE0OSw3ICsxNDks
NyBAQCBzdHJ1Y3QgUHJvbWlzZWRBdHRhY2htZW50SW5mbzsKICAgICAgICAgdW5zaWduZWQgbV9u
dW1iZXJPZkl0ZW1zVG9CZUFjY2VwdGVkIHsgMCB9OwogICAgICAgICBEcmFnSGFuZGxpbmdNZXRo
b2QgbV9kcmFnSGFuZGxpbmdNZXRob2QgeyBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmUgfTsKIAot
ICAgICAgICBEcmFnRGVzdGluYXRpb25BY3Rpb24gbV9kcmFnRGVzdGluYXRpb25BY3Rpb24geyBE
cmFnRGVzdGluYXRpb25BY3Rpb25Ob25lIH07CisgICAgICAgIE9wdGlvblNldDxEcmFnRGVzdGlu
YXRpb25BY3Rpb24+IG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzazsKICAgICAgICAgRHJhZ1Nv
dXJjZUFjdGlvbiBtX2RyYWdTb3VyY2VBY3Rpb24geyBEcmFnU291cmNlQWN0aW9uTm9uZSB9Owog
ICAgICAgICBib29sIG1fZGlkSW5pdGlhdGVEcmFnIHsgZmFsc2UgfTsKICAgICAgICAgRHJhZ09w
ZXJhdGlvbiBtX3NvdXJjZURyYWdPcGVyYXRpb24geyBEcmFnT3BlcmF0aW9uTm9uZSB9OyAvLyBT
ZXQgaW4gc3RhcnREcmFnIHdoZW4gYSBkcmFnIHN0YXJ0cyBmcm9tIGEgbW91c2UgZG93biB3aXRo
aW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5jcHAKaW5kZXggYjQyOGMzNzM5
M2ZlY2Q0YTFhODgwNTgwZmVkNjhlYjliY2U0YzRhMC4uOGY2NzU1ZjU3NjFhMTQ1NGU5YjQwNjAw
MmUwODg0M2M2YjcxODg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
MjMgKzMyLDIzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1EcmFnRGF0YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQmIGNs
aWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRp
b24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIERyYWdE
ZXN0aW5hdGlvbkFjdGlvbiBkZXN0aW5hdGlvbkFjdGlvbikKK0RyYWdEYXRhOjpEcmFnRGF0YShE
cmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IElu
dFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNr
LCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFj
dGlvbj4gZGVzdGluYXRpb25BY3Rpb25NYXNrKQogICAgIDogbV9jbGllbnRQb3NpdGlvbihjbGll
bnRQb3NpdGlvbikKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCiAgICAg
LCBtX3BsYXRmb3JtRHJhZ0RhdGEoZGF0YSkKICAgICAsIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrKHNvdXJjZU9wZXJhdGlvbk1hc2spCiAgICAgLCBtX2FwcGxpY2F0aW9uRmxhZ3MoZmxh
Z3MpCi0gICAgLCBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbihkZXN0aW5hdGlvbkFjdGlvbikKKyAg
ICAsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayhkZXN0aW5hdGlvbkFjdGlvbk1hc2spCiB7
ICAKIH0KIAotRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFBvaW50
JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3Bl
cmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBE
cmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJhZ0Rh
dGEoY29uc3QgU3RyaW5nJiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFz
aywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25B
Y3Rpb24+IGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xp
ZW50UG9zaXRpb24pCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAg
ICwgbV9wbGF0Zm9ybURyYWdEYXRhKDApCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9u
TWFzayhzb3VyY2VPcGVyYXRpb25NYXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdz
KQotICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCisgICAg
LCBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25NYXNrKQogewog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAppbmRleCBlOTMwOTVmYzdiMmEw
YjEzNmQ0NjYxNmQwMjIwY2NlYmEzOTlhMDM0Li5jMDBiMzgwYTA5YzM4ZmM3ODgxMzJlOGZkNGMy
MzhkY2ZkNDYxODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTc0
LDExICs3NSwxMSBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBEcmFnZ2luZ1B1cnBvc2UgeyBG
b3JFZGl0aW5nLCBGb3JGaWxlVXBsb2FkLCBGb3JDb2xvckNvbnRyb2wgfTsKIAogICAgIC8vIGNs
aWVudFBvc2l0aW9uIGlzIHRha2VuIHRvIGJlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZyBldmVu
dCB3aXRoaW4gdGhlIHRhcmdldCB3aW5kb3csIHdpdGggKDAsMCkgYXQgdGhlIHRvcCBsZWZ0Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRHJhZ0RhdGEoRHJhZ0RhdGFSZWYsIGNvbnN0IEludFBvaW50JiBj
bGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0
aW9uLCBEcmFnQXBwbGljYXRpb25GbGFncyA9IERyYWdBcHBsaWNhdGlvbk5vbmUsIERyYWdEZXN0
aW5hdGlvbkFjdGlvbiBhY3Rpb25zID0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBEcmFnRGF0YShjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29u
c3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIERyYWdPcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxpY2F0aW9u
Tm9uZSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbnMgPSBEcmFnRGVzdGluYXRpb25BY3Rp
b25BbnkpOworICAgIFdFQkNPUkVfRVhQT1JUIERyYWdEYXRhKERyYWdEYXRhUmVmLCBjb25zdCBJ
bnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwg
RHJhZ09wZXJhdGlvbiwgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgPSBEcmFnQXBwbGljYXRpb25Ob25l
LCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBhY3Rpb25NYXNrID0gT3B0aW9uU2V0
PERyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmFueSgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmFn
RGF0YShjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgSW50UG9pbnQmIGNsaWVu
dFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24s
IERyYWdBcHBsaWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uTm9uZSwgT3B0aW9uU2V0PERy
YWdEZXN0aW5hdGlvbkFjdGlvbj4gYWN0aW9uTWFzayA9IE9wdGlvblNldDxEcmFnRGVzdGluYXRp
b25BY3Rpb24+OjphbnkoKSk7CiAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgdXNlZCBv
bmx5IGJ5IFdlYktpdDIgSVBDIGJlY2F1c2UgRHJhZ0RhdGEKICAgICAvLyBpcyBpbml0aWFsaXpl
ZCBieSB0aGUgZGVjb2RlciBhbmQgbm90IGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICBEcmFnRGF0
YSgpIHsgfQorICAgIERyYWdEYXRhKCkgPSBkZWZhdWx0OwogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBXRUJDT1JFX0VYUE9SVCBEcmFnRGF0YShjb25zdCBEcmFnRGF0YU1hcCYsIGNvbnN0IEludFBv
aW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFn
T3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzID0gRHJh
Z0FwcGxpY2F0aW9uTm9uZSk7CiAgICAgY29uc3QgRHJhZ0RhdGFNYXAmIGRyYWdEYXRhTWFwKCk7
CkBAIC0xMDEsNyArMTAyLDcgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnNDb2xvcigpIGNv
bnN0OwogICAgIGJvb2wgY29udGFpbnNGaWxlcygpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJl
ck9mRmlsZXMoKSBjb25zdDsKLSAgICBEcmFnRGVzdGluYXRpb25BY3Rpb24gZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnRGVzdGluYXRpb25BY3Rpb247IH0KKyAg
ICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkcmFnRGVzdGluYXRpb25BY3Rpb25N
YXNrKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrOyB9CiAgICAg
dm9pZCBzZXRGaWxlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZpbGVOYW1lcykgeyBtX2ZpbGVOYW1l
cyA9IFdURk1vdmUoZmlsZU5hbWVzKTsgfQogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
TmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lczsgfQogI2lmIFBMQVRGT1JNKENPQ09B
KQpAQCAtMTE5LDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRh
ID0gZGF0YS5tX3BsYXRmb3JtRHJhZ0RhdGE7CiAgICAgICAgIG1fZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrID0gZGF0YS5tX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzazsKICAgICAgICAg
bV9hcHBsaWNhdGlvbkZsYWdzID0gZGF0YS5tX2FwcGxpY2F0aW9uRmxhZ3M7Ci0gICAgICAgIG1f
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID0gZGF0YS5tX2RyYWdEZXN0aW5hdGlvbkFjdGlvbjsKKyAg
ICAgICAgbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrID0gZGF0YS5tX2RyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2s7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAjZW5kaWYKQEAgLTEz
MSw3ICsxMzIsNyBAQCBwcml2YXRlOgogICAgIERyYWdPcGVyYXRpb24gbV9kcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2s7CiAgICAgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgbV9hcHBsaWNhdGlvbkZs
YWdzOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZU5hbWVzOwotICAgIERyYWdEZXN0aW5hdGlv
bkFjdGlvbiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbjsKKyAgICBPcHRpb25TZXQ8RHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uPiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7CiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgU3RyaW5nIG1fcGFzdGVib2FyZE5hbWU7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnRGF0YUNvY29hLm1tCmluZGV4IGEzNmY0Y2QwZTk3
ODliNTViMDE4MzJmYjE5YzEwMDYxYTdiMTE4Y2QuLjljY2FmYzBjZDdhODM2ZTZjOTFlMWYyMzNl
MTg5MGIzMzhhNGQzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L0RyYWdEYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJh
Z0RhdGFDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMTYsMTMgKzExNiwxMyBAQCBzdGF0aWMgaW5saW5lIFN0cmlu
ZyB0aWZmUGFzdGVib2FyZFR5cGUoKQogI2VuZGlmCiB9CiAKLURyYWdEYXRhOjpEcmFnRGF0YShE
cmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IElu
dFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNr
LCBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncywgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3Rp
bmF0aW9uQWN0aW9uKQorRHJhZ0RhdGE6OkRyYWdEYXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0
IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9u
LCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdz
IGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkZXN0aW5hdGlvbkFjdGlv
bk1hc2spCiAgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9n
bG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShk
YXRhKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9u
TWFzaykKICAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAsIG1fZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9kcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKICNpZiBQTEFURk9STShNQUMpCiAgICAg
LCBtX3Bhc3RlYm9hcmROYW1lKFtbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2Fy
ZF0gbmFtZV0pCiAjZWxzZQpAQCAtMTMxLDEzICsxMzEsMTMgQEAgRHJhZ0RhdGE6OkRyYWdEYXRh
KERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3Qg
SW50UG8KIHsKIH0KIAotRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3Jh
Z2VOYW1lLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBn
bG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBw
bGljYXRpb25GbGFncyBmbGFncywgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0
aW9uKQorRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBj
b25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3Np
dGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25G
bGFncyBmbGFncywgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZGVzdGluYXRpb25B
Y3Rpb25NYXNrKQogICAgIDogbV9jbGllbnRQb3NpdGlvbihjbGllbnRQb3NpdGlvbikKICAgICAs
IG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCiAgICAgLCBtX3BsYXRmb3JtRHJhZ0Rh
dGEoMCkKICAgICAsIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKHNvdXJjZU9wZXJhdGlv
bk1hc2spCiAgICAgLCBtX2FwcGxpY2F0aW9uRmxhZ3MoZmxhZ3MpCi0gICAgLCBtX2RyYWdEZXN0
aW5hdGlvbkFjdGlvbihkZXN0aW5hdGlvbkFjdGlvbikKKyAgICAsIG1fZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uTWFzayhkZXN0aW5hdGlvbkFjdGlvbk1hc2spCiAgICAgLCBtX3Bhc3RlYm9hcmROYW1l
KGRyYWdTdG9yYWdlTmFtZSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGQ5ZWJiMWIyM2ZkM2ExODhmMmE4MDViOTc1NDMxNGYw
OGEwYmI2NzUuLmMyOTc2ZmRhY2I2MmFkOGVmNjQyNjBhNDhlOTRmNzAzNWU0NGIzYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMTYx
NSw3ICsxNjE1LDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBlbmNvZGVyIDw8IGRy
YWdEYXRhLnBhc3RlYm9hcmROYW1lKCk7CiAgICAgZW5jb2RlciA8PCBkcmFnRGF0YS5maWxlTmFt
ZXMoKTsKICNlbmRpZgotICAgIGVuY29kZXIuZW5jb2RlRW51bShkcmFnRGF0YS5kcmFnRGVzdGlu
YXRpb25BY3Rpb24oKSk7CisgICAgZW5jb2RlciA8PCBkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrKCk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCkBAIC0xNjQ2LDExICsxNjQ2LDEx
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0g
ICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0aW9uOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVFbnVtKGRlc3RpbmF0aW9uQWN0aW9uKSkKKyAgICBPcHRpb25TZXQ8RHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uPiBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzaykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGRyYWdEYXRhID0gRHJhZ0RhdGEocGFzdGVib2FyZE5hbWUsIGNsaWVudFBv
c2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBhcHBs
aWNhdGlvbkZsYWdzLCBkZXN0aW5hdGlvbkFjdGlvbik7CisgICAgZHJhZ0RhdGEgPSBEcmFnRGF0
YShwYXN0ZWJvYXJkTmFtZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBkcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2ssIGFwcGxpY2F0aW9uRmxhZ3MsIGRyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2spOwogICAgIGRyYWdEYXRhLnNldEZpbGVOYW1lcyhmaWxlTmFtZXMpOwogCiAgICAg
cmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCmluZGV4IDFkNjNiYzA1MTI2MmFhNzc4NWM3ZWVkOTM2MDM1NTI3ZDY4ODFhODIuLjY1ZDAw
ZWY4MDk4ZGNjNjhjYTBiMzQ1NGY2M2U3MDQwMjM2ZjNhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzk0Miw4ICszOTQyLDggQEAgTlNE
cmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnZ2luZ0VudGVyZWQoaWQgPE5TRHJhZ2dpbmdJ
bmZvPiBkcmFnZ2luZ0luZm8pCiB7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50KFttX3Zp
ZXcgY29udmVydFBvaW50OmRyYWdnaW5nSW5mby5kcmFnZ2luZ0xvY2F0aW9uIGZyb21WaWV3Om5p
bF0pOwogICAgIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbChXZWJDb3JlOjpnbG9iYWxQb2ludChk
cmFnZ2luZ0luZm8uZHJhZ2dpbmdMb2NhdGlvbiwgW21fdmlldyB3aW5kb3ddKSk7Ci0gICAgYXV0
byBkcmFnRGVzdGluYXRpb25BY3Rpb24gPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24+KFttX3ZpZXcgX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2lu
Z0luZm86ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJh
Z2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJh
dGlvbj4oZHJhZ2dpbmdJbmZvLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0
aW9uRmxhZ3NGb3JEcmFnKG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwg
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKTsKKyAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1h
c2sgPSBPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6ZnJvbVJhdyhb
bV92aWV3IF93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5n
SW5mb10pOworICAgIFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xp
ZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdPcGVyYXRpb24+KGRyYWdnaW5n
SW5mby5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2spLCBhcHBsaWNhdGlvbkZsYWdzRm9yRHJh
ZyhtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCksIGRyYWdnaW5nSW5mbyksIGRyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2spOwogCiAgICAgbV9wYWdlLT5yZXNldEN1cnJlbnREcmFnSW5mb3JtYXRpb24o
KTsKICAgICBtX3BhZ2UtPmRyYWdFbnRlcmVkKGRyYWdEYXRhLCBkcmFnZ2luZ0luZm8uZHJhZ2dp
bmdQYXN0ZWJvYXJkLm5hbWUpOwpAQCAtMzk1NSw4ICszOTU1LDggQEAgTlNEcmFnT3BlcmF0aW9u
IFdlYlZpZXdJbXBsOjpkcmFnZ2luZ1VwZGF0ZWQoaWQgPE5TRHJhZ2dpbmdJbmZvPiBkcmFnZ2lu
Z0luZm8pCiB7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50KFttX3ZpZXcgY29udmVydFBv
aW50OmRyYWdnaW5nSW5mby5kcmFnZ2luZ0xvY2F0aW9uIGZyb21WaWV3Om5pbF0pOwogICAgIFdl
YkNvcmU6OkludFBvaW50IGdsb2JhbChXZWJDb3JlOjpnbG9iYWxQb2ludChkcmFnZ2luZ0luZm8u
ZHJhZ2dpbmdMb2NhdGlvbiwgW21fdmlldyB3aW5kb3ddKSk7Ci0gICAgYXV0byBkcmFnRGVzdGlu
YXRpb25BY3Rpb24gPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+
KFttX3ZpZXcgX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86ZHJhZ2dp
bmdJbmZvXSk7Ci0gICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBj
bGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oZHJhZ2dp
bmdJbmZvLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0aW9uRmxhZ3NGb3JE
cmFnKG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKTsKKyAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBPcHRpb25T
ZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6ZnJvbVJhdyhbbV92aWV3IF93ZWJf
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOworICAg
IFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWws
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdPcGVyYXRpb24+KGRyYWdnaW5nSW5mby5kcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2spLCBhcHBsaWNhdGlvbkZsYWdzRm9yRHJhZyhtX3ZpZXcuZ2V0
QXV0b3JlbGVhc2VkKCksIGRyYWdnaW5nSW5mbyksIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sp
OwogICAgIG1fcGFnZS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEsIGRyYWdnaW5nSW5mby5kcmFnZ2lu
Z1Bhc3RlYm9hcmQubmFtZSk7CiAKICAgICBOU0ludGVnZXIgbnVtYmVyT2ZWYWxpZEl0ZW1zRm9y
RHJvcCA9IG1fcGFnZS0+Y3VycmVudERyYWdOdW1iZXJPZkZpbGVzVG9CZUFjY2VwdGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQppbmRleCA4NWU2ZTZhNDRjMDk1MjRjYzk1MTg4Y2E5Mzk2ODUwYmNjZTFmZDAz
Li4wZTAwZjQ1NTI1MWQ3OGFkNGE5YzQ0ZDQ3M2UwMmI3ZjE4OGM4NTY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03MzA1LDcgKzczMDUsOCBAQCAtIChXZWJDb3JlOjpEcmFnRGF0YSlkcmFnRGF0YUZv
ckRyb3BTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBkcmFnRGVzdAogICAgIFtz
ZWxmIGNvbXB1dGVDbGllbnRBbmRHbG9iYWxQb2ludHNGb3JEcm9wU2Vzc2lvbjpzZXNzaW9uIG91
dENsaWVudFBvaW50OiZjbGllbnQgb3V0R2xvYmFsUG9pbnQ6Jmdsb2JhbF07CiAKICAgICBXZWJD
b3JlOjpEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb25NYXNrID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RHJhZ09wZXJhdGlvbj4oc2Vzc2lvbi5hbGxvd3NNb3ZlT3BlcmF0aW9uID8gV2ViQ29yZTo6
RHJhZ09wZXJhdGlvbkV2ZXJ5IDogKFdlYkNvcmU6OkRyYWdPcGVyYXRpb25FdmVyeSAmIH5XZWJD
b3JlOjpEcmFnT3BlcmF0aW9uTW92ZSkpOwotICAgIHJldHVybiB7IHNlc3Npb24sIFdlYkNvcmU6
OnJvdW5kZWRJbnRQb2ludChjbGllbnQpLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoZ2xvYmFs
KSwgZHJhZ09wZXJhdGlvbk1hc2ssIFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbk5vbmUsIHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj4oZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKSB9OworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayA9IE9wdGlvblNldDxX
ZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9tUmF3KGRyYWdEZXN0aW5hdGlvbkFj
dGlvbik7CisgICAgcmV0dXJuIHsgc2Vzc2lvbiwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGNs
aWVudCksIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChnbG9iYWwpLCBkcmFnT3BlcmF0aW9uTWFz
aywgV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uTm9uZSwgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFz
ayB9OwogfQogCiAtICh2b2lkKWNsZWFuVXBEcmFnU291cmNlU2Vzc2lvblN0YXRlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5jcHAKaW5kZXggMWE5YTRlOWFjZDgwNjYwNGM1Mjc2YjdhMjNhMTI3MWE5OWY0NTA2My4u
ODFiNzlhNzdjODdlMGFkZTE2NmEwODZmNDU2NDZhZWJkYjkzYzhiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIFdlYkRy
YWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb24sIGNvbnN0IERyYWdEYXRhJikKIHsKLSAgICBpZiAoYWN0aW9uID09IERy
YWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQpCisgICAgaWYgKGFjdGlvbiA9PSBEcmFnRGVzdGluYXRp
b25BY3Rpb246OkxvYWQpCiAgICAgICAgIG1fcGFnZS0+d2lsbFBlcmZvcm1Mb2FkRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKCk7CiAgICAgZWxzZQogICAgICAgICBtX3BhZ2UtPm1heVBlcmZvcm1VcGxv
YWREcmFnRGVzdGluYXRpb25BY3Rpb24oKTsgLy8gVXBsb2FkIGNhbiBoYXBwZW4gZnJvbSBhIGRy
b3AgZXZlbnQgaGFuZGxlciwgc28gd2Ugc2hvdWxkIHByZXBhcmUgZWFybHkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5t
bQppbmRleCA0Mjc4YjAzNDJmOWExYTBhYWJhM2U5NDIzNWI2YzgwYTU3MGQ4NjA3Li40YmJlODE3
YTE0NzFlY2JjZWM0YjQwOWJkNjI4ZThlNjUzZDY2YjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0KQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODYsNyArODYsNyBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmdldFRvcEhUTUxWaWV3KEZyYW1lKiBm
cmFtZSkKIAogdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
OihXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24pYWN0aW9uIGZvckRyYWdnaW5nSW5mbzpkcmFnRGF0
YS5wbGF0Zm9ybURhdGEoKV07CisgICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6bV93ZWJWaWV3IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOnN0YXRp
Y19jYXN0PFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbj4oYWN0aW9uKSBmb3JEcmFnZ2luZ0luZm86
ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCldOwogfQogCiAKQEAgLTIxNCw3ICsyMTQsNyBAQCBib29s
IFdlYkRyYWdDbGllbnQ6OnVzZUxlZ2FjeURyYWdDbGllbnQoKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgY29uc3QgRHJhZ0RhdGEmKQordm9pZCBXZWJEcmFnQ2xp
ZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIGNvbnN0IERyYWdEYXRhJikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IGZkY2JhNGVmMGE2Y2FjNDc3Y2RjZTlmNDc2
YjJlZDU0ZjJjNGVjN2UuLjZkYTkzMWE3MDBkMWQ2YzA1MWZiNGViMzNkNmNhN2VkNDNiOWJhZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5MDgs
NyArMTkwOCw3IEBAIC0gKFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbilkcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrRm9yU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3NpCiAtIChXZWJDb3JlOjpEcmFnRGF0
YSlkcmFnRGF0YUZvclNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIGNsaWVudDoo
Q0dQb2ludCljbGllbnRQb3NpdGlvbiBnbG9iYWw6KENHUG9pbnQpZ2xvYmFsUG9zaXRpb24gb3Bl
cmF0aW9uOih1aW50NjRfdClvcGVyYXRpb24KIHsKICAgICBhdXRvIGRyYWdPcGVyYXRpb25NYXNr
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4ob3BlcmF0aW9uKTsKLSAgICBh
dXRvIGRyYWdEZXN0aW5hdGlvbk1hc2sgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24+KFtzZWxmIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JTZXNzaW9uOnNl
c3Npb25dKTsKKyAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbk1hc2sgPSBPcHRpb25TZXQ8V2ViQ29y
ZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6ZnJvbVJhdyhbc2VsZiBkcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrRm9yU2Vzc2lvbjpzZXNzaW9uXSk7CiAgICAgcmV0dXJuIHsgc2Vzc2lvbiwgV2Vi
Q29yZTo6cm91bmRlZEludFBvaW50KGNsaWVudFBvc2l0aW9uKSwgV2ViQ29yZTo6cm91bmRlZElu
dFBvaW50KGdsb2JhbFBvc2l0aW9uKSwgZHJhZ09wZXJhdGlvbk1hc2ssIFdlYkNvcmU6OkRyYWdB
cHBsaWNhdGlvbk5vbmUsIGRyYWdEZXN0aW5hdGlvbk1hc2sgfTsKIH0KIApAQCAtNjcyMCw5ICs2
NzIwLDkgQEAgLSAoV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFn
czooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0kKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3M+KGZsYWdzKTsKIH0KIAotLSAoV2ViQ29yZTo6
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86KGlkIDxOU0Ry
YWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCistIChPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uPilhY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOihpZCA8TlNEcmFnZ2luZ0lu
Zm8+KWRyYWdnaW5nSW5mbwogewotICAgIHJldHVybiAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKVtbc2VsZiBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpzZWxmIGRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKKyAgICByZXR1
cm4gT3B0aW9uU2V0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmZyb21SYXcoW1tz
ZWxmIF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnNlbGYgZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTWFza0ZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dKTsKIH0KIAogLSAoTlNEcmFnT3Bl
cmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400121</attachid>
            <date>2020-05-23 07:26:29 -0700</date>
            <delta_ts>2020-05-26 19:05:54 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>bug-212115-20200523072739.patch</filename>
            <type>text/plain</type>
            <size>42130</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY2MTU5NjYyMTgzOTljMTc5NTZhMTcx
NTQzOGRmZWE3ZDM5OWRmNDYuLjZkNDViMDNmMjgwZWIzZmM4YTQ4YzFkYmVkZmQwZmY2ZmNiNDI4
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMjAtMDUtMjIgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFj
dGlvbj4gZm9yIG1hc2sgdmFsdWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIx
MTU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgT3B0aW9uU2V0VHJhaXRzPD4gKHNp
bWlsYXIgdG8gRW51bVRyYWl0czw+KSB0byBkZWZpbmUgYWxsCisgICAgICAgIHZhbGlkIHZhbHVl
cyBmb3IgYSBnaXZlbiBlbnVtIHR5cGUuICBUaGlzIGFsbG93cyB1cyB0byBkZWZpbmUKKyAgICAg
ICAgT3B0aW9uU2V0PD46OmFueSgpIHRvIHByb3ZpZGUgYSBiaXRtYXNrIHdpdGggYWxsIHZhbGlk
IGJpdHMgc2V0LAorICAgICAgICB0byB1c2UgdGhhdCBiaXRtYXNrIHdpdGggT3B0aW9uU2V0PD46
OmZyb21SYXcoKSB0byBjbGVhcgorICAgICAgICB1bmRlZmluZWQgYml0cywgYW5kIHRvIHZhbGlk
YXRlIGVudW0gdmFsdWVzIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgT3B0aW9uU2V0PD4gY29uc3Ry
dWN0b3JzLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgZXh0cmEgdmFsaWRhdGlvbiBwb3NzaWJs
ZSB3aXRoIE9wdGlvblNldFRyYWl0czw+CisgICAgICAgIGlzIGVuYWJsZWQgYmFzZWQgb24gdGhl
IGV4aXN0ZW5jZSBvZiB0aGF0IHR5cGUgdXNpbmcgdGhlIG5ldworICAgICAgICBXVEY6OmlzX3R5
cGVfY29tcGxldGVfdjw+IHR5cGUgdHJhaXQuICBPdGhlciBPcHRpb25TZXQ8PiBlbnVtcworICAg
ICAgICBmYWxsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHZhbGlkYXRpb24gY2hlY2tzLgorCisgICAg
ICAgIEZpbmFsbHksIHR5cGVuYW1lIDxUPiBpcyBjaGFuZ2VkIHRvIDxFPiBmb3IgT3B0aW9uU2V0
PD4gdG8KKyAgICAgICAgZW1waGFzaXplIHRoYXQgaXQncyBhbiBlbnVtIHR5cGVuYW1lLgorCisg
ICAgICAgICogd3RmL09wdGlvblNldC5oOgorICAgICAgICAoV1RGOjppc190eXBlX2NvbXBsZXRl
X3YpOiBBZGQuCisgICAgICAgIChXVEY6Ok9wdGlvblNldFRyYWl0cyk6IEFkZC4KKyAgICAgICAg
KFdURjo6T3B0aW9uU2V0VmFsdWVzKTogQWRkLgorICAgICAgICAoV1RGOjpPcHRpb25TZXRWYWx1
ZUNoZWNrZXIpOiBBZGQuCisgICAgICAgIChXVEY6OmlzVmFsaWRPcHRpb25TZXRFbnVtKTogQWRk
LgorICAgICAgICAoV1RGOjptYXNrUmF3VmFsdWUpOiBBZGQuCisgICAgICAgIChXVEY6Ok9wdGlv
blNldDo6SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6Ok9wdGlvblNl
dDo6ZnJvbVJhdyk6CisgICAgICAgIChXVEY6Ok9wdGlvblNldDo6T3B0aW9uU2V0KToKKyAgICAg
ICAgKFdURjo6T3B0aW9uU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXVEY6Ok9wdGlv
blNldDxFPjo6YW55KTogQWRkLgorCiAyMDIwLTA1LTIyICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHpl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgV1RGOjppc1ZhbGlkRW51bSgpIGhhcyBhIHR5cG8gaW4g
c3RhdGljX2Fzc2VydCBtYWtpbmcgaXQgYSB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGIxZDI3MzkyNzY0OTM5ZDViMzBlMDY5OTcxODFkNTc3ZWI1MjMxYzYuLjNiZTMwMGQy
MjA0ODJiNDliODJlZjRiZTUzOTIwYjFiY2M5MzU3MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
MiBAQAorMjAyMC0wNS0yMiAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFVzZSBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBmb3IgbWFzayB2YWx1
ZXMKKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMjExNT4KKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzYzNDIzMzgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBpcyB1c2VkIGFzIGJvdGggaW5kaXZp
ZHVhbCB2YWx1ZXMgYW5kIGFzIGEKKyAgICAgICAgYml0IG1hc2suIFRoaXMgY2hhbmdlcyBiaXQg
bWFzayB1c2VzIHRvIE9wdGlvblNldDw+IGFuZCByZW5hbWVzCisgICAgICAgIHZhcmlhYmxlcyB0
byBkZW5vdGUgbWFza3MuCisKKyAgICAgICAgKiBwYWdlL0RyYWdBY3Rpb25zLmg6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAgICAgICAtIENvbnZlcnQgdG8g
ZW51bSBjbGFzcyBhbmQgcmVtb3ZlICpOb25lIGFuZCAqQW55IHZhbHVlcy4KKyAgICAgICAgKFdU
Rjo6T3B0aW9uU2V0VHJhaXRzPFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj4pOgorICAg
ICAgICAtIEFkZCBmb3IgdXNlIHdpdGggT3B0aW9uU2V0PD4uCisgICAgICAgICogcGFnZS9EcmFn
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6cGVyZm9y
bURyYWdPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdF
bnRlcmVkT3JVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlE
b2N1bWVudERyYWcpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRl
RWRpdERyYWcpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFnRGVzdGluYXRpb25BY3Rpb24gY29uc3QpOiBSZW5h
bWUuCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTWFzayBjb25zdCk6CisgICAgICAgIC0gUmVuYW1lIGRyYWdEZXN0aW5hdGlvbkFjdGlvbigp
IHRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFn
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6RHJhZ0RhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6RHJh
Z0RhdGEpOgorICAgICAgICAtIFVzZSBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6
YW55KCkgaW4gcGxhY2Ugb2YgcmVtb3ZlZAorICAgICAgICAgIERyYWdEZXN0aW5hdGlvbkFjdGlv
bkFueS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpkcmFnRGVzdGluYXRpb25BY3Rpb24g
Y29uc3QpOiBSZW5hbWUuCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6ZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uTWFzayBjb25zdCk6CisgICAgICAgIC0gUmVuYW1lIGRyYWdEZXN0aW5hdGlvbkFj
dGlvbigpIHRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKS4KKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjpvcGVyYXRvciA9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9EcmFnRGF0
YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdEYXRhKToKKwogMjAy
MC0wNS0xOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIElE
QlJlcXVlc3REYXRhIGFuZCBJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uIHNob3VsZCBp
bml0aWFsaXplIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIGZpZWxkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRl
ZTFhMDI0ZGQ1ZmVkYzVkZGM3MTRjMjNlYTdlYTliNmJiM2U0ZGYuLmRjZWJlMzljNzZhNGQwYTc2
MzI4NmYxOTJmMjllZmE0YTg5YWUzYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAt
MDUtMjAgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
T3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZm9yIG1hc2sgdmFsdWVzCisgICAgICAg
IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIxMTU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82
MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPERyYWdEYXRhPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxEcmFnRGF0YT46OmRlY29kZSk6CisgICAgICAgIC0gU3dpdGNoIGZyb20gZGVjb2RlRW51bSgp
IGFuZCBlbmNvZGVFbnVtKCkgdG8gbW9kZXJuCisgICAgICAgICAgZXF1aXZhbGVudHMgdGhhdCBj
aGVjayBmb3IgdmFsaWQgZW51bSB2YWx1ZXMuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ2dpbmdFbnRl
cmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdnaW5nVXBkYXRlZCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgZHJhZ0RhdGFGb3JEcm9wU2Vzc2lvbjpkcmFnRGVzdGluYXRp
b25BY3Rpb246XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFn
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1E
cmFnRGVzdGluYXRpb25BY3Rpb24pOgorCiAyMDIwLTA1LTE5ICBQZXIgQXJuZSBWb2xsYW4gIDxw
dm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGaXggbWVzc2FnZSBmaWx0ZXIgc2Fu
ZGJveCB2aW9sYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBhYTBhZGUyMWY1
ZjdjNjI3MzJlMDc0MWIyN2Y3ZWE5YjZjNWU5NzUzLi4wNGZhZjk0ZDU4NTA1Y2M3NDI0NDYwMDA4
NTA3NzFhYmU3ODVlN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMjAtMDUtMjAgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZm9yIG1hc2sgdmFs
dWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTIxMTU+CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW06CisgICAgICAg
IChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbik6CisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdEYXRhRm9y
U2Vzc2lvbjpjbGllbnQ6Z2xvYmFsOm9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBh
Y3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOl0pOgorCiAyMDIwLTA1LTE4ICBEYXZpZCBLaWx6ZXIg
IDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBUZXh0SW5kaWNhdG9yT3B0
aW9ucyB3aXRoIE9wdGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvT3B0aW9uU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaAppbmRl
eCA3MGNiOWVjMWE4ZGRhYjczM2VkMzY2YTc1MGVhMjhhZWQxZjI1NTYxLi5kMThiNzM3ZjBmMjQ2
YThhMDUxMjc5ZjVhMGZmNWEyZjI2NTJjMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9P
cHRpb25TZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25TZXQuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDIxICsz
Myw5NiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorLy8gRGV0ZWN0aW5nIGluIEMrKyB3aGV0aGVy
IGEgdHlwZSBpcyBkZWZpbmVkLCBwYXJ0IDM6IFNGSU5BRSBhbmQgaW5jb21wbGV0ZSB0eXBlcwor
Ly8gPGh0dHBzOi8vZGV2YmxvZ3MubWljcm9zb2Z0LmNvbS9vbGRuZXd0aGluZy8yMDE5MDcxMC0w
MC8/cD0xMDI2Nzg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPgorY29uc3Rl
eHByIGJvb2wgaXNfdHlwZV9jb21wbGV0ZV92ID0gZmFsc2U7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+Citjb25zdGV4cHIgYm9vbCBpc190eXBlX2NvbXBsZXRlX3Y8VCwgc3RkOjp2b2lkX3Q8ZGVj
bHR5cGUoc2l6ZW9mKFQpKT4+ID0gdHJ1ZTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFPiBjbGFz
cyBPcHRpb25TZXQ7CisKKworLy8gT3B0aW9uU2V0VHJhaXRzIGFyZSBsaWtlIEVudW1UcmFpdHMs
IGJ1dCBmb3IgdmFsaWRhdGluZyBPcHRpb25TZXQgdmFsdWVzLgordGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBPcHRpb25TZXRUcmFpdHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0
cnVjdCBPcHRpb25TZXRWYWx1ZXM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEU+
IHN0cnVjdCBPcHRpb25TZXRWYWx1ZUNoZWNrZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEUsIEUgZSwgRS4uLiBlcz4KK3N0cnVjdCBPcHRpb25TZXRWYWx1ZUNoZWNrZXI8VCwg
T3B0aW9uU2V0VmFsdWVzPEUsIGUsIGVzLi4uPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgVCBh
bGxWYWxpZEJpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGUpIHwg
T3B0aW9uU2V0VmFsdWVDaGVja2VyPFQsIE9wdGlvblNldFZhbHVlczxFLCBlcy4uLj4+OjphbGxW
YWxpZEJpdHMoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNWYWxpZE9w
dGlvblNldEVudW0oVCB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDxUPihl
KSA9PSB0KSA/IHRydWUgOiBPcHRpb25TZXRWYWx1ZUNoZWNrZXI8VCwgT3B0aW9uU2V0VmFsdWVz
PEUsIGVzLi4uPj46OmlzVmFsaWRPcHRpb25TZXRFbnVtKHQpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEU+CitzdHJ1Y3QgT3B0aW9uU2V0VmFsdWVDaGVja2Vy
PFQsIE9wdGlvblNldFZhbHVlczxFPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgVCBhbGxWYWxp
ZEJpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzVmFsaWRPcHRpb25TZXRFbnVtKFQpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWUgJiYgaXNfdHlwZV9jb21wbGV0ZV92PE9wdGlv
blNldFRyYWl0czxFPj4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgYm9vbCBpc1ZhbGlkT3B0aW9u
U2V0RW51bShFIGUpCit7CisgICAgcmV0dXJuIE9wdGlvblNldFZhbHVlQ2hlY2tlcjxzdGQ6OnVu
ZGVybHlpbmdfdHlwZV90PEU+LCB0eXBlbmFtZSBPcHRpb25TZXRUcmFpdHM8RT46OnZhbHVlcz46
OmlzVmFsaWRPcHRpb25TZXRFbnVtKHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8
RT4+KGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX2VudW08RT46OnZhbHVlICYmICFpc190eXBlX2NvbXBsZXRlX3Y8T3B0aW9uU2V0VHJhaXRz
PEU+Pj4qID0gbnVsbHB0cj4KK2NvbnN0ZXhwciBib29sIGlzVmFsaWRPcHRpb25TZXRFbnVtKEUg
ZSkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgYWxsIE9wdGlvblNldDw+IGVudW1zIGhh
dmUgT3B0aW9uU2V0VHJhaXRzPD4gZGVmaW5lZC4KKyAgICByZXR1cm4gaGFzT25lQml0U2V0KHN0
YXRpY19jYXN0PHR5cGVuYW1lIE9wdGlvblNldDxFPjo6U3RvcmFnZVR5cGU+KGUpKTsKK30KKwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6
dmFsdWUgJiYgaXNfdHlwZV9jb21wbGV0ZV92PE9wdGlvblNldFRyYWl0czxFPj4+KiA9IG51bGxw
dHI+Citjb25zdGV4cHIgdHlwZW5hbWUgT3B0aW9uU2V0PEU+OjpTdG9yYWdlVHlwZSBtYXNrUmF3
VmFsdWUodHlwZW5hbWUgT3B0aW9uU2V0PEU+OjpTdG9yYWdlVHlwZSByYXdWYWx1ZSkKK3sKKyAg
ICBhdXRvIGFsbFZhbGlkQml0c1ZhbHVlID0gT3B0aW9uU2V0VmFsdWVDaGVja2VyPHN0ZDo6dW5k
ZXJseWluZ190eXBlX3Q8RT4sIHR5cGVuYW1lIE9wdGlvblNldFRyYWl0czxFPjo6dmFsdWVzPjo6
YWxsVmFsaWRCaXRzKCk7CisgICAgcmV0dXJuIHJhd1ZhbHVlICYgYWxsVmFsaWRCaXRzVmFsdWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVt
PEU+Ojp2YWx1ZSAmJiAhaXNfdHlwZV9jb21wbGV0ZV92PE9wdGlvblNldFRyYWl0czxFPj4+KiA9
IG51bGxwdHI+Citjb25zdGV4cHIgdHlwZW5hbWUgT3B0aW9uU2V0PEU+OjpTdG9yYWdlVHlwZSBt
YXNrUmF3VmFsdWUodHlwZW5hbWUgT3B0aW9uU2V0PEU+OjpTdG9yYWdlVHlwZSByYXdWYWx1ZSkK
K3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgYWxsIE9wdGlvblNldDw+IGVudW1zIGhhdmUg
T3B0aW9uU2V0VHJhaXRzPD4gZGVmaW5lZC4KKyAgICByZXR1cm4gcmF3VmFsdWU7Cit9CisKKwog
Ly8gT3B0aW9uU2V0IGlzIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgc2V0IG9mIGVudW1lcmF0
b3JzIGluIGEgc3BhY2UtZWZmaWNpZW50IG1hbm5lci4gVGhlIGVudW1lcmF0b3JzCiAvLyBtdXN0
IGJlIHBvd2VycyBvZiB0d28gZ3JlYXRlciB0aGFuIDAuIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGFz
IGEgcmVwbGFjZW1lbnQgZm9yIHBhc3NpbmcgYSBiaXRtYXNrIG9mCiAvLyBlbnVtZXJhdG9ycyBh
cm91bmQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBPcHRpb25TZXQgewordGVtcGxhdGU8
dHlwZW5hbWUgRT4gY2xhc3MgT3B0aW9uU2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZW51bTxUPjo6dmFsdWUsICJUIGlzIG5vdCBh
biBlbnVtIHR5cGUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZW51bTxFPjo6dmFsdWUs
ICJUIGlzIG5vdCBhbiBlbnVtIHR5cGUiKTsKIAogcHVibGljOgotICAgIHVzaW5nIFN0b3JhZ2VU
eXBlID0gc3RkOjptYWtlX3Vuc2lnbmVkX3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxUPj47Cisg
ICAgdXNpbmcgU3RvcmFnZVR5cGUgPSBzdGQ6Om1ha2VfdW5zaWduZWRfdDxzdGQ6OnVuZGVybHlp
bmdfdHlwZV90PEU+PjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VUeXBlPiBjbGFz
cyBJdGVyYXRvciB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1Ymxp
YzoKICAgICAgICAgLy8gSXNvbGF0ZSB0aGUgcmlnaHRtb3N0IHNldCBiaXQuCi0gICAgICAgIFQg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obV92YWx1ZSAmIC1tX3Zh
bHVlKTsgfQorICAgICAgICBFIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEU+KG1fdmFsdWUgJiAtbV92YWx1ZSk7IH0KIAogICAgICAgICAvLyBJdGVyYXRlcyBmcm9tIHNt
YWxsZXN0IHRvIGxhcmdlc3QgZW51bSB2YWx1ZSBieSB0dXJuaW5nIG9mZiB0aGUgcmlnaHRtb3N0
IHNldCBiaXQuCiAgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKQEAgLTY5LDI5ICsxNDQs
MjUgQEAgcHVibGljOgogICAgIH07CiAgICAgdXNpbmcgaXRlcmF0b3IgPSBJdGVyYXRvcjxTdG9y
YWdlVHlwZT47CiAKLSAgICBzdGF0aWMgY29uc3RleHByIE9wdGlvblNldCBmcm9tUmF3KFN0b3Jh
Z2VUeXBlIHN0b3JhZ2VUeXBlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgT3B0aW9uU2V0IGFueSgp
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQgZnJvbVJhdyhTdG9yYWdlVHlwZSBy
YXdWYWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBPcHRpb25TZXQoc3RhdGljX2Nhc3Q8VD4o
c3RvcmFnZVR5cGUpLCBGcm9tUmF3VmFsdWUpOworICAgICAgICByZXR1cm4gT3B0aW9uU2V0KHN0
YXRpY19jYXN0PEU+KG1hc2tSYXdWYWx1ZTxFPihyYXdWYWx1ZSkpLCBGcm9tUmF3VmFsdWUpOwog
ICAgIH0KIAogICAgIGNvbnN0ZXhwciBPcHRpb25TZXQoKSA9IGRlZmF1bHQ7CiAKLSAgICBjb25z
dGV4cHIgT3B0aW9uU2V0KFQgdCkKLSAgICAgICAgOiBtX3N0b3JhZ2Uoc3RhdGljX2Nhc3Q8U3Rv
cmFnZVR5cGU+KHQpKQorICAgIGNvbnN0ZXhwciBPcHRpb25TZXQoRSBlKQorICAgICAgICA6IG1f
c3RvcmFnZShzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4oZSkpCiAgICAgewotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgLy8gVGhpcyBhc3NlcnRpb24gd2lsbCBjb25mbGljdCB3aXRoIHRoZSBjb25z
dGV4cHIgYXR0cmlidXRlIGlmIHdlIGVuYWJsZSBpdCBvbiBOREVCVUcgYnVpbGRzLgotICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3N0b3JhZ2UgfHwgaGFzT25lQml0U2V0KG1fc3RvcmFn
ZSksICJFbnVtZXJhdG9yIGlzIG5vdCBhIHplcm8gb3IgYSBwb3NpdGl2ZSBwb3dlciBvZiB0d28u
Iik7Ci0jZW5kaWYKKyAgICAgICAgQVNTRVJUKCFtX3N0b3JhZ2UgfHwgaXNWYWxpZE9wdGlvblNl
dEVudW0oZSkpOwogICAgIH0KIAotICAgIGNvbnN0ZXhwciBPcHRpb25TZXQoc3RkOjppbml0aWFs
aXplcl9saXN0PFQ+IGluaXRpYWxpemVyTGlzdCkKKyAgICBjb25zdGV4cHIgT3B0aW9uU2V0KHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxFPiBpbml0aWFsaXplckxpc3QpCiAgICAgewogICAgICAgICBm
b3IgKGF1dG8mIG9wdGlvbiA6IGluaXRpYWxpemVyTGlzdCkgewotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgY29uc3Rl
eHByIGF0dHJpYnV0ZSBpZiB3ZSBlbmFibGUgaXQgb24gTkRFQlVHIGJ1aWxkcy4KLSAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaGFzT25lQml0U2V0KHN0YXRpY19jYXN0PFN0b3JhZ2VU
eXBlPihvcHRpb24pKSwgIkVudW1lcmF0b3IgaXMgbm90IGEgcG9zaXRpdmUgcG93ZXIgb2YgdHdv
LiIpOwotI2VuZGlmCisgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZE9wdGlvblNldEVudW0ob3B0
aW9uKSk7CiAgICAgICAgICAgICBtX3N0b3JhZ2UgfD0gc3RhdGljX2Nhc3Q8U3RvcmFnZVR5cGU+
KG9wdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDUsNyArMTc2LDcgQEAgcHVibGljOgog
CiAgICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhaXNFbXB0
eSgpOyB9CiAKLSAgICBjb25zdGV4cHIgYm9vbCBjb250YWlucyhUIG9wdGlvbikgY29uc3QKKyAg
ICBjb25zdGV4cHIgYm9vbCBjb250YWlucyhFIG9wdGlvbikgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBjb250YWluc0FueShvcHRpb24pOwogICAgIH0KQEAgLTE2MiwxMyArMjMzLDE5IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBlbnVtIEluaXRpYWxpemF0aW9uVGFnIHsgRnJvbVJh
d1ZhbHVlIH07Ci0gICAgY29uc3RleHByIE9wdGlvblNldChUIHQsIEluaXRpYWxpemF0aW9uVGFn
KQotICAgICAgICA6IG1fc3RvcmFnZShzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4odCkpCisgICAg
Y29uc3RleHByIE9wdGlvblNldChFIGUsIEluaXRpYWxpemF0aW9uVGFnKQorICAgICAgICA6IG1f
c3RvcmFnZShzdGF0aWNfY2FzdDxTdG9yYWdlVHlwZT4oZSkpCiAgICAgewogICAgIH0KICAgICBT
dG9yYWdlVHlwZSBtX3N0b3JhZ2UgeyAwIH07CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBFPgor
Y29uc3RleHByIE9wdGlvblNldDxFPiBPcHRpb25TZXQ8RT46OmFueSgpCit7CisgICAgcmV0dXJu
IGZyb21SYXcoT3B0aW9uU2V0VmFsdWVDaGVja2VyPHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8RT4s
IHR5cGVuYW1lIE9wdGlvblNldFRyYWl0czxFPjo6dmFsdWVzPjo6YWxsVmFsaWRCaXRzKCkpOwog
fQogCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogdXNpbmcgV1RGOjpPcHRpb25TZXQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdBY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdBY3Rpb25zLmgKaW5kZXggYjY3NzZiYmQ3NTM4MzYxYzgxMTMwNWYzZDk5MGQ0YjU5
M2QxZjA4Ni4uOTZjMDJiNjZkMGU5NjlmZmU2MDI2Zjc1ZjYwMGRmYjVkYmFmODEwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQWN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0FjdGlvbnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxOCArMjYsMTggQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBXZWJDb3JlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIHNob3Vs
ZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24uCi10eXBlZGVm
IGVudW0gewotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbk5vbmUgICAgPSAwLAotICAgIERyYWdE
ZXN0aW5hdGlvbkFjdGlvbkRIVE1MICAgPSAxLAotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVk
aXQgICAgPSAyLAotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgICAgPSA0LAotICAgIERy
YWdEZXN0aW5hdGlvbkFjdGlvbkFueSAgICAgPSBVSU5UX01BWAotfSBEcmFnRGVzdGluYXRpb25B
Y3Rpb247CisvLyBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gbXVzdCBiZSBrZXB0IGlu
IHN5bmMgd2l0aCBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24gYW5kIFdLRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uLgorZW51bSBjbGFzcyBEcmFnRGVzdGluYXRpb25BY3Rpb24gOiB1aW50OF90IHsKKyAg
ICBESFRNTCA9IDEsCisgICAgRWRpdCAgPSAyLAorICAgIExvYWQgID0gNAorfTsKIAogLy8gV2Vi
Q29yZURyYWdTb3VyY2VBY3Rpb24gc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIFdlYkRyYWdT
b3VyY2VBY3Rpb24uCiB0eXBlZGVmIGVudW0gewpAQCAtODgsNCArODgsMTMgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEcmFnSGFuZGxpbmdNZXRob2Q+IHsKICAgICA+
OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgT3B0aW9uU2V0VHJhaXRzPFdlYkNvcmU6OkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IE9wdGlvblNldFZhbHVlczwK
KyAgICAgICAgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLAorICAgICAgICBXZWJDb3Jl
OjpEcmFnRGVzdGluYXRpb25BY3Rpb246OkRIVE1MLAorICAgICAgICBXZWJDb3JlOjpEcmFnRGVz
dGluYXRpb25BY3Rpb246OkVkaXQsCisgICAgICAgIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFj
dGlvbjo6TG9hZAorICAgID47Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNWNhYzE4MGJmNTdmYmQ1NmVkZTU5ODRjMDk4
NzM5YjkwYmQxZGE4ZS4uZTNhODkwMWE0ODUwYjJlMDAwZGNmZDE0ZmEzOGRjMjhjZDFiNDQ2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTI1NSw4ICsyNTUsOCBA
QCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJhdGlvbihjb25zdCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCiAgICAgaWYgKG1fZG9jdW1lbnRVbmRlck1vdXNlKQogICAgICAgICBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gbV9kb2N1bWVudFVuZGVyTW91c2UtPnNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3lUb1Byb3BhZ2F0ZSgpOwogCi0gICAgaWYgKChtX2RyYWdEZXN0
aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRIVE1MKSAmJiBkcmFnSXNIYW5k
bGVkQnlEb2N1bWVudChtX2RyYWdIYW5kbGluZ01ldGhvZCkpIHsKLSAgICAgICAgY2xpZW50KCku
d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uREhU
TUwsIGRyYWdEYXRhKTsKKyAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzay5jb250
YWlucyhEcmFnRGVzdGluYXRpb25BY3Rpb246OkRIVE1MKSkgJiYgZHJhZ0lzSGFuZGxlZEJ5RG9j
dW1lbnQobV9kcmFnSGFuZGxpbmdNZXRob2QpKSB7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6REhUTUwsIGRy
YWdEYXRhKTsKICAgICAgICAgUmVmPEZyYW1lPiBtYWluRnJhbWUobV9wYWdlLm1haW5GcmFtZSgp
KTsKICAgICAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0ID0gZmFsc2U7CiAgICAgICAgIGlmICht
YWluRnJhbWUtPnZpZXcoKSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBib29sIERyYWdDb250cm9sbGVy
OjpwZXJmb3JtRHJhZ09wZXJhdGlvbihjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uICYgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uRWRpdCkgJiYgY29uY2x1ZGVFZGl0RHJhZyhkcmFnRGF0YSkpIHsKKyAgICBp
ZiAoKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzay5jb250YWlucyhEcmFnRGVzdGluYXRpb25B
Y3Rpb246OkVkaXQpKSAmJiBjb25jbHVkZUVkaXREcmFnKGRyYWdEYXRhKSkgewogICAgICAgICBj
bGllbnQoKS5kaWRDb25jbHVkZUVkaXREcmFnKCk7CiAgICAgICAgIG1fZG9jdW1lbnRVbmRlck1v
dXNlID0gbnVsbHB0cjsKICAgICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsKQEAgLTI4NSw3ICsyODUs
NyBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJhdGlvbihjb25zdCBEcmFn
RGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKHVybFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQsIGRyYWdEYXRhKTsKKyAgICBjbGllbnQoKS53
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246Okxv
YWQsIGRyYWdEYXRhKTsKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QgeyBt
X3BhZ2UubWFpbkZyYW1lKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0cmluZyB9IH07CiAgICAg
ZnJhbWVMb2FkUmVxdWVzdC5zZXRTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwogICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0SXNSZXF1ZXN0
RnJvbUNsaWVudE9yVXNlcklucHV0KCk7CkBAIC0zMDgsMTUgKzMwOCwxNSBAQCBEcmFnT3BlcmF0
aW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZE9yVXBkYXRlZChjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiB7CiAgICAgbW91c2VNb3ZlZEludG9Eb2N1bWVudChtX3BhZ2UubWFpbkZyYW1l
KCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpKTsKIAotICAgIG1f
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID0gZHJhZ0RhdGEuZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7
Ci0gICAgaWYgKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID09IERyYWdEZXN0aW5hdGlvbkFjdGlv
bk5vbmUpIHsKKyAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBkcmFnRGF0YS5kcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrKCk7CisgICAgaWYgKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
TWFzay5pc0VtcHR5KCkpIHsKICAgICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsgLy8gRklYTUU6IFdo
eSBub3QgY2FsbCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG51bGxwdHIpPwogICAgICAgICByZXR1
cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgfQogCiAgICAgRHJhZ09wZXJhdGlvbiBkcmFnT3Bl
cmF0aW9uID0gRHJhZ09wZXJhdGlvbk5vbmU7Ci0gICAgbV9kcmFnSGFuZGxpbmdNZXRob2QgPSB0
cnlEb2N1bWVudERyYWcoZHJhZ0RhdGEsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBkcmFnT3Bl
cmF0aW9uKTsKLSAgICBpZiAobV9kcmFnSGFuZGxpbmdNZXRob2QgPT0gRHJhZ0hhbmRsaW5nTWV0
aG9kOjpOb25lICYmIChtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0aW5hdGlvbkFj
dGlvbkxvYWQpKSB7CisgICAgbV9kcmFnSGFuZGxpbmdNZXRob2QgPSB0cnlEb2N1bWVudERyYWco
ZHJhZ0RhdGEsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzaywgZHJhZ09wZXJhdGlvbik7Cisg
ICAgaWYgKG1fZHJhZ0hhbmRsaW5nTWV0aG9kID09IERyYWdIYW5kbGluZ01ldGhvZDo6Tm9uZSAm
JiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERyYWdEZXN0aW5hdGlvbkFj
dGlvbjo6TG9hZCkpKSB7CiAgICAgICAgIGRyYWdPcGVyYXRpb24gPSBvcGVyYXRpb25Gb3JMb2Fk
KGRyYWdEYXRhKTsKICAgICAgICAgaWYgKGRyYWdPcGVyYXRpb24gIT0gRHJhZ09wZXJhdGlvbk5v
bmUpCiAgICAgICAgICAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9IERyYWdIYW5kbGluZ01ldGhv
ZDo6UGFnZUxvYWQ7CkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6dXBk
YXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzRm9yRHJhZ0hhbmRsaW5nTWV0aG9kKERyYWdIYW4K
IAogI2VuZGlmCiAKLURyYWdIYW5kbGluZ01ldGhvZCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1l
bnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFj
dGlvbk1hc2ssIERyYWdPcGVyYXRpb24mIGRyYWdPcGVyYXRpb24pCitEcmFnSGFuZGxpbmdNZXRo
b2QgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3RpbmF0aW9uQWN0aW9uTWFz
aywgRHJhZ09wZXJhdGlvbiYgZHJhZ09wZXJhdGlvbikKIHsKICAgICBpZiAoIW1fZG9jdW1lbnRV
bmRlck1vdXNlKQogICAgICAgICByZXR1cm4gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lOwpAQCAt
Mzk3LDcgKzM5Nyw3IEBAIERyYWdIYW5kbGluZ01ldGhvZCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9j
dW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgRHJhCiAgICAgICAgIHJldHVybiBE
cmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmU7CiAKICAgICBib29sIGlzSGFuZGxpbmdEcmFnID0gZmFs
c2U7Ci0gICAgaWYgKGFjdGlvbk1hc2sgJiBEcmFnRGVzdGluYXRpb25BY3Rpb25ESFRNTCkgewor
ICAgIGlmIChkZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFpbnMoRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uOjpESFRNTCkpIHsKICAgICAgICAgaXNIYW5kbGluZ0RyYWcgPSB0cnlESFRNTERyYWcoZHJh
Z0RhdGEsIGRyYWdPcGVyYXRpb24pOwogICAgICAgICAvLyBEbyBub3QgY29udGludWUgaWYgbV9k
b2N1bWVudFVuZGVyTW91c2UgaGFzIGJlZW4gcmVzZXQgYnkgdHJ5REhUTUxEcmFnLgogICAgICAg
ICAvLyB0cnlESFRNTERyYWcgZmlyZXMgZHJhZ2VudGVyIGV2ZW50LiBUaGUgZXZlbnQgbGlzdGVu
ZXIgdGhhdCBsaXN0ZW5zCkBAIC00MjAsNyArNDIwLDcgQEAgRHJhZ0hhbmRsaW5nTWV0aG9kIERy
YWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBE
cmEKICAgICAgICAgcmV0dXJuIERyYWdIYW5kbGluZ01ldGhvZDo6Tm9uRGVmYXVsdDsKICAgICB9
CiAKLSAgICBpZiAoKGFjdGlvbk1hc2sgJiBEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0KSAmJiBj
YW5Qcm9jZXNzRHJhZyhkcmFnRGF0YSkpIHsKKyAgICBpZiAoZGVzdGluYXRpb25BY3Rpb25NYXNr
LmNvbnRhaW5zKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCkgJiYgY2FuUHJvY2Vzc0RyYWco
ZHJhZ0RhdGEpKSB7CiAgICAgICAgIGlmIChkcmFnRGF0YS5jb250YWluc0NvbG9yKCkpIHsKICAg
ICAgICAgICAgIGRyYWdPcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9uR2VuZXJpYzsKICAgICAgICAg
ICAgIHJldHVybiBEcmFnSGFuZGxpbmdNZXRob2Q6OlNldENvbG9yOwpAQCAtNTY5LDcgKzU2OSw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwg
Y29sb3Iuc2VyaWFsaXplZCgpLCBmYWxzZSk7CiAgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRp
dG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKGlubmVy
UmFuZ2UpLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2xpZW50
KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
RWRpdCwgZHJhZ0RhdGEpOworICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKICAgICAg
ICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgRWRpdEFjdGlv
bjo6U2V0Q29sb3IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02MDUsNyArNjA1
LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCiAgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJbnNl
cnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOworICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9y
bURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdE
YXRhKTsKIAogICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+
cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlz
TW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMSw3ICs2MzEsNyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKICAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4
dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBjbGllbnQo
KS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25F
ZGl0LCBkcmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwogICAgICAg
ICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2Uo
KnJhbmdlKSwgdGV4dCk7CiAgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNs
aWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggMWNmNjY1MmZkMThkMDkwMWUyYWUzMTE0NWU5NWVl
ZDRhMTVkYjM3NS4uNDUxZGQ1OGM1ZTNjNWM3ZjFlM2NiMjg1YjAyZTE5ZTZkODViN2NkNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw3ICs3OSw3IEBAIHN0cnVj
dCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwogICAgICAgICBEcmFnSGFuZGxpbmdNZXRob2QgZHJh
Z0hhbmRsaW5nTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnSGFuZGxpbmdNZXRob2Q7IH0K
IAogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnRVbmRlck1vdXNlKCkgY29uc3QgeyByZXR1cm4g
bV9kb2N1bWVudFVuZGVyTW91c2UuZ2V0KCk7IH0KLSAgICAgICAgRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uIGRyYWdEZXN0aW5hdGlvbkFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uOyB9CisgICAgICAgIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRy
YWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKSBjb25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2s7IH0KICAgICAgICAgRHJhZ1NvdXJjZUFjdGlvbiBkZWxlZ2F0ZURyYWdTb3Vy
Y2VBY3Rpb24oY29uc3QgSW50UG9pbnQmIHJvb3RWaWV3UG9pbnQpOwogICAgICAgICAKICAgICAg
ICAgRWxlbWVudCogZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSosIEVsZW1lbnQqIHN0YXJ0
LCBjb25zdCBJbnRQb2ludCYsIERyYWdTdGF0ZSYpIGNvbnN0OwpAQCAtMTA4LDcgKzEwOCw3IEBA
IHN0cnVjdCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwogICAgICAgICBib29sIGNvbmNsdWRlRWRp
dERyYWcoY29uc3QgRHJhZ0RhdGEmKTsKICAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnRW50ZXJl
ZE9yVXBkYXRlZChjb25zdCBEcmFnRGF0YSYpOwogICAgICAgICBEcmFnT3BlcmF0aW9uIG9wZXJh
dGlvbkZvckxvYWQoY29uc3QgRHJhZ0RhdGEmKTsKLSAgICAgICAgRHJhZ0hhbmRsaW5nTWV0aG9k
IHRyeURvY3VtZW50RHJhZyhjb25zdCBEcmFnRGF0YSYsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
RHJhZ09wZXJhdGlvbiYpOworICAgICAgICBEcmFnSGFuZGxpbmdNZXRob2QgdHJ5RG9jdW1lbnRE
cmFnKGNvbnN0IERyYWdEYXRhJiwgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4sIERy
YWdPcGVyYXRpb24mKTsKICAgICAgICAgYm9vbCB0cnlESFRNTERyYWcoY29uc3QgRHJhZ0RhdGEm
LCBEcmFnT3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihj
b25zdCBEcmFnRGF0YSYpOwogICAgICAgICB2b2lkIGNsZWFyRHJhZ0NhcmV0KCk7CkBAIC0xNDks
NyArMTQ5LDcgQEAgc3RydWN0IFByb21pc2VkQXR0YWNobWVudEluZm87CiAgICAgICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCB7IDAgfTsKICAgICAgICAgRHJhZ0hhbmRs
aW5nTWV0aG9kIG1fZHJhZ0hhbmRsaW5nTWV0aG9kIHsgRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25l
IH07CiAKLSAgICAgICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uIHsgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSB9OworICAgICAgICBPcHRpb25TZXQ8RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uPiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7CiAgICAgICAg
IERyYWdTb3VyY2VBY3Rpb24gbV9kcmFnU291cmNlQWN0aW9uIHsgRHJhZ1NvdXJjZUFjdGlvbk5v
bmUgfTsKICAgICAgICAgYm9vbCBtX2RpZEluaXRpYXRlRHJhZyB7IGZhbHNlIH07CiAgICAgICAg
IERyYWdPcGVyYXRpb24gbV9zb3VyY2VEcmFnT3BlcmF0aW9uIHsgRHJhZ09wZXJhdGlvbk5vbmUg
fTsgLy8gU2V0IGluIHN0YXJ0RHJhZyB3aGVuIGEgZHJhZyBzdGFydHMgZnJvbSBhIG1vdXNlIGRv
d24gd2l0aGluIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCmluZGV4IGI0
MjhjMzczOTNmZWNkNGExYTg4MDU4MGZlZDY4ZWI5YmNlNGM0YTAuLjhmNjc1NWY1NzYxYTE0NTRl
OWI0MDYwMDJlMDg4NDNjNmI3MTg4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDIzICszMiwyMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQotRHJhZ0RhdGE6OkRyYWdEYXRhKERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBv
aW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFn
T3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdz
LCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJh
Z0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBj
b25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0
aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGlu
YXRpb25BY3Rpb24+IGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRp
b24oY2xpZW50UG9zaXRpb24pCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9u
KQogICAgICwgbV9wbGF0Zm9ybURyYWdEYXRhKGRhdGEpCiAgICAgLCBtX2RyYWdnaW5nU291cmNl
T3BlcmF0aW9uTWFzayhzb3VyY2VPcGVyYXRpb25NYXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZs
YWdzKGZsYWdzKQotICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rp
b24pCisgICAgLCBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25N
YXNrKQogeyAgCiB9CiAKLURyYWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBJ
bnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwg
RHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFncyBm
bGFncywgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9uQWN0aW9uKQorRHJhZ0RhdGE6
OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwg
Y29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJh
dGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uPiBkZXN0aW5hdGlvbkFjdGlvbk1hc2spCiAgICAgOiBtX2NsaWVudFBvc2l0
aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlv
bikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YSgwKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9w
ZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKICAgICAsIG1fYXBwbGljYXRpb25GbGFn
cyhmbGFncykKLSAgICAsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9u
KQorICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0aW9uTWFz
aykKIHsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggZTkzMDk1
ZmM3YjJhMGIxMzZkNDY2MTZkMDIyMGNjZWJhMzk5YTAzNC4uYzAwYjM4MGEwOWMzOGZjNzg4MTMy
ZThmZDRjMjM4ZGNmZDQ2MTgxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC03NCwxMSArNzUsMTEgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRHJhZ2dpbmdQdXJw
b3NlIHsgRm9yRWRpdGluZywgRm9yRmlsZVVwbG9hZCwgRm9yQ29sb3JDb250cm9sIH07CiAKICAg
ICAvLyBjbGllbnRQb3NpdGlvbiBpcyB0YWtlbiB0byBiZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRy
YWcgZXZlbnQgd2l0aGluIHRoZSB0YXJnZXQgd2luZG93LCB3aXRoICgwLDApIGF0IHRoZSB0b3Ag
bGVmdAotICAgIFdFQkNPUkVfRVhQT1JUIERyYWdEYXRhKERyYWdEYXRhUmVmLCBjb25zdCBJbnRQ
b2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJh
Z09wZXJhdGlvbiwgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgPSBEcmFnQXBwbGljYXRpb25Ob25lLCBE
cmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9ucyA9IERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5h
bWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2Jh
bFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uLCBEcmFnQXBwbGljYXRpb25GbGFncyA9IERyYWdBcHBs
aWNhdGlvbk5vbmUsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25zID0gRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uQW55KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmFnRGF0YShEcmFnRGF0YVJlZiwg
Y29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9z
aXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxpY2F0
aW9uTm9uZSwgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gYWN0aW9uTWFzayA9IE9w
dGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+OjphbnkoKSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IEludFBvaW50
JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3Bl
cmF0aW9uLCBEcmFnQXBwbGljYXRpb25GbGFncyA9IERyYWdBcHBsaWNhdGlvbk5vbmUsIE9wdGlv
blNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGFjdGlvbk1hc2sgPSBPcHRpb25TZXQ8RHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uPjo6YW55KCkpOwogICAgIC8vIFRoaXMgY29uc3RydWN0b3Igc2hvdWxk
IHVzZWQgb25seSBieSBXZWJLaXQyIElQQyBiZWNhdXNlIERyYWdEYXRhCiAgICAgLy8gaXMgaW5p
dGlhbGl6ZWQgYnkgdGhlIGRlY29kZXIgYW5kIG5vdCBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAg
RHJhZ0RhdGEoKSB7IH0KKyAgICBEcmFnRGF0YSgpID0gZGVmYXVsdDsKICNpZiBQTEFURk9STShX
SU4pCiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhZ0RhdGEoY29uc3QgRHJhZ0RhdGFNYXAmLCBjb25z
dCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlv
biwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRpb25GbGFn
cyA9IERyYWdBcHBsaWNhdGlvbk5vbmUpOwogICAgIGNvbnN0IERyYWdEYXRhTWFwJiBkcmFnRGF0
YU1hcCgpOwpAQCAtMTAxLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zQ29s
b3IoKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zRmlsZXMoKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBudW1iZXJPZkZpbGVzKCkgY29uc3Q7Ci0gICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRyYWdE
ZXN0aW5hdGlvbkFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
OyB9CisgICAgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzazsg
fQogICAgIHZvaWQgc2V0RmlsZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmaWxlTmFtZXMpIHsgbV9m
aWxlTmFtZXMgPSBXVEZNb3ZlKGZpbGVOYW1lcyk7IH0KICAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZU5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZXM7IH0KICNpZiBQTEFURk9S
TShDT0NPQSkKQEAgLTExOSw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGxhdGZvcm1E
cmFnRGF0YSA9IGRhdGEubV9wbGF0Zm9ybURyYWdEYXRhOwogICAgICAgICBtX2RyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFzayA9IGRhdGEubV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2s7CiAg
ICAgICAgIG1fYXBwbGljYXRpb25GbGFncyA9IGRhdGEubV9hcHBsaWNhdGlvbkZsYWdzOwotICAg
ICAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiA9IGRhdGEubV9kcmFnRGVzdGluYXRpb25BY3Rp
b247CisgICAgICAgIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayA9IGRhdGEubV9kcmFnRGVz
dGluYXRpb25BY3Rpb25NYXNrOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogI2VuZGlm
CkBAIC0xMzEsNyArMTMyLDcgQEAgcHJpdmF0ZToKICAgICBEcmFnT3BlcmF0aW9uIG1fZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrOwogICAgIERyYWdBcHBsaWNhdGlvbkZsYWdzIG1fYXBwbGlj
YXRpb25GbGFnczsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVOYW1lczsKLSAgICBEcmFnRGVz
dGluYXRpb25BY3Rpb24gbV9kcmFnRGVzdGluYXRpb25BY3Rpb247CisgICAgT3B0aW9uU2V0PERy
YWdEZXN0aW5hdGlvbkFjdGlvbj4gbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrOwogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIFN0cmluZyBtX3Bhc3RlYm9hcmROYW1lOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnRGF0YUNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0RhdGFDb2NvYS5tbQppbmRleCBhMzZm
NGNkMGU5Nzg5YjU1YjAxODMyZmIxOWMxMDA2MWE3YjExOGNkLi45Y2NhZmMwY2Q3YTgzNmU2Yzkx
ZTFmMjMzZTE4OTBiMzM4YTRkMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9EcmFnRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL0RyYWdEYXRhQ29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE2LDEzICsxMTYsMTMgQEAgc3RhdGljIGlubGlu
ZSBTdHJpbmcgdGlmZlBhc3RlYm9hcmRUeXBlKCkKICNlbmRpZgogfQogCi1EcmFnRGF0YTo6RHJh
Z0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBj
b25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0
aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIERyYWdEZXN0aW5hdGlvbkFjdGlv
biBkZXN0aW5hdGlvbkFjdGlvbikKK0RyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRh
LCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQ
b3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBwbGljYXRp
b25GbGFncyBmbGFncywgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZGVzdGluYXRp
b25BY3Rpb25NYXNrKQogICAgIDogbV9jbGllbnRQb3NpdGlvbihjbGllbnRQb3NpdGlvbikKICAg
ICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCiAgICAgLCBtX3BsYXRmb3JtRHJh
Z0RhdGEoZGF0YSkKICAgICAsIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKHNvdXJjZU9w
ZXJhdGlvbk1hc2spCiAgICAgLCBtX2FwcGxpY2F0aW9uRmxhZ3MoZmxhZ3MpCi0gICAgLCBtX2Ry
YWdEZXN0aW5hdGlvbkFjdGlvbihkZXN0aW5hdGlvbkFjdGlvbikKKyAgICAsIG1fZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTWFzayhkZXN0aW5hdGlvbkFjdGlvbk1hc2spCiAjaWYgUExBVEZPUk0oTUFD
KQogICAgICwgbV9wYXN0ZWJvYXJkTmFtZShbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bh
c3RlYm9hcmRdIG5hbWVdKQogI2Vsc2UKQEAgLTEzMSwxMyArMTMxLDEzIEBAIERyYWdEYXRhOjpE
cmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24s
IGNvbnN0IEludFBvCiB7CiB9CiAKLURyYWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJpbmcmIGRy
YWdTdG9yYWdlTmFtZSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywg
RHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBkZXN0aW5h
dGlvbkFjdGlvbikKK0RyYWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdl
TmFtZSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xv
YmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxp
Y2F0aW9uRmxhZ3MgZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3Rp
bmF0aW9uQWN0aW9uTWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24p
CiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0Zm9y
bURyYWdEYXRhKDApCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3VyY2VP
cGVyYXRpb25NYXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQotICAgICwgbV9k
cmFnRGVzdGluYXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCisgICAgLCBtX2RyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25NYXNrKQogICAgICwgbV9wYXN0ZWJv
YXJkTmFtZShkcmFnU3RvcmFnZU5hbWUpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBkOWViYjFiMjNmZDNhMTg4ZjJhODA1Yjk3
NTQzMTRmMDhhMGJiNjc1Li5jMjk3NmZkYWNiNjJhZDhlZjY0MjYwYTQ4ZTk0ZjcwMzVlNDRiM2I2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
QEAgLTE2MTUsNyArMTYxNSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgZW5jb2Rl
ciA8PCBkcmFnRGF0YS5wYXN0ZWJvYXJkTmFtZSgpOwogICAgIGVuY29kZXIgPDwgZHJhZ0RhdGEu
ZmlsZU5hbWVzKCk7CiAjZW5kaWYKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oZHJhZ0RhdGEuZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKCkpOworICAgIGVuY29kZXIgPDwgZHJhZ0RhdGEuZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTWFzaygpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRHJhZ0RhdGEmIGRyYWdEYXRhKQpAQCAtMTY0NiwxMSAr
MTY0NiwxMSBAQCBib29sIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKIAotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBkZXN0aW5hdGlvbkFjdGlvbjsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bShkZXN0aW5hdGlvbkFjdGlvbikpCisgICAgT3B0aW9uU2V0
PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzazsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2spKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBkcmFnRGF0YSA9IERyYWdEYXRhKHBhc3RlYm9hcmROYW1lLCBj
bGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aywgYXBwbGljYXRpb25GbGFncywgZGVzdGluYXRpb25BY3Rpb24pOworICAgIGRyYWdEYXRhID0g
RHJhZ0RhdGEocGFzdGVib2FyZE5hbWUsIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwg
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBhcHBsaWNhdGlvbkZsYWdzLCBkcmFnRGVzdGlu
YXRpb25BY3Rpb25NYXNrKTsKICAgICBkcmFnRGF0YS5zZXRGaWxlTmFtZXMoZmlsZU5hbWVzKTsK
IAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5tbQppbmRleCAxZDYzYmMwNTEyNjJhYTc3ODVjN2VlZDkzNjAzNTUyN2Q2ODgxYTgy
Li42NWQwMGVmODA5OGRjYzY4Y2EwYjM0NTRmNjNlNzA0MDIzNmYzYWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5NDIsOCArMzk0Miw4
IEBAIE5TRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ2dpbmdFbnRlcmVkKGlkIDxOU0Ry
YWdnaW5nSW5mbz4gZHJhZ2dpbmdJbmZvKQogewogICAgIFdlYkNvcmU6OkludFBvaW50IGNsaWVu
dChbbV92aWV3IGNvbnZlcnRQb2ludDpkcmFnZ2luZ0luZm8uZHJhZ2dpbmdMb2NhdGlvbiBmcm9t
VmlldzpuaWxdKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWwoV2ViQ29yZTo6Z2xvYmFs
UG9pbnQoZHJhZ2dpbmdJbmZvLmRyYWdnaW5nTG9jYXRpb24sIFttX3ZpZXcgd2luZG93XSkpOwot
ICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uPihbbV92aWV3IF93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9y
RHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOwotICAgIFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdE
YXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkRy
YWdPcGVyYXRpb24+KGRyYWdnaW5nSW5mby5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2spLCBh
cHBsaWNhdGlvbkZsYWdzRm9yRHJhZyhtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCksIGRyYWdnaW5n
SW5mbyksIGRyYWdEZXN0aW5hdGlvbkFjdGlvbik7CisgICAgYXV0byBkcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrID0gT3B0aW9uU2V0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmZy
b21SYXcoW21fdmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5nSW5mbzpk
cmFnZ2luZ0luZm9dKTsKKyAgICBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0lu
Zm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihk
cmFnZ2luZ0luZm8uZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKSwgYXBwbGljYXRpb25GbGFn
c0ZvckRyYWcobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpLCBkcmFnZ2luZ0luZm8pLCBkcmFnRGVz
dGluYXRpb25BY3Rpb25NYXNrKTsKIAogICAgIG1fcGFnZS0+cmVzZXRDdXJyZW50RHJhZ0luZm9y
bWF0aW9uKCk7CiAgICAgbV9wYWdlLT5kcmFnRW50ZXJlZChkcmFnRGF0YSwgZHJhZ2dpbmdJbmZv
LmRyYWdnaW5nUGFzdGVib2FyZC5uYW1lKTsKQEAgLTM5NTUsOCArMzk1NSw4IEBAIE5TRHJhZ09w
ZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ2dpbmdVcGRhdGVkKGlkIDxOU0RyYWdnaW5nSW5mbz4g
ZHJhZ2dpbmdJbmZvKQogewogICAgIFdlYkNvcmU6OkludFBvaW50IGNsaWVudChbbV92aWV3IGNv
bnZlcnRQb2ludDpkcmFnZ2luZ0luZm8uZHJhZ2dpbmdMb2NhdGlvbiBmcm9tVmlldzpuaWxdKTsK
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWwoV2ViQ29yZTo6Z2xvYmFsUG9pbnQoZHJhZ2dp
bmdJbmZvLmRyYWdnaW5nTG9jYXRpb24sIFttX3ZpZXcgd2luZG93XSkpOwotICAgIGF1dG8gZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uPihbbV92aWV3IF93ZWJfZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJhZ2dpbmdJbmZv
OmRyYWdnaW5nSW5mb10pOwotICAgIFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5n
SW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdPcGVyYXRpb24+
KGRyYWdnaW5nSW5mby5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2spLCBhcHBsaWNhdGlvbkZs
YWdzRm9yRHJhZyhtX3ZpZXcuZ2V0QXV0b3JlbGVhc2VkKCksIGRyYWdnaW5nSW5mbyksIGRyYWdE
ZXN0aW5hdGlvbkFjdGlvbik7CisgICAgYXV0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrID0g
T3B0aW9uU2V0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmZyb21SYXcoW21fdmll
dyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9d
KTsKKyAgICBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwg
Z2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihkcmFnZ2luZ0luZm8u
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKSwgYXBwbGljYXRpb25GbGFnc0ZvckRyYWcobV92
aWV3LmdldEF1dG9yZWxlYXNlZCgpLCBkcmFnZ2luZ0luZm8pLCBkcmFnRGVzdGluYXRpb25BY3Rp
b25NYXNrKTsKICAgICBtX3BhZ2UtPmRyYWdVcGRhdGVkKGRyYWdEYXRhLCBkcmFnZ2luZ0luZm8u
ZHJhZ2dpbmdQYXN0ZWJvYXJkLm5hbWUpOwogCiAgICAgTlNJbnRlZ2VyIG51bWJlck9mVmFsaWRJ
dGVtc0ZvckRyb3AgPSBtX3BhZ2UtPmN1cnJlbnREcmFnTnVtYmVyT2ZGaWxlc1RvQmVBY2NlcHRl
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggODVlNmU2YTQ0YzA5NTI0Y2M5NTE4OGNhOTM5Njg1MGJj
Y2UxZmQwMy4uMGUwMGY0NTUyNTFkNzhhZDRhOWM0NGQ0NzNlMDJiN2YxODhjODU2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzMwNSw3ICs3MzA1LDggQEAgLSAoV2ViQ29yZTo6RHJhZ0RhdGEpZHJh
Z0RhdGFGb3JEcm9wU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24gZHJhZ0Rlc3QK
ICAgICBbc2VsZiBjb21wdXRlQ2xpZW50QW5kR2xvYmFsUG9pbnRzRm9yRHJvcFNlc3Npb246c2Vz
c2lvbiBvdXRDbGllbnRQb2ludDomY2xpZW50IG91dEdsb2JhbFBvaW50OiZnbG9iYWxdOwogCiAg
ICAgV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uTWFzayA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkRyYWdPcGVyYXRpb24+KHNlc3Npb24uYWxsb3dzTW92ZU9wZXJhdGlvbiA/IFdl
YkNvcmU6OkRyYWdPcGVyYXRpb25FdmVyeSA6IChXZWJDb3JlOjpEcmFnT3BlcmF0aW9uRXZlcnkg
JiB+V2ViQ29yZTo6RHJhZ09wZXJhdGlvbk1vdmUpKTsKLSAgICByZXR1cm4geyBzZXNzaW9uLCBX
ZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoY2xpZW50KSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50
KGdsb2JhbCksIGRyYWdPcGVyYXRpb25NYXNrLCBXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25Ob25l
LCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+KGRyYWdEZXN0aW5h
dGlvbkFjdGlvbikgfTsKKyAgICBhdXRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBPcHRp
b25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6ZnJvbVJhdyhkcmFnRGVzdGlu
YXRpb25BY3Rpb24pOworICAgIHJldHVybiB7IHNlc3Npb24sIFdlYkNvcmU6OnJvdW5kZWRJbnRQ
b2ludChjbGllbnQpLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoZ2xvYmFsKSwgZHJhZ09wZXJh
dGlvbk1hc2ssIFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbk5vbmUsIGRyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2sgfTsKIH0KIAogLSAodm9pZCljbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRy
YWdDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuY3BwCmluZGV4IDFhOWE0ZTlhY2Q4MDY2MDRjNTI3NmI3YTIzYTEyNzFhOTlm
NDUwNjMuLjgxYjc5YTc3Yzg3ZTBhZGUxNjZhMDg2ZjQ1NjQ2YWViZGI5M2M4YjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdm9p
ZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb24gYWN0aW9uLCBjb25zdCBEcmFnRGF0YSYpCiB7Ci0gICAgaWYgKGFjdGlv
biA9PSBEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkKQorICAgIGlmIChhY3Rpb24gPT0gRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uOjpMb2FkKQogICAgICAgICBtX3BhZ2UtPndpbGxQZXJmb3JtTG9hZERy
YWdEZXN0aW5hdGlvbkFjdGlvbigpOwogICAgIGVsc2UKICAgICAgICAgbV9wYWdlLT5tYXlQZXJm
b3JtVXBsb2FkRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7IC8vIFVwbG9hZCBjYW4gaGFwcGVuIGZy
b20gYSBkcm9wIGV2ZW50IGhhbmRsZXIsIHNvIHdlIHNob3VsZCBwcmVwYXJlIGVhcmx5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdD
bGllbnQubW0KaW5kZXggNDI3OGIwMzQyZjlhMWEwYWFiYTNlOTQyMzViNmM4MGE1NzBkODYwNy4u
NGJiZTgxN2ExNDcxZWNiY2VjNGI0MDliZDYyOGU4ZTY1M2Q2NmIxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1t
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIFdlYkhUTUxWaWV3ICpnZXRUb3BIVE1MVmlldyhG
cmFtZSogZnJhbWUpCiAKIHZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgY29uc3Qg
V2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlv
bkFjdGlvbjooV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFjdGlvbiBmb3JEcmFnZ2luZ0luZm86
ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCldOworICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bjpzdGF0aWNfY2FzdDxXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24+KGFjdGlvbikgZm9yRHJhZ2dp
bmdJbmZvOmRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpXTsKIH0KIAogCkBAIC0yMTQsNyArMjE0LDcg
QEAgYm9vbCBXZWJEcmFnQ2xpZW50Ojp1c2VMZWdhY3lEcmFnQ2xpZW50KCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlv
bkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIGNvbnN0IERyYWdEYXRhJikKK3ZvaWQgV2Vi
RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLCBjb25zdCBEcmFnRGF0YSYpCiB7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBmZGNiYTRlZjBhNmNhYzQ3N2Nk
Y2U5ZjQ3NmIyZWQ1NGYyYzRlYzdlLi42ZGE5MzFhNzAwZDFkNmMwNTFmYjRlYjMzZDZjYTdlZDQz
YjliYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBA
IC0xOTA4LDcgKzE5MDgsNyBAQCAtIChXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24pZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTWFza0ZvclNlc3Npb246KGlkIDxVSURyb3BTZXNzaQogLSAoV2ViQ29yZTo6
RHJhZ0RhdGEpZHJhZ0RhdGFGb3JTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBj
bGllbnQ6KENHUG9pbnQpY2xpZW50UG9zaXRpb24gZ2xvYmFsOihDR1BvaW50KWdsb2JhbFBvc2l0
aW9uIG9wZXJhdGlvbjoodWludDY0X3Qpb3BlcmF0aW9uCiB7CiAgICAgYXV0byBkcmFnT3BlcmF0
aW9uTWFzayA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdPcGVyYXRpb24+KG9wZXJhdGlvbik7
Ci0gICAgYXV0byBkcmFnRGVzdGluYXRpb25NYXNrID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uPihbc2VsZiBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yU2Vz
c2lvbjpzZXNzaW9uXSk7CisgICAgYXV0byBkcmFnRGVzdGluYXRpb25NYXNrID0gT3B0aW9uU2V0
PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmZyb21SYXcoW3NlbGYgZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTWFza0ZvclNlc3Npb246c2Vzc2lvbl0pOwogICAgIHJldHVybiB7IHNlc3Np
b24sIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChjbGllbnRQb3NpdGlvbiksIFdlYkNvcmU6OnJv
dW5kZWRJbnRQb2ludChnbG9iYWxQb3NpdGlvbiksIGRyYWdPcGVyYXRpb25NYXNrLCBXZWJDb3Jl
OjpEcmFnQXBwbGljYXRpb25Ob25lLCBkcmFnRGVzdGluYXRpb25NYXNrIH07CiB9CiAKQEAgLTY3
MjAsOSArNjcyMCw5IEBAIC0gKFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdzKWFwcGxpY2F0
aW9uRmxhZ3M6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdzPihmbGFncyk7CiB9CiAKLS0gKFdl
YkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbilhY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOihp
ZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworLSAoT3B0aW9uU2V0PFdlYkNvcmU6OkRy
YWdEZXN0aW5hdGlvbkFjdGlvbj4pYWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzooaWQgPE5TRHJh
Z2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKLSAgICByZXR1cm4gKFdlYkNvcmU6OkRyYWdEZXN0
aW5hdGlvbkFjdGlvbilbW3NlbGYgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBk
cmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb107Cisg
ICAgcmV0dXJuIE9wdGlvblNldDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9t
UmF3KFtbc2VsZiBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpzZWxmIGRyYWdEZXN0aW5h
dGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXSk7CiB9CiAKIC0gKE5T
RHJhZ09wZXJhdGlvbilkcmFnZ2luZ0VudGVyZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dp
bmdJbmZvCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400294</attachid>
            <date>2020-05-26 19:05:56 -0700</date>
            <delta_ts>2020-05-27 03:23:21 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>bug-212115-20200526190731.patch</filename>
            <type>text/plain</type>
            <size>33344</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMDk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk2OTRhMGJjNTFkOWQ3
MWMyMmQ0NTVmMTZiMDI0OGJhYTM2M2ZlNC4uNjFiNDkxYzM1NWIxNzYxN2U2M2NmNjg3ODU4NDhk
ODZhMTY5NjY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIwLTA1LTI2ICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE9wdGlvblNldDxE
cmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBtYXNrIHZhbHVlcworICAgICAgICA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjM0MjMzODA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uIGlzIHVzZWQgYXMgYm90aCBpbmRpdmlkdWFsIHZhbHVlcyBhbmQgYXMgYQor
ICAgICAgICBiaXQgbWFzay4gVGhpcyBjaGFuZ2VzIGJpdCBtYXNrIHVzZXMgdG8gT3B0aW9uU2V0
PD4gYW5kIHJlbmFtZXMKKyAgICAgICAgdmFyaWFibGVzIHRvIGRlbm90ZSBtYXNrcy4KKworICAg
ICAgICAqIHBhZ2UvRHJhZ0FjdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbik6CisgICAgICAgIC0gQ29udmVydCB0byBlbnVtIGNsYXNzIGFuZCByZW1vdmUg
Kk5vbmUgYW5kICpBbnkgdmFsdWVzLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uQW55KToKKyAgICAgICAgLSBBZGQgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBPcHRp
b25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPgorICAgICAgICAgIHdpdGggYWxsIHZhbHVlcyBz
ZXQuCisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgorICAgICAgICAqIHBhZ2UvRHJhZ0Nv
bnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFnRGVzdGlu
YXRpb25BY3Rpb24gY29uc3QpOiBSZW5hbWUuCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayBjb25zdCk6CisgICAgICAgIC0gUmVuYW1l
IGRyYWdEZXN0aW5hdGlvbkFjdGlvbigpIHRvIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6RHJhZ0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6RHJhZ0RhdGEpOgorICAgICAgICAtIFVzZSBEcmFnRGVzdGlu
YXRpb25BY3Rpb25BbnkoKSBpbiBwbGFjZSBvZiByZW1vdmVkCisgICAgICAgICAgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uQW55LgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmRyYWdEZXN0aW5h
dGlvbkFjdGlvbiBjb25zdCk6IFJlbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpk
cmFnRGVzdGluYXRpb25BY3Rpb25NYXNrIGNvbnN0KToKKyAgICAgICAgLSBSZW5hbWUgZHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKCkgdG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzaygpLgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0RhdGE6Om9wZXJhdG9yID0pOgorICAgICAgICAqIHBsYXRmb3JtL2Nv
Y29hL0RyYWdEYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6RHJhZ0Rh
dGEpOgorCiAyMDIwLTA1LTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0xGQ11bVEZDXSBOb24tY29sbGFwc2luZyByb3cgYm9yZGVyIHNob3VsZCBub3QgbWFr
ZSB0aGUgdGFibGUgd2lkZXIvdGFsbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU2MDU2YmZjYzg0NDg1ODdkNzcz
MmU3YzFmNWUwZjRjYTQ0YTgxNDkuLmVmYzM4YmQ1NTcwZDA0N2IwNDE1NTgxYjM0MTUyNTVlMjZk
MDViMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDUtMjYgIERhdmlkIEtpbHpl
ciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgT3B0aW9uU2V0PERyYWdEZXN0
aW5hdGlvbkFjdGlvbj4gZm9yIG1hc2sgdmFsdWVzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMTIxMTU+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzQyMzM4MD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPERyYWdEYXRh
Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmRlY29k
ZSk6CisgICAgICAgIC0gU3dpdGNoIGZyb20gZGVjb2RlRW51bSgpIGFuZCBlbmNvZGVFbnVtKCkg
dG8gbW9kZXJuCisgICAgICAgICAgZXF1aXZhbGVudHMgdGhhdCBjaGVjayBmb3IgdmFsaWQgZW51
bSB2YWx1ZXMuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ2dpbmdFbnRlcmVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRyYWdnaW5nVXBkYXRlZCk6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgZHJhZ0RhdGFGb3JEcm9wU2Vzc2lvbjpkcmFnRGVzdGluYXRpb25BY3Rpb246XSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rp
b24pOgorCiAyMDIwLTA1LTIyICBKYW1lcyBTYXZhZ2UgIDxqYW1lcy5zYXZhZ2VAYXBwbGUuY29t
PgogCiAgICAgICAgIENyZWF0ZSBTd2lmdCBvdmVybGF5IGZvciBXZWJLaXQgZnJhbWV3b3JrCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYmRlYTkwZDJkNGQ5Nzc5ODk2Y2M1OGNlYmNh
MmExMGU3ODBiYmNiYy4uYTA1MzMxNDAyMmEwNDE5NmM5Y2RhOTNjZDUzMGEzYTI0NDI0ZWQwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA1LTI2
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE9wdGlv
blNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGZvciBtYXNrIHZhbHVlcworICAgICAgICA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMjEyMTE1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjM0MjMz
ODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6
d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBkcmFnRGF0YUZvclNlc3Npb246Y2xpZW50Omds
b2JhbDpvcGVyYXRpb246XSk6CisgICAgICAgICgtW1dlYlZpZXcgYWN0aW9uTWFza0ZvckRyYWdn
aW5nSW5mbzpdKToKKwogMjAyMC0wNS0yMSAgUGlua2kgR3lhbmNoYW5kYW5pICA8cGd5YW5jaGFu
ZGFuaUBhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBQdHIgRGVyZWYgQCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdBY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdBY3Rpb25zLmgK
aW5kZXggYjY3NzZiYmQ3NTM4MzYxYzgxMTMwNWYzZDk5MGQ0YjU5M2QxZjA4Ni4uMjQ5ZjJiNzg5
ZjZiZjM1MWQwNThhMDhjZjc0Y2RlNjlkZDEyYzg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQWN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0FjdGlv
bnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwxOCArMjYsMjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8bGlt
aXRzLmg+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0vLyBXZWJDb3JlRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIHNob3VsZCBiZSBrZXB0IGluIHN5bmMg
d2l0aCBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24uCi10eXBlZGVmIGVudW0gewotICAgIERyYWdE
ZXN0aW5hdGlvbkFjdGlvbk5vbmUgICAgPSAwLAotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRI
VE1MICAgPSAxLAotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQgICAgPSAyLAotICAgIERy
YWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQgICAgPSA0LAotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlv
bkFueSAgICAgPSBVSU5UX01BWAotfSBEcmFnRGVzdGluYXRpb25BY3Rpb247CisvLyBXZWJDb3Jl
OjpEcmFnRGVzdGluYXRpb25BY3Rpb24gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBXZWJEcmFn
RGVzdGluYXRpb25BY3Rpb24gYW5kIFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLgorZW51bSBjbGFz
cyBEcmFnRGVzdGluYXRpb25BY3Rpb24gOiB1aW50OF90IHsKKyAgICBESFRNTCA9IDEsCisgICAg
RWRpdCAgPSAyLAorICAgIExvYWQgID0gNAorfTsKKworaW5saW5lIGNvbnN0ZXhwciBPcHRpb25T
ZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBEcmFnRGVzdGluYXRpb25BY3Rpb25BbnkoKQorewor
ICAgIHJldHVybiBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiB7IERyYWdEZXN0aW5h
dGlvbkFjdGlvbjo6REhUTUwsIERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uOjpMb2FkIH07Cit9CiAKIC8vIFdlYkNvcmVEcmFnU291cmNlQWN0aW9uIHNo
b3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBXZWJEcmFnU291cmNlQWN0aW9uLgogdHlwZWRlZiBl
bnVtIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNWNhYzE4MGJm
NTdmYmQ1NmVkZTU5ODRjMDk4NzM5YjkwYmQxZGE4ZS4uZTNhODkwMWE0ODUwYjJlMDAwZGNmZDE0
ZmEzOGRjMjhjZDFiNDQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
QEAgLTI1NSw4ICsyNTUsOCBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJh
dGlvbihjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKG1fZG9jdW1lbnRVbmRlck1v
dXNlKQogICAgICAgICBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gbV9kb2N1bWVudFVu
ZGVyTW91c2UtPnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3lUb1Byb3BhZ2F0ZSgpOwogCi0g
ICAgaWYgKChtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRI
VE1MKSAmJiBkcmFnSXNIYW5kbGVkQnlEb2N1bWVudChtX2RyYWdIYW5kbGluZ01ldGhvZCkpIHsK
LSAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uREhUTUwsIGRyYWdEYXRhKTsKKyAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uTWFzay5jb250YWlucyhEcmFnRGVzdGluYXRpb25BY3Rpb246OkRIVE1MKSkgJiYg
ZHJhZ0lzSGFuZGxlZEJ5RG9jdW1lbnQobV9kcmFnSGFuZGxpbmdNZXRob2QpKSB7CisgICAgICAg
IGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbjo6REhUTUwsIGRyYWdEYXRhKTsKICAgICAgICAgUmVmPEZyYW1lPiBtYWluRnJhbWUo
bV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0ID0gZmFs
c2U7CiAgICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXcoKSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJhdGlvbihjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCkgJiYgY29uY2x1ZGVFZGl0RHJhZyhk
cmFnRGF0YSkpIHsKKyAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzay5jb250YWlu
cyhEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQpKSAmJiBjb25jbHVkZUVkaXREcmFnKGRyYWdE
YXRhKSkgewogICAgICAgICBjbGllbnQoKS5kaWRDb25jbHVkZUVkaXREcmFnKCk7CiAgICAgICAg
IG1fZG9jdW1lbnRVbmRlck1vdXNlID0gbnVsbHB0cjsKICAgICAgICAgY2xlYXJEcmFnQ2FyZXQo
KTsKQEAgLTI4NSw3ICsyODUsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09w
ZXJhdGlvbihjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKHVybFN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNsaWVudCgpLndpbGxQZXJmb3Jt
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQsIGRyYWdEYXRh
KTsKKyAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb246OkxvYWQsIGRyYWdEYXRhKTsKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lTG9hZFJlcXVlc3QgeyBtX3BhZ2UubWFpbkZyYW1lKCksIFJlc291cmNlUmVxdWVzdCB7IHVy
bFN0cmluZyB9IH07CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5KHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwogICAgIGZyYW1lTG9hZFJl
cXVlc3Quc2V0SXNSZXF1ZXN0RnJvbUNsaWVudE9yVXNlcklucHV0KCk7CkBAIC0zMDgsMTUgKzMw
OCwxNSBAQCBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZE9yVXBkYXRl
ZChjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgbW91c2VNb3ZlZEludG9Eb2N1bWVu
dChtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLmNsaWVudFBvc2l0
aW9uKCkpKTsKIAotICAgIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID0gZHJhZ0RhdGEuZHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKCk7Ci0gICAgaWYgKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID09IERy
YWdEZXN0aW5hdGlvbkFjdGlvbk5vbmUpIHsKKyAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1h
c2sgPSBkcmFnRGF0YS5kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKCk7CisgICAgaWYgKG1fZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTWFzay5pc0VtcHR5KCkpIHsKICAgICAgICAgY2xlYXJEcmFnQ2Fy
ZXQoKTsgLy8gRklYTUU6IFdoeSBub3QgY2FsbCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG51bGxw
dHIpPwogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgfQogCiAgICAgRHJh
Z09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uID0gRHJhZ09wZXJhdGlvbk5vbmU7Ci0gICAgbV9kcmFn
SGFuZGxpbmdNZXRob2QgPSB0cnlEb2N1bWVudERyYWcoZHJhZ0RhdGEsIG1fZHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uLCBkcmFnT3BlcmF0aW9uKTsKLSAgICBpZiAobV9kcmFnSGFuZGxpbmdNZXRob2Qg
PT0gRHJhZ0hhbmRsaW5nTWV0aG9kOjpOb25lICYmIChtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiAm
IERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQpKSB7CisgICAgbV9kcmFnSGFuZGxpbmdNZXRob2Qg
PSB0cnlEb2N1bWVudERyYWcoZHJhZ0RhdGEsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzaywg
ZHJhZ09wZXJhdGlvbik7CisgICAgaWYgKG1fZHJhZ0hhbmRsaW5nTWV0aG9kID09IERyYWdIYW5k
bGluZ01ldGhvZDo6Tm9uZSAmJiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5z
KERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6TG9hZCkpKSB7CiAgICAgICAgIGRyYWdPcGVyYXRpb24g
PSBvcGVyYXRpb25Gb3JMb2FkKGRyYWdEYXRhKTsKICAgICAgICAgaWYgKGRyYWdPcGVyYXRpb24g
IT0gRHJhZ09wZXJhdGlvbk5vbmUpCiAgICAgICAgICAgICBtX2RyYWdIYW5kbGluZ01ldGhvZCA9
IERyYWdIYW5kbGluZ01ldGhvZDo6UGFnZUxvYWQ7CkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBE
cmFnQ29udHJvbGxlcjo6dXBkYXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzRm9yRHJhZ0hhbmRs
aW5nTWV0aG9kKERyYWdIYW4KIAogI2VuZGlmCiAKLURyYWdIYW5kbGluZ01ldGhvZCBEcmFnQ29u
dHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2ssIERyYWdPcGVyYXRpb24mIGRyYWdPcGVyYXRpb24p
CitEcmFnSGFuZGxpbmdNZXRob2QgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhjb25z
dCBEcmFnRGF0YSYgZHJhZ0RhdGEsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRl
c3RpbmF0aW9uQWN0aW9uTWFzaywgRHJhZ09wZXJhdGlvbiYgZHJhZ09wZXJhdGlvbikKIHsKICAg
ICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlKQogICAgICAgICByZXR1cm4gRHJhZ0hhbmRsaW5n
TWV0aG9kOjpOb25lOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIERyYWdIYW5kbGluZ01ldGhvZCBEcmFn
Q29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgRHJh
CiAgICAgICAgIHJldHVybiBEcmFnSGFuZGxpbmdNZXRob2Q6Ok5vbmU7CiAKICAgICBib29sIGlz
SGFuZGxpbmdEcmFnID0gZmFsc2U7Ci0gICAgaWYgKGFjdGlvbk1hc2sgJiBEcmFnRGVzdGluYXRp
b25BY3Rpb25ESFRNTCkgeworICAgIGlmIChkZXN0aW5hdGlvbkFjdGlvbk1hc2suY29udGFpbnMo
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpESFRNTCkpIHsKICAgICAgICAgaXNIYW5kbGluZ0RyYWcg
PSB0cnlESFRNTERyYWcoZHJhZ0RhdGEsIGRyYWdPcGVyYXRpb24pOwogICAgICAgICAvLyBEbyBu
b3QgY29udGludWUgaWYgbV9kb2N1bWVudFVuZGVyTW91c2UgaGFzIGJlZW4gcmVzZXQgYnkgdHJ5
REhUTUxEcmFnLgogICAgICAgICAvLyB0cnlESFRNTERyYWcgZmlyZXMgZHJhZ2VudGVyIGV2ZW50
LiBUaGUgZXZlbnQgbGlzdGVuZXIgdGhhdCBsaXN0ZW5zCkBAIC00MjAsNyArNDIwLDcgQEAgRHJh
Z0hhbmRsaW5nTWV0aG9kIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoY29uc3QgRHJh
Z0RhdGEmIGRyYWdEYXRhLCBEcmEKICAgICAgICAgcmV0dXJuIERyYWdIYW5kbGluZ01ldGhvZDo6
Tm9uRGVmYXVsdDsKICAgICB9CiAKLSAgICBpZiAoKGFjdGlvbk1hc2sgJiBEcmFnRGVzdGluYXRp
b25BY3Rpb25FZGl0KSAmJiBjYW5Qcm9jZXNzRHJhZyhkcmFnRGF0YSkpIHsKKyAgICBpZiAoZGVz
dGluYXRpb25BY3Rpb25NYXNrLmNvbnRhaW5zKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCkg
JiYgY2FuUHJvY2Vzc0RyYWcoZHJhZ0RhdGEpKSB7CiAgICAgICAgIGlmIChkcmFnRGF0YS5jb250
YWluc0NvbG9yKCkpIHsKICAgICAgICAgICAgIGRyYWdPcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9u
R2VuZXJpYzsKICAgICAgICAgICAgIHJldHVybiBEcmFnSGFuZGxpbmdNZXRob2Q6OlNldENvbG9y
OwpAQCAtNTY5LDcgKzU2OSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlDb2xvciwgY29sb3Iuc2VyaWFsaXplZCgpLCBmYWxzZSk7CiAgICAgICAgIGlm
ICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3Jl
YXRlTGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOworICAgICAgICBjbGllbnQoKS53aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQs
IGRyYWdEYXRhKTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHls
ZS5wdHIoKSwgRWRpdEFjdGlvbjo6U2V0Q29sb3IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC02MDUsNyArNjA1LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0
RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIGlmICghZnJhZ21lbnQgfHwg
IWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOworICAgICAgICBj
bGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25B
Y3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKIAogICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYm
IGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYz
MSw3ICs2MzEsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFlZGl0
b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CisgICAgICAgIGNsaWVudCgpLndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwg
ZHJhZ0RhdGEpOwogICAgICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCk7CiAgICAgICAgIGlmIChlZGl0b3IuY2xp
ZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0
KCksIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKaW5kZXggMWNmNjY1MmZkMThk
MDkwMWUyYWUzMTE0NWU5NWVlZDRhMTVkYjM3NS4uNDUxZGQ1OGM1ZTNjNWM3ZjFlM2NiMjg1YjAy
ZTE5ZTZkODViN2NkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
OSw3ICs3OSw3IEBAIHN0cnVjdCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwogICAgICAgICBEcmFn
SGFuZGxpbmdNZXRob2QgZHJhZ0hhbmRsaW5nTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kcmFn
SGFuZGxpbmdNZXRob2Q7IH0KIAogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnRVbmRlck1vdXNl
KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UuZ2V0KCk7IH0KLSAgICAgICAg
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRyYWdEZXN0aW5hdGlvbkFjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOyB9CisgICAgICAgIE9wdGlvblNldDxEcmFnRGVz
dGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2soKSBjb25zdCB7IHJldHVy
biBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7IH0KICAgICAgICAgRHJhZ1NvdXJjZUFjdGlv
biBkZWxlZ2F0ZURyYWdTb3VyY2VBY3Rpb24oY29uc3QgSW50UG9pbnQmIHJvb3RWaWV3UG9pbnQp
OwogICAgICAgICAKICAgICAgICAgRWxlbWVudCogZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFt
ZSosIEVsZW1lbnQqIHN0YXJ0LCBjb25zdCBJbnRQb2ludCYsIERyYWdTdGF0ZSYpIGNvbnN0OwpA
QCAtMTA4LDcgKzEwOCw3IEBAIHN0cnVjdCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwogICAgICAg
ICBib29sIGNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmKTsKICAgICAgICAgRHJhZ09w
ZXJhdGlvbiBkcmFnRW50ZXJlZE9yVXBkYXRlZChjb25zdCBEcmFnRGF0YSYpOwogICAgICAgICBE
cmFnT3BlcmF0aW9uIG9wZXJhdGlvbkZvckxvYWQoY29uc3QgRHJhZ0RhdGEmKTsKLSAgICAgICAg
RHJhZ0hhbmRsaW5nTWV0aG9kIHRyeURvY3VtZW50RHJhZyhjb25zdCBEcmFnRGF0YSYsIERyYWdE
ZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ09wZXJhdGlvbiYpOworICAgICAgICBEcmFnSGFuZGxpbmdN
ZXRob2QgdHJ5RG9jdW1lbnREcmFnKGNvbnN0IERyYWdEYXRhJiwgT3B0aW9uU2V0PERyYWdEZXN0
aW5hdGlvbkFjdGlvbj4sIERyYWdPcGVyYXRpb24mKTsKICAgICAgICAgYm9vbCB0cnlESFRNTERy
YWcoY29uc3QgRHJhZ0RhdGEmLCBEcmFnT3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRp
b24gZHJhZ09wZXJhdGlvbihjb25zdCBEcmFnRGF0YSYpOwogICAgICAgICB2b2lkIGNsZWFyRHJh
Z0NhcmV0KCk7CkBAIC0xNDksNyArMTQ5LDcgQEAgc3RydWN0IFByb21pc2VkQXR0YWNobWVudElu
Zm87CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCB7IDAgfTsK
ICAgICAgICAgRHJhZ0hhbmRsaW5nTWV0aG9kIG1fZHJhZ0hhbmRsaW5nTWV0aG9kIHsgRHJhZ0hh
bmRsaW5nTWV0aG9kOjpOb25lIH07CiAKLSAgICAgICAgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIG1f
ZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIHsgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSB9OworICAg
ICAgICBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBtX2RyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2s7CiAgICAgICAgIERyYWdTb3VyY2VBY3Rpb24gbV9kcmFnU291cmNlQWN0aW9uIHsg
RHJhZ1NvdXJjZUFjdGlvbk5vbmUgfTsKICAgICAgICAgYm9vbCBtX2RpZEluaXRpYXRlRHJhZyB7
IGZhbHNlIH07CiAgICAgICAgIERyYWdPcGVyYXRpb24gbV9zb3VyY2VEcmFnT3BlcmF0aW9uIHsg
RHJhZ09wZXJhdGlvbk5vbmUgfTsgLy8gU2V0IGluIHN0YXJ0RHJhZyB3aGVuIGEgZHJhZyBzdGFy
dHMgZnJvbSBhIG1vdXNlIGRvd24gd2l0aGluIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwCmluZGV4IGI0MjhjMzczOTNmZWNkNGExYTg4MDU4MGZlZDY4ZWI5YmNlNGM0YTAu
LjhmNjc1NWY1NzYxYTE0NTRlOWI0MDYwMDJlMDg4NDNjNmI3MTg4N2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnRGF0YS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDIzICszMiwyMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotRHJhZ0RhdGE6OkRyYWdEYXRhKERyYWdEYXRhUmVm
IGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGds
b2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBs
aWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rp
b24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQm
IGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVy
YXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MsIE9w
dGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKICAg
ICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24pCiAgICAgLCBtX2dsb2JhbFBvc2l0
aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0Zm9ybURyYWdEYXRhKGRhdGEpCiAgICAg
LCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3VyY2VPcGVyYXRpb25NYXNrKQogICAg
ICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQotICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rp
b24oZGVzdGluYXRpb25BY3Rpb24pCisgICAgLCBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2so
ZGVzdGluYXRpb25BY3Rpb25NYXNrKQogeyAgCiB9CiAKLURyYWdEYXRhOjpEcmFnRGF0YShjb25z
dCBTdHJpbmcmLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFn
QXBwbGljYXRpb25GbGFncyBmbGFncywgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGRlc3RpbmF0aW9u
QWN0aW9uKQorRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFBvaW50
JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3Bl
cmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBP
cHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkZXN0aW5hdGlvbkFjdGlvbk1hc2spCiAg
ICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3Np
dGlvbihnbG9iYWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YSgwKQogICAgICwg
bV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKICAgICAs
IG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAsIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKGRl
c3RpbmF0aW9uQWN0aW9uTWFzaykKIHsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdE
YXRhLmgKaW5kZXggZTkzMDk1ZmM3YjJhMGIxMzZkNDY2MTZkMDIyMGNjZWJhMzk5YTAzNC4uNjUx
MDE4NzBjMTk5YWFhYmRmMTkwZDdkNmI0NWU2OTQzOGQ5ZGJiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC03NCwxMSArNzUsMTEgQEAgcHVibGljOgogICAgIGVudW0g
Y2xhc3MgRHJhZ2dpbmdQdXJwb3NlIHsgRm9yRWRpdGluZywgRm9yRmlsZVVwbG9hZCwgRm9yQ29s
b3JDb250cm9sIH07CiAKICAgICAvLyBjbGllbnRQb3NpdGlvbiBpcyB0YWtlbiB0byBiZSB0aGUg
cG9zaXRpb24gb2YgdGhlIGRyYWcgZXZlbnQgd2l0aGluIHRoZSB0YXJnZXQgd2luZG93LCB3aXRo
ICgwLDApIGF0IHRoZSB0b3AgbGVmdAotICAgIFdFQkNPUkVfRVhQT1JUIERyYWdEYXRhKERyYWdE
YXRhUmVmLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBn
bG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiwgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgPSBEcmFn
QXBwbGljYXRpb25Ob25lLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9ucyA9IERyYWdEZXN0
aW5hdGlvbkFjdGlvbkFueSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhZ0RhdGEoY29uc3QgU3Ry
aW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uLCBEcmFnQXBwbGljYXRp
b25GbGFncyA9IERyYWdBcHBsaWNhdGlvbk5vbmUsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rp
b25zID0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmFn
RGF0YShEcmFnRGF0YVJlZiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZs
YWdzID0gRHJhZ0FwcGxpY2F0aW9uTm9uZSwgT3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlv
bj4gYWN0aW9uTWFzayA9IERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueSgpKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBEcmFnRGF0YShjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgSW50
UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERy
YWdPcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uTm9uZSwg
T3B0aW9uU2V0PERyYWdEZXN0aW5hdGlvbkFjdGlvbj4gYWN0aW9uTWFzayA9IERyYWdEZXN0aW5h
dGlvbkFjdGlvbkFueSgpKTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCB1c2VkIG9u
bHkgYnkgV2ViS2l0MiBJUEMgYmVjYXVzZSBEcmFnRGF0YQogICAgIC8vIGlzIGluaXRpYWxpemVk
IGJ5IHRoZSBkZWNvZGVyIGFuZCBub3QgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgIERyYWdEYXRh
KCkgeyB9CisgICAgRHJhZ0RhdGEoKSA9IGRlZmF1bHQ7CiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IFdFQkNPUkVfRVhQT1JUIERyYWdEYXRhKGNvbnN0IERyYWdEYXRhTWFwJiwgY29uc3QgSW50UG9p
bnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdP
cGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgPSBEcmFn
QXBwbGljYXRpb25Ob25lKTsKICAgICBjb25zdCBEcmFnRGF0YU1hcCYgZHJhZ0RhdGFNYXAoKTsK
QEAgLTEwMSw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc0NvbG9yKCkgY29u
c3Q7CiAgICAgYm9vbCBjb250YWluc0ZpbGVzKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZGaWxlcygpIGNvbnN0OwotICAgIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBkcmFnRGVzdGluYXRp
b25BY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbjsgfQorICAg
IE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1h
c2soKSBjb25zdCB7IHJldHVybiBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7IH0KICAgICB2
b2lkIHNldEZpbGVOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZmlsZU5hbWVzKSB7IG1fZmlsZU5hbWVz
ID0gV1RGTW92ZShmaWxlTmFtZXMpOyB9CiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVO
YW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWVzOyB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CkBAIC0xMTksNyArMTIwLDcgQEAgcHVibGljOgogICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEg
PSBkYXRhLm1fcGxhdGZvcm1EcmFnRGF0YTsKICAgICAgICAgbV9kcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2sgPSBkYXRhLm1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrOwogICAgICAgICBt
X2FwcGxpY2F0aW9uRmxhZ3MgPSBkYXRhLm1fYXBwbGljYXRpb25GbGFnczsKLSAgICAgICAgbV9k
cmFnRGVzdGluYXRpb25BY3Rpb24gPSBkYXRhLm1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOworICAg
ICAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2sgPSBkYXRhLm1fZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uTWFzazsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICNlbmRpZgpAQCAtMTMx
LDcgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgRHJhZ09wZXJhdGlvbiBtX2RyYWdnaW5nU291cmNl
T3BlcmF0aW9uTWFzazsKICAgICBEcmFnQXBwbGljYXRpb25GbGFncyBtX2FwcGxpY2F0aW9uRmxh
Z3M7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9maWxlTmFtZXM7Ci0gICAgRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOworICAgIE9wdGlvblNldDxEcmFnRGVzdGlu
YXRpb25BY3Rpb24+IG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzazsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBTdHJpbmcgbV9wYXN0ZWJvYXJkTmFtZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0RhdGFDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdEYXRhQ29jb2EubW0KaW5kZXggYTM2ZjRjZDBlOTc4
OWI1NWIwMTgzMmZiMTljMTAwNjFhN2IxMThjZC4uOWNjYWZjMGNkN2E4MzZlNmM5MWUxZjIzM2Ux
ODkwYjMzOGE0ZDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
RHJhZ0RhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFn
RGF0YUNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExNiwxMyArMTE2LDEzIEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5n
IHRpZmZQYXN0ZWJvYXJkVHlwZSgpCiAjZW5kaWYKIH0KIAotRHJhZ0RhdGE6OkRyYWdEYXRhKERy
YWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ss
IERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGlu
YXRpb25BY3Rpb24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoRHJhZ0RhdGFSZWYgZGF0YSwgY29uc3Qg
SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24s
IERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3Mg
ZmxhZ3MsIE9wdGlvblNldDxEcmFnRGVzdGluYXRpb25BY3Rpb24+IGRlc3RpbmF0aW9uQWN0aW9u
TWFzaykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRpb24pCiAgICAgLCBtX2ds
b2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0Zm9ybURyYWdEYXRhKGRh
dGEpCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3VyY2VPcGVyYXRpb25N
YXNrKQogICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQotICAgICwgbV9kcmFnRGVzdGlu
YXRpb25BY3Rpb24oZGVzdGluYXRpb25BY3Rpb24pCisgICAgLCBtX2RyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2soZGVzdGluYXRpb25BY3Rpb25NYXNrKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAs
IG1fcGFzdGVib2FyZE5hbWUoW1ttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJk
XSBuYW1lXSkKICNlbHNlCkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBEcmFnRGF0YTo6RHJhZ0RhdGEo
RHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJ
bnRQbwogewogfQogCi1EcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFn
ZU5hbWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGds
b2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBs
aWNhdGlvbkZsYWdzIGZsYWdzLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rp
b24pCitEcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNv
bnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0
aW9uLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBsaWNhdGlvbkZs
YWdzIGZsYWdzLCBPcHRpb25TZXQ8RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPiBkZXN0aW5hdGlvbkFj
dGlvbk1hc2spCiAgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwg
bV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0
YSgwKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9u
TWFzaykKICAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFncykKLSAgICAsIG1fZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKGRlc3RpbmF0aW9uQWN0aW9uKQorICAgICwgbV9kcmFnRGVzdGluYXRpb25B
Y3Rpb25NYXNrKGRlc3RpbmF0aW9uQWN0aW9uTWFzaykKICAgICAsIG1fcGFzdGVib2FyZE5hbWUo
ZHJhZ1N0b3JhZ2VOYW1lKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKaW5kZXggMGNmNGNlYzYxOGE2NWZhZGY1NThiNzk2ZWVlMzExYTkz
Y2YwMjk0Mi4uZDQ0MzgxMTI5Zjk5NzViMTkzMWI5NDY0Mzk5NmI4ZGFjZjY1ZjQ5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0xNTM3
LDcgKzE1MzcsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGVuY29kZXIgPDwgZHJh
Z0RhdGEucGFzdGVib2FyZE5hbWUoKTsKICAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLmZpbGVOYW1l
cygpOwogI2VuZGlmCi0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKGRyYWdEYXRhLmRyYWdEZXN0aW5h
dGlvbkFjdGlvbigpKTsKKyAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLmRyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2soKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIERyYWdEYXRhJiBkcmFnRGF0YSkKQEAgLTE1NjgsMTEgKzE1NjgsMTEg
QEAgYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAg
ICBEcmFnRGVzdGluYXRpb25BY3Rpb24gZGVzdGluYXRpb25BY3Rpb247Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0oZGVzdGluYXRpb25BY3Rpb24pKQorICAgIE9wdGlvblNldDxEcmFnRGVz
dGluYXRpb25BY3Rpb24+IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2s7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgZHJhZ0RhdGEgPSBEcmFnRGF0YShwYXN0ZWJvYXJkTmFtZSwgY2xpZW50UG9z
aXRpb24sIGdsb2JhbFBvc2l0aW9uLCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGFwcGxp
Y2F0aW9uRmxhZ3MsIGRlc3RpbmF0aW9uQWN0aW9uKTsKKyAgICBkcmFnRGF0YSA9IERyYWdEYXRh
KHBhc3RlYm9hcmROYW1lLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaywgYXBwbGljYXRpb25GbGFncywgZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTWFzayk7CiAgICAgZHJhZ0RhdGEuc2V0RmlsZU5hbWVzKGZpbGVOYW1lcyk7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0KaW5kZXggMWYyMWRmMTIxNmI1ZmFmOGE0OWUzM2NmNzhlOGNlY2RmNDQwOGFjMi4uMjQyMWFi
ODIzYzYxMzZlNmMxNzY2ZTZhZmQ3NDZjOGNlNzNlODc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTQ1LDggKzM5NDUsOCBAQCBOU0Ry
YWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdnaW5nRW50ZXJlZChpZCA8TlNEcmFnZ2luZ0lu
Zm8+IGRyYWdnaW5nSW5mbykKIHsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnQoW21fdmll
dyBjb252ZXJ0UG9pbnQ6ZHJhZ2dpbmdJbmZvLmRyYWdnaW5nTG9jYXRpb24gZnJvbVZpZXc6bmls
XSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsKFdlYkNvcmU6Omdsb2JhbFBvaW50KGRy
YWdnaW5nSW5mby5kcmFnZ2luZ0xvY2F0aW9uLCBbbV92aWV3IHdpbmRvd10pKTsKLSAgICBhdXRv
IGRyYWdEZXN0aW5hdGlvbkFjdGlvbiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbj4oW21fdmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5n
SW5mbzpkcmFnZ2luZ0luZm9dKTsKLSAgICBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YShkcmFn
Z2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0
aW9uPihkcmFnZ2luZ0luZm8uZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKSwgYXBwbGljYXRp
b25GbGFnc0ZvckRyYWcobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpLCBkcmFnZ2luZ0luZm8pLCBk
cmFnRGVzdGluYXRpb25BY3Rpb24pOworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFz
ayA9IE9wdGlvblNldDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9tUmF3KFtt
X3ZpZXcgX3dlYl9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJ
bmZvXSk7CisgICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGll
bnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oZHJhZ2dpbmdJ
bmZvLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFn
KG1fdmlldy5nZXRBdXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uTWFzayk7CiAKICAgICBtX3BhZ2UtPnJlc2V0Q3VycmVudERyYWdJbmZvcm1hdGlvbigp
OwogICAgIG1fcGFnZS0+ZHJhZ0VudGVyZWQoZHJhZ0RhdGEsIGRyYWdnaW5nSW5mby5kcmFnZ2lu
Z1Bhc3RlYm9hcmQubmFtZSk7CkBAIC0zOTU4LDggKzM5NTgsOCBAQCBOU0RyYWdPcGVyYXRpb24g
V2ViVmlld0ltcGw6OmRyYWdnaW5nVXBkYXRlZChpZCA8TlNEcmFnZ2luZ0luZm8+IGRyYWdnaW5n
SW5mbykKIHsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnQoW21fdmlldyBjb252ZXJ0UG9p
bnQ6ZHJhZ2dpbmdJbmZvLmRyYWdnaW5nTG9jYXRpb24gZnJvbVZpZXc6bmlsXSk7CiAgICAgV2Vi
Q29yZTo6SW50UG9pbnQgZ2xvYmFsKFdlYkNvcmU6Omdsb2JhbFBvaW50KGRyYWdnaW5nSW5mby5k
cmFnZ2luZ0xvY2F0aW9uLCBbbV92aWV3IHdpbmRvd10pKTsKLSAgICBhdXRvIGRyYWdEZXN0aW5h
dGlvbkFjdGlvbiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj4o
W21fdmlldyBfd2ViX2RyYWdEZXN0aW5hdGlvbkFjdGlvbkZvckRyYWdnaW5nSW5mbzpkcmFnZ2lu
Z0luZm9dKTsKLSAgICBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNs
aWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihkcmFnZ2lu
Z0luZm8uZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKSwgYXBwbGljYXRpb25GbGFnc0ZvckRy
YWcobV92aWV3LmdldEF1dG9yZWxlYXNlZCgpLCBkcmFnZ2luZ0luZm8pLCBkcmFnRGVzdGluYXRp
b25BY3Rpb24pOworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayA9IE9wdGlvblNl
dDxXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9tUmF3KFttX3ZpZXcgX3dlYl9k
cmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXSk7CisgICAg
V2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwg
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oZHJhZ2dpbmdJbmZvLmRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzayksIGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFnKG1fdmlldy5nZXRB
dXRvcmVsZWFzZWQoKSwgZHJhZ2dpbmdJbmZvKSwgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFzayk7
CiAgICAgbV9wYWdlLT5kcmFnVXBkYXRlZChkcmFnRGF0YSwgZHJhZ2dpbmdJbmZvLmRyYWdnaW5n
UGFzdGVib2FyZC5uYW1lKTsKIAogICAgIE5TSW50ZWdlciBudW1iZXJPZlZhbGlkSXRlbXNGb3JE
cm9wID0gbV9wYWdlLT5jdXJyZW50RHJhZ051bWJlck9mRmlsZXNUb0JlQWNjZXB0ZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCmluZGV4IGRjMTkyYTljOWE5MThhMzk0MDJjOTAzZTBhNmQ4OTE4NDRhMzBiNGUu
LmUzNmVkYzJmN2ZjN2M1MTJmNTkwYzYyNGJiNGQyYzcwZjkwMjA0YzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTczMTEsNyArNzMxMSw4IEBAIC0gKFdlYkNvcmU6OkRyYWdEYXRhKWRyYWdEYXRhRm9y
RHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIGRyYWdEZXN0CiAgICAgW3Nl
bGYgY29tcHV0ZUNsaWVudEFuZEdsb2JhbFBvaW50c0ZvckRyb3BTZXNzaW9uOnNlc3Npb24gb3V0
Q2xpZW50UG9pbnQ6JmNsaWVudCBvdXRHbG9iYWxQb2ludDomZ2xvYmFsXTsKIAogICAgIFdlYkNv
cmU6OkRyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbk1hc2sgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpEcmFnT3BlcmF0aW9uPihzZXNzaW9uLmFsbG93c01vdmVPcGVyYXRpb24gPyBXZWJDb3JlOjpE
cmFnT3BlcmF0aW9uRXZlcnkgOiAoV2ViQ29yZTo6RHJhZ09wZXJhdGlvbkV2ZXJ5ICYgfldlYkNv
cmU6OkRyYWdPcGVyYXRpb25Nb3ZlKSk7Ci0gICAgcmV0dXJuIHsgc2Vzc2lvbiwgV2ViQ29yZTo6
cm91bmRlZEludFBvaW50KGNsaWVudCksIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChnbG9iYWwp
LCBkcmFnT3BlcmF0aW9uTWFzaywgV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uTm9uZSwgc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPihkcmFnRGVzdGluYXRpb25BY3Rp
b24pIH07CisgICAgYXV0byBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrID0gT3B0aW9uU2V0PFdl
YkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbj46OmZyb21SYXcoZHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKTsKKyAgICByZXR1cm4geyBzZXNzaW9uLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQoY2xp
ZW50KSwgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KGdsb2JhbCksIGRyYWdPcGVyYXRpb25NYXNr
LCBXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25Ob25lLCBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNr
IH07CiB9CiAKIC0gKHZvaWQpY2xlYW5VcERyYWdTb3VyY2VTZXNzaW9uU3RhdGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xp
ZW50LmNwcAppbmRleCAxYTlhNGU5YWNkODA2NjA0YzUyNzZiN2EyM2ExMjcxYTk5ZjQ1MDYzLi44
MWI3OWE3N2M4N2UwYWRlMTY2YTA4NmY0NTY0NmFlYmRiOTNjOGIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgV2ViRHJh
Z0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uIGFjdGlvbiwgY29uc3QgRHJhZ0RhdGEmKQogewotICAgIGlmIChhY3Rpb24gPT0gRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCkKKyAgICBpZiAoYWN0aW9uID09IERyYWdEZXN0aW5hdGlv
bkFjdGlvbjo6TG9hZCkKICAgICAgICAgbV9wYWdlLT53aWxsUGVyZm9ybUxvYWREcmFnRGVzdGlu
YXRpb25BY3Rpb24oKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGFnZS0+bWF5UGVyZm9ybVVwbG9h
ZERyYWdEZXN0aW5hdGlvbkFjdGlvbigpOyAvLyBVcGxvYWQgY2FuIGhhcHBlbiBmcm9tIGEgZHJv
cCBldmVudCBoYW5kbGVyLCBzbyB3ZSBzaG91bGQgcHJlcGFyZSBlYXJseS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1t
CmluZGV4IDQyNzhiMDM0MmY5YTFhMGFhYmEzZTk0MjM1YjZjODBhNTcwZDg2MDcuLjRiYmU4MTdh
MTQ3MWVjYmNlYzRiNDA5YmQ2MjhlOGU2NTNkNjZiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
Niw3ICs4Niw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqZ2V0VG9wSFRNTFZpZXcoRnJhbWUqIGZy
YW1lKQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIGNvbnN0IFdlYkNvcmU6
OkRyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246
KFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbilhY3Rpb24gZm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRh
LnBsYXRmb3JtRGF0YSgpXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246c3RhdGlj
X2Nhc3Q8V2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPihhY3Rpb24pIGZvckRyYWdnaW5nSW5mbzpk
cmFnRGF0YS5wbGF0Zm9ybURhdGEoKV07CiB9CiAKIApAQCAtMjE0LDcgKzIxNCw3IEBAIGJvb2wg
V2ViRHJhZ0NsaWVudDo6dXNlTGVnYWN5RHJhZ0NsaWVudCgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24o
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBjb25zdCBEcmFnRGF0YSYpCit2b2lkIFdlYkRyYWdDbGll
bnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbiwgY29uc3QgRHJhZ0RhdGEmKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNjE3NDRhNDk3NjhmMTdiNzlkNTUzMWM1Y2M2
NGFiOWIwM2U4Mjg0MS4uNDRmNGNjMDU5ZTEyYmJjMTA2ZGNjZDFjNTJjZmZlNTIxYTU1Y2IyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTkxMiw3
ICsxOTEyLDcgQEAgLSAoV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWRyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2tGb3JTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2kKIC0gKFdlYkNvcmU6OkRyYWdEYXRh
KWRyYWdEYXRhRm9yU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24gY2xpZW50OihD
R1BvaW50KWNsaWVudFBvc2l0aW9uIGdsb2JhbDooQ0dQb2ludClnbG9iYWxQb3NpdGlvbiBvcGVy
YXRpb246KHVpbnQ2NF90KW9wZXJhdGlvbgogewogICAgIGF1dG8gZHJhZ09wZXJhdGlvbk1hc2sg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihvcGVyYXRpb24pOwotICAgIGF1
dG8gZHJhZ0Rlc3RpbmF0aW9uTWFzayA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbj4oW3NlbGYgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFza0ZvclNlc3Npb246c2Vz
c2lvbl0pOworICAgIGF1dG8gZHJhZ0Rlc3RpbmF0aW9uTWFzayA9IE9wdGlvblNldDxXZWJDb3Jl
OjpEcmFnRGVzdGluYXRpb25BY3Rpb24+Ojpmcm9tUmF3KFtzZWxmIGRyYWdEZXN0aW5hdGlvbkFj
dGlvbk1hc2tGb3JTZXNzaW9uOnNlc3Npb25dKTsKICAgICByZXR1cm4geyBzZXNzaW9uLCBXZWJD
b3JlOjpyb3VuZGVkSW50UG9pbnQoY2xpZW50UG9zaXRpb24pLCBXZWJDb3JlOjpyb3VuZGVkSW50
UG9pbnQoZ2xvYmFsUG9zaXRpb24pLCBkcmFnT3BlcmF0aW9uTWFzaywgV2ViQ29yZTo6RHJhZ0Fw
cGxpY2F0aW9uTm9uZSwgZHJhZ0Rlc3RpbmF0aW9uTWFzayB9OwogfQogCkBAIC02NzI0LDkgKzY3
MjQsOSBAQCAtIChXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncylhcHBsaWNhdGlvbkZsYWdz
OihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpOwogfQogCi0tIChXZWJDb3JlOjpE
cmFnRGVzdGluYXRpb25BY3Rpb24pYWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzooaWQgPE5TRHJh
Z2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KKy0gKE9wdGlvblNldDxXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24+KWFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86KGlkIDxOU0RyYWdnaW5nSW5m
bz4pZHJhZ2dpbmdJbmZvCiB7Ci0gICAgcmV0dXJuIChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25B
Y3Rpb24pW1tzZWxmIF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnNlbGYgZHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dOworICAgIHJldHVy
biBPcHRpb25TZXQ8V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uPjo6ZnJvbVJhdyhbW3Nl
bGYgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBkcmFnRGVzdGluYXRpb25BY3Rp
b25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOwogfQogCiAtIChOU0RyYWdPcGVy
YXRpb24pZHJhZ2dpbmdFbnRlcmVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>