<?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>133850</bug_id>
          
          <creation_ts>2014-06-13 06:47:23 -0700</creation_ts>
          <short_desc>[GTK] Implement button-press-event, button-release-event, and absolute-axis-event of GAMEPAD API.</short_desc>
          <delta_ts>2020-06-11 15:12:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>133848</dependson>
    
    <dependson>133849</dependson>
          <blocked>133847</blocked>
    
    <blocked>133851</blocked>
    
    <blocked>133853</blocked>
    
    <blocked>133854</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michal Debski">m.debski</reporter>
          <assigned_to name="ChangSeok Oh">changseok</assigned_to>
          <cc>alex</cc>
    
    <cc>aperez</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1015405</commentid>
    <comment_count>0</comment_count>
    <who name="Michal Debski">m.debski</who>
    <bug_when>2014-06-13 06:47:23 -0700</bug_when>
    <thetext>For information on spec, please see:
http://www.w3.org/TR/gamepad/

The gamepad API implementation consist of 3 main parts. Per DOMWindow EventController, global Gamepads Manager and port specific Provider.
GamepadEventController is created as supplement to DOMWindow, but does not trigger creation of GamepadsManager until any of Gamepad related functions are called. When the need for gamepad arise (through navigator.getGamepads, or window.addListner( gamepadevent )) GamepadEventController will request manager and register for all events. It will forward any events received from manager to DOMWindow for dispatching.
GamepadsManager is first created when any of GamepadEventControllers request it and will live as long as last GamepadEventController has reference to it(ownership of GamepadsManager is shared between controllers). This ensures that the Gamepad objects will live as long as page which might have reference to it. GamepadsManager creates GamepadsProvider on construction and allows it to update gamepads information manger&apos;s methods.
GamepadsProvder is port specific and communicates directly with devices. It informs manager about connected/disconnected and changed gamepads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017517</commentid>
    <comment_count>1</comment_count>
      <attachid>233591</attachid>
    <who name="Michal Debski">m.debski</who>
    <bug_when>2014-06-23 03:20:08 -0700</bug_when>
    <thetext>Created attachment 233591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017941</commentid>
    <comment_count>2</comment_count>
      <attachid>233702</attachid>
    <who name="Michal Debski">m.debski</who>
    <bug_when>2014-06-24 07:25:54 -0700</bug_when>
    <thetext>Created attachment 233702
Patch

Rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017942</commentid>
    <comment_count>3</comment_count>
      <attachid>233703</attachid>
    <who name="Michal Debski">m.debski</who>
    <bug_when>2014-06-24 07:30:41 -0700</bug_when>
    <thetext>Created attachment 233703
Patch

Rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017944</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-24 07:32:48 -0700</bug_when>
    <thetext>Attachment 233703 did not pass style-queue:


ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:65:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:80:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:98:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/GamepadsProvider.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/efl/GamepadsProviderEfl.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:30:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:35:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:48:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:49:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:50:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:110:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.h:44:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.h:61:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.h:64:  The parameter name &quot;gamepad&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.h:65:  The parameter name &quot;gamepad&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/gtk/GamepadsProviderGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/gtk/GamepadsProviderGtk.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/gtk/GamepadsProviderGtk.cpp:87:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/gamepad/GamepadsManager.cpp:30:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadsManager.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadsManager.cpp:33:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:31:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:31:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:60:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:38:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:44:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:54:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:59:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:60:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/NavigatorGamepad.cpp:31:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:69:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:68:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:69:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:51:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:56:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:73:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:77:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:81:  Missing space before {  [whitespace/braces] [5]
Total errors found: 44 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017979</commentid>
    <comment_count>5</comment_count>
      <attachid>233710</attachid>
    <who name="Michal Debski">m.debski</who>
    <bug_when>2014-06-24 09:52:42 -0700</bug_when>
    <thetext>Created attachment 233710
Patch

Fixed some code-styles (rest is unsupported uniform initalizations) and EFL build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017981</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-24 09:54:44 -0700</bug_when>
    <thetext>Attachment 233710 did not pass style-queue:


ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:65:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:80:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:98:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/GamepadsProvider.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:48:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:49:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:50:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/gamepad/GamepadEventController.cpp:110:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.h:44:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.h:61:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/gtk/GamepadsProviderGtk.cpp:32:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/gtk/GamepadsProviderGtk.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/gtk/GamepadsProviderGtk.cpp:87:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:60:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:38:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:44:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:54:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:59:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadEvent.cpp:60:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:69:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:68:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/Gamepad.cpp:69:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:51:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:56:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:73:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:77:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/gamepad/GamepadButton.h:81:  Missing space before {  [whitespace/braces] [5]
Total errors found: 30 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655321</commentid>
    <comment_count>7</comment_count>
      <attachid>400046</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-05-22 08:04:56 -0700</bug_when>
    <thetext>Created attachment 400046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660579</commentid>
    <comment_count>8</comment_count>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-08 22:25:23 -0700</bug_when>
    <thetext>Would anyone review this? Although there is an issue for flatpak SDK, that is orthogonal to this change since we can build and test it with jhbuild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660621</commentid>
    <comment_count>9</comment_count>
      <attachid>400046</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-09 01:40:55 -0700</bug_when>
    <thetext>Comment on attachment 400046
Patch

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

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:58
&gt; +    if (!gamepad)
&gt; +        return;

I don&apos;t think this is possible, we will always get a non-null pointer here. To ensure this is not called after the ManetteGamepad is destroyed, we need to disconnect all the signals in destructor.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:112
&gt; +    if (!gamepad)
&gt; +        return;

Ditto.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:124
&gt; +    if (!gamepad)
&gt; +        return;

Ditto.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:141
&gt; +    m_id = String(manette_device_get_name(m_device.get()));

String::fromUTF8

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:145
&gt; +    m_axisValues.resize(static_cast&lt;size_t&gt;(StandardGamepadAxis::Count));
&gt; +    m_axisValues.fill(0);

You can pass a size to fill and it will be resized too.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:149
&gt; +    listenTo(device);

Do you plan to call this from more places? Because I would just connect the signals here, making it clear they are connected on construction and disconnected on destruction.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:156
&gt; +    g_signal_connect(G_OBJECT(device), &quot;button-press-event&quot;, (GCallback)onButtonPressEvent, this);

g_signal_connect expects a gpointer so tou don&apos;t need the GObject cast. Use G_CALLBACK() instead of the C-style cast.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:158
&gt; +    g_signal_connect(G_OBJECT(device), &quot;absolute-axis-event&quot;, (GCallback)onAbsoluteAxisEvent, this);

And disconnect the signals in the destructor.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:163
&gt; +    if (button == StandardGamepadButton::Unknown || m_device.get() != device)

How can we get a signal for a different device?

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepadProvider.h:54
&gt; +    void gamepadHadInput(ManetteGamepad&amp;, bool hadButtonPresses);

Use an enum instead of a boolean parameter to improve the readability. Something like enum class ShouldMakeGamepadsVisible { No, Yes };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661062</commentid>
    <comment_count>10</comment_count>
      <attachid>401508</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-09 20:14:16 -0700</bug_when>
    <thetext>Created attachment 401508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661065</commentid>
    <comment_count>11</comment_count>
      <attachid>400046</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-09 20:25:58 -0700</bug_when>
    <thetext>Comment on attachment 400046
Patch

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

Thanks for your review!

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:58
&gt;&gt; +        return;
&gt; 
&gt; I don&apos;t think this is possible, we will always get a non-null pointer here. To ensure this is not called after the ManetteGamepad is destroyed, we need to disconnect all the signals in destructor.

The if statement is removed and g_signal_handler_disconnect is added in the destructor.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:112
&gt;&gt; +        return;
&gt; 
&gt; Ditto.

Yup.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:124
&gt;&gt; +        return;
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:141
&gt;&gt; +    m_id = String(manette_device_get_name(m_device.get()));
&gt; 
&gt; String::fromUTF8

Done.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:145
&gt;&gt; +    m_axisValues.fill(0);
&gt; 
&gt; You can pass a size to fill and it will be resized too.

O.K. Good to know.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:149
&gt;&gt; +    listenTo(device);
&gt; 
&gt; Do you plan to call this from more places? Because I would just connect the signals here, making it clear they are connected on construction and disconnected on destruction.

The listenTo() is a dangling method after cleanup. Removed.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:156
&gt;&gt; +    g_signal_connect(G_OBJECT(device), &quot;button-press-event&quot;, (GCallback)onButtonPressEvent, this);
&gt; 
&gt; g_signal_connect expects a gpointer so tou don&apos;t need the GObject cast. Use G_CALLBACK() instead of the C-style cast.

Done.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:158
&gt;&gt; +    g_signal_connect(G_OBJECT(device), &quot;absolute-axis-event&quot;, (GCallback)onAbsoluteAxisEvent, this);
&gt; 
&gt; And disconnect the signals in the destructor.

Done.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:163
&gt;&gt; +    if (button == StandardGamepadButton::Unknown || m_device.get() != device)
&gt; 
&gt; How can we get a signal for a different device?

The comparison is meaningless. It was for avoiding unused variable warnings. Removed.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepadProvider.h:54
&gt;&gt; +    void gamepadHadInput(ManetteGamepad&amp;, bool hadButtonPresses);
&gt; 
&gt; Use an enum instead of a boolean parameter to improve the readability. Something like enum class ShouldMakeGamepadsVisible { No, Yes };

O.K.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661104</commentid>
    <comment_count>12</comment_count>
      <attachid>401508</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-10 01:32:03 -0700</bug_when>
    <thetext>Comment on attachment 401508
Patch

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

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:32
&gt; +#include &lt;linux/input-event-codes.h&gt;

I didn&apos;t notice this in the previous revision. Is gamepad only enabled for linux?

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:150
&gt; +    if (m_buttonPressEventHandlerID)
&gt; +        g_signal_handler_disconnect(m_device.get(), m_buttonPressEventHandlerID);
&gt; +    if (m_buttonReleaseEventHandlerID)
&gt; +        g_signal_handler_disconnect(m_device.get(), m_buttonReleaseEventHandlerID);
&gt; +    if (m_absoluteAxisEventHandlerID)
&gt; +        g_signal_handler_disconnect(m_device.get(), m_absoluteAxisEventHandlerID);

You can do g_signal_handlers_disconnect_by_data(m_device.get(), this); and then you don&apos;t need to keep the ids.

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepadProvider.cpp:76
&gt; +    g_signal_handlers_disconnect_by_func(m_monitor.get(), reinterpret_cast&lt;gpointer&gt;(onDeviceConnected), this);
&gt; +    g_signal_handlers_disconnect_by_func(m_monitor.get(), reinterpret_cast&lt;gpointer&gt;(onDeviceDisconnected), this);

Same here, better use by_data().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661357</commentid>
    <comment_count>13</comment_count>
      <attachid>401508</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-10 14:21:26 -0700</bug_when>
    <thetext>Comment on attachment 401508
Patch

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

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:32
&gt;&gt; +#include &lt;linux/input-event-codes.h&gt;
&gt; 
&gt; I didn&apos;t notice this in the previous revision. Is gamepad only enabled for linux?

Yes, it should. It seems manette to care linux key codes only. I set PLATFORM(GTK) in UIGamepadProviderManette.cpp where a ManetteGameProvider singleton instance is created. But I didn&apos;t guard for non-linux systems. Do we need it?

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepad.cpp:150
&gt;&gt; +        g_signal_handler_disconnect(m_device.get(), m_absoluteAxisEventHandlerID);
&gt; 
&gt; You can do g_signal_handlers_disconnect_by_data(m_device.get(), this); and then you don&apos;t need to keep the ids.

Good to know. Thanks.

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepadProvider.cpp:76
&gt;&gt; +    g_signal_handlers_disconnect_by_func(m_monitor.get(), reinterpret_cast&lt;gpointer&gt;(onDeviceDisconnected), this);
&gt; 
&gt; Same here, better use by_data().

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661380</commentid>
    <comment_count>14</comment_count>
      <attachid>401588</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-10 15:04:17 -0700</bug_when>
    <thetext>Created attachment 401588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661541</commentid>
    <comment_count>15</comment_count>
      <attachid>401588</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-11 01:55:43 -0700</bug_when>
    <thetext>Comment on attachment 401588
Patch

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

&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepadProvider.h:72
&gt;      GUniquePtr&lt;ManetteMonitor&gt; m_monitor;

Isn&apos;t ManetteMonitor a GObject? this should be a GRefPtr, not a GUniquePtr. File a new bug report if that&apos;s the case, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661542</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-11 01:58:33 -0700</bug_when>
    <thetext>Committed r262899: &lt;https://trac.webkit.org/changeset/262899&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401588.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661543</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-11 01:59:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/64246503&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661544</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-11 01:59:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/64246502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661751</commentid>
    <comment_count>19</comment_count>
      <attachid>401588</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-11 15:12:20 -0700</bug_when>
    <thetext>Comment on attachment 401588
Patch

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

&gt;&gt; Source/WebCore/platform/gamepad/manette/ManetteGamepadProvider.h:72
&gt;&gt;      GUniquePtr&lt;ManetteMonitor&gt; m_monitor;
&gt; 
&gt; Isn&apos;t ManetteMonitor a GObject? this should be a GRefPtr, not a GUniquePtr. File a new bug report if that&apos;s the case, please.

Oops. The original patch used GRefPtr. Perhaps, I mistakenly changed it to GUniquePtr. https://github.com/shivamidow/webkit/commit/93c63373158213248e31e61771166afff04ba8e3#diff-e640f599c0078f17008404c71a3c05b6R73
I&apos;ve opened https://bugs.webkit.org/show_bug.cgi?id=213094 to address it. Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233591</attachid>
            <date>2014-06-23 03:20:08 -0700</date>
            <delta_ts>2014-06-24 07:25:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>73504</size>
            <attacher name="Michal Debski">m.debski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMmI0ODY2ZC4uM2FhNjE0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE2NCw5ICsxNjQsMTAgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgTW9k
dWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbAogICAgIE1vZHVsZXMvYmF0dGVyeS9OYXZp
Z2F0b3JCYXR0ZXJ5LmlkbAogCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBh
ZC5pZGwKLSAgICBNb2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9HYW1lcGFkTGlzdC5pZGwKLSAg
ICBNb2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbAorICAgIE1v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0
dG9uLmlkbAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaWRsCisgICAgTW9kdWxl
cy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaWRsCiAKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L0Nvb3JkaW5hdGVzLmlkbAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaWRs
CkBAIC03NTIsNiArNzUzLDE0IEBAIHNldChXZWJDb3JlX0lETF9GSUxFUwogICAgIHhtbC9YU0xU
UHJvY2Vzc29yLmlkbAogKQogCitpZiAoRU5BQkxFX0dBTUVQQURfREVQUkVDQVRFRCkKKyAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX0lETF9GSUxFUworICAgICAgICBNb2R1bGVzL2dhbWVwYWQvZGVw
cmVjYXRlZC9HYW1lcGFkLmlkbAorICAgICAgICBNb2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9H
YW1lcGFkTGlzdC5pZGwKKyAgICAgICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvTmF2aWdh
dG9yR2FtZXBhZC5pZGwKKyAgICApCitlbmRpZigpCisKIHNldChXZWJDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUiAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9zY3JpcHRzIikKIAog
c2V0KFdlYkNvcmVfSU5TUEVDVE9SX0RPTUFJTlMKQEAgLTc3OCw2ICs3ODcsMTIgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNhdGVkL0dhbWVwYWRMaXN0
LmNwcAogICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNhdGVkL05hdmlnYXRvckdhbWVwYWQuY3Bw
CiAKKyAgICBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKKyAgICBNb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZEV2ZW50LmNwcAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9s
bGVyLmNwcAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuY3BwCisgICAgTW9k
dWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCisKICAgICBNb2R1bGVzL2dlb2xvY2F0
aW9uL0Nvb3JkaW5hdGVzLmNwcAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24u
Y3BwCiAgICAgTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggNTAyNzc3Yi4uODRjZjQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBA
QAorMjAxNC0wNi0yMyAgTWljaGFsIERlYnNraSAgPG0uZGVic2tpQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIEhUTUw1IEdhbWVwYWQgQVBJIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgcHJvcGVyIGdhbWVwYWQg
aW1wbGVtZW50YXRpb24gbWF0Y2hpbmcgc3BlYyBkZXNjcmlwdGlvbiBhYm92ZS4KKyAgICAgICAg
SXQgY29uc2lzdHMgb2YgdHdvIG1haW4gcGFydC4gRE9NV2luZG93IHNwZWNpZmljIGFuZCBHYW1l
cGFkcyBNYW5hZ2VyLgorICAgICAgICBHYW1lcGFkRXZlbnRDb250cm9sbGVyIGV4aXN0cyBmb3Ig
ZWFjaCBET01XaW5kb3cgYW5kIHNoYXJlcyBiZXR3ZWVuCisgICAgICAgIGVhY2ggb3RoZXIgb3du
ZXJzaGlwIG9mIEdhbWVwYWRzIE1hbmFnZXIuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBtYW5naW5n
CisgICAgICAgIHBhZ2Ugc3BlY2lmaWMgR2FtZXBhZCBMaXN0IC0gdXBkYXRpbmcgR2FtcGFkcyBh
bmQgaXQncyB0aW1lc3RhbXBzIGFuZAorICAgICAgICBkaXNwYXRjaGluZyBldmVudHMgdG8gd2lu
ZG93IG9iamVjdC4KKyAgICAgICAgR2FtZXBhZHMgTWFuYWdlciBiZWdpbnMgaXQgZXhpc3RhbmNl
IHdoZW4gYW55IG9mIHRoZSBHYW1lcGFkIEFQSSBpcworICAgICAgICBhY2Nlc3NlZCBhbmQgcGVy
c2lzdCBhcyBsb25nIGFzIHRoZSBsYXN0IEdhbWVwYWRFdmVudENvbnRyb2xsZXIgd2hpY2gKKyAg
ICAgICAgaGFzIHJlcXVlc3RlZCBpdHMgaW5zdGFuY2UuIFBvcnQgc3BlY2lmaWMgcHJvdmlkZXIn
cyBsaWZldGltZSBpcyBoYW5kbGVkCisgICAgICAgIGJ5IHRoaXMgbWFuYWdlciwgaXQgaXMgYWxz
byBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIHJlY2VpdmVkIGZyb20KKyAgICAgICAgcHJvdmlkZXIg
dG8gYWxsIEdhbWVwYWRFdmVudENvbnRyb2xsZXJzIHdoaWNoIGhhcyByZWdpc3RlcmVkIHRvIE1h
bmFnZXIuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzcGVjLCBwbGVhc2Ugc2VlOgorICAg
ICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9nYW1lcGFkLworCisgICAgICAgIExheW91dFRlc3Rz
IGFuZCByZXF1aXJlZCBsb2dpYyB3aWxsIGJlIGFkZGVkIGluIGZ1cnRoZXIgY29tbWl0cy4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBh
ZERldmljZUxpbnV4LmguCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGF0YTo6cmVzaXplQXhl
cyk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGF0YTo6c2V0QXhpcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkRGF0YTo6cmVzaXplQnV0dG9ucyk6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkRGF0YTo6c2V0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVw
YWQpOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6
On5HYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OmlkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWQ6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OnRpbWVz
dGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkOjpzZXRUaW1lc3RhbXApOgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZDo6bWFwcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
OjpheGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OmJ1dHRvbnMpOgorICAgICAgICAq
IE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmguCisgICAgICAgICogTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRCdXR0b24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
QnV0dG9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6cHJlc3Nl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkQnV0dG9uOjpzZXRQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRCdXR0b246OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRCdXR0b246OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRCdXR0b246
OnNldEJ1dHRvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6YnV0dG9u
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkQnV0dG9uOjpHYW1lcGFkQnV0dG9uKToK
KyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5pZGw6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oLgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6Y3JlYXRlQ29ubmVjdGVkR2FtZXBhZCk6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50OjpldmVudEludGVyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OkdhbWVwYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkRXZlbnQ6On5HYW1lcGFkRXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9H
YW1lcGFkRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRJbml0
OjpHYW1lcGFkRXZlbnRJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6Z2FtZXBhZCk6CisgICAgICAg
ICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIE1v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjp+R2FtZXBhZEV2ZW50Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjphZGRH
YW1lcGFkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250
cm9sbGVyOjpyZW1vdmVHYW1lcGFkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxHYW1lcGFkRXZlbnRMaXN0ZW5lcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Z2FtZXBhZENvbm5l
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFk
RGlzY29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xsZXI6
OmdhbWVwYWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xs
ZXI6OmdhbWVwYWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xs
ZXI6OmZyb20pOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6aXNB
Y3RpdmVBdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpkaXNw
YXRjaEdhbWVwYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjpjaGVja01hbmFnZXJBc3NpZ25lZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZl
bnRDb250cm9sbGVyOjphZGRHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVu
dENvbnRyb2xsZXI6OnJlbW92ZUdhbWVwYWQpOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9H
YW1lcGFkRXZlbnRDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBh
ZEV2ZW50Q29udHJvbGxlcjo6aXNBY3RpdmUpOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9H
YW1lcGFkc01hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFu
YWdlcjo6R2FtZXBhZHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdl
cjo6bWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6OnJlbGVhc2VN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6c2V0UHJvdmlkZXJG
YWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6cmVnaXN0ZXJUb01h
bmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpkZXJlZ2lzdGVyRnJv
bU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQ29u
bmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZERpc2Nv
bm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6OmdhbWVwYWRDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZEF4aXNDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZEJ1dHRvbkNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjp1cGRhdGVHYW1lcGFk
KToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpwcm92aWRlcik6CisgICAgICAgICog
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaC4KKyAgICAgICAgKFdl
YkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OndlYmtpdEdldEdhbWVwYWRzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdldEdhbWVwYWRzKToKKyAgICAgICAgKiBNb2R1bGVz
L2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaC4KKyAgICAgICAgKiBNb2R1bGVzL2dh
bWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGw6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNv
bnZlcnRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5Lmg6CisgICAg
ICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5pbjoKKyAg
ICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6
OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcnMpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFn
ZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL0dhbWVwYWRzUHJvdmlkZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc1Byb3ZpZGVyOjpHYW1lcGFkc1Byb3Zp
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzUHJvdmlkZXI6OmdhbWVwYWRNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtR2FtZXBhZHNQcm92aWRlckZhY3RvcnkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2VmbC9HYW1lcGFkc1Byb3ZpZGVyRWZsLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkc0VmbDo6dXBkYXRlR2FtZXBhZExpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlR2FtZXBhZHNQcm92aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dh
bWVwYWRzUHJvdmlkZXJHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dhbWVwYWRzR3RrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzR3RrOjp1
cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHYW1lcGFkc1Byb3Zp
ZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oOgorCiAyMDE0LTA2
LTEzICBNaWNoYWwgRGVic2tpICA8bS5kZWJza2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRk
IGRvdWJsZSBpbiBKU1ZhbHVlVHJhaXRzIGZvciBhcnJheSBjb252ZXJzaW9uLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmY2YzJjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRl
ICJHYW1lcGFkLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR2FtZXBhZERhdGE6OnJl
c2l6ZUF4ZXModW5zaWduZWQgY291bnQpCit7CisgICAgYXV0byBvbGRTaXplID0gbV9heGVzLnNp
emUoKTsKKyAgICBtX2F4ZXMucmVzaXplKGNvdW50KTsKKyAgICBpZiAob2xkU2l6ZSA8IG1fYXhl
cy5zaXplKCkpIHsKKyAgICAgICAgc3RkOjpnZW5lcmF0ZTw+KG1fYXhlcy5iZWdpbigpICsgb2xk
U2l6ZSwgbV9heGVzLmVuZCgpLCBbXSgpIHsKKyAgICAgICAgICAgIHJldHVybiAwLjA7CisgICAg
ICAgIH0pOworICAgIH0KK30KKwordm9pZCBHYW1lcGFkRGF0YTo6c2V0QXhpcyh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIHZhbHVlKQoreworICAgIEFTU0VSVChpbmRleCA8IG1fYXhlcy5zaXplKCkp
OworICAgIG1fYXhlc1tpbmRleF0gPSB2YWx1ZTsKK30KKwordm9pZCBHYW1lcGFkRGF0YTo6cmVz
aXplQnV0dG9ucyh1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBhdXRvIG9sZFNpemUgPSBtX2J1dHRv
bnMuc2l6ZSgpOworICAgIG1fYnV0dG9ucy5yZXNpemUoY291bnQpOworICAgIGlmIChvbGRTaXpl
IDwgbV9idXR0b25zLnNpemUoKSkKKyAgICAgICAgc3RkOjpnZW5lcmF0ZTxWZWN0b3I8UmVmUHRy
PEdhbWVwYWRCdXR0b24+ID46Oml0ZXJhdG9yLCBQYXNzUmVmUHRyPEdhbWVwYWRCdXR0b24+KCk+
KG1fYnV0dG9ucy5iZWdpbigpICsgb2xkU2l6ZSwgbV9idXR0b25zLmVuZCgpLCBHYW1lcGFkQnV0
dG9uOjpjcmVhdGUpOworfQorCit2b2lkIEdhbWVwYWREYXRhOjpzZXRCdXR0b24odW5zaWduZWQg
aW5kZXgsIGNvbnN0IEdhbWVwYWRCdXR0b246OkJ1dHRvblN0cnVjdCYgZGF0YSkKK3sKKyAgICBB
U1NFUlQoaW5kZXggPCBtX2J1dHRvbnMuc2l6ZSgpKTsKKyAgICBtX2J1dHRvbnNbaW5kZXhdLT5z
ZXRCdXR0b25EYXRhKGRhdGEpOworfQorCitHYW1lcGFkOjpHYW1lcGFkKFBhc3NSZWZQdHI8R2Ft
ZXBhZERhdGE+IGRhdGEpCisgICAgOiBtX2RhdGF7ZGF0YX0KKyAgICAsIG1fdGltZXN0YW1wezB9
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1F
UEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhMmRiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
CisgKiBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkX2gKKyNkZWZpbmUgR2FtZXBhZF9o
CisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIkdhbWVwYWRCdXR0b24uaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBHYW1lcGFkRGF0YTogcHVibGljIFJlZkNvdW50ZWQ8R2FtZXBhZERhdGE+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZERhdGEpOworICAgIH0KKyAgICB+R2FtZXBh
ZERhdGEoKSB7IH0KKworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lk
OyB9CisgICAgdm9pZCBpZChjb25zdCBTdHJpbmcmIGlkKSB7IG1faWQgPSBpZDsgfQorCisgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgdm9pZCBpbmRl
eCh1bnNpZ25lZCB2YWwpIHsgbV9pbmRleCA9IHZhbDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBt
YXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwaW5nOyB9CisgICAgdm9pZCBtYXBwaW5nKGNv
bnN0IFN0cmluZyYgbWFwcGluZykgeyBtX21hcHBpbmcgPSBtYXBwaW5nOyB9CisKKyAgICBjb25z
dCBWZWN0b3I8ZG91YmxlPiYgYXhlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXhlczsgfQorICAgIHZv
aWQgcmVzaXplQXhlcyh1bnNpZ25lZCBjb3VudCk7CisgICAgdm9pZCBzZXRBeGlzKHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgZGF0YSk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWRC
dXR0b24+ID4mIGJ1dHRvbnMoKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbnM7IH0KKyAgICB2b2lk
IHJlc2l6ZUJ1dHRvbnModW5zaWduZWQgY291bnQpOworICAgIHZvaWQgc2V0QnV0dG9uKHVuc2ln
bmVkIGluZGV4LCBjb25zdCBHYW1lcGFkQnV0dG9uOjpCdXR0b25TdHJ1Y3QmIGRhdGEpOworCitw
cml2YXRlOgorICAgIEdhbWVwYWREYXRhKCkKKyAgICAgICAgOiBtX2luZGV4ezB9CisgICAgewor
ICAgIH0KKworICAgIFN0cmluZyBtX2lkOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgU3Ry
aW5nIG1fbWFwcGluZzsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2F4ZXM7CisgICAgVmVjdG9yPFJl
ZlB0cjxHYW1lcGFkQnV0dG9uPiA+IG1fYnV0dG9uczsKK307CisKK2NsYXNzIEdhbWVwYWQgOiBw
dWJsaWMgUmVmQ291bnRlZDxHYW1lcGFkPiAgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdhbWVwYWQ+IGNyZWF0ZShQYXNzUmVmUHRyPEdhbWVwYWREYXRhPiBkYXRhKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFke2RhdGF9KTsKKyAgICB9CisgICAg
fkdhbWVwYWQoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLT5pZCgpOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEtPmluZGV4KCk7IH0KKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3Rh
bXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQorICAgIHZvaWQgc2V0VGltZXN0YW1w
KHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpIHsgbV90aW1lc3RhbXAgPSB2YWw7IH0KKworICAgIGNv
bnN0IFN0cmluZyYgbWFwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bWFwcGluZygpOyB9
CisgICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGEt
PmF4ZXMoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gPiYgYnV0
dG9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+YnV0dG9ucygpOyB9Citwcml2YXRlOgorICAg
IGV4cGxpY2l0IEdhbWVwYWQoUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4gZGF0YSk7CisgICAgUmVm
UHRyPEdhbWVwYWREYXRhPiBtX2RhdGE7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fdGltZXN0
YW1wOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdB
TUVQQUQpCisKKyNlbmRpZiAvLyBHYW1lcGFkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Ft
ZXBhZC9HYW1lcGFkLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjAw
ZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuaWRsCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKK1sKKyAgICBDb25kaXRp
b25hbD1HQU1FUEFELAorICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKK10gaW50ZXJmYWNl
IEdhbWVwYWQgeworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaWQ7CisgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgaW5kZXg7CisgICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3RhbXA7CisgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBtYXBwaW5nOworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGVbXSBheGVz
OworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBHYW1lcGFkQnV0dG9uW10gYnV0dG9uczsKK307CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmExMDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5oCkBAIC0wLDAg
KzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdhbWVwYWRCdXR0b25faAorI2RlZmluZSBH
YW1lcGFkQnV0dG9uX2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8dXRpbGl0
eT4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdhbWVwYWRCdXR0b24gOiBwdWJsaWMgUmVmQ291bnRlZDxHYW1lcGFkQnV0dG9uPiAgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIERFRkFVTFRfUFJFU1NfVEhSRVNI
T0xEID0gMC41OworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGJvb2wsIGRvdWJsZT4gQnV0dG9uU3Ry
dWN0OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZEJ1dHRvbik7CisgICAgfQor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gY3JlYXRlKGNvbnN0IEJ1dHRv
blN0cnVjdCYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBh
ZEJ1dHRvbntkYXRhfSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEJ1
dHRvbj4gY3JlYXRlKEJ1dHRvblN0cnVjdCYmIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEdhbWVwYWRCdXR0b257c3RkOjptb3ZlKGRhdGEpfSk7CisgICAgfQorCisg
ICAgfkdhbWVwYWRCdXR0b24oKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIHByZXNzZWQoKSBjb25z
dCB7IHJldHVybiBtX2J1dHRvbi5maXJzdDsgfQorICAgIHZvaWQgc2V0UHJlc3NlZChib29sIHBy
ZXNzZWQpIHsgbV9idXR0b24uZmlyc3QgPSBwcmVzc2VkOyB9CisKKyAgICBkb3VibGUgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX2J1dHRvbi5zZWNvbmQ7IH0KKyAgICB2b2lkIHNldFZhbHVlKGRv
dWJsZSB2YWx1ZSkgeyBtX2J1dHRvbi5zZWNvbmQgPSB2YWx1ZTsgfQorCisgICAgdm9pZCBzZXRC
dXR0b25EYXRhKGNvbnN0IEJ1dHRvblN0cnVjdCYgZGF0YSkgeyBtX2J1dHRvbiA9IGRhdGE7IH0K
KyAgICB2b2lkIHNldEJ1dHRvbkRhdGEoQnV0dG9uU3RydWN0JiYgZGF0YSkgeyBtX2J1dHRvbiA9
IHN0ZDo6bW92ZShkYXRhKTsgfQorICAgIGNvbnN0IEJ1dHRvblN0cnVjdCYgYnV0dG9uRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnV0dG9uOyB9CisKK3ByaXZhdGU6CisgICAgR2FtZXBhZEJ1dHRv
bigpCisgICAgICAgIDogbV9idXR0b257ZmFsc2UsIDAuMH0KKyAgICB7CisgICAgfQorICAgIGV4
cGxpY2l0IEdhbWVwYWRCdXR0b24oY29uc3QgQnV0dG9uU3RydWN0JiBkYXRhKQorICAgICAgICA6
IG1fYnV0dG9ue2RhdGF9CisgICAgeworICAgIH0KKyAgICBleHBsaWNpdCBHYW1lcGFkQnV0dG9u
KEJ1dHRvblN0cnVjdCYmIGRhdGEpCisgICAgICAgIDogbV9idXR0b257c3RkOjptb3ZlKGRhdGEp
fQorICAgIHsKKyAgICB9CisKKyAgICBCdXR0b25TdHJ1Y3QgbV9idXR0b247Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKKworI2VuZGlm
IC8vIEdhbWVwYWRCdXR0b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRCdXR0b24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRCdXR0b24uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVh
NjZlODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZEJ1dHRvbi5pZGwKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLwor
CitbCisgICAgTm9JbnRlcmZhY2VPYmplY3QsCisgICAgQ29uZGl0aW9uYWw9R0FNRVBBRCwKKyAg
ICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCitdIGludGVyZmFjZSBHYW1lcGFkQnV0dG9uIHsK
KyAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBwcmVzc2VkOworICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBkb3VibGUgdmFsdWU7Cit9OworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjg1OTc0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZEV2ZW50LmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJHYW1l
cGFkRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IEdhbWVwYWRFdmVudDo6Y3JlYXRlQ29ubmVj
dGVkR2FtZXBhZChQYXNzUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQpCit7CisgICAgR2FtZXBhZEV2
ZW50SW5pdCBpbml0YWxpemVye2dhbWVwYWR9OworICAgIHJldHVybiBjcmVhdGUoZXZlbnROYW1l
cygpLmdhbWVwYWRjb25uZWN0ZWRFdmVudCwgaW5pdGFsaXplcik7Cit9CisKK1Bhc3NSZWZQdHI8
R2FtZXBhZEV2ZW50PiBHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQoUGFz
c1JlZlB0cjxHYW1lcGFkPiBnYW1lcGFkKQoreworICAgIEdhbWVwYWRFdmVudEluaXQgaW5pdGFs
aXplcntnYW1lcGFkfTsKKyAgICByZXR1cm4gY3JlYXRlKGV2ZW50TmFtZXMoKS5nYW1lcGFkZGlz
Y29ubmVjdGVkRXZlbnQsIGluaXRhbGl6ZXIpOworfQorCitFdmVudEludGVyZmFjZSBHYW1lcGFk
RXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gR2FtZXBhZEV2ZW50
SW50ZXJmYWNlVHlwZTsKK30KKworR2FtZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoKQorICAgIDog
bV9pbmRleHswfQoreworfQorCitHYW1lcGFkRXZlbnQ6OkdhbWVwYWRFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgR2FtZXBhZEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIp
CisgICAgOiBFdmVudHtldmVudE5hbWUsIGluaXRpYWxpemVyfQorICAgICwgbV9nYW1lcGFke2lu
aXRpYWxpemVyLmdhbWVwYWR9Cit7Cit9CisKK0dhbWVwYWRFdmVudDo6fkdhbWVwYWRFdmVudCgp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1F
UEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRF
dmVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDhhNmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmgKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2FtZXBhZEV2ZW50X2gKKyNkZWZpbmUg
R2FtZXBhZEV2ZW50X2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiRXZlbnQu
aCIKKyNpbmNsdWRlICJHYW1lcGFkLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBHYW1lcGFkRXZlbnRJbml0IDogcHVibGljIEV2ZW50
SW5pdCB7CisgICAgR2FtZXBhZEV2ZW50SW5pdCgpCisgICAgeworICAgIH0KKyAgICBleHBsaWNp
dCBHYW1lcGFkRXZlbnRJbml0KFBhc3NSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCkKKyAgICAgICAg
OiBnYW1lcGFke2dhbWVwYWR9CisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxHYW1lcGFkPiBn
YW1lcGFkOworfTsKKworY2xhc3MgR2FtZXBhZEV2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWRFdmVudCk7CisgICAgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgY29uc3QgR2FtZXBhZEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWRFdmVudHt0eXBlLCBpbml0aWFsaXplcn0pOwor
ICAgIH0KKyAgICB2aXJ0dWFsIH5HYW1lcGFkRXZlbnQoKTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdhbWVwYWRFdmVudD4gY3JlYXRlQ29ubmVjdGVkR2FtZXBhZChQYXNzUmVmUHRyPEdhbWVw
YWQ+IGdhbWVwYWQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gY3JlYXRl
RGlzY29ubmVjdGVkR2FtZXBhZChQYXNzUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQpOworCisgICAg
R2FtZXBhZCogZ2FtZXBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2FtZXBhZC5nZXQoKTsgfQorCisg
ICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIEdhbWVwYWRFdmVudCgpOworICAgIEdhbWVwYWRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudEluaXQmIGluaXRpYWxpemVy
KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgUmVmUHRyPEdhbWVwYWQ+IG1fZ2FtZXBh
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1F
UEFEKQorCisjZW5kaWYgLy8gR2FtZXBhZEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzZkOWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitbCisgICAgQ29uZGl0aW9uYWw9R0FNRVBBRCwKKyAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPUV2
ZW50CitdIGludGVyZmFjZSBHYW1lcGFkRXZlbnQgOiBFdmVudCB7CisgICAgW0luaXRpYWxpemVk
QnlFdmVudENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgR2FtZXBhZCBnYW1lcGFkOwor
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZl
bnRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
RXZlbnRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
ZGIxNGYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50Lmgi
CisjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRFdmVudC5oIgorI2luY2x1
ZGUgIkdhbWVwYWRFdmVudENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJHYW1lcGFkc01hbmFnZXIu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEdhbWVwYWRFdmVudENvbnRyb2xs
ZXI+IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmNyZWF0ZShET01XaW5kb3cqIHdpbmRvdykKK3sK
KyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRXZlbnRDb250cm9sbGVyPih3aW5k
b3cpOworfQorCitHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpHYW1lcGFkRXZlbnRDb250cm9sbGVy
KERPTVdpbmRvdyogd2luZG93KQorICAgIDogbV9saXN0ZW5lcnNDb3VudGVyezB9LAorICAgICAg
bV9nYW1lcGFkc01hbmFnZXJ7bnVsbHB0cn0sCisgICAgICBtX3dpbmRvd3t3aW5kb3d9Cit7Cit9
CisKK0dhbWVwYWRFdmVudENvbnRyb2xsZXI6On5HYW1lcGFkRXZlbnRDb250cm9sbGVyKCkKK3sK
KyAgICBpZiAobV9nYW1lcGFkc01hbmFnZXIpCisgICAgICAgIG1fZ2FtZXBhZHNNYW5hZ2VyLT5k
ZXJlZ2lzdGVyRnJvbU1hbmFnZXIodGhpcyk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJv
bGxlcjo6YWRkR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQoreworICAgIGNoZWNrTWFuYWdlckFzc2ln
bmVkKCk7CisgICAgKyttX2xpc3RlbmVyc0NvdW50ZXI7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50
Q29udHJvbGxlcjo6cmVtb3ZlR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQoreworICAgIGlmIChtX2xp
c3RlbmVyc0NvdW50ZXIpCisgICAgICAgIC0tbV9saXN0ZW5lcnNDb3VudGVyOworfQorCit2b2lk
IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygp
Cit7CisgICAgbV9saXN0ZW5lcnNDb3VudGVyID0gMDsKK30KKworY29uc3QgY2hhciogR2FtZXBh
ZEV2ZW50Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyIGdhbWVwYWRFdmVudENvbnRyb2xsZXJTdHJpbmdbXSA9ICJHYW1lcGFkRXZlbnRDb250cm9s
bGVyIjsKKyAgICByZXR1cm4gZ2FtZXBhZEV2ZW50Q29udHJvbGxlclN0cmluZzsKK30KKwordm9p
ZCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGluZGV4
LCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPiBkYXRhKQoreworICAgIGF1dG8gZ2FtZXBhZCA9IEdh
bWVwYWQ6OmNyZWF0ZShkYXRhKTsKKyAgICAvLyBGSVhNRTogc2V0IHRpbWVzdGFtcCByZWxhdGl2
ZSB0byBwYWdlIHN0YXJ0IHRpbWUsIGFzIGluIGN1cnJlbnQgZ2FtZXBhZCBzcGVjCisgICAgZ2Ft
ZXBhZC0+c2V0VGltZXN0YW1wKGN1cnJlbnRUaW1lTVMoKSk7CisgICAgLy8gZ2FtZXBhZC5nZXQo
KSB0byBjcmVhdGUgYW5vdGhlciBQYXNzUmVmUHRyIGFuZCBub3QgbW92ZSB0aGUgY3VycmVudCBv
bmUuCisgICAgYWRkR2FtZXBhZChpbmRleCwgZ2FtZXBhZC5nZXQoKSk7CisgICAgaWYgKG1fbGlz
dGVuZXJzQ291bnRlcikKKyAgICAgICAgZGlzcGF0Y2hHYW1lcGFkRXZlbnQoR2FtZXBhZEV2ZW50
OjpjcmVhdGVDb25uZWN0ZWRHYW1lcGFkKGdhbWVwYWQpKTsKK30KKwordm9pZCBHYW1lcGFkRXZl
bnRDb250cm9sbGVyOjpnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGluZGV4LCBQYXNzUmVm
UHRyPEdhbWVwYWREYXRhPiAvKmRhdGEqLykKK3sKKyAgICBpZiAoaW5kZXggPj0gbV9nYW1lcGFk
cy5zaXplKCkgfHwgIW1fZ2FtZXBhZHNbaW5kZXhdKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoYXV0byBnYW1lcGFkID0gbV9nYW1lcGFkc1tpbmRleF0pIHsKKyAgICAgICAgcmVtb3ZlR2Ft
ZXBhZChpbmRleCk7CisgICAgICAgIGlmIChtX2xpc3RlbmVyc0NvdW50ZXIpCisgICAgICAgICAg
ICBkaXNwYXRjaEdhbWVwYWRFdmVudChHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdh
bWVwYWQoZ2FtZXBhZCkpOworICAgIH0KK30KKwordm9pZCBHYW1lcGFkRXZlbnRDb250cm9sbGVy
OjpnYW1lcGFkQ2hhbmdlZCh1bnNpZ25lZCBpbmRleCwgUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4g
ZGF0YSkKK3sKKyAgICBpZihpbmRleCA+PSBtX2dhbWVwYWRzLnNpemUoKSB8fCAhbV9nYW1lcGFk
c1tpbmRleF0pCisgICAgICAgIGdhbWVwYWRDb25uZWN0ZWQoaW5kZXgsIGRhdGEpOworICAgIGVs
c2UKKyAgICAgICAgbV9nYW1lcGFkc1tpbmRleF0tPnNldFRpbWVzdGFtcChjdXJyZW50VGltZU1T
KCkpOworfQorCitjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mIEdhbWVwYWRFdmVudENv
bnRyb2xsZXI6OmdhbWVwYWRMaXN0KCkKK3sKKyAgICBjaGVja01hbmFnZXJBc3NpZ25lZCgpOwor
ICAgIHJldHVybiBtX2dhbWVwYWRzOworfQorCitHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBHYW1l
cGFkRXZlbnRDb250cm9sbGVyOjpmcm9tKERPTVdpbmRvdyogd2luZG93KQoreworICAgIGlmICgh
d2luZG93KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdhbWVwYWRFdmVudENvbnRy
b2xsZXIqIHN1cHBsZW1lbnQgPSBzdGF0aWNfY2FzdDxHYW1lcGFkRXZlbnRDb250cm9sbGVyKj4o
U3VwcGxlbWVudDxET01XaW5kb3c+Ojpmcm9tKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSkpOwor
ICAgIGlmICghc3VwcGxlbWVudCkgeworICAgICAgICBhdXRvIG5ld0luc3RhbmNlID0gY3JlYXRl
KHdpbmRvdyk7CisgICAgICAgIHN1cHBsZW1lbnQgPSBuZXdJbnN0YW5jZS5nZXQoKTsKKyAgICAg
ICAgcHJvdmlkZVRvKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSwgc3RkOjptb3ZlKG5ld0luc3Rh
bmNlKSk7CisgICAgfQorICAgIHJldHVybiBzdXBwbGVtZW50OworfQorCitib29sIEdhbWVwYWRF
dmVudENvbnRyb2xsZXI6OmlzQWN0aXZlQXQoRE9NV2luZG93KiB3aW5kb3cpCit7CisgICAgaWYg
KEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIHNlbGYgPSBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpm
cm9tKHdpbmRvdykpCisgICAgICAgIHJldHVybiBzZWxmLT5pc0FjdGl2ZSgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpkaXNwYXRjaEdhbWVw
YWRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBpZiAoaXNBY3RpdmUoKSAm
JiAhbV93aW5kb3ctPmRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSAm
JiAhbV93aW5kb3ctPmRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkpCisg
ICAgICAgIG1fd2luZG93LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBHYW1lcGFk
RXZlbnRDb250cm9sbGVyOjpjaGVja01hbmFnZXJBc3NpZ25lZCgpCit7CisgICAgaWYgKCFtX2dh
bWVwYWRzTWFuYWdlcikgeworICAgICAgICBtX2dhbWVwYWRzTWFuYWdlciA9IEdhbWVwYWRzTWFu
YWdlcjo6bWFuYWdlcigpOworICAgICAgICBtX2dhbWVwYWRzTWFuYWdlci0+cmVnaXN0ZXJUb01h
bmFnZXIodGhpcyk7CisgICAgfQorfQorCit2b2lkIEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmFk
ZEdhbWVwYWQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCkKK3sK
KyAgICBBU1NFUlQoZ2FtZXBhZCk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9nYW1lcGFkcy5zaXpl
KCkpCisgICAgICAgIG1fZ2FtZXBhZHMuZ3JvdyhpbmRleCArIDEpOworICAgIG1fZ2FtZXBhZHNb
aW5kZXhdID0gZ2FtZXBhZDsKK30KKwordm9pZCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpyZW1v
dmVHYW1lcGFkKHVuc2lnbmVkIGluZGV4KQoreworICAgIEFTU0VSVChpbmRleCA8IG1fZ2FtZXBh
ZHMuc2l6ZSgpKTsKKworICAgIGlmIChpbmRleCA9PSBtX2dhbWVwYWRzLnNpemUoKSAtIDEpIHsK
KyAgICAgICAgYXV0byBzaHJpbmtTaXplID0gbV9nYW1lcGFkcy5zaXplKCkgLSAxOyAvLyBsYXN0
IHdpbGwgYmUgZGVsZXRlZAorICAgICAgICB3aGlsZSAoc2hyaW5rU2l6ZSA+IDAgJiYgIW1fZ2Ft
ZXBhZHNbc2hyaW5rU2l6ZSAtIDFdKQorICAgICAgICAgICAgLS1zaHJpbmtTaXplOworICAgICAg
ICBtX2dhbWVwYWRzLnNocmluayhzaHJpbmtTaXplKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9n
YW1lcGFkc1tpbmRleF0gPSBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjcxZmUxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oCkBAIC0wLDAgKzEs
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdhbWVwYWRFdmVudENvbnRyb2xsZXJfaAorI2Rl
ZmluZSBHYW1lcGFkRXZlbnRDb250cm9sbGVyX2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisj
aW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRXZlbnQ7CitjbGFzcyBHYW1lcGFk
RGF0YTsKK2NsYXNzIEdhbWVwYWQ7CitjbGFzcyBHYW1lcGFkc01hbmFnZXI7CisKK2NsYXNzIEdh
bWVwYWRFdmVudENvbnRyb2xsZXIgOiBwdWJsaWMgU3VwcGxlbWVudDxET01XaW5kb3c+IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHYW1lcGFkRXZlbnRDb250cm9sbGVyKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdhbWVwYWRFdmVudENvbnRyb2xsZXI+IGNyZWF0
ZShET01XaW5kb3cqKTsKKworICAgIGV4cGxpY2l0IEdhbWVwYWRFdmVudENvbnRyb2xsZXIoRE9N
V2luZG93Kik7CisgICAgfkdhbWVwYWRFdmVudENvbnRyb2xsZXIoKTsKKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOworICAgIHN0YXRpYyBHYW1lcGFkRXZlbnRDb250
cm9sbGVyKiBmcm9tKERPTVdpbmRvdyopOworICAgIHN0YXRpYyBib29sIGlzQWN0aXZlQXQoRE9N
V2luZG93Kik7CisKKyAgICB2b2lkIGFkZEdhbWVwYWRFdmVudExpc3RlbmVyKCk7CisgICAgdm9p
ZCByZW1vdmVHYW1lcGFkRXZlbnRMaXN0ZW5lcigpOworICAgIHZvaWQgcmVtb3ZlQWxsR2FtZXBh
ZEV2ZW50TGlzdGVuZXJzKCk7CisKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9saXN0ZW5lcnNDb3VudGVyOyB9CisKKyAgICB2b2lkIGdhbWVwYWRDb25uZWN0ZWQodW5zaWdu
ZWQsIFBhc3NSZWZQdHI8R2FtZXBhZERhdGE+KTsKKyAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0
ZWQodW5zaWduZWQsIFBhc3NSZWZQdHI8R2FtZXBhZERhdGE+KTsKKyAgICB2b2lkIGdhbWVwYWRD
aGFuZ2VkKHVuc2lnbmVkLCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPik7CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mICBnYW1lcGFkTGlzdCgpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkaXNwYXRjaEdhbWVwYWRFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9p
ZCBjaGVja01hbmFnZXJBc3NpZ25lZCgpOworICAgIHZvaWQgYWRkR2FtZXBhZCh1bnNpZ25lZCBp
bmRleCwgUGFzc1JlZlB0cjxHYW1lcGFkPik7CisgICAgdm9pZCByZW1vdmVHYW1lcGFkKHVuc2ln
bmVkIGluZGV4KTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2xpc3RlbmVyc0NvdW50ZXI7
CisgICAgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+IG1fZ2FtZXBhZHM7CisgICAgUmVmUHRyPEdh
bWVwYWRzTWFuYWdlcj4gbV9nYW1lcGFkc01hbmFnZXI7CisgICAgRE9NV2luZG93KiBtX3dpbmRv
dzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1F
UEFEKQorCisjZW5kaWYgLy8gR2FtZXBhZEV2ZW50Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlN2MzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmNwcApAQCAtMCwwICsx
LDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJHYW1lcGFkLmgi
CisjaW5jbHVkZSAiR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkdhbWVwYWRz
TWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Byb3ZpZGVyRmFjdG9yeUZ1bmN0
aW9uIEdhbWVwYWRzTWFuYWdlcjo6c19wcm92aWRlckZhY3RvcnkgPSBwbGF0Zm9ybUdhbWVwYWRz
UHJvdmlkZXJGYWN0b3J5KCk7CitSZWZQdHI8R2FtZXBhZHNNYW5hZ2VyPiBHYW1lcGFkc01hbmFn
ZXI6OnNfbWFuYWdlcjsKKworR2FtZXBhZHNNYW5hZ2VyOjpHYW1lcGFkc01hbmFnZXIoKQorewor
ICAgIC8qCisgICAgICogR2FtZXBhZHNNYW5hZ2VyIGNvbnN0cnVjdGlvbiBtdXN0IGJlIGNvbXBs
ZXRlZCB3aGVuIGl0IGNyZWF0ZXMgcHJvdmlkZXIgYXMgaXQgY2FuCisgICAgICogaW5mb3JtIE1h
bmdlciBhYm91dCBjdXJyZW50bHkgY29ubmVjdGVkIGdhbWVwYWRzLgorICAgICAqLworICAgIG1f
Z2FtZXBhZHNQcm92aWRlciA9IHNfcHJvdmlkZXJGYWN0b3J5KHRoaXMpOworfQorCitQYXNzUmVm
UHRyPEdhbWVwYWRzTWFuYWdlcj4gR2FtZXBhZHNNYW5hZ2VyOjptYW5hZ2VyKCkKK3sKKyAgICBp
ZiAoIXNfbWFuYWdlcikKKyAgICAgICAgc19tYW5hZ2VyID0gYWRvcHRSZWYoKm5ldyBHYW1lcGFk
c01hbmFnZXIoKSk7CisgICAgcmV0dXJuIHNfbWFuYWdlcjsKK30KKwordm9pZCBHYW1lcGFkc01h
bmFnZXI6OnJlbGVhc2VNYW5hZ2VyKCkKK3sKKyAgICBzX21hbmFnZXIgPSBudWxscHRyOworfQor
Cit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6c2V0UHJvdmlkZXJGYWN0b3J5KGNvbnN0IFByb3ZpZGVy
RmFjdG9yeUZ1bmN0aW9uJiBmYWN0b3J5KQoreworICAgIHNfcHJvdmlkZXJGYWN0b3J5ID0gZmFj
dG9yeTsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OnJlZ2lzdGVyVG9NYW5hZ2VyKEdhbWVw
YWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9sbGVycy5hZGQo
Y29udHJvbGxlcik7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjpkZXJlZ2lzdGVyRnJvbU1h
bmFnZXIoR2FtZXBhZEV2ZW50Q29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBtX2NvbnRy
b2xsZXJzLnJlbW92ZShjb250cm9sbGVyKTsKKyAgICBpZiAoIW1fY29udHJvbGxlcnMuc2l6ZSgp
KQorICAgICAgICByZWxlYXNlTWFuYWdlcigpOworfQorCit1bnNpZ25lZCBHYW1lcGFkc01hbmFn
ZXI6OmdhbWVwYWRDb25uZWN0ZWQoY29uc3QgR2FtZXBhZERldmljZSYgZGV2aWNlKQoreworICAg
IHVuc2lnbmVkIGkgPSAwOworICAgIGZvciAoOyBpIDwgbV9nYW1lcGFkcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoIW1fZ2FtZXBhZHNbaV0pCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgaWYgKGkgPT0gbV9nYW1lcGFkcy5zaXplKCkpCisgICAgICAgIG1fZ2FtZXBhZHMuYXBw
ZW5kKEdhbWVwYWREYXRhOjpjcmVhdGUoKSk7CisgICAgZWxzZQorICAgICAgICBtX2dhbWVwYWRz
W2ldID0gR2FtZXBhZERhdGE6OmNyZWF0ZSgpOworCisgICAgLy8gRklYTUU6IGdhbWVwYWQgaWQg
c2hvdWxkIGJlIGNvbnNpc3RlbnQgZWcuIGRyaXZlci12ZXJzaW9uLW5hbWUKKyAgICAvLyBTZXQg
aWQgb24gY29ubmVjdGlvbiBhcyBpdCBzaG91bGQgbm90IGNoYW5nZSBsYXRlci4KKyAgICBtX2dh
bWVwYWRzW2ldLT5pZChkZXZpY2UuaWQoKSk7CisgICAgLy8gRklYTUU6IGN1cnJlbnRseSBpdCBp
cyBpbXBvc3NpYmxlIHRvIGRldGVjdCBnYW1lcGFkIGxheW91dAorICAgIG1fZ2FtZXBhZHNbaV0t
Pm1hcHBpbmcoInJhdyIpOworICAgIG1fZ2FtZXBhZHNbaV0tPmluZGV4KGkpOworICAgIHVwZGF0
ZUdhbWVwYWQoaSwgZGV2aWNlKTsKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBtX2NvbnRy
b2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5nYW1lcGFkQ29ubmVjdGVkKGksIG1fZ2FtZXBh
ZHNbaV0pOworCisgICAgcmV0dXJuIGk7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjpnYW1l
cGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGlkLCBjb25zdCBHYW1lcGFkRGV2aWNlJiAvKmRldmlj
ZSovKQoreworICAgIEFTU0VSVChpZCA8IG1fZ2FtZXBhZHMuc2l6ZSgpICYmIG1fZ2FtZXBhZHNb
aWRdKTsKKworICAgIGZvciAoYXV0byYgY29udHJvbGxlciA6IG1fY29udHJvbGxlcnMpCisgICAg
ICAgIGNvbnRyb2xsZXItPmdhbWVwYWREaXNjb25uZWN0ZWQoaWQsIG1fZ2FtZXBhZHNbaWRdKTsK
KworICAgIGlmIChpZCA9PSBtX2dhbWVwYWRzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgYXV0byBz
aHJpbmtTaXplID0gbV9nYW1lcGFkcy5zaXplKCkgLSAxOyAvLyBsYXN0IHdpbGwgYmUgZGVsZXRl
ZAorICAgICAgICB3aGlsZSAoc2hyaW5rU2l6ZSA+IDAgJiYgIW1fZ2FtZXBhZHNbc2hyaW5rU2l6
ZSAtIDFdKQorICAgICAgICAgICAgLS1zaHJpbmtTaXplOworICAgICAgICBtX2dhbWVwYWRzLnNo
cmluayhzaHJpbmtTaXplKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9nYW1lcGFkc1tpZF0gPSBu
dWxscHRyOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZENoYW5nZWQodW5zaWdu
ZWQgaWQsIGNvbnN0IEdhbWVwYWREZXZpY2UmIGRldmljZSkKK3sKKyAgICBBU1NFUlQoaWQgPCBt
X2dhbWVwYWRzLnNpemUoKSAmJiBtX2dhbWVwYWRzW2lkXSk7CisKKyAgICB1cGRhdGVHYW1lcGFk
KGlkLCBkZXZpY2UpOworICAgIGZvciAoYXV0byYgY29udHJvbGxlciA6IG1fY29udHJvbGxlcnMp
CisgICAgICAgIGNvbnRyb2xsZXItPmdhbWVwYWRDaGFuZ2VkKGlkLCBtX2dhbWVwYWRzW2lkXSk7
Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQXhpc0NoYW5nZWQodW5zaWduZWQg
aWQsIHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCit7CisgICAgQVNTRVJUKGlkIDwgbV9n
YW1lcGFkcy5zaXplKCkgJiYgbV9nYW1lcGFkc1tpZF0pOworCisgICAgbV9nYW1lcGFkc1tpZF0t
PnNldEF4aXMoaW5kZXgsIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBtX2Nv
bnRyb2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5nYW1lcGFkQ2hhbmdlZChpZCwgbV9nYW1l
cGFkc1tpZF0pOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZEJ1dHRvbkNoYW5n
ZWQodW5zaWduZWQgaWQsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBHYW1lcGFkQnV0dG9uOjpCdXR0
b25TdHJ1Y3QmIGRhdGEpCit7CisgICAgQVNTRVJUKGlkIDwgbV9nYW1lcGFkcy5zaXplKCkgJiYg
bV9nYW1lcGFkc1tpZF0pOworCisgICAgbV9nYW1lcGFkc1tpZF0tPnNldEJ1dHRvbihpbmRleCwg
ZGF0YSk7CisgICAgZm9yIChhdXRvJiBjb250cm9sbGVyIDogbV9jb250cm9sbGVycykKKyAgICAg
ICAgY29udHJvbGxlci0+Z2FtZXBhZENoYW5nZWQoaWQsIG1fZ2FtZXBhZHNbaWRdKTsKK30KKwor
dm9pZCBHYW1lcGFkc01hbmFnZXI6OnVwZGF0ZUdhbWVwYWQodW5zaWduZWQgaW5kZXgsIGNvbnN0
IEdhbWVwYWREZXZpY2UmIGRldmljZSkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtX2dhbWVwYWRz
LnNpemUoKSAmJiBtX2dhbWVwYWRzW2luZGV4XSk7CisKKyAgICBhdXRvJiBnYW1lcGFkID0gbV9n
YW1lcGFkc1tpbmRleF07CisgICAgYXV0byBheGVzQ291bnQgPSBkZXZpY2UuYXhlc0NvdW50KCk7
CisgICAgYXV0byBheGVzID0gZGV2aWNlLmF4ZXNBcnJheSgpOworICAgIGF1dG8gYnV0dG9uc0Nv
dW50ID0gZGV2aWNlLmJ1dHRvbnNDb3VudCgpOworICAgIGF1dG8gYnV0dG9ucyA9IGRldmljZS5i
dXR0b25zQXJyYXkoKTsKKworICAgIGlmIChnYW1lcGFkLT5heGVzKCkuc2l6ZSgpICE9IGF4ZXND
b3VudCkKKyAgICAgICAgZ2FtZXBhZC0+cmVzaXplQXhlcyhheGVzQ291bnQpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBheGVzQ291bnQ7ICsraSkKKyAgICAgICAgZ2FtZXBhZC0+c2V0
QXhpcyhpbmRleCwgYXhlc1tpXSk7CisKKyAgICBpZiAoZ2FtZXBhZC0+YnV0dG9ucygpLnNpemUo
KSAhPSBidXR0b25zQ291bnQpCisgICAgICAgIGdhbWVwYWQtPnJlc2l6ZUJ1dHRvbnMoYnV0dG9u
c0NvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uc0NvdW50OyArK2kp
CisgICAgICAgIGdhbWVwYWQtPnNldEJ1dHRvbihpbmRleCwgYnV0dG9uc1tpXSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTc5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmgKQEAgLTAsMCAr
MSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2FtZXBhZHNNYW5hZ2VyX2gKKyNkZWZpbmUg
R2FtZXBhZHNNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2Ft
ZXBhZHNQcm92aWRlci5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBHYW1lcGFkRGF0YTsKK2NsYXNzIEdhbWVwYWRFdmVudENvbnRyb2xsZXI7Citj
bGFzcyBHYW1lcGFkc1Byb3ZpZGVyOworCitjbGFzcyBHYW1lcGFkc01hbmFnZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxHYW1lcGFkc01hbmFnZXI+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShH
YW1lcGFkc01hbmFnZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRz
TWFuYWdlcj4gbWFuYWdlcigpOworICAgIHN0YXRpYyB2b2lkIHNldFByb3ZpZGVyRmFjdG9yeShj
b25zdCBQcm92aWRlckZhY3RvcnlGdW5jdGlvbiYpOworICAgIEdhbWVwYWRzUHJvdmlkZXIqIHBy
b3ZpZGVyKCkgeyByZXR1cm4gbV9nYW1lcGFkc1Byb3ZpZGVyLmdldCgpOyB9CisKKyAgICB2b2lk
IHJlZ2lzdGVyVG9NYW5hZ2VyKEdhbWVwYWRFdmVudENvbnRyb2xsZXIqKTsKKyAgICB2b2lkIGRl
cmVnaXN0ZXJGcm9tTWFuYWdlcihHYW1lcGFkRXZlbnRDb250cm9sbGVyKik7CisKKyAgICAvKgor
ICAgICAqIFJlZ2lzdGVycyBnYW1lcGFkIGFuZCByZXR1cm5zIGlkIGZvciBmdXJ0aGVyIHVwZGF0
ZXMuCisgICAgICovCisgICAgdW5zaWduZWQgZ2FtZXBhZENvbm5lY3RlZChjb25zdCBHYW1lcGFk
RGV2aWNlJik7CisgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGlkLCBjb25z
dCBHYW1lcGFkRGV2aWNlJik7CisgICAgdm9pZCBnYW1lcGFkQ2hhbmdlZCh1bnNpZ25lZCBpZCwg
Y29uc3QgR2FtZXBhZERldmljZSYpOworICAgIHZvaWQgZ2FtZXBhZEF4aXNDaGFuZ2VkKHVuc2ln
bmVkIGlkLCB1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIGdhbWVwYWRC
dXR0b25DaGFuZ2VkKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBhZEJ1
dHRvbjo6QnV0dG9uU3RydWN0Jik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcmVsZWFz
ZU1hbmFnZXIoKTsKKworICAgIHN0YXRpYyBQcm92aWRlckZhY3RvcnlGdW5jdGlvbiBzX3Byb3Zp
ZGVyRmFjdG9yeTsKKyAgICBzdGF0aWMgUmVmUHRyPEdhbWVwYWRzTWFuYWdlcj4gc19tYW5hZ2Vy
OworCisgICAgR2FtZXBhZHNNYW5hZ2VyKCk7CisgICAgdm9pZCB1cGRhdGVHYW1lcGFkKHVuc2ln
bmVkIGluZGV4LCBjb25zdCBHYW1lcGFkRGV2aWNlJik7CisKKyAgICBWZWN0b3I8UmVmUHRyPEdh
bWVwYWREYXRhPj4gbV9nYW1lcGFkczsKKyAgICBPd25QdHI8R2FtZXBhZHNQcm92aWRlcj4gbV9n
YW1lcGFkc1Byb3ZpZGVyOworICAgIEhhc2hTZXQ8R2FtZXBhZEV2ZW50Q29udHJvbGxlcio+IG1f
Y29udHJvbGxlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRCkKKworI2VuZGlmIC8vIEdhbWVwYWRzTWFuYWdlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkYzE0ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiTmF2aWdhdG9yR2FtZXBhZC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdh
bWVwYWQuaCIKKyNpbmNsdWRlICJHYW1lcGFkRXZlbnRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
TmF2aWdhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgVmVjdG9yPFJlZlB0
cjxHYW1lcGFkPiA+JiBOYXZpZ2F0b3JHYW1lcGFkOjp3ZWJraXRHZXRHYW1lcGFkcyhOYXZpZ2F0
b3IqIG5hdmlnYXRvcikKK3sKKyAgICByZXR1cm4gTmF2aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBh
ZHMobmF2aWdhdG9yKTsKK30KKworY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiBOYXZp
Z2F0b3JHYW1lcGFkOjpnZXRHYW1lcGFkcyhOYXZpZ2F0b3IqIG5hdmlnYXRvcikKK3sKKyAgICBB
U1NFUlQobmF2aWdhdG9yKTsKKyAgICByZXR1cm4gR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZnJv
bShuYXZpZ2F0b3ItPmZyYW1lKCktPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKS0+Z2FtZXBhZExp
c3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdB
TUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdh
dG9yR2FtZXBhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA0N2VhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1
bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5kZWYg
TmF2aWdhdG9yR2FtZXBhZF9oCisjZGVmaW5lIE5hdmlnYXRvckdhbWVwYWRfaAorCisjaWYgRU5B
QkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdhbWVwYWQ7CitjbGFzcyBOYXZpZ2F0b3I7CisKK2NsYXNzIE5hdmln
YXRvckdhbWVwYWQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8UmVmUHRyPEdh
bWVwYWQ+ID4mICB3ZWJraXRHZXRHYW1lcGFkcyhOYXZpZ2F0b3IqKTsKKyAgICBzdGF0aWMgY29u
c3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiAgZ2V0R2FtZXBhZHMoTmF2aWdhdG9yKik7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkK
KworI2VuZGlmIC8vIE5hdmlnYXRvckdhbWVwYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk2MDUxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwKQEAgLTAsMCArMSwyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CitbCisgICAgQ29uZGl0aW9uYWw9R0FNRVBBRAorXSBwYXJ0aWFsIGludGVyZmFjZSBOYXZpZ2F0
b3IgeworICAgIEdhbWVwYWRbXSB3ZWJraXRHZXRHYW1lcGFkcygpOworICAgIEdhbWVwYWRbXSBn
ZXRHYW1lcGFkcygpOworfTsKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1F
ZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA5YjRhN2Rm
Li5lN2JiNmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNzksNyArNzksNyBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9lZmwvRXJyb3JzRWZsLmNw
cAogICAgIHBsYXRmb3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL0Zp
bGVTeXN0ZW1FZmwuY3BwCi0gICAgcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcAorICAgIHBs
YXRmb3JtL2VmbC9HYW1lcGFkc1Byb3ZpZGVyRWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9MYW5n
dWFnZUVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvTG9jYWxpemVkU3RyaW5nc0VmbC5jcHAKICAg
ICBwbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5k
ZXggMmQxNTJjOS4uZTIxZmEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTk4LDcg
Kzk4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKIAotICAgIHBsYXRmb3JtL2d0
ay9HYW1lcGFkc0d0ay5jcHAKKyAgICBwbGF0Zm9ybS9ndGsvR2FtZXBhZHNQcm92aWRlckd0ay5j
cHAKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJv
LmNwcAogCkBAIC01NTQsOCArNTU0LDcgQEAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdz
U3RhYmxlX0lETF9GSUxFUwogbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVf
SURMX0ZJTEVTCiAgICAgTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbAogCi0gICAg
TW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZC5pZGwKLSAgICBNb2R1bGVzL2dhbWVw
YWQvZGVwcmVjYXRlZC9HYW1lcGFkTGlzdC5pZGwKKyAgICBNb2R1bGVzL2dhbWVwYWQvR2FtZXBh
ZC5pZGwKIAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaWRsCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCmluZGV4IDRjMjg4MjYuLjM0
YWM5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcApA
QCAtNTIsNiArNTIsMTAgQEAKICNpbmNsdWRlICJKU01lZGlhU3RyZWFtVHJhY2suaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCisjaW5jbHVkZSAiSlNHYW1lcGFkLmgiCisjZW5kaWYK
KwogI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCiAjaW5jbHVkZSAiSlNTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdExpc3QuaCIKICNlbmRpZgpAQCAtMjU4LDYgKzI2MiwxMyBAQCB2b2lkIEpTRGlj
dGlvbmFyeTo6Y29udmVydFZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIFJlZlB0cgogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0FNRVBBRCkKK3ZvaWQgSlNE
aWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFJlZlB0cjxHYW1lcGFkPiYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IHRvR2FtZXBhZCh2
YWx1ZSk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCiB2b2lkIEpT
RGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYgcmVzdWx0KQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAppbmRleCBhZmI3YThlLi44ZTIw
MDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaApAQCAtNDYs
NiArNDYsNyBAQCBjbGFzcyBEaWN0aW9uYXJ5OwogY2xhc3MgRE9NRXJyb3I7CiBjbGFzcyBET01X
aW5kb3c7CiBjbGFzcyBFdmVudFRhcmdldDsKK2NsYXNzIEdhbWVwYWQ7CiBjbGFzcyBNZWRpYUtl
eUVycm9yOwogY2xhc3MgTWVkaWFTdHJlYW07CiBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrOwpAQCAt
MTM3LDYgKzEzOCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8RE9NRXJyb3I+JiByZXN1bHQpOwog
ICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgUmVmUHRyPFZvaWRDYWxsYmFjaz4mIHJlc3VsdCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoR0FN
RVBBRCkKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIFJlZlB0cjxHYW1lcGFkPiYgcmVzdWx0KTsKKyNlbmRpZgogI2lmIEVOQUJMRShT
Q1JJUFRFRF9TUEVFQ0gpCiAgICAgc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiYp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAppbmRleCAzYjY4NTY3Li41ZTI3OTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKQEAgLTY5LDYgKzY5LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIG1hY3JvKGZvY3VzKSBcCiAgICAgbWFjcm8oZm9jdXNpbikgXAogICAgIG1hY3Jv
KGZvY3Vzb3V0KSBcCisgICAgbWFjcm8oZ2FtZXBhZGNvbm5lY3RlZCkgXAorICAgIG1hY3JvKGdh
bWVwYWRkaXNjb25uZWN0ZWQpIFwKICAgICBtYWNybyhnZXN0dXJldGFwKSBcCiAgICAgbWFjcm8o
Z2VzdHVyZXRhcGRvd24pIFwKICAgICBtYWNybyhnZXN0dXJlc2Nyb2xsc3RhcnQpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50TmFtZXMuaW4KaW5kZXggNzdiNmFjMy4uMDY0MTQxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50TmFtZXMuaW4KQEAgLTEwLDYgKzEwLDcgQEAgQ29tcG9zaXRpb25FdmVudAogQ3VzdG9tRXZl
bnQKIEVycm9yRXZlbnQKIEZvY3VzRXZlbnQKK0dhbWVwYWRFdmVudCBjb25kaXRpb25hbD1HQU1F
UEFECiBIYXNoQ2hhbmdlRXZlbnQKIEtleWJvYXJkRXZlbnQKIEtleWJvYXJkRXZlbnRzIGludGVy
ZmFjZU5hbWU9S2V5Ym9hcmRFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGFl
NzkxYzEuLmFlNDBhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw2ICs2Niw3IEBACiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJHYW1lcGFkRXZlbnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtMTcwOCw2ICsxNzEwLDEzIEBAIGJvb2wg
RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBQYXNzUmVmUHRyPEV2ZW50CiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0FNRVBBRCkK
KyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmdhbWVwYWRjb25uZWN0ZWRF
dmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmdhbWVwYWRkaXNjb25uZWN0ZWRFdmVu
dCkgeworICAgICAgICBpZiAoR2FtZXBhZEV2ZW50Q29udHJvbGxlciogY29udHJvbGxlciA9IEdh
bWVwYWRFdmVudENvbnRyb2xsZXI6OmZyb20odGhpcykpCisgICAgICAgICAgICBjb250cm9sbGVy
LT5hZGRHYW1lcGFkRXZlbnRMaXN0ZW5lcigpOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE3OTgsNiArMTgwNywxMyBAQCBib29sIERPTVdpbmRvdzo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5l
cgogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCisgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkY29ubmVjdGVkRXZlbnQgfHwgZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkZGlzY29ubmVjdGVkRXZlbnQpIHsKKyAgICAgICAgaWYg
KEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjpmcm9tKHRoaXMpKQorICAgICAgICAgICAgY29udHJvbGxlci0+cmVtb3ZlR2FtZXBhZEV2
ZW50TGlzdGVuZXIoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xODk4LDYgKzE5MTQsMTEgQEAgdm9pZCBET01XaW5kb3c6OnJlbW92ZUFsbEV2ZW50TGlzdGVu
ZXJzKCkKICAgICAgICAgY29udHJvbGxlci0+cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMo
dGhpcyk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHQU1FUEFEKQorICAgIGlmIChHYW1lcGFkRXZl
bnRDb250cm9sbGVyKiBjb250cm9sbGVyID0gR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZnJvbSh0
aGlzKSkKKyAgICAgICAgY29udHJvbGxlci0+cmVtb3ZlQWxsR2FtZXBhZEV2ZW50TGlzdGVuZXJz
KCk7CisjZW5kaWYKKwogICAgIHJlbW92ZUFsbFVubG9hZEV2ZW50TGlzdGVuZXJzKHRoaXMpOwog
ICAgIHJlbW92ZUFsbEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKHRoaXMpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmgKaW5kZXggMzIyNzNmYS4uMzkyNzQ5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzc3LDYgKzM3OCwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoZGV2aWNlb3JpZW50YXRpb24pOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0FNRVBBRCkK
KyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihnYW1lcGFkY29ubmVjdGVk
KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihnYW1lcGFkZGlzY29u
bmVjdGVkKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBST1hJTUlUWV9FVkVOVFMpCiAgICAgICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Via2l0ZGV2aWNlcHJveGltaXR5KTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDFhZmYxMGEuLjFiYTJlMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTI4OSw2ICsyODksOSBAQAogICAgIFtD
b25kaXRpb25hbD1ERVZJQ0VfT1JJRU5UQVRJT05dIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
ZGV2aWNlbW90aW9uOwogICAgIFtDb25kaXRpb25hbD1ERVZJQ0VfT1JJRU5UQVRJT05dIGF0dHJp
YnV0ZSBFdmVudExpc3RlbmVyIG9uZGV2aWNlb3JpZW50YXRpb247CiAKKyAgICBbQ29uZGl0aW9u
YWw9R0FNRVBBRF0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25nYW1lcGFkY29ubmVjdGVkOwor
ICAgIFtDb25kaXRpb25hbD1HQU1FUEFEXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmdhbWVw
YWRkaXNjb25uZWN0ZWQ7CisKICAgICBbQ29uZGl0aW9uYWw9UFJPWElNSVRZX0VWRU5UU10gYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRkZXZpY2Vwcm94aW1pdHk7CiAKICAgICBbQ29u
ZGl0aW9uYWw9V0lMTF9SRVZFQUxfRURHRV9FVkVOVFNdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ud2Via2l0d2lsbHJldmVhbGJvdHRvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dhbWVwYWRzUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVw
YWRzUHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYwZDg4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZHNQcm92
aWRlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdhbWVwYWRzUHJv
dmlkZXJfaAorI2RlZmluZSBHYW1lcGFkc1Byb3ZpZGVyX2gKKworI2lmIEVOQUJMRShHQU1FUEFE
KQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFkQnV0dG9uOworY2xhc3MgR2Ft
ZXBhZHNNYW5hZ2VyOworCitjbGFzcyBHYW1lcGFkRGV2aWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5HYW1lcGFkRGV2aWNlKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5n
JiBpZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGF4ZXNDb3VudCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGRvdWJsZSogYXhlc0FycmF5KCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgYnV0dG9uc0NvdW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgY29uc3QgR2FtZXBhZEJ1dHRvbjo6QnV0dG9uU3RydWN0KiBidXR0b25zQXJyYXkoKSBjb25z
dCA9IDA7Cit9OworCitjbGFzcyBHYW1lcGFkc1Byb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBHYW1l
cGFkc1Byb3ZpZGVyKEdhbWVwYWRzTWFuYWdlciogbWFuYWdlcikKKyAgICAgICAgOiBtX2dhbWVw
YWRzTWFuYWdlcihtYW5hZ2VyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HYW1lcGFk
c1Byb3ZpZGVyKCkgPSBkZWZhdWx0OworCisgICAgR2FtZXBhZHNNYW5hZ2VyKiBnYW1lcGFkTWFu
YWdlcigpIHsgcmV0dXJuIG1fZ2FtZXBhZHNNYW5hZ2VyOyB9CisKK3ByaXZhdGU6CisgICAgR2Ft
ZXBhZHNNYW5hZ2VyKiBtX2dhbWVwYWRzTWFuYWdlcjsKK307CisKK3R5cGVkZWYgc3RkOjpmdW5j
dGlvbjxQYXNzT3duUHRyPEdhbWVwYWRzUHJvdmlkZXI+KEdhbWVwYWRzTWFuYWdlciopPiBQcm92
aWRlckZhY3RvcnlGdW5jdGlvbjsKKworUGFzc093blB0cjxHYW1lcGFkc1Byb3ZpZGVyPiBjcmVh
dGVHYW1lcGFkc1Byb3ZpZGVyKEdhbWVwYWRzTWFuYWdlciopOworCitpbmxpbmUgUHJvdmlkZXJG
YWN0b3J5RnVuY3Rpb24gcGxhdGZvcm1HYW1lcGFkc1Byb3ZpZGVyRmFjdG9yeSgpCit7CisgICAg
cmV0dXJuIFByb3ZpZGVyRmFjdG9yeUZ1bmN0aW9uKGNyZWF0ZUdhbWVwYWRzUHJvdmlkZXIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkK
KworI2VuZGlmIC8vIEdhbWVwYWRzUHJvdmlkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9HYW1lcGFkc1Byb3ZpZGVyRWZsLmNwcApzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwCnJlbmFtZSB0
byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNQcm92aWRlckVmbC5jcHAKaW5k
ZXggNzY4ZGMwMC4uZjJkNzFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0dhbWVwYWRzRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2Ft
ZXBhZHNQcm92aWRlckVmbC5jcHAKQEAgLTI0LDEzICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1lcGFkcy5oIgogCiAjaWYgRU5BQkxFKEdBTUVQQURf
REVQUkVDQVRFRCkKIAogI2luY2x1ZGUgIkdhbWVwYWREZXZpY2VMaW51eC5oIgogI2luY2x1ZGUg
IkdhbWVwYWRMaXN0LmgiCisjaW5jbHVkZSAiR2FtZXBhZHNQcm92aWRlci5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPEVjb3Jl
Lmg+CiAjaW5jbHVkZSA8RWV6ZS5oPgogI2luY2x1ZGUgPEVpbmEuaD4KQEAgLTIxMSwyOCArMjEy
LDMyIEBAIHZvaWQgR2FtZXBhZHNFZmw6OnVucmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBz
eXNwYXRoKQogICAgIG1fc2xvdHNbaW5kZXhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgR2FtZXBhZHNF
Zmw6OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRvKQordm9pZCBHYW1lcGFkc0Vm
bDo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIC8qaW50byovKQogewotICAgIEFTU0VS
VChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7Ci0KLSAgICBjb25zdCBzaXplX3Qg
c2xvdENvdW50ID0gbV9zbG90cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
bG90Q291bnQ7ICsraSkgewotICAgICAgICBpZiAobV9zbG90c1tpXS5nZXQoKSAmJiBtX3Nsb3Rz
W2ldLT5jb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgR2FtZXBhZERldmljZUVmbCogZ2FtZXBh
ZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4g
Z2FtZXBhZCA9IGludG8tPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWdhbWVwYWQpCi0gICAg
ICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOwotCi0gICAgICAgICAgICBn
YW1lcGFkLT5pbmRleChpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZpY2Ut
PmlkKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2UtPnRp
bWVzdGFtcCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2FtZXBhZERldmljZS0+YXhl
c0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOwotICAgICAgICAgICAgZ2FtZXBh
ZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmljZS0+
YnV0dG9uc0RhdGEoKSk7Ci0KLSAgICAgICAgICAgIGludG8tPnNldChpLCBnYW1lcGFkKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7Ci0gICAgfQorICAgIG5v
dEltcGxlbWVudGVkKCk7CisKKy8vICoqKioqIEdhbWVwYWQgaW50ZXJmYWNlIGNoYW5nZWQuICoq
KioqCisvLworLy8gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsK
Ky8vCisvLyAgICBjb25zdCBzaXplX3Qgc2xvdENvdW50ID0gbV9zbG90cy5zaXplKCk7CisvLyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNsb3RDb3VudDsgKytpKSB7CisvLyAgICAgICAgaWYg
KG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKKy8vICAgICAg
ICAgICAgR2FtZXBhZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7
CisvLyAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsK
Ky8vICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQorLy8gICAgICAgICAgICAgICAgZ2FtZXBhZCA9
IEdhbWVwYWQ6OmNyZWF0ZSgpOworLy8KKy8vICAgICAgICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7
CisvLyAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZpY2UtPmlkKCkpOworLy8gICAg
ICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwor
Ly8gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBn
YW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKKy8vICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9u
cyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0Rh
dGEoKSk7CisvLworLy8gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7CisvLyAgICAg
ICAgfSBlbHNlCisvLyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKy8vICAgIH0KIH0KIAog
dm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKQEAgLTI0MSw2ICsyNDYsMTIg
QEAgdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKICAgICBnYW1lcGFkc0Vm
bC5nZXQoKS51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKIH0KIAorUGFzc093blB0cjxHYW1lcGFk
c1Byb3ZpZGVyPiBjcmVhdGVHYW1lcGFkc1Byb3ZpZGVyKEdhbWVwYWRzTWFuYWdlciogLyptYW5h
Z2VyKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQ
UkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFk
c0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNQcm92aWRlckd0
ay5jcHAKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJHdGsuY3BwCmluZGV4IGFiNjNkZWIuLmU0YTE2MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJHdGsuY3BwCkBA
IC0yNCwxOSArMjQsMjAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R2FtZXBhZHMuaCIKIAogI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCiAKICNpbmNsdWRl
ICJHYW1lcGFkRGV2aWNlTGludXguaCIKICNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgorI2luY2x1
ZGUgIkdhbWVwYWRzUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxnaW8vZ3VuaXhpbnB1dHN0cmVhbS5oPgogI2lu
Y2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTE2NCwyNyArMTY1
LDMxIEBAIHZvaWQgR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZp
bGUpCiAgICAgbV9zbG90c1tpbmRleF0uY2xlYXIoKTsKIH0KIAotdm9pZCBHYW1lcGFkc0d0azo6
dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCit2b2lkIEdhbWVwYWRzR3RrOjp1
cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogLyppbnRvKi8pCiB7Ci0gICAgQVNTRVJUKG1f
c2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdl
dCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAgICBHYW1lcGFkRGV2
aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmICgh
Z2FtZXBhZCkKLSAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7Ci0K
LSAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+aWQo
Z2FtZXBhZERldmljZS0+aWQoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2Ft
ZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1l
cGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7Ci0gICAg
ICAgICAgICBnYW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBn
YW1lcGFkRGV2aWNlLT5idXR0b25zRGF0YSgpKTsKLQotICAgICAgICAgICAgaW50by0+c2V0KGks
IGdhbWVwYWQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsK
LSAgICB9CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworLy8gKioqKiogR2FtZXBhZCBpbnRlcmZh
Y2UgY2hhbmdlZC4gKioqKioKKy8vCisvLyAgICBBU1NFUlQobV9zbG90cy5zaXplKCkgPT0gaW50
by0+bGVuZ3RoKCkpOworLy8KKy8vICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3Rz
LnNpemUoKTsgaSsrKSB7CisvLyAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90
c1tpXS0+Y29ubmVjdGVkKCkpIHsKKy8vICAgICAgICAgICAgR2FtZXBhZERldmljZUd0ayogZ2Ft
ZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7CisvLyAgICAgICAgICAgIFJlZlB0cjxHYW1l
cGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKKy8vICAgICAgICAgICAgaWYgKCFnYW1lcGFk
KQorLy8gICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOworLy8KKy8v
ICAgICAgICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7CisvLyAgICAgICAgICAgIGdhbWVwYWQtPmlk
KGdhbWVwYWREZXZpY2UtPmlkKCkpOworLy8gICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAo
Z2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOworLy8gICAgICAgICAgICBnYW1lcGFkLT5heGVz
KGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsK
Ky8vICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291
bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7CisvLworLy8gICAgICAgICAgICBp
bnRvLT5zZXQoaSwgZ2FtZXBhZCk7CisvLyAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgIGlu
dG8tPnNldChpLCAwKTsKKy8vICAgIH0KIH0KIAogdm9pZCBHYW1lcGFkc0d0azo6b25VRXZlbnRD
YWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiBkZXZpY2Us
IGdwb2ludGVyIGRhdGEpCkBAIC0yMjAsNiArMjI1LDEyIEBAIHZvaWQgc2FtcGxlR2FtZXBhZHMo
R2FtZXBhZExpc3QqIGludG8pCiAgICAgZ2FtZXBhZHNHdGsudXBkYXRlR2FtZXBhZExpc3QoaW50
byk7CiB9CiAKK1Bhc3NPd25QdHI8R2FtZXBhZHNQcm92aWRlcj4gY3JlYXRlR2FtZXBhZHNQcm92
aWRlcihHYW1lcGFkc01hbmFnZXIqIC8qbWFuYWdlciovKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmNwcAppbmRleCBjNTE3NTRk
Li5iNmNiNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1l
cGFkRGV2aWNlTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dh
bWVwYWREZXZpY2VMaW51eC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKIAotI2lmIEVOQUJMRShHQU1FUEFE
X0RFUFJFQ0FURUQpCisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkgfHwgRU5BQkxFKEdB
TUVQQUQpCiAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgpAQCAt
OTYsNCArOTYsNCBAQCBmbG9hdCBHYW1lcGFkRGV2aWNlTGludXg6Om5vcm1hbGl6ZUJ1dHRvblZh
bHVlKHNob3J0IHZhbHVlKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQorI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJF
Q0FURUQpIHx8IEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaAppbmRleCA5OWMwOWIyLi4xM2ZmNDI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXgu
aApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBHYW1lcGFkRGV2aWNlTGludXhfaAogI2RlZmlu
ZSBHYW1lcGFkRGV2aWNlTGludXhfaAogCi0jaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkK
KyNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKSB8fCBFTkFCTEUoR0FNRVBBRCkKIAogI2lu
Y2x1ZGUgPGxpbnV4L2pveXN0aWNrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNjgs
NiArNjgsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQorI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RF
UFJFQ0FURUQpIHx8IEVOQUJMRShHQU1FUEFEKQogCiAjZW5kaWYgLy8gR2FtZXBhZERldmljZUxp
bnV4X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAzNGMzMWVjLi43ODhmMWFiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDYtMjMgIE1pY2hhbCBEZWJza2kg
IDxtLmRlYnNraUBzYW1zdW5nLmNvbT4KKworICAgICAgICBIVE1MNSBHYW1lcGFkIEFQSSBpbXBs
ZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzODUwCisKKyAgICAgICAgQ291bGQgbm90IHR1cm4gT04gR0FNRVBBRCBiZWNhdXNlIGl0
IHdhcyBmb3JjZWQgdG8gT0ZGLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtOgorCiAyMDE0
LTA2LTIxICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgRGlzYWJsZSBnYW1lcGFkIGZlYXR1cmUgb24gRUZMIGFuZCBHVEsgcG9ydHMgYnkgZGVmYXVs
dApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDdmYjJlMGEuLjZk
YzIxZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5w
bQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTI0OCw3
ICsyNDgsNyBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVUxM
U0NSRUVOX0FQSSIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSB8fCBpc0VmbCgpIHx8
IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGZ1bGxzY3JlZW5BUElTdXBwb3J0IH0sCiAKICAgICB7IG9w
dGlvbiA9PiAiZ2FtZXBhZCIsIGRlc2MgPT4gIlRvZ2dsZSBHYW1lcGFkIHN1cHBvcnQiLAotICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfR0FNRVBBRCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRn
YW1lcGFkU3VwcG9ydCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfR0FNRVBBRCIsIGRlZmF1
bHQgPT4gKGlzRWZsKCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkZ2FtZXBhZFN1cHBvcnQgfSwK
IAogICAgIHsgb3B0aW9uID0+ICJnZW9sb2NhdGlvbiIsIGRlc2MgPT4gIlRvZ2dsZSBHZW9sb2Nh
dGlvbiBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0dFT0xPQ0FUSU9OIiwgZGVm
YXVsdCA9PiAoaXNBcHBsZVdlYktpdCgpIHx8IGlzSU9TV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZh
bHVlID0+IFwkZ2VvbG9jYXRpb25TdXBwb3J0IH0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233702</attachid>
            <date>2014-06-24 07:25:54 -0700</date>
            <delta_ts>2014-06-24 07:30:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>impl.patch</filename>
            <type>text/plain</type>
            <size>58541</size>
            <attacher name="Michal Debski">m.debski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMWM3Y2E2ZC4uYzRjNWFkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE3MCwxMCArMTcwLDYgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKICAgICBNb2R1bGVzL2dhbWVwYWQvTmF2aWdh
dG9yR2FtZXBhZC5pZGwKIAotICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNhdGVkL0dhbWVwYWQu
aWRsCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCi0gICAg
TW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwKLQogICAgIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vQ29vcmRpbmF0ZXMuaWRsCiAgICAgTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5pZGwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlk
bApAQCAtNzkwLDYgKzc4NiwxMiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9n
YW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuY3BwCiAgICAgTW9kdWxlcy9nYW1lcGFkL2Rl
cHJlY2F0ZWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKIAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwCisgICAgTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCisgICAgTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRzTWFuYWdlci5jcHAKKyAgICBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5jcHAKKwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vQ29vcmRpbmF0ZXMuY3BwCiAgICAgTW9k
dWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKQEAgLTMxODcsNiArMzE4OSwxNCBAQCBpZiAoRU5B
QkxFX1dFQl9SRVBMQVkpCiAgICAgKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9HQU1FUEFEX0RF
UFJFQ0FURUQpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKKyAgICAgICAgTW9k
dWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZC5pZGwKKyAgICAgICAgTW9kdWxlcy9nYW1l
cGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCisgICAgICAgIE1vZHVsZXMvZ2FtZXBhZC9k
ZXByZWNhdGVkL05hdmlnYXRvckdhbWVwYWQuaWRsCisgICAgKQorZW5kaWYgKCkKKwogc2V0KFdl
YkNvcmVUZXN0U3VwcG9ydF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL21vY2siCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Rlc3RpbmciCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggNjI1MmI3ZC4uYWIwNGNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMSBAQAorMjAxNC0w
Ni0yNCAgTWljaGFsIERlYnNraSAgPG0uZGVic2tpQHNhbXN1bmcuY29tPgorCisgICAgICAgIEhU
TUw1IEdhbWVwYWQgQVBJIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgcHJvcGVyIGdhbWVwYWQgaW1wbGVtZW50
YXRpb24gbWF0Y2hpbmcgc3BlYyBkZXNjcmlwdGlvbiBhYm92ZS4KKyAgICAgICAgSXQgY29uc2lz
dHMgb2YgdHdvIG1haW4gcGFydC4gRE9NV2luZG93IHNwZWNpZmljIGFuZCBHYW1lcGFkcyBNYW5h
Z2VyLgorICAgICAgICBHYW1lcGFkRXZlbnRDb250cm9sbGVyIGV4aXN0cyBmb3IgZWFjaCBET01X
aW5kb3cgYW5kIHNoYXJlcyBiZXR3ZWVuCisgICAgICAgIGVhY2ggb3RoZXIgb3duZXJzaGlwIG9m
IEdhbWVwYWRzIE1hbmFnZXIuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBtYW5naW5nCisgICAgICAg
IHBhZ2Ugc3BlY2lmaWMgR2FtZXBhZCBMaXN0IC0gdXBkYXRpbmcgR2FtcGFkcyBhbmQgaXQncyB0
aW1lc3RhbXBzIGFuZAorICAgICAgICBkaXNwYXRjaGluZyBldmVudHMgdG8gd2luZG93IG9iamVj
dC4KKyAgICAgICAgR2FtZXBhZHMgTWFuYWdlciBiZWdpbnMgaXQgZXhpc3RhbmNlIHdoZW4gYW55
IG9mIHRoZSBHYW1lcGFkIEFQSSBpcworICAgICAgICBhY2Nlc3NlZCBhbmQgcGVyc2lzdCBhcyBs
b25nIGFzIHRoZSBsYXN0IEdhbWVwYWRFdmVudENvbnRyb2xsZXIgd2hpY2gKKyAgICAgICAgaGFz
IHJlcXVlc3RlZCBpdHMgaW5zdGFuY2UuIFBvcnQgc3BlY2lmaWMgcHJvdmlkZXIncyBsaWZldGlt
ZSBpcyBoYW5kbGVkCisgICAgICAgIGJ5IHRoaXMgbWFuYWdlciwgaXQgaXMgYWxzbyBmb3J3YXJk
aW5nIGluZm9ybWF0aW9uIHJlY2VpdmVkIGZyb20KKyAgICAgICAgcHJvdmlkZXIgdG8gYWxsIEdh
bWVwYWRFdmVudENvbnRyb2xsZXJzIHdoaWNoIGhhcyByZWdpc3RlcmVkIHRvIE1hbmFnZXIuCisg
ICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzcGVjLCBwbGVhc2Ugc2VlOgorICAgICAgICBodHRw
Oi8vd3d3LnczLm9yZy9UUi9nYW1lcGFkLworCisgICAgICAgIExheW91dFRlc3RzIGFuZCByZXF1
aXJlZCBsb2dpYyB3aWxsIGJlIGFkZGVkIGluIGZ1cnRoZXIgY29tbWl0cy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2Ft
ZXBhZDo6fkdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6aWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZDo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6
dGltZXN0YW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OnNldFRpbWVzdGFtcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkOjpjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZDo6c2V0Q29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6Om1hcHBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6YXhlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHYW1lcGFkOjpidXR0b25zKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5p
ZGw6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZEV2ZW50OjpjcmVhdGVDb25uZWN0ZWRHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdhbWVwYWRFdmVudDo6Y3JlYXRlRGlzY29ubmVjdGVkR2FtZXBhZCk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRFdmVudDo6R2FtZXBhZEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2Ft
ZXBhZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRJbml0OjpHYW1lcGFk
RXZlbnRJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6fkdhbWVwYWRFdmVudCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGw6CisgICAgICAgICogTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xsZXI6On5HYW1lcGFkRXZlbnRDb250
cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmFkZEdh
bWVwYWRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRy
b2xsZXI6OnJlbW92ZUdhbWVwYWRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFkQ29ubmVj
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmdhbWVwYWRE
aXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6
Z2FtZXBhZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxl
cjo6Z2FtZXBhZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxl
cjo6ZnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjppc0Fj
dGl2ZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmRpc3Bh
dGNoR2FtZXBhZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENvbnRyb2xs
ZXI6OmNoZWNrTWFuYWdlckFzc2lnbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVu
dENvbnRyb2xsZXI6OmFkZEdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50
Q29udHJvbGxlcjo6cmVtb3ZlR2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRFdmVudENvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
RXZlbnRDb250cm9sbGVyOjppc0FjdGl2ZSk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRzTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5h
Z2VyOjpHYW1lcGFkc01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2Vy
OjptYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6cmVsZWFzZU1h
bmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpzZXRQcm92aWRlckZh
Y3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpyZWdpc3RlclRvTWFu
YWdlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6OmRlcmVnaXN0ZXJGcm9t
TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6OmdhbWVwYWRDb25u
ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkRGlzY29u
bmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZENoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQXhpc0NoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQnV0dG9uQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6OnVwZGF0ZUdhbWVwYWQp
OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6OnByb3ZpZGVyKToKKyAgICAgICAgKiBN
b2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0b3JHYW1lcGFkOjp3ZWJraXRHZXRHYW1lcGFkcyk6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0b3JHYW1lcGFkOjpnZXRHYW1lcGFkcyk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0
b3JHYW1lcGFkOjpOYXZpZ2F0b3JHYW1lcGFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok5hdmlnYXRvckdhbWVwYWQ6OnN1cHBsZW1lbnROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmZyb20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVs
ZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmg6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFk
L05hdmlnYXRvckdhbWVwYWQuaWRsOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlv
bmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5Lmg6CisgICAgICAgICogZG9tL0V2
ZW50TmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5pbjoKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMp
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cu
aWRsOgorICAgICAgICAqIHBsYXRmb3JtL0dhbWVwYWRzUHJvdmlkZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHYW1lcGFkc1Byb3ZpZGVyOjpHYW1lcGFkc1Byb3ZpZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRzUHJvdmlkZXI6OmdhbWVwYWRNYW5hZ2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OnBsYXRmb3JtR2FtZXBhZHNQcm92aWRlckZhY3RvcnkpOgorICAgICAgICAqIHBs
YXRmb3JtL2VmbC9HYW1lcGFkc1Byb3ZpZGVyRWZsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkc0VmbDo6dXBkYXRlR2FtZXBhZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
R2FtZXBhZHNQcm92aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlk
ZXJHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVw
YWRzR3RrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzR3RrOjp1cGRhdGVHYW1lcGFk
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHYW1lcGFkc1Byb3ZpZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oOgorCiAyMDE0LTA2LTI0ICBKYXJlayBD
emVrYWxza2kgIDxqYXJla2N6ZWtAcG9jenRhLm9uZXQucGw+CiAKICAgICAgICAgW0FUS10gRG9u
J3QgaWdub3JlIGxpbmtzIHJlbmRlcmVkIGFzIGJsb2Nrcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZC5oCmluZGV4IDI4ZWJlMWEuLjBiZDQyYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDMzICszNSw3MCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdhbWVwYWQ6IHB1YmxpYyBSZWZDb3VudGVkPEdhbWVw
YWQ+IHsKK2NsYXNzIEdhbWVwYWREYXRhOiBwdWJsaWMgUmVmQ291bnRlZDxHYW1lcGFkRGF0YT4g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWQ+IGNyZWF0ZSgpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZERhdGE+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEdhbWVwYWREYXRhKTsKICAgICB9Ci0gICAgfkdhbWVwYWQoKTsKKyAgICB+R2FtZXBhZERhdGEo
KSB7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Cisg
ICAgdm9pZCBpZChjb25zdCBTdHJpbmcmIGlkKSB7IG1faWQgPSBpZDsgfQorCiAgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgdm9pZCBpbmRleCh1bnNp
Z25lZCB2YWwpIHsgbV9pbmRleCA9IHZhbDsgfQorCiAgICAgY29uc3QgU3RyaW5nJiBtYXBwaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9tYXBwaW5nOyB9CisgICAgdm9pZCBtYXBwaW5nKGNvbnN0IFN0
cmluZyYgbWFwcGluZykgeyBtX21hcHBpbmcgPSBtYXBwaW5nOyB9CiAKLSAgICBib29sIGNvbm5l
Y3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGVkOyB9Ci0gICAgZG91YmxlIHRpbWVzdGFt
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9Ci0gICAgY29uc3QgVmVjdG9yPGRvdWJs
ZT4mIGF4ZXMoKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8UmVmPEdhbWVwYWRCdXR0b24+PiYg
YnV0dG9ucygpIGNvbnN0OworICAgIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBheGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9heGVzOyB9CisgICAgdm9pZCByZXNpemVBeGVzKHVuc2lnbmVkIGNvdW50KTsK
KyAgICB2b2lkIHNldEF4aXModW5zaWduZWQgaW5kZXgsIGRvdWJsZSBkYXRhKTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gPiYgYnV0dG9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dG9uczsgfQorICAgIHZvaWQgcmVzaXplQnV0dG9ucyh1bnNpZ25lZCBjb3VudCk7
CisgICAgdm9pZCBzZXRCdXR0b24odW5zaWduZWQgaW5kZXgsIGNvbnN0IEdhbWVwYWRCdXR0b246
OkJ1dHRvblN0cnVjdCYgZGF0YSk7CiAKIHByaXZhdGU6Ci0gICAgR2FtZXBhZCgpOworICAgIEdh
bWVwYWREYXRhKCkKKyAgICAgICAgOiBtX2luZGV4ezB9CisgICAgeworICAgIH0KKwogICAgIFN0
cmluZyBtX2lkOwogICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgYm9vbCBtX2Nvbm5lY3RlZDsK
LSAgICBkb3VibGUgbV90aW1lc3RhbXA7CiAgICAgU3RyaW5nIG1fbWFwcGluZzsKLQogICAgIFZl
Y3Rvcjxkb3VibGU+IG1fYXhlczsKLSAgICBWZWN0b3I8UmVmPEdhbWVwYWRCdXR0b24+PiBtX2J1
dHRvbnM7CisgICAgVmVjdG9yPFJlZlB0cjxHYW1lcGFkQnV0dG9uPiA+IG1fYnV0dG9uczsKK307
CisKK2NsYXNzIEdhbWVwYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxHYW1lcGFkPiAgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWQ+IGNyZWF0ZShQYXNzUmVmUHRyPEdhbWVw
YWREYXRhPiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFk
e2RhdGF9KTsKKyAgICB9CisgICAgfkdhbWVwYWQoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5pZCgpOyB9CisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmluZGV4KCk7IH0KKworICAgIGRvdWJs
ZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQorICAgIHZvaWQgc2V0
VGltZXN0YW1wKGRvdWJsZSB2YWwpIHsgbV90aW1lc3RhbXAgPSB2YWw7IH0KKyAgICBib29sIGNv
bm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGVkOyB9CisgICAgdm9pZCBzZXRDb25u
ZWN0ZWQoYm9vbCBjb25uZWN0ZWQpIHsgbV9jb25uZWN0ZWQgPSBjb25uZWN0ZWQ7IH0KKworICAg
IGNvbnN0IFN0cmluZyYgbWFwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bWFwcGluZygp
OyB9CisgICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4ZXMoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEtPmF4ZXMoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gPiYg
YnV0dG9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+YnV0dG9ucygpOyB9Citwcml2YXRlOgor
ICAgIGV4cGxpY2l0IEdhbWVwYWQoUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4gZGF0YSk7CisgICAg
UmVmUHRyPEdhbWVwYWREYXRhPiBtX2RhdGE7CisgICAgYm9vbCBtX2Nvbm5lY3RlZDsKKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbV90aW1lc3RhbXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwKaW5kZXggNWI2
YTkzNy4uNGYyOTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
LmlkbApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
QnV0dG9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9u
LmlkbAppbmRleCAxYjZmMTg4Li5kNzZjYWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaWRsCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcAppbmRleCA1YmFkZjQ2Li41MzFlNzVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MK
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMjYgKzIzLDQxIEBACiAgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVwYWRFdmVudC5oIgogCiAjaWYgRU5B
QkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJHYW1lcGFkRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR2FtZXBhZEV2ZW50OjpHYW1lcGFk
RXZlbnQoKQorUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IEdhbWVwYWRFdmVudDo6Y3JlYXRlQ29u
bmVjdGVkR2FtZXBhZChQYXNzUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQpCit7CisgICAgR2FtZXBh
ZEV2ZW50SW5pdCBpbml0YWxpemVye2dhbWVwYWR9OworICAgIHJldHVybiBjcmVhdGUoZXZlbnRO
YW1lcygpLmdhbWVwYWRjb25uZWN0ZWRFdmVudCwgaW5pdGFsaXplcik7Cit9CisKK1Bhc3NSZWZQ
dHI8R2FtZXBhZEV2ZW50PiBHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQo
UGFzc1JlZlB0cjxHYW1lcGFkPiBnYW1lcGFkKQoreworICAgIEdhbWVwYWRFdmVudEluaXQgaW5p
dGFsaXplcntnYW1lcGFkfTsKKyAgICByZXR1cm4gY3JlYXRlKGV2ZW50TmFtZXMoKS5nYW1lcGFk
ZGlzY29ubmVjdGVkRXZlbnQsIGluaXRhbGl6ZXIpOworfQorCitFdmVudEludGVyZmFjZSBHYW1l
cGFkRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKKyAgICByZXR1cm4gR2FtZXBhZEV2
ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAotR2FtZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEdhbWVwYWQqIGdhbWVwYWQpCi0gICAgOiBFdmVudChl
dmVudFR5cGUsIGZhbHNlLCBmYWxzZSkKLSAgICAsIG1fZ2FtZXBhZChnYW1lcGFkKQorR2FtZXBh
ZEV2ZW50OjpHYW1lcGFkRXZlbnQoKQorICAgIDogbV9pbmRleHswfQogewogfQogCi1HYW1lcGFk
RXZlbnQ6OkdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3Qg
R2FtZXBhZEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGlu
aXRpYWxpemVyKQotICAgICwgbV9nYW1lcGFkKGluaXRpYWxpemVyLmdhbWVwYWQpCitHYW1lcGFk
RXZlbnQ6OkdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3Qg
R2FtZXBhZEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBFdmVudHtldmVudE5hbWUsIGlu
aXRpYWxpemVyfQorICAgICwgbV9nYW1lcGFke2luaXRpYWxpemVyLmdhbWVwYWR9CiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaAppbmRleCAx
NjhlY2E5Li5jNWYyYjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRFdmVudC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ft
c3VuZyBFbGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMiwx
MyArMjMsMTMgQEAKICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLworCiAjaWZuZGVmIEdhbWVwYWRFdmVudF9oCiAjZGVmaW5lIEdhbWVwYWRF
dmVudF9oCiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAogI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkdhbWVwYWQuaCIKICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKQEAgLTM5LDM3ICs0MCw0MCBAQCBzdHJ1Y3QgR2FtZXBhZEV2ZW50SW5pdCA6
IHB1YmxpYyBFdmVudEluaXQgewogICAgIHsKICAgICB9CiAKKyAgICBleHBsaWNpdCBHYW1lcGFk
RXZlbnRJbml0KFBhc3NSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCkKKyAgICAgICAgOiBnYW1lcGFk
e2dhbWVwYWR9CisgICAgeworICAgIH0KKwogICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkOwog
fTsKIAogY2xhc3MgR2FtZXBhZEV2ZW50IDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKLSAgICB+
R2FtZXBhZEV2ZW50KCkgeyB9CisgICAgfkdhbWVwYWRFdmVudCgpID0gZGVmYXVsdDsKIAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gY3JlYXRlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZEV2ZW50KTsKICAgICB9Ci0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgR2FtZXBhZCogZ2FtZXBhZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZl
bnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudElu
aXQmIGluaXRpYWxpemVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1l
cGFkRXZlbnQoZXZlbnRUeXBlLCBnYW1lcGFkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2FtZXBhZEV2ZW50e3R5cGUsIGluaXRpYWxpemVyfSk7CiAgICAgfQorICAgIHZpcnR1YWwg
fkdhbWVwYWRFdmVudCgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEV2ZW50PiBj
cmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudElu
aXQmIGluaXRpYWxpemVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1l
cGFkRXZlbnQoZXZlbnRUeXBlLCBpbml0aWFsaXplcikpOwotICAgIH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0ZUNvbm5lY3RlZEdhbWVwYWQoUGFzc1JlZlB0cjxH
YW1lcGFkPiBnYW1lcGFkKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNy
ZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQoUGFzc1JlZlB0cjxHYW1lcGFkPiBnYW1lcGFkKTsKIAog
ICAgIEdhbWVwYWQqIGdhbWVwYWQoKSBjb25zdCB7IHJldHVybiBtX2dhbWVwYWQuZ2V0KCk7IH0K
IAotICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBHYW1lcGFkRXZlbnRJbnRlcmZhY2VUeXBlOyB9CisgICAgdmlydHVhbCBF
dmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRl
OgogICAgIEdhbWVwYWRFdmVudCgpOwotICAgIGV4cGxpY2l0IEdhbWVwYWRFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgR2FtZXBhZCopOwotICAgIEdhbWVwYWRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgR2FtZXBhZEV2ZW50SW5pdCYpOworICAg
IEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdhbWVwYWRFdmVu
dEluaXQmIGluaXRpYWxpemVyKTsKIAorICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgUmVmUHRy
PEdhbWVwYWQ+IG1fZ2FtZXBhZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKaW5kZXggMTU3NzkxOC4uNDQxNzMxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTM3OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAq
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUg
IkdhbWVwYWRFdmVudC5oIgorI2luY2x1ZGUgIkdhbWVwYWRFdmVudENvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJHYW1lcGFkc01hbmFnZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVf
cHRyPEdhbWVwYWRFdmVudENvbnRyb2xsZXI+IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmNyZWF0
ZShET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHYW1l
cGFkRXZlbnRDb250cm9sbGVyPih3aW5kb3cpOworfQorCitHYW1lcGFkRXZlbnRDb250cm9sbGVy
OjpHYW1lcGFkRXZlbnRDb250cm9sbGVyKERPTVdpbmRvdyogd2luZG93KQorICAgIDogbV9saXN0
ZW5lcnNDb3VudGVyezB9LAorICAgICAgbV9nYW1lcGFkc01hbmFnZXJ7bnVsbHB0cn0sCisgICAg
ICBtX3dpbmRvd3t3aW5kb3d9Cit7Cit9CisKK0dhbWVwYWRFdmVudENvbnRyb2xsZXI6On5HYW1l
cGFkRXZlbnRDb250cm9sbGVyKCkKK3sKKyAgICBpZiAobV9nYW1lcGFkc01hbmFnZXIpCisgICAg
ICAgIG1fZ2FtZXBhZHNNYW5hZ2VyLT5kZXJlZ2lzdGVyRnJvbU1hbmFnZXIodGhpcyk7Cit9CisK
K3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6YWRkR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQor
eworICAgIGNoZWNrTWFuYWdlckFzc2lnbmVkKCk7CisgICAgKyttX2xpc3RlbmVyc0NvdW50ZXI7
Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6cmVtb3ZlR2FtZXBhZEV2ZW50TGlz
dGVuZXIoKQoreworICAgIGlmIChtX2xpc3RlbmVyc0NvdW50ZXIpCisgICAgICAgIC0tbV9saXN0
ZW5lcnNDb3VudGVyOworfQorCit2b2lkIEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUFs
bEdhbWVwYWRFdmVudExpc3RlbmVycygpCit7CisgICAgbV9saXN0ZW5lcnNDb3VudGVyID0gMDsK
K30KKworY29uc3QgY2hhciogR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUo
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGdhbWVwYWRFdmVudENvbnRyb2xsZXJTdHJpbmdb
XSA9ICJHYW1lcGFkRXZlbnRDb250cm9sbGVyIjsKKyAgICByZXR1cm4gZ2FtZXBhZEV2ZW50Q29u
dHJvbGxlclN0cmluZzsKK30KKwordm9pZCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFk
Q29ubmVjdGVkKHVuc2lnbmVkIGluZGV4LCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPiBkYXRhKQor
eworICAgIGF1dG8gZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZShkYXRhKTsKKyAgICAvLyBGSVhN
RTogc2V0IHRpbWVzdGFtcCByZWxhdGl2ZSB0byBwYWdlIHN0YXJ0IHRpbWUsIGFzIGluIGN1cnJl
bnQgZ2FtZXBhZCBzcGVjCisgICAgZ2FtZXBhZC0+c2V0VGltZXN0YW1wKGN1cnJlbnRUaW1lTVMo
KSk7CisgICAgLy8gZ2FtZXBhZC5nZXQoKSB0byBjcmVhdGUgYW5vdGhlciBQYXNzUmVmUHRyIGFu
ZCBub3QgbW92ZSB0aGUgY3VycmVudCBvbmUuCisgICAgYWRkR2FtZXBhZChpbmRleCwgZ2FtZXBh
ZC5nZXQoKSk7CisgICAgZ2FtZXBhZC0+c2V0Q29ubmVjdGVkKHRydWUpOworICAgIGlmIChtX2xp
c3RlbmVyc0NvdW50ZXIpCisgICAgICAgIGRpc3BhdGNoR2FtZXBhZEV2ZW50KEdhbWVwYWRFdmVu
dDo6Y3JlYXRlQ29ubmVjdGVkR2FtZXBhZChnYW1lcGFkKSk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2
ZW50Q29udHJvbGxlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCwgUGFzc1Jl
ZlB0cjxHYW1lcGFkRGF0YT4gLypkYXRhKi8pCit7CisgICAgaWYgKGluZGV4ID49IG1fZ2FtZXBh
ZHMuc2l6ZSgpIHx8ICFtX2dhbWVwYWRzW2luZGV4XSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGF1dG8gZ2FtZXBhZCA9IG1fZ2FtZXBhZHNbaW5kZXhdKSB7CisgICAgICAgIHJlbW92ZUdh
bWVwYWQoaW5kZXgpOworICAgICAgICBnYW1lcGFkLT5zZXRDb25uZWN0ZWQoZmFsc2UpOworICAg
ICAgICBpZiAobV9saXN0ZW5lcnNDb3VudGVyKQorICAgICAgICAgICAgZGlzcGF0Y2hHYW1lcGFk
RXZlbnQoR2FtZXBhZEV2ZW50OjpjcmVhdGVEaXNjb25uZWN0ZWRHYW1lcGFkKGdhbWVwYWQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Z2FtZXBhZENoYW5nZWQo
dW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8R2FtZXBhZERhdGE+IGRhdGEpCit7CisgICAgaWYo
aW5kZXggPj0gbV9nYW1lcGFkcy5zaXplKCkgfHwgIW1fZ2FtZXBhZHNbaW5kZXhdKQorICAgICAg
ICBnYW1lcGFkQ29ubmVjdGVkKGluZGV4LCBkYXRhKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ2Ft
ZXBhZHNbaW5kZXhdLT5zZXRUaW1lc3RhbXAoY3VycmVudFRpbWVNUygpKTsKK30KKworY29uc3Qg
VmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFk
TGlzdCgpCit7CisgICAgY2hlY2tNYW5hZ2VyQXNzaWduZWQoKTsKKyAgICByZXR1cm4gbV9nYW1l
cGFkczsKK30KKworR2FtZXBhZEV2ZW50Q29udHJvbGxlciogR2FtZXBhZEV2ZW50Q29udHJvbGxl
cjo6ZnJvbShET01XaW5kb3cqIHdpbmRvdykKK3sKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBzdXBwbGVtZW50
ID0gc3RhdGljX2Nhc3Q8R2FtZXBhZEV2ZW50Q29udHJvbGxlcio+KFN1cHBsZW1lbnQ8RE9NV2lu
ZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCkpKTsKKyAgICBpZiAoIXN1cHBsZW1l
bnQpIHsKKyAgICAgICAgYXV0byBuZXdJbnN0YW5jZSA9IGNyZWF0ZSh3aW5kb3cpOworICAgICAg
ICBzdXBwbGVtZW50ID0gbmV3SW5zdGFuY2UuZ2V0KCk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5k
b3csIHN1cHBsZW1lbnROYW1lKCksIHN0ZDo6bW92ZShuZXdJbnN0YW5jZSkpOworICAgIH0KKyAg
ICByZXR1cm4gc3VwcGxlbWVudDsKK30KKworYm9vbCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpp
c0FjdGl2ZUF0KERPTVdpbmRvdyogd2luZG93KQoreworICAgIGlmIChHYW1lcGFkRXZlbnRDb250
cm9sbGVyKiBzZWxmID0gR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZnJvbSh3aW5kb3cpKQorICAg
ICAgICByZXR1cm4gc2VsZi0+aXNBY3RpdmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZGlzcGF0Y2hHYW1lcGFkRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQpCit7CisgICAgaWYgKGlzQWN0aXZlKCkgJiYgIW1fd2luZG93LT5kb2N1
bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgJiYgIW1fd2luZG93LT5kb2N1
bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQorICAgICAgICBtX3dpbmRvdy0+
ZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6
Y2hlY2tNYW5hZ2VyQXNzaWduZWQoKQoreworICAgIGlmICghbV9nYW1lcGFkc01hbmFnZXIpIHsK
KyAgICAgICAgbV9nYW1lcGFkc01hbmFnZXIgPSBHYW1lcGFkc01hbmFnZXI6Om1hbmFnZXIoKTsK
KyAgICAgICAgbV9nYW1lcGFkc01hbmFnZXItPnJlZ2lzdGVyVG9NYW5hZ2VyKHRoaXMpOworICAg
IH0KK30KKwordm9pZCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjphZGRHYW1lcGFkKHVuc2lnbmVk
IGluZGV4LCBQYXNzUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQpCit7CisgICAgQVNTRVJUKGdhbWVw
YWQpOworCisgICAgaWYgKGluZGV4ID49IG1fZ2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBtX2dh
bWVwYWRzLmdyb3coaW5kZXggKyAxKTsKKyAgICBtX2dhbWVwYWRzW2luZGV4XSA9IGdhbWVwYWQ7
Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6cmVtb3ZlR2FtZXBhZCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtX2dhbWVwYWRzLnNpemUoKSk7CisKKyAg
ICBpZiAoaW5kZXggPT0gbV9nYW1lcGFkcy5zaXplKCkgLSAxKSB7CisgICAgICAgIGF1dG8gc2hy
aW5rU2l6ZSA9IG1fZ2FtZXBhZHMuc2l6ZSgpIC0gMTsgLy8gbGFzdCB3aWxsIGJlIGRlbGV0ZWQK
KyAgICAgICAgd2hpbGUgKHNocmlua1NpemUgPiAwICYmICFtX2dhbWVwYWRzW3Nocmlua1NpemUg
LSAxXSkKKyAgICAgICAgICAgIC0tc2hyaW5rU2l6ZTsKKyAgICAgICAgbV9nYW1lcGFkcy5zaHJp
bmsoc2hyaW5rU2l6ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZ2FtZXBhZHNbaW5kZXhdID0g
bnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2Ft
ZXBhZEV2ZW50Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRFdmVudENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43MWZlMTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBHYW1lcGFkRXZlbnRDb250cm9sbGVyX2gKKyNkZWZpbmUgR2FtZXBhZEV2ZW50
Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIlN1cHBsZW1l
bnRhYmxlLmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERPTVdpbmRvdzsKK2NsYXNzIEV2ZW50OworY2xhc3MgR2FtZXBhZERhdGE7CitjbGFzcyBHYW1l
cGFkOworY2xhc3MgR2FtZXBhZHNNYW5hZ2VyOworCitjbGFzcyBHYW1lcGFkRXZlbnRDb250cm9s
bGVyIDogcHVibGljIFN1cHBsZW1lbnQ8RE9NV2luZG93PiB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR2FtZXBhZEV2ZW50Q29udHJvbGxlcik7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxHYW1lcGFkRXZlbnRDb250cm9sbGVyPiBjcmVhdGUoRE9NV2luZG93Kik7CisK
KyAgICBleHBsaWNpdCBHYW1lcGFkRXZlbnRDb250cm9sbGVyKERPTVdpbmRvdyopOworICAgIH5H
YW1lcGFkRXZlbnRDb250cm9sbGVyKCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxl
bWVudE5hbWUoKTsKKyAgICBzdGF0aWMgR2FtZXBhZEV2ZW50Q29udHJvbGxlciogZnJvbShET01X
aW5kb3cqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0FjdGl2ZUF0KERPTVdpbmRvdyopOworCisgICAg
dm9pZCBhZGRHYW1lcGFkRXZlbnRMaXN0ZW5lcigpOworICAgIHZvaWQgcmVtb3ZlR2FtZXBhZEV2
ZW50TGlzdGVuZXIoKTsKKyAgICB2b2lkIHJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygp
OworCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdGVuZXJzQ291bnRl
cjsgfQorCisgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkLCBQYXNzUmVmUHRyPEdh
bWVwYWREYXRhPik7CisgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkLCBQYXNz
UmVmUHRyPEdhbWVwYWREYXRhPik7CisgICAgdm9pZCBnYW1lcGFkQ2hhbmdlZCh1bnNpZ25lZCwg
UGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4pOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1l
cGFkPiA+JiAgZ2FtZXBhZExpc3QoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZGlzcGF0Y2hH
YW1lcGFkRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgY2hlY2tNYW5hZ2VyQXNz
aWduZWQoKTsKKyAgICB2b2lkIGFkZEdhbWVwYWQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8
R2FtZXBhZD4pOworICAgIHZvaWQgcmVtb3ZlR2FtZXBhZCh1bnNpZ25lZCBpbmRleCk7CisKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV9saXN0ZW5lcnNDb3VudGVyOworICAgIFZlY3RvcjxSZWZQ
dHI8R2FtZXBhZD4gPiBtX2dhbWVwYWRzOworICAgIFJlZlB0cjxHYW1lcGFkc01hbmFnZXI+IG1f
Z2FtZXBhZHNNYW5hZ2VyOworICAgIERPTVdpbmRvdyogbV93aW5kb3c7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKKworI2VuZGlmIC8v
IEdhbWVwYWRFdmVudENvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wZTdjM2RlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVw
YWRFdmVudENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJHYW1lcGFkc01hbmFnZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQcm92aWRlckZhY3RvcnlGdW5jdGlvbiBHYW1lcGFkc01hbmFn
ZXI6OnNfcHJvdmlkZXJGYWN0b3J5ID0gcGxhdGZvcm1HYW1lcGFkc1Byb3ZpZGVyRmFjdG9yeSgp
OworUmVmUHRyPEdhbWVwYWRzTWFuYWdlcj4gR2FtZXBhZHNNYW5hZ2VyOjpzX21hbmFnZXI7CisK
K0dhbWVwYWRzTWFuYWdlcjo6R2FtZXBhZHNNYW5hZ2VyKCkKK3sKKyAgICAvKgorICAgICAqIEdh
bWVwYWRzTWFuYWdlciBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBjb21wbGV0ZWQgd2hlbiBpdCBjcmVh
dGVzIHByb3ZpZGVyIGFzIGl0IGNhbgorICAgICAqIGluZm9ybSBNYW5nZXIgYWJvdXQgY3VycmVu
dGx5IGNvbm5lY3RlZCBnYW1lcGFkcy4KKyAgICAgKi8KKyAgICBtX2dhbWVwYWRzUHJvdmlkZXIg
PSBzX3Byb3ZpZGVyRmFjdG9yeSh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxHYW1lcGFkc01hbmFn
ZXI+IEdhbWVwYWRzTWFuYWdlcjo6bWFuYWdlcigpCit7CisgICAgaWYgKCFzX21hbmFnZXIpCisg
ICAgICAgIHNfbWFuYWdlciA9IGFkb3B0UmVmKCpuZXcgR2FtZXBhZHNNYW5hZ2VyKCkpOworICAg
IHJldHVybiBzX21hbmFnZXI7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjpyZWxlYXNlTWFu
YWdlcigpCit7CisgICAgc19tYW5hZ2VyID0gbnVsbHB0cjsKK30KKwordm9pZCBHYW1lcGFkc01h
bmFnZXI6OnNldFByb3ZpZGVyRmFjdG9yeShjb25zdCBQcm92aWRlckZhY3RvcnlGdW5jdGlvbiYg
ZmFjdG9yeSkKK3sKKyAgICBzX3Byb3ZpZGVyRmFjdG9yeSA9IGZhY3Rvcnk7Cit9CisKK3ZvaWQg
R2FtZXBhZHNNYW5hZ2VyOjpyZWdpc3RlclRvTWFuYWdlcihHYW1lcGFkRXZlbnRDb250cm9sbGVy
KiBjb250cm9sbGVyKQoreworICAgIG1fY29udHJvbGxlcnMuYWRkKGNvbnRyb2xsZXIpOworfQor
Cit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6ZGVyZWdpc3RlckZyb21NYW5hZ2VyKEdhbWVwYWRFdmVu
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9sbGVycy5yZW1vdmUoY29u
dHJvbGxlcik7CisgICAgaWYgKCFtX2NvbnRyb2xsZXJzLnNpemUoKSkKKyAgICAgICAgcmVsZWFz
ZU1hbmFnZXIoKTsKK30KKwordW5zaWduZWQgR2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQ29ubmVj
dGVkKGNvbnN0IEdhbWVwYWREZXZpY2UmIGRldmljZSkKK3sKKyAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICBmb3IgKDsgaSA8IG1fZ2FtZXBhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2dhbWVwYWRzW2ldKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChpID09IG1f
Z2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBtX2dhbWVwYWRzLmFwcGVuZChHYW1lcGFkRGF0YTo6
Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9nYW1lcGFkc1tpXSA9IEdhbWVwYWREYXRh
OjpjcmVhdGUoKTsKKworICAgIC8vIEZJWE1FOiBnYW1lcGFkIGlkIHNob3VsZCBiZSBjb25zaXN0
ZW50IGVnLiBkcml2ZXItdmVyc2lvbi1uYW1lCisgICAgLy8gU2V0IGlkIG9uIGNvbm5lY3Rpb24g
YXMgaXQgc2hvdWxkIG5vdCBjaGFuZ2UgbGF0ZXIuCisgICAgbV9nYW1lcGFkc1tpXS0+aWQoZGV2
aWNlLmlkKCkpOworICAgIC8vIEZJWE1FOiBjdXJyZW50bHkgaXQgaXMgaW1wb3NzaWJsZSB0byBk
ZXRlY3QgZ2FtZXBhZCBsYXlvdXQKKyAgICBtX2dhbWVwYWRzW2ldLT5tYXBwaW5nKCJyYXciKTsK
KyAgICBtX2dhbWVwYWRzW2ldLT5pbmRleChpKTsKKyAgICB1cGRhdGVHYW1lcGFkKGksIGRldmlj
ZSk7CisgICAgZm9yIChhdXRvJiBjb250cm9sbGVyIDogbV9jb250cm9sbGVycykKKyAgICAgICAg
Y29udHJvbGxlci0+Z2FtZXBhZENvbm5lY3RlZChpLCBtX2dhbWVwYWRzW2ldKTsKKworICAgIHJl
dHVybiBpOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCh1
bnNpZ25lZCBpZCwgY29uc3QgR2FtZXBhZERldmljZSYgLypkZXZpY2UqLykKK3sKKyAgICBBU1NF
UlQoaWQgPCBtX2dhbWVwYWRzLnNpemUoKSAmJiBtX2dhbWVwYWRzW2lkXSk7CisKKyAgICBmb3Ig
KGF1dG8mIGNvbnRyb2xsZXIgOiBtX2NvbnRyb2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5n
YW1lcGFkRGlzY29ubmVjdGVkKGlkLCBtX2dhbWVwYWRzW2lkXSk7CisKKyAgICBpZiAoaWQgPT0g
bV9nYW1lcGFkcy5zaXplKCkgLSAxKSB7CisgICAgICAgIGF1dG8gc2hyaW5rU2l6ZSA9IG1fZ2Ft
ZXBhZHMuc2l6ZSgpIC0gMTsgLy8gbGFzdCB3aWxsIGJlIGRlbGV0ZWQKKyAgICAgICAgd2hpbGUg
KHNocmlua1NpemUgPiAwICYmICFtX2dhbWVwYWRzW3Nocmlua1NpemUgLSAxXSkKKyAgICAgICAg
ICAgIC0tc2hyaW5rU2l6ZTsKKyAgICAgICAgbV9nYW1lcGFkcy5zaHJpbmsoc2hyaW5rU2l6ZSk7
CisgICAgfSBlbHNlCisgICAgICAgIG1fZ2FtZXBhZHNbaWRdID0gbnVsbHB0cjsKK30KKwordm9p
ZCBHYW1lcGFkc01hbmFnZXI6OmdhbWVwYWRDaGFuZ2VkKHVuc2lnbmVkIGlkLCBjb25zdCBHYW1l
cGFkRGV2aWNlJiBkZXZpY2UpCit7CisgICAgQVNTRVJUKGlkIDwgbV9nYW1lcGFkcy5zaXplKCkg
JiYgbV9nYW1lcGFkc1tpZF0pOworCisgICAgdXBkYXRlR2FtZXBhZChpZCwgZGV2aWNlKTsKKyAg
ICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBtX2NvbnRyb2xsZXJzKQorICAgICAgICBjb250cm9s
bGVyLT5nYW1lcGFkQ2hhbmdlZChpZCwgbV9nYW1lcGFkc1tpZF0pOworfQorCit2b2lkIEdhbWVw
YWRzTWFuYWdlcjo6Z2FtZXBhZEF4aXNDaGFuZ2VkKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpbmRl
eCwgZG91YmxlIHZhbHVlKQoreworICAgIEFTU0VSVChpZCA8IG1fZ2FtZXBhZHMuc2l6ZSgpICYm
IG1fZ2FtZXBhZHNbaWRdKTsKKworICAgIG1fZ2FtZXBhZHNbaWRdLT5zZXRBeGlzKGluZGV4LCB2
YWx1ZSk7CisgICAgZm9yIChhdXRvJiBjb250cm9sbGVyIDogbV9jb250cm9sbGVycykKKyAgICAg
ICAgY29udHJvbGxlci0+Z2FtZXBhZENoYW5nZWQoaWQsIG1fZ2FtZXBhZHNbaWRdKTsKK30KKwor
dm9pZCBHYW1lcGFkc01hbmFnZXI6OmdhbWVwYWRCdXR0b25DaGFuZ2VkKHVuc2lnbmVkIGlkLCB1
bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBhZEJ1dHRvbjo6QnV0dG9uU3RydWN0JiBkYXRhKQor
eworICAgIEFTU0VSVChpZCA8IG1fZ2FtZXBhZHMuc2l6ZSgpICYmIG1fZ2FtZXBhZHNbaWRdKTsK
KworICAgIG1fZ2FtZXBhZHNbaWRdLT5zZXRCdXR0b24oaW5kZXgsIGRhdGEpOworICAgIGZvciAo
YXV0byYgY29udHJvbGxlciA6IG1fY29udHJvbGxlcnMpCisgICAgICAgIGNvbnRyb2xsZXItPmdh
bWVwYWRDaGFuZ2VkKGlkLCBtX2dhbWVwYWRzW2lkXSk7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5h
Z2VyOjp1cGRhdGVHYW1lcGFkKHVuc2lnbmVkIGluZGV4LCBjb25zdCBHYW1lcGFkRGV2aWNlJiBk
ZXZpY2UpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbV9nYW1lcGFkcy5zaXplKCkgJiYgbV9nYW1l
cGFkc1tpbmRleF0pOworCisgICAgYXV0byYgZ2FtZXBhZCA9IG1fZ2FtZXBhZHNbaW5kZXhdOwor
ICAgIGF1dG8gYXhlc0NvdW50ID0gZGV2aWNlLmF4ZXNDb3VudCgpOworICAgIGF1dG8gYXhlcyA9
IGRldmljZS5heGVzQXJyYXkoKTsKKyAgICBhdXRvIGJ1dHRvbnNDb3VudCA9IGRldmljZS5idXR0
b25zQ291bnQoKTsKKyAgICBhdXRvIGJ1dHRvbnMgPSBkZXZpY2UuYnV0dG9uc0FycmF5KCk7CisK
KyAgICBpZiAoZ2FtZXBhZC0+YXhlcygpLnNpemUoKSAhPSBheGVzQ291bnQpCisgICAgICAgIGdh
bWVwYWQtPnJlc2l6ZUF4ZXMoYXhlc0NvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXhlc0NvdW50OyArK2kpCisgICAgICAgIGdhbWVwYWQtPnNldEF4aXMoaW5kZXgsIGF4ZXNb
aV0pOworCisgICAgaWYgKGdhbWVwYWQtPmJ1dHRvbnMoKS5zaXplKCkgIT0gYnV0dG9uc0NvdW50
KQorICAgICAgICBnYW1lcGFkLT5yZXNpemVCdXR0b25zKGJ1dHRvbnNDb3VudCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRvbnNDb3VudDsgKytpKQorICAgICAgICBnYW1lcGFk
LT5zZXRCdXR0b24oaW5kZXgsIGJ1dHRvbnNbaV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zYTk3OTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEdhbWVwYWRzTWFuYWdlcl9oCisjZGVmaW5lIEdhbWVwYWRzTWFuYWdlcl9o
CisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIkdhbWVwYWRzUHJvdmlkZXIuaCIK
KyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBh
ZERhdGE7CitjbGFzcyBHYW1lcGFkRXZlbnRDb250cm9sbGVyOworY2xhc3MgR2FtZXBhZHNQcm92
aWRlcjsKKworY2xhc3MgR2FtZXBhZHNNYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8R2FtZXBh
ZHNNYW5hZ2VyPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2FtZXBhZHNNYW5hZ2VyKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkc01hbmFnZXI+IG1hbmFnZXIo
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQcm92aWRlckZhY3RvcnkoY29uc3QgUHJvdmlkZXJGYWN0
b3J5RnVuY3Rpb24mKTsKKyAgICBHYW1lcGFkc1Byb3ZpZGVyKiBwcm92aWRlcigpIHsgcmV0dXJu
IG1fZ2FtZXBhZHNQcm92aWRlci5nZXQoKTsgfQorCisgICAgdm9pZCByZWdpc3RlclRvTWFuYWdl
cihHYW1lcGFkRXZlbnRDb250cm9sbGVyKik7CisgICAgdm9pZCBkZXJlZ2lzdGVyRnJvbU1hbmFn
ZXIoR2FtZXBhZEV2ZW50Q29udHJvbGxlciopOworCisgICAgLyoKKyAgICAgKiBSZWdpc3RlcnMg
Z2FtZXBhZCBhbmQgcmV0dXJucyBpZCBmb3IgZnVydGhlciB1cGRhdGVzLgorICAgICAqLworICAg
IHVuc2lnbmVkIGdhbWVwYWRDb25uZWN0ZWQoY29uc3QgR2FtZXBhZERldmljZSYpOworICAgIHZv
aWQgZ2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpZCwgY29uc3QgR2FtZXBhZERldmljZSYp
OworICAgIHZvaWQgZ2FtZXBhZENoYW5nZWQodW5zaWduZWQgaWQsIGNvbnN0IEdhbWVwYWREZXZp
Y2UmKTsKKyAgICB2b2lkIGdhbWVwYWRBeGlzQ2hhbmdlZCh1bnNpZ25lZCBpZCwgdW5zaWduZWQg
aW5kZXgsIGRvdWJsZSB2YWx1ZSk7CisgICAgdm9pZCBnYW1lcGFkQnV0dG9uQ2hhbmdlZCh1bnNp
Z25lZCBpZCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEdhbWVwYWRCdXR0b246OkJ1dHRvblN0cnVj
dCYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VNYW5hZ2VyKCk7CisKKyAg
ICBzdGF0aWMgUHJvdmlkZXJGYWN0b3J5RnVuY3Rpb24gc19wcm92aWRlckZhY3Rvcnk7CisgICAg
c3RhdGljIFJlZlB0cjxHYW1lcGFkc01hbmFnZXI+IHNfbWFuYWdlcjsKKworICAgIEdhbWVwYWRz
TWFuYWdlcigpOworICAgIHZvaWQgdXBkYXRlR2FtZXBhZCh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
R2FtZXBhZERldmljZSYpOworCisgICAgVmVjdG9yPFJlZlB0cjxHYW1lcGFkRGF0YT4+IG1fZ2Ft
ZXBhZHM7CisgICAgT3duUHRyPEdhbWVwYWRzUHJvdmlkZXI+IG1fZ2FtZXBhZHNQcm92aWRlcjsK
KyAgICBIYXNoU2V0PEdhbWVwYWRFdmVudENvbnRyb2xsZXIqPiBtX2NvbnRyb2xsZXJzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCisK
KyNlbmRpZiAvLyBHYW1lcGFkc01hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCmluZGV4IDE0MmY3N2IuLjFlNTI1NDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1l
cGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2Ft
ZXBhZC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNCw0NCArMjUsMjggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTmF2aWdhdG9yR2FtZXBhZC5oIgogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAK
KyNpbmNsdWRlICJOYXZpZ2F0b3JHYW1lcGFkLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVw
YWRFdmVudENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OYXZpZ2F0b3JH
YW1lcGFkOjpOYXZpZ2F0b3JHYW1lcGFkKCkKLXsKLX0KLQotY29uc3QgY2hhciogTmF2aWdhdG9y
R2FtZXBhZDo6c3VwcGxlbWVudE5hbWUoKQotewotICAgIHJldHVybiAiTmF2aWdhdG9yR2FtZXBh
ZCI7Ci19Ci0KLU5hdmlnYXRvckdhbWVwYWQqIE5hdmlnYXRvckdhbWVwYWQ6OmZyb20oTmF2aWdh
dG9yKiBuYXZpZ2F0b3IpCi17Ci0gICAgTmF2aWdhdG9yR2FtZXBhZCogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PE5hdmlnYXRvckdhbWVwYWQqPihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20o
bmF2aWdhdG9yLCBzdXBwbGVtZW50TmFtZSgpKSk7Ci0gICAgaWYgKCFzdXBwbGVtZW50KSB7Ci0g
ICAgICAgIGF1dG8gbmV3U3VwcGxlbWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8TmF2aWdhdG9yR2Ft
ZXBhZD4oKTsKLSAgICAgICAgc3VwcGxlbWVudCA9IG5ld1N1cHBsZW1lbnQuZ2V0KCk7Ci0gICAg
ICAgIHByb3ZpZGVUbyhuYXZpZ2F0b3IsIHN1cHBsZW1lbnROYW1lKCksIHN0ZDo6bW92ZShuZXdT
dXBwbGVtZW50KSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBwbGVtZW50OwotfQotCi1jb25zdCBW
ZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBhZHMoTmF2
aWdhdG9yKiBuYXZpZ2F0b3IpCitjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mIE5hdmln
YXRvckdhbWVwYWQ6OndlYmtpdEdldEdhbWVwYWRzKE5hdmlnYXRvciogbmF2aWdhdG9yKQogewot
ICAgIHJldHVybiBOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKG5hdmlnYXRvciktPmdhbWVwYWRzKCk7
CisgICAgcmV0dXJuIE5hdmlnYXRvckdhbWVwYWQ6OmdldEdhbWVwYWRzKG5hdmlnYXRvcik7CiB9
CiAKLWNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1lcGFkOjpnYW1l
cGFkcygpCitjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mIE5hdmlnYXRvckdhbWVwYWQ6
OmdldEdhbWVwYWRzKE5hdmlnYXRvciogbmF2aWdhdG9yKQogewotICAgIHJldHVybiBtX2dhbWVw
YWRzOworICAgIEFTU0VSVChuYXZpZ2F0b3IpOworICAgIHJldHVybiBHYW1lcGFkRXZlbnRDb250
cm9sbGVyOjpmcm9tKG5hdmlnYXRvci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkp
LT5nYW1lcGFkTGlzdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaAppbmRleCA1NTc5
MGE0Li43NmIyYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
TmF2aWdhdG9yR2FtZXBhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9O
YXZpZ2F0b3JHYW1lcGFkLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoR0FNRVBB
RCkKIAotI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM2LDIwICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHYW1lcGFkOwogY2xh
c3MgTmF2aWdhdG9yOwogCi1jbGFzcyBOYXZpZ2F0b3JHYW1lcGFkIDogcHVibGljIFN1cHBsZW1l
bnQ8TmF2aWdhdG9yPiB7CitjbGFzcyBOYXZpZ2F0b3JHYW1lcGFkIHsKIHB1YmxpYzoKLSAgICBO
YXZpZ2F0b3JHYW1lcGFkKCk7Ci0KLSAgICBzdGF0aWMgTmF2aWdhdG9yR2FtZXBhZCogZnJvbShO
YXZpZ2F0b3IqKTsKLQotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYg
Z2V0R2FtZXBhZHMoTmF2aWdhdG9yKik7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+
PiYgZ2FtZXBhZHMoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+IG1fZ2FtZXBhZHM7
CisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4gPiYgIHdlYmtpdEdldEdh
bWVwYWRzKE5hdmlnYXRvciopOworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVw
YWQ+ID4mICBnZXRHYW1lcGFkcyhOYXZpZ2F0b3IqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0
b3JHYW1lcGFkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JH
YW1lcGFkLmlkbAppbmRleCBiYWMyYTczLi45OTZmOTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaWRsCkBAIC0yNiw2ICsyNiw3
IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9R0FNRVBBRCwKIF0gcGFydGlhbCBpbnRlcmZhY2UgTmF2
aWdhdG9yIHsKKyAgICBHYW1lcGFkW10gd2Via2l0R2V0R2FtZXBhZHMoKTsKICAgICBHYW1lcGFk
W10gZ2V0R2FtZXBhZHMoKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNjc1
YjFkMS4uZjkxM2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTc5LDcgKzc5LDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZWZsL0Vycm9yc0Vm
bC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNwcAogICAgIHBsYXRmb3JtL2Vm
bC9GaWxlU3lzdGVtRWZsLmNwcAotICAgIHBsYXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAKKyAg
ICBwbGF0Zm9ybS9lZmwvR2FtZXBhZHNQcm92aWRlckVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwv
TGFuZ3VhZ2VFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL0xvY2FsaXplZFN0cmluZ3NFZmwuY3Bw
CiAgICAgcGxhdGZvcm0vZWZsL0xvZ2dpbmdFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IDlkNGYwMWMuLjNlMWFjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC05
OCw3ICs5OCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCiAKLSAgICBwbGF0Zm9y
bS9ndGsvR2FtZXBhZHNHdGsuY3BwCisgICAgcGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJH
dGsuY3BwCiAKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAKIApAQCAtNTU0LDggKzU1NCw3IEBAIGxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5k
aW5nc1N0YWJsZV9JRExfRklMRVMKIGxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc1Vuc3Rh
YmxlX0lETF9GSUxFUwogICAgIE1vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwKIAot
ICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNhdGVkL0dhbWVwYWQuaWRsCi0gICAgTW9kdWxlcy9n
YW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCisgICAgTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuaWRsCiAKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAppbmRleCA4MzlhZmY4
Li5hOTgxYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5j
cHAKQEAgLTUyLDYgKzUyLDEwIEBACiAjaW5jbHVkZSAiSlNNZWRpYVN0cmVhbVRyYWNrLmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShHQU1FUEFEKQorI2luY2x1ZGUgIkpTR2FtZXBhZC5oIgorI2Vu
ZGlmCisKICNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQogI2luY2x1ZGUgIkpTU3BlZWNoUmVj
b2duaXRpb25SZXN1bHRMaXN0LmgiCiAjZW5kaWYKQEAgLTI2Miw2ICsyNjYsMTMgQEAgdm9pZCBK
U0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBSZWZQdHIKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCit2b2lk
IEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBSZWZQdHI8R2FtZXBhZD4mIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB0b0dhbWVw
YWQodmFsdWUpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQogdm9p
ZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mIHJlc3VsdCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKaW5kZXggY2QxMzBjYS4u
ZGRiNWRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKQEAg
LTEzOCw2ICsxMzgsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPERPTUVycm9yPiYgcmVzdWx0KTsK
ICAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiByZXN1bHQpOwogI2VuZGlmCisjaWYgRU5BQkxFKEdB
TUVQQUQpCisgICAgc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBSZWZQdHI8R2FtZXBhZD4mIHJlc3VsdCk7CisjZW5kaWYKICNpZiBFTkFCTEUo
U0NSSVBURURfU1BFRUNIKQogICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4m
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKaW5kZXggM2I2ODU2Ny4uNWUyNzk5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCkBAIC02OSw2ICs2OSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBtYWNybyhmb2N1cykgXAogICAgIG1hY3JvKGZvY3VzaW4pIFwKICAgICBtYWNy
byhmb2N1c291dCkgXAorICAgIG1hY3JvKGdhbWVwYWRjb25uZWN0ZWQpIFwKKyAgICBtYWNybyhn
YW1lcGFkZGlzY29ubmVjdGVkKSBcCiAgICAgbWFjcm8oZ2VzdHVyZXRhcCkgXAogICAgIG1hY3Jv
KGdlc3R1cmV0YXBkb3duKSBcCiAgICAgbWFjcm8oZ2VzdHVyZXNjcm9sbHN0YXJ0KSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmluCmluZGV4IDVmM2UyMTguLmJhM2I2ZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmluCkBAIC0xMCw2ICsxMCw3IEBAIENvbXBvc2l0aW9uRXZlbnQKIEN1c3RvbUV2
ZW50CiBFcnJvckV2ZW50CiBGb2N1c0V2ZW50CitHYW1lcGFkRXZlbnQgY29uZGl0aW9uYWw9R0FN
RVBBRAogSGFzaENoYW5nZUV2ZW50CiBLZXlib2FyZEV2ZW50CiBLZXlib2FyZEV2ZW50cyBpbnRl
cmZhY2VOYW1lPUtleWJvYXJkRXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBh
ZTc5MWMxLi5hZTQwYTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNiArNjYsNyBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTE3MDgsNiArMTcxMCwxMyBAQCBib29s
IERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxFdmVudAogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQp
CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkY29ubmVjdGVk
RXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkZGlzY29ubmVjdGVkRXZl
bnQpIHsKKyAgICAgICAgaWYgKEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpmcm9tKHRoaXMpKQorICAgICAgICAgICAgY29udHJvbGxl
ci0+YWRkR2FtZXBhZEV2ZW50TGlzdGVuZXIoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xNzk4LDYgKzE4MDcsMTMgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXIKICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHQU1FUEFEKQorICAgIGVsc2UgaWYgKGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZ2FtZXBhZGNvbm5lY3RlZEV2ZW50IHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkuZ2FtZXBhZGRpc2Nvbm5lY3RlZEV2ZW50KSB7CisgICAgICAgIGlm
IChHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBjb250cm9sbGVyID0gR2FtZXBhZEV2ZW50Q29udHJv
bGxlcjo6ZnJvbSh0aGlzKSkKKyAgICAgICAgICAgIGNvbnRyb2xsZXItPnJlbW92ZUdhbWVwYWRF
dmVudExpc3RlbmVyKCk7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTg5OCw2ICsxOTE0LDExIEBAIHZvaWQgRE9NV2luZG93OjpyZW1vdmVBbGxFdmVudExpc3Rl
bmVycygpCiAgICAgICAgIGNvbnRyb2xsZXItPnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJz
KHRoaXMpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKyAgICBpZiAoR2FtZXBhZEV2
ZW50Q29udHJvbGxlciogY29udHJvbGxlciA9IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmZyb20o
dGhpcykpCisgICAgICAgIGNvbnRyb2xsZXItPnJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVy
cygpOworI2VuZGlmCisKICAgICByZW1vdmVBbGxVbmxvYWRFdmVudExpc3RlbmVycyh0aGlzKTsK
ICAgICByZW1vdmVBbGxCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVycyh0aGlzKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5oCmluZGV4IDMyMjczZmEuLjM5Mjc0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3Nyw2ICszNzgsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKGRldmljZW9yaWVudGF0aW9uKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQp
CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZ2FtZXBhZGNvbm5lY3Rl
ZCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZ2FtZXBhZGRpc2Nv
bm5lY3RlZCk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShQUk9YSU1JVFlfRVZFTlRTKQogICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdGRldmljZXByb3hpbWl0eSk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCAxYWZmMTBhLi4xYmEyZTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC0yODksNiArMjg5LDkgQEAKICAgICBb
Q29uZGl0aW9uYWw9REVWSUNFX09SSUVOVEFUSU9OXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmRldmljZW1vdGlvbjsKICAgICBbQ29uZGl0aW9uYWw9REVWSUNFX09SSUVOVEFUSU9OXSBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmRldmljZW9yaWVudGF0aW9uOwogCisgICAgW0NvbmRpdGlv
bmFsPUdBTUVQQURdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZ2FtZXBhZGNvbm5lY3RlZDsK
KyAgICBbQ29uZGl0aW9uYWw9R0FNRVBBRF0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25nYW1l
cGFkZGlzY29ubmVjdGVkOworCiAgICAgW0NvbmRpdGlvbmFsPVBST1hJTUlUWV9FVkVOVFNdIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2Via2l0ZGV2aWNlcHJveGltaXR5OwogCiAgICAgW0Nv
bmRpdGlvbmFsPVdJTExfUkVWRUFMX0VER0VfRVZFTlRTXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbndlYmtpdHdpbGxyZXZlYWxib3R0b207CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HYW1lcGFkc1Byb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1l
cGFkc1Byb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2MGQ4
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRzUHJv
dmlkZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkc1By
b3ZpZGVyX2gKKyNkZWZpbmUgR2FtZXBhZHNQcm92aWRlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBB
RCkKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZEJ1dHRvbjsKK2NsYXNzIEdh
bWVwYWRzTWFuYWdlcjsKKworY2xhc3MgR2FtZXBhZERldmljZSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+R2FtZXBhZERldmljZSgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmlu
ZyYgaWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBheGVzQ291bnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBkb3VibGUqIGF4ZXNBcnJheSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ1dHRvbnNDb3VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IEdhbWVwYWRCdXR0b246OkJ1dHRvblN0cnVjdCogYnV0dG9uc0FycmF5KCkgY29u
c3QgPSAwOworfTsKKworY2xhc3MgR2FtZXBhZHNQcm92aWRlciB7CitwdWJsaWM6CisgICAgR2Ft
ZXBhZHNQcm92aWRlcihHYW1lcGFkc01hbmFnZXIqIG1hbmFnZXIpCisgICAgICAgIDogbV9nYW1l
cGFkc01hbmFnZXIobWFuYWdlcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2FtZXBh
ZHNQcm92aWRlcigpID0gZGVmYXVsdDsKKworICAgIEdhbWVwYWRzTWFuYWdlciogZ2FtZXBhZE1h
bmFnZXIoKSB7IHJldHVybiBtX2dhbWVwYWRzTWFuYWdlcjsgfQorCitwcml2YXRlOgorICAgIEdh
bWVwYWRzTWFuYWdlciogbV9nYW1lcGFkc01hbmFnZXI7Cit9OworCit0eXBlZGVmIHN0ZDo6ZnVu
Y3Rpb248UGFzc093blB0cjxHYW1lcGFkc1Byb3ZpZGVyPihHYW1lcGFkc01hbmFnZXIqKT4gUHJv
dmlkZXJGYWN0b3J5RnVuY3Rpb247CisKK1Bhc3NPd25QdHI8R2FtZXBhZHNQcm92aWRlcj4gY3Jl
YXRlR2FtZXBhZHNQcm92aWRlcihHYW1lcGFkc01hbmFnZXIqKTsKKworaW5saW5lIFByb3ZpZGVy
RmFjdG9yeUZ1bmN0aW9uIHBsYXRmb3JtR2FtZXBhZHNQcm92aWRlckZhY3RvcnkoKQoreworICAg
IHJldHVybiBQcm92aWRlckZhY3RvcnlGdW5jdGlvbihjcmVhdGVHYW1lcGFkc1Byb3ZpZGVyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQp
CisKKyNlbmRpZiAvLyBHYW1lcGFkc1Byb3ZpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvR2FtZXBhZHNQcm92aWRlckVmbC5jcHAKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1l
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcApyZW5hbWUg
dG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzUHJvdmlkZXJFZmwuY3BwCmlu
ZGV4IDc2OGRjMDAuLmYyZDcxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9HYW1lcGFkc0VmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dh
bWVwYWRzUHJvdmlkZXJFZmwuY3BwCkBAIC0yNCwxMyArMjQsMTQgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKIAogI2lmIEVOQUJMRShHQU1FUEFE
X0RFUFJFQ0FURUQpCiAKICNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKICNpbmNsdWRl
ICJHYW1lcGFkTGlzdC5oIgorI2luY2x1ZGUgIkdhbWVwYWRzUHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxFY29y
ZS5oPgogI2luY2x1ZGUgPEVlemUuaD4KICNpbmNsdWRlIDxFaW5hLmg+CkBAIC0yMTEsMjggKzIx
MiwzMiBAQCB2b2lkIEdhbWVwYWRzRWZsOjp1bnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYg
c3lzcGF0aCkKICAgICBtX3Nsb3RzW2luZGV4XS5jbGVhcigpOwogfQogCi12b2lkIEdhbWVwYWRz
RWZsOjp1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKK3ZvaWQgR2FtZXBhZHNF
Zmw6OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiAvKmludG8qLykKIHsKLSAgICBBU1NF
UlQobV9zbG90cy5zaXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAgY29uc3Qgc2l6ZV90
IHNsb3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2xvdENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90
c1tpXS0+Y29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIEdhbWVwYWREZXZpY2VFZmwqIGdhbWVw
YWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOwotICAgICAgICAgICAgUmVmUHRyPEdhbWVwYWQ+
IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQotICAg
ICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKLQotICAgICAgICAgICAg
Z2FtZXBhZC0+aW5kZXgoaSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNl
LT5pZCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNlLT50
aW1lc3RhbXAoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4
ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKLSAgICAgICAgICAgIGdhbWVw
YWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2Ut
PmJ1dHRvbnNEYXRhKCkpOwotCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW50by0+c2V0KGksIDApOwotICAgIH0KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworCisvLyAqKioqKiBHYW1lcGFkIGludGVyZmFjZSBjaGFuZ2VkLiAq
KioqKgorLy8KKy8vICAgIEFTU0VSVChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7
CisvLworLy8gICAgY29uc3Qgc2l6ZV90IHNsb3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOworLy8g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbG90Q291bnQ7ICsraSkgeworLy8gICAgICAgIGlm
IChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7CisvLyAgICAg
ICAgICAgIEdhbWVwYWREZXZpY2VFZmwqIGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgp
OworLy8gICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7
CisvLyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKKy8vICAgICAgICAgICAgICAgIGdhbWVwYWQg
PSBHYW1lcGFkOjpjcmVhdGUoKTsKKy8vCisvLyAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkp
OworLy8gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKKy8vICAg
ICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsK
Ky8vICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwg
Z2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisvLyAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRv
bnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNE
YXRhKCkpOworLy8KKy8vICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOworLy8gICAg
ICAgIH0gZWxzZQorLy8gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7CisvLyAgICB9CiB9CiAK
IHZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCkBAIC0yNDEsNiArMjQ2LDEy
IEBAIHZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCiAgICAgZ2FtZXBhZHNF
ZmwuZ2V0KCkudXBkYXRlR2FtZXBhZExpc3QoaW50byk7CiB9CiAKK1Bhc3NPd25QdHI8R2FtZXBh
ZHNQcm92aWRlcj4gY3JlYXRlR2FtZXBhZHNQcm92aWRlcihHYW1lcGFkc01hbmFnZXIqIC8qbWFu
YWdlciovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RF
UFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBh
ZHNHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJH
dGsuY3BwCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HYW1lcGFkc1Byb3ZpZGVyR3RrLmNwcAppbmRleCBhYjYzZGViLi5lNGExNjJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc1Byb3ZpZGVyR3RrLmNwcApA
QCAtMjQsMTkgKzI0LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkdhbWVwYWRzLmgiCiAKICNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQogCiAjaW5jbHVk
ZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCiAjaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKKyNpbmNs
dWRlICJHYW1lcGFkc1Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRzdHJlYW0uaD4KICNp
bmNsdWRlIDxndWRldi9ndWRldi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0xNjQsMjcgKzE2
NSwzMSBAQCB2b2lkIEdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VG
aWxlKQogICAgIG1fc2xvdHNbaW5kZXhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgR2FtZXBhZHNHdGs6
OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRvKQordm9pZCBHYW1lcGFkc0d0azo6
dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIC8qaW50byovKQogewotICAgIEFTU0VSVCht
X3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zbG90cy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zbG90c1tpXS5n
ZXQoKSAmJiBtX3Nsb3RzW2ldLT5jb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgR2FtZXBhZERl
dmljZUd0ayogZ2FtZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBS
ZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAo
IWdhbWVwYWQpCi0gICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOwot
Ci0gICAgICAgICAgICBnYW1lcGFkLT5pbmRleChpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmlk
KGdhbWVwYWREZXZpY2UtPmlkKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdh
bWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2Ft
ZXBhZERldmljZS0+YXhlc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOwotICAg
ICAgICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwg
Z2FtZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7Ci0KLSAgICAgICAgICAgIGludG8tPnNldChp
LCBnYW1lcGFkKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7
Ci0gICAgfQorICAgIG5vdEltcGxlbWVudGVkKCk7CisKKy8vICoqKioqIEdhbWVwYWQgaW50ZXJm
YWNlIGNoYW5nZWQuICoqKioqCisvLworLy8gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGlu
dG8tPmxlbmd0aCgpKTsKKy8vCisvLyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG90
cy5zaXplKCk7IGkrKykgeworLy8gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xv
dHNbaV0tPmNvbm5lY3RlZCgpKSB7CisvLyAgICAgICAgICAgIEdhbWVwYWREZXZpY2VHdGsqIGdh
bWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOworLy8gICAgICAgICAgICBSZWZQdHI8R2Ft
ZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7CisvLyAgICAgICAgICAgIGlmICghZ2FtZXBh
ZCkKKy8vICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKKy8vCisv
LyAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOworLy8gICAgICAgICAgICBnYW1lcGFkLT5p
ZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKKy8vICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1w
KGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKKy8vICAgICAgICAgICAgZ2FtZXBhZC0+YXhl
cyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7
CisvLyAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0Nv
dW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOworLy8KKy8vICAgICAgICAgICAg
aW50by0+c2V0KGksIGdhbWVwYWQpOworLy8gICAgICAgIH0gZWxzZQorLy8gICAgICAgICAgICBp
bnRvLT5zZXQoaSwgMCk7CisvLyAgICB9CiB9CiAKIHZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50
Q2FsbGJhY2soR1VkZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRldkRldmljZSogZGV2aWNl
LCBncG9pbnRlciBkYXRhKQpAQCAtMjIwLDYgKzIyNSwxMiBAQCB2b2lkIHNhbXBsZUdhbWVwYWRz
KEdhbWVwYWRMaXN0KiBpbnRvKQogICAgIGdhbWVwYWRzR3RrLnVwZGF0ZUdhbWVwYWRMaXN0KGlu
dG8pOwogfQogCitQYXNzT3duUHRyPEdhbWVwYWRzUHJvdmlkZXI+IGNyZWF0ZUdhbWVwYWRzUHJv
dmlkZXIoR2FtZXBhZHNNYW5hZ2VyKiAvKm1hbmFnZXIqLykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKaW5kZXggYzUxNzU0
ZC4uYjZjYjUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2Ft
ZXBhZERldmljZUxpbnV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9H
YW1lcGFkRGV2aWNlTGludXguY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCiAKLSNpZiBFTkFCTEUoR0FNRVBB
RF9ERVBSRUNBVEVEKQorI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpIHx8IEVOQUJMRShH
QU1FUEFEKQogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KQEAg
LTk2LDQgKzk2LDQgQEAgZmxvYXQgR2FtZXBhZERldmljZUxpbnV4Ojpub3JtYWxpemVCdXR0b25W
YWx1ZShzaG9ydCB2YWx1ZSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
RU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBS
RUNBVEVEKSB8fCBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmgKaW5kZXggOTljMDliMi4uMTNmZjQyNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4
LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgR2FtZXBhZERldmljZUxpbnV4X2gKICNkZWZp
bmUgR2FtZXBhZERldmljZUxpbnV4X2gKIAotI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQp
CisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkgfHwgRU5BQkxFKEdBTUVQQUQpCiAKICNp
bmNsdWRlIDxsaW51eC9qb3lzdGljay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTY4
LDYgKzY4LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9E
RVBSRUNBVEVEKSB8fCBFTkFCTEUoR0FNRVBBRCkKIAogI2VuZGlmIC8vIEdhbWVwYWREZXZpY2VM
aW51eF9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggODYzZjIwZS4uNWU2NTVkZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTA2LTI0ICBNaWNoYWwgRGVic2tp
ICA8bS5kZWJza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgSFRNTDUgR2FtZXBhZCBBUEkgaW1w
bGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMzg1MAorCisgICAgICAgIENvdWxkIG5vdCB0dXJuIE9OIEdBTUVQQUQgYmVjYXVzZSBp
dCB3YXMgZm9yY2VkIHRvIE9GRi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbToKKwogMjAx
NC0wNi0yNCAgSmF2aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5kZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBOYW1lIG1vdmluZy4gVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0
dXJlTGlzdC5wbQppbmRleCA3ZmIyZTBhLi42ZGMyMWYwIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
ZXJsL0ZlYXR1cmVMaXN0LnBtCkBAIC0yNDgsNyArMjQ4LDcgQEAgbXkgQGZlYXR1cmVzID0gKAog
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRlVMTFNDUkVFTl9BUEkiLCBkZWZhdWx0ID0+IChpc0Fw
cGxlTWFjV2ViS2l0KCkgfHwgaXNFZmwoKSB8fCBpc0d0aygpKSwgdmFsdWUgPT4gXCRmdWxsc2Ny
ZWVuQVBJU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gImdhbWVwYWQiLCBkZXNjID0+ICJU
b2dnbGUgR2FtZXBhZCBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0dBTUVQQUQi
LCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkZ2FtZXBhZFN1cHBvcnQgfSwKKyAgICAgIGRlZmlu
ZSA9PiAiRU5BQkxFX0dBTUVQQUQiLCBkZWZhdWx0ID0+IChpc0VmbCgpIHx8IGlzR3RrKCkpLCB2
YWx1ZSA9PiBcJGdhbWVwYWRTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiZ2VvbG9jYXRp
b24iLCBkZXNjID0+ICJUb2dnbGUgR2VvbG9jYXRpb24gc3VwcG9ydCIsCiAgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9HRU9MT0NBVElPTiIsIGRlZmF1bHQgPT4gKGlzQXBwbGVXZWJLaXQoKSB8fCBp
c0lPU1dlYktpdCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJGdlb2xvY2F0aW9uU3VwcG9ydCB9
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233703</attachid>
            <date>2014-06-24 07:30:41 -0700</date>
            <delta_ts>2014-06-24 09:52:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>impl2.patch</filename>
            <type>text/plain</type>
            <size>62035</size>
            <attacher name="Michal Debski">m.debski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMWM3Y2E2ZC4uYzRjNWFkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE3MCwxMCArMTcwLDYgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKICAgICBNb2R1bGVzL2dhbWVwYWQvTmF2aWdh
dG9yR2FtZXBhZC5pZGwKIAotICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNhdGVkL0dhbWVwYWQu
aWRsCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCi0gICAg
TW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwKLQogICAgIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vQ29vcmRpbmF0ZXMuaWRsCiAgICAgTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5pZGwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlk
bApAQCAtNzkwLDYgKzc4NiwxMiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9n
YW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuY3BwCiAgICAgTW9kdWxlcy9nYW1lcGFkL2Rl
cHJlY2F0ZWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKIAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwCisgICAgTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCisgICAgTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRzTWFuYWdlci5jcHAKKyAgICBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5jcHAKKwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vQ29vcmRpbmF0ZXMuY3BwCiAgICAgTW9k
dWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKQEAgLTMxODcsNiArMzE4OSwxNCBAQCBpZiAoRU5B
QkxFX1dFQl9SRVBMQVkpCiAgICAgKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9HQU1FUEFEX0RF
UFJFQ0FURUQpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKKyAgICAgICAgTW9k
dWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZC5pZGwKKyAgICAgICAgTW9kdWxlcy9nYW1l
cGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCisgICAgICAgIE1vZHVsZXMvZ2FtZXBhZC9k
ZXByZWNhdGVkL05hdmlnYXRvckdhbWVwYWQuaWRsCisgICAgKQorZW5kaWYgKCkKKwogc2V0KFdl
YkNvcmVUZXN0U3VwcG9ydF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL21vY2siCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Rlc3RpbmciCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYWM0M2ZmMi4uZGU4MWFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNiBAQAorMjAxNC0w
Ni0yNCAgTWljaGFsIERlYnNraSAgPG0uZGVic2tpQHNhbXN1bmcuY29tPgorCisgICAgICAgIEhU
TUw1IEdhbWVwYWQgQVBJIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgcHJvcGVyIGdhbWVwYWQgaW1wbGVtZW50
YXRpb24gbWF0Y2hpbmcgc3BlYyBkZXNjcmlwdGlvbiBhYm92ZS4KKyAgICAgICAgSXQgY29uc2lz
dHMgb2YgdHdvIG1haW4gcGFydC4gRE9NV2luZG93IHNwZWNpZmljIGFuZCBHYW1lcGFkcyBNYW5h
Z2VyLgorICAgICAgICBHYW1lcGFkRXZlbnRDb250cm9sbGVyIGV4aXN0cyBmb3IgZWFjaCBET01X
aW5kb3cgYW5kIHNoYXJlcyBiZXR3ZWVuCisgICAgICAgIGVhY2ggb3RoZXIgb3duZXJzaGlwIG9m
IEdhbWVwYWRzIE1hbmFnZXIuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBtYW5naW5nCisgICAgICAg
IHBhZ2Ugc3BlY2lmaWMgR2FtZXBhZCBMaXN0IC0gdXBkYXRpbmcgR2FtcGFkcyBhbmQgaXQncyB0
aW1lc3RhbXBzIGFuZAorICAgICAgICBkaXNwYXRjaGluZyBldmVudHMgdG8gd2luZG93IG9iamVj
dC4KKyAgICAgICAgR2FtZXBhZHMgTWFuYWdlciBiZWdpbnMgaXQgZXhpc3RhbmNlIHdoZW4gYW55
IG9mIHRoZSBHYW1lcGFkIEFQSSBpcworICAgICAgICBhY2Nlc3NlZCBhbmQgcGVyc2lzdCBhcyBs
b25nIGFzIHRoZSBsYXN0IEdhbWVwYWRFdmVudENvbnRyb2xsZXIgd2hpY2gKKyAgICAgICAgaGFz
IHJlcXVlc3RlZCBpdHMgaW5zdGFuY2UuIFBvcnQgc3BlY2lmaWMgcHJvdmlkZXIncyBsaWZldGlt
ZSBpcyBoYW5kbGVkCisgICAgICAgIGJ5IHRoaXMgbWFuYWdlciwgaXQgaXMgYWxzbyBmb3J3YXJk
aW5nIGluZm9ybWF0aW9uIHJlY2VpdmVkIGZyb20KKyAgICAgICAgcHJvdmlkZXIgdG8gYWxsIEdh
bWVwYWRFdmVudENvbnRyb2xsZXJzIHdoaWNoIGhhcyByZWdpc3RlcmVkIHRvIE1hbmFnZXIuCisg
ICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzcGVjLCBwbGVhc2Ugc2VlOgorICAgICAgICBodHRw
Oi8vd3d3LnczLm9yZy9UUi9nYW1lcGFkLworCisgICAgICAgIExheW91dFRlc3RzIGFuZCByZXF1
aXJlZCBsb2dpYyB3aWxsIGJlIGFkZGVkIGluIGZ1cnRoZXIgY29tbWl0cy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREYXRhOjpyZXNpemVBeGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWREYXRhOjpzZXRBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRE
YXRhOjpyZXNpemVCdXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREYXRhOjpzZXRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkOjp+R2FtZXBhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkOjpheGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OmJ1dHRv
bnMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpHYW1lcGFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBh
ZDo6fkdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6aWQpOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6dGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OnNldFRpbWVzdGFtcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHYW1lcGFkOjpjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2Ft
ZXBhZDo6c2V0Q29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6Om1hcHBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6YXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkOjpidXR0b25zKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGw6
CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWRCdXR0b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
QnV0dG9uOjpwcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRCdXR0b246OnNldFBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZEJ1dHRvbjo6c2V0QnV0dG9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
QnV0dG9uOjpidXR0b25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRCdXR0b246Okdh
bWVwYWRCdXR0b24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9uLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6Y3JlYXRlQ29ubmVjdGVkR2FtZXBhZCk6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50OjpldmVudEludGVyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OkdhbWVwYWRFdmVudCk6CisgICAgICAgICogTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50SW5p
dDo6R2FtZXBhZEV2ZW50SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6On5HYW1lcGFkRXZlbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6R2FtZXBhZEV2ZW50Q29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjp+R2FtZXBh
ZEV2ZW50Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjphZGRHYW1lcGFkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
RXZlbnRDb250cm9sbGVyOjpyZW1vdmVHYW1lcGFkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxHYW1lcGFkRXZlbnRMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6c3VwcGxl
bWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Z2Ft
ZXBhZENvbm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVy
OjpnYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENv
bnRyb2xsZXI6OmdhbWVwYWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVu
dENvbnRyb2xsZXI6OmdhbWVwYWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVu
dENvbnRyb2xsZXI6OmZyb20pOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJv
bGxlcjo6aXNBY3RpdmVBdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjpkaXNwYXRjaEdhbWVwYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZl
bnRDb250cm9sbGVyOjpjaGVja01hbmFnZXJBc3NpZ25lZCk6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjphZGRHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUdhbWVwYWQpOgorICAgICAgICAqIE1vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6aXNBY3RpdmUpOgorICAgICAgICAqIE1vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRzTWFuYWdlcjo6R2FtZXBhZHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVw
YWRzTWFuYWdlcjo6bWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6
OnJlbGVhc2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6c2V0
UHJvdmlkZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6cmVn
aXN0ZXJUb01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpkZXJl
Z2lzdGVyRnJvbU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpn
YW1lcGFkQ29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2Ft
ZXBhZERpc2Nvbm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6Omdh
bWVwYWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBh
ZEF4aXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBh
ZEJ1dHRvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjp1cGRh
dGVHYW1lcGFkKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpwcm92aWRlcik6Cisg
ICAgICAgICogTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6d2Via2l0R2V0R2FtZXBhZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBhZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yR2FtZXBhZDo6TmF2aWdhdG9yR2FtZXBhZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOgorICAgICAgICAqIE1vZHVs
ZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBkb20vRXZlbnRO
YW1lcy5oOgorICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmluOgorICAgICAgICAqIHBhZ2UvRE9N
V2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyk6Cisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6
CisgICAgICAgICogcGxhdGZvcm0vR2FtZXBhZHNQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRzUHJvdmlkZXI6OkdhbWVwYWRzUHJvdmlkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZHNQcm92aWRlcjo6Z2FtZXBhZE1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6cGxhdGZvcm1HYW1lcGFkc1Byb3ZpZGVyRmFjdG9yeSk6CisgICAgICAgICogcGxhdGZv
cm0vZWZsL0dhbWVwYWRzUHJvdmlkZXJFZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVw
YWRzRWZsOjp1cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHYW1l
cGFkc1Byb3ZpZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR2FtZXBhZHNQcm92aWRlckd0
ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNH
dGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHdGs6OnVwZGF0ZUdhbWVwYWRMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdhbWVwYWRzUHJvdmlkZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4Lmg6CisKIDIwMTQtMDYtMjQgIENvbW1pdCBRdWV1
ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxNzAzMzcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5j
cHAKaW5kZXggMjBhMGYyOWUuLjgyZjRhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIyLDM1ICsyMyw1MSBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1l
cGFkLmgiCiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAorI2luY2x1ZGUgIkdhbWVwYWQuaCIKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotR2FtZXBhZDo6R2FtZXBhZCgpCi0gICAgOiBtX2luZGV4KDAp
Ci0gICAgLCBtX2Nvbm5lY3RlZCh0cnVlKQotICAgICwgbV90aW1lc3RhbXAoMC4wKQordm9pZCBH
YW1lcGFkRGF0YTo6cmVzaXplQXhlcyh1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBhdXRvIG9sZFNp
emUgPSBtX2F4ZXMuc2l6ZSgpOworICAgIG1fYXhlcy5yZXNpemUoY291bnQpOworICAgIGlmIChv
bGRTaXplIDwgbV9heGVzLnNpemUoKSkgeworICAgICAgICBzdGQ6OmdlbmVyYXRlPD4obV9heGVz
LmJlZ2luKCkgKyBvbGRTaXplLCBtX2F4ZXMuZW5kKCksIFtdKCkgeworICAgICAgICAgICAgcmV0
dXJuIDAuMDsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIEdhbWVwYWREYXRhOjpzZXRB
eGlzKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCiB7CisgICAgQVNTRVJUKGluZGV4IDwg
bV9heGVzLnNpemUoKSk7CisgICAgbV9heGVzW2luZGV4XSA9IHZhbHVlOwogfQogCi1HYW1lcGFk
Ojp+R2FtZXBhZCgpCit2b2lkIEdhbWVwYWREYXRhOjpyZXNpemVCdXR0b25zKHVuc2lnbmVkIGNv
dW50KQogeworICAgIGF1dG8gb2xkU2l6ZSA9IG1fYnV0dG9ucy5zaXplKCk7CisgICAgbV9idXR0
b25zLnJlc2l6ZShjb3VudCk7CisgICAgaWYgKG9sZFNpemUgPCBtX2J1dHRvbnMuc2l6ZSgpKQor
ICAgICAgICBzdGQ6OmdlbmVyYXRlPFZlY3RvcjxSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gPjo6aXRl
cmF0b3IsIFBhc3NSZWZQdHI8R2FtZXBhZEJ1dHRvbj4oKT4obV9idXR0b25zLmJlZ2luKCkgKyBv
bGRTaXplLCBtX2J1dHRvbnMuZW5kKCksIEdhbWVwYWRCdXR0b246OmNyZWF0ZSk7CiB9CiAKLWNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBHYW1lcGFkOjpheGVzKCkgY29uc3QKK3ZvaWQgR2FtZXBhZERh
dGE6OnNldEJ1dHRvbih1bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBhZEJ1dHRvbjo6QnV0dG9u
U3RydWN0JiBkYXRhKQogewotICAgIHJldHVybiBtX2F4ZXM7CisgICAgQVNTRVJUKGluZGV4IDwg
bV9idXR0b25zLnNpemUoKSk7CisgICAgbV9idXR0b25zW2luZGV4XS0+c2V0QnV0dG9uRGF0YShk
YXRhKTsKIH0KIAotY29uc3QgVmVjdG9yPFJlZjxHYW1lcGFkQnV0dG9uPj4mIEdhbWVwYWQ6OmJ1
dHRvbnMoKSBjb25zdAorR2FtZXBhZDo6R2FtZXBhZChQYXNzUmVmUHRyPEdhbWVwYWREYXRhPiBk
YXRhKQorICAgIDogbV9kYXRhe2RhdGF9CisgICAgLCBtX3RpbWVzdGFtcHswfQogewotICAgIHJl
dHVybiBtX2J1dHRvbnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5oCmluZGV4IDI4ZWJlMWEuLjBiZDQyYjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDMzICszNSw3MCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdhbWVwYWQ6IHB1YmxpYyBSZWZDb3Vu
dGVkPEdhbWVwYWQ+IHsKK2NsYXNzIEdhbWVwYWREYXRhOiBwdWJsaWMgUmVmQ291bnRlZDxHYW1l
cGFkRGF0YT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWQ+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZERhdGE+IGNyZWF0ZSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWQpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdhbWVwYWREYXRhKTsKICAgICB9Ci0gICAgfkdhbWVwYWQoKTsKKyAgICB+R2Ft
ZXBhZERhdGEoKSB7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CisgICAgdm9pZCBpZChjb25zdCBTdHJpbmcmIGlkKSB7IG1faWQgPSBpZDsgfQorCiAg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgdm9pZCBp
bmRleCh1bnNpZ25lZCB2YWwpIHsgbV9pbmRleCA9IHZhbDsgfQorCiAgICAgY29uc3QgU3RyaW5n
JiBtYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwaW5nOyB9CisgICAgdm9pZCBtYXBwaW5n
KGNvbnN0IFN0cmluZyYgbWFwcGluZykgeyBtX21hcHBpbmcgPSBtYXBwaW5nOyB9CiAKLSAgICBi
b29sIGNvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGVkOyB9Ci0gICAgZG91Ymxl
IHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9Ci0gICAgY29uc3QgVmVj
dG9yPGRvdWJsZT4mIGF4ZXMoKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8UmVmPEdhbWVwYWRC
dXR0b24+PiYgYnV0dG9ucygpIGNvbnN0OworICAgIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBheGVz
KCkgY29uc3QgeyByZXR1cm4gbV9heGVzOyB9CisgICAgdm9pZCByZXNpemVBeGVzKHVuc2lnbmVk
IGNvdW50KTsKKyAgICB2b2lkIHNldEF4aXModW5zaWduZWQgaW5kZXgsIGRvdWJsZSBkYXRhKTsK
KworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gPiYgYnV0dG9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fYnV0dG9uczsgfQorICAgIHZvaWQgcmVzaXplQnV0dG9ucyh1bnNpZ25l
ZCBjb3VudCk7CisgICAgdm9pZCBzZXRCdXR0b24odW5zaWduZWQgaW5kZXgsIGNvbnN0IEdhbWVw
YWRCdXR0b246OkJ1dHRvblN0cnVjdCYgZGF0YSk7CiAKIHByaXZhdGU6Ci0gICAgR2FtZXBhZCgp
OworICAgIEdhbWVwYWREYXRhKCkKKyAgICAgICAgOiBtX2luZGV4ezB9CisgICAgeworICAgIH0K
KwogICAgIFN0cmluZyBtX2lkOwogICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgYm9vbCBtX2Nv
bm5lY3RlZDsKLSAgICBkb3VibGUgbV90aW1lc3RhbXA7CiAgICAgU3RyaW5nIG1fbWFwcGluZzsK
LQogICAgIFZlY3Rvcjxkb3VibGU+IG1fYXhlczsKLSAgICBWZWN0b3I8UmVmPEdhbWVwYWRCdXR0
b24+PiBtX2J1dHRvbnM7CisgICAgVmVjdG9yPFJlZlB0cjxHYW1lcGFkQnV0dG9uPiA+IG1fYnV0
dG9uczsKK307CisKK2NsYXNzIEdhbWVwYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxHYW1lcGFkPiAg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWQ+IGNyZWF0ZShQYXNzUmVm
UHRyPEdhbWVwYWREYXRhPiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBHYW1lcGFke2RhdGF9KTsKKyAgICB9CisgICAgfkdhbWVwYWQoKQorICAgIHsKKyAgICB9CisK
KyAgICBjb25zdCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5pZCgpOyB9Cisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmluZGV4KCk7IH0KKwor
ICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQorICAg
IHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWwpIHsgbV90aW1lc3RhbXAgPSB2YWw7IH0KKyAg
ICBib29sIGNvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGVkOyB9CisgICAgdm9p
ZCBzZXRDb25uZWN0ZWQoYm9vbCBjb25uZWN0ZWQpIHsgbV9jb25uZWN0ZWQgPSBjb25uZWN0ZWQ7
IH0KKworICAgIGNvbnN0IFN0cmluZyYgbWFwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+
bWFwcGluZygpOyB9CisgICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4ZXMoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEtPmF4ZXMoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZEJ1
dHRvbj4gPiYgYnV0dG9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+YnV0dG9ucygpOyB9Citw
cml2YXRlOgorICAgIGV4cGxpY2l0IEdhbWVwYWQoUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4gZGF0
YSk7CisgICAgUmVmUHRyPEdhbWVwYWREYXRhPiBtX2RhdGE7CisgICAgYm9vbCBtX2Nvbm5lY3Rl
ZDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV90aW1lc3RhbXA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwK
aW5kZXggNWI2YTkzNy4uNGYyOTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmlkbApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNh
bXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkQnV0dG9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBh
ZEJ1dHRvbi5oCmluZGV4IDJkMjU4ZDcuLjRkNTQxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsMjkgKzI5LDYyIEBACiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAor
I2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBHYW1lcGFkQnV0dG9uIDogcHVibGljIFJlZkNvdW50ZWQ8R2Ft
ZXBhZEJ1dHRvbj4geworY2xhc3MgR2FtZXBhZEJ1dHRvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdh
bWVwYWRCdXR0b24+ICB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgREVG
QVVMVF9QUkVTU19USFJFU0hPTEQgPSAwLjU7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Ym9vbCwg
ZG91YmxlPiBCdXR0b25TdHJ1Y3Q7CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkQnV0
dG9uPiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFk
QnV0dG9uKTsKICAgICB9CiAKLSAgICBib29sIHByZXNzZWQoKSBjb25zdDsKLSAgICBkb3VibGUg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShkb3Vi
bGUgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2Ft
ZXBhZEJ1dHRvbj4gY3JlYXRlKGNvbnN0IEJ1dHRvblN0cnVjdCYgZGF0YSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZEJ1dHRvbntkYXRhfSk7CisgICAgfQorCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEJ1dHRvbj4gY3JlYXRlKEJ1dHRvblN0cnVjdCYm
IGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWRCdXR0b257
c3RkOjptb3ZlKGRhdGEpfSk7CisgICAgfQorCisgICAgfkdhbWVwYWRCdXR0b24oKSA9IGRlZmF1
bHQ7CisKKyAgICBib29sIHByZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbi5maXJzdDsg
fQorICAgIHZvaWQgc2V0UHJlc3NlZChib29sIHByZXNzZWQpIHsgbV9idXR0b24uZmlyc3QgPSBw
cmVzc2VkOyB9CisKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbi5z
ZWNvbmQ7IH0KKyAgICB2b2lkIHNldFZhbHVlKGRvdWJsZSB2YWx1ZSkgeyBtX2J1dHRvbi5zZWNv
bmQgPSB2YWx1ZTsgfQorCisgICAgdm9pZCBzZXRCdXR0b25EYXRhKGNvbnN0IEJ1dHRvblN0cnVj
dCYgZGF0YSkgeyBtX2J1dHRvbiA9IGRhdGE7IH0KKyAgICB2b2lkIHNldEJ1dHRvbkRhdGEoQnV0
dG9uU3RydWN0JiYgZGF0YSkgeyBtX2J1dHRvbiA9IHN0ZDo6bW92ZShkYXRhKTsgfQorICAgIGNv
bnN0IEJ1dHRvblN0cnVjdCYgYnV0dG9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dG9uOyB9
CiAKIHByaXZhdGU6Ci0gICAgR2FtZXBhZEJ1dHRvbigpOworICAgIEdhbWVwYWRCdXR0b24oKQor
ICAgICAgICA6IG1fYnV0dG9ue2ZhbHNlLCAwLjB9CisgICAgeworICAgIH0KKyAgICBleHBsaWNp
dCBHYW1lcGFkQnV0dG9uKGNvbnN0IEJ1dHRvblN0cnVjdCYgZGF0YSkKKyAgICAgICAgOiBtX2J1
dHRvbntkYXRhfQorICAgIHsKKyAgICB9CisgICAgZXhwbGljaXQgR2FtZXBhZEJ1dHRvbihCdXR0
b25TdHJ1Y3QmJiBkYXRhKQorICAgICAgICA6IG1fYnV0dG9ue3N0ZDo6bW92ZShkYXRhKX0KKyAg
ICB7CisgICAgfQogCi0gICAgZG91YmxlIG1fdmFsdWU7CisgICAgQnV0dG9uU3RydWN0IG1fYnV0
dG9uOwogfTsKIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
R0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkQnV0dG9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0
dG9uLmlkbAppbmRleCAxYjZmMTg4Li5kNzZjYWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaWRsCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcAppbmRleCA1YmFkZjQ2Li41MzFlNzVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25p
Y3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMjYgKzIzLDQxIEBACiAg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
KwogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVwYWRFdmVudC5oIgogCiAjaWYg
RU5BQkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJHYW1lcGFkRXZlbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR2FtZXBhZEV2ZW50OjpHYW1l
cGFkRXZlbnQoKQorUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IEdhbWVwYWRFdmVudDo6Y3JlYXRl
Q29ubmVjdGVkR2FtZXBhZChQYXNzUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQpCit7CisgICAgR2Ft
ZXBhZEV2ZW50SW5pdCBpbml0YWxpemVye2dhbWVwYWR9OworICAgIHJldHVybiBjcmVhdGUoZXZl
bnROYW1lcygpLmdhbWVwYWRjb25uZWN0ZWRFdmVudCwgaW5pdGFsaXplcik7Cit9CisKK1Bhc3NS
ZWZQdHI8R2FtZXBhZEV2ZW50PiBHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVw
YWQoUGFzc1JlZlB0cjxHYW1lcGFkPiBnYW1lcGFkKQoreworICAgIEdhbWVwYWRFdmVudEluaXQg
aW5pdGFsaXplcntnYW1lcGFkfTsKKyAgICByZXR1cm4gY3JlYXRlKGV2ZW50TmFtZXMoKS5nYW1l
cGFkZGlzY29ubmVjdGVkRXZlbnQsIGluaXRhbGl6ZXIpOworfQorCitFdmVudEludGVyZmFjZSBH
YW1lcGFkRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIHsKKyAgICByZXR1cm4gR2FtZXBh
ZEV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAotR2FtZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEdhbWVwYWQqIGdhbWVwYWQpCi0gICAgOiBFdmVu
dChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSkKLSAgICAsIG1fZ2FtZXBhZChnYW1lcGFkKQorR2Ft
ZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoKQorICAgIDogbV9pbmRleHswfQogewogfQogCi1HYW1l
cGFkRXZlbnQ6OkdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29u
c3QgR2FtZXBhZEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCi0gICAgOiBFdmVudChldmVudFR5cGUs
IGluaXRpYWxpemVyKQotICAgICwgbV9nYW1lcGFkKGluaXRpYWxpemVyLmdhbWVwYWQpCitHYW1l
cGFkRXZlbnQ6OkdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgY29u
c3QgR2FtZXBhZEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBFdmVudHtldmVudE5hbWUs
IGluaXRpYWxpemVyfQorICAgICwgbV9nYW1lcGFke2luaXRpYWxpemVyLmdhbWVwYWR9CiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaAppbmRl
eCAxNjhlY2E5Li5kOGEwMjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRFdmVudC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
U2Ftc3VuZyBFbGVjdHJvbmljcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MiwxMyArMjMsMTMgQEAKICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIEdhbWVwYWRFdmVudF9oCiAjZGVmaW5lIEdhbWVw
YWRFdmVudF9oCiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAogI2luY2x1ZGUgIkV2ZW50LmgiCi0j
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkdhbWVwYWQuaCIKICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAKQEAgLTM5LDM3ICs0MCwzOSBAQCBzdHJ1Y3QgR2FtZXBhZEV2ZW50SW5p
dCA6IHB1YmxpYyBFdmVudEluaXQgewogICAgIHsKICAgICB9CiAKKyAgICBleHBsaWNpdCBHYW1l
cGFkRXZlbnRJbml0KFBhc3NSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCkKKyAgICAgICAgOiBnYW1l
cGFke2dhbWVwYWR9CisgICAgeworICAgIH0KKwogICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFk
OwogfTsKIAogY2xhc3MgR2FtZXBhZEV2ZW50IDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKLSAg
ICB+R2FtZXBhZEV2ZW50KCkgeyB9CisgICAgfkdhbWVwYWRFdmVudCgpID0gZGVmYXVsdDsKIAog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gY3JlYXRlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZEV2ZW50KTsKICAgICB9Ci0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgR2FtZXBhZCogZ2FtZXBhZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFk
RXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdhbWVwYWRFdmVu
dEluaXQmIGluaXRpYWxpemVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBH
YW1lcGFkRXZlbnQoZXZlbnRUeXBlLCBnYW1lcGFkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR2FtZXBhZEV2ZW50e3R5cGUsIGluaXRpYWxpemVyfSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2FtZXBhZEV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudEluaXQmIGluaXRpYWxpemVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFkRXZlbnQoZXZlbnRUeXBlLCBpbml0aWFs
aXplcikpOwotICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0
ZUNvbm5lY3RlZEdhbWVwYWQoUGFzc1JlZlB0cjxHYW1lcGFkPiBnYW1lcGFkKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQoUGFz
c1JlZlB0cjxHYW1lcGFkPiBnYW1lcGFkKTsKIAogICAgIEdhbWVwYWQqIGdhbWVwYWQoKSBjb25z
dCB7IHJldHVybiBtX2dhbWVwYWQuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBHYW1lcGFkRXZlbnRJ
bnRlcmZhY2VUeXBlOyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFj
ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEdhbWVwYWRFdmVudCgpOwotICAg
IGV4cGxpY2l0IEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgR2Ft
ZXBhZCopOwotICAgIEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
Y29uc3QgR2FtZXBhZEV2ZW50SW5pdCYpOworICAgIEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudEluaXQmIGluaXRpYWxpemVyKTsKIAorICAg
IHVuc2lnbmVkIG1faW5kZXg7CiAgICAgUmVmUHRyPEdhbWVwYWQ+IG1fZ2FtZXBhZDsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKaW5k
ZXggMTU3NzkxOC4uNDQxNzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWRFdmVudC5pZGwKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZl
bnRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTM3
OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisj
aW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRFdmVudC5oIgorI2luY2x1ZGUg
IkdhbWVwYWRFdmVudENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJHYW1lcGFkc01hbmFnZXIuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEdhbWVwYWRFdmVudENvbnRyb2xsZXI+
IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmNyZWF0ZShET01XaW5kb3cqIHdpbmRvdykKK3sKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRXZlbnRDb250cm9sbGVyPih3aW5kb3cp
OworfQorCitHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyKERP
TVdpbmRvdyogd2luZG93KQorICAgIDogbV9saXN0ZW5lcnNDb3VudGVyezB9LAorICAgICAgbV9n
YW1lcGFkc01hbmFnZXJ7bnVsbHB0cn0sCisgICAgICBtX3dpbmRvd3t3aW5kb3d9Cit7Cit9CisK
K0dhbWVwYWRFdmVudENvbnRyb2xsZXI6On5HYW1lcGFkRXZlbnRDb250cm9sbGVyKCkKK3sKKyAg
ICBpZiAobV9nYW1lcGFkc01hbmFnZXIpCisgICAgICAgIG1fZ2FtZXBhZHNNYW5hZ2VyLT5kZXJl
Z2lzdGVyRnJvbU1hbmFnZXIodGhpcyk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxl
cjo6YWRkR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQoreworICAgIGNoZWNrTWFuYWdlckFzc2lnbmVk
KCk7CisgICAgKyttX2xpc3RlbmVyc0NvdW50ZXI7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQoreworICAgIGlmIChtX2xpc3Rl
bmVyc0NvdW50ZXIpCisgICAgICAgIC0tbV9saXN0ZW5lcnNDb3VudGVyOworfQorCit2b2lkIEdh
bWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygpCit7
CisgICAgbV9saXN0ZW5lcnNDb3VudGVyID0gMDsKK30KKworY29uc3QgY2hhciogR2FtZXBhZEV2
ZW50Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
IGdhbWVwYWRFdmVudENvbnRyb2xsZXJTdHJpbmdbXSA9ICJHYW1lcGFkRXZlbnRDb250cm9sbGVy
IjsKKyAgICByZXR1cm4gZ2FtZXBhZEV2ZW50Q29udHJvbGxlclN0cmluZzsKK30KKwordm9pZCBH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGluZGV4LCBQ
YXNzUmVmUHRyPEdhbWVwYWREYXRhPiBkYXRhKQoreworICAgIGF1dG8gZ2FtZXBhZCA9IEdhbWVw
YWQ6OmNyZWF0ZShkYXRhKTsKKyAgICAvLyBGSVhNRTogc2V0IHRpbWVzdGFtcCByZWxhdGl2ZSB0
byBwYWdlIHN0YXJ0IHRpbWUsIGFzIGluIGN1cnJlbnQgZ2FtZXBhZCBzcGVjCisgICAgZ2FtZXBh
ZC0+c2V0VGltZXN0YW1wKGN1cnJlbnRUaW1lTVMoKSk7CisgICAgLy8gZ2FtZXBhZC5nZXQoKSB0
byBjcmVhdGUgYW5vdGhlciBQYXNzUmVmUHRyIGFuZCBub3QgbW92ZSB0aGUgY3VycmVudCBvbmUu
CisgICAgYWRkR2FtZXBhZChpbmRleCwgZ2FtZXBhZC5nZXQoKSk7CisgICAgZ2FtZXBhZC0+c2V0
Q29ubmVjdGVkKHRydWUpOworICAgIGlmIChtX2xpc3RlbmVyc0NvdW50ZXIpCisgICAgICAgIGRp
c3BhdGNoR2FtZXBhZEV2ZW50KEdhbWVwYWRFdmVudDo6Y3JlYXRlQ29ubmVjdGVkR2FtZXBhZChn
YW1lcGFkKSk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Z2FtZXBhZERpc2Nv
bm5lY3RlZCh1bnNpZ25lZCBpbmRleCwgUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4gLypkYXRhKi8p
Cit7CisgICAgaWYgKGluZGV4ID49IG1fZ2FtZXBhZHMuc2l6ZSgpIHx8ICFtX2dhbWVwYWRzW2lu
ZGV4XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZ2FtZXBhZCA9IG1fZ2FtZXBh
ZHNbaW5kZXhdKSB7CisgICAgICAgIHJlbW92ZUdhbWVwYWQoaW5kZXgpOworICAgICAgICBnYW1l
cGFkLT5zZXRDb25uZWN0ZWQoZmFsc2UpOworICAgICAgICBpZiAobV9saXN0ZW5lcnNDb3VudGVy
KQorICAgICAgICAgICAgZGlzcGF0Y2hHYW1lcGFkRXZlbnQoR2FtZXBhZEV2ZW50OjpjcmVhdGVE
aXNjb25uZWN0ZWRHYW1lcGFkKGdhbWVwYWQpKTsKKyAgICB9Cit9CisKK3ZvaWQgR2FtZXBhZEV2
ZW50Q29udHJvbGxlcjo6Z2FtZXBhZENoYW5nZWQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8
R2FtZXBhZERhdGE+IGRhdGEpCit7CisgICAgaWYoaW5kZXggPj0gbV9nYW1lcGFkcy5zaXplKCkg
fHwgIW1fZ2FtZXBhZHNbaW5kZXhdKQorICAgICAgICBnYW1lcGFkQ29ubmVjdGVkKGluZGV4LCBk
YXRhKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ2FtZXBhZHNbaW5kZXhdLT5zZXRUaW1lc3RhbXAo
Y3VycmVudFRpbWVNUygpKTsKK30KKworY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiBH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFkTGlzdCgpCit7CisgICAgY2hlY2tNYW5hZ2Vy
QXNzaWduZWQoKTsKKyAgICByZXR1cm4gbV9nYW1lcGFkczsKK30KKworR2FtZXBhZEV2ZW50Q29u
dHJvbGxlciogR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZnJvbShET01XaW5kb3cqIHdpbmRvdykK
K3sKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHYW1l
cGFkRXZlbnRDb250cm9sbGVyKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8R2FtZXBhZEV2ZW50
Q29udHJvbGxlcio+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1l
bnROYW1lKCkpKTsKKyAgICBpZiAoIXN1cHBsZW1lbnQpIHsKKyAgICAgICAgYXV0byBuZXdJbnN0
YW5jZSA9IGNyZWF0ZSh3aW5kb3cpOworICAgICAgICBzdXBwbGVtZW50ID0gbmV3SW5zdGFuY2Uu
Z2V0KCk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCksIHN0ZDo6
bW92ZShuZXdJbnN0YW5jZSkpOworICAgIH0KKyAgICByZXR1cm4gc3VwcGxlbWVudDsKK30KKwor
Ym9vbCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjppc0FjdGl2ZUF0KERPTVdpbmRvdyogd2luZG93
KQoreworICAgIGlmIChHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBzZWxmID0gR2FtZXBhZEV2ZW50
Q29udHJvbGxlcjo6ZnJvbSh3aW5kb3cpKQorICAgICAgICByZXR1cm4gc2VsZi0+aXNBY3RpdmUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6
ZGlzcGF0Y2hHYW1lcGFkRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgaWYg
KGlzQWN0aXZlKCkgJiYgIW1fd2luZG93LT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3VzcGVuZGVkKCkgJiYgIW1fd2luZG93LT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3RvcHBlZCgpKQorICAgICAgICBtX3dpbmRvdy0+ZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisK
K3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Y2hlY2tNYW5hZ2VyQXNzaWduZWQoKQorewor
ICAgIGlmICghbV9nYW1lcGFkc01hbmFnZXIpIHsKKyAgICAgICAgbV9nYW1lcGFkc01hbmFnZXIg
PSBHYW1lcGFkc01hbmFnZXI6Om1hbmFnZXIoKTsKKyAgICAgICAgbV9nYW1lcGFkc01hbmFnZXIt
PnJlZ2lzdGVyVG9NYW5hZ2VyKHRoaXMpOworICAgIH0KK30KKwordm9pZCBHYW1lcGFkRXZlbnRD
b250cm9sbGVyOjphZGRHYW1lcGFkKHVuc2lnbmVkIGluZGV4LCBQYXNzUmVmUHRyPEdhbWVwYWQ+
IGdhbWVwYWQpCit7CisgICAgQVNTRVJUKGdhbWVwYWQpOworCisgICAgaWYgKGluZGV4ID49IG1f
Z2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBtX2dhbWVwYWRzLmdyb3coaW5kZXggKyAxKTsKKyAg
ICBtX2dhbWVwYWRzW2luZGV4XSA9IGdhbWVwYWQ7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5k
ZXggPCBtX2dhbWVwYWRzLnNpemUoKSk7CisKKyAgICBpZiAoaW5kZXggPT0gbV9nYW1lcGFkcy5z
aXplKCkgLSAxKSB7CisgICAgICAgIGF1dG8gc2hyaW5rU2l6ZSA9IG1fZ2FtZXBhZHMuc2l6ZSgp
IC0gMTsgLy8gbGFzdCB3aWxsIGJlIGRlbGV0ZWQKKyAgICAgICAgd2hpbGUgKHNocmlua1NpemUg
PiAwICYmICFtX2dhbWVwYWRzW3Nocmlua1NpemUgLSAxXSkKKyAgICAgICAgICAgIC0tc2hyaW5r
U2l6ZTsKKyAgICAgICAgbV9nYW1lcGFkcy5zaHJpbmsoc2hyaW5rU2l6ZSk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fZ2FtZXBhZHNbaW5kZXhdID0gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWZlMTZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkRXZlbnRDb250
cm9sbGVyX2gKKyNkZWZpbmUgR2FtZXBhZEV2ZW50Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUo
R0FNRVBBRCkKKworI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEV2ZW50Owor
Y2xhc3MgR2FtZXBhZERhdGE7CitjbGFzcyBHYW1lcGFkOworY2xhc3MgR2FtZXBhZHNNYW5hZ2Vy
OworCitjbGFzcyBHYW1lcGFkRXZlbnRDb250cm9sbGVyIDogcHVibGljIFN1cHBsZW1lbnQ8RE9N
V2luZG93PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2FtZXBhZEV2ZW50Q29udHJvbGxl
cik7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFkRXZlbnRDb250
cm9sbGVyPiBjcmVhdGUoRE9NV2luZG93Kik7CisKKyAgICBleHBsaWNpdCBHYW1lcGFkRXZlbnRD
b250cm9sbGVyKERPTVdpbmRvdyopOworICAgIH5HYW1lcGFkRXZlbnRDb250cm9sbGVyKCk7CisK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgR2Ft
ZXBhZEV2ZW50Q29udHJvbGxlciogZnJvbShET01XaW5kb3cqKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0FjdGl2ZUF0KERPTVdpbmRvdyopOworCisgICAgdm9pZCBhZGRHYW1lcGFkRXZlbnRMaXN0ZW5l
cigpOworICAgIHZvaWQgcmVtb3ZlR2FtZXBhZEV2ZW50TGlzdGVuZXIoKTsKKyAgICB2b2lkIHJl
bW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygpOworCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdGVuZXJzQ291bnRlcjsgfQorCisgICAgdm9pZCBnYW1lcGFkQ29u
bmVjdGVkKHVuc2lnbmVkLCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPik7CisgICAgdm9pZCBnYW1l
cGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkLCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPik7CisgICAg
dm9pZCBnYW1lcGFkQ2hhbmdlZCh1bnNpZ25lZCwgUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4pOwor
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiAgZ2FtZXBhZExpc3QoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZGlzcGF0Y2hHYW1lcGFkRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgY2hlY2tNYW5hZ2VyQXNzaWduZWQoKTsKKyAgICB2b2lkIGFkZEdhbWVw
YWQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8R2FtZXBhZD4pOworICAgIHZvaWQgcmVtb3Zl
R2FtZXBhZCh1bnNpZ25lZCBpbmRleCk7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9saXN0
ZW5lcnNDb3VudGVyOworICAgIFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4gPiBtX2dhbWVwYWRzOwor
ICAgIFJlZlB0cjxHYW1lcGFkc01hbmFnZXI+IG1fZ2FtZXBhZHNNYW5hZ2VyOworICAgIERPTVdp
bmRvdyogbV93aW5kb3c7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoR0FNRVBBRCkKKworI2VuZGlmIC8vIEdhbWVwYWRFdmVudENvbnRyb2xsZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTdjM2RlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5j
cHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRFdmVudENvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJHYW1lcGFkc01hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQcm92aWRl
ckZhY3RvcnlGdW5jdGlvbiBHYW1lcGFkc01hbmFnZXI6OnNfcHJvdmlkZXJGYWN0b3J5ID0gcGxh
dGZvcm1HYW1lcGFkc1Byb3ZpZGVyRmFjdG9yeSgpOworUmVmUHRyPEdhbWVwYWRzTWFuYWdlcj4g
R2FtZXBhZHNNYW5hZ2VyOjpzX21hbmFnZXI7CisKK0dhbWVwYWRzTWFuYWdlcjo6R2FtZXBhZHNN
YW5hZ2VyKCkKK3sKKyAgICAvKgorICAgICAqIEdhbWVwYWRzTWFuYWdlciBjb25zdHJ1Y3Rpb24g
bXVzdCBiZSBjb21wbGV0ZWQgd2hlbiBpdCBjcmVhdGVzIHByb3ZpZGVyIGFzIGl0IGNhbgorICAg
ICAqIGluZm9ybSBNYW5nZXIgYWJvdXQgY3VycmVudGx5IGNvbm5lY3RlZCBnYW1lcGFkcy4KKyAg
ICAgKi8KKyAgICBtX2dhbWVwYWRzUHJvdmlkZXIgPSBzX3Byb3ZpZGVyRmFjdG9yeSh0aGlzKTsK
K30KKworUGFzc1JlZlB0cjxHYW1lcGFkc01hbmFnZXI+IEdhbWVwYWRzTWFuYWdlcjo6bWFuYWdl
cigpCit7CisgICAgaWYgKCFzX21hbmFnZXIpCisgICAgICAgIHNfbWFuYWdlciA9IGFkb3B0UmVm
KCpuZXcgR2FtZXBhZHNNYW5hZ2VyKCkpOworICAgIHJldHVybiBzX21hbmFnZXI7Cit9CisKK3Zv
aWQgR2FtZXBhZHNNYW5hZ2VyOjpyZWxlYXNlTWFuYWdlcigpCit7CisgICAgc19tYW5hZ2VyID0g
bnVsbHB0cjsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OnNldFByb3ZpZGVyRmFjdG9yeShj
b25zdCBQcm92aWRlckZhY3RvcnlGdW5jdGlvbiYgZmFjdG9yeSkKK3sKKyAgICBzX3Byb3ZpZGVy
RmFjdG9yeSA9IGZhY3Rvcnk7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjpyZWdpc3RlclRv
TWFuYWdlcihHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIG1fY29u
dHJvbGxlcnMuYWRkKGNvbnRyb2xsZXIpOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6ZGVy
ZWdpc3RlckZyb21NYW5hZ2VyKEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7
CisgICAgbV9jb250cm9sbGVycy5yZW1vdmUoY29udHJvbGxlcik7CisgICAgaWYgKCFtX2NvbnRy
b2xsZXJzLnNpemUoKSkKKyAgICAgICAgcmVsZWFzZU1hbmFnZXIoKTsKK30KKwordW5zaWduZWQg
R2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IEdhbWVwYWREZXZpY2UmIGRl
dmljZSkKK3sKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fZ2FtZXBhZHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2dhbWVwYWRzW2ldKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChpID09IG1fZ2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBt
X2dhbWVwYWRzLmFwcGVuZChHYW1lcGFkRGF0YTo6Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9nYW1lcGFkc1tpXSA9IEdhbWVwYWREYXRhOjpjcmVhdGUoKTsKKworICAgIC8vIEZJWE1F
OiBnYW1lcGFkIGlkIHNob3VsZCBiZSBjb25zaXN0ZW50IGVnLiBkcml2ZXItdmVyc2lvbi1uYW1l
CisgICAgLy8gU2V0IGlkIG9uIGNvbm5lY3Rpb24gYXMgaXQgc2hvdWxkIG5vdCBjaGFuZ2UgbGF0
ZXIuCisgICAgbV9nYW1lcGFkc1tpXS0+aWQoZGV2aWNlLmlkKCkpOworICAgIC8vIEZJWE1FOiBj
dXJyZW50bHkgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlY3QgZ2FtZXBhZCBsYXlvdXQKKyAgICBt
X2dhbWVwYWRzW2ldLT5tYXBwaW5nKCJyYXciKTsKKyAgICBtX2dhbWVwYWRzW2ldLT5pbmRleChp
KTsKKyAgICB1cGRhdGVHYW1lcGFkKGksIGRldmljZSk7CisgICAgZm9yIChhdXRvJiBjb250cm9s
bGVyIDogbV9jb250cm9sbGVycykKKyAgICAgICAgY29udHJvbGxlci0+Z2FtZXBhZENvbm5lY3Rl
ZChpLCBtX2dhbWVwYWRzW2ldKTsKKworICAgIHJldHVybiBpOworfQorCit2b2lkIEdhbWVwYWRz
TWFuYWdlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpZCwgY29uc3QgR2FtZXBhZERl
dmljZSYgLypkZXZpY2UqLykKK3sKKyAgICBBU1NFUlQoaWQgPCBtX2dhbWVwYWRzLnNpemUoKSAm
JiBtX2dhbWVwYWRzW2lkXSk7CisKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBtX2NvbnRy
b2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5nYW1lcGFkRGlzY29ubmVjdGVkKGlkLCBtX2dh
bWVwYWRzW2lkXSk7CisKKyAgICBpZiAoaWQgPT0gbV9nYW1lcGFkcy5zaXplKCkgLSAxKSB7Cisg
ICAgICAgIGF1dG8gc2hyaW5rU2l6ZSA9IG1fZ2FtZXBhZHMuc2l6ZSgpIC0gMTsgLy8gbGFzdCB3
aWxsIGJlIGRlbGV0ZWQKKyAgICAgICAgd2hpbGUgKHNocmlua1NpemUgPiAwICYmICFtX2dhbWVw
YWRzW3Nocmlua1NpemUgLSAxXSkKKyAgICAgICAgICAgIC0tc2hyaW5rU2l6ZTsKKyAgICAgICAg
bV9nYW1lcGFkcy5zaHJpbmsoc2hyaW5rU2l6ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZ2Ft
ZXBhZHNbaWRdID0gbnVsbHB0cjsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OmdhbWVwYWRD
aGFuZ2VkKHVuc2lnbmVkIGlkLCBjb25zdCBHYW1lcGFkRGV2aWNlJiBkZXZpY2UpCit7CisgICAg
QVNTRVJUKGlkIDwgbV9nYW1lcGFkcy5zaXplKCkgJiYgbV9nYW1lcGFkc1tpZF0pOworCisgICAg
dXBkYXRlR2FtZXBhZChpZCwgZGV2aWNlKTsKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBt
X2NvbnRyb2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5nYW1lcGFkQ2hhbmdlZChpZCwgbV9n
YW1lcGFkc1tpZF0pOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZEF4aXNDaGFu
Z2VkKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQoreworICAgIEFT
U0VSVChpZCA8IG1fZ2FtZXBhZHMuc2l6ZSgpICYmIG1fZ2FtZXBhZHNbaWRdKTsKKworICAgIG1f
Z2FtZXBhZHNbaWRdLT5zZXRBeGlzKGluZGV4LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvJiBjb250
cm9sbGVyIDogbV9jb250cm9sbGVycykKKyAgICAgICAgY29udHJvbGxlci0+Z2FtZXBhZENoYW5n
ZWQoaWQsIG1fZ2FtZXBhZHNbaWRdKTsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OmdhbWVw
YWRCdXR0b25DaGFuZ2VkKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBh
ZEJ1dHRvbjo6QnV0dG9uU3RydWN0JiBkYXRhKQoreworICAgIEFTU0VSVChpZCA8IG1fZ2FtZXBh
ZHMuc2l6ZSgpICYmIG1fZ2FtZXBhZHNbaWRdKTsKKworICAgIG1fZ2FtZXBhZHNbaWRdLT5zZXRC
dXR0b24oaW5kZXgsIGRhdGEpOworICAgIGZvciAoYXV0byYgY29udHJvbGxlciA6IG1fY29udHJv
bGxlcnMpCisgICAgICAgIGNvbnRyb2xsZXItPmdhbWVwYWRDaGFuZ2VkKGlkLCBtX2dhbWVwYWRz
W2lkXSk7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjp1cGRhdGVHYW1lcGFkKHVuc2lnbmVk
IGluZGV4LCBjb25zdCBHYW1lcGFkRGV2aWNlJiBkZXZpY2UpCit7CisgICAgQVNTRVJUKGluZGV4
IDwgbV9nYW1lcGFkcy5zaXplKCkgJiYgbV9nYW1lcGFkc1tpbmRleF0pOworCisgICAgYXV0byYg
Z2FtZXBhZCA9IG1fZ2FtZXBhZHNbaW5kZXhdOworICAgIGF1dG8gYXhlc0NvdW50ID0gZGV2aWNl
LmF4ZXNDb3VudCgpOworICAgIGF1dG8gYXhlcyA9IGRldmljZS5heGVzQXJyYXkoKTsKKyAgICBh
dXRvIGJ1dHRvbnNDb3VudCA9IGRldmljZS5idXR0b25zQ291bnQoKTsKKyAgICBhdXRvIGJ1dHRv
bnMgPSBkZXZpY2UuYnV0dG9uc0FycmF5KCk7CisKKyAgICBpZiAoZ2FtZXBhZC0+YXhlcygpLnNp
emUoKSAhPSBheGVzQ291bnQpCisgICAgICAgIGdhbWVwYWQtPnJlc2l6ZUF4ZXMoYXhlc0NvdW50
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXhlc0NvdW50OyArK2kpCisgICAgICAg
IGdhbWVwYWQtPnNldEF4aXMoaW5kZXgsIGF4ZXNbaV0pOworCisgICAgaWYgKGdhbWVwYWQtPmJ1
dHRvbnMoKS5zaXplKCkgIT0gYnV0dG9uc0NvdW50KQorICAgICAgICBnYW1lcGFkLT5yZXNpemVC
dXR0b25zKGJ1dHRvbnNDb3VudCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRv
bnNDb3VudDsgKytpKQorICAgICAgICBnYW1lcGFkLT5zZXRCdXR0b24oaW5kZXgsIGJ1dHRvbnNb
aV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FN
RVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
c01hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFn
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk3OTAyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdl
ci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdhbWVwYWRzTWFuYWdl
cl9oCisjZGVmaW5lIEdhbWVwYWRzTWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkdhbWVwYWRzUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZERhdGE7CitjbGFzcyBHYW1lcGFkRXZlbnRD
b250cm9sbGVyOworY2xhc3MgR2FtZXBhZHNQcm92aWRlcjsKKworY2xhc3MgR2FtZXBhZHNNYW5h
Z2VyIDogcHVibGljIFJlZkNvdW50ZWQ8R2FtZXBhZHNNYW5hZ2VyPiB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR2FtZXBhZHNNYW5hZ2VyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHYW1lcGFkc01hbmFnZXI+IG1hbmFnZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQcm92
aWRlckZhY3RvcnkoY29uc3QgUHJvdmlkZXJGYWN0b3J5RnVuY3Rpb24mKTsKKyAgICBHYW1lcGFk
c1Byb3ZpZGVyKiBwcm92aWRlcigpIHsgcmV0dXJuIG1fZ2FtZXBhZHNQcm92aWRlci5nZXQoKTsg
fQorCisgICAgdm9pZCByZWdpc3RlclRvTWFuYWdlcihHYW1lcGFkRXZlbnRDb250cm9sbGVyKik7
CisgICAgdm9pZCBkZXJlZ2lzdGVyRnJvbU1hbmFnZXIoR2FtZXBhZEV2ZW50Q29udHJvbGxlciop
OworCisgICAgLyoKKyAgICAgKiBSZWdpc3RlcnMgZ2FtZXBhZCBhbmQgcmV0dXJucyBpZCBmb3Ig
ZnVydGhlciB1cGRhdGVzLgorICAgICAqLworICAgIHVuc2lnbmVkIGdhbWVwYWRDb25uZWN0ZWQo
Y29uc3QgR2FtZXBhZERldmljZSYpOworICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNp
Z25lZCBpZCwgY29uc3QgR2FtZXBhZERldmljZSYpOworICAgIHZvaWQgZ2FtZXBhZENoYW5nZWQo
dW5zaWduZWQgaWQsIGNvbnN0IEdhbWVwYWREZXZpY2UmKTsKKyAgICB2b2lkIGdhbWVwYWRBeGlz
Q2hhbmdlZCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7CisgICAg
dm9pZCBnYW1lcGFkQnV0dG9uQ2hhbmdlZCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgaW5kZXgsIGNv
bnN0IEdhbWVwYWRCdXR0b246OkJ1dHRvblN0cnVjdCYpOworCitwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkIHJlbGVhc2VNYW5hZ2VyKCk7CisKKyAgICBzdGF0aWMgUHJvdmlkZXJGYWN0b3J5RnVu
Y3Rpb24gc19wcm92aWRlckZhY3Rvcnk7CisgICAgc3RhdGljIFJlZlB0cjxHYW1lcGFkc01hbmFn
ZXI+IHNfbWFuYWdlcjsKKworICAgIEdhbWVwYWRzTWFuYWdlcigpOworICAgIHZvaWQgdXBkYXRl
R2FtZXBhZCh1bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBhZERldmljZSYpOworCisgICAgVmVj
dG9yPFJlZlB0cjxHYW1lcGFkRGF0YT4+IG1fZ2FtZXBhZHM7CisgICAgT3duUHRyPEdhbWVwYWRz
UHJvdmlkZXI+IG1fZ2FtZXBhZHNQcm92aWRlcjsKKyAgICBIYXNoU2V0PEdhbWVwYWRFdmVudENv
bnRyb2xsZXIqPiBtX2NvbnRyb2xsZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCisKKyNlbmRpZiAvLyBHYW1lcGFkc01hbmFnZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVw
YWQuY3BwCmluZGV4IDE0MmY3N2IuLjFlNTI1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNCw0NCArMjUsMjgg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmF2aWdhdG9yR2FtZXBh
ZC5oIgogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJOYXZpZ2F0b3JHYW1lcGFk
LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRFdmVudENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1OYXZpZ2F0b3JHYW1lcGFkOjpOYXZpZ2F0b3JHYW1lcGFkKCkK
LXsKLX0KLQotY29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVudE5hbWUoKQot
ewotICAgIHJldHVybiAiTmF2aWdhdG9yR2FtZXBhZCI7Ci19Ci0KLU5hdmlnYXRvckdhbWVwYWQq
IE5hdmlnYXRvckdhbWVwYWQ6OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCi17Ci0gICAgTmF2
aWdhdG9yR2FtZXBhZCogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PE5hdmlnYXRvckdhbWVwYWQq
PihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20obmF2aWdhdG9yLCBzdXBwbGVtZW50TmFtZSgp
KSk7Ci0gICAgaWYgKCFzdXBwbGVtZW50KSB7Ci0gICAgICAgIGF1dG8gbmV3U3VwcGxlbWVudCA9
IHN0ZDo6bWFrZV91bmlxdWU8TmF2aWdhdG9yR2FtZXBhZD4oKTsKLSAgICAgICAgc3VwcGxlbWVu
dCA9IG5ld1N1cHBsZW1lbnQuZ2V0KCk7Ci0gICAgICAgIHByb3ZpZGVUbyhuYXZpZ2F0b3IsIHN1
cHBsZW1lbnROYW1lKCksIHN0ZDo6bW92ZShuZXdTdXBwbGVtZW50KSk7Ci0gICAgfQotICAgIHJl
dHVybiBzdXBwbGVtZW50OwotfQotCi1jb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2
aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBhZHMoTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCitjb25zdCBW
ZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mIE5hdmlnYXRvckdhbWVwYWQ6OndlYmtpdEdldEdhbWVw
YWRzKE5hdmlnYXRvciogbmF2aWdhdG9yKQogewotICAgIHJldHVybiBOYXZpZ2F0b3JHYW1lcGFk
Ojpmcm9tKG5hdmlnYXRvciktPmdhbWVwYWRzKCk7CisgICAgcmV0dXJuIE5hdmlnYXRvckdhbWVw
YWQ6OmdldEdhbWVwYWRzKG5hdmlnYXRvcik7CiB9CiAKLWNvbnN0IFZlY3RvcjxSZWZQdHI8R2Ft
ZXBhZD4+JiBOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkcygpCitjb25zdCBWZWN0b3I8UmVmUHRy
PEdhbWVwYWQ+ID4mIE5hdmlnYXRvckdhbWVwYWQ6OmdldEdhbWVwYWRzKE5hdmlnYXRvciogbmF2
aWdhdG9yKQogewotICAgIHJldHVybiBtX2dhbWVwYWRzOworICAgIEFTU0VSVChuYXZpZ2F0b3Ip
OworICAgIHJldHVybiBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpmcm9tKG5hdmlnYXRvci0+ZnJh
bWUoKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpLT5nYW1lcGFkTGlzdCgpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L05hdmlnYXRvckdhbWVwYWQuaAppbmRleCA1NTc5MGE0Li43NmIyYmZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3
ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAotI2luY2x1ZGUgIlN1cHBsZW1lbnRh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDIwICszNywxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBHYW1lcGFkOwogY2xhc3MgTmF2aWdhdG9yOwogCi1jbGFzcyBOYXZp
Z2F0b3JHYW1lcGFkIDogcHVibGljIFN1cHBsZW1lbnQ8TmF2aWdhdG9yPiB7CitjbGFzcyBOYXZp
Z2F0b3JHYW1lcGFkIHsKIHB1YmxpYzoKLSAgICBOYXZpZ2F0b3JHYW1lcGFkKCk7Ci0KLSAgICBz
dGF0aWMgTmF2aWdhdG9yR2FtZXBhZCogZnJvbShOYXZpZ2F0b3IqKTsKLQotICAgIHN0YXRpYyBj
b25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgZ2V0R2FtZXBhZHMoTmF2aWdhdG9yKik7Ci0K
LXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgZ2FtZXBhZHMoKTsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8R2FtZXBhZD4+IG1fZ2FtZXBhZHM7CisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8R2FtZXBhZD4gPiYgIHdlYmtpdEdldEdhbWVwYWRzKE5hdmlnYXRvciopOworICAgIHN0
YXRpYyBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mICBnZXRHYW1lcGFkcyhOYXZpZ2F0
b3IqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbAppbmRleCBiYWMyYTczLi45
OTZmOTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdh
dG9yR2FtZXBhZC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmln
YXRvckdhbWVwYWQuaWRsCkBAIC0yNiw2ICsyNiw3IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9R0FN
RVBBRCwKIF0gcGFydGlhbCBpbnRlcmZhY2UgTmF2aWdhdG9yIHsKKyAgICBHYW1lcGFkW10gd2Vi
a2l0R2V0R2FtZXBhZHMoKTsKICAgICBHYW1lcGFkW10gZ2V0R2FtZXBhZHMoKTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNjc1YjFkMS4uZjkxM2NhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTc5LDcgKzc5LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZWZsL0Vycm9yc0VmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvRXZl
bnRMb29wRWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9GaWxlU3lzdGVtRWZsLmNwcAotICAgIHBs
YXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAKKyAgICBwbGF0Zm9ybS9lZmwvR2FtZXBhZHNQcm92
aWRlckVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvTGFuZ3VhZ2VFZmwuY3BwCiAgICAgcGxhdGZv
cm0vZWZsL0xvY2FsaXplZFN0cmluZ3NFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL0xvZ2dpbmdF
ZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDlkNGYwMWMuLjNlMWFjYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC05OCw3ICs5OCw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVW
ZXJ0aWNhbERhdGEuY3BwCiAKLSAgICBwbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwCisgICAg
cGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJHdGsuY3BwCiAKICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKIApAQCAtNTU0LDggKzU1NCw3
IEBAIGxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc1N0YWJsZV9JRExfRklMRVMKIGxpc3Qo
QVBQRU5EIEdPYmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lETF9GSUxFUwogICAgIE1vZHVsZXMv
YmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5pZGwKIAotICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNh
dGVkL0dhbWVwYWQuaWRsCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExp
c3QuaWRsCisgICAgTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaWRsCiAKICAgICBNb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAppbmRleCAz
YjY4NTY3Li41ZTI3OTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKQEAgLTY5LDYgKzY5LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKGZvY3VzKSBcCiAgICAgbWFjcm8oZm9j
dXNpbikgXAogICAgIG1hY3JvKGZvY3Vzb3V0KSBcCisgICAgbWFjcm8oZ2FtZXBhZGNvbm5lY3Rl
ZCkgXAorICAgIG1hY3JvKGdhbWVwYWRkaXNjb25uZWN0ZWQpIFwKICAgICBtYWNybyhnZXN0dXJl
dGFwKSBcCiAgICAgbWFjcm8oZ2VzdHVyZXRhcGRvd24pIFwKICAgICBtYWNybyhnZXN0dXJlc2Ny
b2xsc3RhcnQpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmlu
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KaW5kZXggNWYzZTIxOC4uYmEzYjZl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KQEAgLTEwLDYgKzEwLDcgQEAgQ29tcG9zaXRp
b25FdmVudAogQ3VzdG9tRXZlbnQKIEVycm9yRXZlbnQKIEZvY3VzRXZlbnQKK0dhbWVwYWRFdmVu
dCBjb25kaXRpb25hbD1HQU1FUEFECiBIYXNoQ2hhbmdlRXZlbnQKIEtleWJvYXJkRXZlbnQKIEtl
eWJvYXJkRXZlbnRzIGludGVyZmFjZU5hbWU9S2V5Ym9hcmRFdmVudApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCmluZGV4IGFlNzkxYzEuLmFlNDBhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw2ICs2Niw3
IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHYW1lcGFkRXZlbnRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGlz
dG9yeS5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtMTcwOCw2
ICsxNzEwLDEzIEBAIGJvb2wgRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50CiAgICAgfQogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoR0FNRVBBRCkKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmdhbWVwYWRjb25uZWN0ZWRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmdhbWVw
YWRkaXNjb25uZWN0ZWRFdmVudCkgeworICAgICAgICBpZiAoR2FtZXBhZEV2ZW50Q29udHJvbGxl
ciogY29udHJvbGxlciA9IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmZyb20odGhpcykpCisgICAg
ICAgICAgICBjb250cm9sbGVyLT5hZGRHYW1lcGFkRXZlbnRMaXN0ZW5lcigpOworICAgIH0KKyNl
bmRpZgorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3OTgsNiArMTgwNywxMyBAQCBib29s
IERPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lcgogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQp
CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkY29ubmVjdGVk
RXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkZGlzY29ubmVjdGVkRXZl
bnQpIHsKKyAgICAgICAgaWYgKEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpmcm9tKHRoaXMpKQorICAgICAgICAgICAgY29udHJvbGxl
ci0+cmVtb3ZlR2FtZXBhZEV2ZW50TGlzdGVuZXIoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xODk4LDYgKzE5MTQsMTEgQEAgdm9pZCBET01XaW5kb3c6OnJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKICAgICAgICAgY29udHJvbGxlci0+cmVtb3ZlQWxsRGV2
aWNlRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHQU1FUEFEKQor
ICAgIGlmIChHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBjb250cm9sbGVyID0gR2FtZXBhZEV2ZW50
Q29udHJvbGxlcjo6ZnJvbSh0aGlzKSkKKyAgICAgICAgY29udHJvbGxlci0+cmVtb3ZlQWxsR2Ft
ZXBhZEV2ZW50TGlzdGVuZXJzKCk7CisjZW5kaWYKKwogICAgIHJlbW92ZUFsbFVubG9hZEV2ZW50
TGlzdGVuZXJzKHRoaXMpOwogICAgIHJlbW92ZUFsbEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJz
KHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggMzIyNzNmYS4uMzkyNzQ5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmlj
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzc3LDYgKzM3OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZGV2aWNlb3JpZW50YXRpb24pOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoR0FNRVBBRCkKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihnYW1lcGFkY29ubmVjdGVkKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihnYW1lcGFkZGlzY29ubmVjdGVkKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBST1hJTUlU
WV9FVkVOVFMpCiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Via2l0
ZGV2aWNlcHJveGltaXR5KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4
IDFhZmYxMGEuLjFiYTJlMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTI4OSw2
ICsyODksOSBAQAogICAgIFtDb25kaXRpb25hbD1ERVZJQ0VfT1JJRU5UQVRJT05dIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uZGV2aWNlbW90aW9uOwogICAgIFtDb25kaXRpb25hbD1ERVZJQ0Vf
T1JJRU5UQVRJT05dIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZGV2aWNlb3JpZW50YXRpb247
CiAKKyAgICBbQ29uZGl0aW9uYWw9R0FNRVBBRF0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25n
YW1lcGFkY29ubmVjdGVkOworICAgIFtDb25kaXRpb25hbD1HQU1FUEFEXSBhdHRyaWJ1dGUgRXZl
bnRMaXN0ZW5lciBvbmdhbWVwYWRkaXNjb25uZWN0ZWQ7CisKICAgICBbQ29uZGl0aW9uYWw9UFJP
WElNSVRZX0VWRU5UU10gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRkZXZpY2Vwcm94
aW1pdHk7CiAKICAgICBbQ29uZGl0aW9uYWw9V0lMTF9SRVZFQUxfRURHRV9FVkVOVFNdIGF0dHJp
YnV0ZSBFdmVudExpc3RlbmVyIG9ud2Via2l0d2lsbHJldmVhbGJvdHRvbTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRzUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0dhbWVwYWRzUHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMzYwZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR2FtZXBhZHNQcm92aWRlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdhbWVwYWRzUHJvdmlkZXJfaAorI2RlZmluZSBHYW1lcGFkc1Byb3ZpZGVyX2gKKwor
I2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFk
QnV0dG9uOworY2xhc3MgR2FtZXBhZHNNYW5hZ2VyOworCitjbGFzcyBHYW1lcGFkRGV2aWNlIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5HYW1lcGFkRGV2aWNlKCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGF4ZXNDb3VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IGRvdWJsZSogYXhlc0Fy
cmF5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgYnV0dG9uc0NvdW50KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgR2FtZXBhZEJ1dHRvbjo6QnV0dG9uU3RydWN0KiBi
dXR0b25zQXJyYXkoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBHYW1lcGFkc1Byb3ZpZGVyIHsK
K3B1YmxpYzoKKyAgICBHYW1lcGFkc1Byb3ZpZGVyKEdhbWVwYWRzTWFuYWdlciogbWFuYWdlcikK
KyAgICAgICAgOiBtX2dhbWVwYWRzTWFuYWdlcihtYW5hZ2VyKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5HYW1lcGFkc1Byb3ZpZGVyKCkgPSBkZWZhdWx0OworCisgICAgR2FtZXBhZHNN
YW5hZ2VyKiBnYW1lcGFkTWFuYWdlcigpIHsgcmV0dXJuIG1fZ2FtZXBhZHNNYW5hZ2VyOyB9CisK
K3ByaXZhdGU6CisgICAgR2FtZXBhZHNNYW5hZ2VyKiBtX2dhbWVwYWRzTWFuYWdlcjsKK307CisK
K3R5cGVkZWYgc3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPEdhbWVwYWRzUHJvdmlkZXI+KEdhbWVw
YWRzTWFuYWdlciopPiBQcm92aWRlckZhY3RvcnlGdW5jdGlvbjsKKworUGFzc093blB0cjxHYW1l
cGFkc1Byb3ZpZGVyPiBjcmVhdGVHYW1lcGFkc1Byb3ZpZGVyKEdhbWVwYWRzTWFuYWdlciopOwor
CitpbmxpbmUgUHJvdmlkZXJGYWN0b3J5RnVuY3Rpb24gcGxhdGZvcm1HYW1lcGFkc1Byb3ZpZGVy
RmFjdG9yeSgpCit7CisgICAgcmV0dXJuIFByb3ZpZGVyRmFjdG9yeUZ1bmN0aW9uKGNyZWF0ZUdh
bWVwYWRzUHJvdmlkZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoR0FNRVBBRCkKKworI2VuZGlmIC8vIEdhbWVwYWRzUHJvdmlkZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9HYW1lcGFkc1Byb3ZpZGVyRWZsLmNwcApzaW1pbGFyaXR5
IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBh
ZHNFZmwuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNQ
cm92aWRlckVmbC5jcHAKaW5kZXggNzY4ZGMwMC4uZjJkNzFmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNQcm92aWRlckVmbC5jcHAKQEAgLTI0LDEzICsyNCwxNCBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1lcGFkcy5oIgogCiAj
aWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKIAogI2luY2x1ZGUgIkdhbWVwYWREZXZpY2VM
aW51eC5oIgogI2luY2x1ZGUgIkdhbWVwYWRMaXN0LmgiCisjaW5jbHVkZSAiR2FtZXBhZHNQcm92
aWRlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8RWV6ZS5oPgogI2luY2x1ZGUgPEVpbmEu
aD4KQEAgLTIxMSwyOCArMjEyLDMyIEBAIHZvaWQgR2FtZXBhZHNFZmw6OnVucmVnaXN0ZXJEZXZp
Y2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKQogICAgIG1fc2xvdHNbaW5kZXhdLmNsZWFyKCk7CiB9
CiAKLXZvaWQgR2FtZXBhZHNFZmw6OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRv
KQordm9pZCBHYW1lcGFkc0VmbDo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIC8qaW50
byovKQogewotICAgIEFTU0VSVChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7Ci0K
LSAgICBjb25zdCBzaXplX3Qgc2xvdENvdW50ID0gbV9zbG90cy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzbG90Q291bnQ7ICsraSkgewotICAgICAgICBpZiAobV9zbG90c1tp
XS5nZXQoKSAmJiBtX3Nsb3RzW2ldLT5jb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgR2FtZXBh
ZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7Ci0gICAgICAgICAg
ICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7Ci0gICAgICAgICAgICBp
ZiAoIWdhbWVwYWQpCi0gICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgp
OwotCi0gICAgICAgICAgICBnYW1lcGFkLT5pbmRleChpKTsKLSAgICAgICAgICAgIGdhbWVwYWQt
PmlkKGdhbWVwYWREZXZpY2UtPmlkKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1w
KGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMo
Z2FtZXBhZERldmljZS0+YXhlc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOwot
ICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQo
KSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7Ci0KLSAgICAgICAgICAgIGludG8tPnNl
dChpLCBnYW1lcGFkKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwg
MCk7Ci0gICAgfQorICAgIG5vdEltcGxlbWVudGVkKCk7CisKKy8vICoqKioqIEdhbWVwYWQgaW50
ZXJmYWNlIGNoYW5nZWQuICoqKioqCisvLworLy8gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09
IGludG8tPmxlbmd0aCgpKTsKKy8vCisvLyAgICBjb25zdCBzaXplX3Qgc2xvdENvdW50ID0gbV9z
bG90cy5zaXplKCk7CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNsb3RDb3VudDsgKytp
KSB7CisvLyAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90c1tpXS0+Y29ubmVj
dGVkKCkpIHsKKy8vICAgICAgICAgICAgR2FtZXBhZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9
IG1fc2xvdHNbaV0uZ2V0KCk7CisvLyAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFk
ID0gaW50by0+aXRlbShpKTsKKy8vICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQorLy8gICAgICAg
ICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOworLy8KKy8vICAgICAgICAgICAg
Z2FtZXBhZC0+aW5kZXgoaSk7CisvLyAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZp
Y2UtPmlkKCkpOworLy8gICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmlj
ZS0+dGltZXN0YW1wKCkpOworLy8gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZp
Y2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKKy8vICAgICAgICAg
ICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBh
ZERldmljZS0+YnV0dG9uc0RhdGEoKSk7CisvLworLy8gICAgICAgICAgICBpbnRvLT5zZXQoaSwg
Z2FtZXBhZCk7CisvLyAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgIGludG8tPnNldChpLCAw
KTsKKy8vICAgIH0KIH0KIAogdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykK
QEAgLTI0MSw2ICsyNDYsMTIgQEAgdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50
bykKICAgICBnYW1lcGFkc0VmbC5nZXQoKS51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKIH0KIAor
UGFzc093blB0cjxHYW1lcGFkc1Byb3ZpZGVyPiBjcmVhdGVHYW1lcGFkc1Byb3ZpZGVyKEdhbWVw
YWRzTWFuYWdlciogLyptYW5hZ2VyKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R2FtZXBhZHNQcm92aWRlckd0ay5jcHAKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcApyZW5hbWUgdG8gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJHdGsuY3BwCmluZGV4IGFi
NjNkZWIuLmU0YTE2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
YW1lcGFkc0d0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRz
UHJvdmlkZXJHdGsuY3BwCkBAIC0yNCwxOSArMjQsMjAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKIAogI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJF
Q0FURUQpCiAKICNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKICNpbmNsdWRlICJHYW1l
cGFkTGlzdC5oIgorI2luY2x1ZGUgIkdhbWVwYWRzUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxnaW8vZ3VuaXhp
bnB1dHN0cmVhbS5oPgogI2luY2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAKQEAgLTE2NCwyNyArMTY1LDMxIEBAIHZvaWQgR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZp
Y2UoU3RyaW5nIGRldmljZUZpbGUpCiAgICAgbV9zbG90c1tpbmRleF0uY2xlYXIoKTsKIH0KIAot
dm9pZCBHYW1lcGFkc0d0azo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCit2
b2lkIEdhbWVwYWRzR3RrOjp1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogLyppbnRvKi8p
CiB7Ci0gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7Ci0gICAg
ICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQo
KTsKLSAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsK
LSAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKLSAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2Ft
ZXBhZDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOwotICAgICAg
ICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERldmljZS0+aWQoKSk7Ci0gICAgICAgICAgICBnYW1l
cGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwotICAgICAgICAgICAg
Z2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+
YXhlc0RhdGEoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2Ut
PmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5idXR0b25zRGF0YSgpKTsKLQotICAgICAg
ICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGludG8tPnNldChpLCAwKTsKLSAgICB9CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworLy8gKioq
KiogR2FtZXBhZCBpbnRlcmZhY2UgY2hhbmdlZC4gKioqKioKKy8vCisvLyAgICBBU1NFUlQobV9z
bG90cy5zaXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOworLy8KKy8vICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7CisvLyAgICAgICAgaWYgKG1fc2xvdHNb
aV0uZ2V0KCkgJiYgbV9zbG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKKy8vICAgICAgICAgICAgR2Ft
ZXBhZERldmljZUd0ayogZ2FtZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7CisvLyAgICAg
ICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKKy8vICAgICAg
ICAgICAgaWYgKCFnYW1lcGFkKQorLy8gICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6
OmNyZWF0ZSgpOworLy8KKy8vICAgICAgICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7CisvLyAgICAg
ICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZpY2UtPmlkKCkpOworLy8gICAgICAgICAgICBn
YW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOworLy8gICAgICAg
ICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2
aWNlLT5heGVzRGF0YSgpKTsKKy8vICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFk
RGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7Cisv
LworLy8gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7CisvLyAgICAgICAgfSBlbHNl
CisvLyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKy8vICAgIH0KIH0KIAogdm9pZCBHYW1l
cGFkc0d0azo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdV
ZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCkBAIC0yMjAsNiArMjI1LDEyIEBAIHZv
aWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCiAgICAgZ2FtZXBhZHNHdGsudXBk
YXRlR2FtZXBhZExpc3QoaW50byk7CiB9CiAKK1Bhc3NPd25QdHI8R2FtZXBhZHNQcm92aWRlcj4g
Y3JlYXRlR2FtZXBhZHNQcm92aWRlcihHYW1lcGFkc01hbmFnZXIqIC8qbWFuYWdlciovKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGlu
dXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4
LmNwcAppbmRleCBjNTE3NTRkLi5iNmNiNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKIAot
I2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVD
QVRFRCkgfHwgRU5BQkxFKEdBTUVQQUQpCiAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUg
PHN5cy9pb2N0bC5oPgpAQCAtOTYsNCArOTYsNCBAQCBmbG9hdCBHYW1lcGFkRGV2aWNlTGludXg6
Om5vcm1hbGl6ZUJ1dHRvblZhbHVlKHNob3J0IHZhbHVlKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQorI2VuZGlmIC8vIEVO
QUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpIHx8IEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaAppbmRleCA5OWMw
OWIyLi4xM2ZmNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9H
YW1lcGFkRGV2aWNlTGludXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9H
YW1lcGFkRGV2aWNlTGludXguaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBHYW1lcGFkRGV2
aWNlTGludXhfaAogI2RlZmluZSBHYW1lcGFkRGV2aWNlTGludXhfaAogCi0jaWYgRU5BQkxFKEdB
TUVQQURfREVQUkVDQVRFRCkKKyNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKSB8fCBFTkFC
TEUoR0FNRVBBRCkKIAogI2luY2x1ZGUgPGxpbnV4L2pveXN0aWNrLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNjgsNiArNjgsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQorI2VuZGlmIC8v
IEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpIHx8IEVOQUJMRShHQU1FUEFEKQogCiAjZW5kaWYg
Ly8gR2FtZXBhZERldmljZUxpbnV4X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA4NjNmMjBlLi41ZTY1NWRmIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDYt
MjQgIE1pY2hhbCBEZWJza2kgIDxtLmRlYnNraUBzYW1zdW5nLmNvbT4KKworICAgICAgICBIVE1M
NSBHYW1lcGFkIEFQSSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzODUwCisKKyAgICAgICAgQ291bGQgbm90IHR1cm4gT04g
R0FNRVBBRCBiZWNhdXNlIGl0IHdhcyBmb3JjZWQgdG8gT0ZGLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtOgorCiAyMDE0LTA2LTI0ICBKYXZpZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBp
Z2FsaWEuY29tPgogCiAgICAgICAgIE5hbWUgbW92aW5nLiBVbnJldmlld2VkLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDdmYjJlMGEuLjZkYzIxZjAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTI0OCw3ICsyNDgsNyBAQCBt
eSBAZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9GVUxMU0NSRUVOX0FQSSIs
IGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSB8fCBpc0VmbCgpIHx8IGlzR3RrKCkpLCB2
YWx1ZSA9PiBcJGZ1bGxzY3JlZW5BUElTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiZ2Ft
ZXBhZCIsIGRlc2MgPT4gIlRvZ2dsZSBHYW1lcGFkIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+
ICJFTkFCTEVfR0FNRVBBRCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRnYW1lcGFkU3VwcG9y
dCB9LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfR0FNRVBBRCIsIGRlZmF1bHQgPT4gKGlzRWZs
KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkZ2FtZXBhZFN1cHBvcnQgfSwKIAogICAgIHsgb3B0
aW9uID0+ICJnZW9sb2NhdGlvbiIsIGRlc2MgPT4gIlRvZ2dsZSBHZW9sb2NhdGlvbiBzdXBwb3J0
IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0dFT0xPQ0FUSU9OIiwgZGVmYXVsdCA9PiAoaXNB
cHBsZVdlYktpdCgpIHx8IGlzSU9TV2ViS2l0KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkZ2Vv
bG9jYXRpb25TdXBwb3J0IH0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233710</attachid>
            <date>2014-06-24 09:52:42 -0700</date>
            <delta_ts>2020-05-22 08:04:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>impl.patch</filename>
            <type>text/plain</type>
            <size>60586</size>
            <attacher name="Michal Debski">m.debski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMWM3Y2E2ZC4uYzRjNWFkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE3MCwxMCArMTcwLDYgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKICAgICBNb2R1bGVzL2dhbWVwYWQvTmF2aWdh
dG9yR2FtZXBhZC5pZGwKIAotICAgIE1vZHVsZXMvZ2FtZXBhZC9kZXByZWNhdGVkL0dhbWVwYWQu
aWRsCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCi0gICAg
TW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwKLQogICAgIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vQ29vcmRpbmF0ZXMuaWRsCiAgICAgTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvbi5pZGwKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlk
bApAQCAtNzkwLDYgKzc4NiwxMiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9n
YW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuY3BwCiAgICAgTW9kdWxlcy9nYW1lcGFkL2Rl
cHJlY2F0ZWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKIAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwCisgICAgTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCisgICAgTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRzTWFuYWdlci5jcHAKKyAgICBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5jcHAKKwogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vQ29vcmRpbmF0ZXMuY3BwCiAgICAgTW9k
dWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKICAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKQEAgLTMxODcsNiArMzE4OSwxNCBAQCBpZiAoRU5B
QkxFX1dFQl9SRVBMQVkpCiAgICAgKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9HQU1FUEFEX0RF
UFJFQ0FURUQpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKKyAgICAgICAgTW9k
dWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZC5pZGwKKyAgICAgICAgTW9kdWxlcy9nYW1l
cGFkL2RlcHJlY2F0ZWQvR2FtZXBhZExpc3QuaWRsCisgICAgICAgIE1vZHVsZXMvZ2FtZXBhZC9k
ZXByZWNhdGVkL05hdmlnYXRvckdhbWVwYWQuaWRsCisgICAgKQorZW5kaWYgKCkKKwogc2V0KFdl
YkNvcmVUZXN0U3VwcG9ydF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL21vY2siCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Rlc3RpbmciCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYTc0OGE5YS4uY2EwNzVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNiBAQAorMjAxNC0w
Ni0yNCAgTWljaGFsIERlYnNraSAgPG0uZGVic2tpQHNhbXN1bmcuY29tPgorCisgICAgICAgIEhU
TUw1IEdhbWVwYWQgQVBJIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgcHJvcGVyIGdhbWVwYWQgaW1wbGVtZW50
YXRpb24gbWF0Y2hpbmcgc3BlYyBkZXNjcmlwdGlvbiBhYm92ZS4KKyAgICAgICAgSXQgY29uc2lz
dHMgb2YgdHdvIG1haW4gcGFydC4gRE9NV2luZG93IHNwZWNpZmljIGFuZCBHYW1lcGFkcyBNYW5h
Z2VyLgorICAgICAgICBHYW1lcGFkRXZlbnRDb250cm9sbGVyIGV4aXN0cyBmb3IgZWFjaCBET01X
aW5kb3cgYW5kIHNoYXJlcyBiZXR3ZWVuCisgICAgICAgIGVhY2ggb3RoZXIgb3duZXJzaGlwIG9m
IEdhbWVwYWRzIE1hbmFnZXIuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBtYW5naW5nCisgICAgICAg
IHBhZ2Ugc3BlY2lmaWMgR2FtZXBhZCBMaXN0IC0gdXBkYXRpbmcgR2FtcGFkcyBhbmQgaXQncyB0
aW1lc3RhbXBzIGFuZAorICAgICAgICBkaXNwYXRjaGluZyBldmVudHMgdG8gd2luZG93IG9iamVj
dC4KKyAgICAgICAgR2FtZXBhZHMgTWFuYWdlciBiZWdpbnMgaXQgZXhpc3RhbmNlIHdoZW4gYW55
IG9mIHRoZSBHYW1lcGFkIEFQSSBpcworICAgICAgICBhY2Nlc3NlZCBhbmQgcGVyc2lzdCBhcyBs
b25nIGFzIHRoZSBsYXN0IEdhbWVwYWRFdmVudENvbnRyb2xsZXIgd2hpY2gKKyAgICAgICAgaGFz
IHJlcXVlc3RlZCBpdHMgaW5zdGFuY2UuIFBvcnQgc3BlY2lmaWMgcHJvdmlkZXIncyBsaWZldGlt
ZSBpcyBoYW5kbGVkCisgICAgICAgIGJ5IHRoaXMgbWFuYWdlciwgaXQgaXMgYWxzbyBmb3J3YXJk
aW5nIGluZm9ybWF0aW9uIHJlY2VpdmVkIGZyb20KKyAgICAgICAgcHJvdmlkZXIgdG8gYWxsIEdh
bWVwYWRFdmVudENvbnRyb2xsZXJzIHdoaWNoIGhhcyByZWdpc3RlcmVkIHRvIE1hbmFnZXIuCisg
ICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzcGVjLCBwbGVhc2Ugc2VlOgorICAgICAgICBodHRw
Oi8vd3d3LnczLm9yZy9UUi9nYW1lcGFkLworCisgICAgICAgIExheW91dFRlc3RzIGFuZCByZXF1
aXJlZCBsb2dpYyB3aWxsIGJlIGFkZGVkIGluIGZ1cnRoZXIgY29tbWl0cy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREYXRhOjpyZXNpemVBeGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWREYXRhOjpzZXRBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRE
YXRhOjpyZXNpemVCdXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREYXRhOjpzZXRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkOjp+R2FtZXBhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkOjpheGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OmJ1dHRv
bnMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpHYW1lcGFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBh
ZDo6fkdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6aWQpOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6dGlt
ZXN0YW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OnNldFRpbWVzdGFtcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHYW1lcGFkOjpjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2Ft
ZXBhZDo6c2V0Q29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6Om1hcHBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6YXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkOjpidXR0b25zKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGw6
CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWRCdXR0b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
QnV0dG9uOjpwcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRCdXR0b246OnNldFBy
ZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZEJ1dHRvbjo6c2V0QnV0dG9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
QnV0dG9uOjpidXR0b25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRCdXR0b246Okdh
bWVwYWRCdXR0b24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9uLmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRFdmVudDo6Y3JlYXRlQ29ubmVjdGVkR2FtZXBhZCk6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OmNyZWF0ZURpc2Nvbm5lY3RlZEdhbWVwYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50OjpldmVudEludGVyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OkdhbWVwYWRFdmVudCk6CisgICAgICAgICogTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50SW5p
dDo6R2FtZXBhZEV2ZW50SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnQ6On5HYW1lcGFkRXZlbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6R2FtZXBhZEV2ZW50Q29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjp+R2FtZXBh
ZEV2ZW50Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjphZGRHYW1lcGFkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
RXZlbnRDb250cm9sbGVyOjpyZW1vdmVHYW1lcGFkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxHYW1lcGFkRXZlbnRMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6c3VwcGxl
bWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Z2Ft
ZXBhZENvbm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9sbGVy
OjpnYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVudENv
bnRyb2xsZXI6OmdhbWVwYWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVu
dENvbnRyb2xsZXI6OmdhbWVwYWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRFdmVu
dENvbnRyb2xsZXI6OmZyb20pOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEV2ZW50Q29udHJv
bGxlcjo6aXNBY3RpdmVBdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjpkaXNwYXRjaEdhbWVwYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRXZl
bnRDb250cm9sbGVyOjpjaGVja01hbmFnZXJBc3NpZ25lZCk6CisgICAgICAgIChXZWJDb3JlOjpH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjphZGRHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUdhbWVwYWQpOgorICAgICAgICAqIE1vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkRXZlbnRDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6aXNBY3RpdmUpOgorICAgICAgICAqIE1vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkc01hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRzTWFuYWdlcjo6R2FtZXBhZHNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVw
YWRzTWFuYWdlcjo6bWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6
OnJlbGVhc2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6c2V0
UHJvdmlkZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6cmVn
aXN0ZXJUb01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpkZXJl
Z2lzdGVyRnJvbU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpn
YW1lcGFkQ29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2Ft
ZXBhZERpc2Nvbm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc01hbmFnZXI6Omdh
bWVwYWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBh
ZEF4aXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBh
ZEJ1dHRvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjp1cGRh
dGVHYW1lcGFkKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNNYW5hZ2VyOjpwcm92aWRlcik6Cisg
ICAgICAgICogTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6d2Via2l0R2V0R2FtZXBhZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBhZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yR2FtZXBhZDo6TmF2aWdhdG9yR2FtZXBhZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOgorICAgICAgICAqIE1vZHVs
ZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBkb20vRXZlbnRO
YW1lcy5oOgorICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmluOgorICAgICAgICAqIHBhZ2UvRE9N
V2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyk6Cisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6
CisgICAgICAgICogcGxhdGZvcm0vR2FtZXBhZHNQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRzUHJvdmlkZXI6OkdhbWVwYWRzUHJvdmlkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZHNQcm92aWRlcjo6Z2FtZXBhZE1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6cGxhdGZvcm1HYW1lcGFkc1Byb3ZpZGVyRmFjdG9yeSk6CisgICAgICAgICogcGxhdGZv
cm0vZWZsL0dhbWVwYWRzUHJvdmlkZXJFZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVw
YWRzRWZsOjp1cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHYW1l
cGFkc1Byb3ZpZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR2FtZXBhZHNQcm92aWRlckd0
ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNH
dGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHdGs6OnVwZGF0ZUdhbWVwYWRMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdhbWVwYWRzUHJvdmlkZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4Lmg6CisKIDIwMTQtMDYtMjQgIEV2YSBCYWxhenNm
YWx2aSAgPGV2YWIudS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXgg
dW51c2VkIHBhcmFtZXRlciB3YXJuaW5ncyBpZiBpbnNwZWN0b3IgaXMgZGlzYWJsZWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAppbmRleCAyMGEwZjI5ZS4uMzAy
MmE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MK
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMzUgKzIzLDUxIEBACiAgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLQog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdhbWVwYWQuaCIKIAogI2lmIEVOQUJMRShH
QU1FUEFEKQogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdhbWVwYWQ6OkdhbWVwYWQoKQotICAg
IDogbV9pbmRleCgwKQotICAgICwgbV9jb25uZWN0ZWQodHJ1ZSkKLSAgICAsIG1fdGltZXN0YW1w
KDAuMCkKK3ZvaWQgR2FtZXBhZERhdGE6OnJlc2l6ZUF4ZXModW5zaWduZWQgY291bnQpCit7Cisg
ICAgYXV0byBvbGRTaXplID0gbV9heGVzLnNpemUoKTsKKyAgICBtX2F4ZXMucmVzaXplKGNvdW50
KTsKKyAgICBpZiAob2xkU2l6ZSA8IG1fYXhlcy5zaXplKCkpIHsKKyAgICAgICAgc3RkOjpnZW5l
cmF0ZTw+KG1fYXhlcy5iZWdpbigpICsgb2xkU2l6ZSwgbV9heGVzLmVuZCgpLCBbXSgpIHsKKyAg
ICAgICAgICAgIHJldHVybiAwLjA7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBHYW1l
cGFkRGF0YTo6c2V0QXhpcyh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQogeworICAgIEFT
U0VSVChpbmRleCA8IG1fYXhlcy5zaXplKCkpOworICAgIG1fYXhlc1tpbmRleF0gPSB2YWx1ZTsK
IH0KIAotR2FtZXBhZDo6fkdhbWVwYWQoKQordm9pZCBHYW1lcGFkRGF0YTo6cmVzaXplQnV0dG9u
cyh1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBhdXRvIG9sZFNpemUgPSBtX2J1dHRvbnMuc2l6ZSgp
OworICAgIG1fYnV0dG9ucy5yZXNpemUoY291bnQpOworICAgIGlmIChvbGRTaXplIDwgbV9idXR0
b25zLnNpemUoKSkKKyAgICAgICAgc3RkOjpnZW5lcmF0ZTxWZWN0b3I8UmVmUHRyPEdhbWVwYWRC
dXR0b24+ID46Oml0ZXJhdG9yLCBQYXNzUmVmUHRyPEdhbWVwYWRCdXR0b24+KCk+KG1fYnV0dG9u
cy5iZWdpbigpICsgb2xkU2l6ZSwgbV9idXR0b25zLmVuZCgpLCBHYW1lcGFkQnV0dG9uOjpjcmVh
dGUpOwogfQogCi1jb25zdCBWZWN0b3I8ZG91YmxlPiYgR2FtZXBhZDo6YXhlcygpIGNvbnN0Cit2
b2lkIEdhbWVwYWREYXRhOjpzZXRCdXR0b24odW5zaWduZWQgaW5kZXgsIGNvbnN0IEdhbWVwYWRC
dXR0b246OkJ1dHRvblN0cnVjdCYgZGF0YSkKIHsKLSAgICByZXR1cm4gbV9heGVzOworICAgIEFT
U0VSVChpbmRleCA8IG1fYnV0dG9ucy5zaXplKCkpOworICAgIG1fYnV0dG9uc1tpbmRleF0tPnNl
dEJ1dHRvbkRhdGEoZGF0YSk7CiB9CiAKLWNvbnN0IFZlY3RvcjxSZWY8R2FtZXBhZEJ1dHRvbj4+
JiBHYW1lcGFkOjpidXR0b25zKCkgY29uc3QKK0dhbWVwYWQ6OkdhbWVwYWQoUGFzc1JlZlB0cjxH
YW1lcGFkRGF0YT4gZGF0YSkKKyAgICA6IG1fZGF0YXtkYXRhfQorICAgICwgbV90aW1lc3RhbXB7
MH0KIHsKLSAgICByZXR1cm4gbV9idXR0b25zOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaAppbmRleCAyOGViZTFhLi41
MDVhOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NSwzMyArMzUsNzAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHYW1lcGFkOiBw
dWJsaWMgUmVmQ291bnRlZDxHYW1lcGFkPiB7CitjbGFzcyBHYW1lcGFkRGF0YTogcHVibGljIFJl
ZkNvdW50ZWQ8R2FtZXBhZERhdGE+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
YW1lcGFkPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPiBjcmVh
dGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFkKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFkRGF0YSk7CiAgICAgfQotICAgIH5HYW1lcGFk
KCk7CisgICAgfkdhbWVwYWREYXRhKCkgeyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHZvaWQgaWQoY29uc3QgU3RyaW5nJiBpZCkgeyBtX2lk
ID0gaWQ7IH0KKwogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQorICAgIHZvaWQgaW5kZXgodW5zaWduZWQgdmFsKSB7IG1faW5kZXggPSB2YWw7IH0KKwogICAg
IGNvbnN0IFN0cmluZyYgbWFwcGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbWFwcGluZzsgfQorICAg
IHZvaWQgbWFwcGluZyhjb25zdCBTdHJpbmcmIG1hcHBpbmcpIHsgbV9tYXBwaW5nID0gbWFwcGlu
ZzsgfQogCi0gICAgYm9vbCBjb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3RlZDsg
fQotICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQot
ICAgIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBheGVzKCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9y
PFJlZjxHYW1lcGFkQnV0dG9uPj4mIGJ1dHRvbnMoKSBjb25zdDsKKyAgICBjb25zdCBWZWN0b3I8
ZG91YmxlPiYgYXhlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXhlczsgfQorICAgIHZvaWQgcmVzaXpl
QXhlcyh1bnNpZ25lZCBjb3VudCk7CisgICAgdm9pZCBzZXRBeGlzKHVuc2lnbmVkIGluZGV4LCBk
b3VibGUgdmFsdWUpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkQnV0dG9uPiA+
JiBidXR0b25zKCkgY29uc3QgeyByZXR1cm4gbV9idXR0b25zOyB9CisgICAgdm9pZCByZXNpemVC
dXR0b25zKHVuc2lnbmVkIGNvdW50KTsKKyAgICB2b2lkIHNldEJ1dHRvbih1bnNpZ25lZCBpbmRl
eCwgY29uc3QgR2FtZXBhZEJ1dHRvbjo6QnV0dG9uU3RydWN0JiBkYXRhKTsKIAogcHJpdmF0ZToK
LSAgICBHYW1lcGFkKCk7CisgICAgR2FtZXBhZERhdGEoKQorICAgICAgICA6IG1faW5kZXh7MH0K
KyAgICB7CisgICAgfQorCiAgICAgU3RyaW5nIG1faWQ7CiAgICAgdW5zaWduZWQgbV9pbmRleDsK
LSAgICBib29sIG1fY29ubmVjdGVkOwotICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKICAgICBTdHJp
bmcgbV9tYXBwaW5nOwotCiAgICAgVmVjdG9yPGRvdWJsZT4gbV9heGVzOwotICAgIFZlY3RvcjxS
ZWY8R2FtZXBhZEJ1dHRvbj4+IG1fYnV0dG9uczsKKyAgICBWZWN0b3I8UmVmUHRyPEdhbWVwYWRC
dXR0b24+ID4gbV9idXR0b25zOworfTsKKworY2xhc3MgR2FtZXBhZCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEdhbWVwYWQ+ICB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZD4g
Y3JlYXRlKFBhc3NSZWZQdHI8R2FtZXBhZERhdGE+IGRhdGEpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdhbWVwYWR7ZGF0YX0pOworICAgIH0KKyAgICB+R2FtZXBhZCgpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEtPmlkKCk7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+
aW5kZXgoKTsgfQorCisgICAgZG91YmxlIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlt
ZXN0YW1wOyB9CisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbCkgeyBtX3RpbWVzdGFt
cCA9IHZhbDsgfQorICAgIGJvb2wgY29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0
ZWQ7IH0KKyAgICB2b2lkIHNldENvbm5lY3RlZChib29sIGNvbm5lY3RlZCkgeyBtX2Nvbm5lY3Rl
ZCA9IGNvbm5lY3RlZDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBtYXBwaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLT5tYXBwaW5nKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYXhl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+YXhlcygpOyB9CisgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxHYW1lcGFkQnV0dG9uPiA+JiBidXR0b25zKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5i
dXR0b25zKCk7IH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR2FtZXBhZChQYXNzUmVmUHRyPEdh
bWVwYWREYXRhPiBkYXRhKTsKKyAgICBSZWZQdHI8R2FtZXBhZERhdGE+IG1fZGF0YTsKKyAgICBi
b29sIG1fY29ubmVjdGVkOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RpbWVzdGFtcDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmlkbAppbmRleCA1YjZhOTM3Li40ZjI5NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaWRsCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkQnV0dG9uLmgKaW5kZXggMmQyNThkNy4uOGQ4ZmNkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5oCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzMSArMjksNjMgQEAKIAogI2lmIEVOQUJM
RShHQU1FUEFEKQogCisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdhbWVwYWRCdXR0b24gOiBwdWJsaWMg
UmVmQ291bnRlZDxHYW1lcGFkQnV0dG9uPiB7CitjbGFzcyBHYW1lcGFkQnV0dG9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8R2FtZXBhZEJ1dHRvbj4gIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGRvdWJsZSBERUZBVUxUX1BSRVNTX1RIUkVTSE9MRCA9IDAuNTsKKyAgICB0eXBlZGVmIHN0
ZDo6cGFpcjxib29sLCBkb3VibGU+IEJ1dHRvblN0cnVjdDsKKwogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdhbWVwYWRCdXR0b24+IGNyZWF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEdhbWVwYWRCdXR0b24pOwogICAgIH0KIAotICAgIGJvb2wgcHJlc3NlZCgpIGNvbnN0
OwotICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICB2b2lk
IHNldFZhbHVlKGRvdWJsZSB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHYW1lcGFkQnV0dG9uPiBjcmVhdGUoY29uc3QgQnV0dG9uU3RydWN0JiBkYXRh
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFkQnV0dG9ue2RhdGF9
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkQnV0dG9uPiBjcmVhdGUo
QnV0dG9uU3RydWN0JiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
R2FtZXBhZEJ1dHRvbntzdGQ6Om1vdmUoZGF0YSl9KTsKKyAgICB9CisKKyAgICB+R2FtZXBhZEJ1
dHRvbigpID0gZGVmYXVsdDsKKworICAgIGJvb2wgcHJlc3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YnV0dG9uLmZpcnN0OyB9CisgICAgdm9pZCBzZXRQcmVzc2VkKGJvb2wgcHJlc3NlZCkgeyBtX2J1
dHRvbi5maXJzdCA9IHByZXNzZWQ7IH0KKworICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dG9uLnNlY29uZDsgfQorICAgIHZvaWQgc2V0VmFsdWUoZG91YmxlIHZhbHVlKSB7
IG1fYnV0dG9uLnNlY29uZCA9IHZhbHVlOyB9CisKKyAgICB2b2lkIHNldEJ1dHRvbkRhdGEoY29u
c3QgQnV0dG9uU3RydWN0JiBkYXRhKSB7IG1fYnV0dG9uID0gZGF0YTsgfQorICAgIHZvaWQgc2V0
QnV0dG9uRGF0YShCdXR0b25TdHJ1Y3QmJiBkYXRhKSB7IG1fYnV0dG9uID0gc3RkOjptb3ZlKGRh
dGEpOyB9CisgICAgY29uc3QgQnV0dG9uU3RydWN0JiBidXR0b25EYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9idXR0b247IH0KIAogcHJpdmF0ZToKLSAgICBHYW1lcGFkQnV0dG9uKCk7CisgICAgR2Ft
ZXBhZEJ1dHRvbigpCisgICAgICAgIDogbV9idXR0b257ZmFsc2UsIDAuMH0KKyAgICB7CisgICAg
fQorICAgIGV4cGxpY2l0IEdhbWVwYWRCdXR0b24oY29uc3QgQnV0dG9uU3RydWN0JiBkYXRhKQor
ICAgICAgICA6IG1fYnV0dG9ue2RhdGF9CisgICAgeworICAgIH0KKyAgICBleHBsaWNpdCBHYW1l
cGFkQnV0dG9uKEJ1dHRvblN0cnVjdCYmIGRhdGEpCisgICAgICAgIDogbV9idXR0b257c3RkOjpt
b3ZlKGRhdGEpfQorICAgIHsKKyAgICB9CiAKLSAgICBkb3VibGUgbV92YWx1ZTsKKyAgICBCdXR0
b25TdHJ1Y3QgbV9idXR0b247CiB9OwogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShHQU1FUEFEKQotCiAjZW5kaWYgLy8gR2FtZXBhZEJ1dHRvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5pZGwKaW5kZXgg
MWI2ZjE4OC4uZDc2Y2FlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWRCdXR0b24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkQnV0dG9uLmlkbApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRFdmVudC5jcHAKaW5kZXggNWJhZGY0Ni4uYTBkNjg1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5jcHAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyLDI2ICsyMyw0MSBAQAogICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHYW1lcGFkRXZlbnQuaCIKIAogI2lmIEVOQUJMRShHQU1FUEFE
KQogCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdh
bWVwYWRFdmVudDo6R2FtZXBhZEV2ZW50KCkKK1Bhc3NSZWZQdHI8R2FtZXBhZEV2ZW50PiBHYW1l
cGFkRXZlbnQ6OmNyZWF0ZUNvbm5lY3RlZEdhbWVwYWQoUGFzc1JlZlB0cjxHYW1lcGFkPiBnYW1l
cGFkKQoreworICAgIEdhbWVwYWRFdmVudEluaXQgaW5pdGFsaXplcntnYW1lcGFkfTsKKyAgICBy
ZXR1cm4gY3JlYXRlKGV2ZW50TmFtZXMoKS5nYW1lcGFkY29ubmVjdGVkRXZlbnQsIGluaXRhbGl6
ZXIpOworfQorCitQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gR2FtZXBhZEV2ZW50OjpjcmVhdGVE
aXNjb25uZWN0ZWRHYW1lcGFkKFBhc3NSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCkKIHsKKyAgICBH
YW1lcGFkRXZlbnRJbml0IGluaXRhbGl6ZXJ7Z2FtZXBhZH07CisgICAgcmV0dXJuIGNyZWF0ZShl
dmVudE5hbWVzKCkuZ2FtZXBhZGRpc2Nvbm5lY3RlZEV2ZW50LCBpbml0YWxpemVyKTsKIH0KIAot
R2FtZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEdhbWVwYWQqIGdhbWVwYWQpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSkK
LSAgICAsIG1fZ2FtZXBhZChnYW1lcGFkKQorRXZlbnRJbnRlcmZhY2UgR2FtZXBhZEV2ZW50Ojpl
dmVudEludGVyZmFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdhbWVwYWRFdmVudEludGVyZmFj
ZVR5cGU7Cit9CisKK0dhbWVwYWRFdmVudDo6R2FtZXBhZEV2ZW50KCkKKyAgICA6IG1faW5kZXh7
MH0KIHsKIH0KIAotR2FtZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudEluaXQmIGluaXRpYWxpemVyKQotICAgIDog
RXZlbnQoZXZlbnRUeXBlLCBpbml0aWFsaXplcikKLSAgICAsIG1fZ2FtZXBhZChpbml0aWFsaXpl
ci5nYW1lcGFkKQorR2FtZXBhZEV2ZW50OjpHYW1lcGFkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudE5hbWUsIGNvbnN0IEdhbWVwYWRFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDog
RXZlbnR7ZXZlbnROYW1lLCBpbml0aWFsaXplcn0KKyAgICAsIG1fZ2FtZXBhZHtpbml0aWFsaXpl
ci5nYW1lcGFkfQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2Ft
ZXBhZEV2ZW50LmgKaW5kZXggMTY4ZWNhOS4uZWU2N2I4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjIsMTMgKzIzLDEzIEBACiAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBHYW1lcGFkRXZlbnRf
aAogI2RlZmluZSBHYW1lcGFkRXZlbnRfaAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKICNpbmNs
dWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJHYW1lcGFk
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC0zOSwzNyArNDAsMzkgQEAgc3RydWN0
IEdhbWVwYWRFdmVudEluaXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKICAgICB7CiAgICAgfQogCisg
ICAgZXhwbGljaXQgR2FtZXBhZEV2ZW50SW5pdChQYXNzUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQp
CisgICAgICAgIDogZ2FtZXBhZHtnYW1lcGFkfQorICAgIHsKKyAgICB9CisKICAgICBSZWZQdHI8
R2FtZXBhZD4gZ2FtZXBhZDsKIH07CiAKIGNsYXNzIEdhbWVwYWRFdmVudCA6IHB1YmxpYyBFdmVu
dCB7CiBwdWJsaWM6Ci0gICAgfkdhbWVwYWRFdmVudCgpIHsgfQorICAgIH5HYW1lcGFkRXZlbnQo
KSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHYW1lcGFkRXZlbnQ+IGNyZWF0
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWRFdmVudCk7CiAg
ICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEV2ZW50PiBjcmVhdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEdhbWVwYWQqIGdhbWVwYWQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2FtZXBhZEV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBHYW1lcGFkRXZlbnRJbml0JiBpbml0aWFsaXplcikKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgR2FtZXBhZEV2ZW50KGV2ZW50VHlwZSwgZ2FtZXBhZCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEdhbWVwYWRFdmVudHt0eXBlLCBpbml0aWFsaXplcn0pOwog
ICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gY3JlYXRlKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBHYW1lcGFkRXZlbnRJbml0JiBpbml0aWFs
aXplcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZEV2ZW50KGV2
ZW50VHlwZSwgaW5pdGlhbGl6ZXIpKTsKLSAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2Ft
ZXBhZEV2ZW50PiBjcmVhdGVDb25uZWN0ZWRHYW1lcGFkKFBhc3NSZWZQdHI8R2FtZXBhZD4pOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRFdmVudD4gY3JlYXRlRGlzY29ubmVjdGVkR2Ft
ZXBhZChQYXNzUmVmUHRyPEdhbWVwYWQ+KTsKIAogICAgIEdhbWVwYWQqIGdhbWVwYWQoKSBjb25z
dCB7IHJldHVybiBtX2dhbWVwYWQuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBHYW1lcGFkRXZlbnRJ
bnRlcmZhY2VUeXBlOyB9CisgICAgdmlydHVhbCBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFj
ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEdhbWVwYWRFdmVudCgpOwotICAg
IGV4cGxpY2l0IEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgR2Ft
ZXBhZCopOwotICAgIEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
Y29uc3QgR2FtZXBhZEV2ZW50SW5pdCYpOworICAgIEdhbWVwYWRFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IEdhbWVwYWRFdmVudEluaXQmIGluaXRpYWxpemVyKTsKIAorICAg
IHVuc2lnbmVkIG1faW5kZXg7CiAgICAgUmVmUHRyPEdhbWVwYWQ+IG1fZ2FtZXBhZDsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnQu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKaW5k
ZXggMTU3NzkxOC4uNDQxNzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWRFdmVudC5pZGwKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZlbnRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkRXZl
bnRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVk
MTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRFdmVudENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRFdmVudENvbnRyb2xsZXIuaCIK
KworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkdhbWVwYWQuaCIK
KyNpbmNsdWRlICJHYW1lcGFkRXZlbnQuaCIKKyNpbmNsdWRlICJHYW1lcGFkc01hbmFnZXIuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPEdhbWVwYWRFdmVudENvbnRyb2xsZXI+
IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmNyZWF0ZShET01XaW5kb3cqIHdpbmRvdykKK3sKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRXZlbnRDb250cm9sbGVyPih3aW5kb3cp
OworfQorCitHYW1lcGFkRXZlbnRDb250cm9sbGVyOjpHYW1lcGFkRXZlbnRDb250cm9sbGVyKERP
TVdpbmRvdyogd2luZG93KQorICAgIDogbV9saXN0ZW5lcnNDb3VudGVyezB9LAorICAgICAgbV9n
YW1lcGFkc01hbmFnZXJ7bnVsbHB0cn0sCisgICAgICBtX3dpbmRvd3t3aW5kb3d9Cit7Cit9CisK
K0dhbWVwYWRFdmVudENvbnRyb2xsZXI6On5HYW1lcGFkRXZlbnRDb250cm9sbGVyKCkKK3sKKyAg
ICBpZiAobV9nYW1lcGFkc01hbmFnZXIpCisgICAgICAgIG1fZ2FtZXBhZHNNYW5hZ2VyLT5kZXJl
Z2lzdGVyRnJvbU1hbmFnZXIodGhpcyk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxl
cjo6YWRkR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQoreworICAgIGNoZWNrTWFuYWdlckFzc2lnbmVk
KCk7CisgICAgKyttX2xpc3RlbmVyc0NvdW50ZXI7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlR2FtZXBhZEV2ZW50TGlzdGVuZXIoKQoreworICAgIGlmIChtX2xpc3Rl
bmVyc0NvdW50ZXIpCisgICAgICAgIC0tbV9saXN0ZW5lcnNDb3VudGVyOworfQorCit2b2lkIEdh
bWVwYWRFdmVudENvbnRyb2xsZXI6OnJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygpCit7
CisgICAgbV9saXN0ZW5lcnNDb3VudGVyID0gMDsKK30KKworY29uc3QgY2hhciogR2FtZXBhZEV2
ZW50Q29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
IGdhbWVwYWRFdmVudENvbnRyb2xsZXJTdHJpbmdbXSA9ICJHYW1lcGFkRXZlbnRDb250cm9sbGVy
IjsKKyAgICByZXR1cm4gZ2FtZXBhZEV2ZW50Q29udHJvbGxlclN0cmluZzsKK30KKwordm9pZCBH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGluZGV4LCBQ
YXNzUmVmUHRyPEdhbWVwYWREYXRhPiBkYXRhKQoreworICAgIGF1dG8gZ2FtZXBhZCA9IEdhbWVw
YWQ6OmNyZWF0ZShkYXRhKTsKKyAgICAvLyBGSVhNRTogc2V0IHRpbWVzdGFtcCByZWxhdGl2ZSB0
byBwYWdlIHN0YXJ0IHRpbWUsIGFzIGluIGN1cnJlbnQgZ2FtZXBhZCBzcGVjCisgICAgZ2FtZXBh
ZC0+c2V0VGltZXN0YW1wKGN1cnJlbnRUaW1lTVMoKSk7CisgICAgLy8gZ2FtZXBhZC5nZXQoKSB0
byBjcmVhdGUgYW5vdGhlciBQYXNzUmVmUHRyIGFuZCBub3QgbW92ZSB0aGUgY3VycmVudCBvbmUu
CisgICAgYWRkR2FtZXBhZChpbmRleCwgZ2FtZXBhZC5nZXQoKSk7CisgICAgZ2FtZXBhZC0+c2V0
Q29ubmVjdGVkKHRydWUpOworICAgIGlmIChtX2xpc3RlbmVyc0NvdW50ZXIpCisgICAgICAgIGRp
c3BhdGNoR2FtZXBhZEV2ZW50KEdhbWVwYWRFdmVudDo6Y3JlYXRlQ29ubmVjdGVkR2FtZXBhZChn
YW1lcGFkKSk7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Z2FtZXBhZERpc2Nv
bm5lY3RlZCh1bnNpZ25lZCBpbmRleCwgUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4gLypkYXRhKi8p
Cit7CisgICAgaWYgKGluZGV4ID49IG1fZ2FtZXBhZHMuc2l6ZSgpIHx8ICFtX2dhbWVwYWRzW2lu
ZGV4XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZ2FtZXBhZCA9IG1fZ2FtZXBh
ZHNbaW5kZXhdKSB7CisgICAgICAgIHJlbW92ZUdhbWVwYWQoaW5kZXgpOworICAgICAgICBnYW1l
cGFkLT5zZXRDb25uZWN0ZWQoZmFsc2UpOworICAgICAgICBpZiAobV9saXN0ZW5lcnNDb3VudGVy
KQorICAgICAgICAgICAgZGlzcGF0Y2hHYW1lcGFkRXZlbnQoR2FtZXBhZEV2ZW50OjpjcmVhdGVE
aXNjb25uZWN0ZWRHYW1lcGFkKGdhbWVwYWQpKTsKKyAgICB9Cit9CisKK3ZvaWQgR2FtZXBhZEV2
ZW50Q29udHJvbGxlcjo6Z2FtZXBhZENoYW5nZWQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8
R2FtZXBhZERhdGE+IGRhdGEpCit7CisgICAgaWYoaW5kZXggPj0gbV9nYW1lcGFkcy5zaXplKCkg
fHwgIW1fZ2FtZXBhZHNbaW5kZXhdKQorICAgICAgICBnYW1lcGFkQ29ubmVjdGVkKGluZGV4LCBk
YXRhKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ2FtZXBhZHNbaW5kZXhdLT5zZXRUaW1lc3RhbXAo
Y3VycmVudFRpbWVNUygpKTsKK30KKworY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiBH
YW1lcGFkRXZlbnRDb250cm9sbGVyOjpnYW1lcGFkTGlzdCgpCit7CisgICAgY2hlY2tNYW5hZ2Vy
QXNzaWduZWQoKTsKKyAgICByZXR1cm4gbV9nYW1lcGFkczsKK30KKworR2FtZXBhZEV2ZW50Q29u
dHJvbGxlciogR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZnJvbShET01XaW5kb3cqIHdpbmRvdykK
K3sKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHYW1l
cGFkRXZlbnRDb250cm9sbGVyKiBzdXBwbGVtZW50ID0gc3RhdGljX2Nhc3Q8R2FtZXBhZEV2ZW50
Q29udHJvbGxlcio+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1l
bnROYW1lKCkpKTsKKyAgICBpZiAoIXN1cHBsZW1lbnQpIHsKKyAgICAgICAgYXV0byBuZXdJbnN0
YW5jZSA9IGNyZWF0ZSh3aW5kb3cpOworICAgICAgICBzdXBwbGVtZW50ID0gbmV3SW5zdGFuY2Uu
Z2V0KCk7CisgICAgICAgIHByb3ZpZGVUbyh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCksIHN0ZDo6
bW92ZShuZXdJbnN0YW5jZSkpOworICAgIH0KKyAgICByZXR1cm4gc3VwcGxlbWVudDsKK30KKwor
Ym9vbCBHYW1lcGFkRXZlbnRDb250cm9sbGVyOjppc0FjdGl2ZUF0KERPTVdpbmRvdyogd2luZG93
KQoreworICAgIGlmIChHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBzZWxmID0gR2FtZXBhZEV2ZW50
Q29udHJvbGxlcjo6ZnJvbSh3aW5kb3cpKQorICAgICAgICByZXR1cm4gc2VsZi0+aXNBY3RpdmUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6
ZGlzcGF0Y2hHYW1lcGFkRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgaWYg
KGlzQWN0aXZlKCkgJiYgIW1fd2luZG93LT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3VzcGVuZGVkKCkgJiYgIW1fd2luZG93LT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3RvcHBlZCgpKQorICAgICAgICBtX3dpbmRvdy0+ZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisK
K3ZvaWQgR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6Y2hlY2tNYW5hZ2VyQXNzaWduZWQoKQorewor
ICAgIGlmICghbV9nYW1lcGFkc01hbmFnZXIpIHsKKyAgICAgICAgbV9nYW1lcGFkc01hbmFnZXIg
PSBHYW1lcGFkc01hbmFnZXI6Om1hbmFnZXIoKTsKKyAgICAgICAgbV9nYW1lcGFkc01hbmFnZXIt
PnJlZ2lzdGVyVG9NYW5hZ2VyKHRoaXMpOworICAgIH0KK30KKwordm9pZCBHYW1lcGFkRXZlbnRD
b250cm9sbGVyOjphZGRHYW1lcGFkKHVuc2lnbmVkIGluZGV4LCBQYXNzUmVmUHRyPEdhbWVwYWQ+
IGdhbWVwYWQpCit7CisgICAgQVNTRVJUKGdhbWVwYWQpOworCisgICAgaWYgKGluZGV4ID49IG1f
Z2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBtX2dhbWVwYWRzLmdyb3coaW5kZXggKyAxKTsKKyAg
ICBtX2dhbWVwYWRzW2luZGV4XSA9IGdhbWVwYWQ7Cit9CisKK3ZvaWQgR2FtZXBhZEV2ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5k
ZXggPCBtX2dhbWVwYWRzLnNpemUoKSk7CisKKyAgICBpZiAoaW5kZXggPT0gbV9nYW1lcGFkcy5z
aXplKCkgLSAxKSB7CisgICAgICAgIGF1dG8gc2hyaW5rU2l6ZSA9IG1fZ2FtZXBhZHMuc2l6ZSgp
IC0gMTsgLy8gbGFzdCB3aWxsIGJlIGRlbGV0ZWQKKyAgICAgICAgd2hpbGUgKHNocmlua1NpemUg
PiAwICYmICFtX2dhbWVwYWRzW3Nocmlua1NpemUgLSAxXSkKKyAgICAgICAgICAgIC0tc2hyaW5r
U2l6ZTsKKyAgICAgICAgbV9nYW1lcGFkcy5zaHJpbmsoc2hyaW5rU2l6ZSk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fZ2FtZXBhZHNbaW5kZXhdID0gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWZlMTZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRFdmVudENvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkRXZlbnRDb250
cm9sbGVyX2gKKyNkZWZpbmUgR2FtZXBhZEV2ZW50Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUo
R0FNRVBBRCkKKworI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEV2ZW50Owor
Y2xhc3MgR2FtZXBhZERhdGE7CitjbGFzcyBHYW1lcGFkOworY2xhc3MgR2FtZXBhZHNNYW5hZ2Vy
OworCitjbGFzcyBHYW1lcGFkRXZlbnRDb250cm9sbGVyIDogcHVibGljIFN1cHBsZW1lbnQ8RE9N
V2luZG93PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2FtZXBhZEV2ZW50Q29udHJvbGxl
cik7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFkRXZlbnRDb250
cm9sbGVyPiBjcmVhdGUoRE9NV2luZG93Kik7CisKKyAgICBleHBsaWNpdCBHYW1lcGFkRXZlbnRD
b250cm9sbGVyKERPTVdpbmRvdyopOworICAgIH5HYW1lcGFkRXZlbnRDb250cm9sbGVyKCk7CisK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKKyAgICBzdGF0aWMgR2Ft
ZXBhZEV2ZW50Q29udHJvbGxlciogZnJvbShET01XaW5kb3cqKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0FjdGl2ZUF0KERPTVdpbmRvdyopOworCisgICAgdm9pZCBhZGRHYW1lcGFkRXZlbnRMaXN0ZW5l
cigpOworICAgIHZvaWQgcmVtb3ZlR2FtZXBhZEV2ZW50TGlzdGVuZXIoKTsKKyAgICB2b2lkIHJl
bW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygpOworCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdGVuZXJzQ291bnRlcjsgfQorCisgICAgdm9pZCBnYW1lcGFkQ29u
bmVjdGVkKHVuc2lnbmVkLCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPik7CisgICAgdm9pZCBnYW1l
cGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkLCBQYXNzUmVmUHRyPEdhbWVwYWREYXRhPik7CisgICAg
dm9pZCBnYW1lcGFkQ2hhbmdlZCh1bnNpZ25lZCwgUGFzc1JlZlB0cjxHYW1lcGFkRGF0YT4pOwor
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+JiAgZ2FtZXBhZExpc3QoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZGlzcGF0Y2hHYW1lcGFkRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgY2hlY2tNYW5hZ2VyQXNzaWduZWQoKTsKKyAgICB2b2lkIGFkZEdhbWVw
YWQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8R2FtZXBhZD4pOworICAgIHZvaWQgcmVtb3Zl
R2FtZXBhZCh1bnNpZ25lZCBpbmRleCk7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9saXN0
ZW5lcnNDb3VudGVyOworICAgIFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4gPiBtX2dhbWVwYWRzOwor
ICAgIFJlZlB0cjxHYW1lcGFkc01hbmFnZXI+IG1fZ2FtZXBhZHNNYW5hZ2VyOworICAgIERPTVdp
bmRvdyogbV93aW5kb3c7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoR0FNRVBBRCkKKworI2VuZGlmIC8vIEdhbWVwYWRFdmVudENvbnRyb2xsZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZHNNYW5hZ2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI1ZDZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdlci5j
cHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2FtZXBhZHNNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkK
KworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdh
bWVwYWRFdmVudENvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQcm92aWRl
ckZhY3RvcnlGdW5jdGlvbiBHYW1lcGFkc01hbmFnZXI6OnNfcHJvdmlkZXJGYWN0b3J5ID0gcGxh
dGZvcm1HYW1lcGFkc1Byb3ZpZGVyRmFjdG9yeSgpOworUmVmUHRyPEdhbWVwYWRzTWFuYWdlcj4g
R2FtZXBhZHNNYW5hZ2VyOjpzX21hbmFnZXI7CisKK0dhbWVwYWRzTWFuYWdlcjo6R2FtZXBhZHNN
YW5hZ2VyKCkKK3sKKyAgICAvKgorICAgICAqIEdhbWVwYWRzTWFuYWdlciBjb25zdHJ1Y3Rpb24g
bXVzdCBiZSBjb21wbGV0ZWQgd2hlbiBpdCBjcmVhdGVzIHByb3ZpZGVyIGFzIGl0IGNhbgorICAg
ICAqIGluZm9ybSBNYW5nZXIgYWJvdXQgY3VycmVudGx5IGNvbm5lY3RlZCBnYW1lcGFkcy4KKyAg
ICAgKi8KKyAgICBtX2dhbWVwYWRzUHJvdmlkZXIgPSBzX3Byb3ZpZGVyRmFjdG9yeSh0aGlzKTsK
K30KKworUGFzc1JlZlB0cjxHYW1lcGFkc01hbmFnZXI+IEdhbWVwYWRzTWFuYWdlcjo6bWFuYWdl
cigpCit7CisgICAgaWYgKCFzX21hbmFnZXIpCisgICAgICAgIHNfbWFuYWdlciA9IGFkb3B0UmVm
KCpuZXcgR2FtZXBhZHNNYW5hZ2VyKCkpOworICAgIHJldHVybiBzX21hbmFnZXI7Cit9CisKK3Zv
aWQgR2FtZXBhZHNNYW5hZ2VyOjpyZWxlYXNlTWFuYWdlcigpCit7CisgICAgc19tYW5hZ2VyID0g
bnVsbHB0cjsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OnNldFByb3ZpZGVyRmFjdG9yeShj
b25zdCBQcm92aWRlckZhY3RvcnlGdW5jdGlvbiYgZmFjdG9yeSkKK3sKKyAgICBzX3Byb3ZpZGVy
RmFjdG9yeSA9IGZhY3Rvcnk7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjpyZWdpc3RlclRv
TWFuYWdlcihHYW1lcGFkRXZlbnRDb250cm9sbGVyKiBjb250cm9sbGVyKQoreworICAgIG1fY29u
dHJvbGxlcnMuYWRkKGNvbnRyb2xsZXIpOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6ZGVy
ZWdpc3RlckZyb21NYW5hZ2VyKEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7
CisgICAgbV9jb250cm9sbGVycy5yZW1vdmUoY29udHJvbGxlcik7CisgICAgaWYgKCFtX2NvbnRy
b2xsZXJzLnNpemUoKSkKKyAgICAgICAgcmVsZWFzZU1hbmFnZXIoKTsKK30KKwordW5zaWduZWQg
R2FtZXBhZHNNYW5hZ2VyOjpnYW1lcGFkQ29ubmVjdGVkKGNvbnN0IEdhbWVwYWREZXZpY2UmIGRl
dmljZSkKK3sKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IG1fZ2FtZXBhZHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2dhbWVwYWRzW2ldKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChpID09IG1fZ2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBt
X2dhbWVwYWRzLmFwcGVuZChHYW1lcGFkRGF0YTo6Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9nYW1lcGFkc1tpXSA9IEdhbWVwYWREYXRhOjpjcmVhdGUoKTsKKworICAgIC8vIEZJWE1F
OiBnYW1lcGFkIGlkIHNob3VsZCBiZSBjb25zaXN0ZW50IGVnLiBkcml2ZXItdmVyc2lvbi1uYW1l
CisgICAgLy8gU2V0IGlkIG9uIGNvbm5lY3Rpb24gYXMgaXQgc2hvdWxkIG5vdCBjaGFuZ2UgbGF0
ZXIuCisgICAgbV9nYW1lcGFkc1tpXS0+aWQoZGV2aWNlLmlkKCkpOworICAgIC8vIEZJWE1FOiBj
dXJyZW50bHkgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlY3QgZ2FtZXBhZCBsYXlvdXQKKyAgICBt
X2dhbWVwYWRzW2ldLT5tYXBwaW5nKCJyYXciKTsKKyAgICBtX2dhbWVwYWRzW2ldLT5pbmRleChp
KTsKKyAgICB1cGRhdGVHYW1lcGFkKGksIGRldmljZSk7CisgICAgZm9yIChhdXRvJiBjb250cm9s
bGVyIDogbV9jb250cm9sbGVycykKKyAgICAgICAgY29udHJvbGxlci0+Z2FtZXBhZENvbm5lY3Rl
ZChpLCBtX2dhbWVwYWRzW2ldKTsKKworICAgIHJldHVybiBpOworfQorCit2b2lkIEdhbWVwYWRz
TWFuYWdlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpZCwgY29uc3QgR2FtZXBhZERl
dmljZSYgLypkZXZpY2UqLykKK3sKKyAgICBBU1NFUlQoaWQgPCBtX2dhbWVwYWRzLnNpemUoKSAm
JiBtX2dhbWVwYWRzW2lkXSk7CisKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBtX2NvbnRy
b2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5nYW1lcGFkRGlzY29ubmVjdGVkKGlkLCBtX2dh
bWVwYWRzW2lkXSk7CisKKyAgICBpZiAoaWQgPT0gbV9nYW1lcGFkcy5zaXplKCkgLSAxKSB7Cisg
ICAgICAgIGF1dG8gc2hyaW5rU2l6ZSA9IG1fZ2FtZXBhZHMuc2l6ZSgpIC0gMTsgLy8gbGFzdCB3
aWxsIGJlIGRlbGV0ZWQKKyAgICAgICAgd2hpbGUgKHNocmlua1NpemUgPiAwICYmICFtX2dhbWVw
YWRzW3Nocmlua1NpemUgLSAxXSkKKyAgICAgICAgICAgIC0tc2hyaW5rU2l6ZTsKKyAgICAgICAg
bV9nYW1lcGFkcy5zaHJpbmsoc2hyaW5rU2l6ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZ2Ft
ZXBhZHNbaWRdID0gbnVsbHB0cjsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OmdhbWVwYWRD
aGFuZ2VkKHVuc2lnbmVkIGlkLCBjb25zdCBHYW1lcGFkRGV2aWNlJiBkZXZpY2UpCit7CisgICAg
QVNTRVJUKGlkIDwgbV9nYW1lcGFkcy5zaXplKCkgJiYgbV9nYW1lcGFkc1tpZF0pOworCisgICAg
dXBkYXRlR2FtZXBhZChpZCwgZGV2aWNlKTsKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2xsZXIgOiBt
X2NvbnRyb2xsZXJzKQorICAgICAgICBjb250cm9sbGVyLT5nYW1lcGFkQ2hhbmdlZChpZCwgbV9n
YW1lcGFkc1tpZF0pOworfQorCit2b2lkIEdhbWVwYWRzTWFuYWdlcjo6Z2FtZXBhZEF4aXNDaGFu
Z2VkKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQoreworICAgIEFT
U0VSVChpZCA8IG1fZ2FtZXBhZHMuc2l6ZSgpICYmIG1fZ2FtZXBhZHNbaWRdKTsKKworICAgIG1f
Z2FtZXBhZHNbaWRdLT5zZXRBeGlzKGluZGV4LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvJiBjb250
cm9sbGVyIDogbV9jb250cm9sbGVycykKKyAgICAgICAgY29udHJvbGxlci0+Z2FtZXBhZENoYW5n
ZWQoaWQsIG1fZ2FtZXBhZHNbaWRdKTsKK30KKwordm9pZCBHYW1lcGFkc01hbmFnZXI6OmdhbWVw
YWRCdXR0b25DaGFuZ2VkKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBh
ZEJ1dHRvbjo6QnV0dG9uU3RydWN0JiBkYXRhKQoreworICAgIEFTU0VSVChpZCA8IG1fZ2FtZXBh
ZHMuc2l6ZSgpICYmIG1fZ2FtZXBhZHNbaWRdKTsKKworICAgIG1fZ2FtZXBhZHNbaWRdLT5zZXRC
dXR0b24oaW5kZXgsIGRhdGEpOworICAgIGZvciAoYXV0byYgY29udHJvbGxlciA6IG1fY29udHJv
bGxlcnMpCisgICAgICAgIGNvbnRyb2xsZXItPmdhbWVwYWRDaGFuZ2VkKGlkLCBtX2dhbWVwYWRz
W2lkXSk7Cit9CisKK3ZvaWQgR2FtZXBhZHNNYW5hZ2VyOjp1cGRhdGVHYW1lcGFkKHVuc2lnbmVk
IGluZGV4LCBjb25zdCBHYW1lcGFkRGV2aWNlJiBkZXZpY2UpCit7CisgICAgQVNTRVJUKGluZGV4
IDwgbV9nYW1lcGFkcy5zaXplKCkgJiYgbV9nYW1lcGFkc1tpbmRleF0pOworCisgICAgYXV0byYg
Z2FtZXBhZCA9IG1fZ2FtZXBhZHNbaW5kZXhdOworICAgIGF1dG8gYXhlc0NvdW50ID0gZGV2aWNl
LmF4ZXNDb3VudCgpOworICAgIGF1dG8gYXhlcyA9IGRldmljZS5heGVzQXJyYXkoKTsKKyAgICBh
dXRvIGJ1dHRvbnNDb3VudCA9IGRldmljZS5idXR0b25zQ291bnQoKTsKKyAgICBhdXRvIGJ1dHRv
bnMgPSBkZXZpY2UuYnV0dG9uc0FycmF5KCk7CisKKyAgICBpZiAoZ2FtZXBhZC0+YXhlcygpLnNp
emUoKSAhPSBheGVzQ291bnQpCisgICAgICAgIGdhbWVwYWQtPnJlc2l6ZUF4ZXMoYXhlc0NvdW50
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXhlc0NvdW50OyArK2kpCisgICAgICAg
IGdhbWVwYWQtPnNldEF4aXMoaW5kZXgsIGF4ZXNbaV0pOworCisgICAgaWYgKGdhbWVwYWQtPmJ1
dHRvbnMoKS5zaXplKCkgIT0gYnV0dG9uc0NvdW50KQorICAgICAgICBnYW1lcGFkLT5yZXNpemVC
dXR0b25zKGJ1dHRvbnNDb3VudCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRv
bnNDb3VudDsgKytpKQorICAgICAgICBnYW1lcGFkLT5zZXRCdXR0b24oaW5kZXgsIGJ1dHRvbnNb
aV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FN
RVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
c01hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkc01hbmFn
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk3OTAyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRzTWFuYWdl
ci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdhbWVwYWRzTWFuYWdl
cl9oCisjZGVmaW5lIEdhbWVwYWRzTWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkdhbWVwYWRzUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZERhdGE7CitjbGFzcyBHYW1lcGFkRXZlbnRD
b250cm9sbGVyOworY2xhc3MgR2FtZXBhZHNQcm92aWRlcjsKKworY2xhc3MgR2FtZXBhZHNNYW5h
Z2VyIDogcHVibGljIFJlZkNvdW50ZWQ8R2FtZXBhZHNNYW5hZ2VyPiB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR2FtZXBhZHNNYW5hZ2VyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHYW1lcGFkc01hbmFnZXI+IG1hbmFnZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQcm92
aWRlckZhY3RvcnkoY29uc3QgUHJvdmlkZXJGYWN0b3J5RnVuY3Rpb24mKTsKKyAgICBHYW1lcGFk
c1Byb3ZpZGVyKiBwcm92aWRlcigpIHsgcmV0dXJuIG1fZ2FtZXBhZHNQcm92aWRlci5nZXQoKTsg
fQorCisgICAgdm9pZCByZWdpc3RlclRvTWFuYWdlcihHYW1lcGFkRXZlbnRDb250cm9sbGVyKik7
CisgICAgdm9pZCBkZXJlZ2lzdGVyRnJvbU1hbmFnZXIoR2FtZXBhZEV2ZW50Q29udHJvbGxlciop
OworCisgICAgLyoKKyAgICAgKiBSZWdpc3RlcnMgZ2FtZXBhZCBhbmQgcmV0dXJucyBpZCBmb3Ig
ZnVydGhlciB1cGRhdGVzLgorICAgICAqLworICAgIHVuc2lnbmVkIGdhbWVwYWRDb25uZWN0ZWQo
Y29uc3QgR2FtZXBhZERldmljZSYpOworICAgIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNp
Z25lZCBpZCwgY29uc3QgR2FtZXBhZERldmljZSYpOworICAgIHZvaWQgZ2FtZXBhZENoYW5nZWQo
dW5zaWduZWQgaWQsIGNvbnN0IEdhbWVwYWREZXZpY2UmKTsKKyAgICB2b2lkIGdhbWVwYWRBeGlz
Q2hhbmdlZCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7CisgICAg
dm9pZCBnYW1lcGFkQnV0dG9uQ2hhbmdlZCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgaW5kZXgsIGNv
bnN0IEdhbWVwYWRCdXR0b246OkJ1dHRvblN0cnVjdCYpOworCitwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkIHJlbGVhc2VNYW5hZ2VyKCk7CisKKyAgICBzdGF0aWMgUHJvdmlkZXJGYWN0b3J5RnVu
Y3Rpb24gc19wcm92aWRlckZhY3Rvcnk7CisgICAgc3RhdGljIFJlZlB0cjxHYW1lcGFkc01hbmFn
ZXI+IHNfbWFuYWdlcjsKKworICAgIEdhbWVwYWRzTWFuYWdlcigpOworICAgIHZvaWQgdXBkYXRl
R2FtZXBhZCh1bnNpZ25lZCBpbmRleCwgY29uc3QgR2FtZXBhZERldmljZSYpOworCisgICAgVmVj
dG9yPFJlZlB0cjxHYW1lcGFkRGF0YT4+IG1fZ2FtZXBhZHM7CisgICAgT3duUHRyPEdhbWVwYWRz
UHJvdmlkZXI+IG1fZ2FtZXBhZHNQcm92aWRlcjsKKyAgICBIYXNoU2V0PEdhbWVwYWRFdmVudENv
bnRyb2xsZXIqPiBtX2NvbnRyb2xsZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCisKKyNlbmRpZiAvLyBHYW1lcGFkc01hbmFnZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVw
YWQuY3BwCmluZGV4IDE0MmY3N2IuLmRjMDViMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0MCArMjksMjMg
QEAKIAogI2lmIEVOQUJMRShHQU1FUEFEKQogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdhbWVwYWQuaCIKKyNpbmNsdWRlICJHYW1lcGFkRXZl
bnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCi0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTmF2aWdhdG9yR2FtZXBh
ZDo6TmF2aWdhdG9yR2FtZXBhZCgpCitjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mIE5h
dmlnYXRvckdhbWVwYWQ6OndlYmtpdEdldEdhbWVwYWRzKE5hdmlnYXRvciogbmF2aWdhdG9yKQog
eworICAgIHJldHVybiBOYXZpZ2F0b3JHYW1lcGFkOjpnZXRHYW1lcGFkcyhuYXZpZ2F0b3IpOwog
fQogCi1jb25zdCBjaGFyKiBOYXZpZ2F0b3JHYW1lcGFkOjpzdXBwbGVtZW50TmFtZSgpCitjb25z
dCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mIE5hdmlnYXRvckdhbWVwYWQ6OmdldEdhbWVwYWRz
KE5hdmlnYXRvciogbmF2aWdhdG9yKQogewotICAgIHJldHVybiAiTmF2aWdhdG9yR2FtZXBhZCI7
Ci19Ci0KLU5hdmlnYXRvckdhbWVwYWQqIE5hdmlnYXRvckdhbWVwYWQ6OmZyb20oTmF2aWdhdG9y
KiBuYXZpZ2F0b3IpCi17Ci0gICAgTmF2aWdhdG9yR2FtZXBhZCogc3VwcGxlbWVudCA9IHN0YXRp
Y19jYXN0PE5hdmlnYXRvckdhbWVwYWQqPihTdXBwbGVtZW50PE5hdmlnYXRvcj46OmZyb20obmF2
aWdhdG9yLCBzdXBwbGVtZW50TmFtZSgpKSk7Ci0gICAgaWYgKCFzdXBwbGVtZW50KSB7Ci0gICAg
ICAgIGF1dG8gbmV3U3VwcGxlbWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8TmF2aWdhdG9yR2FtZXBh
ZD4oKTsKLSAgICAgICAgc3VwcGxlbWVudCA9IG5ld1N1cHBsZW1lbnQuZ2V0KCk7Ci0gICAgICAg
IHByb3ZpZGVUbyhuYXZpZ2F0b3IsIHN1cHBsZW1lbnROYW1lKCksIHN0ZDo6bW92ZShuZXdTdXBw
bGVtZW50KSk7Ci0gICAgfQotICAgIHJldHVybiBzdXBwbGVtZW50OwotfQotCi1jb25zdCBWZWN0
b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBhZHMoTmF2aWdh
dG9yKiBuYXZpZ2F0b3IpCi17Ci0gICAgcmV0dXJuIE5hdmlnYXRvckdhbWVwYWQ6OmZyb20obmF2
aWdhdG9yKS0+Z2FtZXBhZHMoKTsKLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPj4m
IE5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRzKCkKLXsKLSAgICByZXR1cm4gbV9nYW1lcGFkczsK
KyAgICBBU1NFUlQobmF2aWdhdG9yKTsKKyAgICByZXR1cm4gR2FtZXBhZEV2ZW50Q29udHJvbGxl
cjo6ZnJvbShuYXZpZ2F0b3ItPmZyYW1lKCktPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKS0+Z2Ft
ZXBhZExpc3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKaW5kZXggNTU3OTBhNC4u
NzZiMmJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmln
YXRvckdhbWVwYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdh
dG9yR2FtZXBhZC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ft
c3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjksNyBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAK
LSNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiwy
MCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR2FtZXBhZDsKIGNsYXNzIE5h
dmlnYXRvcjsKIAotY2xhc3MgTmF2aWdhdG9yR2FtZXBhZCA6IHB1YmxpYyBTdXBwbGVtZW50PE5h
dmlnYXRvcj4geworY2xhc3MgTmF2aWdhdG9yR2FtZXBhZCB7CiBwdWJsaWM6Ci0gICAgTmF2aWdh
dG9yR2FtZXBhZCgpOwotCi0gICAgc3RhdGljIE5hdmlnYXRvckdhbWVwYWQqIGZyb20oTmF2aWdh
dG9yKik7Ci0KLSAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPj4mIGdldEdh
bWVwYWRzKE5hdmlnYXRvciopOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPj4mIGdh
bWVwYWRzKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiBtX2dhbWVwYWRzOworICAg
IHN0YXRpYyBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+ID4mICB3ZWJraXRHZXRHYW1lcGFk
cyhOYXZpZ2F0b3IqKTsKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPiA+
JiAgZ2V0R2FtZXBhZHMoTmF2aWdhdG9yKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2Ft
ZXBhZC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5pZGwKaW5kZXggYmFjMmE3My4uOTk2Zjk2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbApAQCAtMjYsNiArMjYsNyBAQAog
WwogICAgIENvbmRpdGlvbmFsPUdBTUVQQUQsCiBdIHBhcnRpYWwgaW50ZXJmYWNlIE5hdmlnYXRv
ciB7CisgICAgR2FtZXBhZFtdIHdlYmtpdEdldEdhbWVwYWRzKCk7CiAgICAgR2FtZXBhZFtdIGdl
dEdhbWVwYWRzKCk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDY3NWIxZDEu
LmY5MTNjYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC03OSw3ICs3OSw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2VmbC9FcnJvcnNFZmwuY3Bw
CiAgICAgcGxhdGZvcm0vZWZsL0V2ZW50TG9vcEVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvRmls
ZVN5c3RlbUVmbC5jcHAKLSAgICBwbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwCisgICAgcGxh
dGZvcm0vZWZsL0dhbWVwYWRzUHJvdmlkZXJFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL0xhbmd1
YWdlRWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdzRWZsLmNwcAogICAg
IHBsYXRmb3JtL2VmbC9Mb2dnaW5nRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCA5ZDRmMDFjLi4zZTFhY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtOTgsNyAr
OTgsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAogCi0gICAgcGxhdGZvcm0vZ3Rr
L0dhbWVwYWRzR3RrLmNwcAorICAgIHBsYXRmb3JtL2d0ay9HYW1lcGFkc1Byb3ZpZGVyR3RrLmNw
cAogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8u
Y3BwCiAKQEAgLTU1NCw4ICs1NTQsNyBAQCBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NT
dGFibGVfSURMX0ZJTEVTCiBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NVbnN0YWJsZV9J
RExfRklMRVMKICAgICBNb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaWRsCiAKLSAgICBN
b2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9HYW1lcGFkLmlkbAotICAgIE1vZHVsZXMvZ2FtZXBh
ZC9kZXByZWNhdGVkL0dhbWVwYWRMaXN0LmlkbAorICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
LmlkbAogCiAgICAgTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudE5hbWVzLmgKaW5kZXggM2I2ODU2Ny4uNWUyNzk5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRO
YW1lcy5oCkBAIC02OSw2ICs2OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhm
b2N1cykgXAogICAgIG1hY3JvKGZvY3VzaW4pIFwKICAgICBtYWNybyhmb2N1c291dCkgXAorICAg
IG1hY3JvKGdhbWVwYWRjb25uZWN0ZWQpIFwKKyAgICBtYWNybyhnYW1lcGFkZGlzY29ubmVjdGVk
KSBcCiAgICAgbWFjcm8oZ2VzdHVyZXRhcCkgXAogICAgIG1hY3JvKGdlc3R1cmV0YXBkb3duKSBc
CiAgICAgbWFjcm8oZ2VzdHVyZXNjcm9sbHN0YXJ0KSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmlu
CmluZGV4IDVmM2UyMTguLmJhM2I2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluCkBAIC0x
MCw2ICsxMCw3IEBAIENvbXBvc2l0aW9uRXZlbnQKIEN1c3RvbUV2ZW50CiBFcnJvckV2ZW50CiBG
b2N1c0V2ZW50CitHYW1lcGFkRXZlbnQgY29uZGl0aW9uYWw9R0FNRVBBRAogSGFzaENoYW5nZUV2
ZW50CiBLZXlib2FyZEV2ZW50CiBLZXlib2FyZEV2ZW50cyBpbnRlcmZhY2VOYW1lPUtleWJvYXJk
RXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBhZTc5MWMxLi5hZTQwYTJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjUsNiArNjYsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiR2FtZXBhZEV2ZW50Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKQEAgLTE3MDgsNiArMTcxMCwxMyBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVu
dAogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCisgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkY29ubmVjdGVkRXZlbnQgfHwgZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5nYW1lcGFkZGlzY29ubmVjdGVkRXZlbnQpIHsKKyAgICAgICAgaWYg
KEdhbWVwYWRFdmVudENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBHYW1lcGFkRXZlbnRDb250cm9s
bGVyOjpmcm9tKHRoaXMpKQorICAgICAgICAgICAgY29udHJvbGxlci0+YWRkR2FtZXBhZEV2ZW50
TGlzdGVuZXIoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
Nzk4LDYgKzE4MDcsMTMgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKICAgICB9CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShHQU1FUEFEKQorICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuZ2FtZXBhZGNvbm5lY3RlZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
Z2FtZXBhZGRpc2Nvbm5lY3RlZEV2ZW50KSB7CisgICAgICAgIGlmIChHYW1lcGFkRXZlbnRDb250
cm9sbGVyKiBjb250cm9sbGVyID0gR2FtZXBhZEV2ZW50Q29udHJvbGxlcjo6ZnJvbSh0aGlzKSkK
KyAgICAgICAgICAgIGNvbnRyb2xsZXItPnJlbW92ZUdhbWVwYWRFdmVudExpc3RlbmVyKCk7Cisg
ICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg5OCw2ICsxOTE0LDEx
IEBAIHZvaWQgRE9NV2luZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiAgICAgICAgIGNv
bnRyb2xsZXItPnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKHRoaXMpOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoR0FNRVBBRCkKKyAgICBpZiAoR2FtZXBhZEV2ZW50Q29udHJvbGxlciogY29u
dHJvbGxlciA9IEdhbWVwYWRFdmVudENvbnRyb2xsZXI6OmZyb20odGhpcykpCisgICAgICAgIGNv
bnRyb2xsZXItPnJlbW92ZUFsbEdhbWVwYWRFdmVudExpc3RlbmVycygpOworI2VuZGlmCisKICAg
ICByZW1vdmVBbGxVbmxvYWRFdmVudExpc3RlbmVycyh0aGlzKTsKICAgICByZW1vdmVBbGxCZWZv
cmVVbmxvYWRFdmVudExpc3RlbmVycyh0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmlu
ZGV4IDMyMjczZmEuLjM5Mjc0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAy
MDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3Nyw2ICszNzgsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRldmljZW9yaWVu
dGF0aW9uKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCisgICAgICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZ2FtZXBhZGNvbm5lY3RlZCk7CisgICAgICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZ2FtZXBhZGRpc2Nvbm5lY3RlZCk7CisjZW5kaWYK
KwogI2lmIEVOQUJMRShQUk9YSU1JVFlfRVZFTlRTKQogICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKHdlYmtpdGRldmljZXByb3hpbWl0eSk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbAppbmRleCAxYWZmMTBhLi4xYmEyZTE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCkBAIC0yODksNiArMjg5LDkgQEAKICAgICBbQ29uZGl0aW9uYWw9REVWSUNF
X09SSUVOVEFUSU9OXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmRldmljZW1vdGlvbjsKICAg
ICBbQ29uZGl0aW9uYWw9REVWSUNFX09SSUVOVEFUSU9OXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmRldmljZW9yaWVudGF0aW9uOwogCisgICAgW0NvbmRpdGlvbmFsPUdBTUVQQURdIGF0dHJp
YnV0ZSBFdmVudExpc3RlbmVyIG9uZ2FtZXBhZGNvbm5lY3RlZDsKKyAgICBbQ29uZGl0aW9uYWw9
R0FNRVBBRF0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25nYW1lcGFkZGlzY29ubmVjdGVkOwor
CiAgICAgW0NvbmRpdGlvbmFsPVBST1hJTUlUWV9FVkVOVFNdIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9ud2Via2l0ZGV2aWNlcHJveGltaXR5OwogCiAgICAgW0NvbmRpdGlvbmFsPVdJTExfUkVW
RUFMX0VER0VfRVZFTlRTXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdHdpbGxyZXZl
YWxib3R0b207CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkc1By
b3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkc1Byb3ZpZGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2YjE2YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRzUHJvdmlkZXIuaApAQCAtMCwwICsx
LDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkc1Byb3ZpZGVyX2gKKyNkZWZpbmUg
R2FtZXBhZHNQcm92aWRlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIkdh
bWVwYWRCdXR0b24uaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWRzTWFuYWdl
cjsKKworY2xhc3MgR2FtZXBhZERldmljZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+R2FtZXBh
ZERldmljZSgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgaWQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBheGVzQ291bnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBkb3VibGUqIGF4ZXNBcnJheSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGJ1dHRvbnNDb3VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEdh
bWVwYWRCdXR0b246OkJ1dHRvblN0cnVjdCogYnV0dG9uc0FycmF5KCkgY29uc3QgPSAwOworfTsK
KworY2xhc3MgR2FtZXBhZHNQcm92aWRlciB7CitwdWJsaWM6CisgICAgR2FtZXBhZHNQcm92aWRl
cihHYW1lcGFkc01hbmFnZXIqIG1hbmFnZXIpCisgICAgICAgIDogbV9nYW1lcGFkc01hbmFnZXIo
bWFuYWdlcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2FtZXBhZHNQcm92aWRlcigp
ID0gZGVmYXVsdDsKKworICAgIEdhbWVwYWRzTWFuYWdlciogZ2FtZXBhZE1hbmFnZXIoKSB7IHJl
dHVybiBtX2dhbWVwYWRzTWFuYWdlcjsgfQorCitwcml2YXRlOgorICAgIEdhbWVwYWRzTWFuYWdl
ciogbV9nYW1lcGFkc01hbmFnZXI7Cit9OworCit0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248UGFzc093
blB0cjxHYW1lcGFkc1Byb3ZpZGVyPihHYW1lcGFkc01hbmFnZXIqKT4gUHJvdmlkZXJGYWN0b3J5
RnVuY3Rpb247CisKK1Bhc3NPd25QdHI8R2FtZXBhZHNQcm92aWRlcj4gY3JlYXRlR2FtZXBhZHNQ
cm92aWRlcihHYW1lcGFkc01hbmFnZXIqKTsKKworaW5saW5lIFByb3ZpZGVyRmFjdG9yeUZ1bmN0
aW9uIHBsYXRmb3JtR2FtZXBhZHNQcm92aWRlckZhY3RvcnkoKQoreworICAgIHJldHVybiBQcm92
aWRlckZhY3RvcnlGdW5jdGlvbihjcmVhdGVHYW1lcGFkc1Byb3ZpZGVyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCisKKyNlbmRpZiAv
LyBHYW1lcGFkc1Byb3ZpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9HYW1lcGFkc0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBh
ZHNQcm92aWRlckVmbC5jcHAKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcApyZW5hbWUgdG8gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzUHJvdmlkZXJFZmwuY3BwCmluZGV4IDc2OGRjMDAu
LmU2OWE1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9HYW1lcGFk
c0VmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzUHJvdmlk
ZXJFZmwuY3BwCkBAIC0yNCwxMyArMjQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKKyNpbmNsdWRlICJHYW1lcGFkc1Byb3ZpZGVyLmgiCiAK
ICNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQogCiAjaW5jbHVkZSAiR2FtZXBhZERldmlj
ZUxpbnV4LmgiCi0jaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxFY29yZS5oPgogI2luY2x1
ZGUgPEVlemUuaD4KICNpbmNsdWRlIDxFaW5hLmg+CkBAIC0yMTEsMjggKzIxMSwzMiBAQCB2b2lk
IEdhbWVwYWRzRWZsOjp1bnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYgc3lzcGF0aCkKICAg
ICBtX3Nsb3RzW2luZGV4XS5jbGVhcigpOwogfQogCi12b2lkIEdhbWVwYWRzRWZsOjp1cGRhdGVH
YW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKK3ZvaWQgR2FtZXBhZHNFZmw6OnVwZGF0ZUdh
bWVwYWRMaXN0KEdhbWVwYWRMaXN0KiAvKmludG8qLykKIHsKLSAgICBBU1NFUlQobV9zbG90cy5z
aXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAgY29uc3Qgc2l6ZV90IHNsb3RDb3VudCA9
IG1fc2xvdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2xvdENvdW50OyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90c1tpXS0+Y29ubmVj
dGVkKCkpIHsKLSAgICAgICAgICAgIEdhbWVwYWREZXZpY2VFZmwqIGdhbWVwYWREZXZpY2UgPSBt
X3Nsb3RzW2ldLmdldCgpOwotICAgICAgICAgICAgUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBp
bnRvLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQotICAgICAgICAgICAgICAg
IGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKLQotICAgICAgICAgICAgZ2FtZXBhZC0+aW5k
ZXgoaSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKLSAg
ICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNlLT50aW1lc3RhbXAoKSk7
Ci0gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBn
YW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMo
Z2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRh
KCkpOwotCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgaW50by0+c2V0KGksIDApOwotICAgIH0KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworCisvLyAqKioqKiBHYW1lcGFkIGludGVyZmFjZSBjaGFuZ2VkLiAqKioqKgorLy8KKy8v
ICAgIEFTU0VSVChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7CisvLworLy8gICAg
Y29uc3Qgc2l6ZV90IHNsb3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOworLy8gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzbG90Q291bnQ7ICsraSkgeworLy8gICAgICAgIGlmIChtX3Nsb3RzW2ld
LmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7CisvLyAgICAgICAgICAgIEdhbWVw
YWREZXZpY2VFZmwqIGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOworLy8gICAgICAg
ICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7CisvLyAgICAgICAg
ICAgIGlmICghZ2FtZXBhZCkKKy8vICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpj
cmVhdGUoKTsKKy8vCisvLyAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOworLy8gICAgICAg
ICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKKy8vICAgICAgICAgICAgZ2Ft
ZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKKy8vICAgICAgICAg
ICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmlj
ZS0+YXhlc0RhdGEoKSk7CisvLyAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERl
dmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOworLy8K
Ky8vICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOworLy8gICAgICAgIH0gZWxzZQor
Ly8gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7CisvLyAgICB9CiB9CiAKIHZvaWQgc2FtcGxl
R2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCkBAIC0yNDEsNiArMjQ1LDEyIEBAIHZvaWQgc2Ft
cGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCiAgICAgZ2FtZXBhZHNFZmwuZ2V0KCkudXBk
YXRlR2FtZXBhZExpc3QoaW50byk7CiB9CiAKK1Bhc3NPd25QdHI8R2FtZXBhZHNQcm92aWRlcj4g
Y3JlYXRlR2FtZXBhZHNQcm92aWRlcihHYW1lcGFkc01hbmFnZXIqIC8qbWFuYWdlciovKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzUHJvdmlkZXJHdGsuY3BwCnNpbWls
YXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
YW1lcGFkc0d0ay5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1l
cGFkc1Byb3ZpZGVyR3RrLmNwcAppbmRleCBhYjYzZGViLi5lNGExNjJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc1Byb3ZpZGVyR3RrLmNwcApAQCAtMjQsMTkgKzI0
LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVwYWRzLmgi
CiAKICNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQogCiAjaW5jbHVkZSAiR2FtZXBhZERl
dmljZUxpbnV4LmgiCiAjaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKKyNpbmNsdWRlICJHYW1lcGFk
c1Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRzdHJlYW0uaD4KICNpbmNsdWRlIDxndWRl
di9ndWRldi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0xNjQsMjcgKzE2NSwzMSBAQCB2b2lk
IEdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQogICAgIG1f
c2xvdHNbaW5kZXhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgR2FtZXBhZHNHdGs6OnVwZGF0ZUdhbWVw
YWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRvKQordm9pZCBHYW1lcGFkc0d0azo6dXBkYXRlR2FtZXBh
ZExpc3QoR2FtZXBhZExpc3QqIC8qaW50byovKQogewotICAgIEFTU0VSVChtX3Nsb3RzLnNpemUo
KSA9PSBpbnRvLT5sZW5ndGgoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9z
bG90cy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zbG90c1tpXS5nZXQoKSAmJiBtX3Ns
b3RzW2ldLT5jb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgR2FtZXBhZERldmljZUd0ayogZ2Ft
ZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBSZWZQdHI8R2FtZXBh
ZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWdhbWVwYWQpCi0g
ICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOwotCi0gICAgICAgICAg
ICBnYW1lcGFkLT5pbmRleChpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZp
Y2UtPmlkKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2Ut
PnRpbWVzdGFtcCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2FtZXBhZERldmljZS0+
YXhlc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOwotICAgICAgICAgICAgZ2Ft
ZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmlj
ZS0+YnV0dG9uc0RhdGEoKSk7Ci0KLSAgICAgICAgICAgIGludG8tPnNldChpLCBnYW1lcGFkKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7Ci0gICAgfQorICAg
IG5vdEltcGxlbWVudGVkKCk7CisKKy8vICoqKioqIEdhbWVwYWQgaW50ZXJmYWNlIGNoYW5nZWQu
ICoqKioqCisvLworLy8gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgp
KTsKKy8vCisvLyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG90cy5zaXplKCk7IGkr
KykgeworLy8gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5l
Y3RlZCgpKSB7CisvLyAgICAgICAgICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2Ug
PSBtX3Nsb3RzW2ldLmdldCgpOworLy8gICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBh
ZCA9IGludG8tPml0ZW0oaSk7CisvLyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKKy8vICAgICAg
ICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKKy8vCisvLyAgICAgICAgICAg
IGdhbWVwYWQtPmluZGV4KGkpOworLy8gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2
aWNlLT5pZCgpKTsKKy8vICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZp
Y2UtPnRpbWVzdGFtcCgpKTsKKy8vICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2
aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisvLyAgICAgICAg
ICAgIGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVw
YWREZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOworLy8KKy8vICAgICAgICAgICAgaW50by0+c2V0KGks
IGdhbWVwYWQpOworLy8gICAgICAgIH0gZWxzZQorLy8gICAgICAgICAgICBpbnRvLT5zZXQoaSwg
MCk7CisvLyAgICB9CiB9CiAKIHZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJhY2soR1Vk
ZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRldkRldmljZSogZGV2aWNlLCBncG9pbnRlciBk
YXRhKQpAQCAtMjIwLDYgKzIyNSwxMiBAQCB2b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0
KiBpbnRvKQogICAgIGdhbWVwYWRzR3RrLnVwZGF0ZUdhbWVwYWRMaXN0KGludG8pOwogfQogCitQ
YXNzT3duUHRyPEdhbWVwYWRzUHJvdmlkZXI+IGNyZWF0ZUdhbWVwYWRzUHJvdmlkZXIoR2FtZXBh
ZHNNYW5hZ2VyKiAvKm1hbmFnZXIqLykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKaW5kZXggYzUxNzU0ZC4uYjZjYjUxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxp
bnV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNl
TGludXguY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCiAKLSNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVE
KQorI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpIHx8IEVOQUJMRShHQU1FUEFEKQogCiAj
aW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KQEAgLTk2LDQgKzk2LDQg
QEAgZmxvYXQgR2FtZXBhZERldmljZUxpbnV4Ojpub3JtYWxpemVCdXR0b25WYWx1ZShzaG9ydCB2
YWx1ZSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQ
QURfREVQUkVDQVRFRCkKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKSB8fCBF
TkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4
L0dhbWVwYWREZXZpY2VMaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2Ft
ZXBhZERldmljZUxpbnV4LmgKaW5kZXggOTljMDliMi4uMTNmZjQyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmgKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgR2FtZXBhZERldmljZUxpbnV4X2gKICNkZWZpbmUgR2FtZXBhZERl
dmljZUxpbnV4X2gKIAotI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisjaWYgRU5BQkxF
KEdBTUVQQURfREVQUkVDQVRFRCkgfHwgRU5BQkxFKEdBTUVQQUQpCiAKICNpbmNsdWRlIDxsaW51
eC9qb3lzdGljay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTY4LDYgKzY4LDYgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEdB
TUVQQURfREVQUkVDQVRFRCkKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKSB8
fCBFTkFCTEUoR0FNRVBBRCkKIAogI2VuZGlmIC8vIEdhbWVwYWREZXZpY2VMaW51eF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400046</attachid>
            <date>2020-05-22 08:04:56 -0700</date>
            <delta_ts>2020-06-09 20:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133850-20200522110455.patch</filename>
            <type>text/plain</type>
            <size>14087</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxOTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWRkYzk4MTYxYTNkOTYw
ZDM5Yjg5NDQ2Zjc0ZjFiMTM4MjI2NDdiZC4uZmUwN2I2ODNiYzY1MTc0MDA1MjgzZjNmMzk0NjA2
MWU3ZjFmZDg3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIwLTA1LTIyICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9yZz4KKworICAgICAgICBbR1RLXSBJbXBsZW1l
bnQgYnV0dG9uLXByZXNzLWV2ZW50LCBidXR0b24tcmVsZWFzZS1ldmVudCwgYW5kIGFic29sdXRl
LWF4aXMtZXZlbnQgb2YgR0FNRVBBRCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgZm9sbG93LXVwIGNoYW5nZSBhZnRlciByMjYx
OTY1LCBpbXBsZW1lbnRpbmcgdGhlIHJlc3Qgb2YgbWlzc2luZyBHQU1FUEFEIEFQSQorICAgICAg
ICBmb3IgdGhlIGd0ayBwb3J0LiBCdXR0b25zIGFuZCBhbmFsb2cgc3RpY2tzIG9mIHN0YW5kYXJk
IGdhbWVwYWRzIHdvcmsgd2l0aCB0aGlzIGNoYW5nZS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
c2luY2UgZXhpc3RpbmcgdGVzdHMgY2FuIGNvdmVyIHRoaXMgY2hhbmdlLgorCisgICAgICAgICog
cGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvU3RhbmRhcmRHYW1lcGFkQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpvbkFic29s
dXRlQXhpc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvU3RhbmRhcmRHYW1lcGFkQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6Om9uQnV0dG9uUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpvbkJ1dHRvblJlbGVhc2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRlR2Ft
ZXBhZDo6TWFuZXR0ZUdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWFuZXR0ZUdhbWVwYWQ6
Omxpc3RlblRvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVHYW1lcGFkOjpidXR0b25QcmVz
c2VkT3JSZWxlYXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRlR2FtZXBhZDo6YWJzb2x1
dGVBeGlzQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0
dGVHYW1lcGFkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVH
YW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFuZXR0ZUdhbWVwYWRQcm92
aWRlcjo6TWFuZXR0ZUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRl
R2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkSGFkSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWFu
ZXR0ZUdhbWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRlci5oOgor
CiAyMDIwLTA1LTIwICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAK
ICAgICAgICAgSGlkZSBwYXNzd29yZCBlY2hvIHdoZW4gc2NyZWVuIGlzIGJlaW5nIGNhcHR1cmVk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBjZWUyMGNjYmRjODg4ZTYxYmU1MGZjYzQ0NGVhZjc4MGNlYzEyNTZkLi5i
ODVmNWY5ZGVlNzc0OTI2MzM1NjhkYWI0ZjMwNzhmMjQ4Zjk5ZTQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIwLTA1LTIyICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9y
Zz4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgYnV0dG9uLXByZXNzLWV2ZW50LCBidXR0b24t
cmVsZWFzZS1ldmVudCwgYW5kIGFic29sdXRlLWF4aXMtZXZlbnQgb2YgR0FNRVBBRCBBUEkuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9HYW1lcGFkL2d0ay9VSUdhbWVwYWRQcm92aWRlckd0ay5jcHA6IEJ1aWxkIGZpeC4gV2ViS2l0
V2ViVmlld0Jhc2UgaXMgdXNlZCwKKyAgICAgICAgbm90IFdlYktpdFdlYlZpZXdQcml2YXRlLgor
ICAgICAgICAoV2ViS2l0OjpnZXRXZWJQYWdlUHJveHkpOgorCiAyMDIwLTA1LTIwICBNZWdhbiBH
YXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAgSGlkZSBwYXNzd29y
ZCBlY2hvIHdoZW4gc2NyZWVuIGlzIGJlaW5nIGNhcHR1cmVkLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHAK
aW5kZXggMTkxNzk2M2ZmOTQyODI1ZjYwZDMzNGZiYTNmMDAxNmQ4YzJmMDIwMy4uYmZjNTRhMWFm
NDBjMTc1MTlmMjkzMjk4ZTFiOTEwYjQ4M2ZjMTRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuY3BwCkBA
IC0yOCwxMiArMjgsMTU2IEBACiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAorI2luY2x1ZGUgIk1h
bmV0dGVHYW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC1ldmVudC1jb2Rl
cy5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIE1hbmV0dGVHYW1lcGFkOjpT
dGFuZGFyZEdhbWVwYWRBeGlzIHRvU3RhbmRhcmRHYW1lcGFkQXhpcyh1aW50MTZfdCBheGlzKQor
eworICAgIHN3aXRjaCAoYXhpcykgeworICAgIGNhc2UgQUJTX1g6CisgICAgICAgIHJldHVybiBN
YW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhpczo6TGVmdFN0aWNrWDsKKyAgICBjYXNl
IEFCU19ZOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEF4
aXM6OkxlZnRTdGlja1k7CisgICAgY2FzZSBBQlNfUlg6CisgICAgICAgIHJldHVybiBNYW5ldHRl
R2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhpczo6UmlnaHRTdGlja1g7CisgICAgY2FzZSBBQlNf
Ulk6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhpczo6
UmlnaHRTdGlja1k7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhpczo6
VW5rbm93bjsKK30KKworc3RhdGljIHZvaWQgb25BYnNvbHV0ZUF4aXNFdmVudChNYW5ldHRlRGV2
aWNlKiBkZXZpY2UsIE1hbmV0dGVFdmVudCogZXZlbnQsIE1hbmV0dGVHYW1lcGFkKiBnYW1lcGFk
KQoreworICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdWludDE2X3Qg
YXhpczsKKyAgICBkb3VibGUgdmFsdWU7CisgICAgaWYgKCFtYW5ldHRlX2V2ZW50X2dldF9hYnNv
bHV0ZShldmVudCwgJmF4aXMsICZ2YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdhbWVw
YWQtPmFic29sdXRlQXhpc0NoYW5nZWQoZGV2aWNlLCB0b1N0YW5kYXJkR2FtZXBhZEF4aXMoYXhp
cyksIHZhbHVlKTsKK30KKworc3RhdGljIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRC
dXR0b24gdG9TdGFuZGFyZEdhbWVwYWRCdXR0b24odWludDE2X3QgbWFuZXR0ZUJ1dHRvbikKK3sK
KyAgICBzd2l0Y2ggKG1hbmV0dGVCdXR0b24pIHsKKyAgICBjYXNlIEJUTl9BOgorICAgICAgICBy
ZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6QTsKKyAgICBjYXNl
IEJUTl9COgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1
dHRvbjo6QjsKKyAgICBjYXNlIEJUTl9YOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6
OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6WDsKKyAgICBjYXNlIEJUTl9ZOgorICAgICAgICByZXR1
cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6WTsKKyAgICBjYXNlIEJU
Tl9UTDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0
b246OkxlZnRTaG91bGRlcjsKKyAgICBjYXNlIEJUTl9UUjoKKyAgICAgICAgcmV0dXJuIE1hbmV0
dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OlJpZ2h0U2hvdWxkZXI7CisgICAgY2Fz
ZSBCVE5fVEwyOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBh
ZEJ1dHRvbjo6TGVmdFRyaWdnZXI7CisgICAgY2FzZSBCVE5fVFIyOgorICAgICAgICByZXR1cm4g
TWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6UmlnaHRUcmlnZ2VyOworICAg
IGNhc2UgQlROX1NFTEVDVDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFy
ZEdhbWVwYWRCdXR0b246OlNlbGVjdDsKKyAgICBjYXNlIEJUTl9TVEFSVDoKKyAgICAgICAgcmV0
dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OlN0YXJ0OworICAgIGNh
c2UgQlROX1RIVU1CTDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdh
bWVwYWRCdXR0b246OkxlZnRTdGljazsKKyAgICBjYXNlIEJUTl9USFVNQlI6CisgICAgICAgIHJl
dHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpSaWdodFN0aWNrOwor
ICAgIGNhc2UgQlROX0RQQURfVVA6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3Rh
bmRhcmRHYW1lcGFkQnV0dG9uOjpEUGFkVXA7CisgICAgY2FzZSBCVE5fRFBBRF9ET1dOOgorICAg
ICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6RFBhZERv
d247CisgICAgY2FzZSBCVE5fRFBBRF9MRUZUOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVw
YWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6RFBhZExlZnQ7CisgICAgY2FzZSBCVE5fRFBBRF9S
SUdIVDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0
b246OkRQYWRSaWdodDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0
b246OlVua25vd247Cit9CisKK3N0YXRpYyB2b2lkIG9uQnV0dG9uUHJlc3NFdmVudChNYW5ldHRl
RGV2aWNlKiBkZXZpY2UsIE1hbmV0dGVFdmVudCogZXZlbnQsIE1hbmV0dGVHYW1lcGFkKiBnYW1l
cGFkKQoreworICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdWludDE2
X3QgYnV0dG9uOworICAgIGlmICghbWFuZXR0ZV9ldmVudF9nZXRfYnV0dG9uKGV2ZW50LCAmYnV0
dG9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2FtZXBhZC0+YnV0dG9uUHJlc3NlZE9yUmVs
ZWFzZWQoZGV2aWNlLCB0b1N0YW5kYXJkR2FtZXBhZEJ1dHRvbihidXR0b24pLCB0cnVlKTsKK30K
Kworc3RhdGljIHZvaWQgb25CdXR0b25SZWxlYXNlRXZlbnQoTWFuZXR0ZURldmljZSogZGV2aWNl
LCBNYW5ldHRlRXZlbnQqIGV2ZW50LCBNYW5ldHRlR2FtZXBhZCogZ2FtZXBhZCkKK3sKKyAgICBp
ZiAoIWdhbWVwYWQpCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQxNl90IGJ1dHRvbjsKKyAg
ICBpZiAoIW1hbmV0dGVfZXZlbnRfZ2V0X2J1dHRvbihldmVudCwgJmJ1dHRvbikpCisgICAgICAg
IHJldHVybjsKKworICAgIGdhbWVwYWQtPmJ1dHRvblByZXNzZWRPclJlbGVhc2VkKGRldmljZSwg
dG9TdGFuZGFyZEdhbWVwYWRCdXR0b24oYnV0dG9uKSwgZmFsc2UpOworfQorCiBNYW5ldHRlR2Ft
ZXBhZDo6TWFuZXR0ZUdhbWVwYWQoTWFuZXR0ZURldmljZSogZGV2aWNlLCB1bnNpZ25lZCBpbmRl
eCkKICAgICA6IFBsYXRmb3JtR2FtZXBhZChpbmRleCkKICAgICAsIG1fZGV2aWNlKGRldmljZSkK
IHsKKyAgICBBU1NFUlQoaW5kZXggPCA0KTsKKworICAgIG1fY29ubmVjdFRpbWUgPSBtX2xhc3RV
cGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisKKyAgICBtX2lkID0gU3RyaW5nKG1h
bmV0dGVfZGV2aWNlX2dldF9uYW1lKG1fZGV2aWNlLmdldCgpKSk7CisgICAgbV9tYXBwaW5nID0g
U3RyaW5nKCJzdGFuZGFyZCIpOworCisgICAgbV9heGlzVmFsdWVzLnJlc2l6ZShzdGF0aWNfY2Fz
dDxzaXplX3Q+KFN0YW5kYXJkR2FtZXBhZEF4aXM6OkNvdW50KSk7CisgICAgbV9heGlzVmFsdWVz
LmZpbGwoMCk7CisgICAgbV9idXR0b25WYWx1ZXMucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4o
U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpDb3VudCkpOworICAgIG1fYnV0dG9uVmFsdWVzLmZpbGwo
MCk7CisKKyAgICBsaXN0ZW5UbyhkZXZpY2UpOworfQorCit2b2lkIE1hbmV0dGVHYW1lcGFkOjps
aXN0ZW5UbyhNYW5ldHRlRGV2aWNlKiBkZXZpY2UpCit7CisgICAgTE9HKEdhbWVwYWQsICIlczog
Y29ubmVjdGVkIiwgbWFuZXR0ZV9kZXZpY2VfZ2V0X25hbWUoZGV2aWNlKSk7CisKKyAgICBnX3Np
Z25hbF9jb25uZWN0KEdfT0JKRUNUKGRldmljZSksICJidXR0b24tcHJlc3MtZXZlbnQiLCAoR0Nh
bGxiYWNrKW9uQnV0dG9uUHJlc3NFdmVudCwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChH
X09CSkVDVChkZXZpY2UpLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCAoR0NhbGxiYWNrKW9uQnV0
dG9uUmVsZWFzZUV2ZW50LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKGRl
dmljZSksICJhYnNvbHV0ZS1heGlzLWV2ZW50IiwgKEdDYWxsYmFjaylvbkFic29sdXRlQXhpc0V2
ZW50LCB0aGlzKTsKK30KKwordm9pZCBNYW5ldHRlR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVs
ZWFzZWQoTWFuZXR0ZURldmljZSogZGV2aWNlLCBTdGFuZGFyZEdhbWVwYWRCdXR0b24gYnV0dG9u
LCBib29sIHByZXNzZWQpCit7CisgICAgaWYgKGJ1dHRvbiA9PSBTdGFuZGFyZEdhbWVwYWRCdXR0
b246OlVua25vd24gfHwgbV9kZXZpY2UuZ2V0KCkgIT0gZGV2aWNlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2xhc3RVcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgbV9i
dXR0b25WYWx1ZXNbc3RhdGljX2Nhc3Q8aW50PihidXR0b24pXSA9IHByZXNzZWQgPyAxLjAgOiAw
LjA7CisKKyAgICBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5nYW1lcGFkSGFk
SW5wdXQoKnRoaXMsIHByZXNzZWQpOworfQorCit2b2lkIE1hbmV0dGVHYW1lcGFkOjphYnNvbHV0
ZUF4aXNDaGFuZ2VkKE1hbmV0dGVEZXZpY2UqIGRldmljZSwgU3RhbmRhcmRHYW1lcGFkQXhpcyBh
eGlzLCBkb3VibGUgdmFsdWUpCit7CisgICAgaWYgKGF4aXMgPT0gU3RhbmRhcmRHYW1lcGFkQXhp
czo6VW5rbm93biB8fCBtX2RldmljZS5nZXQoKSAhPSBkZXZpY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbGFzdFVwZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBtX2F4
aXNWYWx1ZXNbc3RhdGljX2Nhc3Q8aW50PihheGlzKV0gPSB2YWx1ZTsKKworICAgIE1hbmV0dGVH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLmdhbWVwYWRIYWRJbnB1dCgqdGhpcywgZmFsc2Up
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5oCmluZGV4IGQ3MGE4
NTljNmU2ODA0MTIxMjRlYmYyNzViODczY2NhZGUxYjJkMzYuLmMxOTFiMWVkNjViMmVlMDhkN2Fh
YmFhZDIxM2Q3NGI5ZmQ5MmM2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5oCkBAIC0zNywxMSArMzcsNDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNYW5ldHRlR2FtZXBhZCBmaW5hbCA6IHB1
YmxpYyBQbGF0Zm9ybUdhbWVwYWQgewogcHVibGljOgorICAgIC8vIFJlZmVyIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9nYW1lcGFkLyNnYW1lcGFkYnV0dG9uLWludGVyZmFjZQorICAgIGVudW0gY2xh
c3MgU3RhbmRhcmRHYW1lcGFkQXhpcyA6IGludDhfdCB7CisgICAgICAgIFVua25vd24gPSAtMSwK
KyAgICAgICAgTGVmdFN0aWNrWCwKKyAgICAgICAgTGVmdFN0aWNrWSwKKyAgICAgICAgUmlnaHRT
dGlja1gsCisgICAgICAgIFJpZ2h0U3RpY2tZLAorICAgICAgICBDb3VudCwKKyAgICB9OworICAg
IGVudW0gY2xhc3MgU3RhbmRhcmRHYW1lcGFkQnV0dG9uIDogaW50OF90IHsKKyAgICAgICAgVW5r
bm93biA9IC0xLAorICAgICAgICBBLAorICAgICAgICBCLAorICAgICAgICBYLAorICAgICAgICBZ
LAorICAgICAgICBMZWZ0U2hvdWxkZXIsCisgICAgICAgIFJpZ2h0U2hvdWxkZXIsCisgICAgICAg
IExlZnRUcmlnZ2VyLAorICAgICAgICBSaWdodFRyaWdnZXIsCisgICAgICAgIFNlbGVjdCwKKyAg
ICAgICAgU3RhcnQsCisgICAgICAgIExlZnRTdGljaywKKyAgICAgICAgUmlnaHRTdGljaywKKyAg
ICAgICAgRFBhZFVwLAorICAgICAgICBEUGFkRG93biwKKyAgICAgICAgRFBhZExlZnQsCisgICAg
ICAgIERQYWRSaWdodCwKKyAgICAgICAgQ291bnQsCisgICAgfTsKKwogICAgIE1hbmV0dGVHYW1l
cGFkKE1hbmV0dGVEZXZpY2UqLCB1bnNpZ25lZCBpbmRleCk7CiAKICAgICBjb25zdCBWZWN0b3I8
ZG91YmxlPiYgYXhpc1ZhbHVlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVlczsg
fQogICAgIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2J1dHRvblZhbHVlczsgfQogCisgICAgdm9pZCBsaXN0ZW5UbyhNYW5ldHRlRGV2
aWNlKik7CisKKyAgICB2b2lkIGFic29sdXRlQXhpc0NoYW5nZWQoTWFuZXR0ZURldmljZSosIFN0
YW5kYXJkR2FtZXBhZEF4aXMsIGRvdWJsZSB2YWx1ZSk7CisgICAgdm9pZCBidXR0b25QcmVzc2Vk
T3JSZWxlYXNlZChNYW5ldHRlRGV2aWNlKiwgU3RhbmRhcmRHYW1lcGFkQnV0dG9uLCBib29sIHBy
ZXNzZWQpOworCiBwcml2YXRlOgogICAgIEdSZWZQdHI8TWFuZXR0ZURldmljZT4gbV9kZXZpY2U7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9N
YW5ldHRlR2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmNwcAppbmRleCBmMmQ3YWExOTFlNDc0
YjFkYmYzYmZlYWFiZmI0MWJkYWU0NjI5ZTc5Li42ZjYyMjE5ZjI0MWFkMzg3NWJlNjkwYzU0NGM3
YjRiNDExMjE2ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFk
L21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuY3BwCkBAIC0z
OCw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRz
IGNvbm5lY3Rpb25EZWxheUludGVydmFsIHsgNTAwX21zIH07CitzdGF0aWMgY29uc3QgU2Vjb25k
cyBpbnB1dE5vdGlmaWNhdGlvbkRlbGF5IHsgNTBfbXMgfTsKIAogTWFuZXR0ZUdhbWVwYWRQcm92
aWRlciYgTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKIHsKQEAgLTU4LDkgKzU5
LDE1IEBAIHN0YXRpYyB2b2lkIG9uRGV2aWNlRGlzY29ubmVjdGVkKE1hbmV0dGVNb25pdG9yKiwg
TWFuZXR0ZURldmljZSogZGV2aWNlLCBNYW5ldHRlCiBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpN
YW5ldHRlR2FtZXBhZFByb3ZpZGVyKCkKICAgICA6IG1fbW9uaXRvcihtYW5ldHRlX21vbml0b3Jf
bmV3KCkpCiAgICAgLCBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwg
dGhpcywgJk1hbmV0dGVHYW1lcGFkUHJvdmlkZXI6OmNvbm5lY3Rpb25EZWxheVRpbWVyRmlyZWQp
CisgICAgLCBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlz
LCAmTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKQog
ewogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9tb25pdG9yLmdldCgpLCAiZGV2aWNlLWNvbm5lY3Rl
ZCIsIEdfQ0FMTEJBQ0sob25EZXZpY2VDb25uZWN0ZWQpLCB0aGlzKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fbW9uaXRvci5nZXQoKSwgImRldmljZS1kaXNjb25uZWN0ZWQiLCBHX0NBTExCQUNL
KG9uRGV2aWNlRGlzY29ubmVjdGVkKSwgdGhpcyk7CisKKyAgICBNYW5ldHRlRGV2aWNlKiBkZXZp
Y2U7CisgICAgR1VuaXF1ZVB0cjxNYW5ldHRlTW9uaXRvckl0ZXI+IGl0ZXIobWFuZXR0ZV9tb25p
dG9yX2l0ZXJhdGUobV9tb25pdG9yLmdldCgpKSk7CisgICAgd2hpbGUgKG1hbmV0dGVfbW9uaXRv
cl9pdGVyX25leHQoaXRlci5nZXQoKSwgJmRldmljZSkpCisgICAgICAgIGRldmljZUNvbm5lY3Rl
ZChkZXZpY2UpOwogfQogCiB2b2lkIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRv
cmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYgY2xpZW50KQpAQCAtOTIsNiArOTks
MTUgQEAgdm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRz
KEdhbWVwYWRQcm92aWRlckNsaWVudCYgY2xpZW4KICAgICB9CiB9CiAKK3ZvaWQgTWFuZXR0ZUdh
bWVwYWRQcm92aWRlcjo6Z2FtZXBhZEhhZElucHV0KE1hbmV0dGVHYW1lcGFkJiwgYm9vbCBoYWRC
dXR0b25QcmVzc2VzKQoreworICAgIGlmICghbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QoaW5w
dXROb3RpZmljYXRpb25EZWxheSk7CisKKyAgICBpZiAoaGFkQnV0dG9uUHJlc3NlcykKKyAgICAg
ICAgc2V0U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJpbGUoKTsKK30KKwogdm9pZCBNYW5ldHRlR2Ft
ZXBhZFByb3ZpZGVyOjpkZXZpY2VDb25uZWN0ZWQoTWFuZXR0ZURldmljZSogZGV2aWNlKQogewog
ICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdldChkZXZpY2UpKTsKQEAgLTE1Niw2ICsxNzIsMTQg
QEAgdm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlUaW1lckZpcmVk
KCkKICAgICAgICAgY2xpZW50LT5zZXRJbml0aWFsQ29ubmVjdGVkR2FtZXBhZHMobV9nYW1lcGFk
VmVjdG9yKTsKIH0KIAordm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNh
dGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hQbGF0Zm9ybUdhbWVwYWRJbnB1dEFjdGl2
aXR5KCk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxNYW5ldHRlR2FtZXBhZD4gTWFuZXR0ZUdhbWVw
YWRQcm92aWRlcjo6cmVtb3ZlR2FtZXBhZEZvckRldmljZShNYW5ldHRlRGV2aWNlKiBkZXZpY2Up
CiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hbmV0dGVHYW1lcGFkPiByZXN1bHQgPSBtX2dhbWVw
YWRNYXAudGFrZShkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmgKaW5kZXgg
YzczNjNhM2I3ZTI1ODI2ZThiYzJkM2RjZGVkZjAwMjlmNzkzMmY1ZS4uZDU4YTBmYWM1ZThhZjJk
YmNjMmRiNTJlMzAyNzA3YzMwMDRhMjYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRl
ci5oCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldmljZUNvbm5lY3RlZChN
YW5ldHRlRGV2aWNlKik7CiAgICAgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoTWFuZXR0ZURldmlj
ZSopOwogCisgICAgdm9pZCBnYW1lcGFkSGFkSW5wdXQoTWFuZXR0ZUdhbWVwYWQmLCBib29sIGhh
ZEJ1dHRvblByZXNzZXMpOworCiBwcml2YXRlOgogICAgIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXIo
KTsKIApAQCAtNTgsNiArNjAsNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgaW5kZXhGb3JO
ZXdseUNvbm5lY3RlZERldmljZSgpOwogICAgIHZvaWQgY29ubmVjdGlvbkRlbGF5VGltZXJGaXJl
ZCgpOworICAgIHZvaWQgaW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKCk7CiAKICAgICBWZWN0
b3I8UGxhdGZvcm1HYW1lcGFkKj4gbV9nYW1lcGFkVmVjdG9yOwogICAgIEhhc2hNYXA8TWFuZXR0
ZURldmljZSosIHN0ZDo6dW5pcXVlX3B0cjxNYW5ldHRlR2FtZXBhZD4+IG1fZ2FtZXBhZE1hcDsK
QEAgLTY1LDYgKzY4LDcgQEAgcHJpdmF0ZToKIAogICAgIEdVbmlxdWVQdHI8TWFuZXR0ZU1vbml0
b3I+IG1fbW9uaXRvcjsKICAgICBSdW5Mb29wOjpUaW1lcjxNYW5ldHRlR2FtZXBhZFByb3ZpZGVy
PiBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyOworICAgIFJ1bkxvb3A6OlRpbWVyPE1hbmV0dGVHYW1l
cGFkUHJvdmlkZXI+IG1faW5wdXROb3RpZmljYXRpb25UaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQv
Z3RrL1VJR2FtZXBhZFByb3ZpZGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dh
bWVwYWQvZ3RrL1VJR2FtZXBhZFByb3ZpZGVyR3RrLmNwcAppbmRleCA3ODc3NzQ3ZjBhOGIwZmJl
NDliNzk4M2VmYmUwNjcwYmE5ZGFkMTE1Li5lODc2NzEyZmRlYWRkMDM4NmNmZDBhMWI1MWFiOWFh
MWViZTY0MDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL2d0
ay9VSUdhbWVwYWRQcm92aWRlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
R2FtZXBhZC9ndGsvVUlHYW1lcGFkUHJvdmlkZXJHdGsuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0
YXRpYyBXZWJQYWdlUHJveHkqIGdldFdlYlBhZ2VQcm94eShHdGtXaWRnZXQqIHdpZGdldCkKICAg
ICBpZiAoIXdpZGdldCB8fCAhR1RLX0lTX0NPTlRBSU5FUih3aWRnZXQpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1ZJRVcod2lkZ2V0KSkKKyAgICBp
ZiAoV0VCS0lUX0lTX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSkKICAgICAgICAgcmV0dXJuIGd0a193
aWRnZXRfaXNfdmlzaWJsZSh3aWRnZXQpID8gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJ
VF9XRUJfVklFV19CQVNFKHdpZGdldCkpIDogbnVsbHB0cjsKIAogICAgIEdVbmlxdWVQdHI8R0xp
c3Q+IGNoaWxkcmVuKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIod2lk
Z2V0KSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401508</attachid>
            <date>2020-06-09 20:14:16 -0700</date>
            <delta_ts>2020-06-11 01:55:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133850-20200609231415.patch</filename>
            <type>text/plain</type>
            <size>16099</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ4ODk0MTE0MDA1Y2Fi
OGE0YjhlNWUzNTZhYjkzNGRkZWFjNTEwNi4uYjQ1N2FjNmQ4MGFlYzE5NjJiN2E3YzUxZTkzZDJl
ZGZhOGQ1MTE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTA2LTA5ICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9yZz4KKworICAgICAgICBbR1RLXSBJbXBsZW1l
bnQgYnV0dG9uLXByZXNzLWV2ZW50LCBidXR0b24tcmVsZWFzZS1ldmVudCwgYW5kIGFic29sdXRl
LWF4aXMtZXZlbnQgb2YgR0FNRVBBRCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgZm9sbG93LXVwIGNoYW5nZSBhZnRlciByMjYx
OTY1LCBpbXBsZW1lbnRpbmcgdGhlIHJlc3Qgb2YgbWlzc2luZyBHQU1FUEFEIEFQSQorICAgICAg
ICBmb3IgdGhlIGd0ayBwb3J0LiBCdXR0b25zIGFuZCBhbmFsb2cgc3RpY2tzIG9mIHN0YW5kYXJk
IGdhbWVwYWRzIHdvcmsgd2l0aCB0aGlzIGNoYW5nZS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
c2luY2UgZXhpc3RpbmcgdGVzdHMgY2FuIGNvdmVyIHRoaXMgY2hhbmdlLgorCisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuaDogRml4IGEgYnVpbGQgZmFpbHVyZSB0aGF0IG9jY3VycyB3
aGVuIEVOQUJMRV9HQU1FUEFEIGlzIG9uLgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFu
ZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1N0YW5kYXJkR2Ft
ZXBhZEF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6b25BYnNvbHV0ZUF4aXNFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1N0YW5kYXJkR2FtZXBhZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpvbkJ1dHRvblByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6b25CdXR0b25SZWxlYXNl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWFuZXR0ZUdhbWVwYWQ6Ok1hbmV0dGVHYW1lcGFk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVHYW1lcGFkOjp+TWFuZXR0ZUdhbWVwYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWFuZXR0ZUdhbWVwYWQ6OmJ1dHRvblByZXNzZWRPclJlbGVhc2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVHYW1lcGFkOjphYnNvbHV0ZUF4aXNDaGFuZ2Vk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpNYW5ldHRl
R2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVHYW1lcGFkUHJvdmlk
ZXI6On5NYW5ldHRlR2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVH
YW1lcGFkUHJvdmlkZXI6OmdhbWVwYWRIYWRJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpNYW5l
dHRlR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmg6CisK
IDIwMjAtMDYtMDkgIEZyYW5rIFlhbmcgIDxndW93ZWlfeWFuZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViS2l0IENyYXNoZXMgd2hlbiBTVkcgRmlsdGVyIExvZ2dpbmcgaXMgVHVybmVkIE9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDFlMzkxZjQyYzE0YzQwZmYxYmUxZDg3MDM4ODE4MTg2M2QwNWQ0MjguLmRiZjY0
YmM5MTFmMjY3Njg1NDNkYjJiMzAxNmY4MDk1OTBiMmE5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMjAtMDYtMDkgIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vva0B3ZWJraXQub3JnPgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBidXR0b24tcHJlc3MtZXZlbnQsIGJ1dHRvbi1yZWxl
YXNlLWV2ZW50LCBhbmQgYWJzb2x1dGUtYXhpcy1ldmVudCBvZiBHQU1FUEFEIEFQSS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzg1MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0dh
bWVwYWQvZ3RrL1VJR2FtZXBhZFByb3ZpZGVyR3RrLmNwcDogQnVpbGQgZml4LiBXZWJLaXRXZWJW
aWV3QmFzZSBpcyB1c2VkLAorICAgICAgICBub3QgV2ViS2l0V2ViVmlld1ByaXZhdGUuCisgICAg
ICAgIChXZWJLaXQ6OmdldFdlYlBhZ2VQcm94eSk6CisKIDIwMjAtMDYtMDkgIEJyaWFuIEJ1cmcg
IDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbGVtZW50IFNlbmQgS2V5cyBj
YW4gaGFuZyB3aGVuIGFuIGF1dG9tYXRpb24gd2luZG93IGJlY29tZXMgdW5mb2N1c2VkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCA3YzM2ODMwZWQ2NWE3YjQyOGQyYTJl
YjhlNGVjNTZjMDFiNzk4MThmLi4wM2FhZGQ0NGZiYTE4M2RlYjYwOWYwOGM3YjZkNDE3MTcwOGIx
Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAj
aW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9t
YW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHAKaW5kZXggMTkxNzk2M2ZmOTQyODI1ZjYwZDMz
NGZiYTNmMDAxNmQ4YzJmMDIwMy4uOTBhOGUzMmJjZmU4YzhjODM4ZGU1ZWE3MTNmMjRhOGRlMDI4
ODlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRl
L01hbmV0dGVHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFk
L21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuY3BwCkBAIC0yOCwxMiArMjgsMTQ4IEBACiAKICNpZiBF
TkFCTEUoR0FNRVBBRCkKIAorI2luY2x1ZGUgIk1hbmV0dGVHYW1lcGFkUHJvdmlkZXIuaCIKKyNp
bmNsdWRlIDxsaW51eC9pbnB1dC1ldmVudC1jb2Rlcy5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1i
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RhdGljIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRBeGlzIHRvU3RhbmRh
cmRHYW1lcGFkQXhpcyh1aW50MTZfdCBheGlzKQoreworICAgIHN3aXRjaCAoYXhpcykgeworICAg
IGNhc2UgQUJTX1g6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1l
cGFkQXhpczo6TGVmdFN0aWNrWDsKKyAgICBjYXNlIEFCU19ZOgorICAgICAgICByZXR1cm4gTWFu
ZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEF4aXM6OkxlZnRTdGlja1k7CisgICAgY2FzZSBB
QlNfUlg6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhp
czo6UmlnaHRTdGlja1g7CisgICAgY2FzZSBBQlNfUlk6CisgICAgICAgIHJldHVybiBNYW5ldHRl
R2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhpczo6UmlnaHRTdGlja1k7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBNYW5ldHRl
R2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhpczo6VW5rbm93bjsKK30KKworc3RhdGljIHZvaWQg
b25BYnNvbHV0ZUF4aXNFdmVudChNYW5ldHRlRGV2aWNlKiBkZXZpY2UsIE1hbmV0dGVFdmVudCog
ZXZlbnQsIE1hbmV0dGVHYW1lcGFkKiBnYW1lcGFkKQoreworICAgIHVpbnQxNl90IGF4aXM7Cisg
ICAgZG91YmxlIHZhbHVlOworICAgIGlmICghbWFuZXR0ZV9ldmVudF9nZXRfYWJzb2x1dGUoZXZl
bnQsICZheGlzLCAmdmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBnYW1lcGFkLT5hYnNv
bHV0ZUF4aXNDaGFuZ2VkKGRldmljZSwgdG9TdGFuZGFyZEdhbWVwYWRBeGlzKGF4aXMpLCB2YWx1
ZSk7Cit9CisKK3N0YXRpYyBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uIHRv
U3RhbmRhcmRHYW1lcGFkQnV0dG9uKHVpbnQxNl90IG1hbmV0dGVCdXR0b24pCit7CisgICAgc3dp
dGNoIChtYW5ldHRlQnV0dG9uKSB7CisgICAgY2FzZSBCVE5fQToKKyAgICAgICAgcmV0dXJuIE1h
bmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OkE7CisgICAgY2FzZSBCVE5fQjoK
KyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OkI7
CisgICAgY2FzZSBCVE5fWDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFy
ZEdhbWVwYWRCdXR0b246Olg7CisgICAgY2FzZSBCVE5fWToKKyAgICAgICAgcmV0dXJuIE1hbmV0
dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246Olk7CisgICAgY2FzZSBCVE5fVEw6Cisg
ICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpMZWZ0
U2hvdWxkZXI7CisgICAgY2FzZSBCVE5fVFI6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBh
ZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpSaWdodFNob3VsZGVyOworICAgIGNhc2UgQlROX1RM
MjoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246
OkxlZnRUcmlnZ2VyOworICAgIGNhc2UgQlROX1RSMjoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVH
YW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OlJpZ2h0VHJpZ2dlcjsKKyAgICBjYXNlIEJU
Tl9TRUxFQ1Q6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFk
QnV0dG9uOjpTZWxlY3Q7CisgICAgY2FzZSBCVE5fU1RBUlQ6CisgICAgICAgIHJldHVybiBNYW5l
dHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpTdGFydDsKKyAgICBjYXNlIEJUTl9U
SFVNQkw6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0
dG9uOjpMZWZ0U3RpY2s7CisgICAgY2FzZSBCVE5fVEhVTUJSOgorICAgICAgICByZXR1cm4gTWFu
ZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6UmlnaHRTdGljazsKKyAgICBjYXNl
IEJUTl9EUEFEX1VQOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2Ft
ZXBhZEJ1dHRvbjo6RFBhZFVwOworICAgIGNhc2UgQlROX0RQQURfRE9XTjoKKyAgICAgICAgcmV0
dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OkRQYWREb3duOworICAg
IGNhc2UgQlROX0RQQURfTEVGVDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFu
ZGFyZEdhbWVwYWRCdXR0b246OkRQYWRMZWZ0OworICAgIGNhc2UgQlROX0RQQURfUklHSFQ6Cisg
ICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpEUGFk
UmlnaHQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpVbmtu
b3duOworfQorCitzdGF0aWMgdm9pZCBvbkJ1dHRvblByZXNzRXZlbnQoTWFuZXR0ZURldmljZSog
ZGV2aWNlLCBNYW5ldHRlRXZlbnQqIGV2ZW50LCBNYW5ldHRlR2FtZXBhZCogZ2FtZXBhZCkKK3sK
KyAgICB1aW50MTZfdCBidXR0b247CisgICAgaWYgKCFtYW5ldHRlX2V2ZW50X2dldF9idXR0b24o
ZXZlbnQsICZidXR0b24pKQorICAgICAgICByZXR1cm47CisKKyAgICBnYW1lcGFkLT5idXR0b25Q
cmVzc2VkT3JSZWxlYXNlZChkZXZpY2UsIHRvU3RhbmRhcmRHYW1lcGFkQnV0dG9uKGJ1dHRvbiks
IHRydWUpOworfQorCitzdGF0aWMgdm9pZCBvbkJ1dHRvblJlbGVhc2VFdmVudChNYW5ldHRlRGV2
aWNlKiBkZXZpY2UsIE1hbmV0dGVFdmVudCogZXZlbnQsIE1hbmV0dGVHYW1lcGFkKiBnYW1lcGFk
KQoreworICAgIHVpbnQxNl90IGJ1dHRvbjsKKyAgICBpZiAoIW1hbmV0dGVfZXZlbnRfZ2V0X2J1
dHRvbihldmVudCwgJmJ1dHRvbikpCisgICAgICAgIHJldHVybjsKKworICAgIGdhbWVwYWQtPmJ1
dHRvblByZXNzZWRPclJlbGVhc2VkKGRldmljZSwgdG9TdGFuZGFyZEdhbWVwYWRCdXR0b24oYnV0
dG9uKSwgZmFsc2UpOworfQorCiBNYW5ldHRlR2FtZXBhZDo6TWFuZXR0ZUdhbWVwYWQoTWFuZXR0
ZURldmljZSogZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICA6IFBsYXRmb3JtR2FtZXBhZChp
bmRleCkKICAgICAsIG1fZGV2aWNlKGRldmljZSkKIHsKKyAgICBBU1NFUlQoaW5kZXggPCA0KTsK
KworICAgIG1fY29ubmVjdFRpbWUgPSBtX2xhc3RVcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisKKyAgICBtX2lkID0gU3RyaW5nOjpmcm9tVVRGOChtYW5ldHRlX2RldmljZV9nZXRf
bmFtZShtX2RldmljZS5nZXQoKSkpOworICAgIG1fbWFwcGluZyA9IFN0cmluZzo6ZnJvbVVURjgo
InN0YW5kYXJkIik7CisKKyAgICBtX2F4aXNWYWx1ZXMuZmlsbCgwLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KFN0YW5kYXJkR2FtZXBhZEF4aXM6OkNvdW50KSk7CisgICAgbV9idXR0b25WYWx1ZXMuZmls
bCgwLCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6Q291bnQpKTsK
KworICAgIG1fYnV0dG9uUHJlc3NFdmVudEhhbmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QoZGV2
aWNlLCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhvbkJ1dHRvblByZXNzRXZlbnQp
LCB0aGlzKTsKKyAgICBtX2J1dHRvblJlbGVhc2VFdmVudEhhbmRsZXJJRCA9IGdfc2lnbmFsX2Nv
bm5lY3QoZGV2aWNlLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKG9uQnV0dG9u
UmVsZWFzZUV2ZW50KSwgdGhpcyk7CisgICAgbV9hYnNvbHV0ZUF4aXNFdmVudEhhbmRsZXJJRCA9
IGdfc2lnbmFsX2Nvbm5lY3QoZGV2aWNlLCAiYWJzb2x1dGUtYXhpcy1ldmVudCIsIEdfQ0FMTEJB
Q0sob25BYnNvbHV0ZUF4aXNFdmVudCksIHRoaXMpOworfQorCitNYW5ldHRlR2FtZXBhZDo6fk1h
bmV0dGVHYW1lcGFkKCkKK3sKKyAgICBpZiAobV9idXR0b25QcmVzc0V2ZW50SGFuZGxlcklEKQor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9kZXZpY2UuZ2V0KCksIG1fYnV0
dG9uUHJlc3NFdmVudEhhbmRsZXJJRCk7CisgICAgaWYgKG1fYnV0dG9uUmVsZWFzZUV2ZW50SGFu
ZGxlcklEKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9kZXZpY2UuZ2V0
KCksIG1fYnV0dG9uUmVsZWFzZUV2ZW50SGFuZGxlcklEKTsKKyAgICBpZiAobV9hYnNvbHV0ZUF4
aXNFdmVudEhhbmRsZXJJRCkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1f
ZGV2aWNlLmdldCgpLCBtX2Fic29sdXRlQXhpc0V2ZW50SGFuZGxlcklEKTsKK30KKwordm9pZCBN
YW5ldHRlR2FtZXBhZDo6YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQoTWFuZXR0ZURldmljZSosIFN0
YW5kYXJkR2FtZXBhZEJ1dHRvbiBidXR0b24sIGJvb2wgcHJlc3NlZCkKK3sKKyAgICBpZiAoYnV0
dG9uID09IFN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6VW5rbm93bikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9sYXN0VXBkYXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIG1fYnV0
dG9uVmFsdWVzW3N0YXRpY19jYXN0PGludD4oYnV0dG9uKV0gPSBwcmVzc2VkID8gMS4wIDogMC4w
OworCisgICAgTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkuZ2FtZXBhZEhhZElu
cHV0KCp0aGlzLCBwcmVzc2VkID8gTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdh
bWVwYWRzVmlzaWJsZTo6WWVzIDogTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6U2hvdWxkTWFrZUdh
bWVwYWRzVmlzaWJsZTo6Tm8pOworfQorCit2b2lkIE1hbmV0dGVHYW1lcGFkOjphYnNvbHV0ZUF4
aXNDaGFuZ2VkKE1hbmV0dGVEZXZpY2UqLCBTdGFuZGFyZEdhbWVwYWRBeGlzIGF4aXMsIGRvdWJs
ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXhpcyA9PSBTdGFuZGFyZEdhbWVwYWRBeGlzOjpVbmtub3du
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RVcGRhdGVUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisgICAgbV9heGlzVmFsdWVzW3N0YXRpY19jYXN0PGludD4oYXhpcyldID0gdmFs
dWU7CisKKyAgICBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5nYW1lcGFkSGFk
SW5wdXQoKnRoaXMsIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zp
c2libGU6Ok5vKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuaApp
bmRleCBkNzBhODU5YzZlNjgwNDEyMTI0ZWJmMjc1Yjg3M2NjYWRlMWIyZDM2Li42YzFjYWFkYjY4
MzQ5NjlmNWEyODg1ZjUwZGFmZWFjYzBiMGJjNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuaApAQCAtMzcs
MTYgKzM3LDU0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWFuZXR0ZUdhbWVwYWQg
ZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1HYW1lcGFkIHsKIHB1YmxpYzoKKyAgICAvLyBSZWZlciBo
dHRwczovL3d3dy53My5vcmcvVFIvZ2FtZXBhZC8jZ2FtZXBhZGJ1dHRvbi1pbnRlcmZhY2UKKyAg
ICBlbnVtIGNsYXNzIFN0YW5kYXJkR2FtZXBhZEF4aXMgOiBpbnQ4X3QgeworICAgICAgICBVbmtu
b3duID0gLTEsCisgICAgICAgIExlZnRTdGlja1gsCisgICAgICAgIExlZnRTdGlja1ksCisgICAg
ICAgIFJpZ2h0U3RpY2tYLAorICAgICAgICBSaWdodFN0aWNrWSwKKyAgICAgICAgQ291bnQsCisg
ICAgfTsKKyAgICBlbnVtIGNsYXNzIFN0YW5kYXJkR2FtZXBhZEJ1dHRvbiA6IGludDhfdCB7Cisg
ICAgICAgIFVua25vd24gPSAtMSwKKyAgICAgICAgQSwKKyAgICAgICAgQiwKKyAgICAgICAgWCwK
KyAgICAgICAgWSwKKyAgICAgICAgTGVmdFNob3VsZGVyLAorICAgICAgICBSaWdodFNob3VsZGVy
LAorICAgICAgICBMZWZ0VHJpZ2dlciwKKyAgICAgICAgUmlnaHRUcmlnZ2VyLAorICAgICAgICBT
ZWxlY3QsCisgICAgICAgIFN0YXJ0LAorICAgICAgICBMZWZ0U3RpY2ssCisgICAgICAgIFJpZ2h0
U3RpY2ssCisgICAgICAgIERQYWRVcCwKKyAgICAgICAgRFBhZERvd24sCisgICAgICAgIERQYWRM
ZWZ0LAorICAgICAgICBEUGFkUmlnaHQsCisgICAgICAgIENvdW50LAorICAgIH07CisKICAgICBN
YW5ldHRlR2FtZXBhZChNYW5ldHRlRGV2aWNlKiwgdW5zaWduZWQgaW5kZXgpOworICAgIHZpcnR1
YWwgfk1hbmV0dGVHYW1lcGFkKCk7CiAKICAgICBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYXhpc1Zh
bHVlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVlczsgfQogICAgIGNvbnN0IFZl
Y3Rvcjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1dHRv
blZhbHVlczsgfQogCisgICAgdm9pZCBhYnNvbHV0ZUF4aXNDaGFuZ2VkKE1hbmV0dGVEZXZpY2Uq
LCBTdGFuZGFyZEdhbWVwYWRBeGlzLCBkb3VibGUgdmFsdWUpOworICAgIHZvaWQgYnV0dG9uUHJl
c3NlZE9yUmVsZWFzZWQoTWFuZXR0ZURldmljZSosIFN0YW5kYXJkR2FtZXBhZEJ1dHRvbiwgYm9v
bCBwcmVzc2VkKTsKKwogcHJpdmF0ZToKICAgICBHUmVmUHRyPE1hbmV0dGVEZXZpY2U+IG1fZGV2
aWNlOwogCiAgICAgVmVjdG9yPGRvdWJsZT4gbV9idXR0b25WYWx1ZXM7CiAgICAgVmVjdG9yPGRv
dWJsZT4gbV9heGlzVmFsdWVzOworCisgICAgdW5zaWduZWQgbG9uZyBtX2J1dHRvblByZXNzRXZl
bnRIYW5kbGVySUQgeyAwIH07CisgICAgdW5zaWduZWQgbG9uZyBtX2J1dHRvblJlbGVhc2VFdmVu
dEhhbmRsZXJJRCB7IDAgfTsKKyAgICB1bnNpZ25lZCBsb25nIG1fYWJzb2x1dGVBeGlzRXZlbnRI
YW5kbGVySUQgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQ
cm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFu
ZXR0ZUdhbWVwYWRQcm92aWRlci5jcHAKaW5kZXggZjJkN2FhMTkxZTQ3NGIxZGJmM2JmZWFhYmZi
NDFiZGFlNDYyOWU3OS4uZWU2ZGYwOGFmM2UwMjEwZjJkOGYxMmVhMjMyNWQxMDAyMjQyMDZkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0
dGVHYW1lcGFkUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmNwcApAQCAtMzgsNiArMzgsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgU2Vjb25kcyBjb25uZWN0aW9uRGVs
YXlJbnRlcnZhbCB7IDUwMF9tcyB9Oworc3RhdGljIGNvbnN0IFNlY29uZHMgaW5wdXROb3RpZmlj
YXRpb25EZWxheSB7IDUwX21zIH07CiAKIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXImIE1hbmV0dGVH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpCiB7CkBAIC01OCw5ICs1OSwyMSBAQCBzdGF0aWMg
dm9pZCBvbkRldmljZURpc2Nvbm5lY3RlZChNYW5ldHRlTW9uaXRvciosIE1hbmV0dGVEZXZpY2Uq
IGRldmljZSwgTWFuZXR0ZQogTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6TWFuZXR0ZUdhbWVwYWRQ
cm92aWRlcigpCiAgICAgOiBtX21vbml0b3IobWFuZXR0ZV9tb25pdG9yX25ldygpKQogICAgICwg
bV9jb25uZWN0aW9uRGVsYXlUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZNYW5ldHRl
R2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlUaW1lckZpcmVkKQorICAgICwgbV9pbnB1
dE5vdGlmaWNhdGlvblRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJk1hbmV0dGVHYW1l
cGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCkKIHsKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fbW9uaXRvci5nZXQoKSwgImRldmljZS1jb25uZWN0ZWQiLCBHX0NBTExCQUNL
KG9uRGV2aWNlQ29ubmVjdGVkKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX21vbml0
b3IuZ2V0KCksICJkZXZpY2UtZGlzY29ubmVjdGVkIiwgR19DQUxMQkFDSyhvbkRldmljZURpc2Nv
bm5lY3RlZCksIHRoaXMpOworCisgICAgTWFuZXR0ZURldmljZSogZGV2aWNlOworICAgIEdVbmlx
dWVQdHI8TWFuZXR0ZU1vbml0b3JJdGVyPiBpdGVyKG1hbmV0dGVfbW9uaXRvcl9pdGVyYXRlKG1f
bW9uaXRvci5nZXQoKSkpOworICAgIHdoaWxlIChtYW5ldHRlX21vbml0b3JfaXRlcl9uZXh0KGl0
ZXIuZ2V0KCksICZkZXZpY2UpKQorICAgICAgICBkZXZpY2VDb25uZWN0ZWQoZGV2aWNlKTsKK30K
KworTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6fk1hbmV0dGVHYW1lcGFkUHJvdmlkZXIoKQorewor
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX21vbml0b3IuZ2V0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG9uRGV2aWNlQ29ubmVjdGVkKSwgdGhpcyk7Cisg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fbW9uaXRvci5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4ob25EZXZpY2VEaXNjb25uZWN0ZWQpLCB0aGlzKTsK
IH0KIAogdm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFk
cyhHYW1lcGFkUHJvdmlkZXJDbGllbnQmIGNsaWVudCkKQEAgLTkyLDYgKzEwNSwxNSBAQCB2b2lk
IE1hbmV0dGVHYW1lcGFkUHJvdmlkZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50JiBjbGllbgogICAgIH0KIH0KIAordm9pZCBNYW5ldHRlR2FtZXBhZFByb3Zp
ZGVyOjpnYW1lcGFkSGFkSW5wdXQoTWFuZXR0ZUdhbWVwYWQmLCBTaG91bGRNYWtlR2FtZXBhZHNW
aXNpYmxlIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCit7CisgICAgaWYgKCFtX2lucHV0Tm90
aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9pbnB1dE5vdGlmaWNhdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChpbnB1dE5vdGlmaWNhdGlvbkRlbGF5KTsKKworICAgIGlmIChzaG91
bGRNYWtlR2FtZXBhZHNWaXNpYmxlID09IFNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6OlllcykK
KyAgICAgICAgc2V0U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJpbGUoKTsKK30KKwogdm9pZCBNYW5l
dHRlR2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VDb25uZWN0ZWQoTWFuZXR0ZURldmljZSogZGV2aWNl
KQogewogICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdldChkZXZpY2UpKTsKQEAgLTE1Niw2ICsx
NzgsMTQgQEAgdm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlUaW1l
ckZpcmVkKCkKICAgICAgICAgY2xpZW50LT5zZXRJbml0aWFsQ29ubmVjdGVkR2FtZXBhZHMobV9n
YW1lcGFkVmVjdG9yKTsKIH0KIAordm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjppbnB1dE5v
dGlmaWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9zaG91bGREaXNwYXRjaENhbGxi
YWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hQbGF0Zm9ybUdhbWVwYWRJbnB1
dEFjdGl2aXR5KCk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxNYW5ldHRlR2FtZXBhZD4gTWFuZXR0
ZUdhbWVwYWRQcm92aWRlcjo6cmVtb3ZlR2FtZXBhZEZvckRldmljZShNYW5ldHRlRGV2aWNlKiBk
ZXZpY2UpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hbmV0dGVHYW1lcGFkPiByZXN1bHQgPSBt
X2dhbWVwYWRNYXAudGFrZShkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmgK
aW5kZXggYzczNjNhM2I3ZTI1ODI2ZThiYzJkM2RjZGVkZjAwMjlmNzkzMmY1ZS4uYmEwMDFjODdm
NThmNjgwOTdhY2NmMGIzYTQ3NDYzNjc1MDBiYTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQ
cm92aWRlci5oCkBAIC00NCw2ICs0NCw4IEBAIGNsYXNzIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXIg
ZmluYWwgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFu
ZXR0ZUdhbWVwYWRQcm92aWRlciYgc2luZ2xldG9uKCk7CiAKKyAgICB2aXJ0dWFsIH5NYW5ldHRl
R2FtZXBhZFByb3ZpZGVyKCk7CisKICAgICB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdh
bWVwYWRQcm92aWRlckNsaWVudCYpIGZpbmFsOwogICAgIHZvaWQgc3RvcE1vbml0b3JpbmdHYW1l
cGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQmKSBmaW5hbDsKICAgICBjb25zdCBWZWN0b3I8UGxh
dGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMoKSBmaW5hbCB7IHJldHVybiBtX2dhbWVw
YWRWZWN0b3I7IH0KQEAgLTUxLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGV2aWNlQ29u
bmVjdGVkKE1hbmV0dGVEZXZpY2UqKTsKICAgICB2b2lkIGRldmljZURpc2Nvbm5lY3RlZChNYW5l
dHRlRGV2aWNlKik7CiAKKyAgICBlbnVtIGNsYXNzIFNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUg
OiBib29sIHsgTm8sIFllcyB9OworICAgIHZvaWQgZ2FtZXBhZEhhZElucHV0KE1hbmV0dGVHYW1l
cGFkJiwgU2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZSk7CisKIHByaXZhdGU6CiAgICAgTWFuZXR0
ZUdhbWVwYWRQcm92aWRlcigpOwogCkBAIC01OCw2ICs2Myw3IEBAIHByaXZhdGU6CiAKICAgICB1
bnNpZ25lZCBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7CiAgICAgdm9pZCBjb25uZWN0
aW9uRGVsYXlUaW1lckZpcmVkKCk7CisgICAgdm9pZCBpbnB1dE5vdGlmaWNhdGlvblRpbWVyRmly
ZWQoKTsKIAogICAgIFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiBtX2dhbWVwYWRWZWN0b3I7CiAg
ICAgSGFzaE1hcDxNYW5ldHRlRGV2aWNlKiwgc3RkOjp1bmlxdWVfcHRyPE1hbmV0dGVHYW1lcGFk
Pj4gbV9nYW1lcGFkTWFwOwpAQCAtNjUsNiArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgR1VuaXF1
ZVB0cjxNYW5ldHRlTW9uaXRvcj4gbV9tb25pdG9yOwogICAgIFJ1bkxvb3A6OlRpbWVyPE1hbmV0
dGVHYW1lcGFkUHJvdmlkZXI+IG1fY29ubmVjdGlvbkRlbGF5VGltZXI7CisgICAgUnVuTG9vcDo6
VGltZXI8TWFuZXR0ZUdhbWVwYWRQcm92aWRlcj4gbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvR2FtZXBhZC9ndGsvVUlHYW1lcGFkUHJvdmlkZXJHdGsuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvR2FtZXBhZC9ndGsvVUlHYW1lcGFkUHJvdmlkZXJHdGsuY3BwCmluZGV4
IDc4Nzc3NDdmMGE4YjBmYmU0OWI3OTgzZWZiZTA2NzBiYTlkYWQxMTUuLmU4NzY3MTJmZGVhZGQw
Mzg2Y2ZkMGExYjUxYWI5YWExZWJlNjQwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0dhbWVwYWQvZ3RrL1VJR2FtZXBhZFByb3ZpZGVyR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL2d0ay9VSUdhbWVwYWRQcm92aWRlckd0ay5jcHAKQEAg
LTQzLDcgKzQzLDcgQEAgc3RhdGljIFdlYlBhZ2VQcm94eSogZ2V0V2ViUGFnZVByb3h5KEd0a1dp
ZGdldCogd2lkZ2V0KQogICAgIGlmICghd2lkZ2V0IHx8ICFHVEtfSVNfQ09OVEFJTkVSKHdpZGdl
dCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKFdFQktJVF9JU19XRUJfVklF
Vyh3aWRnZXQpKQorICAgIGlmIChXRUJLSVRfSVNfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpKQogICAg
ICAgICByZXR1cm4gZ3RrX3dpZGdldF9pc192aXNpYmxlKHdpZGdldCkgPyB3ZWJraXRXZWJWaWV3
QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSkgOiBudWxscHRyOwogCiAg
ICAgR1VuaXF1ZVB0cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4o
R1RLX0NPTlRBSU5FUih3aWRnZXQpKSk7Cg==
</data>
<flag name="review"
          id="416912"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="416923"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401588</attachid>
            <date>2020-06-10 15:04:17 -0700</date>
            <delta_ts>2020-06-11 01:58:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133850-20200610180416.patch</filename>
            <type>text/plain</type>
            <size>17951</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ4ODk0MTE0MDA1Y2Fi
OGE0YjhlNWUzNTZhYjkzNGRkZWFjNTEwNi4uZGQ3MTMyMzY3M2QyNDY2MmVjOGQzMDM3MmEyM2U0
YmU0MmE0NTU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIwLTA2LTEwICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9yZz4KKworICAgICAgICBbR1RLXSBJbXBsZW1l
bnQgYnV0dG9uLXByZXNzLWV2ZW50LCBidXR0b24tcmVsZWFzZS1ldmVudCwgYW5kIGFic29sdXRl
LWF4aXMtZXZlbnQgb2YgR0FNRVBBRCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3Mg
R2FyY2lhIENhbXBvcy4KKworICAgICAgICBUaGlzIGlzIGEgZm9sbG93LXVwIGNoYW5nZSBhZnRl
ciByMjYxOTY1LCBpbXBsZW1lbnRpbmcgdGhlIHJlc3Qgb2YgbWlzc2luZyBHQU1FUEFEIEFQSQor
ICAgICAgICBmb3IgdGhlIGd0ayBwb3J0LiBCdXR0b25zIGFuZCBhbmFsb2cgc3RpY2tzIG9mIHN0
YW5kYXJkIGdhbWVwYWRzIHdvcmsgd2l0aCB0aGlzIGNoYW5nZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgc2luY2UgZXhpc3RpbmcgdGVzdHMgY2FuIGNvdmVyIHRoaXMgY2hhbmdlLgorCisgICAg
ICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hbmV0dGUvTWFuZXR0ZUdhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9TdGFuZGFy
ZEdhbWVwYWRBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6Om9uQWJzb2x1dGVBeGlzRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9TdGFuZGFyZEdhbWVwYWRCdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6b25CdXR0b25QcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om9uQnV0dG9uUmVs
ZWFzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVHYW1lcGFkOjpNYW5ldHRlR2Ft
ZXBhZCk6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRlR2FtZXBhZDo6fk1hbmV0dGVHYW1lcGFk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmV0dGVHYW1lcGFkOjpidXR0b25QcmVzc2VkT3JSZWxl
YXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRlR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hh
bmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFk
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJv
dmlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6TWFu
ZXR0ZUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNYW5ldHRlR2FtZXBhZFBy
b3ZpZGVyOjp+TWFuZXR0ZUdhbWVwYWRQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNYW5l
dHRlR2FtZXBhZFByb3ZpZGVyOjpnYW1lcGFkSGFkSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6
TWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRlci5o
OgorCiAyMDIwLTA2LTA5ICBGcmFuayBZYW5nICA8Z3Vvd2VpX3lhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYktpdCBDcmFzaGVzIHdoZW4gU1ZHIEZpbHRlciBMb2dnaW5nIGlzIFR1cm5lZCBP
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAxZTM5MWY0MmMxNGM0MGZmMWJlMWQ4NzAzODgxODE4NjNkMDVkNDI4Li5h
ZDRlMGFmNjdmYjQ5MmEzMTAzOTI1NTA4ZmVmN2QzYWY2YzRhZGExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTA2LTEwICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9y
Zz4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgYnV0dG9uLXByZXNzLWV2ZW50LCBidXR0b24t
cmVsZWFzZS1ldmVudCwgYW5kIGFic29sdXRlLWF4aXMtZXZlbnQgb2YgR0FNRVBBRCBBUEkuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM4NTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcDogQWRkIHRoZSBPUyhMSU5VWCkg
Z3VhcmQuCisgICAgICAgICogVUlQcm9jZXNzL0dhbWVwYWQvZ3RrL1VJR2FtZXBhZFByb3ZpZGVy
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Z2V0V2ViUGFnZVByb3h5KTogQnVpbGQgZml4LiBX
ZWJLaXRXZWJWaWV3QmFzZSBpcyB1c2VkLCBub3QgV2ViS2l0V2ViVmlld1ByaXZhdGUuCisgICAg
ICAgICogVUlQcm9jZXNzL0dhbWVwYWQvbWFuZXR0ZS9VSUdhbWVwYWRQcm92aWRlck1hbmV0dGUu
Y3BwOiBBZGQgdGhlIE9TKExJTlVYKSBndWFyZC4KKwogMjAyMC0wNi0wOSAgQnJpYW4gQnVyZyAg
PGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIEVsZW1lbnQgU2VuZCBLZXlzIGNh
biBoYW5nIHdoZW4gYW4gYXV0b21hdGlvbiB3aW5kb3cgYmVjb21lcyB1bmZvY3VzZWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCmluZGV4IDdjMzY4MzBlZDY1YTdiNDI4ZDJhMmVi
OGU0ZWM1NmMwMWI3OTgxOGYuLjAzYWFkZDQ0ZmJhMTgzZGViNjA5ZjA4YzdiNmQ0MTcxNzA4YjFj
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNp
bmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21h
bmV0dGUvTWFuZXR0ZUdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmNwcAppbmRleCAxOTE3OTYzZmY5NDI4MjVmNjBkMzM0
ZmJhM2YwMDE2ZDhjMmYwMjAzLi40MzRjMTFkYjA2NmIyMTBlMzAwYmZlMmZhYzk3MjJhN2ZiMTZl
ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0dGUv
TWFuZXR0ZUdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
bWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5jcHAKQEAgLTI2LDE2ICsyNiwxNDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNYW5ldHRlR2FtZXBhZC5oIgogCi0jaWYgRU5BQkxFKEdB
TUVQQUQpCisjaWYgRU5BQkxFKEdBTUVQQUQpICYmIE9TKExJTlVYKQorCisjaW5jbHVkZSAiTWFu
ZXR0ZUdhbWVwYWRQcm92aWRlci5oIgorI2luY2x1ZGUgPGxpbnV4L2lucHV0LWV2ZW50LWNvZGVz
Lmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgTWFuZXR0ZUdhbWVwYWQ6OlN0
YW5kYXJkR2FtZXBhZEF4aXMgdG9TdGFuZGFyZEdhbWVwYWRBeGlzKHVpbnQxNl90IGF4aXMpCit7
CisgICAgc3dpdGNoIChheGlzKSB7CisgICAgY2FzZSBBQlNfWDoKKyAgICAgICAgcmV0dXJuIE1h
bmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRBeGlzOjpMZWZ0U3RpY2tYOworICAgIGNhc2Ug
QUJTX1k6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQXhp
czo6TGVmdFN0aWNrWTsKKyAgICBjYXNlIEFCU19SWDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVH
YW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRBeGlzOjpSaWdodFN0aWNrWDsKKyAgICBjYXNlIEFCU19S
WToKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRBeGlzOjpS
aWdodFN0aWNrWTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRBeGlzOjpV
bmtub3duOworfQorCitzdGF0aWMgdm9pZCBvbkFic29sdXRlQXhpc0V2ZW50KE1hbmV0dGVEZXZp
Y2UqIGRldmljZSwgTWFuZXR0ZUV2ZW50KiBldmVudCwgTWFuZXR0ZUdhbWVwYWQqIGdhbWVwYWQp
Cit7CisgICAgdWludDE2X3QgYXhpczsKKyAgICBkb3VibGUgdmFsdWU7CisgICAgaWYgKCFtYW5l
dHRlX2V2ZW50X2dldF9hYnNvbHV0ZShldmVudCwgJmF4aXMsICZ2YWx1ZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGdhbWVwYWQtPmFic29sdXRlQXhpc0NoYW5nZWQoZGV2aWNlLCB0b1N0YW5k
YXJkR2FtZXBhZEF4aXMoYXhpcyksIHZhbHVlKTsKK30KKworc3RhdGljIE1hbmV0dGVHYW1lcGFk
OjpTdGFuZGFyZEdhbWVwYWRCdXR0b24gdG9TdGFuZGFyZEdhbWVwYWRCdXR0b24odWludDE2X3Qg
bWFuZXR0ZUJ1dHRvbikKK3sKKyAgICBzd2l0Y2ggKG1hbmV0dGVCdXR0b24pIHsKKyAgICBjYXNl
IEJUTl9BOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1
dHRvbjo6QTsKKyAgICBjYXNlIEJUTl9COgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6
OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6QjsKKyAgICBjYXNlIEJUTl9YOgorICAgICAgICByZXR1
cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6WDsKKyAgICBjYXNlIEJU
Tl9ZOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRv
bjo6WTsKKyAgICBjYXNlIEJUTl9UTDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpT
dGFuZGFyZEdhbWVwYWRCdXR0b246OkxlZnRTaG91bGRlcjsKKyAgICBjYXNlIEJUTl9UUjoKKyAg
ICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OlJpZ2h0
U2hvdWxkZXI7CisgICAgY2FzZSBCVE5fVEwyOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVw
YWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6TGVmdFRyaWdnZXI7CisgICAgY2FzZSBCVE5fVFIy
OgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6
UmlnaHRUcmlnZ2VyOworICAgIGNhc2UgQlROX1NFTEVDVDoKKyAgICAgICAgcmV0dXJuIE1hbmV0
dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OlNlbGVjdDsKKyAgICBjYXNlIEJUTl9T
VEFSVDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0
b246OlN0YXJ0OworICAgIGNhc2UgQlROX1RIVU1CTDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVH
YW1lcGFkOjpTdGFuZGFyZEdhbWVwYWRCdXR0b246OkxlZnRTdGljazsKKyAgICBjYXNlIEJUTl9U
SFVNQlI6CisgICAgICAgIHJldHVybiBNYW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0
dG9uOjpSaWdodFN0aWNrOworICAgIGNhc2UgQlROX0RQQURfVVA6CisgICAgICAgIHJldHVybiBN
YW5ldHRlR2FtZXBhZDo6U3RhbmRhcmRHYW1lcGFkQnV0dG9uOjpEUGFkVXA7CisgICAgY2FzZSBC
VE5fRFBBRF9ET1dOOgorICAgICAgICByZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2Ft
ZXBhZEJ1dHRvbjo6RFBhZERvd247CisgICAgY2FzZSBCVE5fRFBBRF9MRUZUOgorICAgICAgICBy
ZXR1cm4gTWFuZXR0ZUdhbWVwYWQ6OlN0YW5kYXJkR2FtZXBhZEJ1dHRvbjo6RFBhZExlZnQ7Cisg
ICAgY2FzZSBCVE5fRFBBRF9SSUdIVDoKKyAgICAgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpT
dGFuZGFyZEdhbWVwYWRCdXR0b246OkRQYWRSaWdodDsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIE1hbmV0dGVHYW1lcGFkOjpT
dGFuZGFyZEdhbWVwYWRCdXR0b246OlVua25vd247Cit9CisKK3N0YXRpYyB2b2lkIG9uQnV0dG9u
UHJlc3NFdmVudChNYW5ldHRlRGV2aWNlKiBkZXZpY2UsIE1hbmV0dGVFdmVudCogZXZlbnQsIE1h
bmV0dGVHYW1lcGFkKiBnYW1lcGFkKQoreworICAgIHVpbnQxNl90IGJ1dHRvbjsKKyAgICBpZiAo
IW1hbmV0dGVfZXZlbnRfZ2V0X2J1dHRvbihldmVudCwgJmJ1dHRvbikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGdhbWVwYWQtPmJ1dHRvblByZXNzZWRPclJlbGVhc2VkKGRldmljZSwgdG9TdGFu
ZGFyZEdhbWVwYWRCdXR0b24oYnV0dG9uKSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9uQnV0
dG9uUmVsZWFzZUV2ZW50KE1hbmV0dGVEZXZpY2UqIGRldmljZSwgTWFuZXR0ZUV2ZW50KiBldmVu
dCwgTWFuZXR0ZUdhbWVwYWQqIGdhbWVwYWQpCit7CisgICAgdWludDE2X3QgYnV0dG9uOworICAg
IGlmICghbWFuZXR0ZV9ldmVudF9nZXRfYnV0dG9uKGV2ZW50LCAmYnV0dG9uKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ2FtZXBhZC0+YnV0dG9uUHJlc3NlZE9yUmVsZWFzZWQoZGV2aWNlLCB0
b1N0YW5kYXJkR2FtZXBhZEJ1dHRvbihidXR0b24pLCBmYWxzZSk7Cit9CisKIE1hbmV0dGVHYW1l
cGFkOjpNYW5ldHRlR2FtZXBhZChNYW5ldHRlRGV2aWNlKiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4
KQogICAgIDogUGxhdGZvcm1HYW1lcGFkKGluZGV4KQogICAgICwgbV9kZXZpY2UoZGV2aWNlKQog
eworICAgIEFTU0VSVChpbmRleCA8IDQpOworCisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVw
ZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIG1faWQgPSBTdHJpbmc6OmZy
b21VVEY4KG1hbmV0dGVfZGV2aWNlX2dldF9uYW1lKG1fZGV2aWNlLmdldCgpKSk7CisgICAgbV9t
YXBwaW5nID0gU3RyaW5nOjpmcm9tVVRGOCgic3RhbmRhcmQiKTsKKworICAgIG1fYXhpc1ZhbHVl
cy5maWxsKDAsIHN0YXRpY19jYXN0PHNpemVfdD4oU3RhbmRhcmRHYW1lcGFkQXhpczo6Q291bnQp
KTsKKyAgICBtX2J1dHRvblZhbHVlcy5maWxsKDAsIHN0YXRpY19jYXN0PHNpemVfdD4oU3RhbmRh
cmRHYW1lcGFkQnV0dG9uOjpDb3VudCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChkZXZpY2Us
ICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKG9uQnV0dG9uUHJlc3NFdmVudCksIHRo
aXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGV2aWNlLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQi
LCBHX0NBTExCQUNLKG9uQnV0dG9uUmVsZWFzZUV2ZW50KSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChkZXZpY2UsICJhYnNvbHV0ZS1heGlzLWV2ZW50IiwgR19DQUxMQkFDSyhvbkFic29s
dXRlQXhpc0V2ZW50KSwgdGhpcyk7Cit9CisKK01hbmV0dGVHYW1lcGFkOjp+TWFuZXR0ZUdhbWVw
YWQoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2Rldmlj
ZS5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgTWFuZXR0ZUdhbWVwYWQ6OmJ1dHRvblByZXNzZWRP
clJlbGVhc2VkKE1hbmV0dGVEZXZpY2UqLCBTdGFuZGFyZEdhbWVwYWRCdXR0b24gYnV0dG9uLCBi
b29sIHByZXNzZWQpCit7CisgICAgaWYgKGJ1dHRvbiA9PSBTdGFuZGFyZEdhbWVwYWRCdXR0b246
OlVua25vd24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdFVwZGF0ZVRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKKyAgICBtX2J1dHRvblZhbHVlc1tzdGF0aWNfY2FzdDxpbnQ+KGJ1
dHRvbildID0gcHJlc3NlZCA/IDEuMCA6IDAuMDsKKworICAgIE1hbmV0dGVHYW1lcGFkUHJvdmlk
ZXI6OnNpbmdsZXRvbigpLmdhbWVwYWRIYWRJbnB1dCgqdGhpcywgcHJlc3NlZCA/IE1hbmV0dGVH
YW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6OlllcyA6IE1hbmV0dGVH
YW1lcGFkUHJvdmlkZXI6OlNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6Ok5vKTsKK30KKwordm9p
ZCBNYW5ldHRlR2FtZXBhZDo6YWJzb2x1dGVBeGlzQ2hhbmdlZChNYW5ldHRlRGV2aWNlKiwgU3Rh
bmRhcmRHYW1lcGFkQXhpcyBheGlzLCBkb3VibGUgdmFsdWUpCit7CisgICAgaWYgKGF4aXMgPT0g
U3RhbmRhcmRHYW1lcGFkQXhpczo6VW5rbm93bikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9s
YXN0VXBkYXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIG1fYXhpc1ZhbHVlc1tz
dGF0aWNfY2FzdDxpbnQ+KGF4aXMpXSA9IHZhbHVlOworCisgICAgTWFuZXR0ZUdhbWVwYWRQcm92
aWRlcjo6c2luZ2xldG9uKCkuZ2FtZXBhZEhhZElucHV0KCp0aGlzLCBNYW5ldHRlR2FtZXBhZFBy
b3ZpZGVyOjpTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlOjpObyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIEVOQUJM
RShHQU1FUEFEKSAmJiBPUyhMSU5VWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmgKaW5kZXggZDcwYTg1OWM2ZTY4
MDQxMjEyNGViZjI3NWI4NzNjY2FkZTFiMmQzNi4uM2ZhNTk3NGI3N2NiYjdkMGJlYWYwM2QwMDhm
MTRjZDkzNDY0YzFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoR0FNRVBBRCkKKyNpZiBFTkFCTEUoR0FNRVBBRCkgJiYg
T1MoTElOVVgpCiAKICNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKIApAQCAtMzcsMTEgKzM3
LDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWFuZXR0ZUdhbWVwYWQgZmluYWwg
OiBwdWJsaWMgUGxhdGZvcm1HYW1lcGFkIHsKIHB1YmxpYzoKKyAgICAvLyBSZWZlciBodHRwczov
L3d3dy53My5vcmcvVFIvZ2FtZXBhZC8jZ2FtZXBhZGJ1dHRvbi1pbnRlcmZhY2UKKyAgICBlbnVt
IGNsYXNzIFN0YW5kYXJkR2FtZXBhZEF4aXMgOiBpbnQ4X3QgeworICAgICAgICBVbmtub3duID0g
LTEsCisgICAgICAgIExlZnRTdGlja1gsCisgICAgICAgIExlZnRTdGlja1ksCisgICAgICAgIFJp
Z2h0U3RpY2tYLAorICAgICAgICBSaWdodFN0aWNrWSwKKyAgICAgICAgQ291bnQsCisgICAgfTsK
KyAgICBlbnVtIGNsYXNzIFN0YW5kYXJkR2FtZXBhZEJ1dHRvbiA6IGludDhfdCB7CisgICAgICAg
IFVua25vd24gPSAtMSwKKyAgICAgICAgQSwKKyAgICAgICAgQiwKKyAgICAgICAgWCwKKyAgICAg
ICAgWSwKKyAgICAgICAgTGVmdFNob3VsZGVyLAorICAgICAgICBSaWdodFNob3VsZGVyLAorICAg
ICAgICBMZWZ0VHJpZ2dlciwKKyAgICAgICAgUmlnaHRUcmlnZ2VyLAorICAgICAgICBTZWxlY3Qs
CisgICAgICAgIFN0YXJ0LAorICAgICAgICBMZWZ0U3RpY2ssCisgICAgICAgIFJpZ2h0U3RpY2ss
CisgICAgICAgIERQYWRVcCwKKyAgICAgICAgRFBhZERvd24sCisgICAgICAgIERQYWRMZWZ0LAor
ICAgICAgICBEUGFkUmlnaHQsCisgICAgICAgIENvdW50LAorICAgIH07CisKICAgICBNYW5ldHRl
R2FtZXBhZChNYW5ldHRlRGV2aWNlKiwgdW5zaWduZWQgaW5kZXgpOworICAgIHZpcnR1YWwgfk1h
bmV0dGVHYW1lcGFkKCk7CiAKICAgICBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYXhpc1ZhbHVlcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVlczsgfQogICAgIGNvbnN0IFZlY3Rvcjxk
b3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1dHRvblZhbHVl
czsgfQogCisgICAgdm9pZCBhYnNvbHV0ZUF4aXNDaGFuZ2VkKE1hbmV0dGVEZXZpY2UqLCBTdGFu
ZGFyZEdhbWVwYWRBeGlzLCBkb3VibGUgdmFsdWUpOworICAgIHZvaWQgYnV0dG9uUHJlc3NlZE9y
UmVsZWFzZWQoTWFuZXR0ZURldmljZSosIFN0YW5kYXJkR2FtZXBhZEJ1dHRvbiwgYm9vbCBwcmVz
c2VkKTsKKwogcHJpdmF0ZToKICAgICBHUmVmUHRyPE1hbmV0dGVEZXZpY2U+IG1fZGV2aWNlOwog
CkBAIC01MSw0ICs4NSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKSAmJiBP
UyhMSU5VWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFu
ZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRlR2FtZXBhZFByb3ZpZGVyLmNwcAppbmRleCBmMmQ3YWEx
OTFlNDc0YjFkYmYzYmZlYWFiZmI0MWJkYWU0NjI5ZTc5Li41ZGI0ZGM0M2Y0MjAxNmRkNjI4MDZj
YmIxNWQ1YjA0ZTlmMTViOTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hbmV0dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuY3Bw
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFuZXR0
ZUdhbWVwYWRQcm92aWRlci5oIgogCi0jaWYgRU5BQkxFKEdBTUVQQUQpCisjaWYgRU5BQkxFKEdB
TUVQQUQpICYmIE9TKExJTlVYKQogCiAjaW5jbHVkZSAiR1VuaXF1ZVB0ck1hbmV0dGUuaCIKICNp
bmNsdWRlICJHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCIKQEAgLTM4LDYgKzM4LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IFNlY29uZHMgY29ubmVjdGlvbkRlbGF5SW50
ZXJ2YWwgeyA1MDBfbXMgfTsKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGlucHV0Tm90aWZpY2F0aW9u
RGVsYXkgeyA1MF9tcyB9OwogCiBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyJiBNYW5ldHRlR2FtZXBh
ZFByb3ZpZGVyOjpzaW5nbGV0b24oKQogewpAQCAtNTgsOSArNTksMjAgQEAgc3RhdGljIHZvaWQg
b25EZXZpY2VEaXNjb25uZWN0ZWQoTWFuZXR0ZU1vbml0b3IqLCBNYW5ldHRlRGV2aWNlKiBkZXZp
Y2UsIE1hbmV0dGUKIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXI6Ok1hbmV0dGVHYW1lcGFkUHJvdmlk
ZXIoKQogICAgIDogbV9tb25pdG9yKG1hbmV0dGVfbW9uaXRvcl9uZXcoKSkKICAgICAsIG1fY29u
bmVjdGlvbkRlbGF5VGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmTWFuZXR0ZUdhbWVw
YWRQcm92aWRlcjo6Y29ubmVjdGlvbkRlbGF5VGltZXJGaXJlZCkKKyAgICAsIG1faW5wdXROb3Rp
ZmljYXRpb25UaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZNYW5ldHRlR2FtZXBhZFBy
b3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpCiB7CiAgICAgZ19zaWduYWxfY29u
bmVjdChtX21vbml0b3IuZ2V0KCksICJkZXZpY2UtY29ubmVjdGVkIiwgR19DQUxMQkFDSyhvbkRl
dmljZUNvbm5lY3RlZCksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9tb25pdG9yLmdl
dCgpLCAiZGV2aWNlLWRpc2Nvbm5lY3RlZCIsIEdfQ0FMTEJBQ0sob25EZXZpY2VEaXNjb25uZWN0
ZWQpLCB0aGlzKTsKKworICAgIE1hbmV0dGVEZXZpY2UqIGRldmljZTsKKyAgICBHVW5pcXVlUHRy
PE1hbmV0dGVNb25pdG9ySXRlcj4gaXRlcihtYW5ldHRlX21vbml0b3JfaXRlcmF0ZShtX21vbml0
b3IuZ2V0KCkpKTsKKyAgICB3aGlsZSAobWFuZXR0ZV9tb25pdG9yX2l0ZXJfbmV4dChpdGVyLmdl
dCgpLCAmZGV2aWNlKSkKKyAgICAgICAgZGV2aWNlQ29ubmVjdGVkKGRldmljZSk7Cit9CisKK01h
bmV0dGVHYW1lcGFkUHJvdmlkZXI6On5NYW5ldHRlR2FtZXBhZFByb3ZpZGVyKCkKK3sKKyAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9tb25pdG9yLmdldCgpLCB0aGlz
KTsKIH0KIAogdm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1l
cGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQmIGNsaWVudCkKQEAgLTkyLDYgKzEwNCwxNSBAQCB2
b2lkIE1hbmV0dGVHYW1lcGFkUHJvdmlkZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBh
ZFByb3ZpZGVyQ2xpZW50JiBjbGllbgogICAgIH0KIH0KIAordm9pZCBNYW5ldHRlR2FtZXBhZFBy
b3ZpZGVyOjpnYW1lcGFkSGFkSW5wdXQoTWFuZXR0ZUdhbWVwYWQmLCBTaG91bGRNYWtlR2FtZXBh
ZHNWaXNpYmxlIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCit7CisgICAgaWYgKCFtX2lucHV0
Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9pbnB1dE5vdGlmaWNhdGlv
blRpbWVyLnN0YXJ0T25lU2hvdChpbnB1dE5vdGlmaWNhdGlvbkRlbGF5KTsKKworICAgIGlmIChz
aG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlID09IFNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGU6Olll
cykKKyAgICAgICAgc2V0U2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJpbGUoKTsKK30KKwogdm9pZCBN
YW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VDb25uZWN0ZWQoTWFuZXR0ZURldmljZSogZGV2
aWNlKQogewogICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdldChkZXZpY2UpKTsKQEAgLTE1Niw2
ICsxNzcsMTQgQEAgdm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlU
aW1lckZpcmVkKCkKICAgICAgICAgY2xpZW50LT5zZXRJbml0aWFsQ29ubmVjdGVkR2FtZXBhZHMo
bV9nYW1lcGFkVmVjdG9yKTsKIH0KIAordm9pZCBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyOjppbnB1
dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9zaG91bGREaXNwYXRjaENh
bGxiYWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hQbGF0Zm9ybUdhbWVwYWRJ
bnB1dEFjdGl2aXR5KCk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxNYW5ldHRlR2FtZXBhZD4gTWFu
ZXR0ZUdhbWVwYWRQcm92aWRlcjo6cmVtb3ZlR2FtZXBhZEZvckRldmljZShNYW5ldHRlRGV2aWNl
KiBkZXZpY2UpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hbmV0dGVHYW1lcGFkPiByZXN1bHQg
PSBtX2dhbWVwYWRNYXAudGFrZShkZXZpY2UpOwpAQCAtMTcwLDQgKzE5OSw0IEBAIHN0ZDo6dW5p
cXVlX3B0cjxNYW5ldHRlR2FtZXBhZD4gTWFuZXR0ZUdhbWVwYWRQcm92aWRlcjo6cmVtb3ZlR2Ft
ZXBhZEZvckRldmljZShNCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVO
QUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKSAmJiBPUyhMSU5VWCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9NYW5ldHRl
R2FtZXBhZFByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hbmV0
dGUvTWFuZXR0ZUdhbWVwYWRQcm92aWRlci5oCmluZGV4IGM3MzYzYTNiN2UyNTgyNmU4YmMyZDNk
Y2RlZGYwMDI5Zjc5MzJmNWUuLjI5ZTI4MTk2MjE2MDM1NWZkZWFjOWM4N2ZiNmNmMDFmYjAxNDI0
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFuZXR0ZS9N
YW5ldHRlR2FtZXBhZFByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9tYW5ldHRlL01hbmV0dGVHYW1lcGFkUHJvdmlkZXIuaApAQCAtMjYsNyArMjYsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShHQU1FUEFEKQorI2lmIEVOQUJMRShHQU1FUEFE
KSAmJiBPUyhMSU5VWCkKIAogI2luY2x1ZGUgIkdhbWVwYWRQcm92aWRlci5oIgogI2luY2x1ZGUg
PGxpYm1hbmV0dGUuaD4KQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgTWFuZXR0ZUdhbWVwYWRQcm92
aWRlciBmaW5hbCA6IHB1YmxpYyBHYW1lcGFkUHJvdmlkZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBNYW5ldHRlR2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKIAorICAgIHZpcnR1YWwgfk1h
bmV0dGVHYW1lcGFkUHJvdmlkZXIoKTsKKwogICAgIHZvaWQgc3RhcnRNb25pdG9yaW5nR2FtZXBh
ZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50JikgZmluYWw7CiAgICAgdm9pZCBzdG9wTW9uaXRvcmlu
Z0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCYpIGZpbmFsOwogICAgIGNvbnN0IFZlY3Rv
cjxQbGF0Zm9ybUdhbWVwYWQqPiYgcGxhdGZvcm1HYW1lcGFkcygpIGZpbmFsIHsgcmV0dXJuIG1f
Z2FtZXBhZFZlY3RvcjsgfQpAQCAtNTEsNiArNTMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXZp
Y2VDb25uZWN0ZWQoTWFuZXR0ZURldmljZSopOwogICAgIHZvaWQgZGV2aWNlRGlzY29ubmVjdGVk
KE1hbmV0dGVEZXZpY2UqKTsKIAorICAgIGVudW0gY2xhc3MgU2hvdWxkTWFrZUdhbWVwYWRzVmlz
aWJsZSA6IGJvb2wgeyBObywgWWVzIH07CisgICAgdm9pZCBnYW1lcGFkSGFkSW5wdXQoTWFuZXR0
ZUdhbWVwYWQmLCBTaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKTsKKwogcHJpdmF0ZToKICAgICBN
YW5ldHRlR2FtZXBhZFByb3ZpZGVyKCk7CiAKQEAgLTU4LDYgKzYzLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHVuc2lnbmVkIGluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKTsKICAgICB2b2lkIGNv
bm5lY3Rpb25EZWxheVRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGlucHV0Tm90aWZpY2F0aW9uVGlt
ZXJGaXJlZCgpOwogCiAgICAgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+IG1fZ2FtZXBhZFZlY3Rv
cjsKICAgICBIYXNoTWFwPE1hbmV0dGVEZXZpY2UqLCBzdGQ6OnVuaXF1ZV9wdHI8TWFuZXR0ZUdh
bWVwYWQ+PiBtX2dhbWVwYWRNYXA7CkBAIC02NSw4ICs3MSw5IEBAIHByaXZhdGU6CiAKICAgICBH
VW5pcXVlUHRyPE1hbmV0dGVNb25pdG9yPiBtX21vbml0b3I7CiAgICAgUnVuTG9vcDo6VGltZXI8
TWFuZXR0ZUdhbWVwYWRQcm92aWRlcj4gbV9jb25uZWN0aW9uRGVsYXlUaW1lcjsKKyAgICBSdW5M
b29wOjpUaW1lcjxNYW5ldHRlR2FtZXBhZFByb3ZpZGVyPiBtX2lucHV0Tm90aWZpY2F0aW9uVGlt
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR0FN
RVBBRCkKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkgJiYgT1MoTElOVVgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwCmlu
ZGV4IGM2ZGQ0ZTBiNDI4NjU0MDNmZTdlMDY5MTkxNTY1OTg5YTEyZGRkZjkuLjk5OTkzNzNmMDIz
OWZkNTBmOTYzZjgxN2IxZTRmMzQ1MTQyZjc2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwCkBAIC0yMjMsNyArMjIz
LDcgQEAgVmVjdG9yPEdhbWVwYWREYXRhPiBVSUdhbWVwYWRQcm92aWRlcjo6c25hcHNob3RHYW1l
cGFkcygpCiAgICAgcmV0dXJuIGdhbWVwYWREYXRhczsKIH0KIAotI2lmICFQTEFURk9STShDT0NP
QSkgJiYgIVVTRShNQU5FVFRFKQorI2lmICFQTEFURk9STShDT0NPQSkgJiYgIShVU0UoTUFORVRU
RSkgJiYgT1MoTElOVVgpKQogCiB2b2lkIFVJR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybVNldERl
ZmF1bHRHYW1lcGFkUHJvdmlkZXIoKQogewpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgVUlHYW1l
cGFkUHJvdmlkZXI6OnBsYXRmb3JtU3RhcnRNb25pdG9yaW5nSW5wdXQoKQogewogfQogCi0jZW5k
aWYgLy8gIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKE1BTkVUVEUpCisjZW5kaWYgLy8gIVBMQVRG
T1JNKENPQ09BKSAmJiAhKFVTRShNQU5FVFRFKSAmJiBPUyhMSU5VWCkpCiAKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC9ndGsvVUlHYW1lcGFkUHJvdmlk
ZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC9ndGsvVUlHYW1lcGFk
UHJvdmlkZXJHdGsuY3BwCmluZGV4IDc4Nzc3NDdmMGE4YjBmYmU0OWI3OTgzZWZiZTA2NzBiYTlk
YWQxMTUuLmU4NzY3MTJmZGVhZGQwMzg2Y2ZkMGExYjUxYWI5YWExZWJlNjQwOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvZ3RrL1VJR2FtZXBhZFByb3ZpZGVy
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL2d0ay9VSUdhbWVw
YWRQcm92aWRlckd0ay5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIFdlYlBhZ2VQcm94eSog
Z2V0V2ViUGFnZVByb3h5KEd0a1dpZGdldCogd2lkZ2V0KQogICAgIGlmICghd2lkZ2V0IHx8ICFH
VEtfSVNfQ09OVEFJTkVSKHdpZGdldCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
aWYgKFdFQktJVF9JU19XRUJfVklFVyh3aWRnZXQpKQorICAgIGlmIChXRUJLSVRfSVNfV0VCX1ZJ
RVdfQkFTRSh3aWRnZXQpKQogICAgICAgICByZXR1cm4gZ3RrX3dpZGdldF9pc192aXNpYmxlKHdp
ZGdldCkgPyB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KSkgOiBudWxscHRyOwogCiAgICAgR1VuaXF1ZVB0cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2Nv
bnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUih3aWRnZXQpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL21hbmV0dGUvVUlHYW1lcGFkUHJvdmlk
ZXJNYW5ldHRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvbWFuZXR0ZS9V
SUdhbWVwYWRQcm92aWRlck1hbmV0dGUuY3BwCmluZGV4IGFkZDJjYWIyODBhNjVhNTg0NGQ0ODcy
YmI2OTUyM2M2Zjc3MzA0NTUuLmExNmVhNTkzYmJmODI2OTY2NjEwMWMxMThmZWE4NmI3NDcxMjUy
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvbWFuZXR0ZS9V
SUdhbWVwYWRQcm92aWRlck1hbmV0dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0dhbWVwYWQvbWFuZXR0ZS9VSUdhbWVwYWRQcm92aWRlck1hbmV0dGUuY3BwCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVUlHYW1lcGFkUHJvdmlkZXIu
aCIKIAotI2lmIEVOQUJMRShHQU1FUEFEKQorI2lmIEVOQUJMRShHQU1FUEFEKSAmJiBPUyhMSU5V
WCkKIAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTWFuZXR0
ZUdhbWVwYWRQcm92aWRlci5oPgpAQCAtNjEsNCArNjEsNCBAQCB2b2lkIFVJR2FtZXBhZFByb3Zp
ZGVyOjpwbGF0Zm9ybVN0YXJ0TW9uaXRvcmluZ0lucHV0KCkKIAogfQogCi0jZW5kaWYgLy8gRU5B
QkxFKEdBTUVQQUQpCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpICYmIE9TKExJTlVYKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>