<?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>202183</bug_id>
          
          <creation_ts>2019-09-24 22:37:42 -0700</creation_ts>
          <short_desc>[Win] Update KeyboardEvent as per the latest specification</short_desc>
          <delta_ts>2019-11-25 21:21:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>204562</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573949</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-24 22:37:42 -0700</bug_when>
    <thetext>[Win] Update KeyboardEvent as per the latest specification

MDN: KeyboardEvent
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent

W3C: UI Events
https://www.w3.org/TR/uievents/#events-keyboardevents

Bug 162852 – [Meta] Update KeyboardEvent as per the latest specification
Bug 166759 – [GTK] Should support key and code properties on keyboard events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574344</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-25 20:44:30 -0700</bug_when>
    <thetext>UI Events KeyboardEvent code Values
https://www.w3.org/TR/uievents-code/

UI Events KeyboardEvent key Values
https://www.w3.org/TR/uievents-key/

KeyboardEvent: code values - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values

Key Values - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574730</commentid>
    <comment_count>2</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-26 22:00:01 -0700</bug_when>
    <thetext>Windows WM_KEYDONW has only key code, but charactor information which is needed for KeyboardEvent.key.
In Chromium, PlatformKeyMap::DomKeyFromKeyboardCodeImpl converts a key code to a charactor code by using the current keyboard layout information.
PlatformKeyMap::UpdateLayout builds mapping table by using ToUnicodeEx.

Issue 1585193002: Build key map DomCodeToKey() for Windows - Code Review
https://codereview.chromium.org/1585193002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575204</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-30 01:01:24 -0700</bug_when>
    <thetext>Firefox implementations looks quite complicated. I can&apos;t understand them.

Firefox also has the similer code to build a mapping table by using ToUnicodeEx in KeyboardLayout::LoadLayout.
But, I can&apos;t understand how this table is used.

It seems that Firefox is mapping a key code by using the following WM_CHAR events for printable keys,
and a hard-coded table for non-printable keys.

NativeKey::GetFollowingCharMessage retrieves queued WM_CHAR messages for printable keys.

KeyboardLayout::ConvertNativeKeyCodeToKeyNameIndex is converting non-printable keys.
https://dxr.mozilla.org/mozilla-central/source/widget/NativeKeyToDOMKeyName.h is the hard-coded table.

842927 - Implement DOM3 KeyboardEvent.key only for non-printable key, first
https://bugzilla.mozilla.org/show_bug.cgi?id=842927</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577665</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-07 22:36:38 -0700</bug_when>
    <thetext>I think this problem can be solved more simply.
The problem is:
- TranslateMessage is using ToUnicodeEx
- ToUnicodeEx stores a previous dead key
- extra calling ToUnicodeEx consumes the stored dead key

For example, typing &apos;`&apos; and &apos;a&apos;:

- Types &apos;`&apos;
- The first calling ToUnicodeEx from TranslateMessage stores &apos;`&apos; as a dead key
- Types &apos;a&apos;
- The second calling ToUnicodeEx from TranslateMessage returns &apos;à&apos; as expected

The problem happens if ToUnicodeEx is used after calling TranslateMessage

- Types &apos;`&apos;
- The first calling ToUnicodeEx from TranslateMessage stores &apos;`&apos; as a dead key
- Extra calling ToUnicodeEx with &apos;`&apos; consumes the stored dead key, and return &apos;``&apos;
- Types &apos;a&apos;
- The second calling ToUnicodeEx from TranslateMessage unexpectedly returns &apos;a&apos;

This problem can be solved by one more extra calling ToUnicodeEx with VK_SPACE.

- Types &apos;`&apos;
- The first calling ToUnicodeEx from TranslateMessage stores &apos;`&apos; as a dead key
- ToUnicodeEx(VK_SPACE) consums the dead key
- ToUnicodeEx(&apos;`&apos;) stores a dead key again
- Types &apos;a&apos;
- The second calling ToUnicodeEx from TranslateMessage returns &apos;à&apos; as expected

https://en.wikipedia.org/wiki/Dead_key</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577680</commentid>
    <comment_count>5</comment_count>
      <attachid>380407</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-08 00:15:05 -0700</bug_when>
    <thetext>Created attachment 380407
manual test to show key and code properties of keyboard events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577684</commentid>
    <comment_count>6</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-08 00:26:50 -0700</bug_when>
    <thetext>I tested Firefox and Chrome on Windows by typing ^ and a with German keyboard.
And, marked the differences with ★.

Firefox 69 for Windows

type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:â code:KeyA
type:keypress key:â code:KeyA
type:keyup key:a code:KeyA
type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:^^ code:Backquote ★
type:keypress key:^ code:Backquote
type:keypress key:^ code:Backquote
type:keyup key:^ code:Backquote ★

Chrome 77 for Windows

type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:â code:KeyA
type:keypress key:â code:KeyA
type:keyup key:a code:KeyA
type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:Dead code:Backquote ★
type:keypress key:^ code:Backquote
type:keypress key:^ code:Backquote
type:keyup key:Dead code:Backquote ★</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577691</commentid>
    <comment_count>7</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-08 00:36:17 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #6)
&gt; I tested Firefox and Chrome on Windows by typing ^ and a with German

Oops. I typed [^] [a] [^] [^].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577728</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-08 03:52:55 -0700</bug_when>
    <thetext>comment 4 is wrong.
If I type [^][^][a].
It should be &quot;^^a&quot;, but it becomes &quot;^^â&quot; because the second [^] also stores a dead key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578058</commentid>
    <comment_count>9</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-08 19:27:39 -0700</bug_when>
    <thetext>If I set bit 2 of wFlags for ToUnicodeEx, it seems that ToUnicodeEx doesn&apos;t change the stored dead key.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-tounicodeex
&gt; If bit 2 is set, keyboard state is not changed (Windows 10, version 1607 and newer)

Unfortunately, this behavior is supported only by Windows 10, version 1607 and newer.

And, it&apos;s not obvious to me how should I use this flag.
For example, If I type [^][a], TranslateMessage of [a] consumes the stored dead key.
So, calling ToUnicodeEx with [a] and the flag returns &quot;a&quot; rather than &quot;â&quot; because no dead key is stored.
Should I use ToUnicodeEx before TranslateMessage? Or, shouldn&apos;t I use TranslateMessage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578074</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-08 20:56:45 -0700</bug_when>
    <thetext>In Chromium, InputMethodWinBase::DispatchKeyEvent retrieves queued WM_CHAR events, and sets a char information from WM_CHAR to the keydown event.

Callstack:

&gt; content.dll!ui::MakeWebKeyboardEventFromUiEvent(const ui::KeyEvent &amp; event) Line 115	C++
&gt; content.dll!ui::MakeWebKeyboardEvent(const ui::KeyEvent &amp; event) Line 332	C++
&gt; content.dll!content::NativeWebKeyboardEvent::NativeWebKeyboardEvent(const ui::KeyEvent &amp; key_event, wchar_t character) Line 132	C++
&gt; content.dll!content::RenderWidgetHostViewAura::InsertChar(const ui::KeyEvent &amp; event) Line 1270	C++
&gt; ui_base_ime_win.dll!ui::InputMethodWinBase::OnChar(HWND__ * window_handle, unsigned int message, unsigned __int64 wparam, __int64 lparam, const tagMSG &amp; event, int * handled) Line 294	C++
&gt; ui_base_ime_win.dll!ui::InputMethodWinBase::ProcessUnhandledKeyEvent(ui::KeyEvent * event, const std::__1::vector&lt;tagMSG,std::__1::allocator&lt;tagMSG&gt;&gt; * char_msgs) Line 503	C++
&gt; ui_base_ime_win.dll!ui::InputMethodWinBase::DispatchKeyEvent(ui::KeyEvent * event) Line 255	C++
&gt; aura.dll!aura::WindowEventDispatcher::PreDispatchKeyEvent(ui::KeyEvent * event) Line 1036	C++
&gt; aura.dll!aura::WindowEventDispatcher::PreDispatchEvent(ui::EventTarget * target, ui::Event * event) Line 535	C++
&gt; events.dll!ui::EventDispatcherDelegate::DispatchEvent(ui::EventTarget * target, ui::Event * event) Line 55	C++
&gt; events.dll!ui::EventProcessor::OnEventFromSource(ui::Event * event) Line 49	C++
&gt; events.dll!ui::EventSource::DeliverEventToSink(ui::Event * event) Line 112	C++
&gt; events.dll!ui::EventSource::SendEventToSinkFromRewriter(const ui::Event * event, const ui::EventRewriter * rewriter) Line 137	C++
&gt; events.dll!ui::EventSource::SendEventToSink(const ui::Event * event) Line 106	C++
&gt; views.dll!views::DesktopWindowTreeHostWin::HandleKeyEvent(ui::KeyEvent * event) Line 934	C++
&gt; views.dll!views::HWNDMessageHandler::OnKeyEvent(unsigned int message, unsigned __int64 w_param, __int64 l_param) Line 1912	C++
&gt; views.dll!views::HWNDMessageHandler::_ProcessWindowMessage(HWND__ * hWnd, unsigned int uMsg, unsigned __int64 wParam, __int64 lParam, __int64 &amp; lResult, unsigned long dwMsgMapID) Line 380	C++
&gt; views.dll!views::HWNDMessageHandler::OnWndProc(unsigned int message, unsigned __int64 w_param, __int64 l_param) Line 1024	C++
&gt; gfx.dll!gfx::WindowImpl::WndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 w_param, __int64 l_param) Line 298	C++
&gt; gfx.dll!base::win::WrappedWindowProc&lt;&amp;gfx::WindowImpl::WndProc&gt;(HWND__ * hwnd, unsigned int message, unsigned __int64 wparam, __int64 lparam) Line 75	C++
&gt; [External Code]	
&gt; base.dll!base::MessagePumpForUI::ProcessMessageHelper(const tagMSG &amp; msg) Line 476	C++
&gt; base.dll!base::MessagePumpForUI::ProcessNextWindowsMessage() Line 445	C++
&gt; base.dll!base::MessagePumpForUI::DoRunLoop() Line 212	C++
&gt; base.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate) Line 76	C++
&gt; base.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool application_tasks_allowed, base::TimeDelta timeout) Line 467	C++
&gt; base.dll!base::RunLoop::Run() Line 156	C++
&gt; chrome.dll!ChromeBrowserMainParts::MainMessageLoopRun(int * result_code) Line 1854	C++
&gt; content.dll!content::BrowserMainLoop::RunMainMessageLoopParts() Line 1026	C++
&gt; content.dll!content::BrowserMainRunnerImpl::Run() Line 149	C++
&gt; content.dll!content::BrowserMain(const content::MainFunctionParams &amp; parameters) Line 47	C++
&gt; content.dll!content::RunBrowserProcessMain(const content::MainFunctionParams &amp; main_function_params, content::ContentMainDelegate * delegate) Line 556	C++
&gt; content.dll!content::ContentMainRunnerImpl::RunServiceManager(content::MainFunctionParams &amp; main_params, bool start_service_manager_only) Line 963	C++
&gt; content.dll!content::ContentMainRunnerImpl::Run(bool start_service_manager_only) Line 871	C++
&gt; content.dll!content::ContentServiceManagerMainDelegate::RunEmbedderProcess() Line 52	C++
&gt; embedder.dll!service_manager::Main(const service_manager::MainParams &amp; params) Line 423	C++
&gt; content.dll!content::ContentMain(const content::ContentMainParams &amp; params) Line 20	C++
&gt; chrome.dll!ChromeMain(HINSTANCE__ * instance, sandbox::SandboxInterfaceInfo * sandbox_info, __int64 exe_entry_point_ticks) Line 110	C++
&gt; chrome.exe!MainDllLoader::Launch(HINSTANCE__ * instance, base::TimeTicks exe_entry_point_ticks) Line 202	C++
&gt; chrome.exe!wWinMain(HINSTANCE__ * instance, HINSTANCE__ * prev, wchar_t *, int) Line 234	C++
&gt; [External Code]	

Issue 1267483003: Combine the WM_CHAR with WM_KEY* for key event flow. - Code Review
https://codereview.chromium.org/1267483003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578524</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-09 22:45:01 -0700</bug_when>
    <thetext>I typed [^][a][^z][^][^] in German keyboard.

Firefox 69 for Windows

type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:â code:KeyA
type:keypress key:â code:KeyA
type:keyup key:a code:KeyA
type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:^y code:KeyZ
type:keypress key:^ code:KeyZ
type:keypress key:y code:KeyZ
type:keyup key:y code:KeyZ
type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:^^ code:Backquote
type:keypress key:^ code:Backquote
type:keypress key:^ code:Backquote
type:keyup key:^ code:Backquote


Chrome 77 for Windows

type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:â code:KeyA
type:keypress key:â code:KeyA
type:keyup key:a code:KeyA
type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:y code:KeyZ
type:keypress key:^ code:KeyZ
type:keypress key:y code:KeyZ
type:keyup key:y code:KeyZ
type:keydown key:Dead code:Backquote
type:keyup key:Dead code:Backquote
type:keydown key:Dead code:Backquote
type:keypress key:^ code:Backquote
type:keypress key:^ code:Backquote
type:keyup key:Dead code:Backquote


Microsoft Edge 44.18362.387.0 (Microsoft EdgeHTML 18.18362)

type:keydown key:Unidentified code:undefined
type:keyup key:Unidentified code:undefined
type:keydown key:â code:undefined
type:keypress key:â code:undefined
type:keyup key:â code:undefined
type:keydown key:Unidentified code:undefined
type:keyup key:Unidentified code:undefined
type:keydown key:^y code:undefined
type:keypress key:^y code:undefined
type:keyup key:^y code:undefined
type:keydown key:Unidentified code:undefined
type:keyup key:Unidentified code:undefined
type:keydown key:^^ code:undefined
type:keypress key:^^ code:undefined
type:keyup key:^^ code:undefined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578527</commentid>
    <comment_count>12</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-09 22:51:09 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #11)
(...)
&gt; type:keydown key:^y code:KeyZ
(...)
&gt; type:keydown key:^y code:undefined
&gt; type:keypress key:^y code:undefined
&gt; type:keyup key:^y code:undefined

Firefox and Edge set two base characters for &apos;key&apos; property.
This seems incompatible with the spec.

https://www.w3.org/TR/uievents-key/#keys-unicode

&gt; A key string is a string containing a 0 or 1 non-control
&gt; characters (&quot;base&quot; characters) followed by 0 or more combining
&gt; characters. The string MUST be in Normalized Form C (NFC) as
&gt; described in [UnicodeNormalizationForms].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578532</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 00:05:43 -0700</bug_when>
    <thetext>I tested on macOS with
https://javascript.info/keyboard-events

Chrome 77 on macOS 10.14

keydown key=Dead code=Equal
keyup key=Dead code=Equal
--------------------------------------------------------------------------------
keydown key=á code=KeyA
keyup key=a code=KeyA
--------------------------------------------------------------------------------
keydown key=Dead code=Equal
keyup key=Dead code=Equal
--------------------------------------------------------------------------------
keydown key=y code=KeyZ
keyup key=y code=KeyZ
--------------------------------------------------------------------------------
keydown key=Dead code=Equal
keyup key=Dead code=Equal
--------------------------------------------------------------------------------
keydown key=Dead code=Equal
keyup key=Dead code=Equal


Safari Technology Preview 93 on macOS 10.14

keydown key=Dead code=Equal
keyup key=´ code=Equal
--------------------------------------------------------------------------------
keydown key=á code=KeyA
keyup key=a code=KeyA
--------------------------------------------------------------------------------
keydown key=Dead code=Equal
keyup key=´ code=Equal
--------------------------------------------------------------------------------
keydown key=´y code=KeyZ
keyup key=y code=KeyZ
--------------------------------------------------------------------------------
keydown key=Dead code=Equal
keyup key=´ code=Equal
--------------------------------------------------------------------------------
keydown key=´ code=Equal
keyup key=´ code=Equal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586315</commentid>
    <comment_count>14</comment_count>
      <attachid>382570</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-01 03:47:40 -0700</bug_when>
    <thetext>Created attachment 382570
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587351</commentid>
    <comment_count>15</comment_count>
      <attachid>382816</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-05 03:27:07 -0800</bug_when>
    <thetext>Created attachment 382816
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588101</commentid>
    <comment_count>16</comment_count>
      <attachid>383018</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-06 20:23:12 -0800</bug_when>
    <thetext>Created attachment 383018
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589457</commentid>
    <comment_count>17</comment_count>
      <attachid>383338</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-11 22:40:24 -0800</bug_when>
    <thetext>Created attachment 383338
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589790</commentid>
    <comment_count>18</comment_count>
      <attachid>383438</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-13 00:53:38 -0800</bug_when>
    <thetext>Created attachment 383438
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590200</commentid>
    <comment_count>19</comment_count>
      <attachid>383542</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-13 21:06:52 -0800</bug_when>
    <thetext>Created attachment 383542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590985</commentid>
    <comment_count>20</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-17 22:42:51 -0800</bug_when>
    <thetext>review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591819</commentid>
    <comment_count>21</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-19 18:11:24 -0800</bug_when>
    <thetext>review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592185</commentid>
    <comment_count>22</comment_count>
      <attachid>383542</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-20 15:45:55 -0800</bug_when>
    <thetext>Comment on attachment 383542
Patch

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

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:39
&gt; +typedef enum : uint8_t {
&gt; +    EF_NONE = 0,
&gt; +    EF_SHIFT_DOWN = 1 &lt;&lt; 0,
&gt; +    EF_CONTROL_DOWN = 1 &lt;&lt; 1,
&gt; +    EF_ALT_DOWN = 1 &lt;&lt; 2,
&gt; +    EF_CAPS_LOCK_ON = 1 &lt;&lt; 3,
&gt; +} EventFlags;

Might be neat to use OptionSet here...unless the goal is to keep this file as similar as possible to the Chromium copy, in which case it&apos;s fine as-is.

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:209
&gt; +            return nullString();

Interesting, I didn&apos;t realize this existed.
There are only 5 instances of `return nullString();` in Source/ compared to 731 of `return String();`...
I guess it was introduced early this year for JSStrings: https://github.com/WebKit/webkit/commit/cb663b3dd21a5b9fbdd180625406226f851a1c7e

According to Yusuke on IRC: &quot;nullString is used almost only when you want `const String&amp;` allocated in somewhere.&quot;

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:311
&gt; +
&gt; +

Nit: extra newline

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:341
&gt; +    } domKeyMap[] = {

Seems odd that domKeyMap is defined *inside* domCodeFromLParam while cNonPrintableKeyMap is defined *outside* of nonPrintableVirtualKeyToDomKey.

&gt; Source/WebCore/platform/win/WindowsKeyNames.h:31
&gt; +#pragma once
&gt; +#include &lt;windows.h&gt;

Nit: missing newline

&gt; Source/WebCore/platform/win/WindowsKeyNames.h:49
&gt; +    typedef std::pair&lt;unsigned /*VirtualKey*/, unsigned /*EventFlags*/&gt; VirtualKeyEventFlagsPair;

Would be nice to update typedefs to usings, again assuming we&apos;re not trying to minimize edits to this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592319</commentid>
    <comment_count>23</comment_count>
      <attachid>384037</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-21 02:21:51 -0800</bug_when>
    <thetext>Created attachment 384037
Patch

* Addressed the review feedbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592355</commentid>
    <comment_count>24</comment_count>
      <attachid>383542</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-21 06:34:30 -0800</bug_when>
    <thetext>Comment on attachment 383542
Patch

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

&gt;&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:39
&gt;&gt; +} EventFlags;
&gt; 
&gt; Might be neat to use OptionSet here...unless the goal is to keep this file as similar as possible to the Chromium copy, in which case it&apos;s fine as-is.

Good idea.

&gt;&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:209
&gt;&gt; +            return nullString();
&gt; 
&gt; Interesting, I didn&apos;t realize this existed.
&gt; There are only 5 instances of `return nullString();` in Source/ compared to 731 of `return String();`...
&gt; I guess it was introduced early this year for JSStrings: https://github.com/WebKit/webkit/commit/cb663b3dd21a5b9fbdd180625406226f851a1c7e
&gt; 
&gt; According to Yusuke on IRC: &quot;nullString is used almost only when you want `const String&amp;` allocated in somewhere.&quot;

Interesting. I think nullString() is just a nullptr of WTF::StringImpl. Replaced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592410</commentid>
    <comment_count>25</comment_count>
      <attachid>384037</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-21 09:43:16 -0800</bug_when>
    <thetext>Comment on attachment 384037
Patch

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

&gt; Source/WebCore/platform/win/WindowsKeyNames.h:39
&gt; +template&lt;typename T&gt; struct DefaultHash&lt;OptionSet&lt;T&gt;&gt; {

Hmm, wouldn&apos;t this need to go in wtf/OptionSet.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593313</commentid>
    <comment_count>26</comment_count>
      <attachid>384037</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-24 19:36:11 -0800</bug_when>
    <thetext>Comment on attachment 384037
Patch

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

&gt;&gt; Source/WebCore/platform/win/WindowsKeyNames.h:39
&gt;&gt; +template&lt;typename T&gt; struct DefaultHash&lt;OptionSet&lt;T&gt;&gt; {
&gt; 
&gt; Hmm, wouldn&apos;t this need to go in wtf/OptionSet.h?

Fair enough. I should do it.
Filed: Bug 204562 – Add DefaultHash&lt;OptionSet&lt;T&gt;&gt; and HashTrait&lt;OptionSet&lt;T&gt;&gt; specializations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593550</commentid>
    <comment_count>27</comment_count>
      <attachid>384320</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-25 19:01:29 -0800</bug_when>
    <thetext>Created attachment 384320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593552</commentid>
    <comment_count>28</comment_count>
      <attachid>384320</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-25 19:23:16 -0800</bug_when>
    <thetext>Comment on attachment 384320
Patch

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

r=me

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:194
&gt; +            // VK_KANA isn&apos;t generated by any modern layouts but is a listed value
&gt; +            // that third-party apps might synthesize, so we handle it anyway.

Style nit: indentation

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:274
&gt; +        KeyModifierSet({KeyModifier::Shift, KeyModifier::CapsLock}) &amp; modifiers,

Style nit: spaces inside braces

&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:522
&gt; +                    m_printableKeyCodeToKey.set(std::make_pair(virtualKey, modifiers), makeString(UChar(translatedChars[0])));

Seems like we should use WTF::ucharFrom...but then it&apos;s only one character.
(Then again, I guess if it weren&apos;t just one character then you wouldn&apos;t need makeString either, since there&apos;s String(const wchar_t*). Oh well.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593554</commentid>
    <comment_count>29</comment_count>
      <attachid>384320</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-25 19:47:33 -0800</bug_when>
    <thetext>Comment on attachment 384320
Patch

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

Thank you very much for the review.

&gt;&gt; Source/WebCore/platform/win/WindowsKeyNames.cpp:522
&gt;&gt; +                    m_printableKeyCodeToKey.set(std::make_pair(virtualKey, modifiers), makeString(UChar(translatedChars[0])));
&gt; 
&gt; Seems like we should use WTF::ucharFrom...but then it&apos;s only one character.
&gt; (Then again, I guess if it weren&apos;t just one character then you wouldn&apos;t need makeString either, since there&apos;s String(const wchar_t*). Oh well.)

Yes, it&apos;s a single character. Will replace it with String(translatedChars, 1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593555</commentid>
    <comment_count>30</comment_count>
      <attachid>384321</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-25 19:49:29 -0800</bug_when>
    <thetext>Created attachment 384321
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593559</commentid>
    <comment_count>31</comment_count>
      <attachid>384321</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-25 21:20:33 -0800</bug_when>
    <thetext>Comment on attachment 384321
Patch for landing

Clearing flags on attachment: 384321

Committed r252873: &lt;https://trac.webkit.org/changeset/252873&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593560</commentid>
    <comment_count>32</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-25 21:20:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593561</commentid>
    <comment_count>33</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-25 21:21:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/57482382&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>380407</attachid>
            <date>2019-10-08 00:15:05 -0700</date>
            <delta_ts>2019-10-08 00:15:05 -0700</delta_ts>
            <desc>manual test to show key and code properties of keyboard events</desc>
            <filename>key.html</filename>
            <type>text/html</type>
            <size>570</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxzdHlsZT4KICAjZHVtcCB7CiAgICAgIGJhY2tncm91bmQ6IGJsYWNr
OwogICAgICBjb2xvcjogd2hpdGU7CiAgfQo8L3N0eWxlPgo8c2NyaXB0PgogIG9ubG9hZCA9ICgp
ID0+IHsKICAgICAgdmFyIGxvZ3MgPSBbXTsKICAgICAgY29uc3QgZHVtcCA9IChldmVudCkgPT4g
ewoJICBzdHIgPSAndHlwZTonICsgZXZlbnQudHlwZSArICcga2V5OicgKyBldmVudC5rZXkgKyAn
IGNvZGU6JyArIGV2ZW50LmNvZGUgKyAnXG4nOwoJICBsb2dzLnB1c2goc3RyKTsKCSAgaWYgKGxv
Z3MubGVuZ3RoID4gNDApCgkgICAgICBsb2dzLnNoaWZ0KCk7CgkgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdkdW1wJykuaW5uZXJUZXh0ID0gbG9ncy5qb2luKCcnKTsKCSAgY29uc29sZS5sb2co
c3RyKTsKICAgICAgfQogICAgICBhZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZHVtcCk7CiAg
ICAgIGFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZHVtcCk7CiAgICAgIGFkZEV2ZW50TGlzdGVu
ZXIoJ2tleXByZXNzJywgZHVtcCk7CiAgfQo8L3NjcmlwdD4KPHByZSBpZD1kdW1wPgo8L3ByZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382570</attachid>
            <date>2019-11-01 03:47:40 -0700</date>
            <delta_ts>2019-11-05 03:27:07 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>20450</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDA2ZmQwODJmMzUzLi5hZWM4NzIxYWVmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC03MTksMTEgKzcxOSwxMSBAQCB0aGUgcHVibGljIGlP
UyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTc5MTY3Pi4gKi8KICNlbmRpZgogCiAj
aWYgIWRlZmluZWQoRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJM
RV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDAKKyNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9B
VFRSSUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfS0VZQk9BUkRfQ09ERV9B
VFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAwCisjZGVm
aW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZp
bmVkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRl
eCBhMmQxZmE2ODkxYy4uYTY2N2E4NmQzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBA
IC0xMDIsNiArMTAyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vd2luL1N0cnVjdHVyZWRFeGNlcHRpb25IYW5kbGVyU3VwcHJlc3Nvci5jcHAKICAgICBwbGF0
Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKICAgICBwbGF0Zm9ybS93aW4vVXNlckFnZW50V2luLmNw
cAorICAgIHBsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcAogICAgIHBsYXRmb3JtL3dpbi9X
Q0RhdGFPYmplY3QuY3BwCiAgICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uY3BwCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5jcHAKQEAgLTEzOCw2ICsxMzks
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaAogICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQ
b3B1cE1lbnVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKKyAgICBwbGF0Zm9y
bS93aW4vVmlydHVhbEtleU1hcC5oCiAgICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5oCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9XZWJD
b3JlSW5zdGFuY2VIYW5kbGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVu
dFdpbi5jcHAKaW5kZXggYjIzNTZjNWY0ZmMuLmI3YjdlNzU0MThkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2lu
Y2x1ZGUgIlZpcnR1YWxLZXlNYXAuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0yMTgsMTAg
KzIxOSw0NSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNo
YXIgYykKICAgICByZXR1cm4gU3RyaW5nKCZjLCAxKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIHNj
YW5Db2RlRnJvbUxQYXJhbShMUEFSQU0gbFBhcmFtKQoreworICAgIHJldHVybiAobFBhcmFtID4+
IDE2KSAmIDI1NTsKK30KKworc3RhdGljIFN0cmluZyBrZXlGb3JLZXlFdmVudChQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OlR5cGUgdHlwZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sK
KyAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKSB7CisgICAgICAgIHdjaGFyX3Qg
d2NoYXJbMV0gPSB7IHN0YXRpY19jYXN0PHdjaGFyX3Q+KHdQYXJhbSkgfTsKKyAgICAgICAgcmV0
dXJuIHsgd2NoYXIsIDEgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VmlydHVhbEtleU1hcD4ga2V5TWFwOworICAgICAgICByZXR1cm4ga2V5TWFwLT5kb21L
ZXlGcm9tVmlydHVhbEtleSh3UGFyYW0pOworICAgIH0KKyAgICByZXR1cm4gIlVuZGVmaW5lZCJf
czsKK30KKworc3RhdGljIFN0cmluZyBjb2RlRm9yS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpUeXBlIHR5cGUsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgaWYg
KHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhcikgeworICAgICAgICBhdXRvIHNjYW5Db2RlID0g
c2NhbkNvZGVGcm9tTFBhcmFtKGxQYXJhbSk7CisgICAgICAgIHdQYXJhbSA9IE1hcFZpcnR1YWxL
ZXkoc2NhbkNvZGUsIE1BUFZLX1ZTQ19UT19WSyk7CisgICAgfQorICAgIHN3aXRjaCAod1BhcmFt
KSB7CisgICAgY2FzZSAnQSc6CisgICAgICAgIHJldHVybiAiS2V5QSJfczsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gIlVuZGVmaW5lZCJfczsKK30K
KwogUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoSFdORCwgV1BB
UkFNIGNvZGUsIExQQVJBTSBrZXlEYXRhLCBUeXBlIHR5cGUsIGJvb2wgc3lzdGVtS2V5KQogICAg
IDogUGxhdGZvcm1FdmVudCh0eXBlLCBHZXRLZXlTdGF0ZShWS19TSElGVCkgJiBISUdIX0JJVF9N
QVNLX1NIT1JULCBHZXRLZXlTdGF0ZShWS19DT05UUk9MKSAmIEhJR0hfQklUX01BU0tfU0hPUlQs
IEdldEtleVN0YXRlKFZLX01FTlUpICYgSElHSF9CSVRfTUFTS19TSE9SVCwgZmFsc2UsIFdhbGxU
aW1lOjpmcm9tUmF3U2Vjb25kcyg6OkdldFRpY2tDb3VudCgpICogMC4wMDEpKQogICAgICwgbV90
ZXh0KCh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGNvZGUpIDogU3RyaW5nKCkpCiAgICAgLCBtX3VubW9kaWZpZWRUZXh0KCh0eXBlID09IFBsYXRm
b3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkp
CisgICAgLCBtX2tleShrZXlGb3JLZXlFdmVudCh0eXBlLCBjb2RlLCBrZXlEYXRhKSkKKyAgICAs
IG1fY29kZShjb2RlRm9yS2V5RXZlbnQodHlwZSAsY29kZSwga2V5RGF0YSkpCiAgICAgLCBtX2tl
eUlkZW50aWZpZXIoKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhcikgPyBTdHJpbmcoKSA6IGtl
eUlkZW50aWZpZXJGb3JXaW5kb3dzS2V5Q29kZShjb2RlKSkKICAgICAsIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlKCh0eXBlID09IFJhd0tleURvd24gfHwgdHlwZSA9PSBLZXlVcCkgPyB3aW5kb3dz
S2V5Y29kZVdpdGhMb2NhdGlvbihjb2RlLCBrZXlEYXRhKSA6IDApCiAgICAgLCBtX2F1dG9SZXBl
YXQoSElXT1JEKGtleURhdGEpICYgS0ZfUkVQRUFUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1ZpcnR1YWxLZXlNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iNGMzNWMyNjA2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcApAQCAtMCwwICsxLDM4MiBAQAorLy8gQ29weXJp
Z2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLwor
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmli
dXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
Ky8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWaXJ0dWFsS2V5TWFwLmgiCisKK3R5cGVkZWYgZW51bSA6IHVpbnQ4X3Qg
eworICAgIEVGX05PTkUgPSAwLAorICAgIEVGX1NISUZUX0RPV04gPSAxIDw8IDAsCisgICAgRUZf
Q09OVFJPTF9ET1dOID0gMSA8PCAxLAorICAgIEVGX0FMVF9ET1dOID0gMSA8PCAyLAorICAgIEVG
X0NBUFNfTE9DS19PTiA9IDEgPDwgMywKK30gRXZlbnRGbGFnczsKKworLy8gTGlzdCBvZiBtb2Rp
ZmllcnMgbWVudGlvbmVkIGluIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8ja2V5cy1t
b2RpZmllcnMKKy8vIFNvbWUgbW9kaWZpZXJzIGFyZSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhl
eSB1c3VhbGx5IGRvbid0IGNoYW5nZSBrZXlzLgorY29uc3QgRXZlbnRGbGFncyBtb2RpZmllcl9m
bGFnc1tdID0geworICAgIEVGX1NISUZUX0RPV04sCisgICAgRUZfQ09OVFJPTF9ET1dOLAorICAg
IEVGX0FMVF9ET1dOLAorICAgIEVGX0NBUFNfTE9DS19PTiwKK307CisKK3N0YXRpYyB2b2lkIHNl
dE1vZGlmaWVyU3RhdGUoQllURSoga2V5Ym9hcmRfc3RhdGUsIGludCBmbGFncykKK3sKKyAgICAv
LyBBY2NvcmRpbmcgdG8gTVNETiBHZXRLZXlTdGF0ZSgpOgorICAgIC8vIDEuIElmIHRoZSBoaWdo
LW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIGRvd247IG90aGVyd2lzZSwgaXQgaXMgdXAuCisg
ICAgLy8gMi4gSWYgdGhlIGxvdy1vcmRlciBiaXQgaXMgMSwgdGhlIGtleSBpcyB0b2dnbGVkLiBB
IGtleSwgc3VjaCBhcyB0aGUKKyAgICAvLyAgICBDQVBTIExPQ0sga2V5LCBpcyB0b2dnbGVkIGlm
IGl0IGlzIHR1cm5lZCBvbi4gVGhlIGtleSBpcyBvZmYgYW5kCisgICAgLy8gICAgdW50b2dnbGVk
IGlmIHRoZSBsb3ctb3JkZXIgYml0IGlzIDAuCisgICAgLy8gU2VlIGh0dHBzOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjQ2MzAxLmFzcHgKKyAg
ICBpZiAoZmxhZ3MgJiBFRl9TSElGVF9ET1dOKQorICAgICAgICBrZXlib2FyZF9zdGF0ZVtWS19T
SElGVF0gfD0gMHg4MDsKKworICAgIGlmIChmbGFncyAmIEVGX0NPTlRST0xfRE9XTikKKyAgICAg
ICAga2V5Ym9hcmRfc3RhdGVbVktfQ09OVFJPTF0gfD0gMHg4MDsKKworICAgIGlmIChmbGFncyAm
IEVGX0FMVF9ET1dOKQorICAgICAgICBrZXlib2FyZF9zdGF0ZVtWS19NRU5VXSB8PSAweDgwOwor
CisgICAgaWYgKGZsYWdzICYgRUZfQ0FQU19MT0NLX09OKQorICAgICAgICBrZXlib2FyZF9zdGF0
ZVtWS19DQVBJVEFMXSB8PSAweDAxOworfQorCitjb25zdGV4cHIgaW50IGtDb250cm9sQW5kQWx0
RmxhZ3MgPSBFRl9DT05UUk9MX0RPV04gfCBFRl9BTFRfRE9XTjsKKworYm9vbCBIYXNDb250cm9s
QW5kQWx0KGludCBmbGFncykKK3sKKyAgICByZXR1cm4gKGZsYWdzICYga0NvbnRyb2xBbmRBbHRG
bGFncykgPT0ga0NvbnRyb2xBbmRBbHRGbGFnczsKK30KKworY29uc3QgaW50IGtNb2RpZmllckZs
YWdzQ29tYmluYXRpb25zID0gKDEgPDwgV1RGX0FSUkFZX0xFTkdUSChtb2RpZmllcl9mbGFncykp
IC0gMTsKKworaW50IEdldE1vZGlmaWVyRmxhZ3MoaW50IGNvbWJpbmF0aW9uKQoreworICAgIGlu
dCBmbGFncyA9IEVGX05PTkU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlf
TEVOR1RIKG1vZGlmaWVyX2ZsYWdzKTsgKytpKSB7CisgICAgICAgIGlmIChjb21iaW5hdGlvbiAm
ICgxIDw8IGkpKQorICAgICAgICAgICAgZmxhZ3MgfD0gbW9kaWZpZXJfZmxhZ3NbaV07CisgICAg
fQorICAgIHJldHVybiBmbGFnczsKK30KKworLy8gVGhpcyB0YWJsZSBtdXN0IGJlIHNvcnRlZCBi
eSB8dmlydHVhbEtleXwgZm9yIGJpbmFyeSBzZWFyY2guCitjb25zdCBzdHJ1Y3QgTm9uUHJpbnRh
YmxlS2V5RW50cnkgeworICAgIGludCB2aXJ0dWFsS2V5OworICAgIFN0cmluZyBkb21fa2V5Owor
fSBrTm9uUHJpbnRhYmxlS2V5TWFwW10gPSB7CisgICAgeyBWS19DQU5DRUwsICJDYW5jZWwiX3Mg
fSwKKyAgICB7IFZLX0JBQ0ssICJCYWNrc3BhY2UiX3MgfSwKKyAgICB7IFZLX1RBQiwgIlRhYiJf
cyB9LAorICAgIHsgVktfQ0xFQVIsICJDbGVhciJfcyB9LAorICAgIHsgVktfUkVUVVJOLCAiRW50
ZXIiX3MgfSwKKyAgICB7IFZLX1NISUZULCAiU2hpZnQiX3MgfSwKKyAgICB7IFZLX0NPTlRST0ws
ICJDb250cm9sIl9zIH0sCisgICAgeyBWS19NRU5VLCAiQWx0Il9zIH0sCisgICAgeyBWS19QQVVT
RSwgIlBhdXNlIl9zIH0sCisgICAgeyBWS19DQVBJVEFMLCAiQ2Fwc0xvY2siX3MgfSwKKyAgICAv
LyBWS19LQU5BID09IFZLX0hBTkdVTAorICAgIHsgVktfSlVOSkEsICJKdW5qYU1vZGUiX3MgfSwK
KyAgICB7IFZLX0ZJTkFMLCAiRklOQUxfTU9ERSJfcyB9LAorICAgIC8vIFZLX0hBTkpBID09IFZL
X0tBTkpJCisgICAgeyBWS19FU0NBUEUsICJFc2NhcGUiX3MgfSwKKyAgICB7IFZLX0NPTlZFUlQs
ICJDb252ZXJ0Il9zIH0sCisgICAgeyBWS19OT05DT05WRVJULCAiTm9uQ29udmVydCJfcyB9LAor
ICAgIHsgVktfQUNDRVBULCAiQWNjZXB0Il9zIH0sCisgICAgeyBWS19NT0RFQ0hBTkdFLCAiTW9k
ZUNoYW5nZSJfcyB9LAorICAgIC8vIFZLX1NQQUNFCisgICAgeyBWS19QUklPUiwgIlBhZ2VVcCJf
cyB9LAorICAgIHsgVktfTkVYVCwgIlBhZ2VEb3duIl9zIH0sCisgICAgeyBWS19FTkQsICJFbmQi
X3MgfSwKKyAgICB7IFZLX0hPTUUsICJIb21lIl9zIH0sCisgICAgeyBWS19MRUZULCAiQXJyb3dM
ZWZ0Il9zIH0sCisgICAgeyBWS19VUCwgIkFycm93VXAiX3MgfSwKKyAgICB7IFZLX1JJR0hULCAi
QXJyb3dSaWdodCJfcyB9LAorICAgIHsgVktfRE9XTiwgIkFycm93RG93biJfcyB9LAorICAgIHsg
VktfU0VMRUNULCAiU2VsZWN0Il9zIH0sCisgICAgeyBWS19QUklOVCwgIlByaW50Il9zIH0sCisg
ICAgeyBWS19FWEVDVVRFLCAiRXhlY3V0ZSJfcyB9LAorICAgIHsgVktfU05BUFNIT1QsICJQcmlu
dFNjcmVlbiJfcyB9LAorICAgIHsgVktfSU5TRVJULCAiSW5zZXJ0Il9zIH0sCisgICAgeyBWS19E
RUxFVEUsICJEZWwiX3MgfSwKKyAgICB7IFZLX0hFTFAsICJIZWxwIl9zIH0sCisgICAgLy8gVktf
MC4uOQorICAgIC8vIFZLX0EuLloKKyAgICB7IFZLX0xXSU4sICJNZXRhIl9zIH0sCisgICAgLy8g
VktfQ09NTUFORCA9PSBWS19MV0lOCisgICAgeyBWS19SV0lOLCAiTWV0YSJfcyB9LAorICAgIHsg
VktfQVBQUywgIkNvbnRleHRNZW51Il9zIH0sCisgICAgeyBWS19TTEVFUCwgIlN0YW5kYnkiX3Mg
fSwKKyAgICAvLyBWS19OVU1QQUQwLi45CisgICAgLy8gVktfTVVMVElQTFksIFZLX0FERCwgVktf
U0VQQVJBVE9SLCBWS19TVUJUUkFDVCwgVktfREVDSU1BTCwKKyAgICAvLyBWS19ESVZJREUKKyAg
ICB7IFZLX0YxLCAiRjEiX3MgfSwKKyAgICB7IFZLX0YyLCAiRjIiX3MgfSwKKyAgICB7IFZLX0Yz
LCAiRjMiX3MgfSwKKyAgICB7IFZLX0Y0LCAiRjQiX3MgfSwKKyAgICB7IFZLX0Y1LCAiRjUiX3Mg
fSwKKyAgICB7IFZLX0Y2LCAiRjYiX3MgfSwKKyAgICB7IFZLX0Y3LCAiRjciX3MgfSwKKyAgICB7
IFZLX0Y4LCAiRjgiX3MgfSwKKyAgICB7IFZLX0Y5LCAiRjkiX3MgfSwKKyAgICB7IFZLX0YxMCwg
IkYxMCJfcyB9LAorICAgIHsgVktfRjExLCAiRjExIl9zIH0sCisgICAgeyBWS19GMTIsICJGMTIi
X3MgfSwKKyAgICB7IFZLX0YxMywgIkYxMyJfcyB9LAorICAgIHsgVktfRjE0LCAiRjE0Il9zIH0s
CisgICAgeyBWS19GMTUsICJGMTUiX3MgfSwKKyAgICB7IFZLX0YxNiwgIkYxNiJfcyB9LAorICAg
IHsgVktfRjE3LCAiRjE3Il9zIH0sCisgICAgeyBWS19GMTgsICJGMTgiX3MgfSwKKyAgICB7IFZL
X0YxOSwgIkYxOSJfcyB9LAorICAgIHsgVktfRjIwLCAiRjIwIl9zIH0sCisgICAgeyBWS19GMjEs
ICJGMjEiX3MgfSwKKyAgICB7IFZLX0YyMiwgIkYyMiJfcyB9LAorICAgIHsgVktfRjIzLCAiRjIz
Il9zIH0sCisgICAgeyBWS19GMjQsICJGMjQiX3MgfSwKKyAgICB7IFZLX05VTUxPQ0ssICJOdW1M
b2NrIl9zIH0sCisgICAgeyBWS19TQ1JPTEwsICJTY3JvbGxMb2NrIl9zIH0sCisgICAgeyBWS19M
U0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfUlNISUZULCAiU2hpZnQiX3MgfSwKKyAgICB7
IFZLX0xDT05UUk9MLCAiQ29udHJvbCJfcyB9LAorICAgIHsgVktfUkNPTlRST0wsICJDb250cm9s
Il9zIH0sCisgICAgeyBWS19MTUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktfUk1FTlUsICJBbHQi
X3MgfSwKKyAgICB7IFZLX0JST1dTRVJfQkFDSywgIkJyb3dzZXJCYWNrIl9zIH0sCisgICAgeyBW
S19CUk9XU0VSX0ZPUldBUkQsICJCcm93c2VyRm9yd2FyZCJfcyB9LAorICAgIHsgVktfQlJPV1NF
Ul9SRUZSRVNILCAiQnJvd3NlclJlZnJlc2giX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfU1RPUCwg
IkJyb3dzZXJTdG9wIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX1NFQVJDSCwgIkJyb3dzZXJTZWFy
Y2giX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfRkFWT1JJVEVTLCAiQnJvd3NlckZhdm9yaXRlcyJf
cyB9LAorICAgIHsgVktfQlJPV1NFUl9IT01FLCAiQnJvd3NlckhvbWUiX3MgfSwKKyAgICB7IFZL
X1ZPTFVNRV9NVVRFLCAiQXVkaW9Wb2x1bWUiX3MgfSwKKyAgICB7IFZLX1ZPTFVNRV9ET1dOLCAi
QXVkaW9Wb2x1bWVEb3duIl9zIH0sCisgICAgeyBWS19WT0xVTUVfVVAsICJBdWRpb1ZvbHVtZVVw
Il9zIH0sCisgICAgeyBWS19NRURJQV9ORVhUX1RSQUNLLCAiTWVkaWFUcmFja05leHQiX3MgfSwK
KyAgICB7IFZLX01FRElBX1BSRVZfVFJBQ0ssICJNZWRpYVRyYWNrUHJldmlvdXMiX3MgfSwKKyAg
ICB7IFZLX01FRElBX1NUT1AsICJNZWRpYVN0b3AiX3MgfSwKKyAgICB7IFZLX01FRElBX1BMQVlf
UEFVU0UsICJNZWRpYVBsYXlQYXVzZSJfcyB9LAorICAgIC8veyBWS19NRURJQV9MQVVOQ0hfTUFJ
TCwgIkxhdW5jaE1haWwiX3MgfSwKKyAgICAvL3sgVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVD
VCwgIkxhdW5jaE1lZGlhUGxheWVyIl9zIH0sCisgICAgLy97IFZLX01FRElBX0xBVU5DSF9BUFAx
LCAiTGF1bmNoTXlDb21wdXRlciJfcyB9LAorICAgIC8veyBWS19NRURJQV9MQVVOQ0hfQVBQMiwg
IkxhdW5jaENhbGN1bGF0b3IiX3MgfSwKKyAgICAvLyBWS19PRU1fMS4uOCwgMTAyLCBQTFVTLCBD
T01NQSwgTUlOVVMsIFBFUklPRAorICAgIC8veyBWS19BTFRHUiwgIkFMVF9HUkFQSCJfcyB9LAor
ICAgIHsgVktfUFJPQ0VTU0tFWSwgIlByb2Nlc3MiX3MgfSwKKyAgICAvLyBWS19QQUNLRVQgLSBV
c2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyLCBjb25zaWRlcmVkIGFzIHByaW50YWJsZSBrZXkuCisg
ICAgeyBWS19BVFROLCAiQXR0biJfcyB9LAorICAgIHsgVktfQ1JTRUwsICJDclNlbCJfcyB9LAor
ICAgIHsgVktfRVhTRUwsICJFeFNlbCJfcyB9LAorICAgIHsgVktfRVJFT0YsICJFcmFzZUVvZiJf
cyB9LAorICAgIHsgVktfUExBWSwgIlBsYXkiX3MgfSwKKyAgICB7IFZLX1pPT00sICJab29tVG9n
Z2xlIl9zIH0sCisgICAgLy8gVE9ETyhpbnB1dC1kZXYpOiBIYW5kbGUgVktfTk9OQU1FLCBWS19Q
QTEuCisgICAgLy8gaHR0cHM6Ly9jcmJ1Zy5jb20vNjE2OTEwCisgICAgeyBWS19PRU1fQ0xFQVIs
ICJDbGVhciJfcyB9LAorfTsKKworLy8gRGlzYW1iaWd1YXRlcyB0aGUgbWVhbmluZyBvZiBjZXJ0
YWluIG5vbi1wcmludGFibGUga2V5cyB3aGljaCBoYXZlIGRpZmZlcmVudAorLy8gbWVhbmluZ3Mg
dW5kZXIgZGlmZmVyZW50IGxhbmd1YWdlcywgYnV0IHVzZSB0aGUgc2FtZSBWS0VZIGNvZGUuCitT
dHJpbmcgTGFuZ3VhZ2VTcGVjaWZpY09lbVZpcnR1YWxLZXlUb0RvbUtleShpbnQgdmlydHVhbEtl
eSwgSEtMIGxheW91dCkKK3sKKyAgICBXT1JEIGxhbmd1YWdlID0gTE9XT1JEKGxheW91dCk7Cisg
ICAgV09SRCBwcmltYXJ5X2xhbmd1YWdlID0gUFJJTUFSWUxBTkdJRChsYW5ndWFnZSk7CisgICAg
aWYgKHByaW1hcnlfbGFuZ3VhZ2UgPT0gTEFOR19LT1JFQU4pIHsKKyAgICAgICAgc3dpdGNoICh2
aXJ0dWFsS2V5KSB7CisgICAgICAgIGNhc2UgVktfSEFOR1VMOgorICAgICAgICAgICAgcmV0dXJu
ICJIYW5ndWxNb2RlIl9zOworICAgICAgICBjYXNlIFZLX0hBTkpBOgorICAgICAgICAgICAgcmV0
dXJuICJIYW5qYU1vZGUiX3M7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
bnVsbFN0cmluZygpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwcmltYXJ5X2xhbmd1YWdl
ID09IExBTkdfSkFQQU5FU0UpIHsKKyAgICAgICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAg
ICAgICAgICAvLyBWS19LQU5BIGlzbid0IGdlbmVyYXRlZCBieSBhbnkgbW9kZXJuIGxheW91dHMg
YnV0IGlzIGEgbGlzdGVkIHZhbHVlCisgICAgICAgICAgICAvLyB0aGF0IHRoaXJkLXBhcnR5IGFw
cHMgbWlnaHQgc3ludGhlc2l6ZSwgc28gd2UgaGFuZGxlIGl0IGFueXdheS4KKyAgICAgICAgY2Fz
ZSBWS19LQU5BOgorCisgICAgICAgIGNhc2UgVktfQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAi
S2FuYU1vZGUiX3M7CisgICAgICAgIGNhc2UgVktfS0FOSkk6CisgICAgICAgICAgICByZXR1cm4g
IkthbmppTW9kZSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fQVRUTjoKKyAgICAgICAgICAgIHJl
dHVybiAiQWxwaGFudW1lcmljIl9zOworICAgICAgICBjYXNlIFZLX09FTV9GSU5JU0g6CisgICAg
ICAgICAgICByZXR1cm4gIkthdGFrYW5hIl9zOworICAgICAgICBjYXNlIFZLX09FTV9DT1BZOgor
ICAgICAgICAgICAgcmV0dXJuICJIaXJhZ2FuYSJfczsKKyAgICAgICAgLy9jYXNlIFZLX0RCRV9T
QkNTQ0hBUjoKKyAgICAgICAgLy8gICAgcmV0dXJuICJIYW5rYWt1Il9zOworICAgICAgICAvL2Nh
c2UgVktfREJFX0RCQ1NDSEFSOgorICAgICAgICAvLyAgICByZXR1cm4gIlplbmtha3UiX3M7Cisg
ICAgICAgIGNhc2UgVktfT0VNX0JBQ0tUQUI6CisgICAgICAgICAgICByZXR1cm4gIlJvbWFqaSJf
czsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKK30KKworU3RyaW5nIE5v
blByaW50YWJsZVZpcnR1YWxLZXlUb0RvbUtleShpbnQgdmlydHVhbEtleSwgSEtMIGxheW91dCkK
K3sKKyAgICAvLyAxLiBDaGVjayBpZiB8dmlydHVhbEtleXwgaGFzIGEgfGxheW91dHwtc3BlY2lm
aWMgbWVhbmluZy4KKyAgICBjb25zdCBTdHJpbmcga2V5ID0gTGFuZ3VhZ2VTcGVjaWZpY09lbVZp
cnR1YWxLZXlUb0RvbUtleSh2aXJ0dWFsS2V5LCBsYXlvdXQpOworICAgIGlmICgha2V5LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAgLy8gMi4gTW9zdCB8dmlydHVhbEtleXN8
IGhhdmUgdGhlIHNhbWUgbWVhbmluZyByZWdhcmRsZXNzIG9mIHxsYXlvdXR8LgorICAgIGNvbnN0
IE5vblByaW50YWJsZUtleUVudHJ5KiByZXN1bHQgPSBzdGQ6Omxvd2VyX2JvdW5kKAorICAgICAg
ICBzdGQ6OmJlZ2luKGtOb25QcmludGFibGVLZXlNYXApLCBzdGQ6OmVuZChrTm9uUHJpbnRhYmxl
S2V5TWFwKSwgdmlydHVhbEtleSwKKyAgICAgICAgW10oY29uc3QgTm9uUHJpbnRhYmxlS2V5RW50
cnkmIGVudHJ5LCBpbnQgbmVlZGxlKSB7CisgICAgICAgICAgICByZXR1cm4gZW50cnkudmlydHVh
bEtleSA8IG5lZWRsZTsKKyAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdCAhPSBzdGQ6OmVuZChr
Tm9uUHJpbnRhYmxlS2V5TWFwKSAmJiByZXN1bHQtPnZpcnR1YWxLZXkgPT0gdmlydHVhbEtleSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZG9tX2tleTsKKworICAgIHJldHVybiBudWxsU3RyaW5n
KCk7Cit9CisKK1ZpcnR1YWxLZXlNYXA6OlZpcnR1YWxLZXlNYXAoKQoreworICAgIHVwZGF0ZUxh
eW91dCgpOworfQorCitTdHJpbmcgVmlydHVhbEtleU1hcDo6ZG9tS2V5RnJvbVZpcnR1YWxLZXko
aW50IHZpcnR1YWxLZXkpCit7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBpZiAoR2V0S2V5U3Rh
dGUoVktfU0hJRlQpIDwgMCkKKyAgICAgICAgZmxhZ3MgfD0gRUZfU0hJRlRfRE9XTjsKKyAgICBp
ZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgPCAwKQorICAgICAgICBmbGFncyB8PSBFRl9DT05U
Uk9MX0RPV047CisgICAgaWYgKEdldEtleVN0YXRlKFZLX01FTlUgKSA8IDApCisgICAgICAgIGZs
YWdzIHw9IEVGX0FMVF9ET1dOOworICAgIGlmIChHZXRLZXlTdGF0ZShWS19DQVBJVEFMKSAmIDEp
CisgICAgICAgIGZsYWdzIHw9IEVGX0NBUFNfTE9DS19PTjsKKworICAgIHVwZGF0ZUxheW91dCgp
OworICAgIC8vIFdpbmRvd3MgZXhwcmVzc2VzIHJpZ2h0LUFsdCBhcyBWS19NRU5VIHdpdGggdGhl
IGV4dGVuZGVkIGZsYWcgc2V0LgorICAgIC8vIFRoaXMga2V5IHNob3VsZCBnZW5lcmF0ZSBBbHRH
cmFwaCB1bmRlciBsYXlvdXRzIHdoaWNoIHVzZSB0aGF0IG1vZGlmaWVyLgorICAgIGlmICh2aXJ0
dWFsS2V5ID09IFZLX01FTlUgJiYgbV9oYXNBbHRHcmFwaCkKKyAgICAgICAgcmV0dXJuICJBbHRH
cmFwaCJfczsKKworICAgIFN0cmluZyBrZXkgPSBOb25QcmludGFibGVWaXJ0dWFsS2V5VG9Eb21L
ZXkodmlydHVhbEtleSwgbV9rZXlib2FyZExheW91dCk7CisgICAgaWYgKCFrZXkuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBjb25zdCBpbnQgZmxhZ3NfdG9fdHJ5W10gPSB7
CisgICAgICAgIC8vIFRyeWluZyB0byBtYXRjaCBGaXJlZm94J3MgYmVoYXZpb3IgYW5kIFVJRXZl
bnRzIERvbUtleSBndWlkZWxpbmVzLgorICAgICAgICAvLyBJZiB0aGUgY29tYmluYXRpb24gZG9l
c24ndCBwcm9kdWNlIGEgcHJpbnRhYmxlIGNoYXJhY3RlciwgdGhlIGtleSB2YWx1ZQorICAgICAg
ICAvLyBzaG91bGQgYmUgdGhlIGtleSB3aXRoIG5vIG1vZGlmaWVycyBleGNlcHQgZm9yIFNoaWZ0
IGFuZCBBbHRHci4KKyAgICAgICAgLy8gU2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50
cy8ja2V5cy1ndWlkZWxpbmVzCisgICAgICAgIGZsYWdzLAorICAgICAgICBmbGFncyAmIChFRl9T
SElGVF9ET1dOIHwgRUZfQ0FQU19MT0NLX09OKSwKKyAgICAgICAgRUZfTk9ORSwKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIHRyeV9mbGFncyA6IGZsYWdzX3RvX3RyeSkgeworICAgICAgICBjb25z
dCBhdXRvJiBpdCA9IG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LmZpbmQoCisgICAgICAgICAgICBz
dGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxLZXkpLCB0cnlfZmxhZ3MpKTsK
KyAgICAgICAgaWYgKGl0ICE9IG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LmVuZCgpKSB7CisgICAg
ICAgICAgICBrZXkgPSBpdC0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIWtleS5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4ga2V5OworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
d2UgZm91bmQgbm90aGluZyB3aXRoIG5vIGZsYWdzIHNldCwgdGhlcmUgaXMgbm90aGluZyBsZWZ0
IHRvIHRyeS4KKyAgICAgICAgaWYgKHRyeV9mbGFncyA9PSBFRl9OT05FKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgLy8gUmV0dXJuIERvbUtleTo6VU5JREVOVElGSUVEIHRvIHBy
ZXZlbnQgVVMgbGF5b3V0IGZhbGwtYmFjay4KKyAgICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsK
K30KKworYm9vbCBWaXJ0dWFsS2V5TWFwOjp1c2VzQWx0R3JhcGgoKQoreworICAgIHVwZGF0ZUxh
eW91dCgpOworICAgIHJldHVybiBtX2hhc0FsdEdyYXBoOworfQorCit2b2lkIFZpcnR1YWxLZXlN
YXA6OnVwZGF0ZUxheW91dCgpCit7CisgICAgSEtMIGN1cnJlbnRfbGF5b3V0ID0gR2V0S2V5Ym9h
cmRMYXlvdXQoMCk7CisgICAgaWYgKGN1cnJlbnRfbGF5b3V0ID09IG1fa2V5Ym9hcmRMYXlvdXQp
CisgICAgICAgIHJldHVybjsKKworICAgIEJZVEUga2V5Ym9hcmRfc3RhdGVfdG9fcmVzdG9yZVsy
NTZdOworICAgIGlmICghR2V0S2V5Ym9hcmRTdGF0ZShrZXlib2FyZF9zdGF0ZV90b19yZXN0b3Jl
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9rZXlib2FyZExheW91dCA9IGN1cnJlbnRfbGF5
b3V0OworICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LmNsZWFyKCk7CisgICAgbV9oYXNBbHRH
cmFwaCA9IGZhbHNlOworCisgICAgLy8gTWFwIHNpemUgZm9yIHNvbWUgc2FtcGxlIGtleWJvYXJk
IGxheW91dHM6CisgICAgLy8gVVM6IDQ3NiwgRnJlbmNoOiA2MDIsIFBlcnNpYW46IDQ4MiwgVmll
dG5hbWVzZTogMTQzNgorICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMTUwMCk7CisKKyAgICBmb3IgKGludCBtb2RpZmllcl9jb21iaW5hdGlvbiA9IDA7
CisgICAgICAgICBtb2RpZmllcl9jb21iaW5hdGlvbiA8PSBrTW9kaWZpZXJGbGFnc0NvbWJpbmF0
aW9uczsKKyAgICAgICAgICsrbW9kaWZpZXJfY29tYmluYXRpb24pIHsKKyAgICAgICAgQllURSBr
ZXlib2FyZF9zdGF0ZVsyNTZdOworICAgICAgICBtZW1zZXQoa2V5Ym9hcmRfc3RhdGUsIDAsIHNp
emVvZihrZXlib2FyZF9zdGF0ZSkpOworCisgICAgICAgIC8vIFNldHRpbmcgdXAga2V5Ym9hcmQg
c3RhdGUgZm9yIG1vZGlmaWVycy4KKyAgICAgICAgaW50IGZsYWdzID0gR2V0TW9kaWZpZXJGbGFn
cyhtb2RpZmllcl9jb21iaW5hdGlvbik7CisgICAgICAgIHNldE1vZGlmaWVyU3RhdGUoa2V5Ym9h
cmRfc3RhdGUsIGZsYWdzKTsKKworICAgICAgICBmb3IgKGludCB2aXJ0dWFsS2V5ID0gMDsgdmly
dHVhbEtleSA8PSAweEZGOyArK3ZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIHdjaGFyX3QgdHJh
bnNsYXRlZF9jaGFyc1s1XTsKKyAgICAgICAgICAgIGludCBydiA9IFRvVW5pY29kZUV4KHZpcnR1
YWxLZXksIDAsIGtleWJvYXJkX3N0YXRlLCB0cmFuc2xhdGVkX2NoYXJzLAorICAgICAgICAgICAg
ICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZF9jaGFycyksIDAsIG1fa2V5Ym9hcmRMYXlv
dXQpOworCisgICAgICAgICAgICBpZiAocnYgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBE
ZWFkIGtleSwgaW5qZWN0aW5nIFZLX1NQQUNFIHRvIGdldCBjaGFyYWN0ZXIgcmVwcmVzZW50YXRp
b24uCisgICAgICAgICAgICAgICAgQllURSBlbXB0eV9zdGF0ZVsyNTZdOworICAgICAgICAgICAg
ICAgIG1lbXNldChlbXB0eV9zdGF0ZSwgMCwgc2l6ZW9mKGVtcHR5X3N0YXRlKSk7CisgICAgICAg
ICAgICAgICAgcnYgPSBUb1VuaWNvZGVFeChWS19TUEFDRSwgMCwgZW1wdHlfc3RhdGUsIHRyYW5z
bGF0ZWRfY2hhcnMsCisgICAgICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNs
YXRlZF9jaGFycyksIDAsIG1fa2V5Ym9hcmRMYXlvdXQpOworICAgICAgICAgICAgICAgIC8vIEV4
cGVjdGluZyBhIGRlYWQga2V5IGNoYXJhY3RlciAobm90IGZvbGxvd2VkIGJ5IGEgc3BhY2UpLgor
ICAgICAgICAgICAgICAgIGlmIChydiA9PSAxKQorICAgICAgICAgICAgICAgICAgICBtX3ByaW50
YWJsZUtleUNvZGVUb0tleS5zZXQoc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0
dWFsS2V5KSwgZmxhZ3MpLCAiRGVhZCJfcyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJ2ID09
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZF9jaGFyc1swXSA+PSAweDIwKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnNldChzdGQ6Om1h
a2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxLZXkpLCBmbGFncyksIFN0cmluZyh0cmFu
c2xhdGVkX2NoYXJzLCAxKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0IHdoZXRo
ZXIgdGhlIGxheW91dCBtYWtlcyB1c2Ugb2YgQWx0R3JhcGguCisgICAgICAgICAgICAgICAgICAg
IGlmIChIYXNDb250cm9sQW5kQWx0KGZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aGFzQWx0R3JhcGggPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBTZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkX3N0YXRlX3RvX3Jl
c3RvcmUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1
YWxLZXlNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIyN2JhYWRkYjM1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAu
aApAQCAtMCwwICsxLDU4IEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
Ky8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNz
IFZpcnR1YWxLZXlNYXAgeworcHVibGljOgorICAgIFZpcnR1YWxLZXlNYXAoKTsKKworICAgIC8v
IFJldHVybnMgdGhlIERPTSBLZXlib2FyZEV2ZW50IGtleSBmcm9tIHxWaXJ0dWFsS2V5fCt8RXZl
bnRGbGFnc3wgYW5kCisgICAgLy8gdGhlIGtleWJvYXJkIGxheW91dCBvZiBjdXJyZW50IHRocmVh
ZC4gSWYgdGhpcyBpcyBhbiBBbHRHcmFwaCBtb2RpZmllZAorICAgIC8vIGtleSB0aGVuIHxmbGFn
c3wgd2lsbCBoYXZlIENvbnRyb2wrQWx0IHJlbW92ZWQsIGFuZCBBbHRHcmFwaCBzZXQuCisgICAg
Ly8gVXBkYXRlcyBhIHBlci10aHJlYWQga2V5IG1hcCBjYWNoZSB3aGVuZXZlciB0aGUgbGF5b3V0
IGNoYW5nZXMuCisgICAgU3RyaW5nIGRvbUtleUZyb21WaXJ0dWFsS2V5KGludCB2aXJ0dWFsS2V5
KTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudGx5LWFjdGl2ZSBrZXltYXAg
dXNlcyBBbHRHcmFwaCBzaGlmdC4KKyAgICBib29sIHVzZXNBbHRHcmFwaCgpOworCitwcml2YXRl
OgorICAgIHZvaWQgdXBkYXRlTGF5b3V0KCk7CisKKyAgICBIS0wgbV9rZXlib2FyZExheW91dCA9
IDA7CisKKyAgICAvLyBUcnVlIGlmIHxtX2tleWJvYXJkTGF5b3V0fCBtYWtlcyB1c2Ugb2YgdGhl
IEFsdEdyYXBoIG1vZGlmaWVyLgorICAgIGJvb2wgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50IC8qVmlydHVhbEtleSovLCBpbnQgLypFdmVudEZsYWdz
Ki8+IFZpcnR1YWxLZXlFdmVudEZsYWdzUGFpcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8VmlydHVh
bEtleUV2ZW50RmxhZ3NQYWlyLCBTdHJpbmc+IFZpcnR1YWxLZXlUb0tleU1hcDsKKyAgICBWaXJ0
dWFsS2V5VG9LZXlNYXAgbV9wcmludGFibGVLZXlDb2RlVG9LZXk7Cit9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382816</attachid>
            <date>2019-11-05 03:27:07 -0800</date>
            <delta_ts>2019-11-06 20:23:28 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>21695</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDA2ZmQwODJmMzUzLi5hZWM4NzIxYWVmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC03MTksMTEgKzcxOSwxMSBAQCB0aGUgcHVibGljIGlP
UyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTc5MTY3Pi4gKi8KICNlbmRpZgogCiAj
aWYgIWRlZmluZWQoRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJM
RV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDAKKyNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9B
VFRSSUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfS0VZQk9BUkRfQ09ERV9B
VFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAwCisjZGVm
aW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZp
bmVkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRl
eCBhMmQxZmE2ODkxYy4uYTY2N2E4NmQzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBA
IC0xMDIsNiArMTAyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vd2luL1N0cnVjdHVyZWRFeGNlcHRpb25IYW5kbGVyU3VwcHJlc3Nvci5jcHAKICAgICBwbGF0
Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKICAgICBwbGF0Zm9ybS93aW4vVXNlckFnZW50V2luLmNw
cAorICAgIHBsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcAogICAgIHBsYXRmb3JtL3dpbi9X
Q0RhdGFPYmplY3QuY3BwCiAgICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uY3BwCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5jcHAKQEAgLTEzOCw2ICsxMzks
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaAogICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQ
b3B1cE1lbnVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKKyAgICBwbGF0Zm9y
bS93aW4vVmlydHVhbEtleU1hcC5oCiAgICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5oCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9XZWJD
b3JlSW5zdGFuY2VIYW5kbGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVu
dFdpbi5jcHAKaW5kZXggYjIzNTZjNWY0ZmMuLjY2YjI3NDU2Njc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2lu
Y2x1ZGUgIlZpcnR1YWxLZXlNYXAuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0yMTgsMTAg
KzIxOSwzOSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNo
YXIgYykKICAgICByZXR1cm4gU3RyaW5nKCZjLCAxKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIHNj
YW5Db2RlRnJvbUxQYXJhbShMUEFSQU0gbFBhcmFtKQoreworICAgIHJldHVybiAobFBhcmFtID4+
IDE2KSAmIDI1NTsKK30KKworc3RhdGljIFZpcnR1YWxLZXlNYXAmIHZpcnR1YWxLZXlNYXAoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWaXJ0dWFsS2V5TWFwPiBrZXlNYXA7CisgICAg
cmV0dXJuIGtleU1hcDsKK30KKworc3RhdGljIFN0cmluZyBrZXlGb3JLZXlFdmVudChQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OlR5cGUgdHlwZSwgV1BBUkFNIHdQYXJhbSkKK3sKKyAgICBpZiAodHlw
ZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKQorICAgICAgICByZXR1cm4gdmlydHVhbEtleU1hcCgp
LmRvbUtleUZyb21DaGFyKHdQYXJhbSk7CisgICAgcmV0dXJuIHZpcnR1YWxLZXlNYXAoKS5kb21L
ZXlGcm9tVmlydHVhbEtleSh3UGFyYW0pOworfQorCitzdGF0aWMgU3RyaW5nIGNvZGVGb3JLZXlF
dmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlR5cGUgdHlwZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKSB7Cisg
ICAgICAgIGF1dG8gc2NhbkNvZGUgPSBzY2FuQ29kZUZyb21MUGFyYW0obFBhcmFtKTsKKyAgICAg
ICAgd1BhcmFtID0gTWFwVmlydHVhbEtleShzY2FuQ29kZSwgTUFQVktfVlNDX1RPX1ZLKTsKKyAg
ICB9CisgICAgcmV0dXJuIHZpcnR1YWxLZXlNYXAoKS5kb21Db2RlRnJvbVZpcnR1YWxLZXkod1Bh
cmFtKTsKK30KKwogUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQo
SFdORCwgV1BBUkFNIGNvZGUsIExQQVJBTSBrZXlEYXRhLCBUeXBlIHR5cGUsIGJvb2wgc3lzdGVt
S2V5KQogICAgIDogUGxhdGZvcm1FdmVudCh0eXBlLCBHZXRLZXlTdGF0ZShWS19TSElGVCkgJiBI
SUdIX0JJVF9NQVNLX1NIT1JULCBHZXRLZXlTdGF0ZShWS19DT05UUk9MKSAmIEhJR0hfQklUX01B
U0tfU0hPUlQsIEdldEtleVN0YXRlKFZLX01FTlUpICYgSElHSF9CSVRfTUFTS19TSE9SVCwgZmFs
c2UsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyg6OkdldFRpY2tDb3VudCgpICogMC4wMDEpKQog
ICAgICwgbV90ZXh0KCh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkpCiAgICAgLCBtX3VubW9kaWZpZWRUZXh0KCh0eXBl
ID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGNvZGUpIDog
U3RyaW5nKCkpCisgICAgLCBtX2tleShrZXlGb3JLZXlFdmVudCh0eXBlLCBjb2RlKSkKKyAgICAs
IG1fY29kZShjb2RlRm9yS2V5RXZlbnQodHlwZSwgY29kZSwga2V5RGF0YSkpCiAgICAgLCBtX2tl
eUlkZW50aWZpZXIoKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhcikgPyBTdHJpbmcoKSA6IGtl
eUlkZW50aWZpZXJGb3JXaW5kb3dzS2V5Q29kZShjb2RlKSkKICAgICAsIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlKCh0eXBlID09IFJhd0tleURvd24gfHwgdHlwZSA9PSBLZXlVcCkgPyB3aW5kb3dz
S2V5Y29kZVdpdGhMb2NhdGlvbihjb2RlLCBrZXlEYXRhKSA6IDApCiAgICAgLCBtX2F1dG9SZXBl
YXQoSElXT1JEKGtleURhdGEpICYgS0ZfUkVQRUFUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1ZpcnR1YWxLZXlNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi43MWFmODdmMWM4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcApAQCAtMCwwICsxLDQ1MCBAQAorLy8gQ29weXJp
Z2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLwor
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmli
dXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
Ky8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWaXJ0dWFsS2V5TWFwLmgiCisKK3R5cGVkZWYgZW51bSA6IHVpbnQ4X3Qg
eworICAgIEVGX05PTkUgPSAwLAorICAgIEVGX1NISUZUX0RPV04gPSAxIDw8IDAsCisgICAgRUZf
Q09OVFJPTF9ET1dOID0gMSA8PCAxLAorICAgIEVGX0FMVF9ET1dOID0gMSA8PCAyLAorICAgIEVG
X0NBUFNfTE9DS19PTiA9IDEgPDwgMywKK30gRXZlbnRGbGFnczsKKworY29uc3RleHByIEV2ZW50
RmxhZ3MgY01vZGlmaWVyRmxhZ3NbXSA9IHsKKyAgICBFRl9TSElGVF9ET1dOLAorICAgIEVGX0NP
TlRST0xfRE9XTiwKKyAgICBFRl9BTFRfRE9XTiwKKyAgICBFRl9DQVBTX0xPQ0tfT04sCit9Owor
CitzdGF0aWMgdm9pZCBzZXRNb2RpZmllclN0YXRlKEJZVEUqIGtleWJvYXJkU3RhdGUsIGludCBm
bGFncykKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gTVNETiBHZXRLZXlTdGF0ZSgpOgorICAgIC8v
IDEuIElmIHRoZSBoaWdoLW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIGRvd247IG90aGVyd2lz
ZSwgaXQgaXMgdXAuCisgICAgLy8gMi4gSWYgdGhlIGxvdy1vcmRlciBiaXQgaXMgMSwgdGhlIGtl
eSBpcyB0b2dnbGVkLiBBIGtleSwgc3VjaCBhcyB0aGUKKyAgICAvLyAgICBDQVBTIExPQ0sga2V5
LCBpcyB0b2dnbGVkIGlmIGl0IGlzIHR1cm5lZCBvbi4gVGhlIGtleSBpcyBvZmYgYW5kCisgICAg
Ly8gICAgdW50b2dnbGVkIGlmIHRoZSBsb3ctb3JkZXIgYml0IGlzIDAuCisgICAgLy8gU2VlIGh0
dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21z
NjQ2MzAxLmFzcHgKKyAgICBpZiAoZmxhZ3MgJiBFRl9TSElGVF9ET1dOKQorICAgICAgICBrZXli
b2FyZFN0YXRlW1ZLX1NISUZUXSB8PSAweDgwOworCisgICAgaWYgKGZsYWdzICYgRUZfQ09OVFJP
TF9ET1dOKQorICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX0NPTlRST0xdIHw9IDB4ODA7CisKKyAg
ICBpZiAoZmxhZ3MgJiBFRl9BTFRfRE9XTikKKyAgICAgICAga2V5Ym9hcmRTdGF0ZVtWS19NRU5V
XSB8PSAweDgwOworCisgICAgaWYgKGZsYWdzICYgRUZfQ0FQU19MT0NLX09OKQorICAgICAgICBr
ZXlib2FyZFN0YXRlW1ZLX0NBUElUQUxdIHw9IDB4MDE7Cit9CisKK2NvbnN0ZXhwciBpbnQga0Nv
bnRyb2xBbmRBbHRGbGFncyA9IEVGX0NPTlRST0xfRE9XTiB8IEVGX0FMVF9ET1dOOworCitzdGF0
aWMgYm9vbCBoYXNDb250cm9sQW5kQWx0KGludCBmbGFncykKK3sKKyAgICByZXR1cm4gKGZsYWdz
ICYga0NvbnRyb2xBbmRBbHRGbGFncykgPT0ga0NvbnRyb2xBbmRBbHRGbGFnczsKK30KKworY29u
c3RleHByIGludCBjTW9kaWZpZXJGbGFnc0NvbWJpbmF0aW9ucyA9ICgxIDw8IFdURl9BUlJBWV9M
RU5HVEgoY01vZGlmaWVyRmxhZ3MpKSAtIDE7CisKK3N0YXRpYyBpbnQgZ2V0TW9kaWZpZXJGbGFn
cyhpbnQgY29tYmluYXRpb24pCit7CisgICAgaW50IGZsYWdzID0gRUZfTk9ORTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoY01vZGlmaWVyRmxhZ3MpOyArK2kp
IHsKKyAgICAgICAgaWYgKGNvbWJpbmF0aW9uICYgKDEgPDwgaSkpCisgICAgICAgICAgICBmbGFn
cyB8PSBjTW9kaWZpZXJGbGFnc1tpXTsKKyAgICB9CisgICAgcmV0dXJuIGZsYWdzOworfQorCisv
LyBUaGlzIHRhYmxlIG11c3QgYmUgc29ydGVkIGJ5IHx2aXJ0dWFsS2V5fCBmb3IgYmluYXJ5IHNl
YXJjaC4KK2NvbnN0ZXhwciBzdHJ1Y3QgTm9uUHJpbnRhYmxlS2V5RW50cnkgeworICAgIGludCB2
aXJ0dWFsS2V5OworICAgIEFTQ0lJTGl0ZXJhbCBkb21LZXk7Cit9IGtOb25QcmludGFibGVLZXlN
YXBbXSA9IHsKKyAgICB7IFZLX0NBTkNFTCwgIkNhbmNlbCJfcyB9LAorICAgIHsgVktfQkFDSywg
IkJhY2tzcGFjZSJfcyB9LAorICAgIHsgVktfVEFCLCAiVGFiIl9zIH0sCisgICAgeyBWS19DTEVB
UiwgIkNsZWFyIl9zIH0sCisgICAgeyBWS19SRVRVUk4sICJFbnRlciJfcyB9LAorICAgIHsgVktf
U0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAg
ICB7IFZLX01FTlUsICJBbHQiX3MgfSwKKyAgICB7IFZLX1BBVVNFLCAiUGF1c2UiX3MgfSwKKyAg
ICB7IFZLX0NBUElUQUwsICJDYXBzTG9jayJfcyB9LAorICAgIC8vIFZLX0tBTkEgPT0gVktfSEFO
R1VMCisgICAgeyBWS19KVU5KQSwgIkp1bmphTW9kZSJfcyB9LAorICAgIHsgVktfRklOQUwsICJG
SU5BTF9NT0RFIl9zIH0sCisgICAgLy8gVktfSEFOSkEgPT0gVktfS0FOSkkKKyAgICB7IFZLX0VT
Q0FQRSwgIkVzY2FwZSJfcyB9LAorICAgIHsgVktfQ09OVkVSVCwgIkNvbnZlcnQiX3MgfSwKKyAg
ICB7IFZLX05PTkNPTlZFUlQsICJOb25Db252ZXJ0Il9zIH0sCisgICAgeyBWS19BQ0NFUFQsICJB
Y2NlcHQiX3MgfSwKKyAgICB7IFZLX01PREVDSEFOR0UsICJNb2RlQ2hhbmdlIl9zIH0sCisgICAg
Ly8gVktfU1BBQ0UKKyAgICB7IFZLX1BSSU9SLCAiUGFnZVVwIl9zIH0sCisgICAgeyBWS19ORVhU
LCAiUGFnZURvd24iX3MgfSwKKyAgICB7IFZLX0VORCwgIkVuZCJfcyB9LAorICAgIHsgVktfSE9N
RSwgIkhvbWUiX3MgfSwKKyAgICB7IFZLX0xFRlQsICJBcnJvd0xlZnQiX3MgfSwKKyAgICB7IFZL
X1VQLCAiQXJyb3dVcCJfcyB9LAorICAgIHsgVktfUklHSFQsICJBcnJvd1JpZ2h0Il9zIH0sCisg
ICAgeyBWS19ET1dOLCAiQXJyb3dEb3duIl9zIH0sCisgICAgeyBWS19TRUxFQ1QsICJTZWxlY3Qi
X3MgfSwKKyAgICB7IFZLX1BSSU5ULCAiUHJpbnQiX3MgfSwKKyAgICB7IFZLX0VYRUNVVEUsICJF
eGVjdXRlIl9zIH0sCisgICAgeyBWS19TTkFQU0hPVCwgIlByaW50U2NyZWVuIl9zIH0sCisgICAg
eyBWS19JTlNFUlQsICJJbnNlcnQiX3MgfSwKKyAgICB7IFZLX0RFTEVURSwgIkRlbGV0ZSJfcyB9
LAorICAgIHsgVktfSEVMUCwgIkhlbHAiX3MgfSwKKyAgICAvLyBWS18wLi45CisgICAgLy8gVktf
QS4uWgorICAgIHsgVktfTFdJTiwgIk1ldGEiX3MgfSwKKyAgICAvLyBWS19DT01NQU5EID09IFZL
X0xXSU4KKyAgICB7IFZLX1JXSU4sICJNZXRhIl9zIH0sCisgICAgeyBWS19BUFBTLCAiQ29udGV4
dE1lbnUiX3MgfSwKKyAgICB7IFZLX1NMRUVQLCAiU3RhbmRieSJfcyB9LAorICAgIC8vIFZLX05V
TVBBRDAuLjkKKyAgICAvLyBWS19NVUxUSVBMWSwgVktfQURELCBWS19TRVBBUkFUT1IsIFZLX1NV
QlRSQUNULCBWS19ERUNJTUFMLAorICAgIC8vIFZLX0RJVklERQorICAgIHsgVktfRjEsICJGMSJf
cyB9LAorICAgIHsgVktfRjIsICJGMiJfcyB9LAorICAgIHsgVktfRjMsICJGMyJfcyB9LAorICAg
IHsgVktfRjQsICJGNCJfcyB9LAorICAgIHsgVktfRjUsICJGNSJfcyB9LAorICAgIHsgVktfRjYs
ICJGNiJfcyB9LAorICAgIHsgVktfRjcsICJGNyJfcyB9LAorICAgIHsgVktfRjgsICJGOCJfcyB9
LAorICAgIHsgVktfRjksICJGOSJfcyB9LAorICAgIHsgVktfRjEwLCAiRjEwIl9zIH0sCisgICAg
eyBWS19GMTEsICJGMTEiX3MgfSwKKyAgICB7IFZLX0YxMiwgIkYxMiJfcyB9LAorICAgIHsgVktf
RjEzLCAiRjEzIl9zIH0sCisgICAgeyBWS19GMTQsICJGMTQiX3MgfSwKKyAgICB7IFZLX0YxNSwg
IkYxNSJfcyB9LAorICAgIHsgVktfRjE2LCAiRjE2Il9zIH0sCisgICAgeyBWS19GMTcsICJGMTci
X3MgfSwKKyAgICB7IFZLX0YxOCwgIkYxOCJfcyB9LAorICAgIHsgVktfRjE5LCAiRjE5Il9zIH0s
CisgICAgeyBWS19GMjAsICJGMjAiX3MgfSwKKyAgICB7IFZLX0YyMSwgIkYyMSJfcyB9LAorICAg
IHsgVktfRjIyLCAiRjIyIl9zIH0sCisgICAgeyBWS19GMjMsICJGMjMiX3MgfSwKKyAgICB7IFZL
X0YyNCwgIkYyNCJfcyB9LAorICAgIHsgVktfTlVNTE9DSywgIk51bUxvY2siX3MgfSwKKyAgICB7
IFZLX1NDUk9MTCwgIlNjcm9sbExvY2siX3MgfSwKKyAgICB7IFZLX0xTSElGVCwgIlNoaWZ0Il9z
IH0sCisgICAgeyBWS19SU0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfTENPTlRST0wsICJD
b250cm9sIl9zIH0sCisgICAgeyBWS19SQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZL
X0xNRU5VLCAiQWx0Il9zIH0sCisgICAgeyBWS19STUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktf
QlJPV1NFUl9CQUNLLCAiQnJvd3NlckJhY2siX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfRk9SV0FS
RCwgIkJyb3dzZXJGb3J3YXJkIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX1JFRlJFU0gsICJCcm93
c2VyUmVmcmVzaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9TVE9QLCAiQnJvd3NlclN0b3AiX3Mg
fSwKKyAgICB7IFZLX0JST1dTRVJfU0VBUkNILCAiQnJvd3NlclNlYXJjaCJfcyB9LAorICAgIHsg
VktfQlJPV1NFUl9GQVZPUklURVMsICJCcm93c2VyRmF2b3JpdGVzIl9zIH0sCisgICAgeyBWS19C
Uk9XU0VSX0hPTUUsICJCcm93c2VySG9tZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX01VVEUsICJB
dWRpb1ZvbHVtZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX0RPV04sICJBdWRpb1ZvbHVtZURvd24i
X3MgfSwKKyAgICB7IFZLX1ZPTFVNRV9VUCwgIkF1ZGlvVm9sdW1lVXAiX3MgfSwKKyAgICB7IFZL
X01FRElBX05FWFRfVFJBQ0ssICJNZWRpYVRyYWNrTmV4dCJfcyB9LAorICAgIHsgVktfTUVESUFf
UFJFVl9UUkFDSywgIk1lZGlhVHJhY2tQcmV2aW91cyJfcyB9LAorICAgIHsgVktfTUVESUFfU1RP
UCwgIk1lZGlhU3RvcCJfcyB9LAorICAgIHsgVktfTUVESUFfUExBWV9QQVVTRSwgIk1lZGlhUGxh
eVBhdXNlIl9zIH0sCisgICAgLy8geyBWS19NRURJQV9MQVVOQ0hfTUFJTCwgIkxhdW5jaE1haWwi
X3MgfSwKKyAgICAvLyB7IFZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QsICJMYXVuY2hNZWRp
YVBsYXllciJfcyB9LAorICAgIC8vIHsgVktfTUVESUFfTEFVTkNIX0FQUDEsICJMYXVuY2hNeUNv
bXB1dGVyIl9zIH0sCisgICAgLy8geyBWS19NRURJQV9MQVVOQ0hfQVBQMiwgIkxhdW5jaENhbGN1
bGF0b3IiX3MgfSwKKyAgICAvLyBWS19PRU1fMS4uOCwgMTAyLCBQTFVTLCBDT01NQSwgTUlOVVMs
IFBFUklPRAorICAgIC8vIHsgVktfQUxUR1IsICJBTFRfR1JBUEgiX3MgfSwKKyAgICB7IFZLX1BS
T0NFU1NLRVksICJQcm9jZXNzIl9zIH0sCisgICAgLy8gVktfUEFDS0VUIC0gVXNlZCB0byBwYXNz
IFVuaWNvZGUgY2hhciwgY29uc2lkZXJlZCBhcyBwcmludGFibGUga2V5LgorICAgIHsgVktfQVRU
TiwgIkF0dG4iX3MgfSwKKyAgICB7IFZLX0NSU0VMLCAiQ3JTZWwiX3MgfSwKKyAgICB7IFZLX0VY
U0VMLCAiRXhTZWwiX3MgfSwKKyAgICB7IFZLX0VSRU9GLCAiRXJhc2VFb2YiX3MgfSwKKyAgICB7
IFZLX1BMQVksICJQbGF5Il9zIH0sCisgICAgeyBWS19aT09NLCAiWm9vbVRvZ2dsZSJfcyB9LAor
ICAgIC8vIFRPRE8oaW5wdXQtZGV2KTogSGFuZGxlIFZLX05PTkFNRSwgVktfUEExLgorICAgIC8v
IGh0dHBzOi8vY3JidWcuY29tLzYxNjkxMAorICAgIHsgVktfT0VNX0NMRUFSLCAiQ2xlYXIiX3Mg
fSwKK307CisKKy8vIERpc2FtYmlndWF0ZXMgdGhlIG1lYW5pbmcgb2YgY2VydGFpbiBub24tcHJp
bnRhYmxlIGtleXMgd2hpY2ggaGF2ZSBkaWZmZXJlbnQKKy8vIG1lYW5pbmdzIHVuZGVyIGRpZmZl
cmVudCBsYW5ndWFnZXMsIGJ1dCB1c2UgdGhlIHNhbWUgVktFWSBjb2RlLgorU3RyaW5nIExhbmd1
YWdlU3BlY2lmaWNPZW1WaXJ0dWFsS2V5VG9Eb21LZXkoaW50IHZpcnR1YWxLZXksIEhLTCBsYXlv
dXQpCit7CisgICAgV09SRCBsYW5ndWFnZSA9IExPV09SRChsYXlvdXQpOworICAgIFdPUkQgcHJp
bWFyeUxhbmd1YWdlID0gUFJJTUFSWUxBTkdJRChsYW5ndWFnZSk7CisgICAgaWYgKHByaW1hcnlM
YW5ndWFnZSA9PSBMQU5HX0tPUkVBTikgeworICAgICAgICBzd2l0Y2ggKHZpcnR1YWxLZXkpIHsK
KyAgICAgICAgY2FzZSBWS19IQU5HVUw6CisgICAgICAgICAgICByZXR1cm4gIkhhbmd1bE1vZGUi
X3M7CisgICAgICAgIGNhc2UgVktfSEFOSkE6CisgICAgICAgICAgICByZXR1cm4gIkhhbmphTW9k
ZSJfczsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHByaW1hcnlMYW5ndWFnZSA9PSBMQU5HX0pBUEFO
RVNFKSB7CisgICAgICAgIHN3aXRjaCAodmlydHVhbEtleSkgeworICAgICAgICAgICAgLy8gVktf
S0FOQSBpc24ndCBnZW5lcmF0ZWQgYnkgYW55IG1vZGVybiBsYXlvdXRzIGJ1dCBpcyBhIGxpc3Rl
ZCB2YWx1ZQorICAgICAgICAgICAgLy8gdGhhdCB0aGlyZC1wYXJ0eSBhcHBzIG1pZ2h0IHN5bnRo
ZXNpemUsIHNvIHdlIGhhbmRsZSBpdCBhbnl3YXkuCisgICAgICAgIGNhc2UgVktfS0FOQToKKwor
ICAgICAgICBjYXNlIFZLX0FUVE46CisgICAgICAgICAgICByZXR1cm4gIkthbmFNb2RlIl9zOwor
ICAgICAgICBjYXNlIFZLX0tBTkpJOgorICAgICAgICAgICAgcmV0dXJuICJLYW5qaU1vZGUiX3M7
CisgICAgICAgIGNhc2UgVktfT0VNX0FUVE46CisgICAgICAgICAgICByZXR1cm4gIkFscGhhbnVt
ZXJpYyJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fRklOSVNIOgorICAgICAgICAgICAgcmV0dXJu
ICJLYXRha2FuYSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fQ09QWToKKyAgICAgICAgICAgIHJl
dHVybiAiSGlyYWdhbmEiX3M7CisgICAgICAgIC8vIGNhc2UgVktfREJFX1NCQ1NDSEFSOgorICAg
ICAgICAvLyAgICAgcmV0dXJuICJIYW5rYWt1Il9zOworICAgICAgICAvLyBjYXNlIFZLX0RCRV9E
QkNTQ0hBUjoKKyAgICAgICAgLy8gICAgIHJldHVybiAiWmVua2FrdSJfczsKKyAgICAgICAgY2Fz
ZSBWS19PRU1fQkFDS1RBQjoKKyAgICAgICAgICAgIHJldHVybiAiUm9tYWppIl9zOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gbnVsbFN0cmluZygpOworfQorCitTdHJpbmcgTm9uUHJpbnRhYmxl
VmlydHVhbEtleVRvRG9tS2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIC8v
IDEuIENoZWNrIGlmIHx2aXJ0dWFsS2V5fCBoYXMgYSB8bGF5b3V0fC1zcGVjaWZpYyBtZWFuaW5n
LgorICAgIGNvbnN0IFN0cmluZyBrZXkgPSBMYW5ndWFnZVNwZWNpZmljT2VtVmlydHVhbEtleVRv
RG9tS2V5KHZpcnR1YWxLZXksIGxheW91dCk7CisgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBrZXk7CisKKyAgICAvLyAyLiBNb3N0IHx2aXJ0dWFsS2V5c3wgaGF2ZSB0aGUg
c2FtZSBtZWFuaW5nIHJlZ2FyZGxlc3Mgb2YgfGxheW91dHwuCisgICAgY29uc3QgTm9uUHJpbnRh
YmxlS2V5RW50cnkqIHJlc3VsdCA9IHN0ZDo6bG93ZXJfYm91bmQoCisgICAgICAgIHN0ZDo6YmVn
aW4oa05vblByaW50YWJsZUtleU1hcCksIHN0ZDo6ZW5kKGtOb25QcmludGFibGVLZXlNYXApLCB2
aXJ0dWFsS2V5LAorICAgICAgICBbXShjb25zdCBOb25QcmludGFibGVLZXlFbnRyeSYgZW50cnks
IGludCBuZWVkbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS52aXJ0dWFsS2V5IDwgbmVl
ZGxlOworICAgICAgICB9KTsKKyAgICBpZiAocmVzdWx0ICE9IHN0ZDo6ZW5kKGtOb25QcmludGFi
bGVLZXlNYXApICYmIHJlc3VsdC0+dmlydHVhbEtleSA9PSB2aXJ0dWFsS2V5KQorICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5kb21LZXk7CisKKyAgICByZXR1cm4gbnVsbFN0cmluZygpOworfQorCitW
aXJ0dWFsS2V5TWFwOjpWaXJ0dWFsS2V5TWFwKCkKK3sKKyAgICB1cGRhdGVMYXlvdXQoKTsKK30K
KworU3RyaW5nIFZpcnR1YWxLZXlNYXA6OmRvbUtleUZyb21WaXJ0dWFsS2V5KGludCB2aXJ0dWFs
S2V5KQoreworICAgIGludCBmbGFncyA9IDA7CisgICAgaWYgKEdldEtleVN0YXRlKFZLX1NISUZU
KSA8IDApCisgICAgICAgIGZsYWdzIHw9IEVGX1NISUZUX0RPV047CisgICAgaWYgKEdldEtleVN0
YXRlKFZLX0NPTlRST0wpIDwgMCkKKyAgICAgICAgZmxhZ3MgfD0gRUZfQ09OVFJPTF9ET1dOOwor
ICAgIGlmIChHZXRLZXlTdGF0ZShWS19NRU5VICkgPCAwKQorICAgICAgICBmbGFncyB8PSBFRl9B
TFRfRE9XTjsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ0FQSVRBTCkgJiAxKQorICAgICAgICBm
bGFncyB8PSBFRl9DQVBTX0xPQ0tfT047CisKKyAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICAvLyBX
aW5kb3dzIGV4cHJlc3NlcyByaWdodC1BbHQgYXMgVktfTUVOVSB3aXRoIHRoZSBleHRlbmRlZCBm
bGFnIHNldC4KKyAgICAvLyBUaGlzIGtleSBzaG91bGQgZ2VuZXJhdGUgQWx0R3JhcGggdW5kZXIg
bGF5b3V0cyB3aGljaCB1c2UgdGhhdCBtb2RpZmllci4KKyAgICBpZiAodmlydHVhbEtleSA9PSBW
S19NRU5VICYmIG1faGFzQWx0R3JhcGgpCisgICAgICAgIHJldHVybiAiQWx0R3JhcGgiX3M7CisK
KyAgICBTdHJpbmcga2V5ID0gTm9uUHJpbnRhYmxlVmlydHVhbEtleVRvRG9tS2V5KHZpcnR1YWxL
ZXksIG1fa2V5Ym9hcmRMYXlvdXQpOworICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4ga2V5OworCisgICAgY29uc3QgaW50IGZsYWdzVG9UcnlbXSA9IHsKKyAgICAgICAgLy8g
VHJ5aW5nIHRvIG1hdGNoIEZpcmVmb3gncyBiZWhhdmlvciBhbmQgVUlFdmVudHMgRG9tS2V5IGd1
aWRlbGluZXMuCisgICAgICAgIC8vIElmIHRoZSBjb21iaW5hdGlvbiBkb2Vzbid0IHByb2R1Y2Ug
YSBwcmludGFibGUgY2hhcmFjdGVyLCB0aGUga2V5IHZhbHVlCisgICAgICAgIC8vIHNob3VsZCBi
ZSB0aGUga2V5IHdpdGggbm8gbW9kaWZpZXJzIGV4Y2VwdCBmb3IgU2hpZnQgYW5kIEFsdEdyLgor
ICAgICAgICAvLyBTZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3VpZXZlbnRzLyNrZXlzLWd1aWRl
bGluZXMKKyAgICAgICAgZmxhZ3MsCisgICAgICAgIGZsYWdzICYgKEVGX1NISUZUX0RPV04gfCBF
Rl9DQVBTX0xPQ0tfT04pLAorICAgICAgICBFRl9OT05FLAorICAgIH07CisKKyAgICBmb3IgKGF1
dG8gdHJ5RmxhZ3MgOiBmbGFnc1RvVHJ5KSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGl0ID0gbV9w
cmludGFibGVLZXlDb2RlVG9LZXkuZmluZCgKKyAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHN0
YXRpY19jYXN0PGludD4odmlydHVhbEtleSksIHRyeUZsYWdzKSk7CisgICAgICAgIGlmIChpdCAh
PSBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5lbmQoKSkgeworICAgICAgICAgICAga2V5ID0gaXQt
PnZhbHVlOworICAgICAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGtleTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGZvdW5kIG5vdGhpbmcg
d2l0aCBubyBmbGFncyBzZXQsIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB0cnkuCisgICAgICAg
IGlmICh0cnlGbGFncyA9PSBFRl9OT05FKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgLy8gUmV0dXJuIERvbUtleTo6VU5JREVOVElGSUVEIHRvIHByZXZlbnQgVVMgbGF5b3V0IGZh
bGwtYmFjay4KKyAgICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKworc3RhdGljIGlubGlu
ZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFN0
cmluZygmYywgMSk7Cit9CisKK1N0cmluZyBWaXJ0dWFsS2V5TWFwOjpkb21LZXlGcm9tQ2hhcihV
Q2hhciBjKQoreworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgJ1x4MWInOgorICAgICAgICBy
ZXR1cm4gIkVzY2FwZSJfczsKKyAgICBjYXNlICdcdCc6CisgICAgICAgIHJldHVybiAiVGFiIl9z
OworICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgcmV0dXJuICJFbnRlciJfczsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHNpbmdsZUNoYXJhY3RlclN0cmlu
ZyhjKTsKK30KKworU3RyaW5nIFZpcnR1YWxLZXlNYXA6OmRvbUNvZGVGcm9tVmlydHVhbEtleShp
bnQgdmlydHVhbEtleSkKK3sKKyAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICBTdHJpbmcga2V5ID0g
Tm9uUHJpbnRhYmxlVmlydHVhbEtleVRvRG9tS2V5KHZpcnR1YWxLZXksIG1fa2V5Ym9hcmRMYXlv
dXQpOworICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAg
c3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAgY2FzZSBWS19NVUxUSVBMWToKKyAgICAgICAgcmV0
dXJuICJOdW1wYWRNdWx0aXBseSJfczsKKyAgICBjYXNlIFZLX0FERDoKKyAgICAgICAgcmV0dXJu
ICJOdW1wYWRBZGQiX3M7CisgICAgY2FzZSBWS19TRVBBUkFUT1I6CisgICAgICAgIHJldHVybiAi
VW5pZGVudGlmaWVkIl9zOworICAgIGNhc2UgVktfU1VCVFJBQ1Q6CisgICAgICAgIHJldHVybiAi
TnVtcGFkU3VidHJhY3QiX3M7CisgICAgY2FzZSBWS19ERUNJTUFMOgorICAgICAgICByZXR1cm4g
Ik51bXBhZERlY2ltYWwiX3M7CisgICAgY2FzZSBWS19ESVZJREU6CisgICAgICAgIHJldHVybiAi
TnVtcGFkRGl2aWRlIl9zOworICAgIGNhc2UgVktfT0VNXzE6CisgICAgICAgIHJldHVybiAiU2Vt
aWNvbG9uIl9zOworICAgIGNhc2UgVktfT0VNX1BMVVM6CisgICAgICAgIHJldHVybiAiUGx1cyJf
czsKKyAgICBjYXNlIFZLX09FTV9DT01NQToKKyAgICAgICAgcmV0dXJuICJDb21tYSJfczsKKyAg
ICBjYXNlIFZLX09FTV9NSU5VUzoKKyAgICAgICAgcmV0dXJuICJNaW51cyJfczsKKyAgICBjYXNl
IFZLX09FTV9QRVJJT0Q6CisgICAgICAgIHJldHVybiAiUGVyaW9kIl9zOworICAgIGNhc2UgVktf
T0VNXzI6CisgICAgICAgIHJldHVybiAiU2xhc2giX3M7CisgICAgY2FzZSBWS19PRU1fMzoKKyAg
ICAgICAgcmV0dXJuICJCYWNrcXVvdGUiX3M7CisgICAgY2FzZSBWS19PRU1fNDoKKyAgICAgICAg
cmV0dXJuICJCcmFja2V0TGVmdCJfczsKKyAgICBjYXNlIFZLX09FTV81OgorICAgICAgICByZXR1
cm4gIkJhY2tzbGFzaCJfczsKKyAgICBjYXNlIFZLX09FTV82OgorICAgICAgICByZXR1cm4gIkJy
YWNrZXRSaWdodCJfczsKKyAgICBjYXNlIFZLX09FTV83OgorICAgICAgICByZXR1cm4gIlF1b3Rl
Il9zOworICAgIGNhc2UgVktfT0VNXzg6CisgICAgICAgIHJldHVybiAiVW5pZGVudGlmaWVkIl9z
OworICAgIGNhc2UgVktfT0VNXzEwMjoKKyAgICAgICAgcmV0dXJuICJJbnRsUm8iX3M7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCdBJyA8PSB2aXJ0dWFs
S2V5ICYmIHZpcnR1YWxLZXkgPD0gJ1onKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiS2V5
Iiwgc3RhdGljX2Nhc3Q8VUNoYXI+KHZpcnR1YWxLZXkpKTsKKyAgICBpZiAoJzAnIDw9IHZpcnR1
YWxLZXkgJiYgdmlydHVhbEtleSA8PSAnOScpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJE
aWdpdCIsIHN0YXRpY19jYXN0PFVDaGFyPih2aXJ0dWFsS2V5KSk7CisgICAgaWYgKFZLX05VTVBB
RDAgPD0gdmlydHVhbEtleSAmJiB2aXJ0dWFsS2V5IDw9IFZLX05VTVBBRDkpCisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJOdW1wYWQiLCBzdGF0aWNfY2FzdDxVQ2hhcj4odmlydHVhbEtleSAt
IFZLX05VTVBBRDAgKyAnMCcpKTsKKyAgICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKwor
dm9pZCBWaXJ0dWFsS2V5TWFwOjp1cGRhdGVMYXlvdXQoKQoreworICAgIEhLTCBjdXJyZW50TGF5
b3V0ID0gR2V0S2V5Ym9hcmRMYXlvdXQoMCk7CisgICAgaWYgKGN1cnJlbnRMYXlvdXQgPT0gbV9r
ZXlib2FyZExheW91dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQllURSBrZXlib2FyZFN0YXRl
VG9SZXN0b3JlWzI1Nl07CisgICAgaWYgKCFHZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkU3RhdGVU
b1Jlc3RvcmUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2tleWJvYXJkTGF5b3V0ID0gY3Vy
cmVudExheW91dDsKKyAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5jbGVhcigpOworICAgIG1f
aGFzQWx0R3JhcGggPSBmYWxzZTsKKworICAgIC8vIE1hcCBzaXplIGZvciBzb21lIHNhbXBsZSBr
ZXlib2FyZCBsYXlvdXRzOgorICAgIC8vIFVTOiA0NzYsIEZyZW5jaDogNjAyLCBQZXJzaWFuOiA0
ODIsIFZpZXRuYW1lc2U6IDE0MzYKKyAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDE1MDApOworCisgICAgZm9yIChpbnQgbW9kaWZpZXJDb21iaW5hdGlv
biA9IDA7IG1vZGlmaWVyQ29tYmluYXRpb24gPD0gY01vZGlmaWVyRmxhZ3NDb21iaW5hdGlvbnM7
ICsrbW9kaWZpZXJDb21iaW5hdGlvbikgeworICAgICAgICBCWVRFIGtleWJvYXJkU3RhdGVbMjU2
XTsKKyAgICAgICAgbWVtc2V0KGtleWJvYXJkU3RhdGUsIDAsIHNpemVvZihrZXlib2FyZFN0YXRl
KSk7CisKKyAgICAgICAgLy8gU2V0dGluZyB1cCBrZXlib2FyZCBzdGF0ZSBmb3IgbW9kaWZpZXJz
LgorICAgICAgICBpbnQgZmxhZ3MgPSBnZXRNb2RpZmllckZsYWdzKG1vZGlmaWVyQ29tYmluYXRp
b24pOworICAgICAgICBzZXRNb2RpZmllclN0YXRlKGtleWJvYXJkU3RhdGUsIGZsYWdzKTsKKwor
ICAgICAgICBmb3IgKGludCB2aXJ0dWFsS2V5ID0gMDsgdmlydHVhbEtleSA8PSAweEZGOyArK3Zp
cnR1YWxLZXkpIHsKKyAgICAgICAgICAgIHdjaGFyX3QgdHJhbnNsYXRlZENoYXJzWzVdOworICAg
ICAgICAgICAgaW50IHJ2ID0gVG9Vbmljb2RlRXgodmlydHVhbEtleSwgMCwga2V5Ym9hcmRTdGF0
ZSwgdHJhbnNsYXRlZENoYXJzLAorICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJh
bnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91dCk7CisKKyAgICAgICAgICAgIGlmIChy
diA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8vIERlYWQga2V5LCBpbmplY3RpbmcgVktfU1BB
Q0UgdG8gZ2V0IGNoYXJhY3RlciByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBCWVRF
IGVtcHR5U3RhdGVbMjU2XSA9IHsgfTsKKyAgICAgICAgICAgICAgICBydiA9IFRvVW5pY29kZUV4
KFZLX1NQQUNFLCAwLCBlbXB0eVN0YXRlLCB0cmFuc2xhdGVkQ2hhcnMsCisgICAgICAgICAgICAg
ICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExh
eW91dCk7CisgICAgICAgICAgICAgICAgLy8gRXhwZWN0aW5nIGEgZGVhZCBrZXkgY2hhcmFjdGVy
IChub3QgZm9sbG93ZWQgYnkgYSBzcGFjZSkuCisgICAgICAgICAgICAgICAgaWYgKHJ2ID09IDEp
CisgICAgICAgICAgICAgICAgICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnNldChzdGQ6Om1h
a2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxLZXkpLCBmbGFncyksICJEZWFkIl9zKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAocnYgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmICh0
cmFuc2xhdGVkQ2hhcnNbMF0gPj0gMHgyMCkgeworICAgICAgICAgICAgICAgICAgICBtX3ByaW50
YWJsZUtleUNvZGVUb0tleS5zZXQoc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0
dWFsS2V5KSwgZmxhZ3MpLCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodHJhbnNsYXRlZENoYXJzWzBd
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgdGhlIGxheW91dCBt
YWtlcyB1c2Ugb2YgQWx0R3JhcGguCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb250cm9s
QW5kQWx0KGZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faGFzQWx0R3JhcGggPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBTZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkU3RhdGVUb1Jlc3RvcmUpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3MTliNjc2NTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuaApAQCAtMCwwICsxLDUxIEBA
CisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
Ky8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdt
YSBvbmNlCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFZpcnR1YWxLZXlNYXAgewor
cHVibGljOgorICAgIFZpcnR1YWxLZXlNYXAoKTsKKworICAgIFN0cmluZyBkb21LZXlGcm9tVmly
dHVhbEtleShpbnQgdmlydHVhbEtleSk7CisgICAgU3RyaW5nIGRvbUtleUZyb21DaGFyKFVDaGFy
KTsKKyAgICBTdHJpbmcgZG9tQ29kZUZyb21WaXJ0dWFsS2V5KGludCB2aXJ0dWFsS2V5KTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUxheW91dCgpOworCisgICAgSEtMIG1fa2V5Ym9hcmRM
YXlvdXQgPSAwOworICAgIGJvb2wgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAgdHlwZWRl
ZiBzdGQ6OnBhaXI8aW50IC8qVmlydHVhbEtleSovLCBpbnQgLypFdmVudEZsYWdzKi8+IFZpcnR1
YWxLZXlFdmVudEZsYWdzUGFpcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8VmlydHVhbEtleUV2ZW50
RmxhZ3NQYWlyLCBTdHJpbmc+IFZpcnR1YWxLZXlUb0tleU1hcDsKKyAgICBWaXJ0dWFsS2V5VG9L
ZXlNYXAgbV9wcmludGFibGVLZXlDb2RlVG9LZXk7Cit9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383018</attachid>
            <date>2019-11-06 20:23:12 -0800</date>
            <delta_ts>2019-11-11 22:40:24 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>21709</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDUyMzhlNzkxYzIyLi44NjRkZjQ2OWRjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC03NTEsMTEgKzc1MSwxMSBAQCB0aGUgcHVibGljIGlP
UyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTc5MTY3Pi4gKi8KICNlbmRpZgogCiAj
aWYgIWRlZmluZWQoRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJM
RV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDAKKyNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9B
VFRSSUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfS0VZQk9BUkRfQ09ERV9B
VFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAwCisjZGVm
aW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZp
bmVkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRl
eCAxMDIwNmZlNDdjNi4uZDg5MTdkZjQ5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBA
IC0xMDAsNiArMTAwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vd2luL1N0cnVjdHVyZWRFeGNlcHRpb25IYW5kbGVyU3VwcHJlc3Nvci5jcHAKICAgICBwbGF0
Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKICAgICBwbGF0Zm9ybS93aW4vVXNlckFnZW50V2luLmNw
cAorICAgIHBsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcAogICAgIHBsYXRmb3JtL3dpbi9X
Q0RhdGFPYmplY3QuY3BwCiAgICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uY3BwCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5jcHAKQEAgLTEzNiw2ICsxMzcs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaAogICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQ
b3B1cE1lbnVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKKyAgICBwbGF0Zm9y
bS93aW4vVmlydHVhbEtleU1hcC5oCiAgICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5oCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9XZWJD
b3JlSW5zdGFuY2VIYW5kbGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVu
dFdpbi5jcHAKaW5kZXggYjIzNTZjNWY0ZmMuLjg0ODI4OTkzN2JmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2lu
Y2x1ZGUgIlZpcnR1YWxLZXlNYXAuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0yMTgsMTAg
KzIxOSwzMCBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNo
YXIgYykKICAgICByZXR1cm4gU3RyaW5nKCZjLCAxKTsKIH0KIAorc3RhdGljIFZpcnR1YWxLZXlN
YXAmIHZpcnR1YWxLZXlNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWaXJ0dWFs
S2V5TWFwPiBrZXlNYXA7CisgICAgcmV0dXJuIGtleU1hcDsKK30KKworc3RhdGljIFN0cmluZyBr
ZXlGb3JLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlR5cGUgdHlwZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpD
aGFyKQorICAgICAgICByZXR1cm4gdmlydHVhbEtleU1hcCgpLmRvbUtleUZyb21DaGFyKHdQYXJh
bSk7CisgICAgcmV0dXJuIHZpcnR1YWxLZXlNYXAoKS5kb21LZXlGcm9tTFBhcmFtKGxQYXJhbSk7
Cit9CisKK3N0YXRpYyBTdHJpbmcgY29kZUZvcktleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6VHlwZSB0eXBlLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHJldHVybiB2aXJ0dWFsS2V5TWFw
KCkuZG9tQ29kZUZyb21MUGFyYW0obFBhcmFtKTsKK30KKwogUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoSFdORCwgV1BBUkFNIGNvZGUsIExQQVJBTSBrZXlEYXRh
LCBUeXBlIHR5cGUsIGJvb2wgc3lzdGVtS2V5KQogICAgIDogUGxhdGZvcm1FdmVudCh0eXBlLCBH
ZXRLZXlTdGF0ZShWS19TSElGVCkgJiBISUdIX0JJVF9NQVNLX1NIT1JULCBHZXRLZXlTdGF0ZShW
S19DT05UUk9MKSAmIEhJR0hfQklUX01BU0tfU0hPUlQsIEdldEtleVN0YXRlKFZLX01FTlUpICYg
SElHSF9CSVRfTUFTS19TSE9SVCwgZmFsc2UsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyg6Okdl
dFRpY2tDb3VudCgpICogMC4wMDEpKQogICAgICwgbV90ZXh0KCh0eXBlID09IFBsYXRmb3JtRXZl
bnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkpCiAgICAg
LCBtX3VubW9kaWZpZWRUZXh0KCh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkpCisgICAgLCBtX2tleShrZXlGb3JLZXlF
dmVudCh0eXBlLCBjb2RlLCBrZXlEYXRhKSkKKyAgICAsIG1fY29kZShjb2RlRm9yS2V5RXZlbnQo
dHlwZSwga2V5RGF0YSkpCiAgICAgLCBtX2tleUlkZW50aWZpZXIoKHR5cGUgPT0gUGxhdGZvcm1F
dmVudDo6Q2hhcikgPyBTdHJpbmcoKSA6IGtleUlkZW50aWZpZXJGb3JXaW5kb3dzS2V5Q29kZShj
b2RlKSkKICAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKCh0eXBlID09IFJhd0tleURvd24g
fHwgdHlwZSA9PSBLZXlVcCkgPyB3aW5kb3dzS2V5Y29kZVdpdGhMb2NhdGlvbihjb2RlLCBrZXlE
YXRhKSA6IDApCiAgICAgLCBtX2F1dG9SZXBlYXQoSElXT1JEKGtleURhdGEpICYgS0ZfUkVQRUFU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wOGMxYjU1ZGVhNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcApA
QCAtMCwwICsxLDQ2NSBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisv
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWaXJ0dWFsS2V5TWFwLmgi
CisKK3R5cGVkZWYgZW51bSA6IHVpbnQ4X3QgeworICAgIEVGX05PTkUgPSAwLAorICAgIEVGX1NI
SUZUX0RPV04gPSAxIDw8IDAsCisgICAgRUZfQ09OVFJPTF9ET1dOID0gMSA8PCAxLAorICAgIEVG
X0FMVF9ET1dOID0gMSA8PCAyLAorICAgIEVGX0NBUFNfTE9DS19PTiA9IDEgPDwgMywKK30gRXZl
bnRGbGFnczsKKworY29uc3RleHByIEV2ZW50RmxhZ3MgY01vZGlmaWVyRmxhZ3NbXSA9IHsKKyAg
ICBFRl9TSElGVF9ET1dOLAorICAgIEVGX0NPTlRST0xfRE9XTiwKKyAgICBFRl9BTFRfRE9XTiwK
KyAgICBFRl9DQVBTX0xPQ0tfT04sCit9OworCitzdGF0aWMgdm9pZCBzZXRNb2RpZmllclN0YXRl
KEJZVEUqIGtleWJvYXJkU3RhdGUsIGludCBmbGFncykKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8g
TVNETiBHZXRLZXlTdGF0ZSgpOgorICAgIC8vIDEuIElmIHRoZSBoaWdoLW9yZGVyIGJpdCBpcyAx
LCB0aGUga2V5IGlzIGRvd247IG90aGVyd2lzZSwgaXQgaXMgdXAuCisgICAgLy8gMi4gSWYgdGhl
IGxvdy1vcmRlciBiaXQgaXMgMSwgdGhlIGtleSBpcyB0b2dnbGVkLiBBIGtleSwgc3VjaCBhcyB0
aGUKKyAgICAvLyAgICBDQVBTIExPQ0sga2V5LCBpcyB0b2dnbGVkIGlmIGl0IGlzIHR1cm5lZCBv
bi4gVGhlIGtleSBpcyBvZmYgYW5kCisgICAgLy8gICAgdW50b2dnbGVkIGlmIHRoZSBsb3ctb3Jk
ZXIgYml0IGlzIDAuCisgICAgLy8gU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjQ2MzAxLmFzcHgKKyAgICBpZiAoZmxhZ3MgJiBF
Rl9TSElGVF9ET1dOKQorICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX1NISUZUXSB8PSAweDgwOwor
CisgICAgaWYgKGZsYWdzICYgRUZfQ09OVFJPTF9ET1dOKQorICAgICAgICBrZXlib2FyZFN0YXRl
W1ZLX0NPTlRST0xdIHw9IDB4ODA7CisKKyAgICBpZiAoZmxhZ3MgJiBFRl9BTFRfRE9XTikKKyAg
ICAgICAga2V5Ym9hcmRTdGF0ZVtWS19NRU5VXSB8PSAweDgwOworCisgICAgaWYgKGZsYWdzICYg
RUZfQ0FQU19MT0NLX09OKQorICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX0NBUElUQUxdIHw9IDB4
MDE7Cit9CisKK2NvbnN0ZXhwciBpbnQga0NvbnRyb2xBbmRBbHRGbGFncyA9IEVGX0NPTlRST0xf
RE9XTiB8IEVGX0FMVF9ET1dOOworCitzdGF0aWMgYm9vbCBoYXNDb250cm9sQW5kQWx0KGludCBm
bGFncykKK3sKKyAgICByZXR1cm4gKGZsYWdzICYga0NvbnRyb2xBbmRBbHRGbGFncykgPT0ga0Nv
bnRyb2xBbmRBbHRGbGFnczsKK30KKworY29uc3RleHByIGludCBjTW9kaWZpZXJGbGFnc0NvbWJp
bmF0aW9ucyA9ICgxIDw8IFdURl9BUlJBWV9MRU5HVEgoY01vZGlmaWVyRmxhZ3MpKSAtIDE7CisK
K3N0YXRpYyBpbnQgZ2V0TW9kaWZpZXJGbGFncyhpbnQgY29tYmluYXRpb24pCit7CisgICAgaW50
IGZsYWdzID0gRUZfTk9ORTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgoY01vZGlmaWVyRmxhZ3MpOyArK2kpIHsKKyAgICAgICAgaWYgKGNvbWJpbmF0aW9uICYg
KDEgPDwgaSkpCisgICAgICAgICAgICBmbGFncyB8PSBjTW9kaWZpZXJGbGFnc1tpXTsKKyAgICB9
CisgICAgcmV0dXJuIGZsYWdzOworfQorCisvLyBUaGlzIHRhYmxlIG11c3QgYmUgc29ydGVkIGJ5
IHx2aXJ0dWFsS2V5fCBmb3IgYmluYXJ5IHNlYXJjaC4KK2NvbnN0ZXhwciBzdHJ1Y3QgTm9uUHJp
bnRhYmxlS2V5RW50cnkgeworICAgIGludCB2aXJ0dWFsS2V5OworICAgIEFTQ0lJTGl0ZXJhbCBk
b21LZXk7Cit9IGNOb25QcmludGFibGVLZXlNYXBbXSA9IHsKKyAgICB7IFZLX0NBTkNFTCwgIkNh
bmNlbCJfcyB9LAorICAgIHsgVktfQkFDSywgIkJhY2tzcGFjZSJfcyB9LAorICAgIHsgVktfVEFC
LCAiVGFiIl9zIH0sCisgICAgeyBWS19DTEVBUiwgIkNsZWFyIl9zIH0sCisgICAgeyBWS19SRVRV
Uk4sICJFbnRlciJfcyB9LAorICAgIHsgVktfU0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktf
Q09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX01FTlUsICJBbHQiX3MgfSwKKyAgICB7
IFZLX1BBVVNFLCAiUGF1c2UiX3MgfSwKKyAgICB7IFZLX0NBUElUQUwsICJDYXBzTG9jayJfcyB9
LAorICAgIC8vIFZLX0tBTkEgPT0gVktfSEFOR1VMCisgICAgeyBWS19KVU5KQSwgIkp1bmphTW9k
ZSJfcyB9LAorICAgIHsgVktfRklOQUwsICJGSU5BTF9NT0RFIl9zIH0sCisgICAgLy8gVktfSEFO
SkEgPT0gVktfS0FOSkkKKyAgICB7IFZLX0VTQ0FQRSwgIkVzY2FwZSJfcyB9LAorICAgIHsgVktf
Q09OVkVSVCwgIkNvbnZlcnQiX3MgfSwKKyAgICB7IFZLX05PTkNPTlZFUlQsICJOb25Db252ZXJ0
Il9zIH0sCisgICAgeyBWS19BQ0NFUFQsICJBY2NlcHQiX3MgfSwKKyAgICB7IFZLX01PREVDSEFO
R0UsICJNb2RlQ2hhbmdlIl9zIH0sCisgICAgLy8gVktfU1BBQ0UKKyAgICB7IFZLX1BSSU9SLCAi
UGFnZVVwIl9zIH0sCisgICAgeyBWS19ORVhULCAiUGFnZURvd24iX3MgfSwKKyAgICB7IFZLX0VO
RCwgIkVuZCJfcyB9LAorICAgIHsgVktfSE9NRSwgIkhvbWUiX3MgfSwKKyAgICB7IFZLX0xFRlQs
ICJBcnJvd0xlZnQiX3MgfSwKKyAgICB7IFZLX1VQLCAiQXJyb3dVcCJfcyB9LAorICAgIHsgVktf
UklHSFQsICJBcnJvd1JpZ2h0Il9zIH0sCisgICAgeyBWS19ET1dOLCAiQXJyb3dEb3duIl9zIH0s
CisgICAgeyBWS19TRUxFQ1QsICJTZWxlY3QiX3MgfSwKKyAgICB7IFZLX1BSSU5ULCAiUHJpbnQi
X3MgfSwKKyAgICB7IFZLX0VYRUNVVEUsICJFeGVjdXRlIl9zIH0sCisgICAgeyBWS19TTkFQU0hP
VCwgIlByaW50U2NyZWVuIl9zIH0sCisgICAgeyBWS19JTlNFUlQsICJJbnNlcnQiX3MgfSwKKyAg
ICB7IFZLX0RFTEVURSwgIkRlbGV0ZSJfcyB9LAorICAgIHsgVktfSEVMUCwgIkhlbHAiX3MgfSwK
KyAgICAvLyBWS18wLi45CisgICAgLy8gVktfQS4uWgorICAgIHsgVktfTFdJTiwgIk1ldGEiX3Mg
fSwKKyAgICAvLyBWS19DT01NQU5EID09IFZLX0xXSU4KKyAgICB7IFZLX1JXSU4sICJNZXRhIl9z
IH0sCisgICAgeyBWS19BUFBTLCAiQ29udGV4dE1lbnUiX3MgfSwKKyAgICB7IFZLX1NMRUVQLCAi
U3RhbmRieSJfcyB9LAorICAgIC8vIFZLX05VTVBBRDAuLjkKKyAgICAvLyBWS19NVUxUSVBMWSwg
VktfQURELCBWS19TRVBBUkFUT1IsIFZLX1NVQlRSQUNULCBWS19ERUNJTUFMLAorICAgIC8vIFZL
X0RJVklERQorICAgIHsgVktfRjEsICJGMSJfcyB9LAorICAgIHsgVktfRjIsICJGMiJfcyB9LAor
ICAgIHsgVktfRjMsICJGMyJfcyB9LAorICAgIHsgVktfRjQsICJGNCJfcyB9LAorICAgIHsgVktf
RjUsICJGNSJfcyB9LAorICAgIHsgVktfRjYsICJGNiJfcyB9LAorICAgIHsgVktfRjcsICJGNyJf
cyB9LAorICAgIHsgVktfRjgsICJGOCJfcyB9LAorICAgIHsgVktfRjksICJGOSJfcyB9LAorICAg
IHsgVktfRjEwLCAiRjEwIl9zIH0sCisgICAgeyBWS19GMTEsICJGMTEiX3MgfSwKKyAgICB7IFZL
X0YxMiwgIkYxMiJfcyB9LAorICAgIHsgVktfRjEzLCAiRjEzIl9zIH0sCisgICAgeyBWS19GMTQs
ICJGMTQiX3MgfSwKKyAgICB7IFZLX0YxNSwgIkYxNSJfcyB9LAorICAgIHsgVktfRjE2LCAiRjE2
Il9zIH0sCisgICAgeyBWS19GMTcsICJGMTciX3MgfSwKKyAgICB7IFZLX0YxOCwgIkYxOCJfcyB9
LAorICAgIHsgVktfRjE5LCAiRjE5Il9zIH0sCisgICAgeyBWS19GMjAsICJGMjAiX3MgfSwKKyAg
ICB7IFZLX0YyMSwgIkYyMSJfcyB9LAorICAgIHsgVktfRjIyLCAiRjIyIl9zIH0sCisgICAgeyBW
S19GMjMsICJGMjMiX3MgfSwKKyAgICB7IFZLX0YyNCwgIkYyNCJfcyB9LAorICAgIHsgVktfTlVN
TE9DSywgIk51bUxvY2siX3MgfSwKKyAgICB7IFZLX1NDUk9MTCwgIlNjcm9sbExvY2siX3MgfSwK
KyAgICB7IFZLX0xTSElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBWS19SU0hJRlQsICJTaGlmdCJf
cyB9LAorICAgIHsgVktfTENPTlRST0wsICJDb250cm9sIl9zIH0sCisgICAgeyBWS19SQ09OVFJP
TCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX0xNRU5VLCAiQWx0Il9zIH0sCisgICAgeyBWS19S
TUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9CQUNLLCAiQnJvd3NlckJhY2siX3Mg
fSwKKyAgICB7IFZLX0JST1dTRVJfRk9SV0FSRCwgIkJyb3dzZXJGb3J3YXJkIl9zIH0sCisgICAg
eyBWS19CUk9XU0VSX1JFRlJFU0gsICJCcm93c2VyUmVmcmVzaCJfcyB9LAorICAgIHsgVktfQlJP
V1NFUl9TVE9QLCAiQnJvd3NlclN0b3AiX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfU0VBUkNILCAi
QnJvd3NlclNlYXJjaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9GQVZPUklURVMsICJCcm93c2Vy
RmF2b3JpdGVzIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX0hPTUUsICJCcm93c2VySG9tZSJfcyB9
LAorICAgIHsgVktfVk9MVU1FX01VVEUsICJBdWRpb1ZvbHVtZSJfcyB9LAorICAgIHsgVktfVk9M
VU1FX0RPV04sICJBdWRpb1ZvbHVtZURvd24iX3MgfSwKKyAgICB7IFZLX1ZPTFVNRV9VUCwgIkF1
ZGlvVm9sdW1lVXAiX3MgfSwKKyAgICB7IFZLX01FRElBX05FWFRfVFJBQ0ssICJNZWRpYVRyYWNr
TmV4dCJfcyB9LAorICAgIHsgVktfTUVESUFfUFJFVl9UUkFDSywgIk1lZGlhVHJhY2tQcmV2aW91
cyJfcyB9LAorICAgIHsgVktfTUVESUFfU1RPUCwgIk1lZGlhU3RvcCJfcyB9LAorICAgIHsgVktf
TUVESUFfUExBWV9QQVVTRSwgIk1lZGlhUGxheVBhdXNlIl9zIH0sCisgICAgLy8gVktfT0VNXzEu
LjgsIDEwMiwgUExVUywgQ09NTUEsIE1JTlVTLCBQRVJJT0QKKyAgICB7IFZLX1BST0NFU1NLRVks
ICJQcm9jZXNzIl9zIH0sCisgICAgLy8gVktfUEFDS0VUIC0gVXNlZCB0byBwYXNzIFVuaWNvZGUg
Y2hhciwgY29uc2lkZXJlZCBhcyBwcmludGFibGUga2V5LgorICAgIHsgVktfQVRUTiwgIkF0dG4i
X3MgfSwKKyAgICB7IFZLX0NSU0VMLCAiQ3JTZWwiX3MgfSwKKyAgICB7IFZLX0VYU0VMLCAiRXhT
ZWwiX3MgfSwKKyAgICB7IFZLX0VSRU9GLCAiRXJhc2VFb2YiX3MgfSwKKyAgICB7IFZLX1BMQVks
ICJQbGF5Il9zIH0sCisgICAgeyBWS19aT09NLCAiWm9vbVRvZ2dsZSJfcyB9LAorICAgIHsgVktf
T0VNX0NMRUFSLCAiQ2xlYXIiX3MgfSwKK307CisKKy8vIERpc2FtYmlndWF0ZXMgdGhlIG1lYW5p
bmcgb2YgY2VydGFpbiBub24tcHJpbnRhYmxlIGtleXMgd2hpY2ggaGF2ZSBkaWZmZXJlbnQKKy8v
IG1lYW5pbmdzIHVuZGVyIGRpZmZlcmVudCBsYW5ndWFnZXMsIGJ1dCB1c2UgdGhlIHNhbWUgVktF
WSBjb2RlLgorc3RhdGljIFN0cmluZyBsYW5ndWFnZVNwZWNpZmljT2VtVmlydHVhbEtleVRvRG9t
S2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIFdPUkQgbGFuZ3VhZ2UgPSBM
T1dPUkQobGF5b3V0KTsKKyAgICBXT1JEIHByaW1hcnlMYW5ndWFnZSA9IFBSSU1BUllMQU5HSUQo
bGFuZ3VhZ2UpOworICAgIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19LT1JFQU4pIHsKKyAg
ICAgICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAgICAgIGNhc2UgVktfSEFOR1VMOgorICAg
ICAgICAgICAgcmV0dXJuICJIYW5ndWxNb2RlIl9zOworICAgICAgICBjYXNlIFZLX0hBTkpBOgor
ICAgICAgICAgICAgcmV0dXJuICJIYW5qYU1vZGUiX3M7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChw
cmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19KQVBBTkVTRSkgeworICAgICAgICBzd2l0Y2ggKHZpcnR1
YWxLZXkpIHsKKyAgICAgICAgICAgIC8vIFZLX0tBTkEgaXNuJ3QgZ2VuZXJhdGVkIGJ5IGFueSBt
b2Rlcm4gbGF5b3V0cyBidXQgaXMgYSBsaXN0ZWQgdmFsdWUKKyAgICAgICAgICAgIC8vIHRoYXQg
dGhpcmQtcGFydHkgYXBwcyBtaWdodCBzeW50aGVzaXplLCBzbyB3ZSBoYW5kbGUgaXQgYW55d2F5
LgorICAgICAgICBjYXNlIFZLX0tBTkE6CisKKyAgICAgICAgY2FzZSBWS19BVFROOgorICAgICAg
ICAgICAgcmV0dXJuICJLYW5hTW9kZSJfczsKKyAgICAgICAgY2FzZSBWS19LQU5KSToKKyAgICAg
ICAgICAgIHJldHVybiAiS2FuamlNb2RlIl9zOworICAgICAgICBjYXNlIFZLX09FTV9BVFROOgor
ICAgICAgICAgICAgcmV0dXJuICJBbHBoYW51bWVyaWMiX3M7CisgICAgICAgIGNhc2UgVktfT0VN
X0ZJTklTSDoKKyAgICAgICAgICAgIHJldHVybiAiS2F0YWthbmEiX3M7CisgICAgICAgIGNhc2Ug
VktfT0VNX0NPUFk6CisgICAgICAgICAgICByZXR1cm4gIkhpcmFnYW5hIl9zOworICAgICAgICBj
YXNlIFZLX09FTV9CQUNLVEFCOgorICAgICAgICAgICAgcmV0dXJuICJSb21hamkiX3M7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBudWxsU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgbm9u
UHJpbnRhYmxlVmlydHVhbEtleVRvRG9tS2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQor
eworICAgIC8vIDEuIENoZWNrIGlmIHx2aXJ0dWFsS2V5fCBoYXMgYSB8bGF5b3V0fC1zcGVjaWZp
YyBtZWFuaW5nLgorICAgIGNvbnN0IFN0cmluZyBrZXkgPSBsYW5ndWFnZVNwZWNpZmljT2VtVmly
dHVhbEtleVRvRG9tS2V5KHZpcnR1YWxLZXksIGxheW91dCk7CisgICAgaWYgKCFrZXkuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICAvLyAyLiBNb3N0IHx2aXJ0dWFsS2V5c3wg
aGF2ZSB0aGUgc2FtZSBtZWFuaW5nIHJlZ2FyZGxlc3Mgb2YgfGxheW91dHwuCisgICAgY29uc3Qg
Tm9uUHJpbnRhYmxlS2V5RW50cnkqIHJlc3VsdCA9IHN0ZDo6bG93ZXJfYm91bmQoCisgICAgICAg
IHN0ZDo6YmVnaW4oY05vblByaW50YWJsZUtleU1hcCksIHN0ZDo6ZW5kKGNOb25QcmludGFibGVL
ZXlNYXApLCB2aXJ0dWFsS2V5LAorICAgICAgICBbXShjb25zdCBOb25QcmludGFibGVLZXlFbnRy
eSYgZW50cnksIGludCBuZWVkbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS52aXJ0dWFs
S2V5IDwgbmVlZGxlOworICAgICAgICB9KTsKKyAgICBpZiAocmVzdWx0ICE9IHN0ZDo6ZW5kKGNO
b25QcmludGFibGVLZXlNYXApICYmIHJlc3VsdC0+dmlydHVhbEtleSA9PSB2aXJ0dWFsS2V5KQor
ICAgICAgICByZXR1cm4gcmVzdWx0LT5kb21LZXk7CisKKyAgICByZXR1cm4gbnVsbFN0cmluZygp
OworfQorCitWaXJ0dWFsS2V5TWFwOjpWaXJ0dWFsS2V5TWFwKCkKK3sKKyAgICB1cGRhdGVMYXlv
dXQoKTsKK30KKworU3RyaW5nIFZpcnR1YWxLZXlNYXA6OmRvbUtleUZyb21MUGFyYW0oTFBBUkFN
IGxQYXJhbSkKK3sKKyAgICB1bnNpZ25lZCBzY2FuQ29kZSA9IChsUGFyYW0gPj4gMTYpICYgMHhm
ZjsKKyAgICBib29sIGV4dGVuZGVkID0gbFBhcmFtICYgMHgwMTAwMDAwMDsKKyAgICBpbnQgdmly
dHVhbEtleSA9IE1hcFZpcnR1YWxLZXkoc2NhbkNvZGUsIE1BUFZLX1ZTQ19UT19WSyk7CisgICAg
aW50IGZsYWdzID0gMDsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfU0hJRlQpIDwgMCkKKyAgICAg
ICAgZmxhZ3MgfD0gRUZfU0hJRlRfRE9XTjsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJP
TCkgPCAwKQorICAgICAgICBmbGFncyB8PSBFRl9DT05UUk9MX0RPV047CisgICAgaWYgKEdldEtl
eVN0YXRlKFZLX01FTlUgKSA8IDApCisgICAgICAgIGZsYWdzIHw9IEVGX0FMVF9ET1dOOworICAg
IGlmIChHZXRLZXlTdGF0ZShWS19DQVBJVEFMKSAmIDEpCisgICAgICAgIGZsYWdzIHw9IEVGX0NB
UFNfTE9DS19PTjsKKworICAgIHVwZGF0ZUxheW91dCgpOworICAgIC8vIFdpbmRvd3MgZXhwcmVz
c2VzIHJpZ2h0LUFsdCBhcyBWS19NRU5VIHdpdGggdGhlIGV4dGVuZGVkIGZsYWcgc2V0LgorICAg
IC8vIFRoaXMga2V5IHNob3VsZCBnZW5lcmF0ZSBBbHRHcmFwaCB1bmRlciBsYXlvdXRzIHdoaWNo
IHVzZSB0aGF0IG1vZGlmaWVyLgorICAgIGlmICh2aXJ0dWFsS2V5ID09IFZLX01FTlUgJiYgZXh0
ZW5kZWQgJiYgbV9oYXNBbHRHcmFwaCkKKyAgICAgICAgcmV0dXJuICJBbHRHcmFwaCJfczsKKwor
ICAgIFN0cmluZyBrZXkgPSBub25QcmludGFibGVWaXJ0dWFsS2V5VG9Eb21LZXkodmlydHVhbEtl
eSwgbV9rZXlib2FyZExheW91dCk7CisgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBrZXk7CisKKyAgICBjb25zdCBpbnQgZmxhZ3NUb1RyeVtdID0geworICAgICAgICAvLyBU
cnlpbmcgdG8gbWF0Y2ggRmlyZWZveCdzIGJlaGF2aW9yIGFuZCBVSUV2ZW50cyBEb21LZXkgZ3Vp
ZGVsaW5lcy4KKyAgICAgICAgLy8gSWYgdGhlIGNvbWJpbmF0aW9uIGRvZXNuJ3QgcHJvZHVjZSBh
IHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBrZXkgdmFsdWUKKyAgICAgICAgLy8gc2hvdWxkIGJl
IHRoZSBrZXkgd2l0aCBubyBtb2RpZmllcnMgZXhjZXB0IGZvciBTaGlmdCBhbmQgQWx0R3IuCisg
ICAgICAgIC8vIFNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2tleXMtZ3VpZGVs
aW5lcworICAgICAgICBmbGFncywKKyAgICAgICAgZmxhZ3MgJiAoRUZfU0hJRlRfRE9XTiB8IEVG
X0NBUFNfTE9DS19PTiksCisgICAgICAgIEVGX05PTkUsCisgICAgfTsKKworICAgIGZvciAoYXV0
byB0cnlGbGFncyA6IGZsYWdzVG9UcnkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaXQgPSBtX3By
aW50YWJsZUtleUNvZGVUb0tleS5maW5kKHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGludD4o
dmlydHVhbEtleSksIHRyeUZsYWdzKSk7CisgICAgICAgIGlmIChpdCAhPSBtX3ByaW50YWJsZUtl
eUNvZGVUb0tleS5lbmQoKSkgeworICAgICAgICAgICAga2V5ID0gaXQtPnZhbHVlOworICAgICAg
ICAgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGtleTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGZvdW5kIG5vdGhpbmcgd2l0aCBubyBmbGFncyBz
ZXQsIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB0cnkuCisgICAgICAgIGlmICh0cnlGbGFncyA9
PSBFRl9OT05FKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gUmV0dXJuIERv
bUtleTo6VU5JREVOVElGSUVEIHRvIHByZXZlbnQgVVMgbGF5b3V0IGZhbGwtYmFjay4KKyAgICBy
ZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFN0cmluZygmYywgMSk7Cit9
CisKK1N0cmluZyBWaXJ0dWFsS2V5TWFwOjpkb21LZXlGcm9tQ2hhcihVQ2hhciBjKQoreworICAg
IHN3aXRjaCAoYykgeworICAgIGNhc2UgJ1x4MWInOgorICAgICAgICByZXR1cm4gIkVzY2FwZSJf
czsKKyAgICBjYXNlICdcdCc6CisgICAgICAgIHJldHVybiAiVGFiIl9zOworICAgIGNhc2UgJ1xy
JzoKKyAgICAgICAgcmV0dXJuICJFbnRlciJfczsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIHNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKK30KKworU3Ry
aW5nIFZpcnR1YWxLZXlNYXA6OmRvbUNvZGVGcm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7Cisg
ICAgdW5zaWduZWQgc2NhbkNvZGUgPSAobFBhcmFtID4+IDE2KSAmIDB4ZmY7CisgICAgYm9vbCBl
eHRlbmRlZCA9IGxQYXJhbSAmIDB4MDEwMDAwMDA7CisgICAgaW50IHZpcnR1YWxLZXkgPSBNYXBW
aXJ0dWFsS2V5KHNjYW5Db2RlLCBNQVBWS19WU0NfVE9fVktfRVgpOworCisgICAgdXBkYXRlTGF5
b3V0KCk7CisKKyAgICBzd2l0Y2ggKHZpcnR1YWxLZXkpIHsKKyAgICBjYXNlIFZLX0xTSElGVDoK
KyAgICAgICAgcmV0dXJuICJTaGlmdExlZnQiX3M7CisgICAgY2FzZSBWS19SU0hJRlQ6CisgICAg
ICAgIHJldHVybiAiU2hpZnRSaWdodCJfczsKKyAgICBjYXNlIFZLX0xDT05UUk9MOgorICAgIGNh
c2UgVktfUkNPTlRST0w6CisgICAgICAgIHJldHVybiBleHRlbmRlZCA/ICJDb250cm9sUmlnaHQi
X3MgOiAiQ29udHJvbExlZnQiX3M7CisgICAgY2FzZSBWS19MTUVOVToKKyAgICBjYXNlIFZLX1JN
RU5VOgorICAgICAgICByZXR1cm4gZXh0ZW5kZWQgPyAiQWx0UmlnaHQiX3MgOiAiQWx0TGVmdCJf
czsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBTdHJpbmcga2V5
ID0gbm9uUHJpbnRhYmxlVmlydHVhbEtleVRvRG9tS2V5KHZpcnR1YWxLZXksIG1fa2V5Ym9hcmRM
YXlvdXQpOworICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisg
ICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAgY2FzZSBWS19TUEFDRToKKyAgICAgICAgcmV0
dXJuICJTcGFjZSJfczsKKyAgICBjYXNlIFZLX01VTFRJUExZOgorICAgICAgICByZXR1cm4gIk51
bXBhZE11bHRpcGx5Il9zOworICAgIGNhc2UgVktfQUREOgorICAgICAgICByZXR1cm4gIk51bXBh
ZEFkZCJfczsKKyAgICBjYXNlIFZLX1NFUEFSQVRPUjoKKyAgICAgICAgcmV0dXJuICJVbmlkZW50
aWZpZWQiX3M7CisgICAgY2FzZSBWS19TVUJUUkFDVDoKKyAgICAgICAgcmV0dXJuICJOdW1wYWRT
dWJ0cmFjdCJfczsKKyAgICBjYXNlIFZLX0RFQ0lNQUw6CisgICAgICAgIHJldHVybiAiTnVtcGFk
RGVjaW1hbCJfczsKKyAgICBjYXNlIFZLX0RJVklERToKKyAgICAgICAgcmV0dXJuICJOdW1wYWRE
aXZpZGUiX3M7CisgICAgY2FzZSBWS19PRU1fMToKKyAgICAgICAgcmV0dXJuICJTZW1pY29sb24i
X3M7CisgICAgY2FzZSBWS19PRU1fUExVUzoKKyAgICAgICAgcmV0dXJuICJQbHVzIl9zOworICAg
IGNhc2UgVktfT0VNX0NPTU1BOgorICAgICAgICByZXR1cm4gIkNvbW1hIl9zOworICAgIGNhc2Ug
VktfT0VNX01JTlVTOgorICAgICAgICByZXR1cm4gIk1pbnVzIl9zOworICAgIGNhc2UgVktfT0VN
X1BFUklPRDoKKyAgICAgICAgcmV0dXJuICJQZXJpb2QiX3M7CisgICAgY2FzZSBWS19PRU1fMjoK
KyAgICAgICAgcmV0dXJuICJTbGFzaCJfczsKKyAgICBjYXNlIFZLX09FTV8zOgorICAgICAgICBy
ZXR1cm4gIkJhY2txdW90ZSJfczsKKyAgICBjYXNlIFZLX09FTV80OgorICAgICAgICByZXR1cm4g
IkJyYWNrZXRMZWZ0Il9zOworICAgIGNhc2UgVktfT0VNXzU6CisgICAgICAgIHJldHVybiAiQmFj
a3NsYXNoIl9zOworICAgIGNhc2UgVktfT0VNXzY6CisgICAgICAgIHJldHVybiAiQnJhY2tldFJp
Z2h0Il9zOworICAgIGNhc2UgVktfT0VNXzc6CisgICAgICAgIHJldHVybiAiUXVvdGUiX3M7Cisg
ICAgY2FzZSBWS19PRU1fODoKKyAgICAgICAgcmV0dXJuICJVbmlkZW50aWZpZWQiX3M7CisgICAg
Y2FzZSBWS19PRU1fMTAyOgorICAgICAgICByZXR1cm4gIkludGxSbyJfczsKKyAgICBjYXNlIDB4
RkY6CisgICAgICAgIHJldHVybiAiSW50bFllbiJfczsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpZiAoJ0EnIDw9IHZpcnR1YWxLZXkgJiYgdmlydHVhbEtleSA8
PSAnWicpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJLZXkiLCBzdGF0aWNfY2FzdDxVQ2hh
cj4odmlydHVhbEtleSkpOworICAgIGlmICgnMCcgPD0gdmlydHVhbEtleSAmJiB2aXJ0dWFsS2V5
IDw9ICc5JykKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkRpZ2l0Iiwgc3RhdGljX2Nhc3Q8
VUNoYXI+KHZpcnR1YWxLZXkpKTsKKyAgICBpZiAoVktfTlVNUEFEMCA8PSB2aXJ0dWFsS2V5ICYm
IHZpcnR1YWxLZXkgPD0gVktfTlVNUEFEOSkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIk51
bXBhZCIsIHN0YXRpY19jYXN0PFVDaGFyPih2aXJ0dWFsS2V5IC0gVktfTlVNUEFEMCArICcwJykp
OworICAgIHJldHVybiAiVW5pZGVudGlmaWVkIl9zOworfQorCit2b2lkIFZpcnR1YWxLZXlNYXA6
OnVwZGF0ZUxheW91dCgpCit7CisgICAgSEtMIGN1cnJlbnRMYXlvdXQgPSBHZXRLZXlib2FyZExh
eW91dCgwKTsKKyAgICBpZiAoY3VycmVudExheW91dCA9PSBtX2tleWJvYXJkTGF5b3V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBCWVRFIGtleWJvYXJkU3RhdGVUb1Jlc3RvcmVbMjU2XTsKKyAg
ICBpZiAoIUdldEtleWJvYXJkU3RhdGUoa2V5Ym9hcmRTdGF0ZVRvUmVzdG9yZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fa2V5Ym9hcmRMYXlvdXQgPSBjdXJyZW50TGF5b3V0OworICAgIG1f
cHJpbnRhYmxlS2V5Q29kZVRvS2V5LmNsZWFyKCk7CisgICAgbV9oYXNBbHRHcmFwaCA9IGZhbHNl
OworCisgICAgLy8gTWFwIHNpemUgZm9yIHNvbWUgc2FtcGxlIGtleWJvYXJkIGxheW91dHM6Cisg
ICAgLy8gVVM6IDQ3NiwgRnJlbmNoOiA2MDIsIFBlcnNpYW46IDQ4MiwgVmlldG5hbWVzZTogMTQz
NgorICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMTUw
MCk7CisKKyAgICBmb3IgKGludCBtb2RpZmllckNvbWJpbmF0aW9uID0gMDsgbW9kaWZpZXJDb21i
aW5hdGlvbiA8PSBjTW9kaWZpZXJGbGFnc0NvbWJpbmF0aW9uczsgKyttb2RpZmllckNvbWJpbmF0
aW9uKSB7CisgICAgICAgIEJZVEUga2V5Ym9hcmRTdGF0ZVsyNTZdOworICAgICAgICBtZW1zZXQo
a2V5Ym9hcmRTdGF0ZSwgMCwgc2l6ZW9mKGtleWJvYXJkU3RhdGUpKTsKKworICAgICAgICAvLyBT
ZXR0aW5nIHVwIGtleWJvYXJkIHN0YXRlIGZvciBtb2RpZmllcnMuCisgICAgICAgIGludCBmbGFn
cyA9IGdldE1vZGlmaWVyRmxhZ3MobW9kaWZpZXJDb21iaW5hdGlvbik7CisgICAgICAgIHNldE1v
ZGlmaWVyU3RhdGUoa2V5Ym9hcmRTdGF0ZSwgZmxhZ3MpOworCisgICAgICAgIGZvciAoaW50IHZp
cnR1YWxLZXkgPSAwOyB2aXJ0dWFsS2V5IDw9IDB4RkY7ICsrdmlydHVhbEtleSkgeworICAgICAg
ICAgICAgd2NoYXJfdCB0cmFuc2xhdGVkQ2hhcnNbNV07CisgICAgICAgICAgICBpbnQgcnYgPSBU
b1VuaWNvZGVFeCh2aXJ0dWFsS2V5LCAwLCBrZXlib2FyZFN0YXRlLCB0cmFuc2xhdGVkQ2hhcnMs
CisgICAgICAgICAgICAgICAgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVkQ2hhcnMpLCAwLCBt
X2tleWJvYXJkTGF5b3V0KTsKKworICAgICAgICAgICAgaWYgKHJ2ID09IC0xKSB7CisgICAgICAg
ICAgICAgICAgLy8gRGVhZCBrZXksIGluamVjdGluZyBWS19TUEFDRSB0byBnZXQgY2hhcmFjdGVy
IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgICAgIEJZVEUgZW1wdHlTdGF0ZVsyNTZdID0g
eyB9OworICAgICAgICAgICAgICAgIHJ2ID0gVG9Vbmljb2RlRXgoVktfU1BBQ0UsIDAsIGVtcHR5
U3RhdGUsIHRyYW5zbGF0ZWRDaGFycywKKyAgICAgICAgICAgICAgICAgICAgV1RGX0FSUkFZX0xF
TkdUSCh0cmFuc2xhdGVkQ2hhcnMpLCAwLCBtX2tleWJvYXJkTGF5b3V0KTsKKyAgICAgICAgICAg
ICAgICAvLyBFeHBlY3RpbmcgYSBkZWFkIGtleSBjaGFyYWN0ZXIgKG5vdCBmb2xsb3dlZCBieSBh
IHNwYWNlKS4KKyAgICAgICAgICAgICAgICBpZiAocnYgPT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcmludGFibGVLZXlDb2RlVG9LZXkuc2V0KHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0
PGludD4odmlydHVhbEtleSksIGZsYWdzKSwgIkRlYWQiX3MpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChydiA9PSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZWRDaGFyc1swXSA+
PSAweDIwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnNl
dChzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxLZXkpLCBmbGFncyksIHNp
bmdsZUNoYXJhY3RlclN0cmluZyh0cmFuc2xhdGVkQ2hhcnNbMF0pKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciB0aGUgbGF5b3V0IG1ha2VzIHVzZSBvZiBBbHRHcmFw
aC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbnRyb2xBbmRBbHQoZmxhZ3MpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9oYXNBbHRHcmFwaCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIFNldEtleWJvYXJkU3Rh
dGUoa2V5Ym9hcmRTdGF0ZVRvUmVzdG9yZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vVmlydHVhbEtleU1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1ZpcnR1YWxLZXlNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMTYwNjI3NmU4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vVmlydHVhbEtleU1hcC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8vIENvcHlyaWdodCAyMDE2
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworY2xhc3MgVmlydHVhbEtleU1hcCB7CitwdWJsaWM6CisgICAgVmlydHVh
bEtleU1hcCgpOworCisgICAgU3RyaW5nIGRvbUtleUZyb21MUGFyYW0oTFBBUkFNKTsKKyAgICBT
dHJpbmcgZG9tS2V5RnJvbUNoYXIoVUNoYXIpOworICAgIFN0cmluZyBkb21Db2RlRnJvbUxQYXJh
bShMUEFSQU0pOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlTGF5b3V0KCk7CisKKyAgICBI
S0wgbV9rZXlib2FyZExheW91dCA9IDA7CisgICAgYm9vbCBtX2hhc0FsdEdyYXBoID0gZmFsc2U7
CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQgLypWaXJ0dWFsS2V5Ki8sIGludCAvKkV2ZW50
RmxhZ3MqLz4gVmlydHVhbEtleUV2ZW50RmxhZ3NQYWlyOworICAgIHR5cGVkZWYgSGFzaE1hcDxW
aXJ0dWFsS2V5RXZlbnRGbGFnc1BhaXIsIFN0cmluZz4gVmlydHVhbEtleVRvS2V5TWFwOworICAg
IFZpcnR1YWxLZXlUb0tleU1hcCBtX3ByaW50YWJsZUtleUNvZGVUb0tleTsKK307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383338</attachid>
            <date>2019-11-11 22:40:24 -0800</date>
            <delta_ts>2019-11-13 00:53:38 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>25577</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDUyMzhlNzkxYzIyLi44NjRkZjQ2OWRjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC03NTEsMTEgKzc1MSwxMSBAQCB0aGUgcHVibGljIGlP
UyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTc5MTY3Pi4gKi8KICNlbmRpZgogCiAj
aWYgIWRlZmluZWQoRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJM
RV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDAKKyNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9B
VFRSSUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfS0VZQk9BUkRfQ09ERV9B
VFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAwCisjZGVm
aW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZp
bmVkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRl
eCAxMDIwNmZlNDdjNi4uZDg5MTdkZjQ5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBA
IC0xMDAsNiArMTAwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vd2luL1N0cnVjdHVyZWRFeGNlcHRpb25IYW5kbGVyU3VwcHJlc3Nvci5jcHAKICAgICBwbGF0
Zm9ybS93aW4vU3lzdGVtSW5mby5jcHAKICAgICBwbGF0Zm9ybS93aW4vVXNlckFnZW50V2luLmNw
cAorICAgIHBsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcAogICAgIHBsYXRmb3JtL3dpbi9X
Q0RhdGFPYmplY3QuY3BwCiAgICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uY3BwCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5jcHAKQEAgLTEzNiw2ICsxMzcs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS93aW4vU2VhcmNoUG9wdXBNZW51REIuaAogICAgIHBsYXRmb3JtL3dpbi9TZWFyY2hQ
b3B1cE1lbnVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvLmgKKyAgICBwbGF0Zm9y
bS93aW4vVmlydHVhbEtleU1hcC5oCiAgICAgcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5oCiAg
ICAgcGxhdGZvcm0vd2luL1dlYkNvcmVCdW5kbGVXaW4uaAogICAgIHBsYXRmb3JtL3dpbi9XZWJD
b3JlSW5zdGFuY2VIYW5kbGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVu
dFdpbi5jcHAKaW5kZXggYjIzNTZjNWY0ZmMuLjg0ODI4OTkzN2JmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2lu
Y2x1ZGUgIlZpcnR1YWxLZXlNYXAuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0yMTgsMTAg
KzIxOSwzMCBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNo
YXIgYykKICAgICByZXR1cm4gU3RyaW5nKCZjLCAxKTsKIH0KIAorc3RhdGljIFZpcnR1YWxLZXlN
YXAmIHZpcnR1YWxLZXlNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWaXJ0dWFs
S2V5TWFwPiBrZXlNYXA7CisgICAgcmV0dXJuIGtleU1hcDsKK30KKworc3RhdGljIFN0cmluZyBr
ZXlGb3JLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlR5cGUgdHlwZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpD
aGFyKQorICAgICAgICByZXR1cm4gdmlydHVhbEtleU1hcCgpLmRvbUtleUZyb21DaGFyKHdQYXJh
bSk7CisgICAgcmV0dXJuIHZpcnR1YWxLZXlNYXAoKS5kb21LZXlGcm9tTFBhcmFtKGxQYXJhbSk7
Cit9CisKK3N0YXRpYyBTdHJpbmcgY29kZUZvcktleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6VHlwZSB0eXBlLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHJldHVybiB2aXJ0dWFsS2V5TWFw
KCkuZG9tQ29kZUZyb21MUGFyYW0obFBhcmFtKTsKK30KKwogUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoSFdORCwgV1BBUkFNIGNvZGUsIExQQVJBTSBrZXlEYXRh
LCBUeXBlIHR5cGUsIGJvb2wgc3lzdGVtS2V5KQogICAgIDogUGxhdGZvcm1FdmVudCh0eXBlLCBH
ZXRLZXlTdGF0ZShWS19TSElGVCkgJiBISUdIX0JJVF9NQVNLX1NIT1JULCBHZXRLZXlTdGF0ZShW
S19DT05UUk9MKSAmIEhJR0hfQklUX01BU0tfU0hPUlQsIEdldEtleVN0YXRlKFZLX01FTlUpICYg
SElHSF9CSVRfTUFTS19TSE9SVCwgZmFsc2UsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyg6Okdl
dFRpY2tDb3VudCgpICogMC4wMDEpKQogICAgICwgbV90ZXh0KCh0eXBlID09IFBsYXRmb3JtRXZl
bnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkpCiAgICAg
LCBtX3VubW9kaWZpZWRUZXh0KCh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkpCisgICAgLCBtX2tleShrZXlGb3JLZXlF
dmVudCh0eXBlLCBjb2RlLCBrZXlEYXRhKSkKKyAgICAsIG1fY29kZShjb2RlRm9yS2V5RXZlbnQo
dHlwZSwga2V5RGF0YSkpCiAgICAgLCBtX2tleUlkZW50aWZpZXIoKHR5cGUgPT0gUGxhdGZvcm1F
dmVudDo6Q2hhcikgPyBTdHJpbmcoKSA6IGtleUlkZW50aWZpZXJGb3JXaW5kb3dzS2V5Q29kZShj
b2RlKSkKICAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKCh0eXBlID09IFJhd0tleURvd24g
fHwgdHlwZSA9PSBLZXlVcCkgPyB3aW5kb3dzS2V5Y29kZVdpdGhMb2NhdGlvbihjb2RlLCBrZXlE
YXRhKSA6IDApCiAgICAgLCBtX2F1dG9SZXBlYXQoSElXT1JEKGtleURhdGEpICYgS0ZfUkVQRUFU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MmRhYTQ0OWNmNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9WaXJ0dWFsS2V5TWFwLmNwcApA
QCAtMCwwICsxLDU2MCBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
Ky8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZpcnR1YWxLZXlNYXAu
aCIKKwordHlwZWRlZiBlbnVtIDogdWludDhfdCB7CisgICAgRUZfTk9ORSA9IDAsCisgICAgRUZf
U0hJRlRfRE9XTiA9IDEgPDwgMCwKKyAgICBFRl9DT05UUk9MX0RPV04gPSAxIDw8IDEsCisgICAg
RUZfQUxUX0RPV04gPSAxIDw8IDIsCisgICAgRUZfQ0FQU19MT0NLX09OID0gMSA8PCAzLAorfSBF
dmVudEZsYWdzOworCitjb25zdGV4cHIgRXZlbnRGbGFncyBjTW9kaWZpZXJGbGFnc1tdID0gewor
ICAgIEVGX1NISUZUX0RPV04sCisgICAgRUZfQ09OVFJPTF9ET1dOLAorICAgIEVGX0FMVF9ET1dO
LAorICAgIEVGX0NBUFNfTE9DS19PTiwKK307CisKK3N0YXRpYyB2b2lkIHNldE1vZGlmaWVyU3Rh
dGUoQllURSoga2V5Ym9hcmRTdGF0ZSwgaW50IGZsYWdzKQoreworICAgIC8vIEFjY29yZGluZyB0
byBNU0ROIEdldEtleVN0YXRlKCk6CisgICAgLy8gMS4gSWYgdGhlIGhpZ2gtb3JkZXIgYml0IGlz
IDEsIHRoZSBrZXkgaXMgZG93bjsgb3RoZXJ3aXNlLCBpdCBpcyB1cC4KKyAgICAvLyAyLiBJZiB0
aGUgbG93LW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIHRvZ2dsZWQuIEEga2V5LCBzdWNoIGFz
IHRoZQorICAgIC8vICAgIENBUFMgTE9DSyBrZXksIGlzIHRvZ2dsZWQgaWYgaXQgaXMgdHVybmVk
IG9uLiBUaGUga2V5IGlzIG9mZiBhbmQKKyAgICAvLyAgICB1bnRvZ2dsZWQgaWYgdGhlIGxvdy1v
cmRlciBiaXQgaXMgMC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDYzMDEuYXNweAorICAgIGlmIChmbGFncyAm
IEVGX1NISUZUX0RPV04pCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfU0hJRlRdIHw9IDB4ODA7
CisKKyAgICBpZiAoZmxhZ3MgJiBFRl9DT05UUk9MX0RPV04pCisgICAgICAgIGtleWJvYXJkU3Rh
dGVbVktfQ09OVFJPTF0gfD0gMHg4MDsKKworICAgIGlmIChmbGFncyAmIEVGX0FMVF9ET1dOKQor
ICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX01FTlVdIHw9IDB4ODA7CisKKyAgICBpZiAoZmxhZ3Mg
JiBFRl9DQVBTX0xPQ0tfT04pCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfQ0FQSVRBTF0gfD0g
MHgwMTsKK30KKworY29uc3RleHByIGludCBrQ29udHJvbEFuZEFsdEZsYWdzID0gRUZfQ09OVFJP
TF9ET1dOIHwgRUZfQUxUX0RPV047CisKK3N0YXRpYyBib29sIGhhc0NvbnRyb2xBbmRBbHQoaW50
IGZsYWdzKQoreworICAgIHJldHVybiAoZmxhZ3MgJiBrQ29udHJvbEFuZEFsdEZsYWdzKSA9PSBr
Q29udHJvbEFuZEFsdEZsYWdzOworfQorCitjb25zdGV4cHIgaW50IGNNb2RpZmllckZsYWdzQ29t
YmluYXRpb25zID0gKDEgPDwgV1RGX0FSUkFZX0xFTkdUSChjTW9kaWZpZXJGbGFncykpIC0gMTsK
Kworc3RhdGljIHVuc2lnbmVkIGdldE1vZGlmaWVyRmxhZ3MoaW50IGNvbWJpbmF0aW9uKQorewor
ICAgIHVuc2lnbmVkIGZsYWdzID0gRUZfTk9ORTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgoY01vZGlmaWVyRmxhZ3MpOyArK2kpIHsKKyAgICAgICAgaWYgKGNv
bWJpbmF0aW9uICYgKDEgPDwgaSkpCisgICAgICAgICAgICBmbGFncyB8PSBjTW9kaWZpZXJGbGFn
c1tpXTsKKyAgICB9CisgICAgcmV0dXJuIGZsYWdzOworfQorCisvLyBUaGlzIHRhYmxlIG11c3Qg
YmUgc29ydGVkIGJ5IHx2aXJ0dWFsS2V5fCBmb3IgYmluYXJ5IHNlYXJjaC4KK2NvbnN0ZXhwciBz
dHJ1Y3QgTm9uUHJpbnRhYmxlS2V5RW50cnkgeworICAgIGludCB2aXJ0dWFsS2V5OworICAgIEFT
Q0lJTGl0ZXJhbCBkb21LZXk7Cit9IGNOb25QcmludGFibGVLZXlNYXBbXSA9IHsKKyAgICB7IFZL
X0NBTkNFTCwgIkNhbmNlbCJfcyB9LAorICAgIHsgVktfQkFDSywgIkJhY2tzcGFjZSJfcyB9LAor
ICAgIHsgVktfVEFCLCAiVGFiIl9zIH0sCisgICAgeyBWS19DTEVBUiwgIkNsZWFyIl9zIH0sCisg
ICAgeyBWS19SRVRVUk4sICJFbnRlciJfcyB9LAorICAgIHsgVktfU0hJRlQsICJTaGlmdCJfcyB9
LAorICAgIHsgVktfQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX01FTlUsICJBbHQi
X3MgfSwKKyAgICB7IFZLX1BBVVNFLCAiUGF1c2UiX3MgfSwKKyAgICB7IFZLX0NBUElUQUwsICJD
YXBzTG9jayJfcyB9LAorICAgIC8vIFZLX0tBTkEgPT0gVktfSEFOR1VMCisgICAgeyBWS19KVU5K
QSwgIkp1bmphTW9kZSJfcyB9LAorICAgIHsgVktfRklOQUwsICJGSU5BTF9NT0RFIl9zIH0sCisg
ICAgLy8gVktfSEFOSkEgPT0gVktfS0FOSkkKKyAgICB7IFZLX0VTQ0FQRSwgIkVzY2FwZSJfcyB9
LAorICAgIHsgVktfQ09OVkVSVCwgIkNvbnZlcnQiX3MgfSwKKyAgICB7IFZLX05PTkNPTlZFUlQs
ICJOb25Db252ZXJ0Il9zIH0sCisgICAgeyBWS19BQ0NFUFQsICJBY2NlcHQiX3MgfSwKKyAgICB7
IFZLX01PREVDSEFOR0UsICJNb2RlQ2hhbmdlIl9zIH0sCisgICAgLy8gVktfU1BBQ0UKKyAgICB7
IFZLX1BSSU9SLCAiUGFnZVVwIl9zIH0sCisgICAgeyBWS19ORVhULCAiUGFnZURvd24iX3MgfSwK
KyAgICB7IFZLX0VORCwgIkVuZCJfcyB9LAorICAgIHsgVktfSE9NRSwgIkhvbWUiX3MgfSwKKyAg
ICB7IFZLX0xFRlQsICJBcnJvd0xlZnQiX3MgfSwKKyAgICB7IFZLX1VQLCAiQXJyb3dVcCJfcyB9
LAorICAgIHsgVktfUklHSFQsICJBcnJvd1JpZ2h0Il9zIH0sCisgICAgeyBWS19ET1dOLCAiQXJy
b3dEb3duIl9zIH0sCisgICAgeyBWS19TRUxFQ1QsICJTZWxlY3QiX3MgfSwKKyAgICB7IFZLX1BS
SU5ULCAiUHJpbnQiX3MgfSwKKyAgICB7IFZLX0VYRUNVVEUsICJFeGVjdXRlIl9zIH0sCisgICAg
eyBWS19TTkFQU0hPVCwgIlByaW50U2NyZWVuIl9zIH0sCisgICAgeyBWS19JTlNFUlQsICJJbnNl
cnQiX3MgfSwKKyAgICB7IFZLX0RFTEVURSwgIkRlbGV0ZSJfcyB9LAorICAgIHsgVktfSEVMUCwg
IkhlbHAiX3MgfSwKKyAgICAvLyBWS18wLi45CisgICAgLy8gVktfQS4uWgorICAgIHsgVktfTFdJ
TiwgIk1ldGEiX3MgfSwKKyAgICAvLyBWS19DT01NQU5EID09IFZLX0xXSU4KKyAgICB7IFZLX1JX
SU4sICJNZXRhIl9zIH0sCisgICAgeyBWS19BUFBTLCAiQ29udGV4dE1lbnUiX3MgfSwKKyAgICB7
IFZLX1NMRUVQLCAiU3RhbmRieSJfcyB9LAorICAgIC8vIFZLX05VTVBBRDAuLjkKKyAgICAvLyBW
S19NVUxUSVBMWSwgVktfQURELCBWS19TRVBBUkFUT1IsIFZLX1NVQlRSQUNULCBWS19ERUNJTUFM
LAorICAgIC8vIFZLX0RJVklERQorICAgIHsgVktfRjEsICJGMSJfcyB9LAorICAgIHsgVktfRjIs
ICJGMiJfcyB9LAorICAgIHsgVktfRjMsICJGMyJfcyB9LAorICAgIHsgVktfRjQsICJGNCJfcyB9
LAorICAgIHsgVktfRjUsICJGNSJfcyB9LAorICAgIHsgVktfRjYsICJGNiJfcyB9LAorICAgIHsg
VktfRjcsICJGNyJfcyB9LAorICAgIHsgVktfRjgsICJGOCJfcyB9LAorICAgIHsgVktfRjksICJG
OSJfcyB9LAorICAgIHsgVktfRjEwLCAiRjEwIl9zIH0sCisgICAgeyBWS19GMTEsICJGMTEiX3Mg
fSwKKyAgICB7IFZLX0YxMiwgIkYxMiJfcyB9LAorICAgIHsgVktfRjEzLCAiRjEzIl9zIH0sCisg
ICAgeyBWS19GMTQsICJGMTQiX3MgfSwKKyAgICB7IFZLX0YxNSwgIkYxNSJfcyB9LAorICAgIHsg
VktfRjE2LCAiRjE2Il9zIH0sCisgICAgeyBWS19GMTcsICJGMTciX3MgfSwKKyAgICB7IFZLX0Yx
OCwgIkYxOCJfcyB9LAorICAgIHsgVktfRjE5LCAiRjE5Il9zIH0sCisgICAgeyBWS19GMjAsICJG
MjAiX3MgfSwKKyAgICB7IFZLX0YyMSwgIkYyMSJfcyB9LAorICAgIHsgVktfRjIyLCAiRjIyIl9z
IH0sCisgICAgeyBWS19GMjMsICJGMjMiX3MgfSwKKyAgICB7IFZLX0YyNCwgIkYyNCJfcyB9LAor
ICAgIHsgVktfTlVNTE9DSywgIk51bUxvY2siX3MgfSwKKyAgICB7IFZLX1NDUk9MTCwgIlNjcm9s
bExvY2siX3MgfSwKKyAgICB7IFZLX0xTSElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBWS19SU0hJ
RlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfTENPTlRST0wsICJDb250cm9sIl9zIH0sCisgICAg
eyBWS19SQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX0xNRU5VLCAiQWx0Il9zIH0s
CisgICAgeyBWS19STUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9CQUNLLCAiQnJv
d3NlckJhY2siX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfRk9SV0FSRCwgIkJyb3dzZXJGb3J3YXJk
Il9zIH0sCisgICAgeyBWS19CUk9XU0VSX1JFRlJFU0gsICJCcm93c2VyUmVmcmVzaCJfcyB9LAor
ICAgIHsgVktfQlJPV1NFUl9TVE9QLCAiQnJvd3NlclN0b3AiX3MgfSwKKyAgICB7IFZLX0JST1dT
RVJfU0VBUkNILCAiQnJvd3NlclNlYXJjaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9GQVZPUklU
RVMsICJCcm93c2VyRmF2b3JpdGVzIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX0hPTUUsICJCcm93
c2VySG9tZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX01VVEUsICJBdWRpb1ZvbHVtZSJfcyB9LAor
ICAgIHsgVktfVk9MVU1FX0RPV04sICJBdWRpb1ZvbHVtZURvd24iX3MgfSwKKyAgICB7IFZLX1ZP
TFVNRV9VUCwgIkF1ZGlvVm9sdW1lVXAiX3MgfSwKKyAgICB7IFZLX01FRElBX05FWFRfVFJBQ0ss
ICJNZWRpYVRyYWNrTmV4dCJfcyB9LAorICAgIHsgVktfTUVESUFfUFJFVl9UUkFDSywgIk1lZGlh
VHJhY2tQcmV2aW91cyJfcyB9LAorICAgIHsgVktfTUVESUFfU1RPUCwgIk1lZGlhU3RvcCJfcyB9
LAorICAgIHsgVktfTUVESUFfUExBWV9QQVVTRSwgIk1lZGlhUGxheVBhdXNlIl9zIH0sCisgICAg
Ly8gVktfT0VNXzEuLjgsIDEwMiwgUExVUywgQ09NTUEsIE1JTlVTLCBQRVJJT0QKKyAgICB7IFZL
X1BST0NFU1NLRVksICJQcm9jZXNzIl9zIH0sCisgICAgLy8gVktfUEFDS0VUIC0gVXNlZCB0byBw
YXNzIFVuaWNvZGUgY2hhciwgY29uc2lkZXJlZCBhcyBwcmludGFibGUga2V5LgorICAgIHsgVktf
QVRUTiwgIkF0dG4iX3MgfSwKKyAgICB7IFZLX0NSU0VMLCAiQ3JTZWwiX3MgfSwKKyAgICB7IFZL
X0VYU0VMLCAiRXhTZWwiX3MgfSwKKyAgICB7IFZLX0VSRU9GLCAiRXJhc2VFb2YiX3MgfSwKKyAg
ICB7IFZLX1BMQVksICJQbGF5Il9zIH0sCisgICAgeyBWS19aT09NLCAiWm9vbVRvZ2dsZSJfcyB9
LAorICAgIHsgVktfT0VNX0NMRUFSLCAiQ2xlYXIiX3MgfSwKK307CisKKy8vIERpc2FtYmlndWF0
ZXMgdGhlIG1lYW5pbmcgb2YgY2VydGFpbiBub24tcHJpbnRhYmxlIGtleXMgd2hpY2ggaGF2ZSBk
aWZmZXJlbnQKKy8vIG1lYW5pbmdzIHVuZGVyIGRpZmZlcmVudCBsYW5ndWFnZXMsIGJ1dCB1c2Ug
dGhlIHNhbWUgVktFWSBjb2RlLgorc3RhdGljIFN0cmluZyBsYW5ndWFnZVNwZWNpZmljT2VtVmly
dHVhbEtleVRvRG9tS2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIFdPUkQg
bGFuZ3VhZ2UgPSBMT1dPUkQobGF5b3V0KTsKKyAgICBXT1JEIHByaW1hcnlMYW5ndWFnZSA9IFBS
SU1BUllMQU5HSUQobGFuZ3VhZ2UpOworICAgIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19L
T1JFQU4pIHsKKyAgICAgICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAgICAgIGNhc2UgVktf
SEFOR1VMOgorICAgICAgICAgICAgcmV0dXJuICJIYW5ndWxNb2RlIl9zOworICAgICAgICBjYXNl
IFZLX0hBTkpBOgorICAgICAgICAgICAgcmV0dXJuICJIYW5qYU1vZGUiX3M7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19KQVBBTkVTRSkgeworICAgICAgICBz
d2l0Y2ggKHZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIC8vIFZLX0tBTkEgaXNuJ3QgZ2VuZXJh
dGVkIGJ5IGFueSBtb2Rlcm4gbGF5b3V0cyBidXQgaXMgYSBsaXN0ZWQgdmFsdWUKKyAgICAgICAg
ICAgIC8vIHRoYXQgdGhpcmQtcGFydHkgYXBwcyBtaWdodCBzeW50aGVzaXplLCBzbyB3ZSBoYW5k
bGUgaXQgYW55d2F5LgorICAgICAgICBjYXNlIFZLX0tBTkE6CisgICAgICAgIGNhc2UgVktfQVRU
TjoKKyAgICAgICAgICAgIHJldHVybiAiS2FuYU1vZGUiX3M7CisgICAgICAgIGNhc2UgVktfS0FO
Skk6CisgICAgICAgICAgICByZXR1cm4gIkthbmppTW9kZSJfczsKKyAgICAgICAgY2FzZSBWS19P
RU1fQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiQWxwaGFudW1lcmljIl9zOworICAgICAgICBj
YXNlIFZLX09FTV9GSU5JU0g6CisgICAgICAgICAgICByZXR1cm4gIkthdGFrYW5hIl9zOworICAg
ICAgICBjYXNlIFZLX09FTV9DT1BZOgorICAgICAgICAgICAgcmV0dXJuICJIaXJhZ2FuYSJfczsK
KyAgICAgICAgY2FzZSBWS19PRU1fQkFDS1RBQjoKKyAgICAgICAgICAgIHJldHVybiAiUm9tYWpp
Il9zOworICAgICAgICBjYXNlIFZLX09FTV9BVVRPOgorICAgICAgICAgICAgcmV0dXJuICJIYW5r
YWt1Il9zOworICAgICAgICBjYXNlIFZLX09FTV9FTkxXOgorICAgICAgICAgICAgcmV0dXJuICJa
ZW5rYWt1Il9zOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxTdHJp
bmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbFN0cmluZygpOworfQorCitz
dGF0aWMgU3RyaW5nIG5vblByaW50YWJsZVZpcnR1YWxLZXlUb0RvbUtleShpbnQgdmlydHVhbEtl
eSwgSEtMIGxheW91dCkKK3sKKyAgICAvLyAxLiBDaGVjayBpZiB8dmlydHVhbEtleXwgaGFzIGEg
fGxheW91dHwtc3BlY2lmaWMgbWVhbmluZy4KKyAgICBjb25zdCBTdHJpbmcga2V5ID0gbGFuZ3Vh
Z2VTcGVjaWZpY09lbVZpcnR1YWxLZXlUb0RvbUtleSh2aXJ0dWFsS2V5LCBsYXlvdXQpOworICAg
IGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAgLy8gMi4gTW9z
dCB8dmlydHVhbEtleXN8IGhhdmUgdGhlIHNhbWUgbWVhbmluZyByZWdhcmRsZXNzIG9mIHxsYXlv
dXR8LgorICAgIGNvbnN0IE5vblByaW50YWJsZUtleUVudHJ5KiByZXN1bHQgPSBzdGQ6Omxvd2Vy
X2JvdW5kKAorICAgICAgICBzdGQ6OmJlZ2luKGNOb25QcmludGFibGVLZXlNYXApLCBzdGQ6OmVu
ZChjTm9uUHJpbnRhYmxlS2V5TWFwKSwgdmlydHVhbEtleSwKKyAgICAgICAgW10oY29uc3QgTm9u
UHJpbnRhYmxlS2V5RW50cnkmIGVudHJ5LCBpbnQgbmVlZGxlKSB7CisgICAgICAgICAgICByZXR1
cm4gZW50cnkudmlydHVhbEtleSA8IG5lZWRsZTsKKyAgICAgICAgfSk7CisgICAgaWYgKHJlc3Vs
dCAhPSBzdGQ6OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFwKSAmJiByZXN1bHQtPnZpcnR1YWxLZXkg
PT0gdmlydHVhbEtleSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZG9tS2V5OworCisgICAgcmV0
dXJuIG51bGxTdHJpbmcoKTsKK30KKworVmlydHVhbEtleU1hcDo6VmlydHVhbEtleU1hcCgpCit7
CisgICAgdXBkYXRlTGF5b3V0KCk7Cit9CisKK1N0cmluZyBWaXJ0dWFsS2V5TWFwOjpkb21LZXlG
cm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7CisgICAgdW5zaWduZWQgc2NhbkNvZGUgPSAobFBh
cmFtID4+IDE2KSAmIDB4ZmY7CisgICAgYm9vbCBleHRlbmRlZCA9IGxQYXJhbSAmIDB4MDEwMDAw
MDA7CisgICAgdW5zaWduZWQgdmlydHVhbEtleSA9IE1hcFZpcnR1YWxLZXkoc2NhbkNvZGUsIE1B
UFZLX1ZTQ19UT19WSyk7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBpZiAoR2V0S2V5U3RhdGUo
VktfU0hJRlQpIDwgMCkKKyAgICAgICAgZmxhZ3MgfD0gRUZfU0hJRlRfRE9XTjsKKyAgICBpZiAo
R2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgPCAwKQorICAgICAgICBmbGFncyB8PSBFRl9DT05UUk9M
X0RPV047CisgICAgaWYgKEdldEtleVN0YXRlKFZLX01FTlUgKSA8IDApCisgICAgICAgIGZsYWdz
IHw9IEVGX0FMVF9ET1dOOworICAgIGlmIChHZXRLZXlTdGF0ZShWS19DQVBJVEFMKSAmIDEpCisg
ICAgICAgIGZsYWdzIHw9IEVGX0NBUFNfTE9DS19PTjsKKworICAgIHVwZGF0ZUxheW91dCgpOwor
ICAgIC8vIFdpbmRvd3MgZXhwcmVzc2VzIHJpZ2h0LUFsdCBhcyBWS19NRU5VIHdpdGggdGhlIGV4
dGVuZGVkIGZsYWcgc2V0LgorICAgIC8vIFRoaXMga2V5IHNob3VsZCBnZW5lcmF0ZSBBbHRHcmFw
aCB1bmRlciBsYXlvdXRzIHdoaWNoIHVzZSB0aGF0IG1vZGlmaWVyLgorICAgIGlmICh2aXJ0dWFs
S2V5ID09IFZLX01FTlUgJiYgZXh0ZW5kZWQgJiYgbV9oYXNBbHRHcmFwaCkKKyAgICAgICAgcmV0
dXJuICJBbHRHcmFwaCJfczsKKworICAgIFN0cmluZyBrZXkgPSBub25QcmludGFibGVWaXJ0dWFs
S2V5VG9Eb21LZXkodmlydHVhbEtleSwgbV9rZXlib2FyZExheW91dCk7CisgICAgaWYgKCFrZXku
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBjb25zdCBpbnQgZmxhZ3NUb1Ry
eVtdID0geworICAgICAgICAvLyBUcnlpbmcgdG8gbWF0Y2ggRmlyZWZveCdzIGJlaGF2aW9yIGFu
ZCBVSUV2ZW50cyBEb21LZXkgZ3VpZGVsaW5lcy4KKyAgICAgICAgLy8gSWYgdGhlIGNvbWJpbmF0
aW9uIGRvZXNuJ3QgcHJvZHVjZSBhIHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBrZXkgdmFsdWUK
KyAgICAgICAgLy8gc2hvdWxkIGJlIHRoZSBrZXkgd2l0aCBubyBtb2RpZmllcnMgZXhjZXB0IGZv
ciBTaGlmdCBhbmQgQWx0R3IuCisgICAgICAgIC8vIFNlZSBodHRwczovL3czYy5naXRodWIuaW8v
dWlldmVudHMvI2tleXMtZ3VpZGVsaW5lcworICAgICAgICBmbGFncywKKyAgICAgICAgZmxhZ3Mg
JiAoRUZfU0hJRlRfRE9XTiB8IEVGX0NBUFNfTE9DS19PTiksCisgICAgICAgIEVGX05PTkUsCisg
ICAgfTsKKworICAgIGZvciAoYXV0byB0cnlGbGFncyA6IGZsYWdzVG9UcnkpIHsKKyAgICAgICAg
Y29uc3QgYXV0byYgaXQgPSBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5maW5kKHN0ZDo6bWFrZV9w
YWlyKHZpcnR1YWxLZXksIHRyeUZsYWdzKSk7CisgICAgICAgIGlmIChpdCAhPSBtX3ByaW50YWJs
ZUtleUNvZGVUb0tleS5lbmQoKSkgeworICAgICAgICAgICAga2V5ID0gaXQtPnZhbHVlOworICAg
ICAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGtleTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGZvdW5kIG5vdGhpbmcgd2l0aCBubyBmbGFn
cyBzZXQsIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB0cnkuCisgICAgICAgIGlmICh0cnlGbGFn
cyA9PSBFRl9OT05FKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gUmV0dXJu
IERvbUtleTo6VU5JREVOVElGSUVEIHRvIHByZXZlbnQgVVMgbGF5b3V0IGZhbGwtYmFjay4KKyAg
ICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFN0cmluZygmYywgMSk7
Cit9CisKK1N0cmluZyBWaXJ0dWFsS2V5TWFwOjpkb21LZXlGcm9tQ2hhcihVQ2hhciBjKQorewor
ICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgJ1x4MWInOgorICAgICAgICByZXR1cm4gIkVzY2Fw
ZSJfczsKKyAgICBjYXNlICdcdCc6CisgICAgICAgIHJldHVybiAiVGFiIl9zOworICAgIGNhc2Ug
J1xyJzoKKyAgICAgICAgcmV0dXJuICJFbnRlciJfczsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIHNpbmdsZUNoYXJhY3RlclN0cmluZyhjKTsKK30KKwor
U3RyaW5nIFZpcnR1YWxLZXlNYXA6OmRvbUNvZGVGcm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7
CisgICAgY29uc3RleHByIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIHNjYW5Db2RlOworICAg
ICAgICBBU0NJSUxpdGVyYWwgZG9tQ29kZTsKKyAgICB9IGRvbUtleU1hcFtdID0geworICAgICAg
ICB7IDB4MDAwMSwgIkVzY2FwZSJfcyB9LAorICAgICAgICB7IDB4MDAwMiwgIkRpZ2l0MSJfcyB9
LAorICAgICAgICB7IDB4MDAwMywgIkRpZ2l0MiJfcyB9LAorICAgICAgICB7IDB4MDAwNCwgIkRp
Z2l0MyJfcyB9LAorICAgICAgICB7IDB4MDAwNSwgIkRpZ2l0NCJfcyB9LAorICAgICAgICB7IDB4
MDAwNiwgIkRpZ2l0NSJfcyB9LAorICAgICAgICB7IDB4MDAwNywgIkRpZ2l0NiJfcyB9LAorICAg
ICAgICB7IDB4MDAwOCwgIkRpZ2l0NyJfcyB9LAorICAgICAgICB7IDB4MDAwOSwgIkRpZ2l0OCJf
cyB9LAorICAgICAgICB7IDB4MDAwYSwgIkRpZ2l0OSJfcyB9LAorICAgICAgICB7IDB4MDAwYiwg
IkRpZ2l0MCJfcyB9LAorICAgICAgICB7IDB4MDAwYywgIk1pbnVzIl9zIH0sCisgICAgICAgIHsg
MHgwMDBkLCAiRXF1YWwiX3MgfSwKKyAgICAgICAgeyAweDAwMGUsICJCYWNrc3BhY2UiX3MgfSwK
KyAgICAgICAgeyAweDAwMGYsICJUYWIiX3MgfSwKKyAgICAgICAgeyAweDAwMTAsICJLZXlRIl9z
IH0sCisgICAgICAgIHsgMHgwMDExLCAiS2V5VyJfcyB9LAorICAgICAgICB7IDB4MDAxMiwgIktl
eUUiX3MgfSwKKyAgICAgICAgeyAweDAwMTMsICJLZXlSIl9zIH0sCisgICAgICAgIHsgMHgwMDE0
LCAiS2V5VCJfcyB9LAorICAgICAgICB7IDB4MDAxNSwgIktleVkiX3MgfSwKKyAgICAgICAgeyAw
eDAwMTYsICJLZXlVIl9zIH0sCisgICAgICAgIHsgMHgwMDE3LCAiS2V5SSJfcyB9LAorICAgICAg
ICB7IDB4MDAxOCwgIktleU8iX3MgfSwKKyAgICAgICAgeyAweDAwMTksICJLZXlQIl9zIH0sCisg
ICAgICAgIHsgMHgwMDFhLCAiQnJhY2tldExlZnQiX3MgfSwKKyAgICAgICAgeyAweDAwMWIsICJC
cmFja2V0UmlnaHQiX3MgfSwKKyAgICAgICAgeyAweDAwMWMsICJFbnRlciJfcyB9LAorICAgICAg
ICB7IDB4MDAxZCwgIkNvbnRyb2xMZWZ0Il9zIH0sCisgICAgICAgIHsgMHgwMDFlLCAiS2V5QSJf
cyB9LAorICAgICAgICB7IDB4MDAxZiwgIktleVMiX3MgfSwKKyAgICAgICAgeyAweDAwMjAsICJL
ZXlEIl9zIH0sCisgICAgICAgIHsgMHgwMDIxLCAiS2V5RiJfcyB9LAorICAgICAgICB7IDB4MDAy
MiwgIktleUciX3MgfSwKKyAgICAgICAgeyAweDAwMjMsICJLZXlIIl9zIH0sCisgICAgICAgIHsg
MHgwMDI0LCAiS2V5SiJfcyB9LAorICAgICAgICB7IDB4MDAyNSwgIktleUsiX3MgfSwKKyAgICAg
ICAgeyAweDAwMjYsICJLZXlMIl9zIH0sCisgICAgICAgIHsgMHgwMDI3LCAiU2VtaWNvbG9uIl9z
IH0sCisgICAgICAgIHsgMHgwMDI4LCAiUXVvdGUiX3MgfSwKKyAgICAgICAgeyAweDAwMjksICJC
YWNrcXVvdGUiX3MgfSwKKyAgICAgICAgeyAweDAwMmEsICJTaGlmdExlZnQiX3MgfSwKKyAgICAg
ICAgeyAweDAwMmIsICJCYWNrc2xhc2giX3MgfSwKKyAgICAgICAgeyAweDAwMmMsICJLZXlaIl9z
IH0sCisgICAgICAgIHsgMHgwMDJkLCAiS2V5WCJfcyB9LAorICAgICAgICB7IDB4MDAyZSwgIktl
eUMiX3MgfSwKKyAgICAgICAgeyAweDAwMmYsICJLZXlWIl9zIH0sCisgICAgICAgIHsgMHgwMDMw
LCAiS2V5QiJfcyB9LAorICAgICAgICB7IDB4MDAzMSwgIktleU4iX3MgfSwKKyAgICAgICAgeyAw
eDAwMzIsICJLZXlNIl9zIH0sCisgICAgICAgIHsgMHgwMDMzLCAiQ29tbWEiX3MgfSwKKyAgICAg
ICAgeyAweDAwMzQsICJQZXJpb2QiX3MgfSwKKyAgICAgICAgeyAweDAwMzUsICJTbGFzaCJfcyB9
LAorICAgICAgICB7IDB4MDAzNiwgIlNoaWZ0UmlnaHQiX3MgfSwKKyAgICAgICAgeyAweDAwMzcs
ICJOdW1wYWRNdWx0aXBseSJfcyB9LAorICAgICAgICB7IDB4MDAzOCwgIkFsdExlZnQiX3MgfSwK
KyAgICAgICAgeyAweDAwMzksICJTcGFjZSJfcyB9LAorICAgICAgICB7IDB4MDAzYSwgIkNhcHNM
b2NrIl9zIH0sCisgICAgICAgIHsgMHgwMDNiLCAiRjEiX3MgfSwKKyAgICAgICAgeyAweDAwM2Ms
ICJGMiJfcyB9LAorICAgICAgICB7IDB4MDAzZCwgIkYzIl9zIH0sCisgICAgICAgIHsgMHgwMDNl
LCAiRjQiX3MgfSwKKyAgICAgICAgeyAweDAwM2YsICJGNSJfcyB9LAorICAgICAgICB7IDB4MDA0
MCwgIkY2Il9zIH0sCisgICAgICAgIHsgMHgwMDQxLCAiRjciX3MgfSwKKyAgICAgICAgeyAweDAw
NDIsICJGOCJfcyB9LAorICAgICAgICB7IDB4MDA0MywgIkY5Il9zIH0sCisgICAgICAgIHsgMHgw
MDQ0LCAiRjEwIl9zIH0sCisgICAgICAgIHsgMHgwMDQ1LCAiUGF1c2UiX3MgfSwKKyAgICAgICAg
eyAweDAwNDYsICJTY3JvbGxMb2NrIl9zIH0sCisgICAgICAgIHsgMHgwMDQ3LCAiTnVtcGFkNyJf
cyB9LAorICAgICAgICB7IDB4MDA0OCwgIk51bXBhZDgiX3MgfSwKKyAgICAgICAgeyAweDAwNDks
ICJOdW1wYWQ5Il9zIH0sCisgICAgICAgIHsgMHgwMDRhLCAiTnVtcGFkU3VidHJhY3QiX3MgfSwK
KyAgICAgICAgeyAweDAwNGIsICJOdW1wYWQ0Il9zIH0sCisgICAgICAgIHsgMHgwMDRjLCAiTnVt
cGFkNSJfcyB9LAorICAgICAgICB7IDB4MDA0ZCwgIk51bXBhZDYiX3MgfSwKKyAgICAgICAgeyAw
eDAwNGUsICJOdW1wYWRBZGQiX3MgfSwKKyAgICAgICAgeyAweDAwNGYsICJOdW1wYWQxIl9zIH0s
CisgICAgICAgIHsgMHgwMDUwLCAiTnVtcGFkMiJfcyB9LAorICAgICAgICB7IDB4MDA1MSwgIk51
bXBhZDMiX3MgfSwKKyAgICAgICAgeyAweDAwNTIsICJOdW1wYWQwIl9zIH0sCisgICAgICAgIHsg
MHgwMDUzLCAiTnVtcGFkRGVjaW1hbCJfcyB9LAorICAgICAgICB7IDB4MDA1NiwgIkludGxCYWNr
c2xhc2giX3MgfSwKKyAgICAgICAgeyAweDAwNTcsICJGMTEiX3MgfSwKKyAgICAgICAgeyAweDAw
NTgsICJGMTIiX3MgfSwKKyAgICAgICAgeyAweDAwNTksICJOdW1wYWRFcXVhbCJfcyB9LAorICAg
ICAgICB7IDB4MDA2NCwgIkYxMyJfcyB9LAorICAgICAgICB7IDB4MDA2NSwgIkYxNCJfcyB9LAor
ICAgICAgICB7IDB4MDA2NiwgIkYxNSJfcyB9LAorICAgICAgICB7IDB4MDA2NywgIkYxNiJfcyB9
LAorICAgICAgICB7IDB4MDA2OCwgIkYxNyJfcyB9LAorICAgICAgICB7IDB4MDA2OSwgIkYxOCJf
cyB9LAorICAgICAgICB7IDB4MDA2YSwgIkYxOSJfcyB9LAorICAgICAgICB7IDB4MDA2YiwgIkYy
MCJfcyB9LAorICAgICAgICB7IDB4MDA2YywgIkYyMSJfcyB9LAorICAgICAgICB7IDB4MDA2ZCwg
IkYyMiJfcyB9LAorICAgICAgICB7IDB4MDA2ZSwgIkYyMyJfcyB9LAorICAgICAgICB7IDB4MDA3
MCwgIkthbmFNb2RlIl9zIH0sCisgICAgICAgIHsgMHgwMDcxLCAiTGFuZzIiX3MgfSwKKyAgICAg
ICAgeyAweDAwNzIsICJMYW5nMSJfcyB9LAorICAgICAgICB7IDB4MDA3MywgIkludGxSbyJfcyB9
LAorICAgICAgICB7IDB4MDA3NiwgIkYyNCJfcyB9LAorICAgICAgICB7IDB4MDA3NywgIkxhbmc0
Il9zIH0sCisgICAgICAgIHsgMHgwMDc4LCAiTGFuZzMiX3MgfSwKKyAgICAgICAgeyAweDAwNzks
ICJDb252ZXJ0Il9zIH0sCisgICAgICAgIHsgMHgwMDdiLCAiTm9uQ29udmVydCJfcyB9LAorICAg
ICAgICB7IDB4MDA3ZCwgIkludGxZZW4iX3MgfSwKKyAgICAgICAgeyAweDAwN2UsICJOdW1wYWRD
b21tYSJfcyB9LAorICAgICAgICB7IDB4MDEwOCwgIlVuZG8iX3MgfSwKKyAgICAgICAgeyAweDAx
MGEsICJQYXN0ZSJfcyB9LAorICAgICAgICB7IDB4MDExMCwgIk1lZGlhVHJhY2tQcmV2aW91cyJf
cyB9LAorICAgICAgICB7IDB4MDExNywgIkN1dCJfcyB9LAorICAgICAgICB7IDB4MDExOCwgIkNv
cHkiX3MgfSwKKyAgICAgICAgeyAweDAxMTksICJNZWRpYVRyYWNrTmV4dCJfcyB9LAorICAgICAg
ICB7IDB4MDExYywgIk51bXBhZEVudGVyIl9zIH0sCisgICAgICAgIHsgMHgwMTFkLCAiQ29udHJv
bFJpZ2h0Il9zIH0sCisgICAgICAgIHsgMHgwMTIwLCAiQXVkaW9Wb2x1bWVNdXRlIl9zIH0sCisg
ICAgICAgIHsgMHgwMTIxLCAiTGF1bmNoQXBwMiJfcyB9LAorICAgICAgICB7IDB4MDEyMiwgIk1l
ZGlhUGxheVBhdXNlIl9zIH0sCisgICAgICAgIHsgMHgwMTI0LCAiTWVkaWFTdG9wIl9zIH0sCisg
ICAgICAgIHsgMHgwMTJjLCAiRWplY3QiX3MgfSwKKyAgICAgICAgeyAweDAxMmUsICJBdWRpb1Zv
bHVtZURvd24iX3MgfSwKKyAgICAgICAgeyAweDAxMzAsICJBdWRpb1ZvbHVtZVVwIl9zIH0sCisg
ICAgICAgIHsgMHgwMTMyLCAiQnJvd3NlckhvbWUiX3MgfSwKKyAgICAgICAgeyAweDAxMzUsICJO
dW1wYWREaXZpZGUiX3MgfSwKKyAgICAgICAgeyAweDAxMzcsICJQcmludFNjcmVlbiJfcyB9LAor
ICAgICAgICB7IDB4MDEzOCwgIkFsdFJpZ2h0Il9zIH0sCisgICAgICAgIHsgMHgwMTNiLCAiSGVs
cCJfcyB9LAorICAgICAgICB7IDB4MDE0NSwgIk51bUxvY2siX3MgfSwKKyAgICAgICAgeyAweDAx
NDcsICJIb21lIl9zIH0sCisgICAgICAgIHsgMHgwMTQ4LCAiQXJyb3dVcCJfcyB9LAorICAgICAg
ICB7IDB4MDE0OSwgIlBhZ2VVcCJfcyB9LAorICAgICAgICB7IDB4MDE0YiwgIkFycm93TGVmdCJf
cyB9LAorICAgICAgICB7IDB4MDE0ZCwgIkFycm93UmlnaHQiX3MgfSwKKyAgICAgICAgeyAweDAx
NGYsICJFbmQiX3MgfSwKKyAgICAgICAgeyAweDAxNTAsICJBcnJvd0Rvd24iX3MgfSwKKyAgICAg
ICAgeyAweDAxNTEsICJQYWdlRG93biJfcyB9LAorICAgICAgICB7IDB4MDE1MiwgIkluc2VydCJf
cyB9LAorICAgICAgICB7IDB4MDE1MywgIkRlbGV0ZSJfcyB9LAorICAgICAgICB7IDB4MDE1Yiwg
Ik1ldGFMZWZ0Il9zIH0sCisgICAgICAgIHsgMHgwMTVjLCAiTWV0YVJpZ2h0Il9zIH0sCisgICAg
ICAgIHsgMHgwMTVkLCAiQ29udGV4dE1lbnUiX3MgfSwKKyAgICAgICAgeyAweDAxNWUsICJQb3dl
ciJfcyB9LAorICAgICAgICB7IDB4MDE1ZiwgIlNsZWVwIl9zIH0sCisgICAgICAgIHsgMHgwMTYz
LCAiV2FrZVVwIl9zIH0sCisgICAgICAgIHsgMHgwMTY1LCAiQnJvd3NlclNlYXJjaCJfcyB9LAor
ICAgICAgICB7IDB4MDE2NiwgIkJyb3dzZXJGYXZvcml0ZXMiX3MgfSwKKyAgICAgICAgeyAweDAx
NjcsICJCcm93c2VyUmVmcmVzaCJfcyB9LAorICAgICAgICB7IDB4MDE2OCwgIkJyb3dzZXJTdG9w
Il9zIH0sCisgICAgICAgIHsgMHgwMTY5LCAiQnJvd3NlckZvcndhcmQiX3MgfSwKKyAgICAgICAg
eyAweDAxNmEsICJCcm93c2VyQmFjayJfcyB9LAorICAgICAgICB7IDB4MDE2YiwgIkxhdW5jaEFw
cDEiX3MgfSwKKyAgICAgICAgeyAweDAxNmMsICJMYXVuY2hNYWlsIl9zIH0sCisgICAgICAgIHsg
MHgwMTZkLCAiTWVkaWFTZWxlY3QiX3MgfSwKKyAgICB9OworICAgIHVuc2lnbmVkIGV4dGVuZGVk
U2NhbkNvZGUgPSAobFBhcmFtID4+IDE2KSAmIDB4MWZmOworICAgIGNvbnN0IGF1dG8qIHJlc3Vs
dCA9IHN0ZDo6bG93ZXJfYm91bmQoCisgICAgICAgIHN0ZDo6YmVnaW4oZG9tS2V5TWFwKSwgc3Rk
OjplbmQoZG9tS2V5TWFwKSwgZXh0ZW5kZWRTY2FuQ29kZSwKKyAgICAgICAgW10oY29uc3QgYXV0
byYgZW50cnksIGludCBuZWVkbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5zY2FuQ29k
ZSA8IG5lZWRsZTsKKyAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdCAhPSBzdGQ6OmVuZChkb21L
ZXlNYXApICYmIHJlc3VsdC0+c2NhbkNvZGUgPT0gZXh0ZW5kZWRTY2FuQ29kZSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC0+ZG9tQ29kZTsKKworICAgIHJldHVybiAiVW5pZGVudGlmaWVkIl9zOwor
fQorCit2b2lkIFZpcnR1YWxLZXlNYXA6OnVwZGF0ZUxheW91dCgpCit7CisgICAgSEtMIGN1cnJl
bnRMYXlvdXQgPSBHZXRLZXlib2FyZExheW91dCgwKTsKKyAgICBpZiAoY3VycmVudExheW91dCA9
PSBtX2tleWJvYXJkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKKyAgICBCWVRFIGtleWJvYXJk
U3RhdGVUb1Jlc3RvcmVbMjU2XTsKKyAgICBpZiAoIUdldEtleWJvYXJkU3RhdGUoa2V5Ym9hcmRT
dGF0ZVRvUmVzdG9yZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fa2V5Ym9hcmRMYXlvdXQg
PSBjdXJyZW50TGF5b3V0OworICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LmNsZWFyKCk7Cisg
ICAgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAgLy8gTWFwIHNpemUgZm9yIHNvbWUgc2Ft
cGxlIGtleWJvYXJkIGxheW91dHM6CisgICAgLy8gVVM6IDQ3NiwgRnJlbmNoOiA2MDIsIFBlcnNp
YW46IDQ4MiwgVmlldG5hbWVzZTogMTQzNgorICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMTUwMCk7CisKKyAgICBmb3IgKGludCBtb2RpZmllckNvbWJp
bmF0aW9uID0gMDsgbW9kaWZpZXJDb21iaW5hdGlvbiA8PSBjTW9kaWZpZXJGbGFnc0NvbWJpbmF0
aW9uczsgKyttb2RpZmllckNvbWJpbmF0aW9uKSB7CisgICAgICAgIEJZVEUga2V5Ym9hcmRTdGF0
ZVsyNTZdOworICAgICAgICBtZW1zZXQoa2V5Ym9hcmRTdGF0ZSwgMCwgc2l6ZW9mKGtleWJvYXJk
U3RhdGUpKTsKKworICAgICAgICAvLyBTZXR0aW5nIHVwIGtleWJvYXJkIHN0YXRlIGZvciBtb2Rp
ZmllcnMuCisgICAgICAgIHVuc2lnbmVkIGZsYWdzID0gZ2V0TW9kaWZpZXJGbGFncyhtb2RpZmll
ckNvbWJpbmF0aW9uKTsKKyAgICAgICAgc2V0TW9kaWZpZXJTdGF0ZShrZXlib2FyZFN0YXRlLCBm
bGFncyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsS2V5ID0gMDsgdmlydHVhbEtl
eSA8PSAweEZGOyArK3ZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIHdjaGFyX3QgdHJhbnNsYXRl
ZENoYXJzWzVdOworICAgICAgICAgICAgaW50IHJ2ID0gVG9Vbmljb2RlRXgodmlydHVhbEtleSwg
MCwga2V5Ym9hcmRTdGF0ZSwgdHJhbnNsYXRlZENoYXJzLAorICAgICAgICAgICAgICAgIFdURl9B
UlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91dCk7CisKKyAg
ICAgICAgICAgIGlmIChydiA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8vIERlYWQga2V5LCBp
bmplY3RpbmcgVktfU1BBQ0UgdG8gZ2V0IGNoYXJhY3RlciByZXByZXNlbnRhdGlvbi4KKyAgICAg
ICAgICAgICAgICBCWVRFIGVtcHR5U3RhdGVbMjU2XSA9IHsgfTsKKyAgICAgICAgICAgICAgICBy
diA9IFRvVW5pY29kZUV4KFZLX1NQQUNFLCAwLCBlbXB0eVN0YXRlLCB0cmFuc2xhdGVkQ2hhcnMs
CisgICAgICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwg
MCwgbV9rZXlib2FyZExheW91dCk7CisgICAgICAgICAgICAgICAgLy8gRXhwZWN0aW5nIGEgZGVh
ZCBrZXkgY2hhcmFjdGVyIChub3QgZm9sbG93ZWQgYnkgYSBzcGFjZSkuCisgICAgICAgICAgICAg
ICAgaWYgKHJ2ID09IDEpCisgICAgICAgICAgICAgICAgICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRv
S2V5LnNldChzdGQ6Om1ha2VfcGFpcih2aXJ0dWFsS2V5LCBmbGFncyksICJEZWFkIl9zKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAocnYgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmICh0cmFu
c2xhdGVkQ2hhcnNbMF0gPj0gMHgyMCkgeworICAgICAgICAgICAgICAgICAgICBtX3ByaW50YWJs
ZUtleUNvZGVUb0tleS5zZXQoc3RkOjptYWtlX3BhaXIodmlydHVhbEtleSwgZmxhZ3MpLCBzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcodHJhbnNsYXRlZENoYXJzWzBdKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgdGhlIGxheW91dCBtYWtlcyB1c2Ugb2YgQWx0R3JhcGgu
CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb250cm9sQW5kQWx0KGZsYWdzKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faGFzQWx0R3JhcGggPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBTZXRLZXlib2FyZFN0YXRl
KGtleWJvYXJkU3RhdGVUb1Jlc3RvcmUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1ZpcnR1YWxLZXlNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9WaXJ0dWFsS2V5TWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjM3Mjc0MzI0YjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1ZpcnR1YWxLZXlNYXAuaApAQCAtMCwwICsxLDUyIEBACisvLyBDb3B5cmlnaHQgMjAxNiBU
aGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
QykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorLy8KKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworY2xhc3MgVmlydHVhbEtleU1hcCB7CitwdWJsaWM6CisgICAgVmlydHVh
bEtleU1hcCgpOworCisgICAgU3RyaW5nIGRvbUtleUZyb21MUGFyYW0oTFBBUkFNKTsKKyAgICBT
dHJpbmcgZG9tS2V5RnJvbUNoYXIoVUNoYXIpOworICAgIFN0cmluZyBkb21Db2RlRnJvbUxQYXJh
bShMUEFSQU0pOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlTGF5b3V0KCk7CisKKyAgICBI
S0wgbV9rZXlib2FyZExheW91dCA9IDA7CisgICAgYm9vbCBtX2hhc0FsdEdyYXBoID0gZmFsc2U7
CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCAvKlZpcnR1YWxLZXkqLywgdW5zaWdu
ZWQgLypFdmVudEZsYWdzKi8+IFZpcnR1YWxLZXlFdmVudEZsYWdzUGFpcjsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8VmlydHVhbEtleUV2ZW50RmxhZ3NQYWlyLCBTdHJpbmcsIERlZmF1bHRIYXNoPFZp
cnR1YWxLZXlFdmVudEZsYWdzUGFpcj46Okhhc2gsIFBhaXJIYXNoVHJhaXRzPFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4+IFZpcnR1YWxLZXlUb0tleU1hcDsKKyAgICBWaXJ0dWFs
S2V5VG9LZXlNYXAgbV9wcmludGFibGVLZXlDb2RlVG9LZXk7Cit9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383438</attachid>
            <date>2019-11-13 00:53:38 -0800</date>
            <delta_ts>2019-11-13 21:06:33 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>keyboard-06.patch</filename>
            <type>text/plain</type>
            <size>44413</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IDdiOGI0ZGI2NmFkLi43MWU0ZmVlYzMxMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNjM2LDcgKzE2MzYsNiBAQCBmYXN0L2Nzcy93
aWxsLWNoYW5nZS93aWxsLWNoYW5nZS1jcmVhdGVzLXN0YWNraW5nLWNvbnRleHQtaW5saW5lLmh0
bWwgWyBJbWFnZU9ubAogZmFzdC9jc3Mvd2lsbC1jaGFuZ2Uvd2lsbC1jaGFuZ2UtY3JlYXRlcy1z
dGFja2luZy1jb250ZXh0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvZG9tL2Fkb3B0
LWF0dHJpYnV0ZS1jcmFzaC5zdmcgWyBGYWlsdXJlIF0KIGZhc3QvZG9tL25hdmlnYXRvci1wcm9w
ZXJ0eS1nYy1hZnRlci1mcmFtZS1kZXRhY2guaHRtbCBbIEZhaWx1cmUgXQotZmFzdC9ldmVudHMv
YXJyb3cta2V5cy1vbi1ib2R5Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2F0dGVtcHQt
c2Nyb2xsLXdpdGgtbm8tc2Nyb2xsYmFycy5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9h
dXRvc2Nyb2xsLXdoZW4taW5wdXQtaXMtb2Zmc2NyZWVuLmh0bWwgWyBTa2lwIF0gIyBVSVNjcmlw
dAogZmFzdC9ldmVudHMvYXV0b3Njcm9sbC13aXRoLXNvZnR3YXJlLWtleWJvYXJkLmh0bWwgWyBT
a2lwIF0gIyBVSVNjcmlwdApAQCAtMTY3MiwxMSArMTY3MSw3IEBAIGZhc3QvZXZlbnRzL2lucHV0
LWV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5odG1sIFsgU2tpcCBdICMgVUlTY3JpcHQKIGZhc3Qv
ZXZlbnRzL2lucHV0LWV2ZW50cy1wYXN0ZS1kYXRhLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogZmFz
dC9ldmVudHMvaW5wdXQtZXZlbnRzLXBhc3RlLXJpY2gtZGF0YXRyYW5zZmVyLmh0bWwgWyBGYWls
dXJlIF0KIGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtYnV0dG9uLmh0bWwgWyBGYWls
dXJlIF0KLWZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sIFsgRmFpbHVy
ZSBdCiBmYXN0L2V2ZW50cy9rZXlib2FyZGV2ZW50LWNvZGUuaHRtbCBbIEZhaWx1cmUgXQotZmFz
dC9ldmVudHMva2V5Ym9hcmRldmVudC1rZXkuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC9ldmVudHMv
a2V5ZG93bi1mdW5jdGlvbi1rZXlzLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2tleWRv
d24tbGVmdHJpZ2h0LWtleXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMva2V5ZG93bi1u
dW1wYWQta2V5cy5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItaW1h
Z2Utc2V0Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL21vdXNlb3Zlci1idXR0b24uaHRt
bCBbIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMu
aCBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKaW5kZXggNTIzOGU3OTFjMjIuLjg2
NGRmNDY5ZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKQEAgLTc1MSwxMSArNzUxLDExIEBA
IHRoZSBwdWJsaWMgaU9TIFNESy4gU2VlIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzkxNjc+LiAq
LwogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSkK
LSNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUgMAorI2RlZmluZSBFTkFCTEVf
S0VZQk9BUkRfS0VZX0FUVFJJQlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9L
RVlCT0FSRF9DT0RFX0FUVFJJQlVURSkKLSNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0NPREVfQVRU
UklCVVRFIDAKKyNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0NPREVfQVRUUklCVVRFIDEKICNlbmRp
ZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX0RBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IDEwMjA2ZmU0N2M2Li5kMWZkNGViMTJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW4uY21ha2UKQEAgLTEwNyw2ICsxMDcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAKICAgICBwbGF0Zm9ybS93aW4v
V2lkZ2V0V2luLmNwcAogICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIu
Y3BwCisgICAgcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5jcHAKIAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAKICkKQEAgLTE0Miw2ICsxNDMsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS93aW4vV2ViQ29y
ZVRleHRSZW5kZXJlci5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rl
ci5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VMaXN0ZW5lci5oCisgICAgcGxhdGZv
cm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd3NUb3VjaC5o
CiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCmluZGV4
IGIyMzU2YzVmNGZjLi5mYjM0N2Y0NGZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0tleUV2ZW50V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vS2V5RXZlbnRXaW4uY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAKKyNpbmNsdWRlICJXaW5kb3dz
S2V5TmFtZXMuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0yMTgsMTAgKzIxOSwzMCBAQCBz
dGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIgYykKICAgICBy
ZXR1cm4gU3RyaW5nKCZjLCAxKTsKIH0KIAorc3RhdGljIFdpbmRvd3NLZXlOYW1lcyYgd2luZG93
c0tleU5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2luZG93c0tleU5hbWVz
PiBrZXlOYW1lczsKKyAgICByZXR1cm4ga2V5TmFtZXM7Cit9CisKK3N0YXRpYyBTdHJpbmcga2V5
Rm9yS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpUeXBlIHR5cGUsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hh
cikKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NLZXlOYW1lcygpLmRvbUtleUZyb21DaGFyKHdQYXJh
bSk7CisgICAgcmV0dXJuIHdpbmRvd3NLZXlOYW1lcygpLmRvbUtleUZyb21MUGFyYW0obFBhcmFt
KTsKK30KKworc3RhdGljIFN0cmluZyBjb2RlRm9yS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpUeXBlIHR5cGUsIExQQVJBTSBsUGFyYW0pCit7CisgICAgcmV0dXJuIHdpbmRvd3NLZXlO
YW1lcygpLmRvbUNvZGVGcm9tTFBhcmFtKGxQYXJhbSk7Cit9CisKIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEhXTkQsIFdQQVJBTSBjb2RlLCBMUEFSQU0ga2V5
RGF0YSwgVHlwZSB0eXBlLCBib29sIHN5c3RlbUtleSkKICAgICA6IFBsYXRmb3JtRXZlbnQodHlw
ZSwgR2V0S2V5U3RhdGUoVktfU0hJRlQpICYgSElHSF9CSVRfTUFTS19TSE9SVCwgR2V0S2V5U3Rh
dGUoVktfQ09OVFJPTCkgJiBISUdIX0JJVF9NQVNLX1NIT1JULCBHZXRLZXlTdGF0ZShWS19NRU5V
KSAmIEhJR0hfQklUX01BU0tfU0hPUlQsIGZhbHNlLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
OjpHZXRUaWNrQ291bnQoKSAqIDAuMDAxKSkKICAgICAsIG1fdGV4dCgodHlwZSA9PSBQbGF0Zm9y
bUV2ZW50OjpDaGFyKSA/IHNpbmdsZUNoYXJhY3RlclN0cmluZyhjb2RlKSA6IFN0cmluZygpKQog
ICAgICwgbV91bm1vZGlmaWVkVGV4dCgodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKSA/IHNp
bmdsZUNoYXJhY3RlclN0cmluZyhjb2RlKSA6IFN0cmluZygpKQorICAgICwgbV9rZXkoa2V5Rm9y
S2V5RXZlbnQodHlwZSwgY29kZSwga2V5RGF0YSkpCisgICAgLCBtX2NvZGUoY29kZUZvcktleUV2
ZW50KHR5cGUsIGtleURhdGEpKQogICAgICwgbV9rZXlJZGVudGlmaWVyKCh0eXBlID09IFBsYXRm
b3JtRXZlbnQ6OkNoYXIpID8gU3RyaW5nKCkgOiBrZXlJZGVudGlmaWVyRm9yV2luZG93c0tleUNv
ZGUoY29kZSkpCiAgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSgodHlwZSA9PSBSYXdLZXlE
b3duIHx8IHR5cGUgPT0gS2V5VXApID8gd2luZG93c0tleWNvZGVXaXRoTG9jYXRpb24oY29kZSwg
a2V5RGF0YSkgOiAwKQogICAgICwgbV9hdXRvUmVwZWF0KEhJV09SRChrZXlEYXRhKSAmIEtGX1JF
UEVBVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5
TmFtZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg4MGYyNTdjNWE0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlO
YW1lcy5jcHAKQEAgLTAsMCArMSw1NjAgQEAKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE5IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisvLworLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaW5k
b3dzS2V5TmFtZXMuaCIKKwordHlwZWRlZiBlbnVtIDogdWludDhfdCB7CisgICAgRUZfTk9ORSA9
IDAsCisgICAgRUZfU0hJRlRfRE9XTiA9IDEgPDwgMCwKKyAgICBFRl9DT05UUk9MX0RPV04gPSAx
IDw8IDEsCisgICAgRUZfQUxUX0RPV04gPSAxIDw8IDIsCisgICAgRUZfQ0FQU19MT0NLX09OID0g
MSA8PCAzLAorfSBFdmVudEZsYWdzOworCitjb25zdGV4cHIgRXZlbnRGbGFncyBjTW9kaWZpZXJG
bGFnc1tdID0geworICAgIEVGX1NISUZUX0RPV04sCisgICAgRUZfQ09OVFJPTF9ET1dOLAorICAg
IEVGX0FMVF9ET1dOLAorICAgIEVGX0NBUFNfTE9DS19PTiwKK307CisKK3N0YXRpYyB2b2lkIHNl
dE1vZGlmaWVyU3RhdGUoQllURSoga2V5Ym9hcmRTdGF0ZSwgaW50IGZsYWdzKQoreworICAgIC8v
IEFjY29yZGluZyB0byBNU0ROIEdldEtleVN0YXRlKCk6CisgICAgLy8gMS4gSWYgdGhlIGhpZ2gt
b3JkZXIgYml0IGlzIDEsIHRoZSBrZXkgaXMgZG93bjsgb3RoZXJ3aXNlLCBpdCBpcyB1cC4KKyAg
ICAvLyAyLiBJZiB0aGUgbG93LW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIHRvZ2dsZWQuIEEg
a2V5LCBzdWNoIGFzIHRoZQorICAgIC8vICAgIENBUFMgTE9DSyBrZXksIGlzIHRvZ2dsZWQgaWYg
aXQgaXMgdHVybmVkIG9uLiBUaGUga2V5IGlzIG9mZiBhbmQKKyAgICAvLyAgICB1bnRvZ2dsZWQg
aWYgdGhlIGxvdy1vcmRlciBiaXQgaXMgMC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDYzMDEuYXNweAorICAg
IGlmIChmbGFncyAmIEVGX1NISUZUX0RPV04pCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfU0hJ
RlRdIHw9IDB4ODA7CisKKyAgICBpZiAoZmxhZ3MgJiBFRl9DT05UUk9MX0RPV04pCisgICAgICAg
IGtleWJvYXJkU3RhdGVbVktfQ09OVFJPTF0gfD0gMHg4MDsKKworICAgIGlmIChmbGFncyAmIEVG
X0FMVF9ET1dOKQorICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX01FTlVdIHw9IDB4ODA7CisKKyAg
ICBpZiAoZmxhZ3MgJiBFRl9DQVBTX0xPQ0tfT04pCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktf
Q0FQSVRBTF0gfD0gMHgwMTsKK30KKworY29uc3RleHByIGludCBrQ29udHJvbEFuZEFsdEZsYWdz
ID0gRUZfQ09OVFJPTF9ET1dOIHwgRUZfQUxUX0RPV047CisKK3N0YXRpYyBib29sIGhhc0NvbnRy
b2xBbmRBbHQoaW50IGZsYWdzKQoreworICAgIHJldHVybiAoZmxhZ3MgJiBrQ29udHJvbEFuZEFs
dEZsYWdzKSA9PSBrQ29udHJvbEFuZEFsdEZsYWdzOworfQorCitjb25zdGV4cHIgaW50IGNNb2Rp
ZmllckZsYWdzQ29tYmluYXRpb25zID0gKDEgPDwgV1RGX0FSUkFZX0xFTkdUSChjTW9kaWZpZXJG
bGFncykpIC0gMTsKKworc3RhdGljIHVuc2lnbmVkIGdldE1vZGlmaWVyRmxhZ3MoaW50IGNvbWJp
bmF0aW9uKQoreworICAgIHVuc2lnbmVkIGZsYWdzID0gRUZfTk9ORTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoY01vZGlmaWVyRmxhZ3MpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGNvbWJpbmF0aW9uICYgKDEgPDwgaSkpCisgICAgICAgICAgICBmbGFncyB8PSBj
TW9kaWZpZXJGbGFnc1tpXTsKKyAgICB9CisgICAgcmV0dXJuIGZsYWdzOworfQorCisvLyBUaGlz
IHRhYmxlIG11c3QgYmUgc29ydGVkIGJ5IHx2aXJ0dWFsS2V5fCBmb3IgYmluYXJ5IHNlYXJjaC4K
K2NvbnN0ZXhwciBzdHJ1Y3QgTm9uUHJpbnRhYmxlS2V5RW50cnkgeworICAgIGludCB2aXJ0dWFs
S2V5OworICAgIEFTQ0lJTGl0ZXJhbCBkb21LZXk7Cit9IGNOb25QcmludGFibGVLZXlNYXBbXSA9
IHsKKyAgICB7IFZLX0NBTkNFTCwgIkNhbmNlbCJfcyB9LAorICAgIHsgVktfQkFDSywgIkJhY2tz
cGFjZSJfcyB9LAorICAgIHsgVktfVEFCLCAiVGFiIl9zIH0sCisgICAgeyBWS19DTEVBUiwgIkNs
ZWFyIl9zIH0sCisgICAgeyBWS19SRVRVUk4sICJFbnRlciJfcyB9LAorICAgIHsgVktfU0hJRlQs
ICJTaGlmdCJfcyB9LAorICAgIHsgVktfQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZL
X01FTlUsICJBbHQiX3MgfSwKKyAgICB7IFZLX1BBVVNFLCAiUGF1c2UiX3MgfSwKKyAgICB7IFZL
X0NBUElUQUwsICJDYXBzTG9jayJfcyB9LAorICAgIC8vIFZLX0tBTkEgPT0gVktfSEFOR1VMCisg
ICAgeyBWS19KVU5KQSwgIkp1bmphTW9kZSJfcyB9LAorICAgIHsgVktfRklOQUwsICJGSU5BTF9N
T0RFIl9zIH0sCisgICAgLy8gVktfSEFOSkEgPT0gVktfS0FOSkkKKyAgICB7IFZLX0VTQ0FQRSwg
IkVzY2FwZSJfcyB9LAorICAgIHsgVktfQ09OVkVSVCwgIkNvbnZlcnQiX3MgfSwKKyAgICB7IFZL
X05PTkNPTlZFUlQsICJOb25Db252ZXJ0Il9zIH0sCisgICAgeyBWS19BQ0NFUFQsICJBY2NlcHQi
X3MgfSwKKyAgICB7IFZLX01PREVDSEFOR0UsICJNb2RlQ2hhbmdlIl9zIH0sCisgICAgLy8gVktf
U1BBQ0UKKyAgICB7IFZLX1BSSU9SLCAiUGFnZVVwIl9zIH0sCisgICAgeyBWS19ORVhULCAiUGFn
ZURvd24iX3MgfSwKKyAgICB7IFZLX0VORCwgIkVuZCJfcyB9LAorICAgIHsgVktfSE9NRSwgIkhv
bWUiX3MgfSwKKyAgICB7IFZLX0xFRlQsICJBcnJvd0xlZnQiX3MgfSwKKyAgICB7IFZLX1VQLCAi
QXJyb3dVcCJfcyB9LAorICAgIHsgVktfUklHSFQsICJBcnJvd1JpZ2h0Il9zIH0sCisgICAgeyBW
S19ET1dOLCAiQXJyb3dEb3duIl9zIH0sCisgICAgeyBWS19TRUxFQ1QsICJTZWxlY3QiX3MgfSwK
KyAgICB7IFZLX1BSSU5ULCAiUHJpbnQiX3MgfSwKKyAgICB7IFZLX0VYRUNVVEUsICJFeGVjdXRl
Il9zIH0sCisgICAgeyBWS19TTkFQU0hPVCwgIlByaW50U2NyZWVuIl9zIH0sCisgICAgeyBWS19J
TlNFUlQsICJJbnNlcnQiX3MgfSwKKyAgICB7IFZLX0RFTEVURSwgIkRlbGV0ZSJfcyB9LAorICAg
IHsgVktfSEVMUCwgIkhlbHAiX3MgfSwKKyAgICAvLyBWS18wLi45CisgICAgLy8gVktfQS4uWgor
ICAgIHsgVktfTFdJTiwgIk1ldGEiX3MgfSwKKyAgICAvLyBWS19DT01NQU5EID09IFZLX0xXSU4K
KyAgICB7IFZLX1JXSU4sICJNZXRhIl9zIH0sCisgICAgeyBWS19BUFBTLCAiQ29udGV4dE1lbnUi
X3MgfSwKKyAgICB7IFZLX1NMRUVQLCAiU3RhbmRieSJfcyB9LAorICAgIC8vIFZLX05VTVBBRDAu
LjkKKyAgICAvLyBWS19NVUxUSVBMWSwgVktfQURELCBWS19TRVBBUkFUT1IsIFZLX1NVQlRSQUNU
LCBWS19ERUNJTUFMLAorICAgIC8vIFZLX0RJVklERQorICAgIHsgVktfRjEsICJGMSJfcyB9LAor
ICAgIHsgVktfRjIsICJGMiJfcyB9LAorICAgIHsgVktfRjMsICJGMyJfcyB9LAorICAgIHsgVktf
RjQsICJGNCJfcyB9LAorICAgIHsgVktfRjUsICJGNSJfcyB9LAorICAgIHsgVktfRjYsICJGNiJf
cyB9LAorICAgIHsgVktfRjcsICJGNyJfcyB9LAorICAgIHsgVktfRjgsICJGOCJfcyB9LAorICAg
IHsgVktfRjksICJGOSJfcyB9LAorICAgIHsgVktfRjEwLCAiRjEwIl9zIH0sCisgICAgeyBWS19G
MTEsICJGMTEiX3MgfSwKKyAgICB7IFZLX0YxMiwgIkYxMiJfcyB9LAorICAgIHsgVktfRjEzLCAi
RjEzIl9zIH0sCisgICAgeyBWS19GMTQsICJGMTQiX3MgfSwKKyAgICB7IFZLX0YxNSwgIkYxNSJf
cyB9LAorICAgIHsgVktfRjE2LCAiRjE2Il9zIH0sCisgICAgeyBWS19GMTcsICJGMTciX3MgfSwK
KyAgICB7IFZLX0YxOCwgIkYxOCJfcyB9LAorICAgIHsgVktfRjE5LCAiRjE5Il9zIH0sCisgICAg
eyBWS19GMjAsICJGMjAiX3MgfSwKKyAgICB7IFZLX0YyMSwgIkYyMSJfcyB9LAorICAgIHsgVktf
RjIyLCAiRjIyIl9zIH0sCisgICAgeyBWS19GMjMsICJGMjMiX3MgfSwKKyAgICB7IFZLX0YyNCwg
IkYyNCJfcyB9LAorICAgIHsgVktfTlVNTE9DSywgIk51bUxvY2siX3MgfSwKKyAgICB7IFZLX1ND
Uk9MTCwgIlNjcm9sbExvY2siX3MgfSwKKyAgICB7IFZLX0xTSElGVCwgIlNoaWZ0Il9zIH0sCisg
ICAgeyBWS19SU0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfTENPTlRST0wsICJDb250cm9s
Il9zIH0sCisgICAgeyBWS19SQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX0xNRU5V
LCAiQWx0Il9zIH0sCisgICAgeyBWS19STUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktfQlJPV1NF
Ul9CQUNLLCAiQnJvd3NlckJhY2siX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfRk9SV0FSRCwgIkJy
b3dzZXJGb3J3YXJkIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX1JFRlJFU0gsICJCcm93c2VyUmVm
cmVzaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9TVE9QLCAiQnJvd3NlclN0b3AiX3MgfSwKKyAg
ICB7IFZLX0JST1dTRVJfU0VBUkNILCAiQnJvd3NlclNlYXJjaCJfcyB9LAorICAgIHsgVktfQlJP
V1NFUl9GQVZPUklURVMsICJCcm93c2VyRmF2b3JpdGVzIl9zIH0sCisgICAgeyBWS19CUk9XU0VS
X0hPTUUsICJCcm93c2VySG9tZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX01VVEUsICJBdWRpb1Zv
bHVtZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX0RPV04sICJBdWRpb1ZvbHVtZURvd24iX3MgfSwK
KyAgICB7IFZLX1ZPTFVNRV9VUCwgIkF1ZGlvVm9sdW1lVXAiX3MgfSwKKyAgICB7IFZLX01FRElB
X05FWFRfVFJBQ0ssICJNZWRpYVRyYWNrTmV4dCJfcyB9LAorICAgIHsgVktfTUVESUFfUFJFVl9U
UkFDSywgIk1lZGlhVHJhY2tQcmV2aW91cyJfcyB9LAorICAgIHsgVktfTUVESUFfU1RPUCwgIk1l
ZGlhU3RvcCJfcyB9LAorICAgIHsgVktfTUVESUFfUExBWV9QQVVTRSwgIk1lZGlhUGxheVBhdXNl
Il9zIH0sCisgICAgLy8gVktfT0VNXzEuLjgsIDEwMiwgUExVUywgQ09NTUEsIE1JTlVTLCBQRVJJ
T0QKKyAgICB7IFZLX1BST0NFU1NLRVksICJQcm9jZXNzIl9zIH0sCisgICAgLy8gVktfUEFDS0VU
IC0gVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhciwgY29uc2lkZXJlZCBhcyBwcmludGFibGUga2V5
LgorICAgIHsgVktfQVRUTiwgIkF0dG4iX3MgfSwKKyAgICB7IFZLX0NSU0VMLCAiQ3JTZWwiX3Mg
fSwKKyAgICB7IFZLX0VYU0VMLCAiRXhTZWwiX3MgfSwKKyAgICB7IFZLX0VSRU9GLCAiRXJhc2VF
b2YiX3MgfSwKKyAgICB7IFZLX1BMQVksICJQbGF5Il9zIH0sCisgICAgeyBWS19aT09NLCAiWm9v
bVRvZ2dsZSJfcyB9LAorICAgIHsgVktfT0VNX0NMRUFSLCAiQ2xlYXIiX3MgfSwKK307CisKKy8v
IERpc2FtYmlndWF0ZXMgdGhlIG1lYW5pbmcgb2YgY2VydGFpbiBub24tcHJpbnRhYmxlIGtleXMg
d2hpY2ggaGF2ZSBkaWZmZXJlbnQKKy8vIG1lYW5pbmdzIHVuZGVyIGRpZmZlcmVudCBsYW5ndWFn
ZXMsIGJ1dCB1c2UgdGhlIHNhbWUgVktFWSBjb2RlLgorc3RhdGljIFN0cmluZyBsYW5ndWFnZVNw
ZWNpZmljT2VtVmlydHVhbEtleVRvRG9tS2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQor
eworICAgIFdPUkQgbGFuZ3VhZ2UgPSBMT1dPUkQobGF5b3V0KTsKKyAgICBXT1JEIHByaW1hcnlM
YW5ndWFnZSA9IFBSSU1BUllMQU5HSUQobGFuZ3VhZ2UpOworICAgIGlmIChwcmltYXJ5TGFuZ3Vh
Z2UgPT0gTEFOR19LT1JFQU4pIHsKKyAgICAgICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAg
ICAgIGNhc2UgVktfSEFOR1VMOgorICAgICAgICAgICAgcmV0dXJuICJIYW5ndWxNb2RlIl9zOwor
ICAgICAgICBjYXNlIFZLX0hBTkpBOgorICAgICAgICAgICAgcmV0dXJuICJIYW5qYU1vZGUiX3M7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19KQVBBTkVTRSkg
eworICAgICAgICBzd2l0Y2ggKHZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIC8vIFZLX0tBTkEg
aXNuJ3QgZ2VuZXJhdGVkIGJ5IGFueSBtb2Rlcm4gbGF5b3V0cyBidXQgaXMgYSBsaXN0ZWQgdmFs
dWUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhpcmQtcGFydHkgYXBwcyBtaWdodCBzeW50aGVzaXpl
LCBzbyB3ZSBoYW5kbGUgaXQgYW55d2F5LgorICAgICAgICBjYXNlIFZLX0tBTkE6CisgICAgICAg
IGNhc2UgVktfQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiS2FuYU1vZGUiX3M7CisgICAgICAg
IGNhc2UgVktfS0FOSkk6CisgICAgICAgICAgICByZXR1cm4gIkthbmppTW9kZSJfczsKKyAgICAg
ICAgY2FzZSBWS19PRU1fQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiQWxwaGFudW1lcmljIl9z
OworICAgICAgICBjYXNlIFZLX09FTV9GSU5JU0g6CisgICAgICAgICAgICByZXR1cm4gIkthdGFr
YW5hIl9zOworICAgICAgICBjYXNlIFZLX09FTV9DT1BZOgorICAgICAgICAgICAgcmV0dXJuICJI
aXJhZ2FuYSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fQkFDS1RBQjoKKyAgICAgICAgICAgIHJl
dHVybiAiUm9tYWppIl9zOworICAgICAgICBjYXNlIFZLX09FTV9BVVRPOgorICAgICAgICAgICAg
cmV0dXJuICJIYW5rYWt1Il9zOworICAgICAgICBjYXNlIFZLX09FTV9FTkxXOgorICAgICAgICAg
ICAgcmV0dXJuICJaZW5rYWt1Il9zOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIG51bGxTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbFN0cmlu
ZygpOworfQorCitzdGF0aWMgU3RyaW5nIG5vblByaW50YWJsZVZpcnR1YWxLZXlUb0RvbUtleShp
bnQgdmlydHVhbEtleSwgSEtMIGxheW91dCkKK3sKKyAgICAvLyAxLiBDaGVjayBpZiB8dmlydHVh
bEtleXwgaGFzIGEgfGxheW91dHwtc3BlY2lmaWMgbWVhbmluZy4KKyAgICBjb25zdCBTdHJpbmcg
a2V5ID0gbGFuZ3VhZ2VTcGVjaWZpY09lbVZpcnR1YWxLZXlUb0RvbUtleSh2aXJ0dWFsS2V5LCBs
YXlvdXQpOworICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisg
ICAgLy8gMi4gTW9zdCB8dmlydHVhbEtleXN8IGhhdmUgdGhlIHNhbWUgbWVhbmluZyByZWdhcmRs
ZXNzIG9mIHxsYXlvdXR8LgorICAgIGNvbnN0IE5vblByaW50YWJsZUtleUVudHJ5KiByZXN1bHQg
PSBzdGQ6Omxvd2VyX2JvdW5kKAorICAgICAgICBzdGQ6OmJlZ2luKGNOb25QcmludGFibGVLZXlN
YXApLCBzdGQ6OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFwKSwgdmlydHVhbEtleSwKKyAgICAgICAg
W10oY29uc3QgTm9uUHJpbnRhYmxlS2V5RW50cnkmIGVudHJ5LCBpbnQgbmVlZGxlKSB7CisgICAg
ICAgICAgICByZXR1cm4gZW50cnkudmlydHVhbEtleSA8IG5lZWRsZTsKKyAgICAgICAgfSk7Cisg
ICAgaWYgKHJlc3VsdCAhPSBzdGQ6OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFwKSAmJiByZXN1bHQt
PnZpcnR1YWxLZXkgPT0gdmlydHVhbEtleSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZG9tS2V5
OworCisgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKK30KKworV2luZG93c0tleU5hbWVzOjpXaW5k
b3dzS2V5TmFtZXMoKQoreworICAgIHVwZGF0ZUxheW91dCgpOworfQorCitTdHJpbmcgV2luZG93
c0tleU5hbWVzOjpkb21LZXlGcm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7CisgICAgdW5zaWdu
ZWQgc2NhbkNvZGUgPSAobFBhcmFtID4+IDE2KSAmIDB4ZmY7CisgICAgYm9vbCBleHRlbmRlZCA9
IGxQYXJhbSAmIDB4MDEwMDAwMDA7CisgICAgdW5zaWduZWQgdmlydHVhbEtleSA9IE1hcFZpcnR1
YWxLZXkoc2NhbkNvZGUsIE1BUFZLX1ZTQ19UT19WSyk7CisgICAgaW50IGZsYWdzID0gMDsKKyAg
ICBpZiAoR2V0S2V5U3RhdGUoVktfU0hJRlQpIDwgMCkKKyAgICAgICAgZmxhZ3MgfD0gRUZfU0hJ
RlRfRE9XTjsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgPCAwKQorICAgICAgICBm
bGFncyB8PSBFRl9DT05UUk9MX0RPV047CisgICAgaWYgKEdldEtleVN0YXRlKFZLX01FTlUgKSA8
IDApCisgICAgICAgIGZsYWdzIHw9IEVGX0FMVF9ET1dOOworICAgIGlmIChHZXRLZXlTdGF0ZShW
S19DQVBJVEFMKSAmIDEpCisgICAgICAgIGZsYWdzIHw9IEVGX0NBUFNfTE9DS19PTjsKKworICAg
IHVwZGF0ZUxheW91dCgpOworICAgIC8vIFdpbmRvd3MgZXhwcmVzc2VzIHJpZ2h0LUFsdCBhcyBW
S19NRU5VIHdpdGggdGhlIGV4dGVuZGVkIGZsYWcgc2V0LgorICAgIC8vIFRoaXMga2V5IHNob3Vs
ZCBnZW5lcmF0ZSBBbHRHcmFwaCB1bmRlciBsYXlvdXRzIHdoaWNoIHVzZSB0aGF0IG1vZGlmaWVy
LgorICAgIGlmICh2aXJ0dWFsS2V5ID09IFZLX01FTlUgJiYgZXh0ZW5kZWQgJiYgbV9oYXNBbHRH
cmFwaCkKKyAgICAgICAgcmV0dXJuICJBbHRHcmFwaCJfczsKKworICAgIFN0cmluZyBrZXkgPSBu
b25QcmludGFibGVWaXJ0dWFsS2V5VG9Eb21LZXkodmlydHVhbEtleSwgbV9rZXlib2FyZExheW91
dCk7CisgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBj
b25zdCBpbnQgZmxhZ3NUb1RyeVtdID0geworICAgICAgICAvLyBUcnlpbmcgdG8gbWF0Y2ggRmly
ZWZveCdzIGJlaGF2aW9yIGFuZCBVSUV2ZW50cyBEb21LZXkgZ3VpZGVsaW5lcy4KKyAgICAgICAg
Ly8gSWYgdGhlIGNvbWJpbmF0aW9uIGRvZXNuJ3QgcHJvZHVjZSBhIHByaW50YWJsZSBjaGFyYWN0
ZXIsIHRoZSBrZXkgdmFsdWUKKyAgICAgICAgLy8gc2hvdWxkIGJlIHRoZSBrZXkgd2l0aCBubyBt
b2RpZmllcnMgZXhjZXB0IGZvciBTaGlmdCBhbmQgQWx0R3IuCisgICAgICAgIC8vIFNlZSBodHRw
czovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2tleXMtZ3VpZGVsaW5lcworICAgICAgICBmbGFn
cywKKyAgICAgICAgZmxhZ3MgJiAoRUZfU0hJRlRfRE9XTiB8IEVGX0NBUFNfTE9DS19PTiksCisg
ICAgICAgIEVGX05PTkUsCisgICAgfTsKKworICAgIGZvciAoYXV0byB0cnlGbGFncyA6IGZsYWdz
VG9UcnkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaXQgPSBtX3ByaW50YWJsZUtleUNvZGVUb0tl
eS5maW5kKHN0ZDo6bWFrZV9wYWlyKHZpcnR1YWxLZXksIHRyeUZsYWdzKSk7CisgICAgICAgIGlm
IChpdCAhPSBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5lbmQoKSkgeworICAgICAgICAgICAga2V5
ID0gaXQtPnZhbHVlOworICAgICAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGtleTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGZvdW5kIG5v
dGhpbmcgd2l0aCBubyBmbGFncyBzZXQsIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB0cnkuCisg
ICAgICAgIGlmICh0cnlGbGFncyA9PSBFRl9OT05FKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgLy8gUmV0dXJuIERvbUtleTo6VU5JREVOVElGSUVEIHRvIHByZXZlbnQgVVMgbGF5
b3V0IGZhbGwtYmFjay4KKyAgICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKworc3RhdGlj
IGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFVDaGFyIGMpCit7CisgICAgcmV0
dXJuIFN0cmluZygmYywgMSk7Cit9CisKK1N0cmluZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZy
b21DaGFyKFVDaGFyIGMpCit7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnXHgxYic6Cisg
ICAgICAgIHJldHVybiAiRXNjYXBlIl9zOworICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgcmV0dXJu
ICJUYWIiX3M7CisgICAgY2FzZSAnXHInOgorICAgICAgICByZXR1cm4gIkVudGVyIl9zOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKGMpOworfQorCitTdHJpbmcgV2luZG93c0tleU5hbWVzOjpkb21Db2RlRnJvbUxQ
YXJhbShMUEFSQU0gbFBhcmFtKQoreworICAgIGNvbnN0ZXhwciBzdHJ1Y3QgeworICAgICAgICB1
bnNpZ25lZCBzY2FuQ29kZTsKKyAgICAgICAgQVNDSUlMaXRlcmFsIGRvbUNvZGU7CisgICAgfSBk
b21LZXlNYXBbXSA9IHsKKyAgICAgICAgeyAweDAwMDEsICJFc2NhcGUiX3MgfSwKKyAgICAgICAg
eyAweDAwMDIsICJEaWdpdDEiX3MgfSwKKyAgICAgICAgeyAweDAwMDMsICJEaWdpdDIiX3MgfSwK
KyAgICAgICAgeyAweDAwMDQsICJEaWdpdDMiX3MgfSwKKyAgICAgICAgeyAweDAwMDUsICJEaWdp
dDQiX3MgfSwKKyAgICAgICAgeyAweDAwMDYsICJEaWdpdDUiX3MgfSwKKyAgICAgICAgeyAweDAw
MDcsICJEaWdpdDYiX3MgfSwKKyAgICAgICAgeyAweDAwMDgsICJEaWdpdDciX3MgfSwKKyAgICAg
ICAgeyAweDAwMDksICJEaWdpdDgiX3MgfSwKKyAgICAgICAgeyAweDAwMGEsICJEaWdpdDkiX3Mg
fSwKKyAgICAgICAgeyAweDAwMGIsICJEaWdpdDAiX3MgfSwKKyAgICAgICAgeyAweDAwMGMsICJN
aW51cyJfcyB9LAorICAgICAgICB7IDB4MDAwZCwgIkVxdWFsIl9zIH0sCisgICAgICAgIHsgMHgw
MDBlLCAiQmFja3NwYWNlIl9zIH0sCisgICAgICAgIHsgMHgwMDBmLCAiVGFiIl9zIH0sCisgICAg
ICAgIHsgMHgwMDEwLCAiS2V5USJfcyB9LAorICAgICAgICB7IDB4MDAxMSwgIktleVciX3MgfSwK
KyAgICAgICAgeyAweDAwMTIsICJLZXlFIl9zIH0sCisgICAgICAgIHsgMHgwMDEzLCAiS2V5UiJf
cyB9LAorICAgICAgICB7IDB4MDAxNCwgIktleVQiX3MgfSwKKyAgICAgICAgeyAweDAwMTUsICJL
ZXlZIl9zIH0sCisgICAgICAgIHsgMHgwMDE2LCAiS2V5VSJfcyB9LAorICAgICAgICB7IDB4MDAx
NywgIktleUkiX3MgfSwKKyAgICAgICAgeyAweDAwMTgsICJLZXlPIl9zIH0sCisgICAgICAgIHsg
MHgwMDE5LCAiS2V5UCJfcyB9LAorICAgICAgICB7IDB4MDAxYSwgIkJyYWNrZXRMZWZ0Il9zIH0s
CisgICAgICAgIHsgMHgwMDFiLCAiQnJhY2tldFJpZ2h0Il9zIH0sCisgICAgICAgIHsgMHgwMDFj
LCAiRW50ZXIiX3MgfSwKKyAgICAgICAgeyAweDAwMWQsICJDb250cm9sTGVmdCJfcyB9LAorICAg
ICAgICB7IDB4MDAxZSwgIktleUEiX3MgfSwKKyAgICAgICAgeyAweDAwMWYsICJLZXlTIl9zIH0s
CisgICAgICAgIHsgMHgwMDIwLCAiS2V5RCJfcyB9LAorICAgICAgICB7IDB4MDAyMSwgIktleUYi
X3MgfSwKKyAgICAgICAgeyAweDAwMjIsICJLZXlHIl9zIH0sCisgICAgICAgIHsgMHgwMDIzLCAi
S2V5SCJfcyB9LAorICAgICAgICB7IDB4MDAyNCwgIktleUoiX3MgfSwKKyAgICAgICAgeyAweDAw
MjUsICJLZXlLIl9zIH0sCisgICAgICAgIHsgMHgwMDI2LCAiS2V5TCJfcyB9LAorICAgICAgICB7
IDB4MDAyNywgIlNlbWljb2xvbiJfcyB9LAorICAgICAgICB7IDB4MDAyOCwgIlF1b3RlIl9zIH0s
CisgICAgICAgIHsgMHgwMDI5LCAiQmFja3F1b3RlIl9zIH0sCisgICAgICAgIHsgMHgwMDJhLCAi
U2hpZnRMZWZ0Il9zIH0sCisgICAgICAgIHsgMHgwMDJiLCAiQmFja3NsYXNoIl9zIH0sCisgICAg
ICAgIHsgMHgwMDJjLCAiS2V5WiJfcyB9LAorICAgICAgICB7IDB4MDAyZCwgIktleVgiX3MgfSwK
KyAgICAgICAgeyAweDAwMmUsICJLZXlDIl9zIH0sCisgICAgICAgIHsgMHgwMDJmLCAiS2V5ViJf
cyB9LAorICAgICAgICB7IDB4MDAzMCwgIktleUIiX3MgfSwKKyAgICAgICAgeyAweDAwMzEsICJL
ZXlOIl9zIH0sCisgICAgICAgIHsgMHgwMDMyLCAiS2V5TSJfcyB9LAorICAgICAgICB7IDB4MDAz
MywgIkNvbW1hIl9zIH0sCisgICAgICAgIHsgMHgwMDM0LCAiUGVyaW9kIl9zIH0sCisgICAgICAg
IHsgMHgwMDM1LCAiU2xhc2giX3MgfSwKKyAgICAgICAgeyAweDAwMzYsICJTaGlmdFJpZ2h0Il9z
IH0sCisgICAgICAgIHsgMHgwMDM3LCAiTnVtcGFkTXVsdGlwbHkiX3MgfSwKKyAgICAgICAgeyAw
eDAwMzgsICJBbHRMZWZ0Il9zIH0sCisgICAgICAgIHsgMHgwMDM5LCAiU3BhY2UiX3MgfSwKKyAg
ICAgICAgeyAweDAwM2EsICJDYXBzTG9jayJfcyB9LAorICAgICAgICB7IDB4MDAzYiwgIkYxIl9z
IH0sCisgICAgICAgIHsgMHgwMDNjLCAiRjIiX3MgfSwKKyAgICAgICAgeyAweDAwM2QsICJGMyJf
cyB9LAorICAgICAgICB7IDB4MDAzZSwgIkY0Il9zIH0sCisgICAgICAgIHsgMHgwMDNmLCAiRjUi
X3MgfSwKKyAgICAgICAgeyAweDAwNDAsICJGNiJfcyB9LAorICAgICAgICB7IDB4MDA0MSwgIkY3
Il9zIH0sCisgICAgICAgIHsgMHgwMDQyLCAiRjgiX3MgfSwKKyAgICAgICAgeyAweDAwNDMsICJG
OSJfcyB9LAorICAgICAgICB7IDB4MDA0NCwgIkYxMCJfcyB9LAorICAgICAgICB7IDB4MDA0NSwg
IlBhdXNlIl9zIH0sCisgICAgICAgIHsgMHgwMDQ2LCAiU2Nyb2xsTG9jayJfcyB9LAorICAgICAg
ICB7IDB4MDA0NywgIk51bXBhZDciX3MgfSwKKyAgICAgICAgeyAweDAwNDgsICJOdW1wYWQ4Il9z
IH0sCisgICAgICAgIHsgMHgwMDQ5LCAiTnVtcGFkOSJfcyB9LAorICAgICAgICB7IDB4MDA0YSwg
Ik51bXBhZFN1YnRyYWN0Il9zIH0sCisgICAgICAgIHsgMHgwMDRiLCAiTnVtcGFkNCJfcyB9LAor
ICAgICAgICB7IDB4MDA0YywgIk51bXBhZDUiX3MgfSwKKyAgICAgICAgeyAweDAwNGQsICJOdW1w
YWQ2Il9zIH0sCisgICAgICAgIHsgMHgwMDRlLCAiTnVtcGFkQWRkIl9zIH0sCisgICAgICAgIHsg
MHgwMDRmLCAiTnVtcGFkMSJfcyB9LAorICAgICAgICB7IDB4MDA1MCwgIk51bXBhZDIiX3MgfSwK
KyAgICAgICAgeyAweDAwNTEsICJOdW1wYWQzIl9zIH0sCisgICAgICAgIHsgMHgwMDUyLCAiTnVt
cGFkMCJfcyB9LAorICAgICAgICB7IDB4MDA1MywgIk51bXBhZERlY2ltYWwiX3MgfSwKKyAgICAg
ICAgeyAweDAwNTYsICJJbnRsQmFja3NsYXNoIl9zIH0sCisgICAgICAgIHsgMHgwMDU3LCAiRjEx
Il9zIH0sCisgICAgICAgIHsgMHgwMDU4LCAiRjEyIl9zIH0sCisgICAgICAgIHsgMHgwMDU5LCAi
TnVtcGFkRXF1YWwiX3MgfSwKKyAgICAgICAgeyAweDAwNjQsICJGMTMiX3MgfSwKKyAgICAgICAg
eyAweDAwNjUsICJGMTQiX3MgfSwKKyAgICAgICAgeyAweDAwNjYsICJGMTUiX3MgfSwKKyAgICAg
ICAgeyAweDAwNjcsICJGMTYiX3MgfSwKKyAgICAgICAgeyAweDAwNjgsICJGMTciX3MgfSwKKyAg
ICAgICAgeyAweDAwNjksICJGMTgiX3MgfSwKKyAgICAgICAgeyAweDAwNmEsICJGMTkiX3MgfSwK
KyAgICAgICAgeyAweDAwNmIsICJGMjAiX3MgfSwKKyAgICAgICAgeyAweDAwNmMsICJGMjEiX3Mg
fSwKKyAgICAgICAgeyAweDAwNmQsICJGMjIiX3MgfSwKKyAgICAgICAgeyAweDAwNmUsICJGMjMi
X3MgfSwKKyAgICAgICAgeyAweDAwNzAsICJLYW5hTW9kZSJfcyB9LAorICAgICAgICB7IDB4MDA3
MSwgIkxhbmcyIl9zIH0sCisgICAgICAgIHsgMHgwMDcyLCAiTGFuZzEiX3MgfSwKKyAgICAgICAg
eyAweDAwNzMsICJJbnRsUm8iX3MgfSwKKyAgICAgICAgeyAweDAwNzYsICJGMjQiX3MgfSwKKyAg
ICAgICAgeyAweDAwNzcsICJMYW5nNCJfcyB9LAorICAgICAgICB7IDB4MDA3OCwgIkxhbmczIl9z
IH0sCisgICAgICAgIHsgMHgwMDc5LCAiQ29udmVydCJfcyB9LAorICAgICAgICB7IDB4MDA3Yiwg
Ik5vbkNvbnZlcnQiX3MgfSwKKyAgICAgICAgeyAweDAwN2QsICJJbnRsWWVuIl9zIH0sCisgICAg
ICAgIHsgMHgwMDdlLCAiTnVtcGFkQ29tbWEiX3MgfSwKKyAgICAgICAgeyAweDAxMDgsICJVbmRv
Il9zIH0sCisgICAgICAgIHsgMHgwMTBhLCAiUGFzdGUiX3MgfSwKKyAgICAgICAgeyAweDAxMTAs
ICJNZWRpYVRyYWNrUHJldmlvdXMiX3MgfSwKKyAgICAgICAgeyAweDAxMTcsICJDdXQiX3MgfSwK
KyAgICAgICAgeyAweDAxMTgsICJDb3B5Il9zIH0sCisgICAgICAgIHsgMHgwMTE5LCAiTWVkaWFU
cmFja05leHQiX3MgfSwKKyAgICAgICAgeyAweDAxMWMsICJOdW1wYWRFbnRlciJfcyB9LAorICAg
ICAgICB7IDB4MDExZCwgIkNvbnRyb2xSaWdodCJfcyB9LAorICAgICAgICB7IDB4MDEyMCwgIkF1
ZGlvVm9sdW1lTXV0ZSJfcyB9LAorICAgICAgICB7IDB4MDEyMSwgIkxhdW5jaEFwcDIiX3MgfSwK
KyAgICAgICAgeyAweDAxMjIsICJNZWRpYVBsYXlQYXVzZSJfcyB9LAorICAgICAgICB7IDB4MDEy
NCwgIk1lZGlhU3RvcCJfcyB9LAorICAgICAgICB7IDB4MDEyYywgIkVqZWN0Il9zIH0sCisgICAg
ICAgIHsgMHgwMTJlLCAiQXVkaW9Wb2x1bWVEb3duIl9zIH0sCisgICAgICAgIHsgMHgwMTMwLCAi
QXVkaW9Wb2x1bWVVcCJfcyB9LAorICAgICAgICB7IDB4MDEzMiwgIkJyb3dzZXJIb21lIl9zIH0s
CisgICAgICAgIHsgMHgwMTM1LCAiTnVtcGFkRGl2aWRlIl9zIH0sCisgICAgICAgIHsgMHgwMTM3
LCAiUHJpbnRTY3JlZW4iX3MgfSwKKyAgICAgICAgeyAweDAxMzgsICJBbHRSaWdodCJfcyB9LAor
ICAgICAgICB7IDB4MDEzYiwgIkhlbHAiX3MgfSwKKyAgICAgICAgeyAweDAxNDUsICJOdW1Mb2Nr
Il9zIH0sCisgICAgICAgIHsgMHgwMTQ3LCAiSG9tZSJfcyB9LAorICAgICAgICB7IDB4MDE0OCwg
IkFycm93VXAiX3MgfSwKKyAgICAgICAgeyAweDAxNDksICJQYWdlVXAiX3MgfSwKKyAgICAgICAg
eyAweDAxNGIsICJBcnJvd0xlZnQiX3MgfSwKKyAgICAgICAgeyAweDAxNGQsICJBcnJvd1JpZ2h0
Il9zIH0sCisgICAgICAgIHsgMHgwMTRmLCAiRW5kIl9zIH0sCisgICAgICAgIHsgMHgwMTUwLCAi
QXJyb3dEb3duIl9zIH0sCisgICAgICAgIHsgMHgwMTUxLCAiUGFnZURvd24iX3MgfSwKKyAgICAg
ICAgeyAweDAxNTIsICJJbnNlcnQiX3MgfSwKKyAgICAgICAgeyAweDAxNTMsICJEZWxldGUiX3Mg
fSwKKyAgICAgICAgeyAweDAxNWIsICJNZXRhTGVmdCJfcyB9LAorICAgICAgICB7IDB4MDE1Yywg
Ik1ldGFSaWdodCJfcyB9LAorICAgICAgICB7IDB4MDE1ZCwgIkNvbnRleHRNZW51Il9zIH0sCisg
ICAgICAgIHsgMHgwMTVlLCAiUG93ZXIiX3MgfSwKKyAgICAgICAgeyAweDAxNWYsICJTbGVlcCJf
cyB9LAorICAgICAgICB7IDB4MDE2MywgIldha2VVcCJfcyB9LAorICAgICAgICB7IDB4MDE2NSwg
IkJyb3dzZXJTZWFyY2giX3MgfSwKKyAgICAgICAgeyAweDAxNjYsICJCcm93c2VyRmF2b3JpdGVz
Il9zIH0sCisgICAgICAgIHsgMHgwMTY3LCAiQnJvd3NlclJlZnJlc2giX3MgfSwKKyAgICAgICAg
eyAweDAxNjgsICJCcm93c2VyU3RvcCJfcyB9LAorICAgICAgICB7IDB4MDE2OSwgIkJyb3dzZXJG
b3J3YXJkIl9zIH0sCisgICAgICAgIHsgMHgwMTZhLCAiQnJvd3NlckJhY2siX3MgfSwKKyAgICAg
ICAgeyAweDAxNmIsICJMYXVuY2hBcHAxIl9zIH0sCisgICAgICAgIHsgMHgwMTZjLCAiTGF1bmNo
TWFpbCJfcyB9LAorICAgICAgICB7IDB4MDE2ZCwgIk1lZGlhU2VsZWN0Il9zIH0sCisgICAgfTsK
KyAgICB1bnNpZ25lZCBleHRlbmRlZFNjYW5Db2RlID0gKGxQYXJhbSA+PiAxNikgJiAweDFmZjsK
KyAgICBjb25zdCBhdXRvKiByZXN1bHQgPSBzdGQ6Omxvd2VyX2JvdW5kKAorICAgICAgICBzdGQ6
OmJlZ2luKGRvbUtleU1hcCksIHN0ZDo6ZW5kKGRvbUtleU1hcCksIGV4dGVuZGVkU2NhbkNvZGUs
CisgICAgICAgIFtdKGNvbnN0IGF1dG8mIGVudHJ5LCBpbnQgbmVlZGxlKSB7CisgICAgICAgICAg
ICByZXR1cm4gZW50cnkuc2NhbkNvZGUgPCBuZWVkbGU7CisgICAgICAgIH0pOworICAgIGlmIChy
ZXN1bHQgIT0gc3RkOjplbmQoZG9tS2V5TWFwKSAmJiByZXN1bHQtPnNjYW5Db2RlID09IGV4dGVu
ZGVkU2NhbkNvZGUpCisgICAgICAgIHJldHVybiByZXN1bHQtPmRvbUNvZGU7CisKKyAgICByZXR1
cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKwordm9pZCBXaW5kb3dzS2V5TmFtZXM6OnVwZGF0ZUxh
eW91dCgpCit7CisgICAgSEtMIGN1cnJlbnRMYXlvdXQgPSBHZXRLZXlib2FyZExheW91dCgwKTsK
KyAgICBpZiAoY3VycmVudExheW91dCA9PSBtX2tleWJvYXJkTGF5b3V0KQorICAgICAgICByZXR1
cm47CisKKyAgICBCWVRFIGtleWJvYXJkU3RhdGVUb1Jlc3RvcmVbMjU2XTsKKyAgICBpZiAoIUdl
dEtleWJvYXJkU3RhdGUoa2V5Ym9hcmRTdGF0ZVRvUmVzdG9yZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fa2V5Ym9hcmRMYXlvdXQgPSBjdXJyZW50TGF5b3V0OworICAgIG1fcHJpbnRhYmxl
S2V5Q29kZVRvS2V5LmNsZWFyKCk7CisgICAgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAg
Ly8gTWFwIHNpemUgZm9yIHNvbWUgc2FtcGxlIGtleWJvYXJkIGxheW91dHM6CisgICAgLy8gVVM6
IDQ3NiwgRnJlbmNoOiA2MDIsIFBlcnNpYW46IDQ4MiwgVmlldG5hbWVzZTogMTQzNgorICAgIG1f
cHJpbnRhYmxlS2V5Q29kZVRvS2V5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMTUwMCk7CisKKyAg
ICBmb3IgKGludCBtb2RpZmllckNvbWJpbmF0aW9uID0gMDsgbW9kaWZpZXJDb21iaW5hdGlvbiA8
PSBjTW9kaWZpZXJGbGFnc0NvbWJpbmF0aW9uczsgKyttb2RpZmllckNvbWJpbmF0aW9uKSB7Cisg
ICAgICAgIEJZVEUga2V5Ym9hcmRTdGF0ZVsyNTZdOworICAgICAgICBtZW1zZXQoa2V5Ym9hcmRT
dGF0ZSwgMCwgc2l6ZW9mKGtleWJvYXJkU3RhdGUpKTsKKworICAgICAgICAvLyBTZXR0aW5nIHVw
IGtleWJvYXJkIHN0YXRlIGZvciBtb2RpZmllcnMuCisgICAgICAgIHVuc2lnbmVkIGZsYWdzID0g
Z2V0TW9kaWZpZXJGbGFncyhtb2RpZmllckNvbWJpbmF0aW9uKTsKKyAgICAgICAgc2V0TW9kaWZp
ZXJTdGF0ZShrZXlib2FyZFN0YXRlLCBmbGFncyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB2
aXJ0dWFsS2V5ID0gMDsgdmlydHVhbEtleSA8PSAweEZGOyArK3ZpcnR1YWxLZXkpIHsKKyAgICAg
ICAgICAgIHdjaGFyX3QgdHJhbnNsYXRlZENoYXJzWzVdOworICAgICAgICAgICAgaW50IHJ2ID0g
VG9Vbmljb2RlRXgodmlydHVhbEtleSwgMCwga2V5Ym9hcmRTdGF0ZSwgdHJhbnNsYXRlZENoYXJz
LAorICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwg
bV9rZXlib2FyZExheW91dCk7CisKKyAgICAgICAgICAgIGlmIChydiA9PSAtMSkgeworICAgICAg
ICAgICAgICAgIC8vIERlYWQga2V5LCBpbmplY3RpbmcgVktfU1BBQ0UgdG8gZ2V0IGNoYXJhY3Rl
ciByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBCWVRFIGVtcHR5U3RhdGVbMjU2XSA9
IHsgfTsKKyAgICAgICAgICAgICAgICBydiA9IFRvVW5pY29kZUV4KFZLX1NQQUNFLCAwLCBlbXB0
eVN0YXRlLCB0cmFuc2xhdGVkQ2hhcnMsCisgICAgICAgICAgICAgICAgICAgIFdURl9BUlJBWV9M
RU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91dCk7CisgICAgICAgICAg
ICAgICAgLy8gRXhwZWN0aW5nIGEgZGVhZCBrZXkgY2hhcmFjdGVyIChub3QgZm9sbG93ZWQgYnkg
YSBzcGFjZSkuCisgICAgICAgICAgICAgICAgaWYgKHJ2ID09IDEpCisgICAgICAgICAgICAgICAg
ICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnNldChzdGQ6Om1ha2VfcGFpcih2aXJ0dWFsS2V5
LCBmbGFncyksICJEZWFkIl9zKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocnYgPT0gMSkgewor
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkQ2hhcnNbMF0gPj0gMHgyMCkgeworICAgICAg
ICAgICAgICAgICAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5zZXQoc3RkOjptYWtlX3BhaXIo
dmlydHVhbEtleSwgZmxhZ3MpLCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodHJhbnNsYXRlZENoYXJz
WzBdKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgdGhlIGxheW91
dCBtYWtlcyB1c2Ugb2YgQWx0R3JhcGguCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb250
cm9sQW5kQWx0KGZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faGFzQWx0R3JhcGgg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBTZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkU3RhdGVUb1Jlc3RvcmUpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZDdjODVmYzIxNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuaApAQCAtMCww
ICsxLDUyIEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjcHJhZ21hIG9uY2UKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworY2xhc3MgV2luZG93
c0tleU5hbWVzIHsKK3B1YmxpYzoKKyAgICBXaW5kb3dzS2V5TmFtZXMoKTsKKworICAgIFN0cmlu
ZyBkb21LZXlGcm9tTFBhcmFtKExQQVJBTSk7CisgICAgU3RyaW5nIGRvbUtleUZyb21DaGFyKFVD
aGFyKTsKKyAgICBTdHJpbmcgZG9tQ29kZUZyb21MUGFyYW0oTFBBUkFNKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHVwZGF0ZUxheW91dCgpOworCisgICAgSEtMIG1fa2V5Ym9hcmRMYXlvdXQgPSAw
OworICAgIGJvb2wgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAgdHlwZWRlZiBzdGQ6OnBh
aXI8dW5zaWduZWQgLypWaXJ0dWFsS2V5Ki8sIHVuc2lnbmVkIC8qRXZlbnRGbGFncyovPiBWaXJ0
dWFsS2V5RXZlbnRGbGFnc1BhaXI7CisgICAgdHlwZWRlZiBIYXNoTWFwPFZpcnR1YWxLZXlFdmVu
dEZsYWdzUGFpciwgU3RyaW5nLCBEZWZhdWx0SGFzaDxWaXJ0dWFsS2V5RXZlbnRGbGFnc1BhaXI+
OjpIYXNoLCBQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+
PiBWaXJ0dWFsS2V5VG9LZXlNYXA7CisgICAgVmlydHVhbEtleVRvS2V5TWFwIG1fcHJpbnRhYmxl
S2V5Q29kZVRvS2V5OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkV2
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCmluZGV4IGMzNjEwMGNmNWM0
Li43ZGJhMDhmZGVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViRXZlbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCkBAIC0yNjMsNyArMjYzLDcg
QEAgcHVibGljOgogI2VsaWYgVVNFKExJQldQRSkKICAgICBXZWJLZXlib2FyZEV2ZW50KFR5cGUs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgY29k
ZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2Rl
LCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGJvb2wgaXNLZXlwYWQsIE9wdGlvblNldDxNb2Rp
Zmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZWxzZQotICAgIFdlYktleWJvYXJkRXZlbnQo
VHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0LCBj
b25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGlu
dCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJDb2RlLCBib29sIGlzQXV0b1JlcGVh
dCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgT3B0aW9uU2V0PE1vZGlmaWVyPiwg
V2FsbFRpbWUgdGltZXN0YW1wKTsKKyAgICBXZWJLZXlib2FyZEV2ZW50KFR5cGUsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQg
d2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGludCBtYWND
aGFyQ29kZSwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wgaXNTeXN0ZW1L
ZXksIE9wdGlvblNldDxNb2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZW5kaWYKIAog
ICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcAppbmRleCBhNWEyM2NmMTQ4ZS4uOGJk
OTQzMjdkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCkBA
IC0xMzIsMTAgKzEzMiwxNiBAQCBXZWJLZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmCiAKICNlbHNlCiAKLVdl
YktleWJvYXJkRXZlbnQ6OldlYktleWJvYXJkRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRl
bnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlD
b2RlLCBpbnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlzS2V5cGFkLCBi
b29sIGlzU3lzdGVtS2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycywgV2FsbFRpbWUg
dGltZXN0YW1wKQorV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlm
aWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUs
IGludCBtYWNDaGFyQ29kZSwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wg
aXNTeXN0ZW1LZXksIE9wdGlvblNldDxNb2RpZmllcj4gbW9kaWZpZXJzLCBXYWxsVGltZSB0aW1l
c3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAs
IG1fdGV4dCh0ZXh0KQogICAgICwgbV91bm1vZGlmaWVkVGV4dCh1bm1vZGlmaWVkVGV4dCkKKyNp
ZiBFTkFCTEUoS0VZQk9BUkRfS0VZX0FUVFJJQlVURSkKKyAgICAsIG1fa2V5KGtleSkKKyNlbmRp
ZgorI2lmIEVOQUJMRShLRVlCT0FSRF9DT0RFX0FUVFJJQlVURSkKKyAgICAsIG1fY29kZShjb2Rl
KQorI2VuZGlmCiAgICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllcikKICAgICAsIG1f
d2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSkKICAgICAsIG1fbmF0
aXZlVmlydHVhbEtleUNvZGUobmF0aXZlVmlydHVhbEtleUNvZGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3BwCmluZGV4IGIzZTYyOTVkMTdkLi44OGQ1M2Qy
MzZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9y
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1XaGVlbEV2ZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TY3JvbGxiYXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXlOYW1lcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c0tleWJvYXJkQ29kZXMuaD4KICNpbmNsdWRlIDx3
aW5kb3dzeC5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CkBAIC00NDYsMTEgKzQ0Nywx
OSBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChI
V05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUgogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdl
YkV2ZW50OjpXaGVlbCwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBGbG9hdFNpemUoZGVsdGFY
LCBkZWx0YVkpLCBGbG9hdFNpemUod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwgZ3JhbnVsYXJp
dHksIG1vZGlmaWVycywgV2FsbFRpbWU6Om5vdygpKTsKIH0KIAorc3RhdGljIFdpbmRvd3NLZXlO
YW1lcyYgd2luZG93c0tleU5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2lu
ZG93c0tleU5hbWVzPiBrZXlOYW1lczsKKyAgICByZXR1cm4ga2V5TmFtZXM7Cit9CisKIFdlYktl
eWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhXTkQg
aHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQogewogICAg
IFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBrZXlib2FyZEV2ZW50VHlwZUZvckV2ZW50KG1lc3NhZ2Up
OwogICAgIFN0cmluZyB0ZXh0ID0gdGV4dEZyb21FdmVudCh3cGFyYW0sIHR5cGUpOwogICAgIFN0
cmluZyB1bm1vZGlmaWVkVGV4dCA9IHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlw
ZSk7CisgICAgU3RyaW5nIGtleSA9IG1lc3NhZ2UgPT0gV01fQ0hBUiA/IHdpbmRvd3NLZXlOYW1l
cygpLmRvbUtleUZyb21DaGFyKHdwYXJhbSkgOiB3aW5kb3dzS2V5TmFtZXMoKS5kb21LZXlGcm9t
TFBhcmFtKGxwYXJhbSk7CisgICAgU3RyaW5nIGNvZGUgPSB3aW5kb3dzS2V5TmFtZXMoKS5kb21D
b2RlRnJvbUxQYXJhbShscGFyYW0pOwogICAgIFN0cmluZyBrZXlJZGVudGlmaWVyID0ga2V5SWRl
bnRpZmllckZyb21FdmVudCh3cGFyYW0sIHR5cGUpOwogICAgIGludCB3aW5kb3dzVmlydHVhbEtl
eUNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CiAgICAgaW50IG5hdGl2ZVZpcnR1YWxL
ZXlDb2RlID0gc3RhdGljX2Nhc3Q8aW50Pih3cGFyYW0pOwpAQCAtNDYwLDcgKzQ2OSw3IEBAIFdl
YktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhX
TkQgaHduZCwgVUlOVCBtZXNzYWdlCiAgICAgYm9vbCBpc1N5c3RlbUtleSA9IGlzU3lzdGVtS2V5
RXZlbnQobWVzc2FnZSk7CiAgICAgYXV0byBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JDdXJyZW50
S2V5U3RhdGUoKTsKIAotICAgIHJldHVybiBXZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVu
bW9kaWZpZWRUZXh0LCBrZXlJZGVudGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2
ZVZpcnR1YWxLZXlDb2RlLCBtYWNDaGFyQ29kZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lz
dGVtS2V5LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSk7CisgICAgcmV0dXJuIFdlYktleWJv
YXJkRXZlbnQodHlwZSwgdGV4dCwgdW5tb2RpZmllZFRleHQsIGtleSwgY29kZSwga2V5SWRlbnRp
Zmllciwgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgbWFjQ2hh
ckNvZGUsIGF1dG9SZXBlYXQsIGlzS2V5cGFkLCBpc1N5c3RlbUtleSwgbW9kaWZpZXJzLCBXYWxs
VGltZTo6bm93KCkpOwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCmluZGV4IDNhYmI5NWRjMDM5Li43MmIwZDU5ZDYw
YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCkBAIC00NDEsMTQg
KzQ0MSwzOSBAQCB2b2lkIHJlcGxheVNhdmVkRXZlbnRzKEhSRVNVTFQqIG9sZURyYWdBbmREcm9w
UmV0dXJuVmFsdWUpCiAgICAgcmVwbGF5aW5nU2F2ZWRFdmVudHMgPSBmYWxzZTsKIH0KIAotc3Rh
dGljIGludCBtYWtlS2V5RGF0YUZvclNjYW5Db2RlKGludCB2aXJ0dWFsS2V5Q29kZSkKK3N0YXRp
YyB1bnNpZ25lZCBtYWtlS2V5RGF0YUZvclNjYW5Db2RlKGludCB2aXJ0dWFsS2V5Q29kZSkKIHsK
ICAgICB1bnNpZ25lZCBzY2FuY29kZSA9IE1hcFZpcnR1YWxLZXkodmlydHVhbEtleUNvZGUsIE1B
UFZLX1ZLX1RPX1ZTQyk7CiAgICAgaW50IGtleURhdGEgPSBzY2FuY29kZSAmIDB4RkY7CisKKyAg
ICBib29sIGZvcmNlRXh0ZW5kZWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKHZpcnR1YWxLZXlDb2Rl
KSB7CisgICAgY2FzZSBWS19MRUZUOgorICAgIGNhc2UgVktfVVA6CisgICAgY2FzZSBWS19SSUdI
VDoKKyAgICBjYXNlIFZLX0RPV046CisgICAgY2FzZSBWS19QUklPUjoKKyAgICBjYXNlIFZLX05F
WFQ6CisgICAgY2FzZSBWS19FTkQ6CisgICAgY2FzZSBWS19IT01FOgorICAgIGNhc2UgVktfSU5T
RVJUOgorICAgIGNhc2UgVktfREVMRVRFOgorICAgIGNhc2UgVktfRElWSURFOgorICAgIGNhc2Ug
VktfTlVNTE9DSzoKKyAgICBjYXNlIFZLX1JDT05UUk9MOgorICAgIGNhc2UgVktfUk1FTlU6Cisg
ICAgICAgIC8vIFNvbWUga2V5cyBuZWVkIHRvIHR1cm4gb24gS0ZfRVhURU5ERUQgZXhwbGljaXRs
eQorICAgICAgICBmb3JjZUV4dGVuZGVkID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgc2NhbmNvZGUgPSBzY2FuY29kZSA+
PiA4OwotICAgIGlmIChzY2FuY29kZSA9PSAweGUwIHx8IHNjYW5jb2RlID09IDB4ZTEpCisgICAg
aWYgKHNjYW5jb2RlID09IDB4ZTAgfHwgc2NhbmNvZGUgPT0gMHhlMSB8fCBmb3JjZUV4dGVuZGVk
KQogICAgICAgICBrZXlEYXRhICs9IEtGX0VYVEVOREVEOwotICAgIHJldHVybiBrZXlEYXRhIDw8
IDE2OworICAgIHVuc2lnbmVkIHJlcGVhdCA9IDE7CisgICAgcmV0dXJuIGtleURhdGEgPDwgMTYg
fCByZXBlYXQ7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGtleURvd25DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC00NjQsMjMgKzQ4OSwxOCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBrZXlEb3duQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKUwogICAgIAogICAgIEpTU3RyaW5nUmVmIGNoYXJhY3RlciA9IEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwogICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7Ci0gICAgaW50IHZpcnR1YWxLZXlDb2RlOworICAgIGludCB2aXJ0dWFsS2V5
Q29kZSA9IDA7CiAgICAgaW50IGNoYXJDb2RlID0gMDsKLSAgICBpbnQga2V5RGF0YSA9IDE7CiAg
ICAgYm9vbCBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSBmYWxzZTsKLSAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJsZWZ0QXJyb3ciKSkgeworICAgIGlmIChK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImxlZnRBcnJvdyIpKQogICAg
ICAgICB2aXJ0dWFsS2V5Q29kZSA9IFZLX0xFRlQ7Ci0gICAgICAgIGtleURhdGEgKz0gS0ZfRVhU
RU5ERUQgPDwgMTY7IC8vIEluIHRoaXMgY2FzZSwgZXh0ZW5kZWQgbWVhbnMgIm5vdCBrZXlwYWQi
LgotICAgIH0gZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIs
ICJyaWdodEFycm93IikpIHsKKyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGNoYXJhY3RlciwgInJpZ2h0QXJyb3ciKSkKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBW
S19SSUdIVDsKLSAgICAgICAga2V5RGF0YSArPSBLRl9FWFRFTkRFRCA8PCAxNjsKLSAgICB9IGVs
c2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAidXBBcnJvdyIp
KSB7CisgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIs
ICJ1cEFycm93IikpCiAgICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfVVA7Ci0gICAgICAgIGtl
eURhdGEgKz0gS0ZfRVhURU5ERUQgPDwgMTY7Ci0gICAgfSBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImRvd25BcnJvdyIpKSB7CisgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJkb3duQXJyb3ciKSkKICAg
ICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19ET1dOOwotICAgICAgICBrZXlEYXRhICs9IEtGX0VY
VEVOREVEIDw8IDE2OwotICAgIH0gZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhjaGFyYWN0ZXIsICJwYWdlVXAiKSkKKyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGNoYXJhY3RlciwgInBhZ2VVcCIpKQogICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9
IFZLX1BSSU9SOwogICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hh
cmFjdGVyLCAicGFnZURvd24iKSkKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19ORVhUOwpA
QCAtNDk2LDMyICs1MTYsNTQgQEAgc3RhdGljIEpTVmFsdWVSZWYga2V5RG93bkNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlMKICAgICAgICAgdmly
dHVhbEtleUNvZGUgPSBWS19TTkFQU0hPVDsKICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGNoYXJhY3RlciwgIm1lbnUiKSkKICAgICAgICAgdmlydHVhbEtleUNvZGUg
PSBWS19BUFBTOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hh
cmFjdGVyLCAibGVmdENvbnRyb2wiKSkgewotICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IFZLX0NP
TlRST0w7Ci0gICAgICAgIGtleURhdGEgKz0gbWFrZUtleURhdGFGb3JTY2FuQ29kZShWS19MQ09O
VFJPTCk7Ci0gICAgfSBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJh
Y3RlciwgImxlZnRTaGlmdCIpKSB7Ci0gICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfU0hJRlQ7
Ci0gICAgICAgIGtleURhdGEgKz0gbWFrZUtleURhdGFGb3JTY2FuQ29kZShWS19MU0hJRlQpOwot
ICAgIH0gZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJs
ZWZ0QWx0IikpIHsKLSAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19NRU5VOwotICAgICAgICBr
ZXlEYXRhICs9IG1ha2VLZXlEYXRhRm9yU2NhbkNvZGUoVktfTE1FTlUpOwotICAgIH0gZWxzZSBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJyaWdodENvbnRyb2wi
KSkgeworICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVy
LCAibGVmdENvbnRyb2wiKSkKKyAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19MQ09OVFJPTDsK
KyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImxl
ZnRTaGlmdCIpKQorICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IFZLX0xTSElGVDsKKyAgICBlbHNl
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImxlZnRBbHQiKSkK
KyAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19MTUVOVTsKKyAgICBlbHNlIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgInJpZ2h0Q29udHJvbCIpKQorICAgICAg
ICB2aXJ0dWFsS2V5Q29kZSA9IFZLX1JDT05UUk9MOworICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAicmlnaHRTaGlmdCIpKQorICAgICAgICB2aXJ0
dWFsS2V5Q29kZSA9IFZLX1JTSElGVDsKKyAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGNoYXJhY3RlciwgInJpZ2h0QWx0IikpCisgICAgICAgIHZpcnR1YWxLZXlDb2Rl
ID0gVktfUk1FTlU7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBjaGFyYWN0ZXJMZW5ndGgg
PSBKU1N0cmluZ0dldExlbmd0aChjaGFyYWN0ZXIpOworICAgICAgICBzdGF0aWMgY29uc3QgY2hh
ciBzaGlmdGVkVVNDaGFyYWN0ZXJzW10gPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVp+IUAj
JCVeJiooKV8re318OlwiPD4/IjsKKyAgICAgICAgY29uc3Qgd2NoYXJfdCogY2hhcmFjdGVyUHRy
ID0gSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChjaGFy
YWN0ZXJMZW5ndGggPT0gMSkgeworICAgICAgICAgICAgY2hhckNvZGUgPSBjaGFyYWN0ZXJQdHJb
MF07CisgICAgICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IExPQllURShWa0tleVNjYW4oY2hhckNv
ZGUpKTsKKyAgICAgICAgICAgIGlmIChzdHJjaHIoc2hpZnRlZFVTQ2hhcmFjdGVycywgY2hhckNv
ZGUpKQorICAgICAgICAgICAgICAgIG5lZWRzU2hpZnRLZXlNb2RpZmllciA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyUHRyWzBdID09ICdGJykgeworICAgICAgICAgICAgaWYg
KGNoYXJhY3Rlckxlbmd0aCA9PSAyICYmIGlzQVNDSUlEaWdpdChjaGFyYWN0ZXJQdHJbMV0pKQor
ICAgICAgICAgICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfRjEgKyBjaGFyYWN0ZXJQdHJbMV0g
LSAnMSc7CisgICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXJMZW5ndGggPT0gMyAmJiBjaGFy
YWN0ZXJQdHJbMV0gPT0gJzEnICYmIGlzQVNDSUlEaWdpdChjaGFyYWN0ZXJQdHJbMl0pKQorICAg
ICAgICAgICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfRjEwICsgY2hhcmFjdGVyUHRyWzJdIC0g
JzAnOworICAgICAgICB9CisgICAgfQorICAgIEpTU3RyaW5nUmVsZWFzZShjaGFyYWN0ZXIpOwor
CisgICAgdW5zaWduZWQga2V5RGF0YSA9IG1ha2VLZXlEYXRhRm9yU2NhbkNvZGUodmlydHVhbEtl
eUNvZGUpOworCisgICAgc3dpdGNoICh2aXJ0dWFsS2V5Q29kZSkgeworICAgIGNhc2UgVktfTENP
TlRST0w6CisgICAgY2FzZSBWS19SQ09OVFJPTDoKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBW
S19DT05UUk9MOwotICAgICAgICBrZXlEYXRhICs9IG1ha2VLZXlEYXRhRm9yU2NhbkNvZGUoVktf
UkNPTlRST0wpOwotICAgIH0gZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhj
aGFyYWN0ZXIsICJyaWdodFNoaWZ0IikpIHsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19M
U0hJRlQ6CisgICAgY2FzZSBWS19SU0hJRlQ6CiAgICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktf
U0hJRlQ7Ci0gICAgICAgIGtleURhdGEgKz0gbWFrZUtleURhdGFGb3JTY2FuQ29kZShWS19SU0hJ
RlQpOwotICAgIH0gZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0
ZXIsICJyaWdodEFsdCIpKSB7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfTE1FTlU6Cisg
ICAgY2FzZSBWS19STUVOVToKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19NRU5VOwotICAg
ICAgICBrZXlEYXRhICs9IG1ha2VLZXlEYXRhRm9yU2NhbkNvZGUoVktfUk1FTlUpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHNoaWZ0ZWRVU0NoYXJhY3RlcnNbXSA9
ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWn4hQCMkJV4mKigpXyt7fXw6XCI8Pj8iOwotICAg
ICAgICBjaGFyQ29kZSA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihjaGFyYWN0ZXIpWzBdOwot
ICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IExPQllURShWa0tleVNjYW4oY2hhckNvZGUpKTsKLSAg
ICAgICAgaWYgKHN0cmNocihzaGlmdGVkVVNDaGFyYWN0ZXJzLCBjaGFyQ29kZSkpCi0gICAgICAg
ICAgICBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGNoYXJh
Y3Rlcik7CiAKICAgICBCWVRFIGtleVN0YXRlWzI1Nl07CiAgICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAxIHx8IG5lZWRzU2hpZnRLZXlNb2RpZmllcikgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci93aW4vRXZlbnRTZW5kZXJQcm94eVdpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL3dpbi9FdmVudFNlbmRlclByb3h5V2luLmNwcAppbmRleCAwODg4ZDNhNWY0Zi4uMDZm
MTkyNjFiMzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL0V2ZW50U2Vu
ZGVyUHJveHlXaW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL0V2ZW50U2Vu
ZGVyUHJveHlXaW4uY3BwCkBAIC0xNTIsMTQgKzE1MiwzOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAgICAgbV90aW1lICs9IG1pbGxpc2Vj
b25kcyAvIDEwMDAuMDsKIH0KIAotc3RhdGljIGludCBtYWtlS2V5RGF0YUZvclNjYW5Db2RlKGlu
dCB2aXJ0dWFsS2V5Q29kZSkKK3N0YXRpYyB1bnNpZ25lZCBtYWtlS2V5RGF0YUZvclNjYW5Db2Rl
KGludCB2aXJ0dWFsS2V5Q29kZSkKIHsKICAgICB1bnNpZ25lZCBzY2FuY29kZSA9IE1hcFZpcnR1
YWxLZXkodmlydHVhbEtleUNvZGUsIE1BUFZLX1ZLX1RPX1ZTQyk7CiAgICAgaW50IGtleURhdGEg
PSBzY2FuY29kZSAmIDB4RkY7CisKKyAgICBib29sIGZvcmNlRXh0ZW5kZWQgPSBmYWxzZTsKKyAg
ICBzd2l0Y2ggKHZpcnR1YWxLZXlDb2RlKSB7CisgICAgY2FzZSBWS19MRUZUOgorICAgIGNhc2Ug
VktfVVA6CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICBjYXNlIFZLX0RPV046CisgICAgY2FzZSBW
S19QUklPUjoKKyAgICBjYXNlIFZLX05FWFQ6CisgICAgY2FzZSBWS19FTkQ6CisgICAgY2FzZSBW
S19IT01FOgorICAgIGNhc2UgVktfSU5TRVJUOgorICAgIGNhc2UgVktfREVMRVRFOgorICAgIGNh
c2UgVktfRElWSURFOgorICAgIGNhc2UgVktfTlVNTE9DSzoKKyAgICBjYXNlIFZLX1JDT05UUk9M
OgorICAgIGNhc2UgVktfUk1FTlU6CisgICAgICAgIC8vIFNvbWUga2V5cyBuZWVkIHRvIHR1cm4g
b24gS0ZfRVhURU5ERUQgZXhwbGljaXRseQorICAgICAgICBmb3JjZUV4dGVuZGVkID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAg
ICAgc2NhbmNvZGUgPSBzY2FuY29kZSA+PiA4OwotICAgIGlmIChzY2FuY29kZSA9PSAweGUwIHx8
IHNjYW5jb2RlID09IDB4ZTEpCisgICAgaWYgKHNjYW5jb2RlID09IDB4ZTAgfHwgc2NhbmNvZGUg
PT0gMHhlMSB8fCBmb3JjZUV4dGVuZGVkKQogICAgICAgICBrZXlEYXRhICs9IEtGX0VYVEVOREVE
OwotICAgIHJldHVybiBrZXlEYXRhIDw8IDE2OworICAgIHVuc2lnbmVkIHJlcGVhdCA9IDE7Cisg
ICAgcmV0dXJuIGtleURhdGEgPDwgMTYgfCByZXBlYXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHB1bXBN
ZXNzYWdlUXVldWUoKQpAQCAtMTczLDIzICsxOTgsMTkgQEAgc3RhdGljIHZvaWQgcHVtcE1lc3Nh
Z2VRdWV1ZSgpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBr
ZXlSZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQog
ewotICAgIGludCB2aXJ0dWFsS2V5Q29kZTsKKyAgICBpbnQgdmlydHVhbEtleUNvZGUgPSAwOwog
ICAgIGludCBjaGFyQ29kZSA9IDA7Ci0gICAgaW50IGtleURhdGEgPSAxOworCiAgICAgYm9vbCBu
ZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSBmYWxzZTsKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkgeworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQogICAgICAgICB2aXJ0dWFsS2V5
Q29kZSA9IFZLX0xFRlQ7Ci0gICAgICAgIGtleURhdGEgKz0gS0ZfRVhURU5ERUQgPDwgMTY7IC8v
IEluIHRoaXMgY2FzZSwgZXh0ZW5kZWQgbWVhbnMgIm5vdCBrZXlwYWQiLgotICAgIH0gZWxzZSBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJyaWdodEFycm93IikpIHsK
KyAgICBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0
QXJyb3ciKSkKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19SSUdIVDsKLSAgICAgICAga2V5
RGF0YSArPSBLRl9FWFRFTkRFRCA8PCAxNjsKLSAgICB9IGVsc2UgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoa2V5UmVmLCAidXBBcnJvdyIpKSB7CisgICAgZWxzZSBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJ1cEFycm93IikpCiAgICAgICAgIHZpcnR1
YWxLZXlDb2RlID0gVktfVVA7Ci0gICAgICAgIGtleURhdGEgKz0gS0ZfRVhURU5ERUQgPDwgMTY7
Ci0gICAgfSBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImRv
d25BcnJvdyIpKSB7CisgICAgZWxzZSBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJkb3duQXJyb3ciKSkKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19ET1dOOwot
ICAgICAgICBrZXlEYXRhICs9IEtGX0VYVEVOREVEIDw8IDE2OwotICAgIH0gZWxzZSBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwYWdlVXAiKSkKKyAgICBlbHNlIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VVcCIpKQogICAgICAg
ICB2aXJ0dWFsS2V5Q29kZSA9IFZLX1BSSU9SOwogICAgIGVsc2UgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZURvd24iKSkKICAgICAgICAgdmlydHVhbEtleUNv
ZGUgPSBWS19ORVhUOwpAQCAtMjA1LDMyICsyMjYsNTMgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5
OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleVJlZiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVy
cywKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19TTkFQU0hPVDsKICAgICBlbHNlIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIm1lbnUiKSkKICAgICAgICAgdmly
dHVhbEtleUNvZGUgPSBWS19BUFBTOwotICAgIGVsc2UgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAibGVmdENvbnRyb2wiKSkgewotICAgICAgICB2aXJ0dWFsS2V5Q29k
ZSA9IFZLX0NPTlRST0w7Ci0gICAgICAgIGtleURhdGEgKz0gbWFrZUtleURhdGFGb3JTY2FuQ29k
ZShWS19MQ09OVFJPTCk7Ci0gICAgfSBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgImxlZnRTaGlmdCIpKSB7Ci0gICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktf
U0hJRlQ7Ci0gICAgICAgIGtleURhdGEgKz0gbWFrZUtleURhdGFGb3JTY2FuQ29kZShWS19MU0hJ
RlQpOwotICAgIH0gZWxzZSBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJsZWZ0QWx0IikpIHsKLSAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19NRU5VOwotICAgICAg
ICBrZXlEYXRhICs9IG1ha2VLZXlEYXRhRm9yU2NhbkNvZGUoVktfTE1FTlUpOwotICAgIH0gZWxz
ZSBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJyaWdodENvbnRyb2wi
KSkgeworICAgIGVsc2UgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAi
bGVmdENvbnRyb2wiKSkKKyAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19MQ09OVFJPTDsKKyAg
ICBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRTaGlm
dCIpKQorICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IFZLX0xTSElGVDsKKyAgICBlbHNlIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBbHQiKSkKKyAgICAgICAg
dmlydHVhbEtleUNvZGUgPSBWS19MTUVOVTsKKyAgICBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0Q29udHJvbCIpKQorICAgICAgICB2aXJ0dWFsS2V5
Q29kZSA9IFZLX1JDT05UUk9MOworICAgIGVsc2UgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoa2V5UmVmLCAicmlnaHRTaGlmdCIpKQorICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IFZL
X1JTSElGVDsKKyAgICBlbHNlIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgInJpZ2h0QWx0IikpCisgICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfUk1FTlU7CisgICAg
ZWxzZSB7CisgICAgICAgIHNpemVfdCBrZXlMZW5ndGggPSBXS1N0cmluZ0dldExlbmd0aChrZXlS
ZWYpOworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBzaGlmdGVkVVNDaGFyYWN0ZXJzW10gPSAi
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVp+IUAjJCVeJiooKV8re318OlwiPD4/IjsKKyAgICAg
ICAgd2NoYXJfdCBrZXlTdHJbM107CisgICAgICAgIFdLU3RyaW5nR2V0Q2hhcmFjdGVycyhrZXlS
ZWYsIGtleVN0ciwgX2NvdW50b2Yoa2V5U3RyKSk7CisgICAgICAgIGlmIChrZXlMZW5ndGggPT0g
MSkgeworICAgICAgICAgICAgY2hhckNvZGUgPSBrZXlTdHJbMF07CisgICAgICAgICAgICB2aXJ0
dWFsS2V5Q29kZSA9IExPQllURShWa0tleVNjYW4oY2hhckNvZGUpKTsKKyAgICAgICAgICAgIGlm
IChzdHJjaHIoc2hpZnRlZFVTQ2hhcmFjdGVycywgY2hhckNvZGUpKQorICAgICAgICAgICAgICAg
IG5lZWRzU2hpZnRLZXlNb2RpZmllciA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5U3Ry
WzBdID09ICdGJykgeworICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA9PSAyICYmIGlzQVNDSUlE
aWdpdChrZXlTdHJbMV0pKQorICAgICAgICAgICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfRjEg
KyBrZXlTdHJbMV0gLSAnMSc7CisgICAgICAgICAgICBlbHNlIGlmIChrZXlMZW5ndGggPT0gMyAm
JiBrZXlTdHJbMV0gPT0gJzEnICYmIGlzQVNDSUlEaWdpdChrZXlTdHJbMl0pKQorICAgICAgICAg
ICAgICAgIHZpcnR1YWxLZXlDb2RlID0gVktfRjEwICsga2V5U3RyWzJdIC0gJzAnOworICAgICAg
ICB9CisgICAgfQorCisgICAgdW5zaWduZWQga2V5RGF0YSA9IG1ha2VLZXlEYXRhRm9yU2NhbkNv
ZGUodmlydHVhbEtleUNvZGUpOworCisgICAgc3dpdGNoICh2aXJ0dWFsS2V5Q29kZSkgeworICAg
IGNhc2UgVktfTENPTlRST0w6CisgICAgY2FzZSBWS19SQ09OVFJPTDoKICAgICAgICAgdmlydHVh
bEtleUNvZGUgPSBWS19DT05UUk9MOwotICAgICAgICBrZXlEYXRhICs9IG1ha2VLZXlEYXRhRm9y
U2NhbkNvZGUoVktfUkNPTlRST0wpOwotICAgIH0gZWxzZSBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJyaWdodFNoaWZ0IikpIHsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWS19MU0hJRlQ6CisgICAgY2FzZSBWS19SU0hJRlQ6CiAgICAgICAgIHZpcnR1YWxLZXlD
b2RlID0gVktfU0hJRlQ7Ci0gICAgICAgIGtleURhdGEgKz0gbWFrZUtleURhdGFGb3JTY2FuQ29k
ZShWS19SU0hJRlQpOwotICAgIH0gZWxzZSBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJyaWdodEFsdCIpKSB7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfTE1F
TlU6CisgICAgY2FzZSBWS19STUVOVToKICAgICAgICAgdmlydHVhbEtleUNvZGUgPSBWS19NRU5V
OwotICAgICAgICBrZXlEYXRhICs9IG1ha2VLZXlEYXRhRm9yU2NhbkNvZGUoVktfUk1FTlUpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHNoaWZ0ZWRVU0NoYXJhY3Rl
cnNbXSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWn4hQCMkJV4mKigpXyt7fXw6XCI8Pj8i
OwotICAgICAgICB3Y2hhcl90IGJ1ZmZbMV07Ci0gICAgICAgIFdLU3RyaW5nR2V0Q2hhcmFjdGVy
cyhrZXlSZWYsIGJ1ZmYsIF9jb3VudG9mKGJ1ZmYpKTsKLSAgICAgICAgY2hhckNvZGUgPSBidWZm
WzBdOwotICAgICAgICB2aXJ0dWFsS2V5Q29kZSA9IExPQllURShWa0tleVNjYW4oY2hhckNvZGUp
KTsKLSAgICAgICAgaWYgKHN0cmNocihzaGlmdGVkVVNDaGFyYWN0ZXJzLCBjaGFyQ29kZSkpCi0g
ICAgICAgICAgICBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBib29sIGlzU3lzS2V5
ID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383542</attachid>
            <date>2019-11-13 21:06:52 -0800</date>
            <delta_ts>2019-11-21 02:21:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202183-20191114140651.patch</filename>
            <type>text/plain</type>
            <size>37398</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNDQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1ZTc5NTE1YTJiZDE5YjM0MzUwZmE2
OWRlOTkzOGVmYTY4ZTNlMWIuLmIxYmQyMTZiNGFmNzQzMGM4MjZkM2FmZTllNmQ5ODgwN2NjMGM5
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTEtMTMgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtleWJvYXJkRXZl
bnQgYXMgcGVyIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmluZXMuaDoKKwogMjAx
OS0xMS0xMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAg
ICAgVVRDIG9mZnNldCBmb3IgU2Ftb2EgaXMgbWlzY2FsY3VsYXRlZCB3aGVuICFIQVZFKFRJTUVH
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA2YjhmMzZhNDY4MDk3M2MxMWEyZDE4ZDM4MWEyYzQ4YWI5NDMyZGQ1
Li42YzYzY2IwYzM1YjdmOGNkNGUxYzRmYTU5ZmY3MGUwYTJjMWQ1ZmYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTktMTEtMTMgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVq
aWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtleWJvYXJkRXZlbnQgYXMgcGVy
IHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkICdrZXknIGFuZCAnY29kZScgcHJvcGVydGllcyBvZiBLZXli
b2FyZEV2ZW50IGZvciBXaW5kb3dzLiBUaGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgY29w
aWVkIGZyb20gQ2hyb21pdW0gZm9yIFdpbmRvd3MuCisKKyAgICAgICAgRm9yIGltcGxlbWVudGlu
ZyAna2V5JyBwcm9wZXJ0aWVzLCBUb1VuaWNvZGVFeCBBUEkgaXMgdXNlZCB0bworICAgICAgICBj
b252ZXJ0IGEgdmlydHVhbCBrZXkgY29kZSB0byBhIGNoYXJhY3RlciBpbmZvcm1hdGlvbi4KKyAg
ICAgICAgVW5mb3J0dW5hdGVseSwgVG9Vbmljb2RlRXggYWx0ZXJzIHRoZSBzdG9yZWQgcHJldmlv
dXMgdHlwZWQgZGVhZAorICAgICAgICBrZXkgaW4gdGhlIGRyaXZlciwgaXQgY2FuJ3QgYmUgdXNl
ZCBmb3IgZWFjaCBrZXkgZXZlbnQuIFNvLAorICAgICAgICBUb1VuaWNvZGVFeCBpcyB1c2VkIHRv
IGNvbnZlcnQgYWxsIHZpcnR1YWwga2V5cyB3aXRoIGFsbCBtb2RpZmllcgorICAgICAgICBjb21i
aW5hdGlvbnMgYmVmb3JlaGFuZC4KKworICAgICAgICBUaGlzIGNoYW5nZSB0dXJucyBvbiBFTkFC
TEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSBhbmQKKyAgICAgICAgRU5BQkxFX0tFWUJPQVJEX0NP
REVfQVRUUklCVVRFIG1hY3JvcyBmb3IgYWxsIHBvcnRzLiBBIGZvbGxvdy11cAorICAgICAgICBw
YXRjaCB3aWxsIHJlbW92ZSB0aGUgbWFjcm9zLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3RzIGNv
dmVycy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3Jt
L3dpbi9LZXlFdmVudFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5TmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKGhhc0NvbnRyb2xBbmRBbHQpOgorICAgICAgICAoZ2V0TW9kaWZpZXJG
bGFncyk6CisgICAgICAgIChub25QcmludGFibGVWaXJ0dWFsS2V5VG9Eb21LZXkpOgorICAgICAg
ICAoV2luZG93c0tleU5hbWVzOjpXaW5kb3dzS2V5TmFtZXMpOgorICAgICAgICAoV2luZG93c0tl
eU5hbWVzOjpkb21LZXlGcm9tTFBhcmFtKToKKyAgICAgICAgKHNpbmdsZUNoYXJhY3RlclN0cmlu
Zyk6CisgICAgICAgIChXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZyb21DaGFyKToKKyAgICAgICAg
KFdpbmRvd3NLZXlOYW1lczo6ZG9tQ29kZUZyb21MUGFyYW0pOgorICAgICAgICAoV2luZG93c0tl
eU5hbWVzOjp1cGRhdGVMYXlvdXQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XaW5kb3dzS2V5
TmFtZXMuaDogQWRkZWQuCisKIDIwMTktMTEtMTMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTGluayBtZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHkgc2V0dGlu
ZyB0byBBdXRvcGxheVBvbGljeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0MWRmNzdhNTNlZTNhY2MxMjU0ODk3N2Mz
N2YzNGZkMTRmMTdhYTcwLi4xY2JlYjBhN2NlMTgwZGIwNzRhMTI2NDFiNWQ1YjhiZGFlYjFkYjM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTExLTEzICBGdWppaSBIaXJvbm9yaSAg
PEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVwZGF0ZSBLZXlib2Fy
ZEV2ZW50IGFzIHBlciB0aGUgbGF0ZXN0IHNwZWNpZmljYXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Lmg6CisgICAg
ICAgICogU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJL
ZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1dl
YkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OndpbmRvd3NLZXlOYW1lcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudCk6
CisKIDIwMTktMTEtMTMgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT046IFdLV2ViVmlldyBuYXZpZ2F0aW9uIGZhaWxzIHdoZW4gbmF2aWdh
dGluZyBmcm9tIGFib3V0OmJsYW5rCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJl
RGVmaW5lcy5oIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAppbmRleCA1MjM4ZTc5
MWMyMjg5YjEwNDhjMmY5MDdhYTY1NWRkY2Y1ZDNmMDIyLi44NjRkZjQ2OWRjMmJjMzdjMzBiNzQz
NDdiZmQ0MDRlOGMxMTc5ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVm
aW5lcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKQEAgLTc1MSwxMSAr
NzUxLDExIEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gU2VlIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
NzkxNjc+LiAqLwogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfS0VZQk9BUkRfS0VZX0FU
VFJJQlVURSkKLSNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUgMAorI2RlZmlu
ZSBFTkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZpbmVk
KEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSkKLSNkZWZpbmUgRU5BQkxFX0tFWUJPQVJE
X0NPREVfQVRUUklCVVRFIDAKKyNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0NPREVfQVRUUklCVVRF
IDEKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX0RBVEFfSU5URVJBQ1RJT04pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDEwMjA2ZmU0N2M2ODhhYmU0ZDRkMDRmNzc5NzM3OTE2
Y2RiODBhZWEuLmQxZmQ0ZWIxMmRkOTcxMTAwMTgwZWE4MDU2ZWQ0ODY1NjlmYzkwNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xMDcsNiArMTA3LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCiAgICAgcGxh
dGZvcm0vd2luL1dpZGdldFdpbi5jcHAKICAgICBwbGF0Zm9ybS93aW4vV2luZG93TWVzc2FnZUJy
b2FkY2FzdGVyLmNwcAorICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuY3BwCiAKICAg
ICByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCiApCkBAIC0xNDIsNiArMTQzLDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
d2luL1dlYkNvcmVUZXh0UmVuZGVyZXIuaAogICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dNZXNzYWdl
QnJvYWRjYXN0ZXIuaAogICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dNZXNzYWdlTGlzdGVuZXIuaAor
ICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuaAogICAgIHBsYXRmb3JtL3dpbi9XaW5k
b3dzVG91Y2guaAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
S2V5RXZlbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0tleUV2ZW50V2lu
LmNwcAppbmRleCBiMjM1NmM1ZjRmYzRkNDY3ZDhjYzQ3NWY3YmNiZjU3NDcyY2VjMTc5Li40NDcz
NzY4NjE4N2EwNmE5MmM0MDhlYTYwYjYzYTQ4YWM4NDgxMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2luY2x1
ZGUgIldpbmRvd3NLZXlOYW1lcy5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3
dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KQEAgLTIxOCwxMCAr
MjE5LDE4IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hh
ciBjKQogICAgIHJldHVybiBTdHJpbmcoJmMsIDEpOwogfQogCitzdGF0aWMgV2luZG93c0tleU5h
bWVzJiB3aW5kb3dzS2V5TmFtZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXaW5k
b3dzS2V5TmFtZXM+IGtleU5hbWVzOworICAgIHJldHVybiBrZXlOYW1lczsKK30KKwogUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoSFdORCwgV1BBUkFNIGNvZGUs
IExQQVJBTSBrZXlEYXRhLCBUeXBlIHR5cGUsIGJvb2wgc3lzdGVtS2V5KQogICAgIDogUGxhdGZv
cm1FdmVudCh0eXBlLCBHZXRLZXlTdGF0ZShWS19TSElGVCkgJiBISUdIX0JJVF9NQVNLX1NIT1JU
LCBHZXRLZXlTdGF0ZShWS19DT05UUk9MKSAmIEhJR0hfQklUX01BU0tfU0hPUlQsIEdldEtleVN0
YXRlKFZLX01FTlUpICYgSElHSF9CSVRfTUFTS19TSE9SVCwgZmFsc2UsIFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyg6OkdldFRpY2tDb3VudCgpICogMC4wMDEpKQogICAgICwgbV90ZXh0KCh0eXBl
ID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGNvZGUpIDog
U3RyaW5nKCkpCiAgICAgLCBtX3VubW9kaWZpZWRUZXh0KCh0eXBlID09IFBsYXRmb3JtRXZlbnQ6
OkNoYXIpID8gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGNvZGUpIDogU3RyaW5nKCkpCisgICAgLCBt
X2tleSh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIgPyB3aW5kb3dzS2V5TmFtZXMoKS5kb21L
ZXlGcm9tQ2hhcihjb2RlKSA6IHdpbmRvd3NLZXlOYW1lcygpLmRvbUtleUZyb21MUGFyYW0oa2V5
RGF0YSkpCisgICAgLCBtX2NvZGUod2luZG93c0tleU5hbWVzKCkuZG9tQ29kZUZyb21MUGFyYW0o
a2V5RGF0YSkpCiAgICAgLCBtX2tleUlkZW50aWZpZXIoKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6
Q2hhcikgPyBTdHJpbmcoKSA6IGtleUlkZW50aWZpZXJGb3JXaW5kb3dzS2V5Q29kZShjb2RlKSkK
ICAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKCh0eXBlID09IFJhd0tleURvd24gfHwgdHlw
ZSA9PSBLZXlVcCkgPyB3aW5kb3dzS2V5Y29kZVdpdGhMb2NhdGlvbihjb2RlLCBrZXlEYXRhKSA6
IDApCiAgICAgLCBtX2F1dG9SZXBlYXQoSElXT1JEKGtleURhdGEpICYgS0ZfUkVQRUFUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYTVlMTQ4YWUzYTMzMDNmMGNhZmUzZTRlOTZjY2E1NmFlMDhiYjQxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5jcHAK
QEAgLTAsMCArMSw1NjEgQEAKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaW5kb3dzS2V5TmFt
ZXMuaCIKKwordHlwZWRlZiBlbnVtIDogdWludDhfdCB7CisgICAgRUZfTk9ORSA9IDAsCisgICAg
RUZfU0hJRlRfRE9XTiA9IDEgPDwgMCwKKyAgICBFRl9DT05UUk9MX0RPV04gPSAxIDw8IDEsCisg
ICAgRUZfQUxUX0RPV04gPSAxIDw8IDIsCisgICAgRUZfQ0FQU19MT0NLX09OID0gMSA8PCAzLAor
fSBFdmVudEZsYWdzOworCitjb25zdGV4cHIgRXZlbnRGbGFncyBjTW9kaWZpZXJGbGFnc1tdID0g
eworICAgIEVGX1NISUZUX0RPV04sCisgICAgRUZfQ09OVFJPTF9ET1dOLAorICAgIEVGX0FMVF9E
T1dOLAorICAgIEVGX0NBUFNfTE9DS19PTiwKK307CisKK3N0YXRpYyB2b2lkIHNldE1vZGlmaWVy
U3RhdGUoQllURSoga2V5Ym9hcmRTdGF0ZSwgaW50IGZsYWdzKQoreworICAgIC8vIEFjY29yZGlu
ZyB0byBNU0ROIEdldEtleVN0YXRlKCk6CisgICAgLy8gMS4gSWYgdGhlIGhpZ2gtb3JkZXIgYml0
IGlzIDEsIHRoZSBrZXkgaXMgZG93bjsgb3RoZXJ3aXNlLCBpdCBpcyB1cC4KKyAgICAvLyAyLiBJ
ZiB0aGUgbG93LW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIHRvZ2dsZWQuIEEga2V5LCBzdWNo
IGFzIHRoZQorICAgIC8vICAgIENBUFMgTE9DSyBrZXksIGlzIHRvZ2dsZWQgaWYgaXQgaXMgdHVy
bmVkIG9uLiBUaGUga2V5IGlzIG9mZiBhbmQKKyAgICAvLyAgICB1bnRvZ2dsZWQgaWYgdGhlIGxv
dy1vcmRlciBiaXQgaXMgMC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDYzMDEuYXNweAorICAgIGlmIChmbGFn
cyAmIEVGX1NISUZUX0RPV04pCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfU0hJRlRdIHw9IDB4
ODA7CisKKyAgICBpZiAoZmxhZ3MgJiBFRl9DT05UUk9MX0RPV04pCisgICAgICAgIGtleWJvYXJk
U3RhdGVbVktfQ09OVFJPTF0gfD0gMHg4MDsKKworICAgIGlmIChmbGFncyAmIEVGX0FMVF9ET1dO
KQorICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX01FTlVdIHw9IDB4ODA7CisKKyAgICBpZiAoZmxh
Z3MgJiBFRl9DQVBTX0xPQ0tfT04pCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfQ0FQSVRBTF0g
fD0gMHgwMTsKK30KKworY29uc3RleHByIGludCBrQ29udHJvbEFuZEFsdEZsYWdzID0gRUZfQ09O
VFJPTF9ET1dOIHwgRUZfQUxUX0RPV047CisKK3N0YXRpYyBib29sIGhhc0NvbnRyb2xBbmRBbHQo
aW50IGZsYWdzKQoreworICAgIHJldHVybiAoZmxhZ3MgJiBrQ29udHJvbEFuZEFsdEZsYWdzKSA9
PSBrQ29udHJvbEFuZEFsdEZsYWdzOworfQorCitjb25zdGV4cHIgaW50IGNNb2RpZmllckZsYWdz
Q29tYmluYXRpb25zID0gKDEgPDwgV1RGX0FSUkFZX0xFTkdUSChjTW9kaWZpZXJGbGFncykpIC0g
MTsKKworc3RhdGljIHVuc2lnbmVkIGdldE1vZGlmaWVyRmxhZ3MoaW50IGNvbWJpbmF0aW9uKQor
eworICAgIHVuc2lnbmVkIGZsYWdzID0gRUZfTk9ORTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgoY01vZGlmaWVyRmxhZ3MpOyArK2kpIHsKKyAgICAgICAgaWYg
KGNvbWJpbmF0aW9uICYgKDEgPDwgaSkpCisgICAgICAgICAgICBmbGFncyB8PSBjTW9kaWZpZXJG
bGFnc1tpXTsKKyAgICB9CisgICAgcmV0dXJuIGZsYWdzOworfQorCisvLyBUaGlzIHRhYmxlIG11
c3QgYmUgc29ydGVkIGJ5IHx2aXJ0dWFsS2V5fCBmb3IgYmluYXJ5IHNlYXJjaC4KK2NvbnN0ZXhw
ciBzdHJ1Y3QgTm9uUHJpbnRhYmxlS2V5RW50cnkgeworICAgIGludCB2aXJ0dWFsS2V5OworICAg
IEFTQ0lJTGl0ZXJhbCBkb21LZXk7Cit9IGNOb25QcmludGFibGVLZXlNYXBbXSA9IHsKKyAgICB7
IFZLX0NBTkNFTCwgIkNhbmNlbCJfcyB9LAorICAgIHsgVktfQkFDSywgIkJhY2tzcGFjZSJfcyB9
LAorICAgIHsgVktfVEFCLCAiVGFiIl9zIH0sCisgICAgeyBWS19DTEVBUiwgIkNsZWFyIl9zIH0s
CisgICAgeyBWS19SRVRVUk4sICJFbnRlciJfcyB9LAorICAgIHsgVktfU0hJRlQsICJTaGlmdCJf
cyB9LAorICAgIHsgVktfQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX01FTlUsICJB
bHQiX3MgfSwKKyAgICB7IFZLX1BBVVNFLCAiUGF1c2UiX3MgfSwKKyAgICB7IFZLX0NBUElUQUws
ICJDYXBzTG9jayJfcyB9LAorICAgIC8vIFZLX0tBTkEgPT0gVktfSEFOR1VMCisgICAgeyBWS19K
VU5KQSwgIkp1bmphTW9kZSJfcyB9LAorICAgIHsgVktfRklOQUwsICJGSU5BTF9NT0RFIl9zIH0s
CisgICAgLy8gVktfSEFOSkEgPT0gVktfS0FOSkkKKyAgICB7IFZLX0VTQ0FQRSwgIkVzY2FwZSJf
cyB9LAorICAgIHsgVktfQ09OVkVSVCwgIkNvbnZlcnQiX3MgfSwKKyAgICB7IFZLX05PTkNPTlZF
UlQsICJOb25Db252ZXJ0Il9zIH0sCisgICAgeyBWS19BQ0NFUFQsICJBY2NlcHQiX3MgfSwKKyAg
ICB7IFZLX01PREVDSEFOR0UsICJNb2RlQ2hhbmdlIl9zIH0sCisgICAgLy8gVktfU1BBQ0UKKyAg
ICB7IFZLX1BSSU9SLCAiUGFnZVVwIl9zIH0sCisgICAgeyBWS19ORVhULCAiUGFnZURvd24iX3Mg
fSwKKyAgICB7IFZLX0VORCwgIkVuZCJfcyB9LAorICAgIHsgVktfSE9NRSwgIkhvbWUiX3MgfSwK
KyAgICB7IFZLX0xFRlQsICJBcnJvd0xlZnQiX3MgfSwKKyAgICB7IFZLX1VQLCAiQXJyb3dVcCJf
cyB9LAorICAgIHsgVktfUklHSFQsICJBcnJvd1JpZ2h0Il9zIH0sCisgICAgeyBWS19ET1dOLCAi
QXJyb3dEb3duIl9zIH0sCisgICAgeyBWS19TRUxFQ1QsICJTZWxlY3QiX3MgfSwKKyAgICB7IFZL
X1BSSU5ULCAiUHJpbnQiX3MgfSwKKyAgICB7IFZLX0VYRUNVVEUsICJFeGVjdXRlIl9zIH0sCisg
ICAgeyBWS19TTkFQU0hPVCwgIlByaW50U2NyZWVuIl9zIH0sCisgICAgeyBWS19JTlNFUlQsICJJ
bnNlcnQiX3MgfSwKKyAgICB7IFZLX0RFTEVURSwgIkRlbGV0ZSJfcyB9LAorICAgIHsgVktfSEVM
UCwgIkhlbHAiX3MgfSwKKyAgICAvLyBWS18wLi45CisgICAgLy8gVktfQS4uWgorICAgIHsgVktf
TFdJTiwgIk1ldGEiX3MgfSwKKyAgICAvLyBWS19DT01NQU5EID09IFZLX0xXSU4KKyAgICB7IFZL
X1JXSU4sICJNZXRhIl9zIH0sCisgICAgeyBWS19BUFBTLCAiQ29udGV4dE1lbnUiX3MgfSwKKyAg
ICB7IFZLX1NMRUVQLCAiU3RhbmRieSJfcyB9LAorICAgIC8vIFZLX05VTVBBRDAuLjkKKyAgICAv
LyBWS19NVUxUSVBMWSwgVktfQURELCBWS19TRVBBUkFUT1IsIFZLX1NVQlRSQUNULCBWS19ERUNJ
TUFMLAorICAgIC8vIFZLX0RJVklERQorICAgIHsgVktfRjEsICJGMSJfcyB9LAorICAgIHsgVktf
RjIsICJGMiJfcyB9LAorICAgIHsgVktfRjMsICJGMyJfcyB9LAorICAgIHsgVktfRjQsICJGNCJf
cyB9LAorICAgIHsgVktfRjUsICJGNSJfcyB9LAorICAgIHsgVktfRjYsICJGNiJfcyB9LAorICAg
IHsgVktfRjcsICJGNyJfcyB9LAorICAgIHsgVktfRjgsICJGOCJfcyB9LAorICAgIHsgVktfRjks
ICJGOSJfcyB9LAorICAgIHsgVktfRjEwLCAiRjEwIl9zIH0sCisgICAgeyBWS19GMTEsICJGMTEi
X3MgfSwKKyAgICB7IFZLX0YxMiwgIkYxMiJfcyB9LAorICAgIHsgVktfRjEzLCAiRjEzIl9zIH0s
CisgICAgeyBWS19GMTQsICJGMTQiX3MgfSwKKyAgICB7IFZLX0YxNSwgIkYxNSJfcyB9LAorICAg
IHsgVktfRjE2LCAiRjE2Il9zIH0sCisgICAgeyBWS19GMTcsICJGMTciX3MgfSwKKyAgICB7IFZL
X0YxOCwgIkYxOCJfcyB9LAorICAgIHsgVktfRjE5LCAiRjE5Il9zIH0sCisgICAgeyBWS19GMjAs
ICJGMjAiX3MgfSwKKyAgICB7IFZLX0YyMSwgIkYyMSJfcyB9LAorICAgIHsgVktfRjIyLCAiRjIy
Il9zIH0sCisgICAgeyBWS19GMjMsICJGMjMiX3MgfSwKKyAgICB7IFZLX0YyNCwgIkYyNCJfcyB9
LAorICAgIHsgVktfTlVNTE9DSywgIk51bUxvY2siX3MgfSwKKyAgICB7IFZLX1NDUk9MTCwgIlNj
cm9sbExvY2siX3MgfSwKKyAgICB7IFZLX0xTSElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBWS19S
U0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfTENPTlRST0wsICJDb250cm9sIl9zIH0sCisg
ICAgeyBWS19SQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX0xNRU5VLCAiQWx0Il9z
IH0sCisgICAgeyBWS19STUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9CQUNLLCAi
QnJvd3NlckJhY2siX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfRk9SV0FSRCwgIkJyb3dzZXJGb3J3
YXJkIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX1JFRlJFU0gsICJCcm93c2VyUmVmcmVzaCJfcyB9
LAorICAgIHsgVktfQlJPV1NFUl9TVE9QLCAiQnJvd3NlclN0b3AiX3MgfSwKKyAgICB7IFZLX0JS
T1dTRVJfU0VBUkNILCAiQnJvd3NlclNlYXJjaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9GQVZP
UklURVMsICJCcm93c2VyRmF2b3JpdGVzIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX0hPTUUsICJC
cm93c2VySG9tZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX01VVEUsICJBdWRpb1ZvbHVtZSJfcyB9
LAorICAgIHsgVktfVk9MVU1FX0RPV04sICJBdWRpb1ZvbHVtZURvd24iX3MgfSwKKyAgICB7IFZL
X1ZPTFVNRV9VUCwgIkF1ZGlvVm9sdW1lVXAiX3MgfSwKKyAgICB7IFZLX01FRElBX05FWFRfVFJB
Q0ssICJNZWRpYVRyYWNrTmV4dCJfcyB9LAorICAgIHsgVktfTUVESUFfUFJFVl9UUkFDSywgIk1l
ZGlhVHJhY2tQcmV2aW91cyJfcyB9LAorICAgIHsgVktfTUVESUFfU1RPUCwgIk1lZGlhU3RvcCJf
cyB9LAorICAgIHsgVktfTUVESUFfUExBWV9QQVVTRSwgIk1lZGlhUGxheVBhdXNlIl9zIH0sCisg
ICAgLy8gVktfT0VNXzEuLjgsIDEwMiwgUExVUywgQ09NTUEsIE1JTlVTLCBQRVJJT0QKKyAgICB7
IFZLX1BST0NFU1NLRVksICJQcm9jZXNzIl9zIH0sCisgICAgLy8gVktfUEFDS0VUIC0gVXNlZCB0
byBwYXNzIFVuaWNvZGUgY2hhciwgY29uc2lkZXJlZCBhcyBwcmludGFibGUga2V5LgorICAgIHsg
VktfQVRUTiwgIkF0dG4iX3MgfSwKKyAgICB7IFZLX0NSU0VMLCAiQ3JTZWwiX3MgfSwKKyAgICB7
IFZLX0VYU0VMLCAiRXhTZWwiX3MgfSwKKyAgICB7IFZLX0VSRU9GLCAiRXJhc2VFb2YiX3MgfSwK
KyAgICB7IFZLX1BMQVksICJQbGF5Il9zIH0sCisgICAgeyBWS19aT09NLCAiWm9vbVRvZ2dsZSJf
cyB9LAorICAgIHsgVktfT0VNX0NMRUFSLCAiQ2xlYXIiX3MgfSwKK307CisKKy8vIERpc2FtYmln
dWF0ZXMgdGhlIG1lYW5pbmcgb2YgY2VydGFpbiBub24tcHJpbnRhYmxlIGtleXMgd2hpY2ggaGF2
ZSBkaWZmZXJlbnQKKy8vIG1lYW5pbmdzIHVuZGVyIGRpZmZlcmVudCBsYW5ndWFnZXMsIGJ1dCB1
c2UgdGhlIHNhbWUgVktFWSBjb2RlLgorc3RhdGljIFN0cmluZyBsYW5ndWFnZVNwZWNpZmljT2Vt
VmlydHVhbEtleVRvRG9tS2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIFdP
UkQgbGFuZ3VhZ2UgPSBMT1dPUkQobGF5b3V0KTsKKyAgICBXT1JEIHByaW1hcnlMYW5ndWFnZSA9
IFBSSU1BUllMQU5HSUQobGFuZ3VhZ2UpOworICAgIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFO
R19LT1JFQU4pIHsKKyAgICAgICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAgICAgIGNhc2Ug
VktfSEFOR1VMOgorICAgICAgICAgICAgcmV0dXJuICJIYW5ndWxNb2RlIl9zOworICAgICAgICBj
YXNlIFZLX0hBTkpBOgorICAgICAgICAgICAgcmV0dXJuICJIYW5qYU1vZGUiX3M7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19KQVBBTkVTRSkgeworICAgICAg
ICBzd2l0Y2ggKHZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIC8vIFZLX0tBTkEgaXNuJ3QgZ2Vu
ZXJhdGVkIGJ5IGFueSBtb2Rlcm4gbGF5b3V0cyBidXQgaXMgYSBsaXN0ZWQgdmFsdWUKKyAgICAg
ICAgICAgIC8vIHRoYXQgdGhpcmQtcGFydHkgYXBwcyBtaWdodCBzeW50aGVzaXplLCBzbyB3ZSBo
YW5kbGUgaXQgYW55d2F5LgorICAgICAgICBjYXNlIFZLX0tBTkE6CisgICAgICAgIGNhc2UgVktf
QVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiS2FuYU1vZGUiX3M7CisgICAgICAgIGNhc2UgVktf
S0FOSkk6CisgICAgICAgICAgICByZXR1cm4gIkthbmppTW9kZSJfczsKKyAgICAgICAgY2FzZSBW
S19PRU1fQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiQWxwaGFudW1lcmljIl9zOworICAgICAg
ICBjYXNlIFZLX09FTV9GSU5JU0g6CisgICAgICAgICAgICByZXR1cm4gIkthdGFrYW5hIl9zOwor
ICAgICAgICBjYXNlIFZLX09FTV9DT1BZOgorICAgICAgICAgICAgcmV0dXJuICJIaXJhZ2FuYSJf
czsKKyAgICAgICAgY2FzZSBWS19PRU1fQkFDS1RBQjoKKyAgICAgICAgICAgIHJldHVybiAiUm9t
YWppIl9zOworICAgICAgICBjYXNlIFZLX09FTV9BVVRPOgorICAgICAgICAgICAgcmV0dXJuICJI
YW5rYWt1Il9zOworICAgICAgICBjYXNlIFZLX09FTV9FTkxXOgorICAgICAgICAgICAgcmV0dXJu
ICJaZW5rYWt1Il9zOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxT
dHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbFN0cmluZygpOworfQor
CitzdGF0aWMgU3RyaW5nIG5vblByaW50YWJsZVZpcnR1YWxLZXlUb0RvbUtleShpbnQgdmlydHVh
bEtleSwgSEtMIGxheW91dCkKK3sKKyAgICAvLyAxLiBDaGVjayBpZiB8dmlydHVhbEtleXwgaGFz
IGEgfGxheW91dHwtc3BlY2lmaWMgbWVhbmluZy4KKyAgICBjb25zdCBTdHJpbmcga2V5ID0gbGFu
Z3VhZ2VTcGVjaWZpY09lbVZpcnR1YWxLZXlUb0RvbUtleSh2aXJ0dWFsS2V5LCBsYXlvdXQpOwor
ICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAgLy8gMi4g
TW9zdCB8dmlydHVhbEtleXN8IGhhdmUgdGhlIHNhbWUgbWVhbmluZyByZWdhcmRsZXNzIG9mIHxs
YXlvdXR8LgorICAgIGNvbnN0IE5vblByaW50YWJsZUtleUVudHJ5KiByZXN1bHQgPSBzdGQ6Omxv
d2VyX2JvdW5kKAorICAgICAgICBzdGQ6OmJlZ2luKGNOb25QcmludGFibGVLZXlNYXApLCBzdGQ6
OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFwKSwgdmlydHVhbEtleSwKKyAgICAgICAgW10oY29uc3Qg
Tm9uUHJpbnRhYmxlS2V5RW50cnkmIGVudHJ5LCBpbnQgbmVlZGxlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZW50cnkudmlydHVhbEtleSA8IG5lZWRsZTsKKyAgICAgICAgfSk7CisgICAgaWYgKHJl
c3VsdCAhPSBzdGQ6OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFwKSAmJiByZXN1bHQtPnZpcnR1YWxL
ZXkgPT0gdmlydHVhbEtleSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZG9tS2V5OworCisgICAg
cmV0dXJuIG51bGxTdHJpbmcoKTsKK30KKworV2luZG93c0tleU5hbWVzOjpXaW5kb3dzS2V5TmFt
ZXMoKQoreworICAgIHVwZGF0ZUxheW91dCgpOworfQorCitTdHJpbmcgV2luZG93c0tleU5hbWVz
Ojpkb21LZXlGcm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7CisgICAgdW5zaWduZWQgc2NhbkNv
ZGUgPSAobFBhcmFtID4+IDE2KSAmIDB4ZmY7CisgICAgYm9vbCBleHRlbmRlZCA9IGxQYXJhbSAm
IDB4MDEwMDAwMDA7CisgICAgdW5zaWduZWQgdmlydHVhbEtleSA9IE1hcFZpcnR1YWxLZXkoc2Nh
bkNvZGUsIE1BUFZLX1ZTQ19UT19WSyk7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBpZiAoR2V0
S2V5U3RhdGUoVktfU0hJRlQpIDwgMCkKKyAgICAgICAgZmxhZ3MgfD0gRUZfU0hJRlRfRE9XTjsK
KyAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgPCAwKQorICAgICAgICBmbGFncyB8PSBF
Rl9DT05UUk9MX0RPV047CisgICAgaWYgKEdldEtleVN0YXRlKFZLX01FTlUgKSA8IDApCisgICAg
ICAgIGZsYWdzIHw9IEVGX0FMVF9ET1dOOworICAgIGlmIChHZXRLZXlTdGF0ZShWS19DQVBJVEFM
KSAmIDEpCisgICAgICAgIGZsYWdzIHw9IEVGX0NBUFNfTE9DS19PTjsKKworICAgIHVwZGF0ZUxh
eW91dCgpOworICAgIC8vIFdpbmRvd3MgZXhwcmVzc2VzIHJpZ2h0LUFsdCBhcyBWS19NRU5VIHdp
dGggdGhlIGV4dGVuZGVkIGZsYWcgc2V0LgorICAgIC8vIFRoaXMga2V5IHNob3VsZCBnZW5lcmF0
ZSBBbHRHcmFwaCB1bmRlciBsYXlvdXRzIHdoaWNoIHVzZSB0aGF0IG1vZGlmaWVyLgorICAgIGlm
ICh2aXJ0dWFsS2V5ID09IFZLX01FTlUgJiYgZXh0ZW5kZWQgJiYgbV9oYXNBbHRHcmFwaCkKKyAg
ICAgICAgcmV0dXJuICJBbHRHcmFwaCJfczsKKworICAgIFN0cmluZyBrZXkgPSBub25QcmludGFi
bGVWaXJ0dWFsS2V5VG9Eb21LZXkodmlydHVhbEtleSwgbV9rZXlib2FyZExheW91dCk7CisgICAg
aWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBjb25zdCBpbnQg
ZmxhZ3NUb1RyeVtdID0geworICAgICAgICAvLyBUcnlpbmcgdG8gbWF0Y2ggRmlyZWZveCdzIGJl
aGF2aW9yIGFuZCBVSUV2ZW50cyBEb21LZXkgZ3VpZGVsaW5lcy4KKyAgICAgICAgLy8gSWYgdGhl
IGNvbWJpbmF0aW9uIGRvZXNuJ3QgcHJvZHVjZSBhIHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBr
ZXkgdmFsdWUKKyAgICAgICAgLy8gc2hvdWxkIGJlIHRoZSBrZXkgd2l0aCBubyBtb2RpZmllcnMg
ZXhjZXB0IGZvciBTaGlmdCBhbmQgQWx0R3IuCisgICAgICAgIC8vIFNlZSBodHRwczovL3czYy5n
aXRodWIuaW8vdWlldmVudHMvI2tleXMtZ3VpZGVsaW5lcworICAgICAgICBmbGFncywKKyAgICAg
ICAgZmxhZ3MgJiAoRUZfU0hJRlRfRE9XTiB8IEVGX0NBUFNfTE9DS19PTiksCisgICAgICAgIEVG
X05PTkUsCisgICAgfTsKKworICAgIGZvciAoYXV0byB0cnlGbGFncyA6IGZsYWdzVG9UcnkpIHsK
KyAgICAgICAgY29uc3QgYXV0byYgaXQgPSBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5maW5kKHN0
ZDo6bWFrZV9wYWlyKHZpcnR1YWxLZXksIHRyeUZsYWdzKSk7CisgICAgICAgIGlmIChpdCAhPSBt
X3ByaW50YWJsZUtleUNvZGVUb0tleS5lbmQoKSkgeworICAgICAgICAgICAga2V5ID0gaXQtPnZh
bHVlOworICAgICAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGtleTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGZvdW5kIG5vdGhpbmcgd2l0
aCBubyBmbGFncyBzZXQsIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB0cnkuCisgICAgICAgIGlm
ICh0cnlGbGFncyA9PSBFRl9OT05FKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisKKyAg
ICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFN0cmluZygmYywgMSk7
Cit9CisKK1N0cmluZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZyb21DaGFyKFVDaGFyIGMpCit7
CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnXHgxYic6CisgICAgICAgIHJldHVybiAiRXNj
YXBlIl9zOworICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgcmV0dXJuICJUYWIiX3M7CisgICAgY2Fz
ZSAnXHInOgorICAgICAgICByZXR1cm4gIkVudGVyIl9zOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGMpOworfQor
CitTdHJpbmcgV2luZG93c0tleU5hbWVzOjpkb21Db2RlRnJvbUxQYXJhbShMUEFSQU0gbFBhcmFt
KQoreworICAgIC8vIFRoaXMgdGFibGUgbXVzdCBiZSBzb3J0ZWQgYnkgc2NhbiBjb2RlIGZvciBi
aW5hcnkgc2VhcmNoLgorICAgIGNvbnN0ZXhwciBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBz
Y2FuQ29kZTsKKyAgICAgICAgQVNDSUlMaXRlcmFsIGRvbUNvZGU7CisgICAgfSBkb21LZXlNYXBb
XSA9IHsKKyAgICAgICAgeyAweDAwMDEsICJFc2NhcGUiX3MgfSwKKyAgICAgICAgeyAweDAwMDIs
ICJEaWdpdDEiX3MgfSwKKyAgICAgICAgeyAweDAwMDMsICJEaWdpdDIiX3MgfSwKKyAgICAgICAg
eyAweDAwMDQsICJEaWdpdDMiX3MgfSwKKyAgICAgICAgeyAweDAwMDUsICJEaWdpdDQiX3MgfSwK
KyAgICAgICAgeyAweDAwMDYsICJEaWdpdDUiX3MgfSwKKyAgICAgICAgeyAweDAwMDcsICJEaWdp
dDYiX3MgfSwKKyAgICAgICAgeyAweDAwMDgsICJEaWdpdDciX3MgfSwKKyAgICAgICAgeyAweDAw
MDksICJEaWdpdDgiX3MgfSwKKyAgICAgICAgeyAweDAwMGEsICJEaWdpdDkiX3MgfSwKKyAgICAg
ICAgeyAweDAwMGIsICJEaWdpdDAiX3MgfSwKKyAgICAgICAgeyAweDAwMGMsICJNaW51cyJfcyB9
LAorICAgICAgICB7IDB4MDAwZCwgIkVxdWFsIl9zIH0sCisgICAgICAgIHsgMHgwMDBlLCAiQmFj
a3NwYWNlIl9zIH0sCisgICAgICAgIHsgMHgwMDBmLCAiVGFiIl9zIH0sCisgICAgICAgIHsgMHgw
MDEwLCAiS2V5USJfcyB9LAorICAgICAgICB7IDB4MDAxMSwgIktleVciX3MgfSwKKyAgICAgICAg
eyAweDAwMTIsICJLZXlFIl9zIH0sCisgICAgICAgIHsgMHgwMDEzLCAiS2V5UiJfcyB9LAorICAg
ICAgICB7IDB4MDAxNCwgIktleVQiX3MgfSwKKyAgICAgICAgeyAweDAwMTUsICJLZXlZIl9zIH0s
CisgICAgICAgIHsgMHgwMDE2LCAiS2V5VSJfcyB9LAorICAgICAgICB7IDB4MDAxNywgIktleUki
X3MgfSwKKyAgICAgICAgeyAweDAwMTgsICJLZXlPIl9zIH0sCisgICAgICAgIHsgMHgwMDE5LCAi
S2V5UCJfcyB9LAorICAgICAgICB7IDB4MDAxYSwgIkJyYWNrZXRMZWZ0Il9zIH0sCisgICAgICAg
IHsgMHgwMDFiLCAiQnJhY2tldFJpZ2h0Il9zIH0sCisgICAgICAgIHsgMHgwMDFjLCAiRW50ZXIi
X3MgfSwKKyAgICAgICAgeyAweDAwMWQsICJDb250cm9sTGVmdCJfcyB9LAorICAgICAgICB7IDB4
MDAxZSwgIktleUEiX3MgfSwKKyAgICAgICAgeyAweDAwMWYsICJLZXlTIl9zIH0sCisgICAgICAg
IHsgMHgwMDIwLCAiS2V5RCJfcyB9LAorICAgICAgICB7IDB4MDAyMSwgIktleUYiX3MgfSwKKyAg
ICAgICAgeyAweDAwMjIsICJLZXlHIl9zIH0sCisgICAgICAgIHsgMHgwMDIzLCAiS2V5SCJfcyB9
LAorICAgICAgICB7IDB4MDAyNCwgIktleUoiX3MgfSwKKyAgICAgICAgeyAweDAwMjUsICJLZXlL
Il9zIH0sCisgICAgICAgIHsgMHgwMDI2LCAiS2V5TCJfcyB9LAorICAgICAgICB7IDB4MDAyNywg
IlNlbWljb2xvbiJfcyB9LAorICAgICAgICB7IDB4MDAyOCwgIlF1b3RlIl9zIH0sCisgICAgICAg
IHsgMHgwMDI5LCAiQmFja3F1b3RlIl9zIH0sCisgICAgICAgIHsgMHgwMDJhLCAiU2hpZnRMZWZ0
Il9zIH0sCisgICAgICAgIHsgMHgwMDJiLCAiQmFja3NsYXNoIl9zIH0sCisgICAgICAgIHsgMHgw
MDJjLCAiS2V5WiJfcyB9LAorICAgICAgICB7IDB4MDAyZCwgIktleVgiX3MgfSwKKyAgICAgICAg
eyAweDAwMmUsICJLZXlDIl9zIH0sCisgICAgICAgIHsgMHgwMDJmLCAiS2V5ViJfcyB9LAorICAg
ICAgICB7IDB4MDAzMCwgIktleUIiX3MgfSwKKyAgICAgICAgeyAweDAwMzEsICJLZXlOIl9zIH0s
CisgICAgICAgIHsgMHgwMDMyLCAiS2V5TSJfcyB9LAorICAgICAgICB7IDB4MDAzMywgIkNvbW1h
Il9zIH0sCisgICAgICAgIHsgMHgwMDM0LCAiUGVyaW9kIl9zIH0sCisgICAgICAgIHsgMHgwMDM1
LCAiU2xhc2giX3MgfSwKKyAgICAgICAgeyAweDAwMzYsICJTaGlmdFJpZ2h0Il9zIH0sCisgICAg
ICAgIHsgMHgwMDM3LCAiTnVtcGFkTXVsdGlwbHkiX3MgfSwKKyAgICAgICAgeyAweDAwMzgsICJB
bHRMZWZ0Il9zIH0sCisgICAgICAgIHsgMHgwMDM5LCAiU3BhY2UiX3MgfSwKKyAgICAgICAgeyAw
eDAwM2EsICJDYXBzTG9jayJfcyB9LAorICAgICAgICB7IDB4MDAzYiwgIkYxIl9zIH0sCisgICAg
ICAgIHsgMHgwMDNjLCAiRjIiX3MgfSwKKyAgICAgICAgeyAweDAwM2QsICJGMyJfcyB9LAorICAg
ICAgICB7IDB4MDAzZSwgIkY0Il9zIH0sCisgICAgICAgIHsgMHgwMDNmLCAiRjUiX3MgfSwKKyAg
ICAgICAgeyAweDAwNDAsICJGNiJfcyB9LAorICAgICAgICB7IDB4MDA0MSwgIkY3Il9zIH0sCisg
ICAgICAgIHsgMHgwMDQyLCAiRjgiX3MgfSwKKyAgICAgICAgeyAweDAwNDMsICJGOSJfcyB9LAor
ICAgICAgICB7IDB4MDA0NCwgIkYxMCJfcyB9LAorICAgICAgICB7IDB4MDA0NSwgIlBhdXNlIl9z
IH0sCisgICAgICAgIHsgMHgwMDQ2LCAiU2Nyb2xsTG9jayJfcyB9LAorICAgICAgICB7IDB4MDA0
NywgIk51bXBhZDciX3MgfSwKKyAgICAgICAgeyAweDAwNDgsICJOdW1wYWQ4Il9zIH0sCisgICAg
ICAgIHsgMHgwMDQ5LCAiTnVtcGFkOSJfcyB9LAorICAgICAgICB7IDB4MDA0YSwgIk51bXBhZFN1
YnRyYWN0Il9zIH0sCisgICAgICAgIHsgMHgwMDRiLCAiTnVtcGFkNCJfcyB9LAorICAgICAgICB7
IDB4MDA0YywgIk51bXBhZDUiX3MgfSwKKyAgICAgICAgeyAweDAwNGQsICJOdW1wYWQ2Il9zIH0s
CisgICAgICAgIHsgMHgwMDRlLCAiTnVtcGFkQWRkIl9zIH0sCisgICAgICAgIHsgMHgwMDRmLCAi
TnVtcGFkMSJfcyB9LAorICAgICAgICB7IDB4MDA1MCwgIk51bXBhZDIiX3MgfSwKKyAgICAgICAg
eyAweDAwNTEsICJOdW1wYWQzIl9zIH0sCisgICAgICAgIHsgMHgwMDUyLCAiTnVtcGFkMCJfcyB9
LAorICAgICAgICB7IDB4MDA1MywgIk51bXBhZERlY2ltYWwiX3MgfSwKKyAgICAgICAgeyAweDAw
NTYsICJJbnRsQmFja3NsYXNoIl9zIH0sCisgICAgICAgIHsgMHgwMDU3LCAiRjExIl9zIH0sCisg
ICAgICAgIHsgMHgwMDU4LCAiRjEyIl9zIH0sCisgICAgICAgIHsgMHgwMDU5LCAiTnVtcGFkRXF1
YWwiX3MgfSwKKyAgICAgICAgeyAweDAwNjQsICJGMTMiX3MgfSwKKyAgICAgICAgeyAweDAwNjUs
ICJGMTQiX3MgfSwKKyAgICAgICAgeyAweDAwNjYsICJGMTUiX3MgfSwKKyAgICAgICAgeyAweDAw
NjcsICJGMTYiX3MgfSwKKyAgICAgICAgeyAweDAwNjgsICJGMTciX3MgfSwKKyAgICAgICAgeyAw
eDAwNjksICJGMTgiX3MgfSwKKyAgICAgICAgeyAweDAwNmEsICJGMTkiX3MgfSwKKyAgICAgICAg
eyAweDAwNmIsICJGMjAiX3MgfSwKKyAgICAgICAgeyAweDAwNmMsICJGMjEiX3MgfSwKKyAgICAg
ICAgeyAweDAwNmQsICJGMjIiX3MgfSwKKyAgICAgICAgeyAweDAwNmUsICJGMjMiX3MgfSwKKyAg
ICAgICAgeyAweDAwNzAsICJLYW5hTW9kZSJfcyB9LAorICAgICAgICB7IDB4MDA3MSwgIkxhbmcy
Il9zIH0sCisgICAgICAgIHsgMHgwMDcyLCAiTGFuZzEiX3MgfSwKKyAgICAgICAgeyAweDAwNzMs
ICJJbnRsUm8iX3MgfSwKKyAgICAgICAgeyAweDAwNzYsICJGMjQiX3MgfSwKKyAgICAgICAgeyAw
eDAwNzcsICJMYW5nNCJfcyB9LAorICAgICAgICB7IDB4MDA3OCwgIkxhbmczIl9zIH0sCisgICAg
ICAgIHsgMHgwMDc5LCAiQ29udmVydCJfcyB9LAorICAgICAgICB7IDB4MDA3YiwgIk5vbkNvbnZl
cnQiX3MgfSwKKyAgICAgICAgeyAweDAwN2QsICJJbnRsWWVuIl9zIH0sCisgICAgICAgIHsgMHgw
MDdlLCAiTnVtcGFkQ29tbWEiX3MgfSwKKyAgICAgICAgeyAweDAxMDgsICJVbmRvIl9zIH0sCisg
ICAgICAgIHsgMHgwMTBhLCAiUGFzdGUiX3MgfSwKKyAgICAgICAgeyAweDAxMTAsICJNZWRpYVRy
YWNrUHJldmlvdXMiX3MgfSwKKyAgICAgICAgeyAweDAxMTcsICJDdXQiX3MgfSwKKyAgICAgICAg
eyAweDAxMTgsICJDb3B5Il9zIH0sCisgICAgICAgIHsgMHgwMTE5LCAiTWVkaWFUcmFja05leHQi
X3MgfSwKKyAgICAgICAgeyAweDAxMWMsICJOdW1wYWRFbnRlciJfcyB9LAorICAgICAgICB7IDB4
MDExZCwgIkNvbnRyb2xSaWdodCJfcyB9LAorICAgICAgICB7IDB4MDEyMCwgIkF1ZGlvVm9sdW1l
TXV0ZSJfcyB9LAorICAgICAgICB7IDB4MDEyMSwgIkxhdW5jaEFwcDIiX3MgfSwKKyAgICAgICAg
eyAweDAxMjIsICJNZWRpYVBsYXlQYXVzZSJfcyB9LAorICAgICAgICB7IDB4MDEyNCwgIk1lZGlh
U3RvcCJfcyB9LAorICAgICAgICB7IDB4MDEyYywgIkVqZWN0Il9zIH0sCisgICAgICAgIHsgMHgw
MTJlLCAiQXVkaW9Wb2x1bWVEb3duIl9zIH0sCisgICAgICAgIHsgMHgwMTMwLCAiQXVkaW9Wb2x1
bWVVcCJfcyB9LAorICAgICAgICB7IDB4MDEzMiwgIkJyb3dzZXJIb21lIl9zIH0sCisgICAgICAg
IHsgMHgwMTM1LCAiTnVtcGFkRGl2aWRlIl9zIH0sCisgICAgICAgIHsgMHgwMTM3LCAiUHJpbnRT
Y3JlZW4iX3MgfSwKKyAgICAgICAgeyAweDAxMzgsICJBbHRSaWdodCJfcyB9LAorICAgICAgICB7
IDB4MDEzYiwgIkhlbHAiX3MgfSwKKyAgICAgICAgeyAweDAxNDUsICJOdW1Mb2NrIl9zIH0sCisg
ICAgICAgIHsgMHgwMTQ3LCAiSG9tZSJfcyB9LAorICAgICAgICB7IDB4MDE0OCwgIkFycm93VXAi
X3MgfSwKKyAgICAgICAgeyAweDAxNDksICJQYWdlVXAiX3MgfSwKKyAgICAgICAgeyAweDAxNGIs
ICJBcnJvd0xlZnQiX3MgfSwKKyAgICAgICAgeyAweDAxNGQsICJBcnJvd1JpZ2h0Il9zIH0sCisg
ICAgICAgIHsgMHgwMTRmLCAiRW5kIl9zIH0sCisgICAgICAgIHsgMHgwMTUwLCAiQXJyb3dEb3du
Il9zIH0sCisgICAgICAgIHsgMHgwMTUxLCAiUGFnZURvd24iX3MgfSwKKyAgICAgICAgeyAweDAx
NTIsICJJbnNlcnQiX3MgfSwKKyAgICAgICAgeyAweDAxNTMsICJEZWxldGUiX3MgfSwKKyAgICAg
ICAgeyAweDAxNWIsICJNZXRhTGVmdCJfcyB9LAorICAgICAgICB7IDB4MDE1YywgIk1ldGFSaWdo
dCJfcyB9LAorICAgICAgICB7IDB4MDE1ZCwgIkNvbnRleHRNZW51Il9zIH0sCisgICAgICAgIHsg
MHgwMTVlLCAiUG93ZXIiX3MgfSwKKyAgICAgICAgeyAweDAxNWYsICJTbGVlcCJfcyB9LAorICAg
ICAgICB7IDB4MDE2MywgIldha2VVcCJfcyB9LAorICAgICAgICB7IDB4MDE2NSwgIkJyb3dzZXJT
ZWFyY2giX3MgfSwKKyAgICAgICAgeyAweDAxNjYsICJCcm93c2VyRmF2b3JpdGVzIl9zIH0sCisg
ICAgICAgIHsgMHgwMTY3LCAiQnJvd3NlclJlZnJlc2giX3MgfSwKKyAgICAgICAgeyAweDAxNjgs
ICJCcm93c2VyU3RvcCJfcyB9LAorICAgICAgICB7IDB4MDE2OSwgIkJyb3dzZXJGb3J3YXJkIl9z
IH0sCisgICAgICAgIHsgMHgwMTZhLCAiQnJvd3NlckJhY2siX3MgfSwKKyAgICAgICAgeyAweDAx
NmIsICJMYXVuY2hBcHAxIl9zIH0sCisgICAgICAgIHsgMHgwMTZjLCAiTGF1bmNoTWFpbCJfcyB9
LAorICAgICAgICB7IDB4MDE2ZCwgIk1lZGlhU2VsZWN0Il9zIH0sCisgICAgfTsKKyAgICB1bnNp
Z25lZCBleHRlbmRlZFNjYW5Db2RlID0gKGxQYXJhbSA+PiAxNikgJiAweDFmZjsKKyAgICBjb25z
dCBhdXRvKiByZXN1bHQgPSBzdGQ6Omxvd2VyX2JvdW5kKAorICAgICAgICBzdGQ6OmJlZ2luKGRv
bUtleU1hcCksIHN0ZDo6ZW5kKGRvbUtleU1hcCksIGV4dGVuZGVkU2NhbkNvZGUsCisgICAgICAg
IFtdKGNvbnN0IGF1dG8mIGVudHJ5LCBpbnQgbmVlZGxlKSB7CisgICAgICAgICAgICByZXR1cm4g
ZW50cnkuc2NhbkNvZGUgPCBuZWVkbGU7CisgICAgICAgIH0pOworICAgIGlmIChyZXN1bHQgIT0g
c3RkOjplbmQoZG9tS2V5TWFwKSAmJiByZXN1bHQtPnNjYW5Db2RlID09IGV4dGVuZGVkU2NhbkNv
ZGUpCisgICAgICAgIHJldHVybiByZXN1bHQtPmRvbUNvZGU7CisKKyAgICByZXR1cm4gIlVuaWRl
bnRpZmllZCJfczsKK30KKwordm9pZCBXaW5kb3dzS2V5TmFtZXM6OnVwZGF0ZUxheW91dCgpCit7
CisgICAgSEtMIGN1cnJlbnRMYXlvdXQgPSBHZXRLZXlib2FyZExheW91dCgwKTsKKyAgICBpZiAo
Y3VycmVudExheW91dCA9PSBtX2tleWJvYXJkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBCWVRFIGtleWJvYXJkU3RhdGVUb1Jlc3RvcmVbMjU2XTsKKyAgICBpZiAoIUdldEtleWJvYXJk
U3RhdGUoa2V5Ym9hcmRTdGF0ZVRvUmVzdG9yZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
a2V5Ym9hcmRMYXlvdXQgPSBjdXJyZW50TGF5b3V0OworICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRv
S2V5LmNsZWFyKCk7CisgICAgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAgLy8gTWFwIHNp
emUgZm9yIHNvbWUgc2FtcGxlIGtleWJvYXJkIGxheW91dHM6CisgICAgLy8gVVM6IDQ3NiwgRnJl
bmNoOiA2MDIsIFBlcnNpYW46IDQ4MiwgVmlldG5hbWVzZTogMTQzNgorICAgIG1fcHJpbnRhYmxl
S2V5Q29kZVRvS2V5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMTUwMCk7CisKKyAgICBmb3IgKGlu
dCBtb2RpZmllckNvbWJpbmF0aW9uID0gMDsgbW9kaWZpZXJDb21iaW5hdGlvbiA8PSBjTW9kaWZp
ZXJGbGFnc0NvbWJpbmF0aW9uczsgKyttb2RpZmllckNvbWJpbmF0aW9uKSB7CisgICAgICAgIEJZ
VEUga2V5Ym9hcmRTdGF0ZVsyNTZdOworICAgICAgICBtZW1zZXQoa2V5Ym9hcmRTdGF0ZSwgMCwg
c2l6ZW9mKGtleWJvYXJkU3RhdGUpKTsKKworICAgICAgICAvLyBTZXR0aW5nIHVwIGtleWJvYXJk
IHN0YXRlIGZvciBtb2RpZmllcnMuCisgICAgICAgIHVuc2lnbmVkIGZsYWdzID0gZ2V0TW9kaWZp
ZXJGbGFncyhtb2RpZmllckNvbWJpbmF0aW9uKTsKKyAgICAgICAgc2V0TW9kaWZpZXJTdGF0ZShr
ZXlib2FyZFN0YXRlLCBmbGFncyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsS2V5
ID0gMDsgdmlydHVhbEtleSA8PSAweEZGOyArK3ZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIHdj
aGFyX3QgdHJhbnNsYXRlZENoYXJzWzVdOworICAgICAgICAgICAgaW50IHJ2ID0gVG9Vbmljb2Rl
RXgodmlydHVhbEtleSwgMCwga2V5Ym9hcmRTdGF0ZSwgdHJhbnNsYXRlZENoYXJzLAorICAgICAg
ICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2Fy
ZExheW91dCk7CisKKyAgICAgICAgICAgIGlmIChydiA9PSAtMSkgeworICAgICAgICAgICAgICAg
IC8vIERlYWQga2V5LCBpbmplY3RpbmcgVktfU1BBQ0UgdG8gZ2V0IGNoYXJhY3RlciByZXByZXNl
bnRhdGlvbi4KKyAgICAgICAgICAgICAgICBCWVRFIGVtcHR5U3RhdGVbMjU2XSA9IHsgfTsKKyAg
ICAgICAgICAgICAgICBydiA9IFRvVW5pY29kZUV4KFZLX1NQQUNFLCAwLCBlbXB0eVN0YXRlLCB0
cmFuc2xhdGVkQ2hhcnMsCisgICAgICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJh
bnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91dCk7CisgICAgICAgICAgICAgICAgLy8g
RXhwZWN0aW5nIGEgZGVhZCBrZXkgY2hhcmFjdGVyIChub3QgZm9sbG93ZWQgYnkgYSBzcGFjZSku
CisgICAgICAgICAgICAgICAgaWYgKHJ2ID09IDEpCisgICAgICAgICAgICAgICAgICAgIG1fcHJp
bnRhYmxlS2V5Q29kZVRvS2V5LnNldChzdGQ6Om1ha2VfcGFpcih2aXJ0dWFsS2V5LCBmbGFncyks
ICJEZWFkIl9zKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocnYgPT0gMSkgeworICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2xhdGVkQ2hhcnNbMF0gPj0gMHgyMCkgeworICAgICAgICAgICAgICAg
ICAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5zZXQoc3RkOjptYWtlX3BhaXIodmlydHVhbEtl
eSwgZmxhZ3MpLCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodHJhbnNsYXRlZENoYXJzWzBdKSk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgdGhlIGxheW91dCBtYWtlcyB1
c2Ugb2YgQWx0R3JhcGguCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb250cm9sQW5kQWx0
KGZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faGFzQWx0R3JhcGggPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBT
ZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkU3RhdGVUb1Jlc3RvcmUpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkN2M4NWZj
MjE3NGExMTUyY2JhNTIwMjcxNWRiZjllNTFkYTNmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmgKQEAgLTAsMCArMSw1MiBA
QAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3By
YWdtYSBvbmNlCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFdpbmRvd3NLZXlOYW1l
cyB7CitwdWJsaWM6CisgICAgV2luZG93c0tleU5hbWVzKCk7CisKKyAgICBTdHJpbmcgZG9tS2V5
RnJvbUxQYXJhbShMUEFSQU0pOworICAgIFN0cmluZyBkb21LZXlGcm9tQ2hhcihVQ2hhcik7Cisg
ICAgU3RyaW5nIGRvbUNvZGVGcm9tTFBhcmFtKExQQVJBTSk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCB1cGRhdGVMYXlvdXQoKTsKKworICAgIEhLTCBtX2tleWJvYXJkTGF5b3V0ID0gMDsKKyAgICBi
b29sIG1faGFzQWx0R3JhcGggPSBmYWxzZTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPHVuc2ln
bmVkIC8qVmlydHVhbEtleSovLCB1bnNpZ25lZCAvKkV2ZW50RmxhZ3MqLz4gVmlydHVhbEtleUV2
ZW50RmxhZ3NQYWlyOworICAgIHR5cGVkZWYgSGFzaE1hcDxWaXJ0dWFsS2V5RXZlbnRGbGFnc1Bh
aXIsIFN0cmluZywgRGVmYXVsdEhhc2g8VmlydHVhbEtleUV2ZW50RmxhZ3NQYWlyPjo6SGFzaCwg
UGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25l
ZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+Pj4gVmlydHVh
bEtleVRvS2V5TWFwOworICAgIFZpcnR1YWxLZXlUb0tleU1hcCBtX3ByaW50YWJsZUtleUNvZGVU
b0tleTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCBjMzYxMDBjZjVjNDQ2YzVmOWFl
MGYwNmU4YmQ4YTBmNDFmNTI3ZjNjLi43ZGJhMDhmZGVlODg2OTlmYjI0NmUyNGE0N2Y3NTMxYTk1
NDA4NTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkV2ZW50LmgKQEAgLTI2Myw3ICsyNjMsNyBAQCBwdWJs
aWM6CiAjZWxpZiBVU0UoTElCV1BFKQogICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25z
dCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBu
YXRpdmVWaXJ0dWFsS2V5Q29kZSwgYm9vbCBpc0tleXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPiwg
V2FsbFRpbWUgdGltZXN0YW1wKTsKICNlbHNlCi0gICAgV2ViS2V5Ym9hcmRFdmVudChUeXBlLCBj
b25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0
cmluZyYga2V5SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2
ZVZpcnR1YWxLZXlDb2RlLCBpbnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29s
IGlzS2V5cGFkLCBib29sIGlzU3lzdGVtS2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+LCBXYWxsVGlt
ZSB0aW1lc3RhbXApOworICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dz
VmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJDb2Rl
LCBib29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgT3B0
aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29u
c3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCmluZGV4IGE1YTIzY2YxNDhlZjcyOTdmN2ZkZDFm
OWZlYzYxZmUxZmU3MzUzZTcuLjIwZDkzOGIyNjY3ZmI3YWFkMmViOGExZWUzNzJiZDVjOWQ5NmMz
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCkBAIC0xMzIs
MTAgKzEzMiwxMiBAQCBXZWJLZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmCiAKICNlbHNlCiAKLVdlYktleWJv
YXJkRXZlbnQ6OldlYktleWJvYXJkRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmll
ciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBp
bnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlzS2V5cGFkLCBib29sIGlz
U3lzdGVtS2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycywgV2FsbFRpbWUgdGltZXN0
YW1wKQorV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBp
bnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGludCBt
YWNDaGFyQ29kZSwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wgaXNTeXN0
ZW1LZXksIE9wdGlvblNldDxNb2RpZmllcj4gbW9kaWZpZXJzLCBXYWxsVGltZSB0aW1lc3RhbXAp
CiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fdGV4
dCh0ZXh0KQogICAgICwgbV91bm1vZGlmaWVkVGV4dCh1bm1vZGlmaWVkVGV4dCkKKyAgICAsIG1f
a2V5KGtleSkKKyAgICAsIG1fY29kZShjb2RlKQogICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlk
ZW50aWZpZXIpCiAgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzVmlydHVhbEtl
eUNvZGUpCiAgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKG5hdGl2ZVZpcnR1YWxLZXlDb2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAppbmRleCBi
M2U2Mjk1ZDE3ZGQwYzRlZmM3MmEzNmYwY2I3OWYzOGNmMWE4NTYxLi44OGQ1M2QyMzZjZDZkNjI3
MzVmMDM2NzhhMDRjYTljMTk4ZGRkYWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4v
V2ViRXZlbnRGYWN0b3J5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvV2luZG93c0tleU5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRD
b2Rlcy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KQEAgLTQ0NiwxMSArNDQ3LDE5IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJXaGVlbEV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSCiAgICAgcmV0
dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwgZ2xvYmFsUG9zaXRp
b24sIEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSksIEZsb2F0U2l6ZSh3aGVlbFRpY2tzWCwgd2hl
ZWxUaWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkpOwogfQog
CitzdGF0aWMgV2luZG93c0tleU5hbWVzJiB3aW5kb3dzS2V5TmFtZXMoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxXaW5kb3dzS2V5TmFtZXM+IGtleU5hbWVzOworICAgIHJldHVybiBr
ZXlOYW1lczsKK30KKwogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
YktleWJvYXJkRXZlbnQoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3cGFyYW0sIExQ
QVJBTSBscGFyYW0pCiB7CiAgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IGtleWJvYXJkRXZlbnRU
eXBlRm9yRXZlbnQobWVzc2FnZSk7CiAgICAgU3RyaW5nIHRleHQgPSB0ZXh0RnJvbUV2ZW50KHdw
YXJhbSwgdHlwZSk7CiAgICAgU3RyaW5nIHVubW9kaWZpZWRUZXh0ID0gdW5tb2RpZmllZFRleHRG
cm9tRXZlbnQod3BhcmFtLCB0eXBlKTsKKyAgICBTdHJpbmcga2V5ID0gbWVzc2FnZSA9PSBXTV9D
SEFSID8gd2luZG93c0tleU5hbWVzKCkuZG9tS2V5RnJvbUNoYXIod3BhcmFtKSA6IHdpbmRvd3NL
ZXlOYW1lcygpLmRvbUtleUZyb21MUGFyYW0obHBhcmFtKTsKKyAgICBTdHJpbmcgY29kZSA9IHdp
bmRvd3NLZXlOYW1lcygpLmRvbUNvZGVGcm9tTFBhcmFtKGxwYXJhbSk7CiAgICAgU3RyaW5nIGtl
eUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CiAgICAg
aW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHN0YXRpY19jYXN0PGludD4od3BhcmFtKTsKICAg
ICBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CkBA
IC00NjAsNyArNDY5LDcgQEAgV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYktleWJvYXJkRXZlbnQoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UKICAgICBib29sIGlzU3lz
dGVtS2V5ID0gaXNTeXN0ZW1LZXlFdmVudChtZXNzYWdlKTsKICAgICBhdXRvIG1vZGlmaWVycyA9
IG1vZGlmaWVyc0ZvckN1cnJlbnRLZXlTdGF0ZSgpOwogCi0gICAgcmV0dXJuIFdlYktleWJvYXJk
RXZlbnQodHlwZSwgdGV4dCwgdW5tb2RpZmllZFRleHQsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NW
aXJ0dWFsS2V5Q29kZSwgbmF0aXZlVmlydHVhbEtleUNvZGUsIG1hY0NoYXJDb2RlLCBhdXRvUmVw
ZWF0LCBpc0tleXBhZCwgaXNTeXN0ZW1LZXksIG1vZGlmaWVycywgV2FsbFRpbWU6Om5vdygpKTsK
KyAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4dCwg
a2V5LCBjb2RlLCBrZXlJZGVudGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZp
cnR1YWxLZXlDb2RlLCBtYWNDaGFyQ29kZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVt
S2V5LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDJhMzIxMDRmODBlZmEwYTI3MjI5ZmUyMjdjMzE5ZTRjMGRjMGMwMDcu
LmEwN2JkYWJhOTFlYzg4MGE5NzdmODNlOWZiZGE5YWYwNzdlMzIxM2MgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxOS0xMS0xMyAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255
LmNvbT4KKworICAgICAgICBbV2luXSBVcGRhdGUgS2V5Ym9hcmRFdmVudCBhcyBwZXIgdGhlIGxh
dGVzdCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDIxODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgIFVuc2tpcHBlZCBmYXN0
L2V2ZW50cy9hcnJvdy1rZXlzLW9uLWJvZHkuaHRtbCwgZmFzdC9ldmVudHMva2V5Ym9hcmRldmVu
dC1rZXkuaHRtbCwgYW5kIGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1s
LgorCiAyMDE5LTExLTEzICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5kZXJUcmVlXVtXZWJLaXRUZXN0UnVubmVyXSBldmVu
dFNlbmRlci5rZXlEb3duIHNob3VsZCBzdXBwb3J0IGZ1bmN0aW9uIGtleXMKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMDhlMjk3YTEwODMwNzY0ZDg2NTY4
MWQ3MjI4YTE2M2M3ZTk4ZDc2OC4uZTIzNjZkNjgwOGE4MjE1ZmFkNjBhNWYyZmZjYWY0MjFmYWI4
NjllYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlv
bnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMy
MjYsNyArMzIyNiw2IEBAIGZhc3QvZG9tL0hUTUxNZXRlckVsZW1lbnQvbWV0ZXItc3R5bGVzLmh0
bWwgWyBGYWlsdXJlIF0KIGZhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtYmFy
LXZhbHVlLXBzZXVkby1lbGVtZW50Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZG9tL1dpbmRvdy9n
ZXQtc2V0LXByb3BlcnRpZXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9kb20vV2luZG93L3dpbmRv
dy1sb29rdXAtcHJlY2VkZW5jZS5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2V2ZW50cy9hcnJvdy1r
ZXlzLW9uLWJvZHkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvYmVmb3JlLWlucHV0LWV2
ZW50cy1wcmV2ZW50LWRyYWctYW5kLWRyb3AuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMv
Y29uc3RydWN0b3JzL2tleWJvYXJkLWV2ZW50LWNvbnN0cnVjdG9yLmh0bWwgWyBGYWlsdXJlIF0K
IGZhc3QvZXZlbnRzL2NvbnN0cnVjdG9ycy9vdmVyY29uc3RyYWluZWQtZXJyb3ItZXZlbnQtY29u
c3RydWN0b3IuaHRtbCBbIEZhaWx1cmUgXQpAQCAtMzIzNyw5ICszMjM2LDcgQEAgZmFzdC9ldmVu
dHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDEuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVu
dHMvaW1lLWNvbXBvc2l0aW9uZW5kLW9uLXNlbGVjdGlvbi1jaGFuZ2UuaHRtbCBbIEZhaWx1cmUg
XQogZmFzdC9ldmVudHMvaW5wdXQtZXZlbnRzLXBhc3RlLXJpY2gtZGF0YXRyYW5zZmVyLmh0bWwg
WyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtYnV0dG9uLmh0bWwg
WyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sIFsg
RmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9rZXlib2FyZGV2ZW50LWNvZGUuaHRtbCBbIEZhaWx1cmUg
XQotZmFzdC9ldmVudHMva2V5Ym9hcmRldmVudC1rZXkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9l
dmVudHMvdXBkYXRlTGF5b3V0Rm9ySGl0VGVzdC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50
cy93aGVlbGV2ZW50LWJhc2ljLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZm9ybXMvbGlzdGJveC1y
ZXNwZWN0cy1wYWRkaW5nLWJvdHRvbS5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5OWFmMjcwMGNjOWNkOTM5
NmNhNWJjODI3MTA0OWFlOTNiMTRiMThiLi43MWU0ZmVlYzMxMTk3ZTU0ZmQyODVjMWI0MjQ2YWNl
MzI1NTYzNjJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTE2MzYsNyArMTYzNiw2IEBAIGZhc3QvY3NzL3dpbGwtY2hhbmdlL3dpbGwt
Y2hhbmdlLWNyZWF0ZXMtc3RhY2tpbmctY29udGV4dC1pbmxpbmUuaHRtbCBbIEltYWdlT25sCiBm
YXN0L2Nzcy93aWxsLWNoYW5nZS93aWxsLWNoYW5nZS1jcmVhdGVzLXN0YWNraW5nLWNvbnRleHQu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC9kb20vYWRvcHQtYXR0cmlidXRlLWNyYXNo
LnN2ZyBbIEZhaWx1cmUgXQogZmFzdC9kb20vbmF2aWdhdG9yLXByb3BlcnR5LWdjLWFmdGVyLWZy
YW1lLWRldGFjaC5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2V2ZW50cy9hcnJvdy1rZXlzLW9uLWJv
ZHkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvYXR0ZW1wdC1zY3JvbGwtd2l0aC1uby1z
Y3JvbGxiYXJzLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2F1dG9zY3JvbGwtd2hlbi1p
bnB1dC1pcy1vZmZzY3JlZW4uaHRtbCBbIFNraXAgXSAjIFVJU2NyaXB0CiBmYXN0L2V2ZW50cy9h
dXRvc2Nyb2xsLXdpdGgtc29mdHdhcmUta2V5Ym9hcmQuaHRtbCBbIFNraXAgXSAjIFVJU2NyaXB0
CkBAIC0xNjcyLDkgKzE2NzEsNyBAQCBmYXN0L2V2ZW50cy9pbnB1dC1ldmVudC1pbnNlcnQtcmVw
bGFjZW1lbnQuaHRtbCBbIFNraXAgXSAjIFVJU2NyaXB0CiBmYXN0L2V2ZW50cy9pbnB1dC1ldmVu
dHMtcGFzdGUtZGF0YS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2lucHV0LWV2
ZW50cy1wYXN0ZS1yaWNoLWRhdGF0cmFuc2Zlci5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50
cy9rZXktZXZlbnRzLWluLWlucHV0LWJ1dHRvbi5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2V2ZW50
cy9rZXktZXZlbnRzLWluLWlucHV0LXRleHQuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMv
a2V5Ym9hcmRldmVudC1jb2RlLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2tleWJvYXJk
ZXZlbnQta2V5Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2tleWRvd24tbnVtcGFkLWtl
eXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29yLWltYWdlLXNldC5o
dG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9tb3VzZW92ZXItYnV0dG9uLmh0bWwgWyBGYWls
dXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384037</attachid>
            <date>2019-11-21 02:21:51 -0800</date>
            <delta_ts>2019-11-25 19:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202183-20191121192149.patch</filename>
            <type>text/plain</type>
            <size>37068</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE5NGMzNThhZWMwNzA0Y2VmODIzM2I2
YjMxNTA1ZjhhMWFhNzg1MzUuLjc0NzM3ZjJiMjNmYmM4N2FjY2RjZTE3Mjc0ODZjNmU5NDJiMWJi
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTEtMjAgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtleWJvYXJkRXZl
bnQgYXMgcGVyIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmluZXMuaDoKKwogMjAx
OS0xMS0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgYWRkcmVzcyBEYXJpbidzIGZlZWRiYWNrIG9uIHIyNTI2ODMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYTZmMTNmMjU5YTFkYTM2YWZlZDg0YWI5NWFmZDJkYWM0MWIzNjI4Yy4uNmRiNmNi
MGVmNzVlMjZlN2IxYzE5OTA2MDJkNTc5Nzc3ZGQ4NTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQyIEBACisyMDE5LTExLTIwICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnku
Y29tPgorCisgICAgICAgIFtXaW5dIFVwZGF0ZSBLZXlib2FyZEV2ZW50IGFzIHBlciB0aGUgbGF0
ZXN0IHNwZWNpZmljYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjE4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCAna2V5JyBhbmQgJ2NvZGUnIHByb3BlcnRpZXMgb2YgS2V5Ym9hcmRFdmVu
dCBmb3IgV2luZG93cy4gVGhlCisgICAgICAgIGltcGxlbWVudGF0aW9uIGlzIGNvcGllZCBmcm9t
IENocm9taXVtIGZvciBXaW5kb3dzLgorCisgICAgICAgIEZvciBpbXBsZW1lbnRpbmcgJ2tleScg
cHJvcGVydGllcywgVG9Vbmljb2RlRXggQVBJIGlzIHVzZWQgdG8KKyAgICAgICAgY29udmVydCBh
IHZpcnR1YWwga2V5IGNvZGUgdG8gYSBjaGFyYWN0ZXIgaW5mb3JtYXRpb24uCisgICAgICAgIFVu
Zm9ydHVuYXRlbHksIFRvVW5pY29kZUV4IGFsdGVycyB0aGUgc3RvcmVkIHByZXZpb3VzIHR5cGVk
IGRlYWQKKyAgICAgICAga2V5IGluIHRoZSBkcml2ZXIsIGl0IGNhbid0IGJlIHVzZWQgZm9yIGVh
Y2gga2V5IGV2ZW50LiBTbywKKyAgICAgICAgVG9Vbmljb2RlRXggaXMgdXNlZCB0byBjb252ZXJ0
IGFsbCB2aXJ0dWFsIGtleXMgd2l0aCBhbGwgbW9kaWZpZXIKKyAgICAgICAgY29tYmluYXRpb25z
IGJlZm9yZWhhbmQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgdHVybnMgb24gRU5BQkxFX0tFWUJP
QVJEX0tFWV9BVFRSSUJVVEUgYW5kCisgICAgICAgIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJ
QlVURSBtYWNyb3MgZm9yIGFsbCBwb3J0cy4gQSBmb2xsb3ctdXAKKyAgICAgICAgcGF0Y2ggd2ls
bCByZW1vdmUgdGhlIG1hY3Jvcy4KKworICAgICAgICBFeGlzdGluZyB0ZXN0cyBjb3ZlcnMuCisK
KyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vS2V5
RXZlbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0tleU5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmNwcDogQWRkZWQuCisg
ICAgICAgIChoYXNDb250cm9sQW5kQWx0KToKKyAgICAgICAgKGdldE1vZGlmaWVyRmxhZ3MpOgor
ICAgICAgICAobm9uUHJpbnRhYmxlVmlydHVhbEtleVRvRG9tS2V5KToKKyAgICAgICAgKFdpbmRv
d3NLZXlOYW1lczo6V2luZG93c0tleU5hbWVzKToKKyAgICAgICAgKFdpbmRvd3NLZXlOYW1lczo6
ZG9tS2V5RnJvbUxQYXJhbSk6CisgICAgICAgIChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAg
ICAgICAoV2luZG93c0tleU5hbWVzOjpkb21LZXlGcm9tQ2hhcik6CisgICAgICAgIChXaW5kb3dz
S2V5TmFtZXM6OmRvbUNvZGVGcm9tTFBhcmFtKToKKyAgICAgICAgKFdpbmRvd3NLZXlOYW1lczo6
dXBkYXRlTGF5b3V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmg6
IEFkZGVkLgorCiAyMDE5LTExLTIwICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgogCiAgICAgICAgIFtNU1ZDXSBlcnJvciBDMjAzOTogJ3dlYWtQdHJGYWN0b3J5Jzog
aXMgbm90IGEgbWVtYmVyIG9mICdXZWJDb3JlOjpEb2N1bWVudFN0b3JhZ2VBY2Nlc3M6OnJlcXVl
c3RTdG9yYWdlQWNjZXNzOjo8bGFtYmRhXzNmMmNmZDc3MDRmOTNkOGZlMTlkNWI1ZjA2NGY4YWRk
PicKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggOTlmY2MwNjI2M2U3OGNhMjc2YWFjNDYxMDRkNzY3ODZkYzAwYTg0ZC4u
MDkxMDZiMTg5Y2NmNzIxZTQwZjAzZjY1MGNkMzFjNjk0ZmVhOWU3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOS0xMS0yMCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBz
b255LmNvbT4KKworICAgICAgICBbV2luXSBVcGRhdGUgS2V5Ym9hcmRFdmVudCBhcyBwZXIgdGhl
IGxhdGVzdCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDIxODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNoYXJlZC9XZWJFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJL
ZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6V2Vi
S2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogU2hhcmVkL3dpbi9XZWJFdmVudEZhY3RvcnkuY3Bw
OgorICAgICAgICAoV2ViS2l0Ojp3aW5kb3dzS2V5TmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQpOgorCiAyMDE5LTExLTIwICBD
aGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBbR1RLXSBBZGQg
QU5HTEUgYmFja2VuZCB0byBHVEsgcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmVh
dHVyZURlZmluZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKaW5kZXggNTIz
OGU3OTFjMjI4OWIxMDQ4YzJmOTA3YWE2NTVkZGNmNWQzZjAyMi4uODY0ZGY0NjlkYzJiYzM3YzMw
Yjc0MzQ3YmZkNDA0ZThjMTE3OWY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVy
ZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC03NTEs
MTEgKzc1MSwxMSBAQCB0aGUgcHVibGljIGlPUyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTc5MTY3Pi4gKi8KICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX0tFWUJPQVJEX0tF
WV9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDAKKyNk
ZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVm
aW5lZChFTkFCTEVfS0VZQk9BUkRfQ09ERV9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9LRVlC
T0FSRF9DT0RFX0FUVFJJQlVURSAwCisjZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJ
QlVURSAxCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAxMDIwNmZlNDdjNjg4YWJlNGQ0ZDA0Zjc3OTcz
NzkxNmNkYjgwYWVhLi5kMWZkNGViMTJkZDk3MTEwMDE4MGVhODA1NmVkNDg2NTY5ZmM5MDZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTA3LDYgKzEwNyw3IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAogICAg
IHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3Nh
Z2VCcm9hZGNhc3Rlci5jcHAKKyAgICBwbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmNwcAog
CiAgICAgcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAogKQpAQCAtMTQyLDYgKzE0Myw3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmgKICAgICBwbGF0Zm9ybS93aW4vV2luZG93TWVz
c2FnZUJyb2FkY2FzdGVyLmgKICAgICBwbGF0Zm9ybS93aW4vV2luZG93TWVzc2FnZUxpc3RlbmVy
LmgKKyAgICBwbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmgKICAgICBwbGF0Zm9ybS93aW4v
V2luZG93c1RvdWNoLmgKICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0tleUV2ZW50V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVu
dFdpbi5jcHAKaW5kZXggYjIzNTZjNWY0ZmM0ZDQ2N2Q4Y2M0NzVmN2JjYmY1NzQ3MmNlYzE3OS4u
NDQ3Mzc2ODYxODdhMDZhOTJjNDA4ZWE2MGI2M2E0OGFjODQ4MTMzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAKKyNp
bmNsdWRlICJXaW5kb3dzS2V5TmFtZXMuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0yMTgs
MTAgKzIxOSwxOCBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
VUNoYXIgYykKICAgICByZXR1cm4gU3RyaW5nKCZjLCAxKTsKIH0KIAorc3RhdGljIFdpbmRvd3NL
ZXlOYW1lcyYgd2luZG93c0tleU5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
V2luZG93c0tleU5hbWVzPiBrZXlOYW1lczsKKyAgICByZXR1cm4ga2V5TmFtZXM7Cit9CisKIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEhXTkQsIFdQQVJBTSBj
b2RlLCBMUEFSQU0ga2V5RGF0YSwgVHlwZSB0eXBlLCBib29sIHN5c3RlbUtleSkKICAgICA6IFBs
YXRmb3JtRXZlbnQodHlwZSwgR2V0S2V5U3RhdGUoVktfU0hJRlQpICYgSElHSF9CSVRfTUFTS19T
SE9SVCwgR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgJiBISUdIX0JJVF9NQVNLX1NIT1JULCBHZXRL
ZXlTdGF0ZShWS19NRU5VKSAmIEhJR0hfQklUX01BU0tfU0hPUlQsIGZhbHNlLCBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHMoOjpHZXRUaWNrQ291bnQoKSAqIDAuMDAxKSkKICAgICAsIG1fdGV4dCgo
dHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKSA/IHNpbmdsZUNoYXJhY3RlclN0cmluZyhjb2Rl
KSA6IFN0cmluZygpKQogICAgICwgbV91bm1vZGlmaWVkVGV4dCgodHlwZSA9PSBQbGF0Zm9ybUV2
ZW50OjpDaGFyKSA/IHNpbmdsZUNoYXJhY3RlclN0cmluZyhjb2RlKSA6IFN0cmluZygpKQorICAg
ICwgbV9rZXkodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyID8gd2luZG93c0tleU5hbWVzKCku
ZG9tS2V5RnJvbUNoYXIoY29kZSkgOiB3aW5kb3dzS2V5TmFtZXMoKS5kb21LZXlGcm9tTFBhcmFt
KGtleURhdGEpKQorICAgICwgbV9jb2RlKHdpbmRvd3NLZXlOYW1lcygpLmRvbUNvZGVGcm9tTFBh
cmFtKGtleURhdGEpKQogICAgICwgbV9rZXlJZGVudGlmaWVyKCh0eXBlID09IFBsYXRmb3JtRXZl
bnQ6OkNoYXIpID8gU3RyaW5nKCkgOiBrZXlJZGVudGlmaWVyRm9yV2luZG93c0tleUNvZGUoY29k
ZSkpCiAgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSgodHlwZSA9PSBSYXdLZXlEb3duIHx8
IHR5cGUgPT0gS2V5VXApID8gd2luZG93c0tleWNvZGVXaXRoTG9jYXRpb24oY29kZSwga2V5RGF0
YSkgOiAwKQogICAgICwgbV9hdXRvUmVwZWF0KEhJV09SRChrZXlEYXRhKSAmIEtGX1JFUEVBVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjZkYTZjNTFiYjY1NzkzNjlkMzYxMjBiZTkwM2Y3YjZjNjYxYjhjMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMu
Y3BwCkBAIC0wLDAgKzEsNTM0IEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2luZG93c0tl
eU5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBXaW5kb3dzS2V5
TmFtZXM6OktleU1vZGlmaWVyIDogdWludDhfdCB7CisgICAgU2hpZnQgPSAxIDw8IDAsCisgICAg
Q29udHJvbCA9IDEgPDwgMSwKKyAgICBBbHQgPSAxIDw8IDIsCisgICAgQ2Fwc0xvY2sgPSAxIDw8
IDMsCit9OworCitzdGF0aWMgdm9pZCBzZXRNb2RpZmllclN0YXRlKEJZVEUqIGtleWJvYXJkU3Rh
dGUsIFdpbmRvd3NLZXlOYW1lczo6S2V5TW9kaWZpZXJTZXQgbW9kaWZpZXJzKQoreworICAgIC8v
IEFjY29yZGluZyB0byBNU0ROIEdldEtleVN0YXRlKCk6CisgICAgLy8gMS4gSWYgdGhlIGhpZ2gt
b3JkZXIgYml0IGlzIDEsIHRoZSBrZXkgaXMgZG93bjsgb3RoZXJ3aXNlLCBpdCBpcyB1cC4KKyAg
ICAvLyAyLiBJZiB0aGUgbG93LW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIHRvZ2dsZWQuIEEg
a2V5LCBzdWNoIGFzIHRoZQorICAgIC8vICAgIENBUFMgTE9DSyBrZXksIGlzIHRvZ2dsZWQgaWYg
aXQgaXMgdHVybmVkIG9uLiBUaGUga2V5IGlzIG9mZiBhbmQKKyAgICAvLyAgICB1bnRvZ2dsZWQg
aWYgdGhlIGxvdy1vcmRlciBiaXQgaXMgMC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDYzMDEuYXNweAorICAg
IGlmIChtb2RpZmllcnMuY29udGFpbnMoV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmllcjo6U2hp
ZnQpKQorICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX1NISUZUXSB8PSAweDgwOworCisgICAgaWYg
KG1vZGlmaWVycy5jb250YWlucyhXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyOjpDb250cm9s
KSkKKyAgICAgICAga2V5Ym9hcmRTdGF0ZVtWS19DT05UUk9MXSB8PSAweDgwOworCisgICAgaWYg
KG1vZGlmaWVycy5jb250YWlucyhXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyOjpBbHQpKQor
ICAgICAgICBrZXlib2FyZFN0YXRlW1ZLX01FTlVdIHw9IDB4ODA7CisKKyAgICBpZiAobW9kaWZp
ZXJzLmNvbnRhaW5zKFdpbmRvd3NLZXlOYW1lczo6S2V5TW9kaWZpZXI6OkNhcHNMb2NrKSkKKyAg
ICAgICAga2V5Ym9hcmRTdGF0ZVtWS19DQVBJVEFMXSB8PSAweDAxOworfQorCitzdGF0aWMgYm9v
bCBoYXNDb250cm9sQW5kQWx0KFdpbmRvd3NLZXlOYW1lczo6S2V5TW9kaWZpZXJTZXQgbW9kaWZp
ZXJzKQoreworICAgIHJldHVybiBtb2RpZmllcnMuY29udGFpbnNBbGwoeyBXaW5kb3dzS2V5TmFt
ZXM6OktleU1vZGlmaWVyOjpDb250cm9sLCBXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyOjpB
bHQgfSk7Cit9CisKKy8vIFRoaXMgdGFibGUgbXVzdCBiZSBzb3J0ZWQgYnkgJ3ZpcnR1YWxLZXkn
IGZvciBiaW5hcnkgc2VhcmNoLgorY29uc3RleHByIHN0cnVjdCBOb25QcmludGFibGVLZXlFbnRy
eSB7CisgICAgaW50IHZpcnR1YWxLZXk7CisgICAgQVNDSUlMaXRlcmFsIGRvbUtleTsKK30gY05v
blByaW50YWJsZUtleU1hcFtdID0geworICAgIHsgVktfQ0FOQ0VMLCAiQ2FuY2VsIl9zIH0sCisg
ICAgeyBWS19CQUNLLCAiQmFja3NwYWNlIl9zIH0sCisgICAgeyBWS19UQUIsICJUYWIiX3MgfSwK
KyAgICB7IFZLX0NMRUFSLCAiQ2xlYXIiX3MgfSwKKyAgICB7IFZLX1JFVFVSTiwgIkVudGVyIl9z
IH0sCisgICAgeyBWS19TSElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBWS19DT05UUk9MLCAiQ29u
dHJvbCJfcyB9LAorICAgIHsgVktfTUVOVSwgIkFsdCJfcyB9LAorICAgIHsgVktfUEFVU0UsICJQ
YXVzZSJfcyB9LAorICAgIHsgVktfQ0FQSVRBTCwgIkNhcHNMb2NrIl9zIH0sCisgICAgLy8gVktf
S0FOQSA9PSBWS19IQU5HVUwKKyAgICB7IFZLX0pVTkpBLCAiSnVuamFNb2RlIl9zIH0sCisgICAg
eyBWS19GSU5BTCwgIkZJTkFMX01PREUiX3MgfSwKKyAgICAvLyBWS19IQU5KQSA9PSBWS19LQU5K
SQorICAgIHsgVktfRVNDQVBFLCAiRXNjYXBlIl9zIH0sCisgICAgeyBWS19DT05WRVJULCAiQ29u
dmVydCJfcyB9LAorICAgIHsgVktfTk9OQ09OVkVSVCwgIk5vbkNvbnZlcnQiX3MgfSwKKyAgICB7
IFZLX0FDQ0VQVCwgIkFjY2VwdCJfcyB9LAorICAgIHsgVktfTU9ERUNIQU5HRSwgIk1vZGVDaGFu
Z2UiX3MgfSwKKyAgICAvLyBWS19TUEFDRQorICAgIHsgVktfUFJJT1IsICJQYWdlVXAiX3MgfSwK
KyAgICB7IFZLX05FWFQsICJQYWdlRG93biJfcyB9LAorICAgIHsgVktfRU5ELCAiRW5kIl9zIH0s
CisgICAgeyBWS19IT01FLCAiSG9tZSJfcyB9LAorICAgIHsgVktfTEVGVCwgIkFycm93TGVmdCJf
cyB9LAorICAgIHsgVktfVVAsICJBcnJvd1VwIl9zIH0sCisgICAgeyBWS19SSUdIVCwgIkFycm93
UmlnaHQiX3MgfSwKKyAgICB7IFZLX0RPV04sICJBcnJvd0Rvd24iX3MgfSwKKyAgICB7IFZLX1NF
TEVDVCwgIlNlbGVjdCJfcyB9LAorICAgIHsgVktfUFJJTlQsICJQcmludCJfcyB9LAorICAgIHsg
VktfRVhFQ1VURSwgIkV4ZWN1dGUiX3MgfSwKKyAgICB7IFZLX1NOQVBTSE9ULCAiUHJpbnRTY3Jl
ZW4iX3MgfSwKKyAgICB7IFZLX0lOU0VSVCwgIkluc2VydCJfcyB9LAorICAgIHsgVktfREVMRVRF
LCAiRGVsZXRlIl9zIH0sCisgICAgeyBWS19IRUxQLCAiSGVscCJfcyB9LAorICAgIC8vIFZLXzAu
LjkKKyAgICAvLyBWS19BLi5aCisgICAgeyBWS19MV0lOLCAiTWV0YSJfcyB9LAorICAgIC8vIFZL
X0NPTU1BTkQgPT0gVktfTFdJTgorICAgIHsgVktfUldJTiwgIk1ldGEiX3MgfSwKKyAgICB7IFZL
X0FQUFMsICJDb250ZXh0TWVudSJfcyB9LAorICAgIHsgVktfU0xFRVAsICJTdGFuZGJ5Il9zIH0s
CisgICAgLy8gVktfTlVNUEFEMC4uOQorICAgIC8vIFZLX01VTFRJUExZLCBWS19BREQsIFZLX1NF
UEFSQVRPUiwgVktfU1VCVFJBQ1QsIFZLX0RFQ0lNQUwsCisgICAgLy8gVktfRElWSURFCisgICAg
eyBWS19GMSwgIkYxIl9zIH0sCisgICAgeyBWS19GMiwgIkYyIl9zIH0sCisgICAgeyBWS19GMywg
IkYzIl9zIH0sCisgICAgeyBWS19GNCwgIkY0Il9zIH0sCisgICAgeyBWS19GNSwgIkY1Il9zIH0s
CisgICAgeyBWS19GNiwgIkY2Il9zIH0sCisgICAgeyBWS19GNywgIkY3Il9zIH0sCisgICAgeyBW
S19GOCwgIkY4Il9zIH0sCisgICAgeyBWS19GOSwgIkY5Il9zIH0sCisgICAgeyBWS19GMTAsICJG
MTAiX3MgfSwKKyAgICB7IFZLX0YxMSwgIkYxMSJfcyB9LAorICAgIHsgVktfRjEyLCAiRjEyIl9z
IH0sCisgICAgeyBWS19GMTMsICJGMTMiX3MgfSwKKyAgICB7IFZLX0YxNCwgIkYxNCJfcyB9LAor
ICAgIHsgVktfRjE1LCAiRjE1Il9zIH0sCisgICAgeyBWS19GMTYsICJGMTYiX3MgfSwKKyAgICB7
IFZLX0YxNywgIkYxNyJfcyB9LAorICAgIHsgVktfRjE4LCAiRjE4Il9zIH0sCisgICAgeyBWS19G
MTksICJGMTkiX3MgfSwKKyAgICB7IFZLX0YyMCwgIkYyMCJfcyB9LAorICAgIHsgVktfRjIxLCAi
RjIxIl9zIH0sCisgICAgeyBWS19GMjIsICJGMjIiX3MgfSwKKyAgICB7IFZLX0YyMywgIkYyMyJf
cyB9LAorICAgIHsgVktfRjI0LCAiRjI0Il9zIH0sCisgICAgeyBWS19OVU1MT0NLLCAiTnVtTG9j
ayJfcyB9LAorICAgIHsgVktfU0NST0xMLCAiU2Nyb2xsTG9jayJfcyB9LAorICAgIHsgVktfTFNI
SUZULCAiU2hpZnQiX3MgfSwKKyAgICB7IFZLX1JTSElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBW
S19MQ09OVFJPTCwgIkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX1JDT05UUk9MLCAiQ29udHJvbCJf
cyB9LAorICAgIHsgVktfTE1FTlUsICJBbHQiX3MgfSwKKyAgICB7IFZLX1JNRU5VLCAiQWx0Il9z
IH0sCisgICAgeyBWS19CUk9XU0VSX0JBQ0ssICJCcm93c2VyQmFjayJfcyB9LAorICAgIHsgVktf
QlJPV1NFUl9GT1JXQVJELCAiQnJvd3NlckZvcndhcmQiX3MgfSwKKyAgICB7IFZLX0JST1dTRVJf
UkVGUkVTSCwgIkJyb3dzZXJSZWZyZXNoIl9zIH0sCisgICAgeyBWS19CUk9XU0VSX1NUT1AsICJC
cm93c2VyU3RvcCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9TRUFSQ0gsICJCcm93c2VyU2VhcmNo
Il9zIH0sCisgICAgeyBWS19CUk9XU0VSX0ZBVk9SSVRFUywgIkJyb3dzZXJGYXZvcml0ZXMiX3Mg
fSwKKyAgICB7IFZLX0JST1dTRVJfSE9NRSwgIkJyb3dzZXJIb21lIl9zIH0sCisgICAgeyBWS19W
T0xVTUVfTVVURSwgIkF1ZGlvVm9sdW1lIl9zIH0sCisgICAgeyBWS19WT0xVTUVfRE9XTiwgIkF1
ZGlvVm9sdW1lRG93biJfcyB9LAorICAgIHsgVktfVk9MVU1FX1VQLCAiQXVkaW9Wb2x1bWVVcCJf
cyB9LAorICAgIHsgVktfTUVESUFfTkVYVF9UUkFDSywgIk1lZGlhVHJhY2tOZXh0Il9zIH0sCisg
ICAgeyBWS19NRURJQV9QUkVWX1RSQUNLLCAiTWVkaWFUcmFja1ByZXZpb3VzIl9zIH0sCisgICAg
eyBWS19NRURJQV9TVE9QLCAiTWVkaWFTdG9wIl9zIH0sCisgICAgeyBWS19NRURJQV9QTEFZX1BB
VVNFLCAiTWVkaWFQbGF5UGF1c2UiX3MgfSwKKyAgICAvLyBWS19PRU1fMS4uOCwgMTAyLCBQTFVT
LCBDT01NQSwgTUlOVVMsIFBFUklPRAorICAgIHsgVktfUFJPQ0VTU0tFWSwgIlByb2Nlc3MiX3Mg
fSwKKyAgICAvLyBWS19QQUNLRVQgLSBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyLCBjb25zaWRl
cmVkIGFzIHByaW50YWJsZSBrZXkuCisgICAgeyBWS19BVFROLCAiQXR0biJfcyB9LAorICAgIHsg
VktfQ1JTRUwsICJDclNlbCJfcyB9LAorICAgIHsgVktfRVhTRUwsICJFeFNlbCJfcyB9LAorICAg
IHsgVktfRVJFT0YsICJFcmFzZUVvZiJfcyB9LAorICAgIHsgVktfUExBWSwgIlBsYXkiX3MgfSwK
KyAgICB7IFZLX1pPT00sICJab29tVG9nZ2xlIl9zIH0sCisgICAgeyBWS19PRU1fQ0xFQVIsICJD
bGVhciJfcyB9LAorfTsKKworLy8gRGlzYW1iaWd1YXRlcyB0aGUgbWVhbmluZyBvZiBjZXJ0YWlu
IG5vbi1wcmludGFibGUga2V5cyB3aGljaCBoYXZlIGRpZmZlcmVudAorLy8gbWVhbmluZ3MgdW5k
ZXIgZGlmZmVyZW50IGxhbmd1YWdlcywgYnV0IHVzZSB0aGUgc2FtZSBWS0VZIGNvZGUuCitzdGF0
aWMgU3RyaW5nIGxhbmd1YWdlU3BlY2lmaWNPZW1WaXJ0dWFsS2V5VG9Eb21LZXkoaW50IHZpcnR1
YWxLZXksIEhLTCBsYXlvdXQpCit7CisgICAgV09SRCBsYW5ndWFnZSA9IExPV09SRChsYXlvdXQp
OworICAgIFdPUkQgcHJpbWFyeUxhbmd1YWdlID0gUFJJTUFSWUxBTkdJRChsYW5ndWFnZSk7Cisg
ICAgaWYgKHByaW1hcnlMYW5ndWFnZSA9PSBMQU5HX0tPUkVBTikgeworICAgICAgICBzd2l0Y2gg
KHZpcnR1YWxLZXkpIHsKKyAgICAgICAgY2FzZSBWS19IQU5HVUw6CisgICAgICAgICAgICByZXR1
cm4gIkhhbmd1bE1vZGUiX3M7CisgICAgICAgIGNhc2UgVktfSEFOSkE6CisgICAgICAgICAgICBy
ZXR1cm4gIkhhbmphTW9kZSJfczsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocHJpbWFyeUxhbmd1YWdlID09
IExBTkdfSkFQQU5FU0UpIHsKKyAgICAgICAgc3dpdGNoICh2aXJ0dWFsS2V5KSB7CisgICAgICAg
ICAgICAvLyBWS19LQU5BIGlzbid0IGdlbmVyYXRlZCBieSBhbnkgbW9kZXJuIGxheW91dHMgYnV0
IGlzIGEgbGlzdGVkIHZhbHVlCisgICAgICAgICAgICAvLyB0aGF0IHRoaXJkLXBhcnR5IGFwcHMg
bWlnaHQgc3ludGhlc2l6ZSwgc28gd2UgaGFuZGxlIGl0IGFueXdheS4KKyAgICAgICAgY2FzZSBW
S19LQU5BOgorICAgICAgICBjYXNlIFZLX0FUVE46CisgICAgICAgICAgICByZXR1cm4gIkthbmFN
b2RlIl9zOworICAgICAgICBjYXNlIFZLX0tBTkpJOgorICAgICAgICAgICAgcmV0dXJuICJLYW5q
aU1vZGUiX3M7CisgICAgICAgIGNhc2UgVktfT0VNX0FUVE46CisgICAgICAgICAgICByZXR1cm4g
IkFscGhhbnVtZXJpYyJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fRklOSVNIOgorICAgICAgICAg
ICAgcmV0dXJuICJLYXRha2FuYSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fQ09QWToKKyAgICAg
ICAgICAgIHJldHVybiAiSGlyYWdhbmEiX3M7CisgICAgICAgIGNhc2UgVktfT0VNX0JBQ0tUQUI6
CisgICAgICAgICAgICByZXR1cm4gIlJvbWFqaSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fQVVU
TzoKKyAgICAgICAgICAgIHJldHVybiAiSGFua2FrdSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1f
RU5MVzoKKyAgICAgICAgICAgIHJldHVybiAiWmVua2FrdSJfczsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgbm9uUHJpbnRhYmxlVmlydHVhbEtleVRv
RG9tS2V5KGludCB2aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIC8vIDEuIENoZWNrIGlm
IHx2aXJ0dWFsS2V5fCBoYXMgYSB8bGF5b3V0fC1zcGVjaWZpYyBtZWFuaW5nLgorICAgIGNvbnN0
IFN0cmluZyBrZXkgPSBsYW5ndWFnZVNwZWNpZmljT2VtVmlydHVhbEtleVRvRG9tS2V5KHZpcnR1
YWxLZXksIGxheW91dCk7CisgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBr
ZXk7CisKKyAgICAvLyAyLiBNb3N0IHx2aXJ0dWFsS2V5c3wgaGF2ZSB0aGUgc2FtZSBtZWFuaW5n
IHJlZ2FyZGxlc3Mgb2YgfGxheW91dHwuCisgICAgY29uc3QgTm9uUHJpbnRhYmxlS2V5RW50cnkq
IHJlc3VsdCA9IHN0ZDo6bG93ZXJfYm91bmQoCisgICAgICAgIHN0ZDo6YmVnaW4oY05vblByaW50
YWJsZUtleU1hcCksIHN0ZDo6ZW5kKGNOb25QcmludGFibGVLZXlNYXApLCB2aXJ0dWFsS2V5LAor
ICAgICAgICBbXShjb25zdCBOb25QcmludGFibGVLZXlFbnRyeSYgZW50cnksIGludCBuZWVkbGUp
IHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS52aXJ0dWFsS2V5IDwgbmVlZGxlOworICAgICAg
ICB9KTsKKyAgICBpZiAocmVzdWx0ICE9IHN0ZDo6ZW5kKGNOb25QcmludGFibGVLZXlNYXApICYm
IHJlc3VsdC0+dmlydHVhbEtleSA9PSB2aXJ0dWFsS2V5KQorICAgICAgICByZXR1cm4gcmVzdWx0
LT5kb21LZXk7CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1dpbmRvd3NLZXlOYW1lczo6
V2luZG93c0tleU5hbWVzKCkKK3sKKyAgICB1cGRhdGVMYXlvdXQoKTsKK30KKworU3RyaW5nIFdp
bmRvd3NLZXlOYW1lczo6ZG9tS2V5RnJvbUxQYXJhbShMUEFSQU0gbFBhcmFtKQoreworICAgIHVu
c2lnbmVkIHNjYW5Db2RlID0gKGxQYXJhbSA+PiAxNikgJiAweGZmOworICAgIGJvb2wgZXh0ZW5k
ZWQgPSBsUGFyYW0gJiAweDAxMDAwMDAwOworICAgIHVuc2lnbmVkIHZpcnR1YWxLZXkgPSBNYXBW
aXJ0dWFsS2V5KHNjYW5Db2RlLCBNQVBWS19WU0NfVE9fVkspOworICAgIEtleU1vZGlmaWVyU2V0
IG1vZGlmaWVyczsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfU0hJRlQpIDwgMCkKKyAgICAgICAg
bW9kaWZpZXJzLmFkZChLZXlNb2RpZmllcjo6U2hpZnQpOworICAgIGlmIChHZXRLZXlTdGF0ZShW
S19DT05UUk9MKSA8IDApCisgICAgICAgIG1vZGlmaWVycy5hZGQoS2V5TW9kaWZpZXI6OkNvbnRy
b2wpOworICAgIGlmIChHZXRLZXlTdGF0ZShWS19NRU5VICkgPCAwKQorICAgICAgICBtb2RpZmll
cnMuYWRkKEtleU1vZGlmaWVyOjpBbHQpOworICAgIGlmIChHZXRLZXlTdGF0ZShWS19DQVBJVEFM
KSAmIDEpCisgICAgICAgIG1vZGlmaWVycy5hZGQoS2V5TW9kaWZpZXI6OkNhcHNMb2NrKTsKKwor
ICAgIHVwZGF0ZUxheW91dCgpOworICAgIC8vIFdpbmRvd3MgZXhwcmVzc2VzIHJpZ2h0LUFsdCBh
cyBWS19NRU5VIHdpdGggdGhlIGV4dGVuZGVkIGZsYWcgc2V0LgorICAgIC8vIFRoaXMga2V5IHNo
b3VsZCBnZW5lcmF0ZSBBbHRHcmFwaCB1bmRlciBsYXlvdXRzIHdoaWNoIHVzZSB0aGF0IG1vZGlm
aWVyLgorICAgIGlmICh2aXJ0dWFsS2V5ID09IFZLX01FTlUgJiYgZXh0ZW5kZWQgJiYgbV9oYXNB
bHRHcmFwaCkKKyAgICAgICAgcmV0dXJuICJBbHRHcmFwaCJfczsKKworICAgIFN0cmluZyBrZXkg
PSBub25QcmludGFibGVWaXJ0dWFsS2V5VG9Eb21LZXkodmlydHVhbEtleSwgbV9rZXlib2FyZExh
eW91dCk7CisgICAgaWYgKCFrZXkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAg
ICBjb25zdCBLZXlNb2RpZmllclNldCBtb2RpZmllcnNUb1RyeVtdID0geworICAgICAgICAvLyBU
cnlpbmcgdG8gbWF0Y2ggRmlyZWZveCdzIGJlaGF2aW9yIGFuZCBVSUV2ZW50cyBEb21LZXkgZ3Vp
ZGVsaW5lcy4KKyAgICAgICAgLy8gSWYgdGhlIGNvbWJpbmF0aW9uIGRvZXNuJ3QgcHJvZHVjZSBh
IHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBrZXkgdmFsdWUKKyAgICAgICAgLy8gc2hvdWxkIGJl
IHRoZSBrZXkgd2l0aCBubyBtb2RpZmllcnMgZXhjZXB0IGZvciBTaGlmdCBhbmQgQWx0R3IuCisg
ICAgICAgIC8vIFNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2tleXMtZ3VpZGVs
aW5lcworICAgICAgICBtb2RpZmllcnMsCisgICAgICAgIEtleU1vZGlmaWVyU2V0KHtLZXlNb2Rp
Zmllcjo6U2hpZnQsIEtleU1vZGlmaWVyOjpDYXBzTG9ja30pICYgbW9kaWZpZXJzLAorICAgIH07
CisKKyAgICBmb3IgKGF1dG8gdHJ5TW9kaWZpZXJzIDogbW9kaWZpZXJzVG9UcnkpIHsKKyAgICAg
ICAgY29uc3QgYXV0byYgaXQgPSBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5maW5kKHN0ZDo6bWFr
ZV9wYWlyKHZpcnR1YWxLZXksIHRyeU1vZGlmaWVycykpOworICAgICAgICBpZiAoaXQgIT0gbV9w
cmludGFibGVLZXlDb2RlVG9LZXkuZW5kKCkpIHsKKyAgICAgICAgICAgIGtleSA9IGl0LT52YWx1
ZTsKKyAgICAgICAgICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBrZXk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsK
K30KKworU3RyaW5nIFdpbmRvd3NLZXlOYW1lczo6ZG9tS2V5RnJvbUNoYXIoVUNoYXIgYykKK3sK
KyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICdceDFiJzoKKyAgICAgICAgcmV0dXJuICJFc2Nh
cGUiX3M7CisgICAgY2FzZSAnXHQnOgorICAgICAgICByZXR1cm4gIlRhYiJfczsKKyAgICBjYXNl
ICdccic6CisgICAgICAgIHJldHVybiAiRW50ZXIiX3M7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybiBtYWtlU3RyaW5nKGMpOworfQorCisvLyBUaGlzIHRh
YmxlIG11c3QgYmUgc29ydGVkIGJ5ICdzY2FuQ29kZScgZm9yIGJpbmFyeSBzZWFyY2guCitjb25z
dGV4cHIgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBzY2FuQ29kZTsKKyAgICBBU0NJSUxpdGVyYWwg
ZG9tQ29kZTsKK30gY0RvbUNvZGVNYXBbXSA9IHsKKyAgICB7IDB4MDAwMSwgIkVzY2FwZSJfcyB9
LAorICAgIHsgMHgwMDAyLCAiRGlnaXQxIl9zIH0sCisgICAgeyAweDAwMDMsICJEaWdpdDIiX3Mg
fSwKKyAgICB7IDB4MDAwNCwgIkRpZ2l0MyJfcyB9LAorICAgIHsgMHgwMDA1LCAiRGlnaXQ0Il9z
IH0sCisgICAgeyAweDAwMDYsICJEaWdpdDUiX3MgfSwKKyAgICB7IDB4MDAwNywgIkRpZ2l0NiJf
cyB9LAorICAgIHsgMHgwMDA4LCAiRGlnaXQ3Il9zIH0sCisgICAgeyAweDAwMDksICJEaWdpdDgi
X3MgfSwKKyAgICB7IDB4MDAwYSwgIkRpZ2l0OSJfcyB9LAorICAgIHsgMHgwMDBiLCAiRGlnaXQw
Il9zIH0sCisgICAgeyAweDAwMGMsICJNaW51cyJfcyB9LAorICAgIHsgMHgwMDBkLCAiRXF1YWwi
X3MgfSwKKyAgICB7IDB4MDAwZSwgIkJhY2tzcGFjZSJfcyB9LAorICAgIHsgMHgwMDBmLCAiVGFi
Il9zIH0sCisgICAgeyAweDAwMTAsICJLZXlRIl9zIH0sCisgICAgeyAweDAwMTEsICJLZXlXIl9z
IH0sCisgICAgeyAweDAwMTIsICJLZXlFIl9zIH0sCisgICAgeyAweDAwMTMsICJLZXlSIl9zIH0s
CisgICAgeyAweDAwMTQsICJLZXlUIl9zIH0sCisgICAgeyAweDAwMTUsICJLZXlZIl9zIH0sCisg
ICAgeyAweDAwMTYsICJLZXlVIl9zIH0sCisgICAgeyAweDAwMTcsICJLZXlJIl9zIH0sCisgICAg
eyAweDAwMTgsICJLZXlPIl9zIH0sCisgICAgeyAweDAwMTksICJLZXlQIl9zIH0sCisgICAgeyAw
eDAwMWEsICJCcmFja2V0TGVmdCJfcyB9LAorICAgIHsgMHgwMDFiLCAiQnJhY2tldFJpZ2h0Il9z
IH0sCisgICAgeyAweDAwMWMsICJFbnRlciJfcyB9LAorICAgIHsgMHgwMDFkLCAiQ29udHJvbExl
ZnQiX3MgfSwKKyAgICB7IDB4MDAxZSwgIktleUEiX3MgfSwKKyAgICB7IDB4MDAxZiwgIktleVMi
X3MgfSwKKyAgICB7IDB4MDAyMCwgIktleUQiX3MgfSwKKyAgICB7IDB4MDAyMSwgIktleUYiX3Mg
fSwKKyAgICB7IDB4MDAyMiwgIktleUciX3MgfSwKKyAgICB7IDB4MDAyMywgIktleUgiX3MgfSwK
KyAgICB7IDB4MDAyNCwgIktleUoiX3MgfSwKKyAgICB7IDB4MDAyNSwgIktleUsiX3MgfSwKKyAg
ICB7IDB4MDAyNiwgIktleUwiX3MgfSwKKyAgICB7IDB4MDAyNywgIlNlbWljb2xvbiJfcyB9LAor
ICAgIHsgMHgwMDI4LCAiUXVvdGUiX3MgfSwKKyAgICB7IDB4MDAyOSwgIkJhY2txdW90ZSJfcyB9
LAorICAgIHsgMHgwMDJhLCAiU2hpZnRMZWZ0Il9zIH0sCisgICAgeyAweDAwMmIsICJCYWNrc2xh
c2giX3MgfSwKKyAgICB7IDB4MDAyYywgIktleVoiX3MgfSwKKyAgICB7IDB4MDAyZCwgIktleVgi
X3MgfSwKKyAgICB7IDB4MDAyZSwgIktleUMiX3MgfSwKKyAgICB7IDB4MDAyZiwgIktleVYiX3Mg
fSwKKyAgICB7IDB4MDAzMCwgIktleUIiX3MgfSwKKyAgICB7IDB4MDAzMSwgIktleU4iX3MgfSwK
KyAgICB7IDB4MDAzMiwgIktleU0iX3MgfSwKKyAgICB7IDB4MDAzMywgIkNvbW1hIl9zIH0sCisg
ICAgeyAweDAwMzQsICJQZXJpb2QiX3MgfSwKKyAgICB7IDB4MDAzNSwgIlNsYXNoIl9zIH0sCisg
ICAgeyAweDAwMzYsICJTaGlmdFJpZ2h0Il9zIH0sCisgICAgeyAweDAwMzcsICJOdW1wYWRNdWx0
aXBseSJfcyB9LAorICAgIHsgMHgwMDM4LCAiQWx0TGVmdCJfcyB9LAorICAgIHsgMHgwMDM5LCAi
U3BhY2UiX3MgfSwKKyAgICB7IDB4MDAzYSwgIkNhcHNMb2NrIl9zIH0sCisgICAgeyAweDAwM2Is
ICJGMSJfcyB9LAorICAgIHsgMHgwMDNjLCAiRjIiX3MgfSwKKyAgICB7IDB4MDAzZCwgIkYzIl9z
IH0sCisgICAgeyAweDAwM2UsICJGNCJfcyB9LAorICAgIHsgMHgwMDNmLCAiRjUiX3MgfSwKKyAg
ICB7IDB4MDA0MCwgIkY2Il9zIH0sCisgICAgeyAweDAwNDEsICJGNyJfcyB9LAorICAgIHsgMHgw
MDQyLCAiRjgiX3MgfSwKKyAgICB7IDB4MDA0MywgIkY5Il9zIH0sCisgICAgeyAweDAwNDQsICJG
MTAiX3MgfSwKKyAgICB7IDB4MDA0NSwgIlBhdXNlIl9zIH0sCisgICAgeyAweDAwNDYsICJTY3Jv
bGxMb2NrIl9zIH0sCisgICAgeyAweDAwNDcsICJOdW1wYWQ3Il9zIH0sCisgICAgeyAweDAwNDgs
ICJOdW1wYWQ4Il9zIH0sCisgICAgeyAweDAwNDksICJOdW1wYWQ5Il9zIH0sCisgICAgeyAweDAw
NGEsICJOdW1wYWRTdWJ0cmFjdCJfcyB9LAorICAgIHsgMHgwMDRiLCAiTnVtcGFkNCJfcyB9LAor
ICAgIHsgMHgwMDRjLCAiTnVtcGFkNSJfcyB9LAorICAgIHsgMHgwMDRkLCAiTnVtcGFkNiJfcyB9
LAorICAgIHsgMHgwMDRlLCAiTnVtcGFkQWRkIl9zIH0sCisgICAgeyAweDAwNGYsICJOdW1wYWQx
Il9zIH0sCisgICAgeyAweDAwNTAsICJOdW1wYWQyIl9zIH0sCisgICAgeyAweDAwNTEsICJOdW1w
YWQzIl9zIH0sCisgICAgeyAweDAwNTIsICJOdW1wYWQwIl9zIH0sCisgICAgeyAweDAwNTMsICJO
dW1wYWREZWNpbWFsIl9zIH0sCisgICAgeyAweDAwNTYsICJJbnRsQmFja3NsYXNoIl9zIH0sCisg
ICAgeyAweDAwNTcsICJGMTEiX3MgfSwKKyAgICB7IDB4MDA1OCwgIkYxMiJfcyB9LAorICAgIHsg
MHgwMDU5LCAiTnVtcGFkRXF1YWwiX3MgfSwKKyAgICB7IDB4MDA2NCwgIkYxMyJfcyB9LAorICAg
IHsgMHgwMDY1LCAiRjE0Il9zIH0sCisgICAgeyAweDAwNjYsICJGMTUiX3MgfSwKKyAgICB7IDB4
MDA2NywgIkYxNiJfcyB9LAorICAgIHsgMHgwMDY4LCAiRjE3Il9zIH0sCisgICAgeyAweDAwNjks
ICJGMTgiX3MgfSwKKyAgICB7IDB4MDA2YSwgIkYxOSJfcyB9LAorICAgIHsgMHgwMDZiLCAiRjIw
Il9zIH0sCisgICAgeyAweDAwNmMsICJGMjEiX3MgfSwKKyAgICB7IDB4MDA2ZCwgIkYyMiJfcyB9
LAorICAgIHsgMHgwMDZlLCAiRjIzIl9zIH0sCisgICAgeyAweDAwNzAsICJLYW5hTW9kZSJfcyB9
LAorICAgIHsgMHgwMDcxLCAiTGFuZzIiX3MgfSwKKyAgICB7IDB4MDA3MiwgIkxhbmcxIl9zIH0s
CisgICAgeyAweDAwNzMsICJJbnRsUm8iX3MgfSwKKyAgICB7IDB4MDA3NiwgIkYyNCJfcyB9LAor
ICAgIHsgMHgwMDc3LCAiTGFuZzQiX3MgfSwKKyAgICB7IDB4MDA3OCwgIkxhbmczIl9zIH0sCisg
ICAgeyAweDAwNzksICJDb252ZXJ0Il9zIH0sCisgICAgeyAweDAwN2IsICJOb25Db252ZXJ0Il9z
IH0sCisgICAgeyAweDAwN2QsICJJbnRsWWVuIl9zIH0sCisgICAgeyAweDAwN2UsICJOdW1wYWRD
b21tYSJfcyB9LAorICAgIHsgMHgwMTA4LCAiVW5kbyJfcyB9LAorICAgIHsgMHgwMTBhLCAiUGFz
dGUiX3MgfSwKKyAgICB7IDB4MDExMCwgIk1lZGlhVHJhY2tQcmV2aW91cyJfcyB9LAorICAgIHsg
MHgwMTE3LCAiQ3V0Il9zIH0sCisgICAgeyAweDAxMTgsICJDb3B5Il9zIH0sCisgICAgeyAweDAx
MTksICJNZWRpYVRyYWNrTmV4dCJfcyB9LAorICAgIHsgMHgwMTFjLCAiTnVtcGFkRW50ZXIiX3Mg
fSwKKyAgICB7IDB4MDExZCwgIkNvbnRyb2xSaWdodCJfcyB9LAorICAgIHsgMHgwMTIwLCAiQXVk
aW9Wb2x1bWVNdXRlIl9zIH0sCisgICAgeyAweDAxMjEsICJMYXVuY2hBcHAyIl9zIH0sCisgICAg
eyAweDAxMjIsICJNZWRpYVBsYXlQYXVzZSJfcyB9LAorICAgIHsgMHgwMTI0LCAiTWVkaWFTdG9w
Il9zIH0sCisgICAgeyAweDAxMmMsICJFamVjdCJfcyB9LAorICAgIHsgMHgwMTJlLCAiQXVkaW9W
b2x1bWVEb3duIl9zIH0sCisgICAgeyAweDAxMzAsICJBdWRpb1ZvbHVtZVVwIl9zIH0sCisgICAg
eyAweDAxMzIsICJCcm93c2VySG9tZSJfcyB9LAorICAgIHsgMHgwMTM1LCAiTnVtcGFkRGl2aWRl
Il9zIH0sCisgICAgeyAweDAxMzcsICJQcmludFNjcmVlbiJfcyB9LAorICAgIHsgMHgwMTM4LCAi
QWx0UmlnaHQiX3MgfSwKKyAgICB7IDB4MDEzYiwgIkhlbHAiX3MgfSwKKyAgICB7IDB4MDE0NSwg
Ik51bUxvY2siX3MgfSwKKyAgICB7IDB4MDE0NywgIkhvbWUiX3MgfSwKKyAgICB7IDB4MDE0OCwg
IkFycm93VXAiX3MgfSwKKyAgICB7IDB4MDE0OSwgIlBhZ2VVcCJfcyB9LAorICAgIHsgMHgwMTRi
LCAiQXJyb3dMZWZ0Il9zIH0sCisgICAgeyAweDAxNGQsICJBcnJvd1JpZ2h0Il9zIH0sCisgICAg
eyAweDAxNGYsICJFbmQiX3MgfSwKKyAgICB7IDB4MDE1MCwgIkFycm93RG93biJfcyB9LAorICAg
IHsgMHgwMTUxLCAiUGFnZURvd24iX3MgfSwKKyAgICB7IDB4MDE1MiwgIkluc2VydCJfcyB9LAor
ICAgIHsgMHgwMTUzLCAiRGVsZXRlIl9zIH0sCisgICAgeyAweDAxNWIsICJNZXRhTGVmdCJfcyB9
LAorICAgIHsgMHgwMTVjLCAiTWV0YVJpZ2h0Il9zIH0sCisgICAgeyAweDAxNWQsICJDb250ZXh0
TWVudSJfcyB9LAorICAgIHsgMHgwMTVlLCAiUG93ZXIiX3MgfSwKKyAgICB7IDB4MDE1ZiwgIlNs
ZWVwIl9zIH0sCisgICAgeyAweDAxNjMsICJXYWtlVXAiX3MgfSwKKyAgICB7IDB4MDE2NSwgIkJy
b3dzZXJTZWFyY2giX3MgfSwKKyAgICB7IDB4MDE2NiwgIkJyb3dzZXJGYXZvcml0ZXMiX3MgfSwK
KyAgICB7IDB4MDE2NywgIkJyb3dzZXJSZWZyZXNoIl9zIH0sCisgICAgeyAweDAxNjgsICJCcm93
c2VyU3RvcCJfcyB9LAorICAgIHsgMHgwMTY5LCAiQnJvd3NlckZvcndhcmQiX3MgfSwKKyAgICB7
IDB4MDE2YSwgIkJyb3dzZXJCYWNrIl9zIH0sCisgICAgeyAweDAxNmIsICJMYXVuY2hBcHAxIl9z
IH0sCisgICAgeyAweDAxNmMsICJMYXVuY2hNYWlsIl9zIH0sCisgICAgeyAweDAxNmQsICJNZWRp
YVNlbGVjdCJfcyB9LAorfTsKKworU3RyaW5nIFdpbmRvd3NLZXlOYW1lczo6ZG9tQ29kZUZyb21M
UGFyYW0oTFBBUkFNIGxQYXJhbSkKK3sKKyAgICB1bnNpZ25lZCBleHRlbmRlZFNjYW5Db2RlID0g
KGxQYXJhbSA+PiAxNikgJiAweDFmZjsKKyAgICBjb25zdCBhdXRvKiByZXN1bHQgPSBzdGQ6Omxv
d2VyX2JvdW5kKAorICAgICAgICBzdGQ6OmJlZ2luKGNEb21Db2RlTWFwKSwgc3RkOjplbmQoY0Rv
bUNvZGVNYXApLCBleHRlbmRlZFNjYW5Db2RlLAorICAgICAgICBbXShjb25zdCBhdXRvJiBlbnRy
eSwgaW50IG5lZWRsZSkgeworICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnNjYW5Db2RlIDwgbmVl
ZGxlOworICAgICAgICB9KTsKKyAgICBpZiAocmVzdWx0ICE9IHN0ZDo6ZW5kKGNEb21Db2RlTWFw
KSAmJiByZXN1bHQtPnNjYW5Db2RlID09IGV4dGVuZGVkU2NhbkNvZGUpCisgICAgICAgIHJldHVy
biByZXN1bHQtPmRvbUNvZGU7CisKKyAgICByZXR1cm4gIlVuaWRlbnRpZmllZCJfczsKK30KKwor
dm9pZCBXaW5kb3dzS2V5TmFtZXM6OnVwZGF0ZUxheW91dCgpCit7CisgICAgSEtMIGN1cnJlbnRM
YXlvdXQgPSBHZXRLZXlib2FyZExheW91dCgwKTsKKyAgICBpZiAoY3VycmVudExheW91dCA9PSBt
X2tleWJvYXJkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKKyAgICBCWVRFIGtleWJvYXJkU3Rh
dGVUb1Jlc3RvcmVbMjU2XTsKKyAgICBpZiAoIUdldEtleWJvYXJkU3RhdGUoa2V5Ym9hcmRTdGF0
ZVRvUmVzdG9yZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fa2V5Ym9hcmRMYXlvdXQgPSBj
dXJyZW50TGF5b3V0OworICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LmNsZWFyKCk7CisgICAg
bV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAgLy8gTWFwIHNpemUgZm9yIHNvbWUgc2FtcGxl
IGtleWJvYXJkIGxheW91dHM6CisgICAgLy8gVVM6IDQ3NiwgRnJlbmNoOiA2MDIsIFBlcnNpYW46
IDQ4MiwgVmlldG5hbWVzZTogMTQzNgorICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoMTUwMCk7CisKKyAgICBLZXlNb2RpZmllclNldCBhbGxDb21iaW5h
dGlvbiB7IEtleU1vZGlmaWVyOjpTaGlmdCwgS2V5TW9kaWZpZXI6OkNvbnRyb2wsIEtleU1vZGlm
aWVyOjpBbHQsIEtleU1vZGlmaWVyOjpDYXBzTG9jayB9OworCisgICAgZm9yIChpbnQgY29tYmlu
YXRpb24gPSAwOyBjb21iaW5hdGlvbiA8PSBhbGxDb21iaW5hdGlvbi50b1JhdygpOyArK2NvbWJp
bmF0aW9uKSB7CisgICAgICAgIEJZVEUga2V5Ym9hcmRTdGF0ZVsyNTZdID0geyB9OworCisgICAg
ICAgIC8vIFNldHRpbmcgdXAga2V5Ym9hcmQgc3RhdGUgZm9yIG1vZGlmaWVycy4KKyAgICAgICAg
YXV0byBtb2RpZmllcnMgPSBLZXlNb2RpZmllclNldDo6ZnJvbVJhdyhjb21iaW5hdGlvbik7Cisg
ICAgICAgIHNldE1vZGlmaWVyU3RhdGUoa2V5Ym9hcmRTdGF0ZSwgbW9kaWZpZXJzKTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxLZXkgPSAwOyB2aXJ0dWFsS2V5IDw9IDB4RkY7ICsr
dmlydHVhbEtleSkgeworICAgICAgICAgICAgd2NoYXJfdCB0cmFuc2xhdGVkQ2hhcnNbNV07Cisg
ICAgICAgICAgICBpbnQgcnYgPSBUb1VuaWNvZGVFeCh2aXJ0dWFsS2V5LCAwLCBrZXlib2FyZFN0
YXRlLCB0cmFuc2xhdGVkQ2hhcnMsCisgICAgICAgICAgICAgICAgV1RGX0FSUkFZX0xFTkdUSCh0
cmFuc2xhdGVkQ2hhcnMpLCAwLCBtX2tleWJvYXJkTGF5b3V0KTsKKworICAgICAgICAgICAgaWYg
KHJ2ID09IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gRGVhZCBrZXksIGluamVjdGluZyBWS19T
UEFDRSB0byBnZXQgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgICAgIEJZ
VEUgZW1wdHlTdGF0ZVsyNTZdID0geyB9OworICAgICAgICAgICAgICAgIHJ2ID0gVG9Vbmljb2Rl
RXgoVktfU1BBQ0UsIDAsIGVtcHR5U3RhdGUsIHRyYW5zbGF0ZWRDaGFycywKKyAgICAgICAgICAg
ICAgICAgICAgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVkQ2hhcnMpLCAwLCBtX2tleWJvYXJk
TGF5b3V0KTsKKyAgICAgICAgICAgICAgICAvLyBFeHBlY3RpbmcgYSBkZWFkIGtleSBjaGFyYWN0
ZXIgKG5vdCBmb2xsb3dlZCBieSBhIHNwYWNlKS4KKyAgICAgICAgICAgICAgICBpZiAocnYgPT0g
MSkKKyAgICAgICAgICAgICAgICAgICAgbV9wcmludGFibGVLZXlDb2RlVG9LZXkuc2V0KHN0ZDo6
bWFrZV9wYWlyKHZpcnR1YWxLZXksIG1vZGlmaWVycyksICJEZWFkIl9zKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAocnYgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkQ2hh
cnNbMF0gPj0gMHgyMCkgeworICAgICAgICAgICAgICAgICAgICBtX3ByaW50YWJsZUtleUNvZGVU
b0tleS5zZXQoc3RkOjptYWtlX3BhaXIodmlydHVhbEtleSwgbW9kaWZpZXJzKSwgbWFrZVN0cmlu
ZyhVQ2hhcih0cmFuc2xhdGVkQ2hhcnNbMF0pKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
RGV0ZWN0IHdoZXRoZXIgdGhlIGxheW91dCBtYWtlcyB1c2Ugb2YgQWx0R3JhcGguCisgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNDb250cm9sQW5kQWx0KG1vZGlmaWVycykpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2hhc0FsdEdyYXBoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgU2V0S2V5Ym9hcmRTdGF0ZShrZXli
b2FyZFN0YXRlVG9SZXN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNk
OWY5OWExYmZiMGUxMmE0ZDJkM2Y1ODhkNmZmMjc0NDE1M2YyZDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmgKQEAgLTAsMCAr
MSw4MSBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1l
dDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
Ky8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLwor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8T3B0aW9uU2V0PFQ+PiB7CisgICAgdHlwZWRlZiBzdHJ1Y3Qgewor
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBPcHRpb25TZXQ8VD4mIGtleSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRIYXNoPHN0ZDo6dW5kZXJseWluZ190
eXBlX3Q8VD4+OjpIYXNoOjpoYXNoKGtleS50b1JhdygpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE9wdGlvblNldDxUPiYgYSwgY29uc3QgT3B0aW9uU2V0
PFQ+JiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gdHJ1ZTsKKyAgICB9IEhhc2g7Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgV2luZG93c0tleU5hbWVzIHsKK3B1YmxpYzoKKyAgICBXaW5kb3dzS2V5TmFt
ZXMoKTsKKworICAgIFN0cmluZyBkb21LZXlGcm9tTFBhcmFtKExQQVJBTSk7CisgICAgU3RyaW5n
IGRvbUtleUZyb21DaGFyKFVDaGFyKTsKKyAgICBTdHJpbmcgZG9tQ29kZUZyb21MUGFyYW0oTFBB
UkFNKTsKKworICAgIGVudW0gY2xhc3MgS2V5TW9kaWZpZXIgOiB1aW50OF90OworICAgIHVzaW5n
IEtleU1vZGlmaWVyU2V0ID0gT3B0aW9uU2V0PEtleU1vZGlmaWVyPjsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHVwZGF0ZUxheW91dCgpOworCisgICAgSEtMIG1fa2V5Ym9hcmRMYXlvdXQgPSAwOwor
ICAgIGJvb2wgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisgICAgdXNpbmcgVmlydHVhbEtleU1v
ZGlmaWVyU2V0UGFpciA9IHN0ZDo6cGFpcjx1bnNpZ25lZCwgS2V5TW9kaWZpZXJTZXQ+OworICAg
IHVzaW5nIFZpcnR1YWxLZXlUb0tleU1hcCA9IEhhc2hNYXA8VmlydHVhbEtleU1vZGlmaWVyU2V0
UGFpciwgU3RyaW5nLCBEZWZhdWx0SGFzaDxWaXJ0dWFsS2V5TW9kaWZpZXJTZXRQYWlyPjo6SGFz
aCwgUGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNp
Z25lZD4sIFdURjo6SGFzaFRyYWl0czxLZXlNb2RpZmllclNldD4+PjsKKyAgICBWaXJ0dWFsS2V5
VG9LZXlNYXAgbV9wcmludGFibGVLZXlDb2RlVG9LZXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViRXZlbnQuaAppbmRleCBjMzYxMDBjZjVjNDQ2YzVmOWFlMGYw
NmU4YmQ4YTBmNDFmNTI3ZjNjLi43ZGJhMDhmZGVlODg2OTlmYjI0NmUyNGE0N2Y3NTMxYTk1NDA4
NTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkV2ZW50LmgKQEAgLTI2Myw3ICsyNjMsNyBAQCBwdWJsaWM6
CiAjZWxpZiBVU0UoTElCV1BFKQogICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBT
dHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRp
dmVWaXJ0dWFsS2V5Q29kZSwgYm9vbCBpc0tleXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2Fs
bFRpbWUgdGltZXN0YW1wKTsKICNlbHNlCi0gICAgV2ViS2V5Ym9hcmRFdmVudChUeXBlLCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmlu
ZyYga2V5SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZp
cnR1YWxLZXlDb2RlLCBpbnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlz
S2V5cGFkLCBib29sIGlzU3lzdGVtS2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+LCBXYWxsVGltZSB0
aW1lc3RhbXApOworICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmly
dHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJDb2RlLCBi
b29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgT3B0aW9u
U2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3Qg
U3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCmluZGV4IGE1YTIzY2YxNDhlZjcyOTdmN2ZkZDFmOWZl
YzYxZmUxZmU3MzUzZTcuLjIwZDkzOGIyNjY3ZmI3YWFkMmViOGExZWUzNzJiZDVjOWQ5NmMzNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCkBAIC0xMzIsMTAg
KzEzMiwxMiBAQCBXZWJLZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmCiAKICNlbHNlCiAKLVdlYktleWJvYXJk
RXZlbnQ6OldlYktleWJvYXJkRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwg
aW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBpbnQg
bWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlzS2V5cGFkLCBib29sIGlzU3lz
dGVtS2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycywgV2FsbFRpbWUgdGltZXN0YW1w
KQorV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQg
d2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGludCBtYWND
aGFyQ29kZSwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wgaXNTeXN0ZW1L
ZXksIE9wdGlvblNldDxNb2RpZmllcj4gbW9kaWZpZXJzLCBXYWxsVGltZSB0aW1lc3RhbXApCiAg
ICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fdGV4dCh0
ZXh0KQogICAgICwgbV91bm1vZGlmaWVkVGV4dCh1bm1vZGlmaWVkVGV4dCkKKyAgICAsIG1fa2V5
KGtleSkKKyAgICAsIG1fY29kZShjb2RlKQogICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50
aWZpZXIpCiAgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzVmlydHVhbEtleUNv
ZGUpCiAgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKG5hdGl2ZVZpcnR1YWxLZXlDb2RlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAppbmRleCBiM2U2
Mjk1ZDE3ZGQwYzRlZmM3MmEzNmYwY2I3OWYzOGNmMWE4NTYxLi44OGQ1M2QyMzZjZDZkNjI3MzVm
MDM2NzhhMDRjYTljMTk4ZGRkYWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93
aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2Vi
RXZlbnRGYWN0b3J5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZl
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
V2luZG93c0tleU5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRDb2Rl
cy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4K
QEAgLTQ0NiwxMSArNDQ3LDE5IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVh
dGVXZWJXaGVlbEV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSCiAgICAgcmV0dXJu
IFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24s
IEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSksIEZsb2F0U2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxU
aWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkpOwogfQogCitz
dGF0aWMgV2luZG93c0tleU5hbWVzJiB3aW5kb3dzS2V5TmFtZXMoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxXaW5kb3dzS2V5TmFtZXM+IGtleU5hbWVzOworICAgIHJldHVybiBrZXlO
YW1lczsKK30KKwogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktl
eWJvYXJkRXZlbnQoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3cGFyYW0sIExQQVJB
TSBscGFyYW0pCiB7CiAgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IGtleWJvYXJkRXZlbnRUeXBl
Rm9yRXZlbnQobWVzc2FnZSk7CiAgICAgU3RyaW5nIHRleHQgPSB0ZXh0RnJvbUV2ZW50KHdwYXJh
bSwgdHlwZSk7CiAgICAgU3RyaW5nIHVubW9kaWZpZWRUZXh0ID0gdW5tb2RpZmllZFRleHRGcm9t
RXZlbnQod3BhcmFtLCB0eXBlKTsKKyAgICBTdHJpbmcga2V5ID0gbWVzc2FnZSA9PSBXTV9DSEFS
ID8gd2luZG93c0tleU5hbWVzKCkuZG9tS2V5RnJvbUNoYXIod3BhcmFtKSA6IHdpbmRvd3NLZXlO
YW1lcygpLmRvbUtleUZyb21MUGFyYW0obHBhcmFtKTsKKyAgICBTdHJpbmcgY29kZSA9IHdpbmRv
d3NLZXlOYW1lcygpLmRvbUNvZGVGcm9tTFBhcmFtKGxwYXJhbSk7CiAgICAgU3RyaW5nIGtleUlk
ZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CiAgICAgaW50
IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHN0YXRpY19jYXN0PGludD4od3BhcmFtKTsKICAgICBp
bnQgbmF0aXZlVmlydHVhbEtleUNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CkBAIC00
NjAsNyArNDY5LDcgQEAgV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
YktleWJvYXJkRXZlbnQoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UKICAgICBib29sIGlzU3lzdGVt
S2V5ID0gaXNTeXN0ZW1LZXlFdmVudChtZXNzYWdlKTsKICAgICBhdXRvIG1vZGlmaWVycyA9IG1v
ZGlmaWVyc0ZvckN1cnJlbnRLZXlTdGF0ZSgpOwogCi0gICAgcmV0dXJuIFdlYktleWJvYXJkRXZl
bnQodHlwZSwgdGV4dCwgdW5tb2RpZmllZFRleHQsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0
dWFsS2V5Q29kZSwgbmF0aXZlVmlydHVhbEtleUNvZGUsIG1hY0NoYXJDb2RlLCBhdXRvUmVwZWF0
LCBpc0tleXBhZCwgaXNTeXN0ZW1LZXksIG1vZGlmaWVycywgV2FsbFRpbWU6Om5vdygpKTsKKyAg
ICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4dCwga2V5
LCBjb2RlLCBrZXlJZGVudGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1
YWxLZXlDb2RlLCBtYWNDaGFyQ29kZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5
LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpub3coKSk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDdhZmMxNGU5NmIxYTRmN2M4ZjliY2UxMmU0NTYyYTIxNWJjMmQ1OTYuLjM4
MDIxMGI0ZmIyM2ZiZWI5Yzg5MzYzMDhmNGE1M2I5MjNhMzQ5N2IgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxOS0xMS0yMCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KKworICAgICAgICBbV2luXSBVcGRhdGUgS2V5Ym9hcmRFdmVudCBhcyBwZXIgdGhlIGxhdGVz
dCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDIxODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRm
b3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgIFVuc2tpcHBlZCBmYXN0L2V2
ZW50cy9hcnJvdy1rZXlzLW9uLWJvZHkuaHRtbCwgZmFzdC9ldmVudHMva2V5Ym9hcmRldmVudC1r
ZXkuaHRtbCwgYW5kIGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sLgor
CiAyMDE5LTExLTIwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyAiYXV0byIgZm9yIHpJbmRleCBwcm9wZXJ0
eSBldmVuIGFmdGVyIGl0IGhhcyBiZWVuIHNldCwgb24gbm9uLXBvc2l0aW9uZWQgZWxlbWVudHMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggY2M1ZThhOThj
MTA2MjY1MDY0YjdmMTJkZWRhNGM1YzI0ZmY0NWZkNi4uODFjYWEzNzcxYTRkY2UxNjFkMTA3YmUy
OTcxYjExYzZhYzFjZDllNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTMyMzUsNyArMzIzNSw2IEBAIGZhc3QvZG9tL0hUTUxNZXRlckVsZW1lbnQvbWV0
ZXItc3R5bGVzLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQv
cHJvZ3Jlc3MtYmFyLXZhbHVlLXBzZXVkby1lbGVtZW50Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3Qv
ZG9tL1dpbmRvdy9nZXQtc2V0LXByb3BlcnRpZXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9kb20v
V2luZG93L3dpbmRvdy1sb29rdXAtcHJlY2VkZW5jZS5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2V2
ZW50cy9hcnJvdy1rZXlzLW9uLWJvZHkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvYmVm
b3JlLWlucHV0LWV2ZW50cy1wcmV2ZW50LWRyYWctYW5kLWRyb3AuaHRtbCBbIEZhaWx1cmUgXQog
ZmFzdC9ldmVudHMvY29uc3RydWN0b3JzL2tleWJvYXJkLWV2ZW50LWNvbnN0cnVjdG9yLmh0bWwg
WyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2NvbnN0cnVjdG9ycy9vdmVyY29uc3RyYWluZWQtZXJy
b3ItZXZlbnQtY29uc3RydWN0b3IuaHRtbCBbIEZhaWx1cmUgXQpAQCAtMzI0Niw5ICszMjQ1LDcg
QEAgZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uLWV2ZW50cy0wMDEuaHRtbCBbIEZhaWx1cmUg
XQogZmFzdC9ldmVudHMvaW1lLWNvbXBvc2l0aW9uZW5kLW9uLXNlbGVjdGlvbi1jaGFuZ2UuaHRt
bCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvaW5wdXQtZXZlbnRzLXBhc3RlLXJpY2gtZGF0YXRy
YW5zZmVyLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQt
YnV0dG9uLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQt
dGV4dC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9rZXlib2FyZGV2ZW50LWNvZGUuaHRt
bCBbIEZhaWx1cmUgXQotZmFzdC9ldmVudHMva2V5Ym9hcmRldmVudC1rZXkuaHRtbCBbIEZhaWx1
cmUgXQogZmFzdC9ldmVudHMvdXBkYXRlTGF5b3V0Rm9ySGl0VGVzdC5odG1sIFsgRmFpbHVyZSBd
CiBmYXN0L2V2ZW50cy93aGVlbGV2ZW50LWJhc2ljLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZm9y
bXMvbGlzdGJveC1yZXNwZWN0cy1wYWRkaW5nLWJvdHRvbS5odG1sIFsgRmFpbHVyZSBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5OWFm
MjcwMGNjOWNkOTM5NmNhNWJjODI3MTA0OWFlOTNiMTRiMThiLi43MWU0ZmVlYzMxMTk3ZTU0ZmQy
ODVjMWI0MjQ2YWNlMzI1NTYzNjJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE2MzYsNyArMTYzNiw2IEBAIGZhc3QvY3NzL3dpbGwt
Y2hhbmdlL3dpbGwtY2hhbmdlLWNyZWF0ZXMtc3RhY2tpbmctY29udGV4dC1pbmxpbmUuaHRtbCBb
IEltYWdlT25sCiBmYXN0L2Nzcy93aWxsLWNoYW5nZS93aWxsLWNoYW5nZS1jcmVhdGVzLXN0YWNr
aW5nLWNvbnRleHQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC9kb20vYWRvcHQtYXR0
cmlidXRlLWNyYXNoLnN2ZyBbIEZhaWx1cmUgXQogZmFzdC9kb20vbmF2aWdhdG9yLXByb3BlcnR5
LWdjLWFmdGVyLWZyYW1lLWRldGFjaC5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2V2ZW50cy9hcnJv
dy1rZXlzLW9uLWJvZHkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvYXR0ZW1wdC1zY3Jv
bGwtd2l0aC1uby1zY3JvbGxiYXJzLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2F1dG9z
Y3JvbGwtd2hlbi1pbnB1dC1pcy1vZmZzY3JlZW4uaHRtbCBbIFNraXAgXSAjIFVJU2NyaXB0CiBm
YXN0L2V2ZW50cy9hdXRvc2Nyb2xsLXdpdGgtc29mdHdhcmUta2V5Ym9hcmQuaHRtbCBbIFNraXAg
XSAjIFVJU2NyaXB0CkBAIC0xNjcyLDkgKzE2NzEsNyBAQCBmYXN0L2V2ZW50cy9pbnB1dC1ldmVu
dC1pbnNlcnQtcmVwbGFjZW1lbnQuaHRtbCBbIFNraXAgXSAjIFVJU2NyaXB0CiBmYXN0L2V2ZW50
cy9pbnB1dC1ldmVudHMtcGFzdGUtZGF0YS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIGZhc3QvZXZl
bnRzL2lucHV0LWV2ZW50cy1wYXN0ZS1yaWNoLWRhdGF0cmFuc2Zlci5odG1sIFsgRmFpbHVyZSBd
CiBmYXN0L2V2ZW50cy9rZXktZXZlbnRzLWluLWlucHV0LWJ1dHRvbi5odG1sIFsgRmFpbHVyZSBd
Ci1mYXN0L2V2ZW50cy9rZXktZXZlbnRzLWluLWlucHV0LXRleHQuaHRtbCBbIEZhaWx1cmUgXQog
ZmFzdC9ldmVudHMva2V5Ym9hcmRldmVudC1jb2RlLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZl
bnRzL2tleWJvYXJkZXZlbnQta2V5Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2tleWRv
d24tbnVtcGFkLWtleXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvbW91c2UtY3Vyc29y
LWltYWdlLXNldC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9tb3VzZW92ZXItYnV0dG9u
Lmh0bWwgWyBGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384320</attachid>
            <date>2019-11-25 19:01:29 -0800</date>
            <delta_ts>2019-11-25 19:49:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202183-20191126120128.patch</filename>
            <type>text/plain</type>
            <size>36554</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDUwMzAzZjdhZTJjZGM3YmU1N2EwM2I2
YzE0YTk0OTM0NTQ2MGQ0MTYuLmM1NGI4MTU0NzZiMzBhZjhhZTFiZmQwN2ZiNjQxN2FhYzE3NDk1
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTEtMjUgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtleWJvYXJkRXZl
bnQgYXMgcGVyIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmluZXMuaDoKKwogMjAx
OS0xMS0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAg
ICAgICBBZGQgRGVmYXVsdEhhc2g8T3B0aW9uU2V0PFQ+PiBhbmQgSGFzaFRyYWl0PE9wdGlvblNl
dDxUPj4gc3BlY2lhbGl6YXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGRkNGJmMjliMGFjODYzODZiMjQx
ZDkwNzE1MzNhNzU3N2U3NGI1MS4uNTNmYjhkYTUyZDY0MjhkYTBlMzgxMjBkMmQ2M2QzMjQ1Y2Vh
ZTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTExLTI1ICBGdWppaSBIaXJv
bm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVwZGF0ZSBL
ZXlib2FyZEV2ZW50IGFzIHBlciB0aGUgbGF0ZXN0IHNwZWNpZmljYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE4MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCAna2V5JyBhbmQgJ2NvZGUn
IHByb3BlcnRpZXMgb2YgS2V5Ym9hcmRFdmVudCBmb3IgV2luZG93cy4gVGhlCisgICAgICAgIGlt
cGxlbWVudGF0aW9uIGlzIGNvcGllZCBmcm9tIENocm9taXVtIGZvciBXaW5kb3dzLgorCisgICAg
ICAgIEZvciBpbXBsZW1lbnRpbmcgJ2tleScgcHJvcGVydGllcywgVG9Vbmljb2RlRXggQVBJIGlz
IHVzZWQgdG8KKyAgICAgICAgY29udmVydCBhIHZpcnR1YWwga2V5IGNvZGUgdG8gYSBjaGFyYWN0
ZXIgaW5mb3JtYXRpb24uCisgICAgICAgIFVuZm9ydHVuYXRlbHksIFRvVW5pY29kZUV4IGFsdGVy
cyB0aGUgc3RvcmVkIHByZXZpb3VzIHR5cGVkIGRlYWQKKyAgICAgICAga2V5IGluIHRoZSBkcml2
ZXIsIGl0IGNhbid0IGJlIHVzZWQgZm9yIGVhY2gga2V5IGV2ZW50LiBTbywKKyAgICAgICAgVG9V
bmljb2RlRXggaXMgdXNlZCB0byBjb252ZXJ0IGFsbCB2aXJ0dWFsIGtleXMgd2l0aCBhbGwgbW9k
aWZpZXIKKyAgICAgICAgY29tYmluYXRpb25zIGJlZm9yZWhhbmQuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgdHVybnMgb24gRU5BQkxFX0tFWUJPQVJEX0tFWV9BVFRSSUJVVEUgYW5kCisgICAgICAg
IEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSBtYWNyb3MgZm9yIGFsbCBwb3J0cy4gQSBm
b2xsb3ctdXAKKyAgICAgICAgcGF0Y2ggd2lsbCByZW1vdmUgdGhlIG1hY3Jvcy4KKworICAgICAg
ICBFeGlzdGluZyB0ZXN0cyBjb3ZlcnMuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vS2V5RXZlbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6d2luZG93c0tleU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2lu
ZG93c0tleU5hbWVzLmNwcDogQWRkZWQuCisgICAgICAgIChoYXNDb250cm9sQW5kQWx0KToKKyAg
ICAgICAgKGdldE1vZGlmaWVyRmxhZ3MpOgorICAgICAgICAobm9uUHJpbnRhYmxlVmlydHVhbEtl
eVRvRG9tS2V5KToKKyAgICAgICAgKFdpbmRvd3NLZXlOYW1lczo6V2luZG93c0tleU5hbWVzKToK
KyAgICAgICAgKFdpbmRvd3NLZXlOYW1lczo6ZG9tS2V5RnJvbUxQYXJhbSk6CisgICAgICAgIChz
aW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoV2luZG93c0tleU5hbWVzOjpkb21LZXlG
cm9tQ2hhcik6CisgICAgICAgIChXaW5kb3dzS2V5TmFtZXM6OmRvbUNvZGVGcm9tTFBhcmFtKToK
KyAgICAgICAgKFdpbmRvd3NLZXlOYW1lczo6dXBkYXRlTGF5b3V0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmg6IEFkZGVkLgorCiAyMDE5LTExLTI1ICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBVc2UgRm9udENh
c2NhZGU6OnNwYWNlV2lkdGggdG8gbWVhc3VyZSBzaW5nbGUgb3IgY29sbGFwc2VkIHdoaXRlc3Bh
Y2UgY29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA5ZDMzYTgyOGNkZDM2MTc4MjhjYzE0M2E3YjI3NzhiZTA1
MjA4NWE1Li43Y2EyMmMxMWZjYjJkMjI3NjNmZTFkMzIzMjBjYzI1NTZjMjU4NDVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTExLTI1ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVwZGF0ZSBLZXlib2FyZEV2ZW50IGFz
IHBlciB0aGUgbGF0ZXN0IHNwZWNpZmljYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Lmg6CisgICAgICAgICogU2hh
cmVkL1dlYktleWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJLZXlib2FyZEV2
ZW50OjpXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1dlYkV2ZW50RmFj
dG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OndpbmRvd3NLZXlOYW1lcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudCk6CisKIDIwMTkt
MTEtMjUgIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vva0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtH
VEtdIENoZWNrIEVHTCBpbWFnZSBleHRlbnNpb24gYnkgdXNpbmcgbmF0aXZlIGdsIEFQSSBpbiBB
Y2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4
IDUyMzhlNzkxYzIyODliMTA0OGMyZjkwN2FhNjU1ZGRjZjVkM2YwMjIuLjg2NGRmNDY5ZGMyYmMz
N2MzMGI3NDM0N2JmZDQwNGU4YzExNzlmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zl
YXR1cmVEZWZpbmVzLmgKKysrIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaApAQCAt
NzUxLDExICs3NTEsMTEgQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBTZWUgPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE3OTE2Nz4uICovCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9LRVlCT0FS
RF9LRVlfQVRUUklCVVRFKQotI2RlZmluZSBFTkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSAw
CisjZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDEKICNlbmRpZgogCiAjaWYg
IWRlZmluZWQoRU5BQkxFX0tFWUJPQVJEX0NPREVfQVRUUklCVVRFKQotI2RlZmluZSBFTkFCTEVf
S0VZQk9BUkRfQ09ERV9BVFRSSUJVVEUgMAorI2RlZmluZSBFTkFCTEVfS0VZQk9BUkRfQ09ERV9B
VFRSSUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfREFUQV9JTlRFUkFDVElP
TikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMTAyMDZmZTQ3YzY4OGFiZTRkNGQwNGY3
Nzk3Mzc5MTZjZGI4MGFlYS4uZDFmZDRlYjEyZGQ5NzExMDAxODBlYTgwNTZlZDQ4NjU2OWZjOTA2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEwNyw2ICsxMDcsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAK
ICAgICBwbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAogICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dN
ZXNzYWdlQnJvYWRjYXN0ZXIuY3BwCisgICAgcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5j
cHAKIAogICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKICkKQEAgLTE0Miw2ICsxNDMs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRv
d01lc3NhZ2VCcm9hZGNhc3Rlci5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VMaXN0
ZW5lci5oCisgICAgcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCiAgICAgcGxhdGZvcm0v
d2luL1dpbmRvd3NUb3VjaC5oCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9LZXlFdmVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5
RXZlbnRXaW4uY3BwCmluZGV4IGIyMzU2YzVmNGZjNGQ0NjdkOGNjNDc1ZjdiY2JmNTc0NzJjZWMx
NzkuLjQ0NzM3Njg2MTg3YTA2YTkyYzQwOGVhNjBiNjNhNDhhYzg0ODEzMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNwcApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgog
CisjaW5jbHVkZSAiV2luZG93c0tleU5hbWVzLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgpAQCAt
MjE4LDEwICsyMTksMTggQEAgc3RhdGljIGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKFVDaGFyIGMpCiAgICAgcmV0dXJuIFN0cmluZygmYywgMSk7CiB9CiAKK3N0YXRpYyBXaW5k
b3dzS2V5TmFtZXMmIHdpbmRvd3NLZXlOYW1lcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdpbmRvd3NLZXlOYW1lcz4ga2V5TmFtZXM7CisgICAgcmV0dXJuIGtleU5hbWVzOworfQor
CiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChIV05ELCBXUEFS
QU0gY29kZSwgTFBBUkFNIGtleURhdGEsIFR5cGUgdHlwZSwgYm9vbCBzeXN0ZW1LZXkpCiAgICAg
OiBQbGF0Zm9ybUV2ZW50KHR5cGUsIEdldEtleVN0YXRlKFZLX1NISUZUKSAmIEhJR0hfQklUX01B
U0tfU0hPUlQsIEdldEtleVN0YXRlKFZLX0NPTlRST0wpICYgSElHSF9CSVRfTUFTS19TSE9SVCwg
R2V0S2V5U3RhdGUoVktfTUVOVSkgJiBISUdIX0JJVF9NQVNLX1NIT1JULCBmYWxzZSwgV2FsbFRp
bWU6OmZyb21SYXdTZWNvbmRzKDo6R2V0VGlja0NvdW50KCkgKiAwLjAwMSkpCiAgICAgLCBtX3Rl
eHQoKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhcikgPyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
Y29kZSkgOiBTdHJpbmcoKSkKICAgICAsIG1fdW5tb2RpZmllZFRleHQoKHR5cGUgPT0gUGxhdGZv
cm1FdmVudDo6Q2hhcikgPyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoY29kZSkgOiBTdHJpbmcoKSkK
KyAgICAsIG1fa2V5KHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciA/IHdpbmRvd3NLZXlOYW1l
cygpLmRvbUtleUZyb21DaGFyKGNvZGUpIDogd2luZG93c0tleU5hbWVzKCkuZG9tS2V5RnJvbUxQ
YXJhbShrZXlEYXRhKSkKKyAgICAsIG1fY29kZSh3aW5kb3dzS2V5TmFtZXMoKS5kb21Db2RlRnJv
bUxQYXJhbShrZXlEYXRhKSkKICAgICAsIG1fa2V5SWRlbnRpZmllcigodHlwZSA9PSBQbGF0Zm9y
bUV2ZW50OjpDaGFyKSA/IFN0cmluZygpIDoga2V5SWRlbnRpZmllckZvcldpbmRvd3NLZXlDb2Rl
KGNvZGUpKQogICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUoKHR5cGUgPT0gUmF3S2V5RG93
biB8fCB0eXBlID09IEtleVVwKSA/IHdpbmRvd3NLZXljb2RlV2l0aExvY2F0aW9uKGNvZGUsIGtl
eURhdGEpIDogMCkKICAgICAsIG1fYXV0b1JlcGVhdChISVdPUkQoa2V5RGF0YSkgJiBLRl9SRVBF
QVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5h
bWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY2ZGE2YzUxYmI2NTc5MzY5ZDM2MTIwYmU5MDNmN2I2YzY2MWI4YzMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5h
bWVzLmNwcApAQCAtMCwwICsxLDUzNCBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTkgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpbmRv
d3NLZXlOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgV2luZG93
c0tleU5hbWVzOjpLZXlNb2RpZmllciA6IHVpbnQ4X3QgeworICAgIFNoaWZ0ID0gMSA8PCAwLAor
ICAgIENvbnRyb2wgPSAxIDw8IDEsCisgICAgQWx0ID0gMSA8PCAyLAorICAgIENhcHNMb2NrID0g
MSA8PCAzLAorfTsKKworc3RhdGljIHZvaWQgc2V0TW9kaWZpZXJTdGF0ZShCWVRFKiBrZXlib2Fy
ZFN0YXRlLCBXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyU2V0IG1vZGlmaWVycykKK3sKKyAg
ICAvLyBBY2NvcmRpbmcgdG8gTVNETiBHZXRLZXlTdGF0ZSgpOgorICAgIC8vIDEuIElmIHRoZSBo
aWdoLW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIGRvd247IG90aGVyd2lzZSwgaXQgaXMgdXAu
CisgICAgLy8gMi4gSWYgdGhlIGxvdy1vcmRlciBiaXQgaXMgMSwgdGhlIGtleSBpcyB0b2dnbGVk
LiBBIGtleSwgc3VjaCBhcyB0aGUKKyAgICAvLyAgICBDQVBTIExPQ0sga2V5LCBpcyB0b2dnbGVk
IGlmIGl0IGlzIHR1cm5lZCBvbi4gVGhlIGtleSBpcyBvZmYgYW5kCisgICAgLy8gICAgdW50b2dn
bGVkIGlmIHRoZSBsb3ctb3JkZXIgYml0IGlzIDAuCisgICAgLy8gU2VlIGh0dHBzOi8vbXNkbi5t
aWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjQ2MzAxLmFzcHgK
KyAgICBpZiAobW9kaWZpZXJzLmNvbnRhaW5zKFdpbmRvd3NLZXlOYW1lczo6S2V5TW9kaWZpZXI6
OlNoaWZ0KSkKKyAgICAgICAga2V5Ym9hcmRTdGF0ZVtWS19TSElGVF0gfD0gMHg4MDsKKworICAg
IGlmIChtb2RpZmllcnMuY29udGFpbnMoV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmllcjo6Q29u
dHJvbCkpCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfQ09OVFJPTF0gfD0gMHg4MDsKKworICAg
IGlmIChtb2RpZmllcnMuY29udGFpbnMoV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmllcjo6QWx0
KSkKKyAgICAgICAga2V5Ym9hcmRTdGF0ZVtWS19NRU5VXSB8PSAweDgwOworCisgICAgaWYgKG1v
ZGlmaWVycy5jb250YWlucyhXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyOjpDYXBzTG9jaykp
CisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfQ0FQSVRBTF0gfD0gMHgwMTsKK30KKworc3RhdGlj
IGJvb2wgaGFzQ29udHJvbEFuZEFsdChXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyU2V0IG1v
ZGlmaWVycykKK3sKKyAgICByZXR1cm4gbW9kaWZpZXJzLmNvbnRhaW5zQWxsKHsgV2luZG93c0tl
eU5hbWVzOjpLZXlNb2RpZmllcjo6Q29udHJvbCwgV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmll
cjo6QWx0IH0pOworfQorCisvLyBUaGlzIHRhYmxlIG11c3QgYmUgc29ydGVkIGJ5ICd2aXJ0dWFs
S2V5JyBmb3IgYmluYXJ5IHNlYXJjaC4KK2NvbnN0ZXhwciBzdHJ1Y3QgTm9uUHJpbnRhYmxlS2V5
RW50cnkgeworICAgIGludCB2aXJ0dWFsS2V5OworICAgIEFTQ0lJTGl0ZXJhbCBkb21LZXk7Cit9
IGNOb25QcmludGFibGVLZXlNYXBbXSA9IHsKKyAgICB7IFZLX0NBTkNFTCwgIkNhbmNlbCJfcyB9
LAorICAgIHsgVktfQkFDSywgIkJhY2tzcGFjZSJfcyB9LAorICAgIHsgVktfVEFCLCAiVGFiIl9z
IH0sCisgICAgeyBWS19DTEVBUiwgIkNsZWFyIl9zIH0sCisgICAgeyBWS19SRVRVUk4sICJFbnRl
ciJfcyB9LAorICAgIHsgVktfU0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfQ09OVFJPTCwg
IkNvbnRyb2wiX3MgfSwKKyAgICB7IFZLX01FTlUsICJBbHQiX3MgfSwKKyAgICB7IFZLX1BBVVNF
LCAiUGF1c2UiX3MgfSwKKyAgICB7IFZLX0NBUElUQUwsICJDYXBzTG9jayJfcyB9LAorICAgIC8v
IFZLX0tBTkEgPT0gVktfSEFOR1VMCisgICAgeyBWS19KVU5KQSwgIkp1bmphTW9kZSJfcyB9LAor
ICAgIHsgVktfRklOQUwsICJGSU5BTF9NT0RFIl9zIH0sCisgICAgLy8gVktfSEFOSkEgPT0gVktf
S0FOSkkKKyAgICB7IFZLX0VTQ0FQRSwgIkVzY2FwZSJfcyB9LAorICAgIHsgVktfQ09OVkVSVCwg
IkNvbnZlcnQiX3MgfSwKKyAgICB7IFZLX05PTkNPTlZFUlQsICJOb25Db252ZXJ0Il9zIH0sCisg
ICAgeyBWS19BQ0NFUFQsICJBY2NlcHQiX3MgfSwKKyAgICB7IFZLX01PREVDSEFOR0UsICJNb2Rl
Q2hhbmdlIl9zIH0sCisgICAgLy8gVktfU1BBQ0UKKyAgICB7IFZLX1BSSU9SLCAiUGFnZVVwIl9z
IH0sCisgICAgeyBWS19ORVhULCAiUGFnZURvd24iX3MgfSwKKyAgICB7IFZLX0VORCwgIkVuZCJf
cyB9LAorICAgIHsgVktfSE9NRSwgIkhvbWUiX3MgfSwKKyAgICB7IFZLX0xFRlQsICJBcnJvd0xl
ZnQiX3MgfSwKKyAgICB7IFZLX1VQLCAiQXJyb3dVcCJfcyB9LAorICAgIHsgVktfUklHSFQsICJB
cnJvd1JpZ2h0Il9zIH0sCisgICAgeyBWS19ET1dOLCAiQXJyb3dEb3duIl9zIH0sCisgICAgeyBW
S19TRUxFQ1QsICJTZWxlY3QiX3MgfSwKKyAgICB7IFZLX1BSSU5ULCAiUHJpbnQiX3MgfSwKKyAg
ICB7IFZLX0VYRUNVVEUsICJFeGVjdXRlIl9zIH0sCisgICAgeyBWS19TTkFQU0hPVCwgIlByaW50
U2NyZWVuIl9zIH0sCisgICAgeyBWS19JTlNFUlQsICJJbnNlcnQiX3MgfSwKKyAgICB7IFZLX0RF
TEVURSwgIkRlbGV0ZSJfcyB9LAorICAgIHsgVktfSEVMUCwgIkhlbHAiX3MgfSwKKyAgICAvLyBW
S18wLi45CisgICAgLy8gVktfQS4uWgorICAgIHsgVktfTFdJTiwgIk1ldGEiX3MgfSwKKyAgICAv
LyBWS19DT01NQU5EID09IFZLX0xXSU4KKyAgICB7IFZLX1JXSU4sICJNZXRhIl9zIH0sCisgICAg
eyBWS19BUFBTLCAiQ29udGV4dE1lbnUiX3MgfSwKKyAgICB7IFZLX1NMRUVQLCAiU3RhbmRieSJf
cyB9LAorICAgIC8vIFZLX05VTVBBRDAuLjkKKyAgICAvLyBWS19NVUxUSVBMWSwgVktfQURELCBW
S19TRVBBUkFUT1IsIFZLX1NVQlRSQUNULCBWS19ERUNJTUFMLAorICAgIC8vIFZLX0RJVklERQor
ICAgIHsgVktfRjEsICJGMSJfcyB9LAorICAgIHsgVktfRjIsICJGMiJfcyB9LAorICAgIHsgVktf
RjMsICJGMyJfcyB9LAorICAgIHsgVktfRjQsICJGNCJfcyB9LAorICAgIHsgVktfRjUsICJGNSJf
cyB9LAorICAgIHsgVktfRjYsICJGNiJfcyB9LAorICAgIHsgVktfRjcsICJGNyJfcyB9LAorICAg
IHsgVktfRjgsICJGOCJfcyB9LAorICAgIHsgVktfRjksICJGOSJfcyB9LAorICAgIHsgVktfRjEw
LCAiRjEwIl9zIH0sCisgICAgeyBWS19GMTEsICJGMTEiX3MgfSwKKyAgICB7IFZLX0YxMiwgIkYx
MiJfcyB9LAorICAgIHsgVktfRjEzLCAiRjEzIl9zIH0sCisgICAgeyBWS19GMTQsICJGMTQiX3Mg
fSwKKyAgICB7IFZLX0YxNSwgIkYxNSJfcyB9LAorICAgIHsgVktfRjE2LCAiRjE2Il9zIH0sCisg
ICAgeyBWS19GMTcsICJGMTciX3MgfSwKKyAgICB7IFZLX0YxOCwgIkYxOCJfcyB9LAorICAgIHsg
VktfRjE5LCAiRjE5Il9zIH0sCisgICAgeyBWS19GMjAsICJGMjAiX3MgfSwKKyAgICB7IFZLX0Yy
MSwgIkYyMSJfcyB9LAorICAgIHsgVktfRjIyLCAiRjIyIl9zIH0sCisgICAgeyBWS19GMjMsICJG
MjMiX3MgfSwKKyAgICB7IFZLX0YyNCwgIkYyNCJfcyB9LAorICAgIHsgVktfTlVNTE9DSywgIk51
bUxvY2siX3MgfSwKKyAgICB7IFZLX1NDUk9MTCwgIlNjcm9sbExvY2siX3MgfSwKKyAgICB7IFZL
X0xTSElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBWS19SU0hJRlQsICJTaGlmdCJfcyB9LAorICAg
IHsgVktfTENPTlRST0wsICJDb250cm9sIl9zIH0sCisgICAgeyBWS19SQ09OVFJPTCwgIkNvbnRy
b2wiX3MgfSwKKyAgICB7IFZLX0xNRU5VLCAiQWx0Il9zIH0sCisgICAgeyBWS19STUVOVSwgIkFs
dCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9CQUNLLCAiQnJvd3NlckJhY2siX3MgfSwKKyAgICB7
IFZLX0JST1dTRVJfRk9SV0FSRCwgIkJyb3dzZXJGb3J3YXJkIl9zIH0sCisgICAgeyBWS19CUk9X
U0VSX1JFRlJFU0gsICJCcm93c2VyUmVmcmVzaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9TVE9Q
LCAiQnJvd3NlclN0b3AiX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfU0VBUkNILCAiQnJvd3NlclNl
YXJjaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9GQVZPUklURVMsICJCcm93c2VyRmF2b3JpdGVz
Il9zIH0sCisgICAgeyBWS19CUk9XU0VSX0hPTUUsICJCcm93c2VySG9tZSJfcyB9LAorICAgIHsg
VktfVk9MVU1FX01VVEUsICJBdWRpb1ZvbHVtZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX0RPV04s
ICJBdWRpb1ZvbHVtZURvd24iX3MgfSwKKyAgICB7IFZLX1ZPTFVNRV9VUCwgIkF1ZGlvVm9sdW1l
VXAiX3MgfSwKKyAgICB7IFZLX01FRElBX05FWFRfVFJBQ0ssICJNZWRpYVRyYWNrTmV4dCJfcyB9
LAorICAgIHsgVktfTUVESUFfUFJFVl9UUkFDSywgIk1lZGlhVHJhY2tQcmV2aW91cyJfcyB9LAor
ICAgIHsgVktfTUVESUFfU1RPUCwgIk1lZGlhU3RvcCJfcyB9LAorICAgIHsgVktfTUVESUFfUExB
WV9QQVVTRSwgIk1lZGlhUGxheVBhdXNlIl9zIH0sCisgICAgLy8gVktfT0VNXzEuLjgsIDEwMiwg
UExVUywgQ09NTUEsIE1JTlVTLCBQRVJJT0QKKyAgICB7IFZLX1BST0NFU1NLRVksICJQcm9jZXNz
Il9zIH0sCisgICAgLy8gVktfUEFDS0VUIC0gVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhciwgY29u
c2lkZXJlZCBhcyBwcmludGFibGUga2V5LgorICAgIHsgVktfQVRUTiwgIkF0dG4iX3MgfSwKKyAg
ICB7IFZLX0NSU0VMLCAiQ3JTZWwiX3MgfSwKKyAgICB7IFZLX0VYU0VMLCAiRXhTZWwiX3MgfSwK
KyAgICB7IFZLX0VSRU9GLCAiRXJhc2VFb2YiX3MgfSwKKyAgICB7IFZLX1BMQVksICJQbGF5Il9z
IH0sCisgICAgeyBWS19aT09NLCAiWm9vbVRvZ2dsZSJfcyB9LAorICAgIHsgVktfT0VNX0NMRUFS
LCAiQ2xlYXIiX3MgfSwKK307CisKKy8vIERpc2FtYmlndWF0ZXMgdGhlIG1lYW5pbmcgb2YgY2Vy
dGFpbiBub24tcHJpbnRhYmxlIGtleXMgd2hpY2ggaGF2ZSBkaWZmZXJlbnQKKy8vIG1lYW5pbmdz
IHVuZGVyIGRpZmZlcmVudCBsYW5ndWFnZXMsIGJ1dCB1c2UgdGhlIHNhbWUgVktFWSBjb2RlLgor
c3RhdGljIFN0cmluZyBsYW5ndWFnZVNwZWNpZmljT2VtVmlydHVhbEtleVRvRG9tS2V5KGludCB2
aXJ0dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIFdPUkQgbGFuZ3VhZ2UgPSBMT1dPUkQobGF5
b3V0KTsKKyAgICBXT1JEIHByaW1hcnlMYW5ndWFnZSA9IFBSSU1BUllMQU5HSUQobGFuZ3VhZ2Up
OworICAgIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19LT1JFQU4pIHsKKyAgICAgICAgc3dp
dGNoICh2aXJ0dWFsS2V5KSB7CisgICAgICAgIGNhc2UgVktfSEFOR1VMOgorICAgICAgICAgICAg
cmV0dXJuICJIYW5ndWxNb2RlIl9zOworICAgICAgICBjYXNlIFZLX0hBTkpBOgorICAgICAgICAg
ICAgcmV0dXJuICJIYW5qYU1vZGUiX3M7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHByaW1hcnlMYW5ndWFn
ZSA9PSBMQU5HX0pBUEFORVNFKSB7CisgICAgICAgIHN3aXRjaCAodmlydHVhbEtleSkgeworICAg
ICAgICAgICAgLy8gVktfS0FOQSBpc24ndCBnZW5lcmF0ZWQgYnkgYW55IG1vZGVybiBsYXlvdXRz
IGJ1dCBpcyBhIGxpc3RlZCB2YWx1ZQorICAgICAgICAgICAgLy8gdGhhdCB0aGlyZC1wYXJ0eSBh
cHBzIG1pZ2h0IHN5bnRoZXNpemUsIHNvIHdlIGhhbmRsZSBpdCBhbnl3YXkuCisgICAgICAgIGNh
c2UgVktfS0FOQToKKyAgICAgICAgY2FzZSBWS19BVFROOgorICAgICAgICAgICAgcmV0dXJuICJL
YW5hTW9kZSJfczsKKyAgICAgICAgY2FzZSBWS19LQU5KSToKKyAgICAgICAgICAgIHJldHVybiAi
S2FuamlNb2RlIl9zOworICAgICAgICBjYXNlIFZLX09FTV9BVFROOgorICAgICAgICAgICAgcmV0
dXJuICJBbHBoYW51bWVyaWMiX3M7CisgICAgICAgIGNhc2UgVktfT0VNX0ZJTklTSDoKKyAgICAg
ICAgICAgIHJldHVybiAiS2F0YWthbmEiX3M7CisgICAgICAgIGNhc2UgVktfT0VNX0NPUFk6Cisg
ICAgICAgICAgICByZXR1cm4gIkhpcmFnYW5hIl9zOworICAgICAgICBjYXNlIFZLX09FTV9CQUNL
VEFCOgorICAgICAgICAgICAgcmV0dXJuICJSb21hamkiX3M7CisgICAgICAgIGNhc2UgVktfT0VN
X0FVVE86CisgICAgICAgICAgICByZXR1cm4gIkhhbmtha3UiX3M7CisgICAgICAgIGNhc2UgVktf
T0VNX0VOTFc6CisgICAgICAgICAgICByZXR1cm4gIlplbmtha3UiX3M7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIG5vblByaW50YWJsZVZpcnR1YWxL
ZXlUb0RvbUtleShpbnQgdmlydHVhbEtleSwgSEtMIGxheW91dCkKK3sKKyAgICAvLyAxLiBDaGVj
ayBpZiB8dmlydHVhbEtleXwgaGFzIGEgfGxheW91dHwtc3BlY2lmaWMgbWVhbmluZy4KKyAgICBj
b25zdCBTdHJpbmcga2V5ID0gbGFuZ3VhZ2VTcGVjaWZpY09lbVZpcnR1YWxLZXlUb0RvbUtleSh2
aXJ0dWFsS2V5LCBsYXlvdXQpOworICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4ga2V5OworCisgICAgLy8gMi4gTW9zdCB8dmlydHVhbEtleXN8IGhhdmUgdGhlIHNhbWUgbWVh
bmluZyByZWdhcmRsZXNzIG9mIHxsYXlvdXR8LgorICAgIGNvbnN0IE5vblByaW50YWJsZUtleUVu
dHJ5KiByZXN1bHQgPSBzdGQ6Omxvd2VyX2JvdW5kKAorICAgICAgICBzdGQ6OmJlZ2luKGNOb25Q
cmludGFibGVLZXlNYXApLCBzdGQ6OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFwKSwgdmlydHVhbEtl
eSwKKyAgICAgICAgW10oY29uc3QgTm9uUHJpbnRhYmxlS2V5RW50cnkmIGVudHJ5LCBpbnQgbmVl
ZGxlKSB7CisgICAgICAgICAgICByZXR1cm4gZW50cnkudmlydHVhbEtleSA8IG5lZWRsZTsKKyAg
ICAgICAgfSk7CisgICAgaWYgKHJlc3VsdCAhPSBzdGQ6OmVuZChjTm9uUHJpbnRhYmxlS2V5TWFw
KSAmJiByZXN1bHQtPnZpcnR1YWxLZXkgPT0gdmlydHVhbEtleSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC0+ZG9tS2V5OworCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitXaW5kb3dzS2V5TmFt
ZXM6OldpbmRvd3NLZXlOYW1lcygpCit7CisgICAgdXBkYXRlTGF5b3V0KCk7Cit9CisKK1N0cmlu
ZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZyb21MUGFyYW0oTFBBUkFNIGxQYXJhbSkKK3sKKyAg
ICB1bnNpZ25lZCBzY2FuQ29kZSA9IChsUGFyYW0gPj4gMTYpICYgMHhmZjsKKyAgICBib29sIGV4
dGVuZGVkID0gbFBhcmFtICYgMHgwMTAwMDAwMDsKKyAgICB1bnNpZ25lZCB2aXJ0dWFsS2V5ID0g
TWFwVmlydHVhbEtleShzY2FuQ29kZSwgTUFQVktfVlNDX1RPX1ZLKTsKKyAgICBLZXlNb2RpZmll
clNldCBtb2RpZmllcnM7CisgICAgaWYgKEdldEtleVN0YXRlKFZLX1NISUZUKSA8IDApCisgICAg
ICAgIG1vZGlmaWVycy5hZGQoS2V5TW9kaWZpZXI6OlNoaWZ0KTsKKyAgICBpZiAoR2V0S2V5U3Rh
dGUoVktfQ09OVFJPTCkgPCAwKQorICAgICAgICBtb2RpZmllcnMuYWRkKEtleU1vZGlmaWVyOjpD
b250cm9sKTsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfTUVOVSApIDwgMCkKKyAgICAgICAgbW9k
aWZpZXJzLmFkZChLZXlNb2RpZmllcjo6QWx0KTsKKyAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ0FQ
SVRBTCkgJiAxKQorICAgICAgICBtb2RpZmllcnMuYWRkKEtleU1vZGlmaWVyOjpDYXBzTG9jayk7
CisKKyAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICAvLyBXaW5kb3dzIGV4cHJlc3NlcyByaWdodC1B
bHQgYXMgVktfTUVOVSB3aXRoIHRoZSBleHRlbmRlZCBmbGFnIHNldC4KKyAgICAvLyBUaGlzIGtl
eSBzaG91bGQgZ2VuZXJhdGUgQWx0R3JhcGggdW5kZXIgbGF5b3V0cyB3aGljaCB1c2UgdGhhdCBt
b2RpZmllci4KKyAgICBpZiAodmlydHVhbEtleSA9PSBWS19NRU5VICYmIGV4dGVuZGVkICYmIG1f
aGFzQWx0R3JhcGgpCisgICAgICAgIHJldHVybiAiQWx0R3JhcGgiX3M7CisKKyAgICBTdHJpbmcg
a2V5ID0gbm9uUHJpbnRhYmxlVmlydHVhbEtleVRvRG9tS2V5KHZpcnR1YWxLZXksIG1fa2V5Ym9h
cmRMYXlvdXQpOworICAgIGlmICgha2V5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ga2V5Owor
CisgICAgY29uc3QgS2V5TW9kaWZpZXJTZXQgbW9kaWZpZXJzVG9UcnlbXSA9IHsKKyAgICAgICAg
Ly8gVHJ5aW5nIHRvIG1hdGNoIEZpcmVmb3gncyBiZWhhdmlvciBhbmQgVUlFdmVudHMgRG9tS2V5
IGd1aWRlbGluZXMuCisgICAgICAgIC8vIElmIHRoZSBjb21iaW5hdGlvbiBkb2Vzbid0IHByb2R1
Y2UgYSBwcmludGFibGUgY2hhcmFjdGVyLCB0aGUga2V5IHZhbHVlCisgICAgICAgIC8vIHNob3Vs
ZCBiZSB0aGUga2V5IHdpdGggbm8gbW9kaWZpZXJzIGV4Y2VwdCBmb3IgU2hpZnQgYW5kIEFsdEdy
LgorICAgICAgICAvLyBTZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3VpZXZlbnRzLyNrZXlzLWd1
aWRlbGluZXMKKyAgICAgICAgbW9kaWZpZXJzLAorICAgICAgICBLZXlNb2RpZmllclNldCh7S2V5
TW9kaWZpZXI6OlNoaWZ0LCBLZXlNb2RpZmllcjo6Q2Fwc0xvY2t9KSAmIG1vZGlmaWVycywKKyAg
ICB9OworCisgICAgZm9yIChhdXRvIHRyeU1vZGlmaWVycyA6IG1vZGlmaWVyc1RvVHJ5KSB7Cisg
ICAgICAgIGNvbnN0IGF1dG8mIGl0ID0gbV9wcmludGFibGVLZXlDb2RlVG9LZXkuZmluZChzdGQ6
Om1ha2VfcGFpcih2aXJ0dWFsS2V5LCB0cnlNb2RpZmllcnMpKTsKKyAgICAgICAgaWYgKGl0ICE9
IG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LmVuZCgpKSB7CisgICAgICAgICAgICBrZXkgPSBpdC0+
dmFsdWU7CisgICAgICAgICAgICBpZiAoIWtleS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4ga2V5OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICJVbmlkZW50aWZpZWQi
X3M7Cit9CisKK1N0cmluZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZyb21DaGFyKFVDaGFyIGMp
Cit7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnXHgxYic6CisgICAgICAgIHJldHVybiAi
RXNjYXBlIl9zOworICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgcmV0dXJuICJUYWIiX3M7CisgICAg
Y2FzZSAnXHInOgorICAgICAgICByZXR1cm4gIkVudGVyIl9zOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbWFrZVN0cmluZyhjKTsKK30KKworLy8gVGhp
cyB0YWJsZSBtdXN0IGJlIHNvcnRlZCBieSAnc2NhbkNvZGUnIGZvciBiaW5hcnkgc2VhcmNoLgor
Y29uc3RleHByIHN0cnVjdCB7CisgICAgdW5zaWduZWQgc2NhbkNvZGU7CisgICAgQVNDSUlMaXRl
cmFsIGRvbUNvZGU7Cit9IGNEb21Db2RlTWFwW10gPSB7CisgICAgeyAweDAwMDEsICJFc2NhcGUi
X3MgfSwKKyAgICB7IDB4MDAwMiwgIkRpZ2l0MSJfcyB9LAorICAgIHsgMHgwMDAzLCAiRGlnaXQy
Il9zIH0sCisgICAgeyAweDAwMDQsICJEaWdpdDMiX3MgfSwKKyAgICB7IDB4MDAwNSwgIkRpZ2l0
NCJfcyB9LAorICAgIHsgMHgwMDA2LCAiRGlnaXQ1Il9zIH0sCisgICAgeyAweDAwMDcsICJEaWdp
dDYiX3MgfSwKKyAgICB7IDB4MDAwOCwgIkRpZ2l0NyJfcyB9LAorICAgIHsgMHgwMDA5LCAiRGln
aXQ4Il9zIH0sCisgICAgeyAweDAwMGEsICJEaWdpdDkiX3MgfSwKKyAgICB7IDB4MDAwYiwgIkRp
Z2l0MCJfcyB9LAorICAgIHsgMHgwMDBjLCAiTWludXMiX3MgfSwKKyAgICB7IDB4MDAwZCwgIkVx
dWFsIl9zIH0sCisgICAgeyAweDAwMGUsICJCYWNrc3BhY2UiX3MgfSwKKyAgICB7IDB4MDAwZiwg
IlRhYiJfcyB9LAorICAgIHsgMHgwMDEwLCAiS2V5USJfcyB9LAorICAgIHsgMHgwMDExLCAiS2V5
VyJfcyB9LAorICAgIHsgMHgwMDEyLCAiS2V5RSJfcyB9LAorICAgIHsgMHgwMDEzLCAiS2V5UiJf
cyB9LAorICAgIHsgMHgwMDE0LCAiS2V5VCJfcyB9LAorICAgIHsgMHgwMDE1LCAiS2V5WSJfcyB9
LAorICAgIHsgMHgwMDE2LCAiS2V5VSJfcyB9LAorICAgIHsgMHgwMDE3LCAiS2V5SSJfcyB9LAor
ICAgIHsgMHgwMDE4LCAiS2V5TyJfcyB9LAorICAgIHsgMHgwMDE5LCAiS2V5UCJfcyB9LAorICAg
IHsgMHgwMDFhLCAiQnJhY2tldExlZnQiX3MgfSwKKyAgICB7IDB4MDAxYiwgIkJyYWNrZXRSaWdo
dCJfcyB9LAorICAgIHsgMHgwMDFjLCAiRW50ZXIiX3MgfSwKKyAgICB7IDB4MDAxZCwgIkNvbnRy
b2xMZWZ0Il9zIH0sCisgICAgeyAweDAwMWUsICJLZXlBIl9zIH0sCisgICAgeyAweDAwMWYsICJL
ZXlTIl9zIH0sCisgICAgeyAweDAwMjAsICJLZXlEIl9zIH0sCisgICAgeyAweDAwMjEsICJLZXlG
Il9zIH0sCisgICAgeyAweDAwMjIsICJLZXlHIl9zIH0sCisgICAgeyAweDAwMjMsICJLZXlIIl9z
IH0sCisgICAgeyAweDAwMjQsICJLZXlKIl9zIH0sCisgICAgeyAweDAwMjUsICJLZXlLIl9zIH0s
CisgICAgeyAweDAwMjYsICJLZXlMIl9zIH0sCisgICAgeyAweDAwMjcsICJTZW1pY29sb24iX3Mg
fSwKKyAgICB7IDB4MDAyOCwgIlF1b3RlIl9zIH0sCisgICAgeyAweDAwMjksICJCYWNrcXVvdGUi
X3MgfSwKKyAgICB7IDB4MDAyYSwgIlNoaWZ0TGVmdCJfcyB9LAorICAgIHsgMHgwMDJiLCAiQmFj
a3NsYXNoIl9zIH0sCisgICAgeyAweDAwMmMsICJLZXlaIl9zIH0sCisgICAgeyAweDAwMmQsICJL
ZXlYIl9zIH0sCisgICAgeyAweDAwMmUsICJLZXlDIl9zIH0sCisgICAgeyAweDAwMmYsICJLZXlW
Il9zIH0sCisgICAgeyAweDAwMzAsICJLZXlCIl9zIH0sCisgICAgeyAweDAwMzEsICJLZXlOIl9z
IH0sCisgICAgeyAweDAwMzIsICJLZXlNIl9zIH0sCisgICAgeyAweDAwMzMsICJDb21tYSJfcyB9
LAorICAgIHsgMHgwMDM0LCAiUGVyaW9kIl9zIH0sCisgICAgeyAweDAwMzUsICJTbGFzaCJfcyB9
LAorICAgIHsgMHgwMDM2LCAiU2hpZnRSaWdodCJfcyB9LAorICAgIHsgMHgwMDM3LCAiTnVtcGFk
TXVsdGlwbHkiX3MgfSwKKyAgICB7IDB4MDAzOCwgIkFsdExlZnQiX3MgfSwKKyAgICB7IDB4MDAz
OSwgIlNwYWNlIl9zIH0sCisgICAgeyAweDAwM2EsICJDYXBzTG9jayJfcyB9LAorICAgIHsgMHgw
MDNiLCAiRjEiX3MgfSwKKyAgICB7IDB4MDAzYywgIkYyIl9zIH0sCisgICAgeyAweDAwM2QsICJG
MyJfcyB9LAorICAgIHsgMHgwMDNlLCAiRjQiX3MgfSwKKyAgICB7IDB4MDAzZiwgIkY1Il9zIH0s
CisgICAgeyAweDAwNDAsICJGNiJfcyB9LAorICAgIHsgMHgwMDQxLCAiRjciX3MgfSwKKyAgICB7
IDB4MDA0MiwgIkY4Il9zIH0sCisgICAgeyAweDAwNDMsICJGOSJfcyB9LAorICAgIHsgMHgwMDQ0
LCAiRjEwIl9zIH0sCisgICAgeyAweDAwNDUsICJQYXVzZSJfcyB9LAorICAgIHsgMHgwMDQ2LCAi
U2Nyb2xsTG9jayJfcyB9LAorICAgIHsgMHgwMDQ3LCAiTnVtcGFkNyJfcyB9LAorICAgIHsgMHgw
MDQ4LCAiTnVtcGFkOCJfcyB9LAorICAgIHsgMHgwMDQ5LCAiTnVtcGFkOSJfcyB9LAorICAgIHsg
MHgwMDRhLCAiTnVtcGFkU3VidHJhY3QiX3MgfSwKKyAgICB7IDB4MDA0YiwgIk51bXBhZDQiX3Mg
fSwKKyAgICB7IDB4MDA0YywgIk51bXBhZDUiX3MgfSwKKyAgICB7IDB4MDA0ZCwgIk51bXBhZDYi
X3MgfSwKKyAgICB7IDB4MDA0ZSwgIk51bXBhZEFkZCJfcyB9LAorICAgIHsgMHgwMDRmLCAiTnVt
cGFkMSJfcyB9LAorICAgIHsgMHgwMDUwLCAiTnVtcGFkMiJfcyB9LAorICAgIHsgMHgwMDUxLCAi
TnVtcGFkMyJfcyB9LAorICAgIHsgMHgwMDUyLCAiTnVtcGFkMCJfcyB9LAorICAgIHsgMHgwMDUz
LCAiTnVtcGFkRGVjaW1hbCJfcyB9LAorICAgIHsgMHgwMDU2LCAiSW50bEJhY2tzbGFzaCJfcyB9
LAorICAgIHsgMHgwMDU3LCAiRjExIl9zIH0sCisgICAgeyAweDAwNTgsICJGMTIiX3MgfSwKKyAg
ICB7IDB4MDA1OSwgIk51bXBhZEVxdWFsIl9zIH0sCisgICAgeyAweDAwNjQsICJGMTMiX3MgfSwK
KyAgICB7IDB4MDA2NSwgIkYxNCJfcyB9LAorICAgIHsgMHgwMDY2LCAiRjE1Il9zIH0sCisgICAg
eyAweDAwNjcsICJGMTYiX3MgfSwKKyAgICB7IDB4MDA2OCwgIkYxNyJfcyB9LAorICAgIHsgMHgw
MDY5LCAiRjE4Il9zIH0sCisgICAgeyAweDAwNmEsICJGMTkiX3MgfSwKKyAgICB7IDB4MDA2Yiwg
IkYyMCJfcyB9LAorICAgIHsgMHgwMDZjLCAiRjIxIl9zIH0sCisgICAgeyAweDAwNmQsICJGMjIi
X3MgfSwKKyAgICB7IDB4MDA2ZSwgIkYyMyJfcyB9LAorICAgIHsgMHgwMDcwLCAiS2FuYU1vZGUi
X3MgfSwKKyAgICB7IDB4MDA3MSwgIkxhbmcyIl9zIH0sCisgICAgeyAweDAwNzIsICJMYW5nMSJf
cyB9LAorICAgIHsgMHgwMDczLCAiSW50bFJvIl9zIH0sCisgICAgeyAweDAwNzYsICJGMjQiX3Mg
fSwKKyAgICB7IDB4MDA3NywgIkxhbmc0Il9zIH0sCisgICAgeyAweDAwNzgsICJMYW5nMyJfcyB9
LAorICAgIHsgMHgwMDc5LCAiQ29udmVydCJfcyB9LAorICAgIHsgMHgwMDdiLCAiTm9uQ29udmVy
dCJfcyB9LAorICAgIHsgMHgwMDdkLCAiSW50bFllbiJfcyB9LAorICAgIHsgMHgwMDdlLCAiTnVt
cGFkQ29tbWEiX3MgfSwKKyAgICB7IDB4MDEwOCwgIlVuZG8iX3MgfSwKKyAgICB7IDB4MDEwYSwg
IlBhc3RlIl9zIH0sCisgICAgeyAweDAxMTAsICJNZWRpYVRyYWNrUHJldmlvdXMiX3MgfSwKKyAg
ICB7IDB4MDExNywgIkN1dCJfcyB9LAorICAgIHsgMHgwMTE4LCAiQ29weSJfcyB9LAorICAgIHsg
MHgwMTE5LCAiTWVkaWFUcmFja05leHQiX3MgfSwKKyAgICB7IDB4MDExYywgIk51bXBhZEVudGVy
Il9zIH0sCisgICAgeyAweDAxMWQsICJDb250cm9sUmlnaHQiX3MgfSwKKyAgICB7IDB4MDEyMCwg
IkF1ZGlvVm9sdW1lTXV0ZSJfcyB9LAorICAgIHsgMHgwMTIxLCAiTGF1bmNoQXBwMiJfcyB9LAor
ICAgIHsgMHgwMTIyLCAiTWVkaWFQbGF5UGF1c2UiX3MgfSwKKyAgICB7IDB4MDEyNCwgIk1lZGlh
U3RvcCJfcyB9LAorICAgIHsgMHgwMTJjLCAiRWplY3QiX3MgfSwKKyAgICB7IDB4MDEyZSwgIkF1
ZGlvVm9sdW1lRG93biJfcyB9LAorICAgIHsgMHgwMTMwLCAiQXVkaW9Wb2x1bWVVcCJfcyB9LAor
ICAgIHsgMHgwMTMyLCAiQnJvd3NlckhvbWUiX3MgfSwKKyAgICB7IDB4MDEzNSwgIk51bXBhZERp
dmlkZSJfcyB9LAorICAgIHsgMHgwMTM3LCAiUHJpbnRTY3JlZW4iX3MgfSwKKyAgICB7IDB4MDEz
OCwgIkFsdFJpZ2h0Il9zIH0sCisgICAgeyAweDAxM2IsICJIZWxwIl9zIH0sCisgICAgeyAweDAx
NDUsICJOdW1Mb2NrIl9zIH0sCisgICAgeyAweDAxNDcsICJIb21lIl9zIH0sCisgICAgeyAweDAx
NDgsICJBcnJvd1VwIl9zIH0sCisgICAgeyAweDAxNDksICJQYWdlVXAiX3MgfSwKKyAgICB7IDB4
MDE0YiwgIkFycm93TGVmdCJfcyB9LAorICAgIHsgMHgwMTRkLCAiQXJyb3dSaWdodCJfcyB9LAor
ICAgIHsgMHgwMTRmLCAiRW5kIl9zIH0sCisgICAgeyAweDAxNTAsICJBcnJvd0Rvd24iX3MgfSwK
KyAgICB7IDB4MDE1MSwgIlBhZ2VEb3duIl9zIH0sCisgICAgeyAweDAxNTIsICJJbnNlcnQiX3Mg
fSwKKyAgICB7IDB4MDE1MywgIkRlbGV0ZSJfcyB9LAorICAgIHsgMHgwMTViLCAiTWV0YUxlZnQi
X3MgfSwKKyAgICB7IDB4MDE1YywgIk1ldGFSaWdodCJfcyB9LAorICAgIHsgMHgwMTVkLCAiQ29u
dGV4dE1lbnUiX3MgfSwKKyAgICB7IDB4MDE1ZSwgIlBvd2VyIl9zIH0sCisgICAgeyAweDAxNWYs
ICJTbGVlcCJfcyB9LAorICAgIHsgMHgwMTYzLCAiV2FrZVVwIl9zIH0sCisgICAgeyAweDAxNjUs
ICJCcm93c2VyU2VhcmNoIl9zIH0sCisgICAgeyAweDAxNjYsICJCcm93c2VyRmF2b3JpdGVzIl9z
IH0sCisgICAgeyAweDAxNjcsICJCcm93c2VyUmVmcmVzaCJfcyB9LAorICAgIHsgMHgwMTY4LCAi
QnJvd3NlclN0b3AiX3MgfSwKKyAgICB7IDB4MDE2OSwgIkJyb3dzZXJGb3J3YXJkIl9zIH0sCisg
ICAgeyAweDAxNmEsICJCcm93c2VyQmFjayJfcyB9LAorICAgIHsgMHgwMTZiLCAiTGF1bmNoQXBw
MSJfcyB9LAorICAgIHsgMHgwMTZjLCAiTGF1bmNoTWFpbCJfcyB9LAorICAgIHsgMHgwMTZkLCAi
TWVkaWFTZWxlY3QiX3MgfSwKK307CisKK1N0cmluZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUNvZGVG
cm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7CisgICAgdW5zaWduZWQgZXh0ZW5kZWRTY2FuQ29k
ZSA9IChsUGFyYW0gPj4gMTYpICYgMHgxZmY7CisgICAgY29uc3QgYXV0byogcmVzdWx0ID0gc3Rk
Ojpsb3dlcl9ib3VuZCgKKyAgICAgICAgc3RkOjpiZWdpbihjRG9tQ29kZU1hcCksIHN0ZDo6ZW5k
KGNEb21Db2RlTWFwKSwgZXh0ZW5kZWRTY2FuQ29kZSwKKyAgICAgICAgW10oY29uc3QgYXV0byYg
ZW50cnksIGludCBuZWVkbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5zY2FuQ29kZSA8
IG5lZWRsZTsKKyAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdCAhPSBzdGQ6OmVuZChjRG9tQ29k
ZU1hcCkgJiYgcmVzdWx0LT5zY2FuQ29kZSA9PSBleHRlbmRlZFNjYW5Db2RlKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5kb21Db2RlOworCisgICAgcmV0dXJuICJVbmlkZW50aWZpZWQiX3M7Cit9
CisKK3ZvaWQgV2luZG93c0tleU5hbWVzOjp1cGRhdGVMYXlvdXQoKQoreworICAgIEhLTCBjdXJy
ZW50TGF5b3V0ID0gR2V0S2V5Ym9hcmRMYXlvdXQoMCk7CisgICAgaWYgKGN1cnJlbnRMYXlvdXQg
PT0gbV9rZXlib2FyZExheW91dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQllURSBrZXlib2Fy
ZFN0YXRlVG9SZXN0b3JlWzI1Nl07CisgICAgaWYgKCFHZXRLZXlib2FyZFN0YXRlKGtleWJvYXJk
U3RhdGVUb1Jlc3RvcmUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2tleWJvYXJkTGF5b3V0
ID0gY3VycmVudExheW91dDsKKyAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5jbGVhcigpOwor
ICAgIG1faGFzQWx0R3JhcGggPSBmYWxzZTsKKworICAgIC8vIE1hcCBzaXplIGZvciBzb21lIHNh
bXBsZSBrZXlib2FyZCBsYXlvdXRzOgorICAgIC8vIFVTOiA0NzYsIEZyZW5jaDogNjAyLCBQZXJz
aWFuOiA0ODIsIFZpZXRuYW1lc2U6IDE0MzYKKyAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDE1MDApOworCisgICAgS2V5TW9kaWZpZXJTZXQgYWxsQ29t
YmluYXRpb24geyBLZXlNb2RpZmllcjo6U2hpZnQsIEtleU1vZGlmaWVyOjpDb250cm9sLCBLZXlN
b2RpZmllcjo6QWx0LCBLZXlNb2RpZmllcjo6Q2Fwc0xvY2sgfTsKKworICAgIGZvciAoaW50IGNv
bWJpbmF0aW9uID0gMDsgY29tYmluYXRpb24gPD0gYWxsQ29tYmluYXRpb24udG9SYXcoKTsgKytj
b21iaW5hdGlvbikgeworICAgICAgICBCWVRFIGtleWJvYXJkU3RhdGVbMjU2XSA9IHsgfTsKKwor
ICAgICAgICAvLyBTZXR0aW5nIHVwIGtleWJvYXJkIHN0YXRlIGZvciBtb2RpZmllcnMuCisgICAg
ICAgIGF1dG8gbW9kaWZpZXJzID0gS2V5TW9kaWZpZXJTZXQ6OmZyb21SYXcoY29tYmluYXRpb24p
OworICAgICAgICBzZXRNb2RpZmllclN0YXRlKGtleWJvYXJkU3RhdGUsIG1vZGlmaWVycyk7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsS2V5ID0gMDsgdmlydHVhbEtleSA8PSAweEZG
OyArK3ZpcnR1YWxLZXkpIHsKKyAgICAgICAgICAgIHdjaGFyX3QgdHJhbnNsYXRlZENoYXJzWzVd
OworICAgICAgICAgICAgaW50IHJ2ID0gVG9Vbmljb2RlRXgodmlydHVhbEtleSwgMCwga2V5Ym9h
cmRTdGF0ZSwgdHJhbnNsYXRlZENoYXJzLAorICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5H
VEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91dCk7CisKKyAgICAgICAgICAg
IGlmIChydiA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8vIERlYWQga2V5LCBpbmplY3Rpbmcg
VktfU1BBQ0UgdG8gZ2V0IGNoYXJhY3RlciByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgICAg
ICBCWVRFIGVtcHR5U3RhdGVbMjU2XSA9IHsgfTsKKyAgICAgICAgICAgICAgICBydiA9IFRvVW5p
Y29kZUV4KFZLX1NQQUNFLCAwLCBlbXB0eVN0YXRlLCB0cmFuc2xhdGVkQ2hhcnMsCisgICAgICAg
ICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXli
b2FyZExheW91dCk7CisgICAgICAgICAgICAgICAgLy8gRXhwZWN0aW5nIGEgZGVhZCBrZXkgY2hh
cmFjdGVyIChub3QgZm9sbG93ZWQgYnkgYSBzcGFjZSkuCisgICAgICAgICAgICAgICAgaWYgKHJ2
ID09IDEpCisgICAgICAgICAgICAgICAgICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnNldChz
dGQ6Om1ha2VfcGFpcih2aXJ0dWFsS2V5LCBtb2RpZmllcnMpLCAiRGVhZCJfcyk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJ2ID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRl
ZENoYXJzWzBdID49IDB4MjApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wcmludGFibGVLZXlD
b2RlVG9LZXkuc2V0KHN0ZDo6bWFrZV9wYWlyKHZpcnR1YWxLZXksIG1vZGlmaWVycyksIG1ha2VT
dHJpbmcoVUNoYXIodHJhbnNsYXRlZENoYXJzWzBdKSkpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIERldGVjdCB3aGV0aGVyIHRoZSBsYXlvdXQgbWFrZXMgdXNlIG9mIEFsdEdyYXBoLgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzQ29udHJvbEFuZEFsdChtb2RpZmllcnMpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9oYXNBbHRHcmFwaCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIFNldEtleWJvYXJkU3RhdGUo
a2V5Ym9hcmRTdGF0ZVRvUmVzdG9yZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZmRmZWMwODdhMWIyNGU2NmYyYTg0MzNlYTFmOTE5OTI4NTFhZTcxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisv
LyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldEhhc2guaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXaW5k
b3dzS2V5TmFtZXMgeworcHVibGljOgorICAgIFdpbmRvd3NLZXlOYW1lcygpOworCisgICAgU3Ry
aW5nIGRvbUtleUZyb21MUGFyYW0oTFBBUkFNKTsKKyAgICBTdHJpbmcgZG9tS2V5RnJvbUNoYXIo
VUNoYXIpOworICAgIFN0cmluZyBkb21Db2RlRnJvbUxQYXJhbShMUEFSQU0pOworCisgICAgZW51
bSBjbGFzcyBLZXlNb2RpZmllciA6IHVpbnQ4X3Q7CisgICAgdXNpbmcgS2V5TW9kaWZpZXJTZXQg
PSBPcHRpb25TZXQ8S2V5TW9kaWZpZXI+OworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlTGF5
b3V0KCk7CisKKyAgICBIS0wgbV9rZXlib2FyZExheW91dCA9IDA7CisgICAgYm9vbCBtX2hhc0Fs
dEdyYXBoID0gZmFsc2U7CisKKyAgICB1c2luZyBWaXJ0dWFsS2V5TW9kaWZpZXJTZXRQYWlyID0g
c3RkOjpwYWlyPHVuc2lnbmVkLCBLZXlNb2RpZmllclNldD47CisgICAgdXNpbmcgVmlydHVhbEtl
eVRvS2V5TWFwID0gSGFzaE1hcDxWaXJ0dWFsS2V5TW9kaWZpZXJTZXRQYWlyLCBTdHJpbmcsIERl
ZmF1bHRIYXNoPFZpcnR1YWxLZXlNb2RpZmllclNldFBhaXI+OjpIYXNoLCBQYWlySGFzaFRyYWl0
czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPiwgSGFzaFRyYWl0
czxLZXlNb2RpZmllclNldD4+PjsKKyAgICBWaXJ0dWFsS2V5VG9LZXlNYXAgbV9wcmludGFibGVL
ZXlDb2RlVG9LZXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
RXZlbnQuaAppbmRleCBjMzYxMDBjZjVjNDQ2YzVmOWFlMGYwNmU4YmQ4YTBmNDFmNTI3ZjNjLi43
ZGJhMDhmZGVlODg2OTlmYjI0NmUyNGE0N2Y3NTMxYTk1NDA4NTkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkV2ZW50LmgKQEAgLTI2Myw3ICsyNjMsNyBAQCBwdWJsaWM6CiAjZWxpZiBVU0UoTElCV1BFKQog
ICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIs
IGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgYm9v
bCBpc0tleXBhZCwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKICNl
bHNlCi0gICAgV2ViS2V5Ym9hcmRFdmVudChUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgaW50
IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBpbnQgbWFj
Q2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlzS2V5cGFkLCBib29sIGlzU3lzdGVt
S2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+LCBXYWxsVGltZSB0aW1lc3RhbXApOworICAgIFdlYktl
eWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHVubW9k
aWZpZWRUZXh0LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBT
dHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRp
dmVWaXJ0dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJDb2RlLCBib29sIGlzQXV0b1JlcGVhdCwgYm9v
bCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgT3B0aW9uU2V0PE1vZGlmaWVyPiwgV2FsbFRp
bWUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJL
ZXlib2FyZEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQu
Y3BwCmluZGV4IGE1YTIzY2YxNDhlZjcyOTdmN2ZkZDFmOWZlYzYxZmUxZmU3MzUzZTcuLjIwZDkz
OGIyNjY3ZmI3YWFkMmViOGExZWUzNzJiZDVjOWQ5NmMzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCkBAIC0xMzIsMTAgKzEzMiwxMiBAQCBXZWJLZXlib2Fy
ZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBTdHJpbmcmCiAKICNlbHNlCiAKLVdlYktleWJvYXJkRXZlbnQ6OldlYktleWJvYXJkRXZl
bnQoVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdW5tb2RpZmll
ZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5
Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBpbnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNB
dXRvUmVwZWF0LCBib29sIGlzS2V5cGFkLCBib29sIGlzU3lzdGVtS2V5LCBPcHRpb25TZXQ8TW9k
aWZpZXI+IG1vZGlmaWVycywgV2FsbFRpbWUgdGltZXN0YW1wKQorV2ViS2V5Ym9hcmRFdmVudDo6
V2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3Ry
aW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgY29k
ZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2Rl
LCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGludCBtYWNDaGFyQ29kZSwgYm9vbCBpc0F1dG9S
ZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wgaXNTeXN0ZW1LZXksIE9wdGlvblNldDxNb2RpZmll
cj4gbW9kaWZpZXJzLCBXYWxsVGltZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBt
b2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fdGV4dCh0ZXh0KQogICAgICwgbV91bm1vZGlm
aWVkVGV4dCh1bm1vZGlmaWVkVGV4dCkKKyAgICAsIG1fa2V5KGtleSkKKyAgICAsIG1fY29kZShj
b2RlKQogICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZpZXIpCiAgICAgLCBtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzVmlydHVhbEtleUNvZGUpCiAgICAgLCBtX25hdGl2ZVZp
cnR1YWxLZXlDb2RlKG5hdGl2ZVZpcnR1YWxLZXlDb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcAppbmRleCBiM2U2Mjk1ZDE3ZGQwYzRlZmM3MmEzNmYw
Y2I3OWYzOGNmMWE4NTYxLi44OGQ1M2QyMzZjZDZkNjI3MzVmMDM2NzhhMDRjYTljMTk4ZGRkYWNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbGJhci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c0tleU5hbWVzLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oPgogI2luY2x1ZGUgPHdpbmRv
d3N4Lmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KQEAgLTQ0NiwxMSArNDQ3LDE5IEBA
IFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZl
bnQ6OldoZWVsLCBwb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIEZsb2F0U2l6ZShkZWx0YVgsIGRl
bHRhWSksIEZsb2F0U2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwg
bW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkpOwogfQogCitzdGF0aWMgV2luZG93c0tleU5hbWVz
JiB3aW5kb3dzS2V5TmFtZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXaW5kb3dz
S2V5TmFtZXM+IGtleU5hbWVzOworICAgIHJldHVybiBrZXlOYW1lczsKK30KKwogV2ViS2V5Ym9h
cmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoSFdORCBod25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3cGFyYW0sIExQQVJBTSBscGFyYW0pCiB7CiAgICAgV2Vi
RXZlbnQ6OlR5cGUgdHlwZSA9IGtleWJvYXJkRXZlbnRUeXBlRm9yRXZlbnQobWVzc2FnZSk7CiAg
ICAgU3RyaW5nIHRleHQgPSB0ZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CiAgICAgU3RyaW5n
IHVubW9kaWZpZWRUZXh0ID0gdW5tb2RpZmllZFRleHRGcm9tRXZlbnQod3BhcmFtLCB0eXBlKTsK
KyAgICBTdHJpbmcga2V5ID0gbWVzc2FnZSA9PSBXTV9DSEFSID8gd2luZG93c0tleU5hbWVzKCku
ZG9tS2V5RnJvbUNoYXIod3BhcmFtKSA6IHdpbmRvd3NLZXlOYW1lcygpLmRvbUtleUZyb21MUGFy
YW0obHBhcmFtKTsKKyAgICBTdHJpbmcgY29kZSA9IHdpbmRvd3NLZXlOYW1lcygpLmRvbUNvZGVG
cm9tTFBhcmFtKGxwYXJhbSk7CiAgICAgU3RyaW5nIGtleUlkZW50aWZpZXIgPSBrZXlJZGVudGlm
aWVyRnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CiAgICAgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9IHN0YXRpY19jYXN0PGludD4od3BhcmFtKTsKICAgICBpbnQgbmF0aXZlVmlydHVhbEtleUNv
ZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KHdwYXJhbSk7CkBAIC00NjAsNyArNDY5LDcgQEAgV2ViS2V5
Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoSFdORCBo
d25kLCBVSU5UIG1lc3NhZ2UKICAgICBib29sIGlzU3lzdGVtS2V5ID0gaXNTeXN0ZW1LZXlFdmVu
dChtZXNzYWdlKTsKICAgICBhdXRvIG1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckN1cnJlbnRLZXlT
dGF0ZSgpOwogCi0gICAgcmV0dXJuIFdlYktleWJvYXJkRXZlbnQodHlwZSwgdGV4dCwgdW5tb2Rp
ZmllZFRleHQsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgbmF0aXZlVmly
dHVhbEtleUNvZGUsIG1hY0NoYXJDb2RlLCBhdXRvUmVwZWF0LCBpc0tleXBhZCwgaXNTeXN0ZW1L
ZXksIG1vZGlmaWVycywgV2FsbFRpbWU6Om5vdygpKTsKKyAgICByZXR1cm4gV2ViS2V5Ym9hcmRF
dmVudCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4dCwga2V5LCBjb2RlLCBrZXlJZGVudGlmaWVy
LCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBtYWNDaGFyQ29k
ZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5LCBtb2RpZmllcnMsIFdhbGxUaW1l
Ojpub3coKSk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU2ZmMyYTlj
N2ZjMmRlYzc1YzI4OTYyYTc1NWYxZDk0MWRiMjM4N2EuLjZkNWYxNWQ0MzNjOTRmMzhmZTA2Yzdi
ZDAyMjRhNzEwODA0YzEzYjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMS0yNSAgRnVq
aWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luXSBV
cGRhdGUgS2V5Ym9hcmRFdmVudCBhcyBwZXIgdGhlIGxhdGVzdCBzcGVjaWZpY2F0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIxODMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL3dp
bi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBl
Y3RhdGlvbnM6CisgICAgICAgIFVuc2tpcHBlZCBmYXN0L2V2ZW50cy9hcnJvdy1rZXlzLW9uLWJv
ZHkuaHRtbCwgZmFzdC9ldmVudHMva2V5Ym9hcmRldmVudC1rZXkuaHRtbCwgYW5kIGZhc3QvZXZl
bnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sLgorCiAyMDE5LTExLTI1ICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4gIGFuZCAgQ2hyaXMgTG9yZCA8Y2xvcmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBCYXNpYyBPZmZzY3JlZW5DYW52YXMgZnVuY3Rpb25hbGl0eQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5MjkzMDdkZWQy
M2EyNzA1YzBiMGY5ZThkMDZjMzhkNTMzMzkxMTUxLi41MTRjODg0NTdmNWFhMjU0YzliMGU4MTNm
OTA0ZGMzOTVkNDY4ZTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMzIzNCw3ICszMjM0LDYgQEAgZmFzdC9kb20vSFRNTE1ldGVyRWxlbWVudC9tZXRl
ci1zdHlsZXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9w
cm9ncmVzcy1iYXItdmFsdWUtcHNldWRvLWVsZW1lbnQuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9k
b20vV2luZG93L2dldC1zZXQtcHJvcGVydGllcy5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2RvbS9X
aW5kb3cvd2luZG93LWxvb2t1cC1wcmVjZWRlbmNlLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZl
bnRzL2Fycm93LWtleXMtb24tYm9keS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9iZWZv
cmUtaW5wdXQtZXZlbnRzLXByZXZlbnQtZHJhZy1hbmQtZHJvcC5odG1sIFsgRmFpbHVyZSBdCiBm
YXN0L2V2ZW50cy9jb25zdHJ1Y3RvcnMva2V5Ym9hcmQtZXZlbnQtY29uc3RydWN0b3IuaHRtbCBb
IEZhaWx1cmUgXQogZmFzdC9ldmVudHMvY29uc3RydWN0b3JzL292ZXJjb25zdHJhaW5lZC1lcnJv
ci1ldmVudC1jb25zdHJ1Y3Rvci5odG1sIFsgRmFpbHVyZSBdCkBAIC0zMjQ1LDkgKzMyNDQsNyBA
QCBmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMS5odG1sIFsgRmFpbHVyZSBd
CiBmYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb25lbmQtb24tc2VsZWN0aW9uLWNoYW5nZS5odG1s
IFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9pbnB1dC1ldmVudHMtcGFzdGUtcmljaC1kYXRhdHJh
bnNmZXIuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMva2V5LWV2ZW50cy1pbi1pbnB1dC1i
dXR0b24uaHRtbCBbIEZhaWx1cmUgXQotZmFzdC9ldmVudHMva2V5LWV2ZW50cy1pbi1pbnB1dC10
ZXh0Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2tleWJvYXJkZXZlbnQtY29kZS5odG1s
IFsgRmFpbHVyZSBdCi1mYXN0L2V2ZW50cy9rZXlib2FyZGV2ZW50LWtleS5odG1sIFsgRmFpbHVy
ZSBdCiBmYXN0L2V2ZW50cy91cGRhdGVMYXlvdXRGb3JIaXRUZXN0Lmh0bWwgWyBGYWlsdXJlIF0K
IGZhc3QvZXZlbnRzL3doZWVsZXZlbnQtYmFzaWMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9mb3Jt
cy9saXN0Ym94LXJlc3BlY3RzLXBhZGRpbmctYm90dG9tLmh0bWwgWyBGYWlsdXJlIF0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDc3ZDNl
ZWM3YzE3YTMyNDlmYTg5ODlmZDExZWViYzA0YzQ1OTkwNDEuLjFjOTgxNzlmMmY2YWU1Mzc2YTI5
ZmRlOGZiYWZjNzEwMDZjYjVjYjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fp
cm8vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTYzNiw3ICsxNjM2LDYgQEAgZmFzdC9jc3Mvd2lsbC1j
aGFuZ2Uvd2lsbC1jaGFuZ2UtY3JlYXRlcy1zdGFja2luZy1jb250ZXh0LWlubGluZS5odG1sIFsg
SW1hZ2VPbmwKIGZhc3QvY3NzL3dpbGwtY2hhbmdlL3dpbGwtY2hhbmdlLWNyZWF0ZXMtc3RhY2tp
bmctY29udGV4dC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L2RvbS9hZG9wdC1hdHRy
aWJ1dGUtY3Jhc2guc3ZnIFsgRmFpbHVyZSBdCiBmYXN0L2RvbS9uYXZpZ2F0b3ItcHJvcGVydHkt
Z2MtYWZ0ZXItZnJhbWUtZGV0YWNoLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2Fycm93
LWtleXMtb24tYm9keS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9hdHRlbXB0LXNjcm9s
bC13aXRoLW5vLXNjcm9sbGJhcnMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvYXV0b3Nj
cm9sbC13aGVuLWlucHV0LWlzLW9mZnNjcmVlbi5odG1sIFsgU2tpcCBdICMgVUlTY3JpcHQKIGZh
c3QvZXZlbnRzL2F1dG9zY3JvbGwtd2l0aC1zb2Z0d2FyZS1rZXlib2FyZC5odG1sIFsgU2tpcCBd
ICMgVUlTY3JpcHQKQEAgLTE2NzIsOSArMTY3MSw3IEBAIGZhc3QvZXZlbnRzL2lucHV0LWV2ZW50
LWluc2VydC1yZXBsYWNlbWVudC5odG1sIFsgU2tpcCBdICMgVUlTY3JpcHQKIGZhc3QvZXZlbnRz
L2lucHV0LWV2ZW50cy1wYXN0ZS1kYXRhLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogZmFzdC9ldmVu
dHMvaW5wdXQtZXZlbnRzLXBhc3RlLXJpY2gtZGF0YXRyYW5zZmVyLmh0bWwgWyBGYWlsdXJlIF0K
IGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtYnV0dG9uLmh0bWwgWyBGYWlsdXJlIF0K
LWZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sIFsgRmFpbHVyZSBdCiBm
YXN0L2V2ZW50cy9rZXlib2FyZGV2ZW50LWNvZGUuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC9ldmVu
dHMva2V5Ym9hcmRldmVudC1rZXkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMva2V5ZG93
bi1udW1wYWQta2V5cy5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3It
aW1hZ2Utc2V0Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL21vdXNlb3Zlci1idXR0b24u
aHRtbCBbIEZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384321</attachid>
            <date>2019-11-25 19:49:29 -0800</date>
            <delta_ts>2019-11-25 19:49:29 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-202183-20191126124928.patch</filename>
            <type>text/plain</type>
            <size>36533</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDUwMzAzZjdhZTJjZGM3YmU1N2EwM2I2
YzE0YTk0OTM0NTQ2MGQ0MTYuLjdjZjUyZmZiMmQwODQ5NjM3MWNkMDNmMmY5NDE4N2EzYTJiMjA3
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTEtMjUgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtleWJvYXJkRXZl
bnQgYXMgcGVyIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Um9zcyBLaXJzbGluZy4KKworICAgICAgICAqIHd0Zi9GZWF0dXJlRGVmaW5lcy5oOgorCiAyMDE5
LTExLTI1ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAg
ICAgIEFkZCBEZWZhdWx0SGFzaDxPcHRpb25TZXQ8VD4+IGFuZCBIYXNoVHJhaXQ8T3B0aW9uU2V0
PFQ+PiBzcGVjaWFsaXphdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZGQ0YmYyOWIwYWM4NjM4NmIyNDFk
OTA3MTUzM2E3NTc3ZTc0YjUxLi5mYmNjY2MwNmYzOWFhYmNjYTIxOWE5OTY5ZDExYzg1MmYwN2Rh
ZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTktMTEtMjUgIEZ1amlpIEhpcm9u
b3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtl
eWJvYXJkRXZlbnQgYXMgcGVyIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgUm9zcyBLaXJzbGluZy4KKworICAgICAgICBBZGQgJ2tleScgYW5kICdjb2RlJyBw
cm9wZXJ0aWVzIG9mIEtleWJvYXJkRXZlbnQgZm9yIFdpbmRvd3MuIFRoZQorICAgICAgICBpbXBs
ZW1lbnRhdGlvbiBpcyBjb3BpZWQgZnJvbSBDaHJvbWl1bSBmb3IgV2luZG93cy4KKworICAgICAg
ICBGb3IgaW1wbGVtZW50aW5nICdrZXknIHByb3BlcnRpZXMsIFRvVW5pY29kZUV4IEFQSSBpcyB1
c2VkIHRvCisgICAgICAgIGNvbnZlcnQgYSB2aXJ0dWFsIGtleSBjb2RlIHRvIGEgY2hhcmFjdGVy
IGluZm9ybWF0aW9uLgorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBUb1VuaWNvZGVFeCBhbHRlcnMg
dGhlIHN0b3JlZCBwcmV2aW91cyB0eXBlZCBkZWFkCisgICAgICAgIGtleSBpbiB0aGUgZHJpdmVy
LCBpdCBjYW4ndCBiZSB1c2VkIGZvciBlYWNoIGtleSBldmVudC4gU28sCisgICAgICAgIFRvVW5p
Y29kZUV4IGlzIHVzZWQgdG8gY29udmVydCBhbGwgdmlydHVhbCBrZXlzIHdpdGggYWxsIG1vZGlm
aWVyCisgICAgICAgIGNvbWJpbmF0aW9ucyBiZWZvcmVoYW5kLgorCisgICAgICAgIFRoaXMgY2hh
bmdlIHR1cm5zIG9uIEVOQUJMRV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIGFuZAorICAgICAgICBF
TkFCTEVfS0VZQk9BUkRfQ09ERV9BVFRSSUJVVEUgbWFjcm9zIGZvciBhbGwgcG9ydHMuIEEgZm9s
bG93LXVwCisgICAgICAgIHBhdGNoIHdpbGwgcmVtb3ZlIHRoZSBtYWNyb3MuCisKKyAgICAgICAg
RXhpc3RpbmcgdGVzdHMgY292ZXJzLgorCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndpbmRvd3NLZXlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1dpbmRv
d3NLZXlOYW1lcy5jcHA6IEFkZGVkLgorICAgICAgICAoaGFzQ29udHJvbEFuZEFsdCk6CisgICAg
ICAgIChnZXRNb2RpZmllckZsYWdzKToKKyAgICAgICAgKG5vblByaW50YWJsZVZpcnR1YWxLZXlU
b0RvbUtleSk6CisgICAgICAgIChXaW5kb3dzS2V5TmFtZXM6OldpbmRvd3NLZXlOYW1lcyk6Cisg
ICAgICAgIChXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZyb21MUGFyYW0pOgorICAgICAgICAoc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAgKFdpbmRvd3NLZXlOYW1lczo6ZG9tS2V5RnJv
bUNoYXIpOgorICAgICAgICAoV2luZG93c0tleU5hbWVzOjpkb21Db2RlRnJvbUxQYXJhbSk6Cisg
ICAgICAgIChXaW5kb3dzS2V5TmFtZXM6OnVwZGF0ZUxheW91dCk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oOiBBZGRlZC4KKwogMjAxOS0xMS0yNSAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gVXNlIEZvbnRDYXNj
YWRlOjpzcGFjZVdpZHRoIHRvIG1lYXN1cmUgc2luZ2xlIG9yIGNvbGxhcHNlZCB3aGl0ZXNwYWNl
IGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggOWQzM2E4MjhjZGQzNjE3ODI4Y2MxNDNhN2IyNzc4YmUwNTIw
ODVhNS4uY2Q5Yzk0NmIwNmY0YzFjMjZlMjhkM2ZiYjFiYWM2Yzg3ZjMwZGJlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0xMS0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5G
dWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luXSBVcGRhdGUgS2V5Ym9hcmRFdmVudCBhcyBw
ZXIgdGhlIGxhdGVzdCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIxODMKKworICAgICAgICBSZXZpZXdlZCBieSBSb3NzIEtp
cnNsaW5nLgorCisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Lmg6CisgICAgICAgICogU2hhcmVk
L1dlYktleWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50
OjpXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9y
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OndpbmRvd3NLZXlOYW1lcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudCk6CisKIDIwMTktMTEt
MjUgIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vva0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtHVEtd
IENoZWNrIEVHTCBpbWFnZSBleHRlbnNpb24gYnkgdXNpbmcgbmF0aXZlIGdsIEFQSSBpbiBBY2Nl
bGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zl
YXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDUy
MzhlNzkxYzIyODliMTA0OGMyZjkwN2FhNjU1ZGRjZjVkM2YwMjIuLjg2NGRmNDY5ZGMyYmMzN2Mz
MGI3NDM0N2JmZDQwNGU4YzExNzlmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1
cmVEZWZpbmVzLmgKKysrIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaApAQCAtNzUx
LDExICs3NTEsMTEgQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBTZWUgPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE3OTE2Nz4uICovCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9LRVlCT0FSRF9L
RVlfQVRUUklCVVRFKQotI2RlZmluZSBFTkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSAwCisj
ZGVmaW5lIEVOQUJMRV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFIDEKICNlbmRpZgogCiAjaWYgIWRl
ZmluZWQoRU5BQkxFX0tFWUJPQVJEX0NPREVfQVRUUklCVVRFKQotI2RlZmluZSBFTkFCTEVfS0VZ
Qk9BUkRfQ09ERV9BVFRSSUJVVEUgMAorI2RlZmluZSBFTkFCTEVfS0VZQk9BUkRfQ09ERV9BVFRS
SUJVVEUgMQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMTAyMDZmZTQ3YzY4OGFiZTRkNGQwNGY3Nzk3
Mzc5MTZjZGI4MGFlYS4uZDFmZDRlYjEyZGQ5NzExMDAxODBlYTgwNTZlZDQ4NjU2OWZjOTA2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEwNyw2ICsxMDcsNyBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAKICAg
ICBwbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAogICAgIHBsYXRmb3JtL3dpbi9XaW5kb3dNZXNz
YWdlQnJvYWRjYXN0ZXIuY3BwCisgICAgcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5jcHAK
IAogICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKICkKQEAgLTE0Miw2ICsxNDMsNyBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0
Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd01l
c3NhZ2VCcm9hZGNhc3Rlci5oCiAgICAgcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VMaXN0ZW5l
ci5oCisgICAgcGxhdGZvcm0vd2luL1dpbmRvd3NLZXlOYW1lcy5oCiAgICAgcGxhdGZvcm0vd2lu
L1dpbmRvd3NUb3VjaC5oCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9LZXlFdmVudFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vS2V5RXZl
bnRXaW4uY3BwCmluZGV4IGIyMzU2YzVmNGZjNGQ0NjdkOGNjNDc1ZjdiY2JmNTc0NzJjZWMxNzku
LjQ0NzM3Njg2MTg3YTA2YTkyYzQwOGVhNjBiNjNhNDhhYzg0ODEzMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9LZXlFdmVudFdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0tleUV2ZW50V2luLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogCisj
aW5jbHVkZSAiV2luZG93c0tleU5hbWVzLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1
ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgpAQCAtMjE4
LDEwICsyMTksMTggQEAgc3RhdGljIGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KFVDaGFyIGMpCiAgICAgcmV0dXJuIFN0cmluZygmYywgMSk7CiB9CiAKK3N0YXRpYyBXaW5kb3dz
S2V5TmFtZXMmIHdpbmRvd3NLZXlOYW1lcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFdpbmRvd3NLZXlOYW1lcz4ga2V5TmFtZXM7CisgICAgcmV0dXJuIGtleU5hbWVzOworfQorCiBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChIV05ELCBXUEFSQU0g
Y29kZSwgTFBBUkFNIGtleURhdGEsIFR5cGUgdHlwZSwgYm9vbCBzeXN0ZW1LZXkpCiAgICAgOiBQ
bGF0Zm9ybUV2ZW50KHR5cGUsIEdldEtleVN0YXRlKFZLX1NISUZUKSAmIEhJR0hfQklUX01BU0tf
U0hPUlQsIEdldEtleVN0YXRlKFZLX0NPTlRST0wpICYgSElHSF9CSVRfTUFTS19TSE9SVCwgR2V0
S2V5U3RhdGUoVktfTUVOVSkgJiBISUdIX0JJVF9NQVNLX1NIT1JULCBmYWxzZSwgV2FsbFRpbWU6
OmZyb21SYXdTZWNvbmRzKDo6R2V0VGlja0NvdW50KCkgKiAwLjAwMSkpCiAgICAgLCBtX3RleHQo
KHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhcikgPyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoY29k
ZSkgOiBTdHJpbmcoKSkKICAgICAsIG1fdW5tb2RpZmllZFRleHQoKHR5cGUgPT0gUGxhdGZvcm1F
dmVudDo6Q2hhcikgPyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoY29kZSkgOiBTdHJpbmcoKSkKKyAg
ICAsIG1fa2V5KHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciA/IHdpbmRvd3NLZXlOYW1lcygp
LmRvbUtleUZyb21DaGFyKGNvZGUpIDogd2luZG93c0tleU5hbWVzKCkuZG9tS2V5RnJvbUxQYXJh
bShrZXlEYXRhKSkKKyAgICAsIG1fY29kZSh3aW5kb3dzS2V5TmFtZXMoKS5kb21Db2RlRnJvbUxQ
YXJhbShrZXlEYXRhKSkKICAgICAsIG1fa2V5SWRlbnRpZmllcigodHlwZSA9PSBQbGF0Zm9ybUV2
ZW50OjpDaGFyKSA/IFN0cmluZygpIDoga2V5SWRlbnRpZmllckZvcldpbmRvd3NLZXlDb2RlKGNv
ZGUpKQogICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUoKHR5cGUgPT0gUmF3S2V5RG93biB8
fCB0eXBlID09IEtleVVwKSA/IHdpbmRvd3NLZXljb2RlV2l0aExvY2F0aW9uKGNvZGUsIGtleURh
dGEpIDogMCkKICAgICAsIG1fYXV0b1JlcGVhdChISVdPUkQoa2V5RGF0YSkgJiBLRl9SRVBFQVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQzZDQ1ZDk3ZTEwNGZlNzMzODIwMmUwZWQ2OGFkMWM2NDhjMWMyMzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVz
LmNwcApAQCAtMCwwICsxLDUzNCBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpbmRvd3NL
ZXlOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgV2luZG93c0tl
eU5hbWVzOjpLZXlNb2RpZmllciA6IHVpbnQ4X3QgeworICAgIFNoaWZ0ID0gMSA8PCAwLAorICAg
IENvbnRyb2wgPSAxIDw8IDEsCisgICAgQWx0ID0gMSA8PCAyLAorICAgIENhcHNMb2NrID0gMSA8
PCAzLAorfTsKKworc3RhdGljIHZvaWQgc2V0TW9kaWZpZXJTdGF0ZShCWVRFKiBrZXlib2FyZFN0
YXRlLCBXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyU2V0IG1vZGlmaWVycykKK3sKKyAgICAv
LyBBY2NvcmRpbmcgdG8gTVNETiBHZXRLZXlTdGF0ZSgpOgorICAgIC8vIDEuIElmIHRoZSBoaWdo
LW9yZGVyIGJpdCBpcyAxLCB0aGUga2V5IGlzIGRvd247IG90aGVyd2lzZSwgaXQgaXMgdXAuCisg
ICAgLy8gMi4gSWYgdGhlIGxvdy1vcmRlciBiaXQgaXMgMSwgdGhlIGtleSBpcyB0b2dnbGVkLiBB
IGtleSwgc3VjaCBhcyB0aGUKKyAgICAvLyAgICBDQVBTIExPQ0sga2V5LCBpcyB0b2dnbGVkIGlm
IGl0IGlzIHR1cm5lZCBvbi4gVGhlIGtleSBpcyBvZmYgYW5kCisgICAgLy8gICAgdW50b2dnbGVk
IGlmIHRoZSBsb3ctb3JkZXIgYml0IGlzIDAuCisgICAgLy8gU2VlIGh0dHBzOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjQ2MzAxLmFzcHgKKyAg
ICBpZiAobW9kaWZpZXJzLmNvbnRhaW5zKFdpbmRvd3NLZXlOYW1lczo6S2V5TW9kaWZpZXI6OlNo
aWZ0KSkKKyAgICAgICAga2V5Ym9hcmRTdGF0ZVtWS19TSElGVF0gfD0gMHg4MDsKKworICAgIGlm
IChtb2RpZmllcnMuY29udGFpbnMoV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmllcjo6Q29udHJv
bCkpCisgICAgICAgIGtleWJvYXJkU3RhdGVbVktfQ09OVFJPTF0gfD0gMHg4MDsKKworICAgIGlm
IChtb2RpZmllcnMuY29udGFpbnMoV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmllcjo6QWx0KSkK
KyAgICAgICAga2V5Ym9hcmRTdGF0ZVtWS19NRU5VXSB8PSAweDgwOworCisgICAgaWYgKG1vZGlm
aWVycy5jb250YWlucyhXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyOjpDYXBzTG9jaykpCisg
ICAgICAgIGtleWJvYXJkU3RhdGVbVktfQ0FQSVRBTF0gfD0gMHgwMTsKK30KKworc3RhdGljIGJv
b2wgaGFzQ29udHJvbEFuZEFsdChXaW5kb3dzS2V5TmFtZXM6OktleU1vZGlmaWVyU2V0IG1vZGlm
aWVycykKK3sKKyAgICByZXR1cm4gbW9kaWZpZXJzLmNvbnRhaW5zQWxsKHsgV2luZG93c0tleU5h
bWVzOjpLZXlNb2RpZmllcjo6Q29udHJvbCwgV2luZG93c0tleU5hbWVzOjpLZXlNb2RpZmllcjo6
QWx0IH0pOworfQorCisvLyBUaGlzIHRhYmxlIG11c3QgYmUgc29ydGVkIGJ5ICd2aXJ0dWFsS2V5
JyBmb3IgYmluYXJ5IHNlYXJjaC4KK2NvbnN0ZXhwciBzdHJ1Y3QgTm9uUHJpbnRhYmxlS2V5RW50
cnkgeworICAgIGludCB2aXJ0dWFsS2V5OworICAgIEFTQ0lJTGl0ZXJhbCBkb21LZXk7Cit9IGNO
b25QcmludGFibGVLZXlNYXBbXSA9IHsKKyAgICB7IFZLX0NBTkNFTCwgIkNhbmNlbCJfcyB9LAor
ICAgIHsgVktfQkFDSywgIkJhY2tzcGFjZSJfcyB9LAorICAgIHsgVktfVEFCLCAiVGFiIl9zIH0s
CisgICAgeyBWS19DTEVBUiwgIkNsZWFyIl9zIH0sCisgICAgeyBWS19SRVRVUk4sICJFbnRlciJf
cyB9LAorICAgIHsgVktfU0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsgVktfQ09OVFJPTCwgIkNv
bnRyb2wiX3MgfSwKKyAgICB7IFZLX01FTlUsICJBbHQiX3MgfSwKKyAgICB7IFZLX1BBVVNFLCAi
UGF1c2UiX3MgfSwKKyAgICB7IFZLX0NBUElUQUwsICJDYXBzTG9jayJfcyB9LAorICAgIC8vIFZL
X0tBTkEgPT0gVktfSEFOR1VMCisgICAgeyBWS19KVU5KQSwgIkp1bmphTW9kZSJfcyB9LAorICAg
IHsgVktfRklOQUwsICJGSU5BTF9NT0RFIl9zIH0sCisgICAgLy8gVktfSEFOSkEgPT0gVktfS0FO
SkkKKyAgICB7IFZLX0VTQ0FQRSwgIkVzY2FwZSJfcyB9LAorICAgIHsgVktfQ09OVkVSVCwgIkNv
bnZlcnQiX3MgfSwKKyAgICB7IFZLX05PTkNPTlZFUlQsICJOb25Db252ZXJ0Il9zIH0sCisgICAg
eyBWS19BQ0NFUFQsICJBY2NlcHQiX3MgfSwKKyAgICB7IFZLX01PREVDSEFOR0UsICJNb2RlQ2hh
bmdlIl9zIH0sCisgICAgLy8gVktfU1BBQ0UKKyAgICB7IFZLX1BSSU9SLCAiUGFnZVVwIl9zIH0s
CisgICAgeyBWS19ORVhULCAiUGFnZURvd24iX3MgfSwKKyAgICB7IFZLX0VORCwgIkVuZCJfcyB9
LAorICAgIHsgVktfSE9NRSwgIkhvbWUiX3MgfSwKKyAgICB7IFZLX0xFRlQsICJBcnJvd0xlZnQi
X3MgfSwKKyAgICB7IFZLX1VQLCAiQXJyb3dVcCJfcyB9LAorICAgIHsgVktfUklHSFQsICJBcnJv
d1JpZ2h0Il9zIH0sCisgICAgeyBWS19ET1dOLCAiQXJyb3dEb3duIl9zIH0sCisgICAgeyBWS19T
RUxFQ1QsICJTZWxlY3QiX3MgfSwKKyAgICB7IFZLX1BSSU5ULCAiUHJpbnQiX3MgfSwKKyAgICB7
IFZLX0VYRUNVVEUsICJFeGVjdXRlIl9zIH0sCisgICAgeyBWS19TTkFQU0hPVCwgIlByaW50U2Ny
ZWVuIl9zIH0sCisgICAgeyBWS19JTlNFUlQsICJJbnNlcnQiX3MgfSwKKyAgICB7IFZLX0RFTEVU
RSwgIkRlbGV0ZSJfcyB9LAorICAgIHsgVktfSEVMUCwgIkhlbHAiX3MgfSwKKyAgICAvLyBWS18w
Li45CisgICAgLy8gVktfQS4uWgorICAgIHsgVktfTFdJTiwgIk1ldGEiX3MgfSwKKyAgICAvLyBW
S19DT01NQU5EID09IFZLX0xXSU4KKyAgICB7IFZLX1JXSU4sICJNZXRhIl9zIH0sCisgICAgeyBW
S19BUFBTLCAiQ29udGV4dE1lbnUiX3MgfSwKKyAgICB7IFZLX1NMRUVQLCAiU3RhbmRieSJfcyB9
LAorICAgIC8vIFZLX05VTVBBRDAuLjkKKyAgICAvLyBWS19NVUxUSVBMWSwgVktfQURELCBWS19T
RVBBUkFUT1IsIFZLX1NVQlRSQUNULCBWS19ERUNJTUFMLAorICAgIC8vIFZLX0RJVklERQorICAg
IHsgVktfRjEsICJGMSJfcyB9LAorICAgIHsgVktfRjIsICJGMiJfcyB9LAorICAgIHsgVktfRjMs
ICJGMyJfcyB9LAorICAgIHsgVktfRjQsICJGNCJfcyB9LAorICAgIHsgVktfRjUsICJGNSJfcyB9
LAorICAgIHsgVktfRjYsICJGNiJfcyB9LAorICAgIHsgVktfRjcsICJGNyJfcyB9LAorICAgIHsg
VktfRjgsICJGOCJfcyB9LAorICAgIHsgVktfRjksICJGOSJfcyB9LAorICAgIHsgVktfRjEwLCAi
RjEwIl9zIH0sCisgICAgeyBWS19GMTEsICJGMTEiX3MgfSwKKyAgICB7IFZLX0YxMiwgIkYxMiJf
cyB9LAorICAgIHsgVktfRjEzLCAiRjEzIl9zIH0sCisgICAgeyBWS19GMTQsICJGMTQiX3MgfSwK
KyAgICB7IFZLX0YxNSwgIkYxNSJfcyB9LAorICAgIHsgVktfRjE2LCAiRjE2Il9zIH0sCisgICAg
eyBWS19GMTcsICJGMTciX3MgfSwKKyAgICB7IFZLX0YxOCwgIkYxOCJfcyB9LAorICAgIHsgVktf
RjE5LCAiRjE5Il9zIH0sCisgICAgeyBWS19GMjAsICJGMjAiX3MgfSwKKyAgICB7IFZLX0YyMSwg
IkYyMSJfcyB9LAorICAgIHsgVktfRjIyLCAiRjIyIl9zIH0sCisgICAgeyBWS19GMjMsICJGMjMi
X3MgfSwKKyAgICB7IFZLX0YyNCwgIkYyNCJfcyB9LAorICAgIHsgVktfTlVNTE9DSywgIk51bUxv
Y2siX3MgfSwKKyAgICB7IFZLX1NDUk9MTCwgIlNjcm9sbExvY2siX3MgfSwKKyAgICB7IFZLX0xT
SElGVCwgIlNoaWZ0Il9zIH0sCisgICAgeyBWS19SU0hJRlQsICJTaGlmdCJfcyB9LAorICAgIHsg
VktfTENPTlRST0wsICJDb250cm9sIl9zIH0sCisgICAgeyBWS19SQ09OVFJPTCwgIkNvbnRyb2wi
X3MgfSwKKyAgICB7IFZLX0xNRU5VLCAiQWx0Il9zIH0sCisgICAgeyBWS19STUVOVSwgIkFsdCJf
cyB9LAorICAgIHsgVktfQlJPV1NFUl9CQUNLLCAiQnJvd3NlckJhY2siX3MgfSwKKyAgICB7IFZL
X0JST1dTRVJfRk9SV0FSRCwgIkJyb3dzZXJGb3J3YXJkIl9zIH0sCisgICAgeyBWS19CUk9XU0VS
X1JFRlJFU0gsICJCcm93c2VyUmVmcmVzaCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9TVE9QLCAi
QnJvd3NlclN0b3AiX3MgfSwKKyAgICB7IFZLX0JST1dTRVJfU0VBUkNILCAiQnJvd3NlclNlYXJj
aCJfcyB9LAorICAgIHsgVktfQlJPV1NFUl9GQVZPUklURVMsICJCcm93c2VyRmF2b3JpdGVzIl9z
IH0sCisgICAgeyBWS19CUk9XU0VSX0hPTUUsICJCcm93c2VySG9tZSJfcyB9LAorICAgIHsgVktf
Vk9MVU1FX01VVEUsICJBdWRpb1ZvbHVtZSJfcyB9LAorICAgIHsgVktfVk9MVU1FX0RPV04sICJB
dWRpb1ZvbHVtZURvd24iX3MgfSwKKyAgICB7IFZLX1ZPTFVNRV9VUCwgIkF1ZGlvVm9sdW1lVXAi
X3MgfSwKKyAgICB7IFZLX01FRElBX05FWFRfVFJBQ0ssICJNZWRpYVRyYWNrTmV4dCJfcyB9LAor
ICAgIHsgVktfTUVESUFfUFJFVl9UUkFDSywgIk1lZGlhVHJhY2tQcmV2aW91cyJfcyB9LAorICAg
IHsgVktfTUVESUFfU1RPUCwgIk1lZGlhU3RvcCJfcyB9LAorICAgIHsgVktfTUVESUFfUExBWV9Q
QVVTRSwgIk1lZGlhUGxheVBhdXNlIl9zIH0sCisgICAgLy8gVktfT0VNXzEuLjgsIDEwMiwgUExV
UywgQ09NTUEsIE1JTlVTLCBQRVJJT0QKKyAgICB7IFZLX1BST0NFU1NLRVksICJQcm9jZXNzIl9z
IH0sCisgICAgLy8gVktfUEFDS0VUIC0gVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhciwgY29uc2lk
ZXJlZCBhcyBwcmludGFibGUga2V5LgorICAgIHsgVktfQVRUTiwgIkF0dG4iX3MgfSwKKyAgICB7
IFZLX0NSU0VMLCAiQ3JTZWwiX3MgfSwKKyAgICB7IFZLX0VYU0VMLCAiRXhTZWwiX3MgfSwKKyAg
ICB7IFZLX0VSRU9GLCAiRXJhc2VFb2YiX3MgfSwKKyAgICB7IFZLX1BMQVksICJQbGF5Il9zIH0s
CisgICAgeyBWS19aT09NLCAiWm9vbVRvZ2dsZSJfcyB9LAorICAgIHsgVktfT0VNX0NMRUFSLCAi
Q2xlYXIiX3MgfSwKK307CisKKy8vIERpc2FtYmlndWF0ZXMgdGhlIG1lYW5pbmcgb2YgY2VydGFp
biBub24tcHJpbnRhYmxlIGtleXMgd2hpY2ggaGF2ZSBkaWZmZXJlbnQKKy8vIG1lYW5pbmdzIHVu
ZGVyIGRpZmZlcmVudCBsYW5ndWFnZXMsIGJ1dCB1c2UgdGhlIHNhbWUgVktFWSBjb2RlLgorc3Rh
dGljIFN0cmluZyBsYW5ndWFnZVNwZWNpZmljT2VtVmlydHVhbEtleVRvRG9tS2V5KGludCB2aXJ0
dWFsS2V5LCBIS0wgbGF5b3V0KQoreworICAgIFdPUkQgbGFuZ3VhZ2UgPSBMT1dPUkQobGF5b3V0
KTsKKyAgICBXT1JEIHByaW1hcnlMYW5ndWFnZSA9IFBSSU1BUllMQU5HSUQobGFuZ3VhZ2UpOwor
ICAgIGlmIChwcmltYXJ5TGFuZ3VhZ2UgPT0gTEFOR19LT1JFQU4pIHsKKyAgICAgICAgc3dpdGNo
ICh2aXJ0dWFsS2V5KSB7CisgICAgICAgIGNhc2UgVktfSEFOR1VMOgorICAgICAgICAgICAgcmV0
dXJuICJIYW5ndWxNb2RlIl9zOworICAgICAgICBjYXNlIFZLX0hBTkpBOgorICAgICAgICAgICAg
cmV0dXJuICJIYW5qYU1vZGUiX3M7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHByaW1hcnlMYW5ndWFnZSA9
PSBMQU5HX0pBUEFORVNFKSB7CisgICAgICAgIHN3aXRjaCAodmlydHVhbEtleSkgeworICAgICAg
ICAvLyBWS19LQU5BIGlzbid0IGdlbmVyYXRlZCBieSBhbnkgbW9kZXJuIGxheW91dHMgYnV0IGlz
IGEgbGlzdGVkIHZhbHVlCisgICAgICAgIC8vIHRoYXQgdGhpcmQtcGFydHkgYXBwcyBtaWdodCBz
eW50aGVzaXplLCBzbyB3ZSBoYW5kbGUgaXQgYW55d2F5LgorICAgICAgICBjYXNlIFZLX0tBTkE6
CisgICAgICAgIGNhc2UgVktfQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiS2FuYU1vZGUiX3M7
CisgICAgICAgIGNhc2UgVktfS0FOSkk6CisgICAgICAgICAgICByZXR1cm4gIkthbmppTW9kZSJf
czsKKyAgICAgICAgY2FzZSBWS19PRU1fQVRUTjoKKyAgICAgICAgICAgIHJldHVybiAiQWxwaGFu
dW1lcmljIl9zOworICAgICAgICBjYXNlIFZLX09FTV9GSU5JU0g6CisgICAgICAgICAgICByZXR1
cm4gIkthdGFrYW5hIl9zOworICAgICAgICBjYXNlIFZLX09FTV9DT1BZOgorICAgICAgICAgICAg
cmV0dXJuICJIaXJhZ2FuYSJfczsKKyAgICAgICAgY2FzZSBWS19PRU1fQkFDS1RBQjoKKyAgICAg
ICAgICAgIHJldHVybiAiUm9tYWppIl9zOworICAgICAgICBjYXNlIFZLX09FTV9BVVRPOgorICAg
ICAgICAgICAgcmV0dXJuICJIYW5rYWt1Il9zOworICAgICAgICBjYXNlIFZLX09FTV9FTkxXOgor
ICAgICAgICAgICAgcmV0dXJuICJaZW5rYWt1Il9zOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworc3RhdGljIFN0cmluZyBub25QcmludGFibGVWaXJ0dWFsS2V5VG9Eb21LZXko
aW50IHZpcnR1YWxLZXksIEhLTCBsYXlvdXQpCit7CisgICAgLy8gMS4gQ2hlY2sgaWYgfHZpcnR1
YWxLZXl8IGhhcyBhIHxsYXlvdXR8LXNwZWNpZmljIG1lYW5pbmcuCisgICAgY29uc3QgU3RyaW5n
IGtleSA9IGxhbmd1YWdlU3BlY2lmaWNPZW1WaXJ0dWFsS2V5VG9Eb21LZXkodmlydHVhbEtleSwg
bGF5b3V0KTsKKyAgICBpZiAoIWtleS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKwor
ICAgIC8vIDIuIE1vc3QgfHZpcnR1YWxLZXlzfCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgcmVnYXJk
bGVzcyBvZiB8bGF5b3V0fC4KKyAgICBjb25zdCBOb25QcmludGFibGVLZXlFbnRyeSogcmVzdWx0
ID0gc3RkOjpsb3dlcl9ib3VuZCgKKyAgICAgICAgc3RkOjpiZWdpbihjTm9uUHJpbnRhYmxlS2V5
TWFwKSwgc3RkOjplbmQoY05vblByaW50YWJsZUtleU1hcCksIHZpcnR1YWxLZXksCisgICAgICAg
IFtdKGNvbnN0IE5vblByaW50YWJsZUtleUVudHJ5JiBlbnRyeSwgaW50IG5lZWRsZSkgeworICAg
ICAgICAgICAgcmV0dXJuIGVudHJ5LnZpcnR1YWxLZXkgPCBuZWVkbGU7CisgICAgICAgIH0pOwor
ICAgIGlmIChyZXN1bHQgIT0gc3RkOjplbmQoY05vblByaW50YWJsZUtleU1hcCkgJiYgcmVzdWx0
LT52aXJ0dWFsS2V5ID09IHZpcnR1YWxLZXkpCisgICAgICAgIHJldHVybiByZXN1bHQtPmRvbUtl
eTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworV2luZG93c0tleU5hbWVzOjpXaW5kb3dz
S2V5TmFtZXMoKQoreworICAgIHVwZGF0ZUxheW91dCgpOworfQorCitTdHJpbmcgV2luZG93c0tl
eU5hbWVzOjpkb21LZXlGcm9tTFBhcmFtKExQQVJBTSBsUGFyYW0pCit7CisgICAgdW5zaWduZWQg
c2NhbkNvZGUgPSAobFBhcmFtID4+IDE2KSAmIDB4ZmY7CisgICAgYm9vbCBleHRlbmRlZCA9IGxQ
YXJhbSAmIDB4MDEwMDAwMDA7CisgICAgdW5zaWduZWQgdmlydHVhbEtleSA9IE1hcFZpcnR1YWxL
ZXkoc2NhbkNvZGUsIE1BUFZLX1ZTQ19UT19WSyk7CisgICAgS2V5TW9kaWZpZXJTZXQgbW9kaWZp
ZXJzOworICAgIGlmIChHZXRLZXlTdGF0ZShWS19TSElGVCkgPCAwKQorICAgICAgICBtb2RpZmll
cnMuYWRkKEtleU1vZGlmaWVyOjpTaGlmdCk7CisgICAgaWYgKEdldEtleVN0YXRlKFZLX0NPTlRS
T0wpIDwgMCkKKyAgICAgICAgbW9kaWZpZXJzLmFkZChLZXlNb2RpZmllcjo6Q29udHJvbCk7Cisg
ICAgaWYgKEdldEtleVN0YXRlKFZLX01FTlUgKSA8IDApCisgICAgICAgIG1vZGlmaWVycy5hZGQo
S2V5TW9kaWZpZXI6OkFsdCk7CisgICAgaWYgKEdldEtleVN0YXRlKFZLX0NBUElUQUwpICYgMSkK
KyAgICAgICAgbW9kaWZpZXJzLmFkZChLZXlNb2RpZmllcjo6Q2Fwc0xvY2spOworCisgICAgdXBk
YXRlTGF5b3V0KCk7CisgICAgLy8gV2luZG93cyBleHByZXNzZXMgcmlnaHQtQWx0IGFzIFZLX01F
TlUgd2l0aCB0aGUgZXh0ZW5kZWQgZmxhZyBzZXQuCisgICAgLy8gVGhpcyBrZXkgc2hvdWxkIGdl
bmVyYXRlIEFsdEdyYXBoIHVuZGVyIGxheW91dHMgd2hpY2ggdXNlIHRoYXQgbW9kaWZpZXIuCisg
ICAgaWYgKHZpcnR1YWxLZXkgPT0gVktfTUVOVSAmJiBleHRlbmRlZCAmJiBtX2hhc0FsdEdyYXBo
KQorICAgICAgICByZXR1cm4gIkFsdEdyYXBoIl9zOworCisgICAgU3RyaW5nIGtleSA9IG5vblBy
aW50YWJsZVZpcnR1YWxLZXlUb0RvbUtleSh2aXJ0dWFsS2V5LCBtX2tleWJvYXJkTGF5b3V0KTsK
KyAgICBpZiAoIWtleS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKworICAgIGNvbnN0
IEtleU1vZGlmaWVyU2V0IG1vZGlmaWVyc1RvVHJ5W10gPSB7CisgICAgICAgIC8vIFRyeWluZyB0
byBtYXRjaCBGaXJlZm94J3MgYmVoYXZpb3IgYW5kIFVJRXZlbnRzIERvbUtleSBndWlkZWxpbmVz
LgorICAgICAgICAvLyBJZiB0aGUgY29tYmluYXRpb24gZG9lc24ndCBwcm9kdWNlIGEgcHJpbnRh
YmxlIGNoYXJhY3RlciwgdGhlIGtleSB2YWx1ZQorICAgICAgICAvLyBzaG91bGQgYmUgdGhlIGtl
eSB3aXRoIG5vIG1vZGlmaWVycyBleGNlcHQgZm9yIFNoaWZ0IGFuZCBBbHRHci4KKyAgICAgICAg
Ly8gU2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8ja2V5cy1ndWlkZWxpbmVzCisg
ICAgICAgIG1vZGlmaWVycywKKyAgICAgICAgS2V5TW9kaWZpZXJTZXQoeyBLZXlNb2RpZmllcjo6
U2hpZnQsIEtleU1vZGlmaWVyOjpDYXBzTG9jayB9KSAmIG1vZGlmaWVycywKKyAgICB9OworCisg
ICAgZm9yIChhdXRvIHRyeU1vZGlmaWVycyA6IG1vZGlmaWVyc1RvVHJ5KSB7CisgICAgICAgIGNv
bnN0IGF1dG8mIGl0ID0gbV9wcmludGFibGVLZXlDb2RlVG9LZXkuZmluZChzdGQ6Om1ha2VfcGFp
cih2aXJ0dWFsS2V5LCB0cnlNb2RpZmllcnMpKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fcHJpbnRh
YmxlS2V5Q29kZVRvS2V5LmVuZCgpKSB7CisgICAgICAgICAgICBrZXkgPSBpdC0+dmFsdWU7Cisg
ICAgICAgICAgICBpZiAoIWtleS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICJVbmlkZW50aWZpZWQiX3M7Cit9CisK
K1N0cmluZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUtleUZyb21DaGFyKFVDaGFyIGMpCit7CisgICAg
c3dpdGNoIChjKSB7CisgICAgY2FzZSAnXHgxYic6CisgICAgICAgIHJldHVybiAiRXNjYXBlIl9z
OworICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgcmV0dXJuICJUYWIiX3M7CisgICAgY2FzZSAnXHIn
OgorICAgICAgICByZXR1cm4gIkVudGVyIl9zOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gbWFrZVN0cmluZyhjKTsKK30KKworLy8gVGhpcyB0YWJsZSBt
dXN0IGJlIHNvcnRlZCBieSAnc2NhbkNvZGUnIGZvciBiaW5hcnkgc2VhcmNoLgorY29uc3RleHBy
IHN0cnVjdCB7CisgICAgdW5zaWduZWQgc2NhbkNvZGU7CisgICAgQVNDSUlMaXRlcmFsIGRvbUNv
ZGU7Cit9IGNEb21Db2RlTWFwW10gPSB7CisgICAgeyAweDAwMDEsICJFc2NhcGUiX3MgfSwKKyAg
ICB7IDB4MDAwMiwgIkRpZ2l0MSJfcyB9LAorICAgIHsgMHgwMDAzLCAiRGlnaXQyIl9zIH0sCisg
ICAgeyAweDAwMDQsICJEaWdpdDMiX3MgfSwKKyAgICB7IDB4MDAwNSwgIkRpZ2l0NCJfcyB9LAor
ICAgIHsgMHgwMDA2LCAiRGlnaXQ1Il9zIH0sCisgICAgeyAweDAwMDcsICJEaWdpdDYiX3MgfSwK
KyAgICB7IDB4MDAwOCwgIkRpZ2l0NyJfcyB9LAorICAgIHsgMHgwMDA5LCAiRGlnaXQ4Il9zIH0s
CisgICAgeyAweDAwMGEsICJEaWdpdDkiX3MgfSwKKyAgICB7IDB4MDAwYiwgIkRpZ2l0MCJfcyB9
LAorICAgIHsgMHgwMDBjLCAiTWludXMiX3MgfSwKKyAgICB7IDB4MDAwZCwgIkVxdWFsIl9zIH0s
CisgICAgeyAweDAwMGUsICJCYWNrc3BhY2UiX3MgfSwKKyAgICB7IDB4MDAwZiwgIlRhYiJfcyB9
LAorICAgIHsgMHgwMDEwLCAiS2V5USJfcyB9LAorICAgIHsgMHgwMDExLCAiS2V5VyJfcyB9LAor
ICAgIHsgMHgwMDEyLCAiS2V5RSJfcyB9LAorICAgIHsgMHgwMDEzLCAiS2V5UiJfcyB9LAorICAg
IHsgMHgwMDE0LCAiS2V5VCJfcyB9LAorICAgIHsgMHgwMDE1LCAiS2V5WSJfcyB9LAorICAgIHsg
MHgwMDE2LCAiS2V5VSJfcyB9LAorICAgIHsgMHgwMDE3LCAiS2V5SSJfcyB9LAorICAgIHsgMHgw
MDE4LCAiS2V5TyJfcyB9LAorICAgIHsgMHgwMDE5LCAiS2V5UCJfcyB9LAorICAgIHsgMHgwMDFh
LCAiQnJhY2tldExlZnQiX3MgfSwKKyAgICB7IDB4MDAxYiwgIkJyYWNrZXRSaWdodCJfcyB9LAor
ICAgIHsgMHgwMDFjLCAiRW50ZXIiX3MgfSwKKyAgICB7IDB4MDAxZCwgIkNvbnRyb2xMZWZ0Il9z
IH0sCisgICAgeyAweDAwMWUsICJLZXlBIl9zIH0sCisgICAgeyAweDAwMWYsICJLZXlTIl9zIH0s
CisgICAgeyAweDAwMjAsICJLZXlEIl9zIH0sCisgICAgeyAweDAwMjEsICJLZXlGIl9zIH0sCisg
ICAgeyAweDAwMjIsICJLZXlHIl9zIH0sCisgICAgeyAweDAwMjMsICJLZXlIIl9zIH0sCisgICAg
eyAweDAwMjQsICJLZXlKIl9zIH0sCisgICAgeyAweDAwMjUsICJLZXlLIl9zIH0sCisgICAgeyAw
eDAwMjYsICJLZXlMIl9zIH0sCisgICAgeyAweDAwMjcsICJTZW1pY29sb24iX3MgfSwKKyAgICB7
IDB4MDAyOCwgIlF1b3RlIl9zIH0sCisgICAgeyAweDAwMjksICJCYWNrcXVvdGUiX3MgfSwKKyAg
ICB7IDB4MDAyYSwgIlNoaWZ0TGVmdCJfcyB9LAorICAgIHsgMHgwMDJiLCAiQmFja3NsYXNoIl9z
IH0sCisgICAgeyAweDAwMmMsICJLZXlaIl9zIH0sCisgICAgeyAweDAwMmQsICJLZXlYIl9zIH0s
CisgICAgeyAweDAwMmUsICJLZXlDIl9zIH0sCisgICAgeyAweDAwMmYsICJLZXlWIl9zIH0sCisg
ICAgeyAweDAwMzAsICJLZXlCIl9zIH0sCisgICAgeyAweDAwMzEsICJLZXlOIl9zIH0sCisgICAg
eyAweDAwMzIsICJLZXlNIl9zIH0sCisgICAgeyAweDAwMzMsICJDb21tYSJfcyB9LAorICAgIHsg
MHgwMDM0LCAiUGVyaW9kIl9zIH0sCisgICAgeyAweDAwMzUsICJTbGFzaCJfcyB9LAorICAgIHsg
MHgwMDM2LCAiU2hpZnRSaWdodCJfcyB9LAorICAgIHsgMHgwMDM3LCAiTnVtcGFkTXVsdGlwbHki
X3MgfSwKKyAgICB7IDB4MDAzOCwgIkFsdExlZnQiX3MgfSwKKyAgICB7IDB4MDAzOSwgIlNwYWNl
Il9zIH0sCisgICAgeyAweDAwM2EsICJDYXBzTG9jayJfcyB9LAorICAgIHsgMHgwMDNiLCAiRjEi
X3MgfSwKKyAgICB7IDB4MDAzYywgIkYyIl9zIH0sCisgICAgeyAweDAwM2QsICJGMyJfcyB9LAor
ICAgIHsgMHgwMDNlLCAiRjQiX3MgfSwKKyAgICB7IDB4MDAzZiwgIkY1Il9zIH0sCisgICAgeyAw
eDAwNDAsICJGNiJfcyB9LAorICAgIHsgMHgwMDQxLCAiRjciX3MgfSwKKyAgICB7IDB4MDA0Miwg
IkY4Il9zIH0sCisgICAgeyAweDAwNDMsICJGOSJfcyB9LAorICAgIHsgMHgwMDQ0LCAiRjEwIl9z
IH0sCisgICAgeyAweDAwNDUsICJQYXVzZSJfcyB9LAorICAgIHsgMHgwMDQ2LCAiU2Nyb2xsTG9j
ayJfcyB9LAorICAgIHsgMHgwMDQ3LCAiTnVtcGFkNyJfcyB9LAorICAgIHsgMHgwMDQ4LCAiTnVt
cGFkOCJfcyB9LAorICAgIHsgMHgwMDQ5LCAiTnVtcGFkOSJfcyB9LAorICAgIHsgMHgwMDRhLCAi
TnVtcGFkU3VidHJhY3QiX3MgfSwKKyAgICB7IDB4MDA0YiwgIk51bXBhZDQiX3MgfSwKKyAgICB7
IDB4MDA0YywgIk51bXBhZDUiX3MgfSwKKyAgICB7IDB4MDA0ZCwgIk51bXBhZDYiX3MgfSwKKyAg
ICB7IDB4MDA0ZSwgIk51bXBhZEFkZCJfcyB9LAorICAgIHsgMHgwMDRmLCAiTnVtcGFkMSJfcyB9
LAorICAgIHsgMHgwMDUwLCAiTnVtcGFkMiJfcyB9LAorICAgIHsgMHgwMDUxLCAiTnVtcGFkMyJf
cyB9LAorICAgIHsgMHgwMDUyLCAiTnVtcGFkMCJfcyB9LAorICAgIHsgMHgwMDUzLCAiTnVtcGFk
RGVjaW1hbCJfcyB9LAorICAgIHsgMHgwMDU2LCAiSW50bEJhY2tzbGFzaCJfcyB9LAorICAgIHsg
MHgwMDU3LCAiRjExIl9zIH0sCisgICAgeyAweDAwNTgsICJGMTIiX3MgfSwKKyAgICB7IDB4MDA1
OSwgIk51bXBhZEVxdWFsIl9zIH0sCisgICAgeyAweDAwNjQsICJGMTMiX3MgfSwKKyAgICB7IDB4
MDA2NSwgIkYxNCJfcyB9LAorICAgIHsgMHgwMDY2LCAiRjE1Il9zIH0sCisgICAgeyAweDAwNjcs
ICJGMTYiX3MgfSwKKyAgICB7IDB4MDA2OCwgIkYxNyJfcyB9LAorICAgIHsgMHgwMDY5LCAiRjE4
Il9zIH0sCisgICAgeyAweDAwNmEsICJGMTkiX3MgfSwKKyAgICB7IDB4MDA2YiwgIkYyMCJfcyB9
LAorICAgIHsgMHgwMDZjLCAiRjIxIl9zIH0sCisgICAgeyAweDAwNmQsICJGMjIiX3MgfSwKKyAg
ICB7IDB4MDA2ZSwgIkYyMyJfcyB9LAorICAgIHsgMHgwMDcwLCAiS2FuYU1vZGUiX3MgfSwKKyAg
ICB7IDB4MDA3MSwgIkxhbmcyIl9zIH0sCisgICAgeyAweDAwNzIsICJMYW5nMSJfcyB9LAorICAg
IHsgMHgwMDczLCAiSW50bFJvIl9zIH0sCisgICAgeyAweDAwNzYsICJGMjQiX3MgfSwKKyAgICB7
IDB4MDA3NywgIkxhbmc0Il9zIH0sCisgICAgeyAweDAwNzgsICJMYW5nMyJfcyB9LAorICAgIHsg
MHgwMDc5LCAiQ29udmVydCJfcyB9LAorICAgIHsgMHgwMDdiLCAiTm9uQ29udmVydCJfcyB9LAor
ICAgIHsgMHgwMDdkLCAiSW50bFllbiJfcyB9LAorICAgIHsgMHgwMDdlLCAiTnVtcGFkQ29tbWEi
X3MgfSwKKyAgICB7IDB4MDEwOCwgIlVuZG8iX3MgfSwKKyAgICB7IDB4MDEwYSwgIlBhc3RlIl9z
IH0sCisgICAgeyAweDAxMTAsICJNZWRpYVRyYWNrUHJldmlvdXMiX3MgfSwKKyAgICB7IDB4MDEx
NywgIkN1dCJfcyB9LAorICAgIHsgMHgwMTE4LCAiQ29weSJfcyB9LAorICAgIHsgMHgwMTE5LCAi
TWVkaWFUcmFja05leHQiX3MgfSwKKyAgICB7IDB4MDExYywgIk51bXBhZEVudGVyIl9zIH0sCisg
ICAgeyAweDAxMWQsICJDb250cm9sUmlnaHQiX3MgfSwKKyAgICB7IDB4MDEyMCwgIkF1ZGlvVm9s
dW1lTXV0ZSJfcyB9LAorICAgIHsgMHgwMTIxLCAiTGF1bmNoQXBwMiJfcyB9LAorICAgIHsgMHgw
MTIyLCAiTWVkaWFQbGF5UGF1c2UiX3MgfSwKKyAgICB7IDB4MDEyNCwgIk1lZGlhU3RvcCJfcyB9
LAorICAgIHsgMHgwMTJjLCAiRWplY3QiX3MgfSwKKyAgICB7IDB4MDEyZSwgIkF1ZGlvVm9sdW1l
RG93biJfcyB9LAorICAgIHsgMHgwMTMwLCAiQXVkaW9Wb2x1bWVVcCJfcyB9LAorICAgIHsgMHgw
MTMyLCAiQnJvd3NlckhvbWUiX3MgfSwKKyAgICB7IDB4MDEzNSwgIk51bXBhZERpdmlkZSJfcyB9
LAorICAgIHsgMHgwMTM3LCAiUHJpbnRTY3JlZW4iX3MgfSwKKyAgICB7IDB4MDEzOCwgIkFsdFJp
Z2h0Il9zIH0sCisgICAgeyAweDAxM2IsICJIZWxwIl9zIH0sCisgICAgeyAweDAxNDUsICJOdW1M
b2NrIl9zIH0sCisgICAgeyAweDAxNDcsICJIb21lIl9zIH0sCisgICAgeyAweDAxNDgsICJBcnJv
d1VwIl9zIH0sCisgICAgeyAweDAxNDksICJQYWdlVXAiX3MgfSwKKyAgICB7IDB4MDE0YiwgIkFy
cm93TGVmdCJfcyB9LAorICAgIHsgMHgwMTRkLCAiQXJyb3dSaWdodCJfcyB9LAorICAgIHsgMHgw
MTRmLCAiRW5kIl9zIH0sCisgICAgeyAweDAxNTAsICJBcnJvd0Rvd24iX3MgfSwKKyAgICB7IDB4
MDE1MSwgIlBhZ2VEb3duIl9zIH0sCisgICAgeyAweDAxNTIsICJJbnNlcnQiX3MgfSwKKyAgICB7
IDB4MDE1MywgIkRlbGV0ZSJfcyB9LAorICAgIHsgMHgwMTViLCAiTWV0YUxlZnQiX3MgfSwKKyAg
ICB7IDB4MDE1YywgIk1ldGFSaWdodCJfcyB9LAorICAgIHsgMHgwMTVkLCAiQ29udGV4dE1lbnUi
X3MgfSwKKyAgICB7IDB4MDE1ZSwgIlBvd2VyIl9zIH0sCisgICAgeyAweDAxNWYsICJTbGVlcCJf
cyB9LAorICAgIHsgMHgwMTYzLCAiV2FrZVVwIl9zIH0sCisgICAgeyAweDAxNjUsICJCcm93c2Vy
U2VhcmNoIl9zIH0sCisgICAgeyAweDAxNjYsICJCcm93c2VyRmF2b3JpdGVzIl9zIH0sCisgICAg
eyAweDAxNjcsICJCcm93c2VyUmVmcmVzaCJfcyB9LAorICAgIHsgMHgwMTY4LCAiQnJvd3NlclN0
b3AiX3MgfSwKKyAgICB7IDB4MDE2OSwgIkJyb3dzZXJGb3J3YXJkIl9zIH0sCisgICAgeyAweDAx
NmEsICJCcm93c2VyQmFjayJfcyB9LAorICAgIHsgMHgwMTZiLCAiTGF1bmNoQXBwMSJfcyB9LAor
ICAgIHsgMHgwMTZjLCAiTGF1bmNoTWFpbCJfcyB9LAorICAgIHsgMHgwMTZkLCAiTWVkaWFTZWxl
Y3QiX3MgfSwKK307CisKK1N0cmluZyBXaW5kb3dzS2V5TmFtZXM6OmRvbUNvZGVGcm9tTFBhcmFt
KExQQVJBTSBsUGFyYW0pCit7CisgICAgdW5zaWduZWQgZXh0ZW5kZWRTY2FuQ29kZSA9IChsUGFy
YW0gPj4gMTYpICYgMHgxZmY7CisgICAgY29uc3QgYXV0byogcmVzdWx0ID0gc3RkOjpsb3dlcl9i
b3VuZCgKKyAgICAgICAgc3RkOjpiZWdpbihjRG9tQ29kZU1hcCksIHN0ZDo6ZW5kKGNEb21Db2Rl
TWFwKSwgZXh0ZW5kZWRTY2FuQ29kZSwKKyAgICAgICAgW10oY29uc3QgYXV0byYgZW50cnksIGlu
dCBuZWVkbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5zY2FuQ29kZSA8IG5lZWRsZTsK
KyAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdCAhPSBzdGQ6OmVuZChjRG9tQ29kZU1hcCkgJiYg
cmVzdWx0LT5zY2FuQ29kZSA9PSBleHRlbmRlZFNjYW5Db2RlKQorICAgICAgICByZXR1cm4gcmVz
dWx0LT5kb21Db2RlOworCisgICAgcmV0dXJuICJVbmlkZW50aWZpZWQiX3M7Cit9CisKK3ZvaWQg
V2luZG93c0tleU5hbWVzOjp1cGRhdGVMYXlvdXQoKQoreworICAgIEhLTCBjdXJyZW50TGF5b3V0
ID0gR2V0S2V5Ym9hcmRMYXlvdXQoMCk7CisgICAgaWYgKGN1cnJlbnRMYXlvdXQgPT0gbV9rZXli
b2FyZExheW91dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQllURSBrZXlib2FyZFN0YXRlVG9S
ZXN0b3JlWzI1Nl07CisgICAgaWYgKCFHZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkU3RhdGVUb1Jl
c3RvcmUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2tleWJvYXJkTGF5b3V0ID0gY3VycmVu
dExheW91dDsKKyAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5jbGVhcigpOworICAgIG1faGFz
QWx0R3JhcGggPSBmYWxzZTsKKworICAgIC8vIE1hcCBzaXplIGZvciBzb21lIHNhbXBsZSBrZXli
b2FyZCBsYXlvdXRzOgorICAgIC8vIFVTOiA0NzYsIEZyZW5jaDogNjAyLCBQZXJzaWFuOiA0ODIs
IFZpZXRuYW1lc2U6IDE0MzYKKyAgICBtX3ByaW50YWJsZUtleUNvZGVUb0tleS5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDE1MDApOworCisgICAgS2V5TW9kaWZpZXJTZXQgYWxsQ29tYmluYXRpb24g
eyBLZXlNb2RpZmllcjo6U2hpZnQsIEtleU1vZGlmaWVyOjpDb250cm9sLCBLZXlNb2RpZmllcjo6
QWx0LCBLZXlNb2RpZmllcjo6Q2Fwc0xvY2sgfTsKKworICAgIGZvciAoaW50IGNvbWJpbmF0aW9u
ID0gMDsgY29tYmluYXRpb24gPD0gYWxsQ29tYmluYXRpb24udG9SYXcoKTsgKytjb21iaW5hdGlv
bikgeworICAgICAgICBCWVRFIGtleWJvYXJkU3RhdGVbMjU2XSA9IHsgfTsKKworICAgICAgICAv
LyBTZXR0aW5nIHVwIGtleWJvYXJkIHN0YXRlIGZvciBtb2RpZmllcnMuCisgICAgICAgIGF1dG8g
bW9kaWZpZXJzID0gS2V5TW9kaWZpZXJTZXQ6OmZyb21SYXcoY29tYmluYXRpb24pOworICAgICAg
ICBzZXRNb2RpZmllclN0YXRlKGtleWJvYXJkU3RhdGUsIG1vZGlmaWVycyk7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCB2aXJ0dWFsS2V5ID0gMDsgdmlydHVhbEtleSA8PSAweEZGOyArK3ZpcnR1
YWxLZXkpIHsKKyAgICAgICAgICAgIHdjaGFyX3QgdHJhbnNsYXRlZENoYXJzWzVdOworICAgICAg
ICAgICAgaW50IHJ2ID0gVG9Vbmljb2RlRXgodmlydHVhbEtleSwgMCwga2V5Ym9hcmRTdGF0ZSwg
dHJhbnNsYXRlZENoYXJzLAorICAgICAgICAgICAgICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNs
YXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91dCk7CisKKyAgICAgICAgICAgIGlmIChydiA9
PSAtMSkgeworICAgICAgICAgICAgICAgIC8vIERlYWQga2V5LCBpbmplY3RpbmcgVktfU1BBQ0Ug
dG8gZ2V0IGNoYXJhY3RlciByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBCWVRFIGVt
cHR5U3RhdGVbMjU2XSA9IHsgfTsKKyAgICAgICAgICAgICAgICBydiA9IFRvVW5pY29kZUV4KFZL
X1NQQUNFLCAwLCBlbXB0eVN0YXRlLCB0cmFuc2xhdGVkQ2hhcnMsCisgICAgICAgICAgICAgICAg
ICAgIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlZENoYXJzKSwgMCwgbV9rZXlib2FyZExheW91
dCk7CisgICAgICAgICAgICAgICAgLy8gRXhwZWN0aW5nIGEgZGVhZCBrZXkgY2hhcmFjdGVyIChu
b3QgZm9sbG93ZWQgYnkgYSBzcGFjZSkuCisgICAgICAgICAgICAgICAgaWYgKHJ2ID09IDEpCisg
ICAgICAgICAgICAgICAgICAgIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5LnNldChzdGQ6Om1ha2Vf
cGFpcih2aXJ0dWFsS2V5LCBtb2RpZmllcnMpLCAiRGVhZCJfcyk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHJ2ID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZENoYXJzWzBd
ID49IDB4MjApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wcmludGFibGVLZXlDb2RlVG9LZXku
c2V0KHN0ZDo6bWFrZV9wYWlyKHZpcnR1YWxLZXksIG1vZGlmaWVycyksIFN0cmluZyh0cmFuc2xh
dGVkQ2hhcnMsIDEpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciB0
aGUgbGF5b3V0IG1ha2VzIHVzZSBvZiBBbHRHcmFwaC4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0NvbnRyb2xBbmRBbHQobW9kaWZpZXJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aGFzQWx0R3JhcGggPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBTZXRLZXlib2FyZFN0YXRlKGtleWJvYXJkU3RhdGVUb1Jlc3Rv
cmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV2luZG93c0tleU5hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZkZmVjMDg3YTFiMjRlNjZm
MmE4NDMzZWExZjkxOTkyODUxYWU3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9XaW5kb3dzS2V5TmFtZXMuaApAQCAtMCwwICsxLDYxIEBACisvLyBDb3B5
cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
Ly8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlz
dHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXRIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2luZG93c0tleU5hbWVzIHsKK3B1Ymxp
YzoKKyAgICBXaW5kb3dzS2V5TmFtZXMoKTsKKworICAgIFN0cmluZyBkb21LZXlGcm9tTFBhcmFt
KExQQVJBTSk7CisgICAgU3RyaW5nIGRvbUtleUZyb21DaGFyKFVDaGFyKTsKKyAgICBTdHJpbmcg
ZG9tQ29kZUZyb21MUGFyYW0oTFBBUkFNKTsKKworICAgIGVudW0gY2xhc3MgS2V5TW9kaWZpZXIg
OiB1aW50OF90OworICAgIHVzaW5nIEtleU1vZGlmaWVyU2V0ID0gT3B0aW9uU2V0PEtleU1vZGlm
aWVyPjsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUxheW91dCgpOworCisgICAgSEtMIG1f
a2V5Ym9hcmRMYXlvdXQgPSAwOworICAgIGJvb2wgbV9oYXNBbHRHcmFwaCA9IGZhbHNlOworCisg
ICAgdXNpbmcgVmlydHVhbEtleU1vZGlmaWVyU2V0UGFpciA9IHN0ZDo6cGFpcjx1bnNpZ25lZCwg
S2V5TW9kaWZpZXJTZXQ+OworICAgIHVzaW5nIFZpcnR1YWxLZXlUb0tleU1hcCA9IEhhc2hNYXA8
VmlydHVhbEtleU1vZGlmaWVyU2V0UGFpciwgU3RyaW5nLCBEZWZhdWx0SGFzaDxWaXJ0dWFsS2V5
TW9kaWZpZXJTZXRQYWlyPjo6SGFzaCwgUGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4sIEhhc2hUcmFpdHM8S2V5TW9kaWZpZXJTZXQ+Pj47
CisgICAgVmlydHVhbEtleVRvS2V5TWFwIG1fcHJpbnRhYmxlS2V5Q29kZVRvS2V5OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkV2ZW50LmgKaW5kZXggYzM2MTAw
Y2Y1YzQ0NmM1ZjlhZTBmMDZlOGJkOGEwZjQxZjUyN2YzYy4uN2RiYTA4ZmRlZTg4Njk5ZmIyNDZl
MjRhNDdmNzUzMWE5NTQwODU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJFdmVudC5oCkBAIC0yNjMsNyAr
MjYzLDcgQEAgcHVibGljOgogI2VsaWYgVVNFKExJQldQRSkKICAgICBXZWJLZXlib2FyZEV2ZW50
KFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxL
ZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGJvb2wgaXNLZXlwYWQsIE9wdGlvblNl
dDxNb2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZWxzZQotICAgIFdlYktleWJvYXJk
RXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRU
ZXh0LCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNv
ZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJDb2RlLCBib29sIGlzQXV0
b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgT3B0aW9uU2V0PE1vZGlm
aWVyPiwgV2FsbFRpbWUgdGltZXN0YW1wKTsKKyAgICBXZWJLZXlib2FyZEV2ZW50KFR5cGUsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVy
LCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGlu
dCBtYWNDaGFyQ29kZSwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQsIGJvb2wgaXNT
eXN0ZW1LZXksIE9wdGlvblNldDxNb2RpZmllcj4sIFdhbGxUaW1lIHRpbWVzdGFtcCk7CiAjZW5k
aWYKIAogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcAppbmRleCBhNWEyM2NmMTQ4
ZWY3Mjk3ZjdmZGQxZjlmZWM2MWZlMWZlNzM1M2U3Li4yMGQ5MzhiMjY2N2ZiN2FhZDJlYjhhMWVl
MzcyYmQ1YzlkOTZjMzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJLZXli
b2FyZEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJLZXlib2FyZEV2ZW50
LmNwcApAQCAtMTMyLDEwICsxMzIsMTIgQEAgV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRF
dmVudChUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJgogCiAjZWxz
ZQogCi1XZWJLZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0LCBjb25zdCBTdHJpbmcm
IGtleUlkZW50aWZpZXIsIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0
dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJDb2RlLCBib29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tl
eXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgT3B0aW9uU2V0PE1vZGlmaWVyPiBtb2RpZmllcnMsIFdh
bGxUaW1lIHRpbWVzdGFtcCkKK1dlYktleWJvYXJkRXZlbnQ6OldlYktleWJvYXJkRXZlbnQoVHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYga2V5
SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxL
ZXlDb2RlLCBpbnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlzS2V5cGFk
LCBib29sIGlzU3lzdGVtS2V5LCBPcHRpb25TZXQ8TW9kaWZpZXI+IG1vZGlmaWVycywgV2FsbFRp
bWUgdGltZXN0YW1wKQogICAgIDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3RhbXAp
CiAgICAgLCBtX3RleHQodGV4dCkKICAgICAsIG1fdW5tb2RpZmllZFRleHQodW5tb2RpZmllZFRl
eHQpCisgICAgLCBtX2tleShrZXkpCisgICAgLCBtX2NvZGUoY29kZSkKICAgICAsIG1fa2V5SWRl
bnRpZmllcihrZXlJZGVudGlmaWVyKQogICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUod2lu
ZG93c1ZpcnR1YWxLZXlDb2RlKQogICAgICwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZShuYXRpdmVW
aXJ0dWFsS2V5Q29kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9XZWJF
dmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9y
eS5jcHAKaW5kZXggYjNlNjI5NWQxN2RkMGM0ZWZjNzJhMzZmMGNiNzlmMzhjZjFhODU2MS4uODhk
NTNkMjM2Y2Q2ZDYyNzM1ZjAzNjc4YTA0Y2E5YzE5OGRkZGFjYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1XaGVlbEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXlOYW1lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2lu
ZG93c0tleWJvYXJkQ29kZXMuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgogI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+CkBAIC00NDYsMTEgKzQ0NywxOSBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUgogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgcG9zaXRpb24s
IGdsb2JhbFBvc2l0aW9uLCBGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpLCBGbG9hdFNpemUod2hl
ZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwgZ3JhbnVsYXJpdHksIG1vZGlmaWVycywgV2FsbFRpbWU6
Om5vdygpKTsKIH0KIAorc3RhdGljIFdpbmRvd3NLZXlOYW1lcyYgd2luZG93c0tleU5hbWVzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2luZG93c0tleU5hbWVzPiBrZXlOYW1lczsK
KyAgICByZXR1cm4ga2V5TmFtZXM7Cit9CisKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0
b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQogewogICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBr
ZXlib2FyZEV2ZW50VHlwZUZvckV2ZW50KG1lc3NhZ2UpOwogICAgIFN0cmluZyB0ZXh0ID0gdGV4
dEZyb21FdmVudCh3cGFyYW0sIHR5cGUpOwogICAgIFN0cmluZyB1bm1vZGlmaWVkVGV4dCA9IHVu
bW9kaWZpZWRUZXh0RnJvbUV2ZW50KHdwYXJhbSwgdHlwZSk7CisgICAgU3RyaW5nIGtleSA9IG1l
c3NhZ2UgPT0gV01fQ0hBUiA/IHdpbmRvd3NLZXlOYW1lcygpLmRvbUtleUZyb21DaGFyKHdwYXJh
bSkgOiB3aW5kb3dzS2V5TmFtZXMoKS5kb21LZXlGcm9tTFBhcmFtKGxwYXJhbSk7CisgICAgU3Ry
aW5nIGNvZGUgPSB3aW5kb3dzS2V5TmFtZXMoKS5kb21Db2RlRnJvbUxQYXJhbShscGFyYW0pOwog
ICAgIFN0cmluZyBrZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZyb21FdmVudCh3cGFyYW0s
IHR5cGUpOwogICAgIGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUgPSBzdGF0aWNfY2FzdDxpbnQ+
KHdwYXJhbSk7CiAgICAgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlID0gc3RhdGljX2Nhc3Q8aW50
Pih3cGFyYW0pOwpAQCAtNDYwLDcgKzQ2OSw3IEBAIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlCiAg
ICAgYm9vbCBpc1N5c3RlbUtleSA9IGlzU3lzdGVtS2V5RXZlbnQobWVzc2FnZSk7CiAgICAgYXV0
byBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUoKTsKIAotICAgIHJldHVy
biBXZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVubW9kaWZpZWRUZXh0LCBrZXlJZGVudGlm
aWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBtYWNDaGFy
Q29kZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5LCBtb2RpZmllcnMsIFdhbGxU
aW1lOjpub3coKSk7CisgICAgcmV0dXJuIFdlYktleWJvYXJkRXZlbnQodHlwZSwgdGV4dCwgdW5t
b2RpZmllZFRleHQsIGtleSwgY29kZSwga2V5SWRlbnRpZmllciwgd2luZG93c1ZpcnR1YWxLZXlD
b2RlLCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgbWFjQ2hhckNvZGUsIGF1dG9SZXBlYXQsIGlzS2V5
cGFkLCBpc1N5c3RlbUtleSwgbW9kaWZpZXJzLCBXYWxsVGltZTo6bm93KCkpOwogfQogCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNmZjMmE5YzdmYzJkZWM3NWMyODk2MmE3NTVm
MWQ5NDFkYjIzODdhLi44NzhkYmNjODI2MDc4MGE1YjBiNTQ4MzI0NGQ2YjEwMDQ0NzQ3NmQxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTEtMjUgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXBkYXRlIEtleWJvYXJkRXZlbnQg
YXMgcGVyIHRoZSBsYXRlc3Qgc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9z
cyBLaXJzbGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgIFVu
c2tpcHBlZCBmYXN0L2V2ZW50cy9hcnJvdy1rZXlzLW9uLWJvZHkuaHRtbCwgZmFzdC9ldmVudHMv
a2V5Ym9hcmRldmVudC1rZXkuaHRtbCwgYW5kIGZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5w
dXQtdGV4dC5odG1sLgorCiAyMDE5LTExLTI1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdh
bGlhLmNvbT4gIGFuZCAgQ2hyaXMgTG9yZCA8Y2xvcmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBC
YXNpYyBPZmZzY3JlZW5DYW52YXMgZnVuY3Rpb25hbGl0eQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5MjkzMDdkZWQyM2EyNzA1YzBiMGY5ZThkMDZjMzhk
NTMzMzkxMTUxLi41MTRjODg0NTdmNWFhMjU0YzliMGU4MTNmOTA0ZGMzOTVkNDY4ZTJlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzIzNCw3ICszMjM0
LDYgQEAgZmFzdC9kb20vSFRNTE1ldGVyRWxlbWVudC9tZXRlci1zdHlsZXMuaHRtbCBbIEZhaWx1
cmUgXQogZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1iYXItdmFsdWUtcHNl
dWRvLWVsZW1lbnQuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9kb20vV2luZG93L2dldC1zZXQtcHJv
cGVydGllcy5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LWxvb2t1cC1w
cmVjZWRlbmNlLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2Fycm93LWtleXMtb24tYm9k
eS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9iZWZvcmUtaW5wdXQtZXZlbnRzLXByZXZl
bnQtZHJhZy1hbmQtZHJvcC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9jb25zdHJ1Y3Rv
cnMva2V5Ym9hcmQtZXZlbnQtY29uc3RydWN0b3IuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVu
dHMvY29uc3RydWN0b3JzL292ZXJjb25zdHJhaW5lZC1lcnJvci1ldmVudC1jb25zdHJ1Y3Rvci5o
dG1sIFsgRmFpbHVyZSBdCkBAIC0zMjQ1LDkgKzMyNDQsNyBAQCBmYXN0L2V2ZW50cy9pbWUtY29t
cG9zaXRpb24tZXZlbnRzLTAwMS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9pbWUtY29t
cG9zaXRpb25lbmQtb24tc2VsZWN0aW9uLWNoYW5nZS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2
ZW50cy9pbnB1dC1ldmVudHMtcGFzdGUtcmljaC1kYXRhdHJhbnNmZXIuaHRtbCBbIEZhaWx1cmUg
XQogZmFzdC9ldmVudHMva2V5LWV2ZW50cy1pbi1pbnB1dC1idXR0b24uaHRtbCBbIEZhaWx1cmUg
XQotZmFzdC9ldmVudHMva2V5LWV2ZW50cy1pbi1pbnB1dC10ZXh0Lmh0bWwgWyBGYWlsdXJlIF0K
IGZhc3QvZXZlbnRzL2tleWJvYXJkZXZlbnQtY29kZS5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L2V2
ZW50cy9rZXlib2FyZGV2ZW50LWtleS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy91cGRh
dGVMYXlvdXRGb3JIaXRUZXN0Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL3doZWVsZXZl
bnQtYmFzaWMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9mb3Jtcy9saXN0Ym94LXJlc3BlY3RzLXBh
ZGRpbmctYm90dG9tLmh0bWwgWyBGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDc3ZDNlZWM3YzE3YTMyNDlmYTg5ODlmZDEx
ZWViYzA0YzQ1OTkwNDEuLjFjOTgxNzlmMmY2YWU1Mzc2YTI5ZmRlOGZiYWZjNzEwMDZjYjVjYjAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlv
bnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwpA
QCAtMTYzNiw3ICsxNjM2LDYgQEAgZmFzdC9jc3Mvd2lsbC1jaGFuZ2Uvd2lsbC1jaGFuZ2UtY3Jl
YXRlcy1zdGFja2luZy1jb250ZXh0LWlubGluZS5odG1sIFsgSW1hZ2VPbmwKIGZhc3QvY3NzL3dp
bGwtY2hhbmdlL3dpbGwtY2hhbmdlLWNyZWF0ZXMtc3RhY2tpbmctY29udGV4dC5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiBmYXN0L2RvbS9hZG9wdC1hdHRyaWJ1dGUtY3Jhc2guc3ZnIFsgRmFp
bHVyZSBdCiBmYXN0L2RvbS9uYXZpZ2F0b3ItcHJvcGVydHktZ2MtYWZ0ZXItZnJhbWUtZGV0YWNo
Lmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2Fycm93LWtleXMtb24tYm9keS5odG1sIFsg
RmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9hdHRlbXB0LXNjcm9sbC13aXRoLW5vLXNjcm9sbGJhcnMu
aHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvYXV0b3Njcm9sbC13aGVuLWlucHV0LWlzLW9m
ZnNjcmVlbi5odG1sIFsgU2tpcCBdICMgVUlTY3JpcHQKIGZhc3QvZXZlbnRzL2F1dG9zY3JvbGwt
d2l0aC1zb2Z0d2FyZS1rZXlib2FyZC5odG1sIFsgU2tpcCBdICMgVUlTY3JpcHQKQEAgLTE2NzIs
OSArMTY3MSw3IEBAIGZhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5o
dG1sIFsgU2tpcCBdICMgVUlTY3JpcHQKIGZhc3QvZXZlbnRzL2lucHV0LWV2ZW50cy1wYXN0ZS1k
YXRhLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogZmFzdC9ldmVudHMvaW5wdXQtZXZlbnRzLXBhc3Rl
LXJpY2gtZGF0YXRyYW5zZmVyLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZXZlbnRzL2tleS1ldmVu
dHMtaW4taW5wdXQtYnV0dG9uLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvZXZlbnRzL2tleS1ldmVu
dHMtaW4taW5wdXQtdGV4dC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9rZXlib2FyZGV2
ZW50LWNvZGUuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC9ldmVudHMva2V5Ym9hcmRldmVudC1rZXku
aHRtbCBbIEZhaWx1cmUgXQogZmFzdC9ldmVudHMva2V5ZG93bi1udW1wYWQta2V5cy5odG1sIFsg
RmFpbHVyZSBdCiBmYXN0L2V2ZW50cy9tb3VzZS1jdXJzb3ItaW1hZ2Utc2V0Lmh0bWwgWyBGYWls
dXJlIF0KIGZhc3QvZXZlbnRzL21vdXNlb3Zlci1idXR0b24uaHRtbCBbIEZhaWx1cmUgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>