<?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>185814</bug_id>
          
          <creation_ts>2018-05-21 00:31:35 -0700</creation_ts>
          <short_desc>[Win][MiniBrowser] Add MainWindow class</short_desc>
          <delta_ts>2018-05-27 20:50:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>185969</dependson>
          <blocked>184770</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>lforschler</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1425592</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-21 00:31:35 -0700</bug_when>
    <thetext>[Win][MiniBrowser] Add MainWindow class

This is a sub task of Bug 184770.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425599</commentid>
    <comment_count>1</comment_count>
      <attachid>340833</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-21 01:01:30 -0700</bug_when>
    <thetext>Created attachment 340833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425600</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-21 01:09:33 -0700</bug_when>
    <thetext>Attachment 340833 did not pass style-queue:


ERROR: Tools/MiniBrowser/win/MainWindow.cpp:26:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/MainWindow.cpp:27:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426045</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-21 22:17:32 -0700</bug_when>
    <thetext>Could anyone please review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426436</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-22 18:27:44 -0700</bug_when>
    <thetext>Hi Per, do you have a time to review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426582</commentid>
    <comment_count>5</comment_count>
      <attachid>340833</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-05-23 07:55:58 -0700</bug_when>
    <thetext>Comment on attachment 340833
Patch

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

&gt; Tools/MiniBrowser/win/Common.cpp:74
&gt; +MainWindow* gMainWindow = nullptr;

I think we can use std::unique_ptr&lt;MainWindow&gt; here.

&gt; Tools/MiniBrowser/win/Common.cpp:95
&gt; +void MainWindow::resizeSubViews()

Could this method be moved into MainWindow.cpp?

&gt; Tools/MiniBrowser/win/Common.cpp:389
&gt; +LRESULT CALLBACK MainWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

Ditto.

&gt; Tools/MiniBrowser/win/MainWindow.h:32
&gt; +class MainWindow {

Perhaps we could consider renaming MainWindow to MiniBrowser, and renaming MiniBrowser to BrowserWindow? If it makes sense, this can be done in a follow-up patch.

&gt; Tools/MiniBrowser/win/MainWindow.h:52
&gt; +#define URLBAR_HEIGHT  24
&gt; +#define CONTROLBUTTON_WIDTH 24

I think these defines could be moved into MainWindow.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426821</commentid>
    <comment_count>6</comment_count>
      <attachid>340833</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-23 18:23:30 -0700</bug_when>
    <thetext>Comment on attachment 340833
Patch

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

Thank you very much for the view.

&gt;&gt; Tools/MiniBrowser/win/Common.cpp:74
&gt;&gt; +MainWindow* gMainWindow = nullptr;
&gt; 
&gt; I think we can use std::unique_ptr&lt;MainWindow&gt; here.

I have a plan to support multiple windows properly.
I will bind the lifetime of MainWindow to its window by using GWLP_USERDATA.
And, the instance of MainWindow will be destructed on WM_CLOSE.

&gt;&gt; Tools/MiniBrowser/win/Common.cpp:95
&gt;&gt; +void MainWindow::resizeSubViews()
&gt; 
&gt; Could this method be moved into MainWindow.cpp?

Will do in this patch.

&gt;&gt; Tools/MiniBrowser/win/Common.cpp:389
&gt;&gt; +LRESULT CALLBACK MainWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
&gt; 
&gt; Ditto.

Will do in this patch.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:32
&gt;&gt; +class MainWindow {
&gt; 
&gt; Perhaps we could consider renaming MainWindow to MiniBrowser, and renaming MiniBrowser to BrowserWindow? If it makes sense, this can be done in a follow-up patch.

I will rename MiniBrowser to WK1BrowserWindow (bug 184770 comment 13).
IMHO, renaming MainWindow to MiniBrowser does not sound so good.
Because I have a plan to support multiple window, then multiple instances of MainWindow will be created by selecting menu items &quot;Create WK1 Window&quot; and &quot;Create WK2 Window&quot;.
I think the class named &apos;MiniBrowser&apos; gives the false impression of it&apos;s a singleton to people.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:52
&gt;&gt; +#define CONTROLBUTTON_WIDTH 24
&gt; 
&gt; I think these defines could be moved into MainWindow.cpp.

You are right. But, I can&apos;t do it at the moment because it is used in Common.cpp yet.
I will do it in follow-up changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426827</commentid>
    <comment_count>7</comment_count>
      <attachid>341159</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-23 19:28:33 -0700</bug_when>
    <thetext>Created attachment 341159
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426828</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-23 19:30:19 -0700</bug_when>
    <thetext>Attachment 341159 did not pass style-queue:


ERROR: Tools/MiniBrowser/win/MainWindow.cpp:26:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/MainWindow.cpp:27:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427072</commentid>
    <comment_count>9</comment_count>
      <attachid>341159</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-05-24 14:46:15 -0700</bug_when>
    <thetext>Comment on attachment 341159
Patch

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

&gt; Tools/MiniBrowser/win/MainWindow.cpp:40
&gt; +TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
&gt; +TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name

I think these can be data members of the MainWindow class.

&gt; Tools/MiniBrowser/win/MainWindow.cpp:58
&gt; +void PrintView(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
&gt; +bool ToggleMenuItem(HWND hWnd, UINT menuID);

Does it make sense to move these functions into the MainWindow class?

&gt; Tools/MiniBrowser/win/MainWindow.h:32
&gt; +class MainWindow {

What do you think about renaming this class to MiniBrowserWindow?

&gt; Tools/MiniBrowser/win/MainWindow.h:36
&gt; +    void resizeSubViews();

It seems this method can be moved into the private section.

&gt; Tools/MiniBrowser/win/MainWindow.h:38
&gt; +    HWND hwnd() { return m_hMainWnd; }
&gt; +    MiniBrowser* browserWindow() { return m_browserWindow.get(); }

Can the const modifier be added to these methods?

&gt; Tools/MiniBrowser/win/MainWindow.h:41
&gt; +    static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
&gt; +    static ATOM registerClass(HINSTANCE hInstance);

Should these methods also be moved into the private section? I think you can call registerClass from the init() method.

&gt; Tools/MiniBrowser/win/MainWindow.h:47
&gt; +    HWND m_hMainWnd;
&gt; +    HWND m_hURLBarWnd;
&gt; +    HWND m_hBackButtonWnd;
&gt; +    HWND m_hForwardButtonWnd;

These members can be initialized here, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427126</commentid>
    <comment_count>10</comment_count>
      <attachid>341159</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-24 17:46:06 -0700</bug_when>
    <thetext>Comment on attachment 341159
Patch

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

&gt;&gt; Tools/MiniBrowser/win/MainWindow.cpp:40
&gt;&gt; +TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
&gt; 
&gt; I think these can be data members of the MainWindow class.

Agreed. Will do.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.cpp:58
&gt;&gt; +bool ToggleMenuItem(HWND hWnd, UINT menuID);
&gt; 
&gt; Does it make sense to move these functions into the MainWindow class?

I have a plan to make PrintView private in a follow-up patch.
PrintView is private in the original patch (Bug 184770).

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:32
&gt;&gt; +class MainWindow {
&gt; 
&gt; What do you think about renaming this class to MiniBrowserWindow?

Agreed. Will do.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:36
&gt;&gt; +    void resizeSubViews();
&gt; 
&gt; It seems this method can be moved into the private section.

I have a plan to make resizeSubViews private in a follow-up patch.
resizeSubViews was private in the original patch (Bug 184770).

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:38
&gt;&gt; +    MiniBrowser* browserWindow() { return m_browserWindow.get(); }
&gt; 
&gt; Can the const modifier be added to these methods?

Agreed. Will do.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:41
&gt;&gt; +    static ATOM registerClass(HINSTANCE hInstance);
&gt; 
&gt; Should these methods also be moved into the private section? I think you can call registerClass from the init() method.

Agreed. Will do.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:47
&gt;&gt; +    HWND m_hForwardButtonWnd;
&gt; 
&gt; These members can be initialized here, I think.

Agreed. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427232</commentid>
    <comment_count>11</comment_count>
      <attachid>341159</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-25 02:57:02 -0700</bug_when>
    <thetext>Comment on attachment 341159
Patch

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

&gt;&gt;&gt; Tools/MiniBrowser/win/MainWindow.cpp:58
&gt;&gt;&gt; +bool ToggleMenuItem(HWND hWnd, UINT menuID);
&gt;&gt; 
&gt;&gt; Does it make sense to move these functions into the MainWindow class?
&gt; 
&gt; I have a plan to make PrintView private in a follow-up patch.
&gt; PrintView is private in the original patch (Bug 184770).

Sorry. I&apos;m wrong.
I renamed PrintView to MiniBrowser::print because PrintView uses WK1 API. (Bug 184770)
ToggleMenuItem is also using WK1 API. I will rethink which file it should move to in follow-up patch.

&gt;&gt;&gt; Tools/MiniBrowser/win/MainWindow.h:32
&gt;&gt;&gt; +class MainWindow {
&gt;&gt; 
&gt;&gt; What do you think about renaming this class to MiniBrowserWindow?
&gt; 
&gt; Agreed. Will do.

I will rename MiniBrowser to WK1BrowserWindow and add BrowserWindow abstruct class. (Bug 184770)
WK1BrowserWindow, BrowserWindow and MiniBrowserWindow.
Doesn&apos;t it cause any confusion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427233</commentid>
    <comment_count>12</comment_count>
      <attachid>341266</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-25 03:01:58 -0700</bug_when>
    <thetext>Created attachment 341266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427238</commentid>
    <comment_count>13</comment_count>
      <attachid>341268</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-25 03:13:40 -0700</bug_when>
    <thetext>Created attachment 341268
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427275</commentid>
    <comment_count>14</comment_count>
      <attachid>341268</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-05-25 07:35:58 -0700</bug_when>
    <thetext>Comment on attachment 341268
Patch

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

R=me.

&gt; Tools/MiniBrowser/win/MainWindow.cpp:36
&gt; +#define URLBAR_HEIGHT  24
&gt; +#define CONTROLBUTTON_WIDTH 24

I think I would prefer to make these constexpr inside the resizeSubViews method.

&gt; Tools/MiniBrowser/win/MainWindow.cpp:52
&gt; +LRESULT CALLBACK EditProc(HWND, UINT, WPARAM, LPARAM);
&gt; +LRESULT CALLBACK BackButtonProc(HWND, UINT, WPARAM, LPARAM);
&gt; +LRESULT CALLBACK ForwardButtonProc(HWND, UINT, WPARAM, LPARAM);
&gt; +LRESULT CALLBACK ReloadButtonProc(HWND, UINT, WPARAM, LPARAM);
&gt; +INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
&gt; +INT_PTR CALLBACK CustomUserAgent(HWND, UINT, WPARAM, LPARAM);
&gt; +INT_PTR CALLBACK Caches(HWND, UINT, WPARAM, LPARAM);
&gt; +INT_PTR CALLBACK AuthDialogProc(HWND, UINT, WPARAM, LPARAM);

Could these functions also be static members of the MainWindow class?

&gt; Tools/MiniBrowser/win/MainWindow.cpp:62
&gt; +    LoadString(hInst, IDC_MINIBROWSER, buff, length);

The second parameter of LoadString should be &apos;id&apos;, I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427580</commentid>
    <comment_count>15</comment_count>
      <attachid>341268</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-25 16:59:48 -0700</bug_when>
    <thetext>Comment on attachment 341268
Patch

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

Thank you very much for r+, Per.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.cpp:36
&gt;&gt; +#define CONTROLBUTTON_WIDTH 24
&gt; 
&gt; I think I would prefer to make these constexpr inside the resizeSubViews method.

Will do.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.cpp:52
&gt;&gt; +INT_PTR CALLBACK AuthDialogProc(HWND, UINT, WPARAM, LPARAM);
&gt; 
&gt; Could these functions also be static members of the MainWindow class?

The main purpose of this bug is splitting the patch of Bug 184770. I will do it in follow-up patches.

&gt;&gt; Tools/MiniBrowser/win/MainWindow.cpp:62
&gt;&gt; +    LoadString(hInst, IDC_MINIBROWSER, buff, length);
&gt; 
&gt; The second parameter of LoadString should be &apos;id&apos;, I believe.

Good catch. Thanks. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427874</commentid>
    <comment_count>16</comment_count>
      <attachid>341442</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-27 20:47:21 -0700</bug_when>
    <thetext>Created attachment 341442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427875</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-27 20:49:35 -0700</bug_when>
    <thetext>Committed r232234: &lt;https://trac.webkit.org/changeset/232234&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427876</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-27 20:50:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/40590683&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340833</attachid>
            <date>2018-05-21 01:01:30 -0700</date>
            <delta_ts>2018-05-23 19:28:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185814-20180521170129.patch</filename>
            <type>text/plain</type>
            <size>22342</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMDA4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDgzYzdmOThkMjEwZTRlNjg0ZGQ1ZDJlYTBiZWFjZjEx
ODRmZjAxNS4uMzQxZmNlYzJhMThlNjU5YTEzYzVhZGQxMzM5YmU2ODY5ODBmNDc2YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQx
IEBACisyMDE4LTA1LTIxICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgorCisgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBBZGQgTWFpbldpbmRvdyBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1ODE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHN1
YiB0YXNrIG9mIEJ1ZyAxODQ3NzAuIEFkZGVkIGEgbmV3IGNsYXNzIE1haW5XaW5kb3cgdG8KKyAg
ICAgICAgcmVwcmVzZW50IHRoZSBtYWluIHdpbmRvdyB3aGljaCB3aWxsIGJlIHNoYXJlZCBhbW9u
ZyBXSzEgYW5kIFdLMi4KKworICAgICAgICBUaGlzIGNoYW5nZSBpcyBwYXJ0aWFsIHNvIHRoYXQg
aXQncyBlYXN5IHRvIHJldmlldyB0aGlzIHBhdGNoLgorICAgICAgICBJJ2xsIG1vdmUgYWxsIG1l
dGhvZHMgb2YgTWFpbldpbmRvdyBpbnRvIE1haW5XaW5kb3cuY3BwLCBhbmQKKyAgICAgICAgcmVt
b3ZlIG1vcmUgZ2xvYmFsIHZhcmlhYmxlcyBpbiBmb3J0aGNvbWluZyBwYXRjaGVzLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0OiBBZGRlZCBNYWluV2luZG93LmNw
cC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcDogUmVtb3ZlZCBNYWluV2lu
ZG93IHJlbGF0ZWQgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxlcyBoTWFpblduZCwgaFVSTEJhcldu
ZCwgaEJhY2tCdXR0b25XbmQgYW5kCisgICAgICAgIGhGb3J3YXJkQnV0dG9uV25kLiBBZGRlZCBh
IG5ldyBnbG9iYWwgdmFyaWFibGUgZ01haW5XaW5kb3cuCisgICAgICAgIChNYWluV2luZG93OjpX
bmRQcm9jKTogUmVuYW1lZCBmcm9tIFduZFByb2MuCisgICAgICAgIChDdXN0b21Vc2VyQWdlbnQp
OiBGb2xsb3cgdGhlIGdsb2JhbCB2YXJpYWJsZXMgcmVtb3ZhbC4KKyAgICAgICAgKERpc3BsYXlB
dXRoRGlhbG9nKTogRGl0dG8uCisgICAgICAgIChsb2FkVVJMKTogRGl0dG8uCisgICAgICAgIChX
bmRQcm9jKTogUmVuYW1lZCB0byBNYWluV2luZG93OjpXbmRQcm9jLgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9NYWluV2luZG93LmNwcDogQWRkZWQuCisgICAgICAgIChNYWluV2luZG93Ojpy
ZWdpc3RlckNsYXNzKTogUmVuYW1lZCBmcm9tIE15UmVnaXN0ZXJDbGFzcyBvZiBXaW5NYWluLmNw
cC4KKyAgICAgICAgKE1haW5XaW5kb3c6OmluaXQpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dp
bi9NYWluV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAoTWFpbldpbmRvdzo6aHduZCk6CisgICAg
ICAgIChNYWluV2luZG93Ojpicm93c2VyV2luZG93KToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93
aW4vTWluaUJyb3dzZXIuY3BwOgorICAgICAgICAoTWluaUJyb3dzZXI6OmluaXQpOgorICAgICAg
ICAoTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyk6IEV4dHJhY3Qgc29tZSBjb2RlIGludG8gTWlu
aUJyb3dzZXI6OmxvYWREZWZhdWx0SFRNTC4KKyAgICAgICAgKE1pbmlCcm93c2VyOjpsb2FkRGVm
YXVsdEhUTUwpOiBFeHRyYWN0ZWQgZnJvbSBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzLgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oOgorICAgICAgICAqIE1pbmlCcm93
c2VyL3dpbi9XaW5NYWluLmNwcDoKKyAgICAgICAgKHdXaW5NYWluKTogRXh0cmFjdGVkIE1haW5X
aW5kb3cgaW5pdGlhbGl6YXRpb24gY29kZSBpbnRvIE1haW5XaW5kb3c6OmluaXQuCisgICAgICAg
IChNeVJlZ2lzdGVyQ2xhc3MpOiBNb3ZlZCB0byBNYWluV2luZG93LmNwcC4KKwogMjAxOC0wNS0x
OSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBGbGFreSBBUEkg
dGVzdCBXZWJLaXQuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2w6IGluY29ycmVj
dCBvcmRlciBvZiBjb29raWVzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01h
a2VMaXN0cy50eHQgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQKaW5kZXgg
Yjg5NTZmODMyMGM3Yjg5NDI2ZmQzYWRiYjA1OTk4ZjM0YWY5MGMzZC4uNzBlNmQ3Y2U1NmIzZTg4
YzFhMGI1NzVlMTNhN2EzNGVjM2QxZmFlMCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9DTWFrZUxpc3Rz
LnR4dApAQCAtOCw2ICs4LDcgQEAgc2V0KE1pbmlCcm93c2VyX0lOQ0xVREVfRElSRUNUT1JJRVMK
IHNldChNaW5pQnJvd3Nlcl9TT1VSQ0VTCiAgICAgQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcAog
ICAgIERPTURlZmF1bHRJbXBsLmNwcAorICAgIE1haW5XaW5kb3cuY3BwCiAgICAgUGFnZUxvYWRU
ZXN0Q2xpZW50LmNwcAogICAgIFByaW50V2ViVUlEZWxlZ2F0ZS5jcHAKICAgICBSZXNvdXJjZUxv
YWREZWxlZ2F0ZS5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24u
Y3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKaW5kZXggMTFjNjU0OWYzNjgz
OGZiOGM4YmM5NTQxNjA1NzEzY2YzMGUzZDNhMi4uNTM0MmNmNThjYWNlMGJkZWIzM2QwMzdlMmRh
MDliZDc1NTgzZGE4NiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5j
cHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKQEAgLTI3LDYgKzI3LDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKKyNpbmNsdWRlICJNYWluV2lu
ZG93LmgiCiAjaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKICNpbmNsdWRlICJNaW5pQnJvd3NlclJl
cGxhY2UuaCIKICNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+CkBAIC01NSwx
MCArNTYsNiBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3aW5pbmV0Lmg+CiAKLSNk
ZWZpbmUgTUFYX0xPQURTVFJJTkcgMTAwCi0jZGVmaW5lIFVSTEJBUl9IRUlHSFQgIDI0Ci0jZGVm
aW5lIENPTlRST0xCVVRUT05fV0lEVEggMjQKLQogc3RhdGljIGNvbnN0IGludCBtYXhIaXN0b3J5
U2l6ZSA9IDEwOwogCiAjaWZuZGVmIFdNX0RQSUNIQU5HRUQKQEAgLTcwLDE5ICs2NywxMiBAQCB0
eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVp
ZG9mKElXZWJNdXRhYmxlVVJMUmVxdQogCiAvLyBHbG9iYWwgVmFyaWFibGVzOgogSElOU1RBTkNF
IGhJbnN0OwotSFdORCBoTWFpblduZDsKLUhXTkQgaFVSTEJhclduZDsKLUhHRElPQkogaFVSTEZv
bnQ7Ci1IV05EIGhCYWNrQnV0dG9uV25kOwotSFdORCBoRm9yd2FyZEJ1dHRvblduZDsKIEhXTkQg
aENhY2hlV25kOwogV05EUFJPQyBEZWZFZGl0UHJvYyA9IG51bGxwdHI7CiBXTkRQUk9DIERlZkJ1
dHRvblByb2MgPSBudWxscHRyOwotV05EUFJPQyBEZWZXZWJLaXRQcm9jID0gbnVsbHB0cjsKLUhX
TkQgZ1ZpZXdXaW5kb3cgPSAwOworCitNYWluV2luZG93KiBnTWFpbldpbmRvdyA9IG51bGxwdHI7
CiBNaW5pQnJvd3NlciogZ01pbmlCcm93c2VyID0gbnVsbHB0cjsKLVRDSEFSIHN6VGl0bGVbTUFY
X0xPQURTVFJJTkddOyAvLyBUaGUgdGl0bGUgYmFyIHRleHQKLVRDSEFSIHN6V2luZG93Q2xhc3Nb
TUFYX0xPQURTVFJJTkddOyAvLyB0aGUgbWFpbiB3aW5kb3cgY2xhc3MgbmFtZQogCiAvLyBTdXBw
b3J0IG1vdmluZyB0aGUgdHJhbnNwYXJlbnQgd2luZG93CiBQT0lOVCBzX3dpbmRvd1Bvc2l0aW9u
ID0geyAxMDAsIDEwMCB9OwpAQCAtOTAsMTMgKzgwLDggQEAgU0laRSBzX3dpbmRvd1NpemUgPSB7
IDUwMCwgMjAwIH07CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbmNs
dWRlZCBpbiB0aGlzIGNvZGUgbW9kdWxlOgogQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNF
IGhJbnN0YW5jZSk7Ci1MUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOwogSU5UX1BUUiBDQUxMQkFDSyBBYm91dChIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7CiBJTlRfUFRSIENBTExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIEVkaXRQcm9jKEhXTkQsIFVJTlQsIFdQQVJB
TSwgTFBBUkFNKTsKLUxSRVNVTFQgQ0FMTEJBQ0sgQmFja0J1dHRvblByb2MoSFdORCwgVUlOVCwg
V1BBUkFNLCBMUEFSQU0pOwotTFJFU1VMVCBDQUxMQkFDSyBGb3J3YXJkQnV0dG9uUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIFJlbG9hZEJ1dHRvblBy
b2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogSU5UX1BUUiBDQUxMQkFDSyBBdXRoRGlhbG9n
UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAKQEAgLTEwNywyNSArOTIsMjUgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdO
RCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2l6ZVN1YlZpZXdzKCkKK3ZvaWQgTWFpbldpbmRvdzo6
cmVzaXplU3ViVmlld3MoKQogewotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2
aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaE1haW5XbmQpOworICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobV9oTWFpblduZCk7CiAKICAg
ICBSRUNUIHJjQ2xpZW50OwotICAgIEdldENsaWVudFJlY3QoaE1haW5XbmQsICZyY0NsaWVudCk7
CisgICAgR2V0Q2xpZW50UmVjdChtX2hNYWluV25kLCAmcmNDbGllbnQpOwogCiAgICAgaW50IGhl
aWdodCA9IHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVDsKICAgICBpbnQgd2lkdGggPSBzY2Fs
ZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEg7CiAKLSAgICBNb3ZlV2luZG93KGhCYWNrQnV0
dG9uV25kLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3
YXJkQnV0dG9uV25kLCB3aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7Ci0gICAgTW92ZVdp
bmRvdyhoVVJMQmFyV25kLCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRS
VUUpOworICAgIE1vdmVXaW5kb3cobV9oQmFja0J1dHRvblduZCwgMCwgMCwgd2lkdGgsIGhlaWdo
dCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhtX2hGb3J3YXJkQnV0dG9uV25kLCB3aWR0aCwgMCwg
d2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhtX2hVUkxCYXJXbmQsIHdpZHRo
ICogMiwgMCwgcmNDbGllbnQucmlnaHQsIGhlaWdodCwgVFJVRSk7CiAKLSAgICA6OlNlbmRNZXNz
YWdlKGhVUkxCYXJXbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX1NFVEZPTlQpLCByZWludGVycHJl
dF9jYXN0PFdQQVJBTT4oZ01pbmlCcm93c2VyLT51cmxCYXJGb250KCkpLCBUUlVFKTsKKyAgICA6
OlNlbmRNZXNzYWdlKG1faFVSTEJhclduZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCks
IHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFNPihtX2Jyb3dzZXJXaW5kb3ctPnVybEJhckZvbnQoKSks
IFRSVUUpOwogCi0gICAgaWYgKGdNaW5pQnJvd3Nlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkgfHwg
IWdWaWV3V2luZG93KQorICAgIGlmIChtX2Jyb3dzZXJXaW5kb3ctPnVzZXNMYXllcmVkV2ViVmll
dygpIHx8ICFtX2Jyb3dzZXJXaW5kb3ctPmh3bmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIE1v
dmVXaW5kb3coZ1ZpZXdXaW5kb3csIDAsIGhlaWdodCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50
LmJvdHRvbSAtIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhtX2Jyb3dzZXJXaW5kb3ct
Pmh3bmQoKSwgMCwgaGVpZ2h0LCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gaGVp
Z2h0LCBUUlVFKTsKIH0KIAogc3RhdGljIHZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQpA
QCAtNDAxLDcgKzM4Niw3IEBAIHN0YXRpYyBib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwg
VUlOVCBtZW51SUQpCiAKIHN0YXRpYyBjb25zdCBpbnQgZHJhZ0JhckhlaWdodCA9IDMwOwogCi1M
UkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENBTExCQUNLIE1haW5XaW5kb3c6OlduZFBy
b2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0p
CiB7CiAgICAgc3dpdGNoIChtZXNzYWdlKSB7CiAgICAgY2FzZSBXTV9DT01NQU5EOiB7CkBAIC00
NzYsNyArNDYxLDcgQEAgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBt
ZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBpZiAoIWdNaW5p
QnJvd3NlciB8fCAhZ01pbmlCcm93c2VyLT5oYXNXZWJWaWV3KCkpCiAgICAgICAgICAgICByZXR1
cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAKLSAgICAg
ICAgcmVzaXplU3ViVmlld3MoKTsKKyAgICAgICAgZ01haW5XaW5kb3ctPnJlc2l6ZVN1YlZpZXdz
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV01fRFBJQ0hBTkdFRDoKICAgICAgICAgaWYg
KGdNaW5pQnJvd3NlcikKQEAgLTYwMSw3ICs1ODYsNyBAQCBJTlRfUFRSIENBTExCQUNLIEN1c3Rv
bVVzZXJBZ2VudChIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFN
CiAgICAgICAgICAgICBfYnN0cl90IGJzdHIoYnVmZmVyKTsKICAgICAgICAgICAgIGlmIChic3Ry
Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5zZXRVc2VyQWdlbnQo
YnN0cik7Ci0gICAgICAgICAgICAgICAgOjpQb3N0TWVzc2FnZShoTWFpblduZCwgc3RhdGljX2Nh
c3Q8VUlOVD4oV01fQ09NTUFORCksIE1BS0VMUEFSQU0oSURNX1VBX09USEVSLCAxKSwgMCk7Cisg
ICAgICAgICAgICAgICAgOjpQb3N0TWVzc2FnZShnTWFpbldpbmRvdy0+aHduZCgpLCBzdGF0aWNf
Y2FzdDxVSU5UPihXTV9DT01NQU5EKSwgTUFLRUxQQVJBTShJRE1fVUFfT1RIRVIsIDEpLCAwKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02MTYsNyArNjAxLDcgQEAgSU5UX1BUUiBD
QUxMQkFDSyBDdXN0b21Vc2VyQWdlbnQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTQogCiBIUkVTVUxUIERpc3BsYXlBdXRoRGlhbG9nKHN0ZDo6d3N0cmluZyYg
dXNlcm5hbWUsIHN0ZDo6d3N0cmluZyYgcGFzc3dvcmQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBE
aWFsb2dCb3goaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRERfQVVUSCksIGhNYWluV25kLCBBdXRo
RGlhbG9nUHJvYyk7CisgICAgYXV0byByZXN1bHQgPSBEaWFsb2dCb3goaEluc3QsIE1BS0VJTlRS
RVNPVVJDRShJRERfQVVUSCksIGdNYWluV2luZG93LT5od25kKCksIEF1dGhEaWFsb2dQcm9jKTsK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIApAQCAtNjY5LDcgKzY1
NCw3IEBAIHN0YXRpYyB2b2lkIGxvYWRVUkwoQlNUUiBwYXNzZWRVUkwpCiAgICAgaWYgKEZBSUxF
RChnTWluaUJyb3dzZXItPmxvYWRVUkwocGFzc2VkVVJMKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFNldEZvY3VzKGdWaWV3V2luZG93KTsKKyAgICBTZXRGb2N1cyhnTWluaUJyb3dzZXItPmh3
bmQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQg
ZmllbGQsIF9ic3RyX3QgdmFsdWUpCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4v
TWFpbldpbmRvdy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzVjZTdjMGM1MTBjZDUwMTYzYTYyZTc2NzFhOWU2ZDkyNzk0M2Q2ZAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmNwcApAQCAtMCww
ICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorI2luY2x1
ZGUgIk1pbmlCcm93c2VyLmgiCisjaW5jbHVkZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitmbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhI
V05EKTsKK30KKworY29uc3RleHByIHNpemVfdCBNQVhfTE9BRFNUUklORyA9IDEwMDsKK1RDSEFS
IHN6VGl0bGVbTUFYX0xPQURTVFJJTkddOyAvLyBUaGUgdGl0bGUgYmFyIHRleHQKK1RDSEFSIHN6
V2luZG93Q2xhc3NbTUFYX0xPQURTVFJJTkddOyAvLyB0aGUgbWFpbiB3aW5kb3cgY2xhc3MgbmFt
ZQorCitleHRlcm4gV05EUFJPQyBEZWZFZGl0UHJvYzsKK2V4dGVybiBXTkRQUk9DIERlZkJ1dHRv
blByb2M7CisKK0xSRVNVTFQgQ0FMTEJBQ0sgRWRpdFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOworTFJFU1VMVCBDQUxMQkFDSyBCYWNrQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7CitMUkVTVUxUIENBTExCQUNLIEZvcndhcmRCdXR0b25Qcm9jKEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVsb2FkQnV0dG9uUHJvYyhI
V05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisKK0FUT00gTWFpbldpbmRvdzo6cmVnaXN0ZXJD
bGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKQoreworICAgIExvYWRTdHJpbmcoaEluc3RhbmNlLCBJ
RFNfQVBQX1RJVExFLCBzelRpdGxlLCBNQVhfTE9BRFNUUklORyk7CisgICAgTG9hZFN0cmluZyho
SW5zdGFuY2UsIElEQ19NSU5JQlJPV1NFUiwgc3pXaW5kb3dDbGFzcywgTUFYX0xPQURTVFJJTkcp
OworCisgICAgV05EQ0xBU1NFWCB3Y2V4OworCisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05E
Q0xBU1NFWCk7CisKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZS
RURSQVc7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IFduZFByb2M7CisgICAgd2NleC5jYkNs
c0V4dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5o
SW5zdGFuY2UgICAgICA9IGhJbnN0YW5jZTsKKyAgICB3Y2V4LmhJY29uICAgICAgICAgID0gTG9h
ZEljb24oaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX01JTklCUk9XU0VSKSk7CisgICAg
d2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4
LmhickJhY2tncm91bmQgID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gTUFLRUlOVFJF
U09VUkNFKElEQ19NSU5JQlJPV1NFUik7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IHN6V2lu
ZG93Q2xhc3M7CisgICAgd2NleC5oSWNvblNtICAgICAgICA9IExvYWRJY29uKHdjZXguaEluc3Rh
bmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX1NNQUxMKSk7CisKKyAgICByZXR1cm4gUmVnaXN0ZXJD
bGFzc0V4KCZ3Y2V4KTsKK30KKworYm9vbCBNYWluV2luZG93Ojppbml0KEhJTlNUQU5DRSBoSW5z
dGFuY2UsIGJvb2wgdXNlc0xheWVyZWRXZWJWaWV3LCBib29sIHBhZ2VMb2FkVGVzdGluZykKK3sK
KyAgICBtX2hNYWluV25kID0gQ3JlYXRlV2luZG93KHN6V2luZG93Q2xhc3MsIHN6VGl0bGUsIFdT
X09WRVJMQVBQRURXSU5ET1csCisgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFV
TFQsIDAsIDAsIDAsIGhJbnN0YW5jZSwgMCk7CisKKyAgICBpZiAoIW1faE1haW5XbmQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2
aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobnVsbHB0cik7CisgICAgbV9oQmFja0J1dHRvblduZCA9
IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPCIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSAgfCBC
U19URVhULCAwLCAwLCAwLCAwLCBtX2hNYWluV25kLCAwLCBoSW5zdGFuY2UsIDApOworICAgIG1f
aEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElM
RCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lE
VEgsIDAsIDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0YW5jZSwgMCk7CisgICAgbV9oVVJMQmFy
V25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdT
X0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBDT05UUk9M
QlVUVE9OX1dJRFRIICogMiwgMCwgMCwgMCwgbV9oTWFpblduZCwgMCwgaEluc3RhbmNlLCAwKTsK
KworICAgIERlZkVkaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dM
b25nUHRyKG1faFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgRGVmQnV0dG9uUHJvYyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihtX2hCYWNrQnV0dG9u
V25kLCBHV0xQX1dORFBST0MpKTsKKyAgICBTZXRXaW5kb3dMb25nUHRyKG1faFVSTEJhclduZCwg
R1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihFZGl0UHJvYykpOworICAg
IFNldFdpbmRvd0xvbmdQdHIobV9oQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVy
cHJldF9jYXN0PExPTkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOworICAgIFNldFdpbmRvd0xvbmdQ
dHIobV9oRm9yd2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExP
TkdfUFRSPihGb3J3YXJkQnV0dG9uUHJvYykpOworCisgICAgU2V0Rm9jdXMobV9oVVJMQmFyV25k
KTsKKworICAgIG1fYnJvd3NlcldpbmRvdyA9IHN0ZDo6bWFrZV91bmlxdWU8TWluaUJyb3dzZXI+
KG1faE1haW5XbmQsIG1faFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRl
c3RpbmcpOworICAgIGlmICghbV9icm93c2VyV2luZG93KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSFJFU1VMVCBociA9IG1fYnJvd3NlcldpbmRvdy0+aW5pdCgpOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXNpemVTdWJWaWV3cygpOwor
ICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01h
aW5XaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDU2MDQxZWU1NTM4MTk3OGYwODYxYmVlOTllNDA5NGE5NzZjYzgwMgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmgKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPG1lbW9yeT4KKworY2xhc3MgTWluaUJyb3dzZXI7CisKK2Ns
YXNzIE1haW5XaW5kb3cgeworcHVibGljOgorICAgIGJvb2wgaW5pdChISU5TVEFOQ0UgaEluc3Rh
bmNlLCBib29sIHVzZXNMYXllcmVkV2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2FkVGVzdGlu
ZyA9IGZhbHNlKTsKKworICAgIHZvaWQgcmVzaXplU3ViVmlld3MoKTsKKyAgICBIV05EIGh3bmQo
KSB7IHJldHVybiBtX2hNYWluV25kOyB9CisgICAgTWluaUJyb3dzZXIqIGJyb3dzZXJXaW5kb3co
KSB7IHJldHVybiBtX2Jyb3dzZXJXaW5kb3cuZ2V0KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKyAgICBz
dGF0aWMgQVRPTSByZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpOworCitwcml2YXRl
OgorICAgIEhXTkQgbV9oTWFpblduZDsKKyAgICBIV05EIG1faFVSTEJhclduZDsKKyAgICBIV05E
IG1faEJhY2tCdXR0b25XbmQ7CisgICAgSFdORCBtX2hGb3J3YXJkQnV0dG9uV25kOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxNaW5pQnJvd3Nlcj4gbV9icm93c2VyV2luZG93OworfTsKKworI2RlZmlu
ZSBVUkxCQVJfSEVJR0hUICAyNAorI2RlZmluZSBDT05UUk9MQlVUVE9OX1dJRFRIIDI0CmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmNwcAppbmRleCA3NDliZjA0NGE1YWM3NTQxOTM4MjYx
ZTVlOWQ1NzAwYTk3MjVkYjA2Li5hMTYxYzU4YWZmMDMxNTQxMTcyOGI3YjcwMzA2N2I2MGI4NDFk
ZDI5IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAKQEAgLTY5LDcgKzY5LDcg
QEAgTWluaUJyb3dzZXI6Ok1pbmlCcm93c2VyKEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQs
IGJvb2wgdXNlTGF5ZXJlZFdlYlZpZXcsIGIKIHsKIH0KIAotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6
aW5pdChfYnN0cl90JiByZXF1ZXN0ZWRVUkwpCitIUkVTVUxUIE1pbmlCcm93c2VyOjppbml0KCkK
IHsKICAgICB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOwogCkBAIC0xMzUsNyArMTM1LDcgQEAg
SFJFU1VMVCBNaW5pQnJvd3Nlcjo6aW5pdChfYnN0cl90JiByZXF1ZXN0ZWRVUkwpCiAgICAgaWYg
KHVzZXNMYXllcmVkV2ViVmlldygpKQogICAgICAgICBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bv
c2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5k
b3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKIAotICAg
IGhyID0gcHJlcGFyZVZpZXdzKG1faE1haW5XbmQsIGNsaWVudFJlY3QsIHJlcXVlc3RlZFVSTC5H
ZXRCU1RSKCkpOworICAgIGhyID0gcHJlcGFyZVZpZXdzKG1faE1haW5XbmQsIGNsaWVudFJlY3Qp
OwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CiAKQEAgLTE1Nyw3ICsx
NTcsNyBAQCBib29sIE1pbmlCcm93c2VyOjpzZXRDYWNoZUZvbGRlcigpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUhSRVNVTFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQs
IGNvbnN0IFJFQ1QmIGNsaWVudFJlY3QsIGNvbnN0IEJTVFImIHJlcXVlc3RlZFVSTCkKK0hSRVNV
TFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0IFJFQ1QmIGNs
aWVudFJlY3QpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7
CkBAIC0xNzAsMTUgKzE3MCw2IEBAIEhSRVNVTFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhI
V05EIG1haW5XbmQsIGNvbnN0IFJFQ1QmIGNsaWVudFJlY3QsIGNvbnN0IEJTCiAgICAgaWYgKEZB
SUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKIAotICAgIGlmICghcmVxdWVzdGVkVVJMKSB7
Ci0gICAgICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKLSAgICAgICAgaHIgPSBtX3dlYlZpZXctPm1h
aW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgICAgIHJldHVybiBocjsKLQotICAgICAgICBmcmFtZS0+bG9hZEhUTUxTdHJp
bmcoX2JzdHJfdChkZWZhdWx0SFRNTCkuR2V0QlNUUigpLCAwKTsKLSAgICB9Ci0KICAgICBociA9
IG1fd2ViVmlld1ByaXZhdGUtPnNldFRyYW5zcGFyZW50KG1fdXNlTGF5ZXJlZFdlYlZpZXcpOwog
ICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CkBAIC0xOTIsNiArMTgzLDE3
IEBAIEhSRVNVTFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0
IFJFQ1QmIGNsaWVudFJlY3QsIGNvbnN0IEJTCiAgICAgcmV0dXJuIGhyOwogfQogCitIUkVTVUxU
IE1pbmlCcm93c2VyOjpsb2FkRGVmYXVsdEhUTUwoKQoreworICAgIElXZWJGcmFtZVB0ciBmcmFt
ZTsKKyAgICBIUkVTVUxUIGhyID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVy
ZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisg
ICAgZnJhbWUtPmxvYWRIVE1MU3RyaW5nKF9ic3RyX3QoZGVmYXVsdEhUTUwpLkdldEJTVFIoKSwg
MCk7CisgICAgcmV0dXJuIGhyOworfQorCiBzdGF0aWMgV05EUFJPQyBnRGVmV2ViS2l0UHJvYzsK
IAogc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgdmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5p
QnJvd3Nlci5oCmluZGV4IDRlYjU4YzJiNDFkZDJlZjhjMWY1MTc3NGFlNWViODg2NDU1ZTc4YzYu
LmZiZmMzNWNkZGEyYTkyNzc2NGYyNWMyZmI0OGY0Y2RiNmQ5ZjQxYzggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9NaW5pQnJvd3Nlci5oCkBAIC00OSw5ICs0OSwxMCBAQCBjbGFzcyBNaW5pQnJvd3NlciB7
CiBwdWJsaWM6CiAgICAgTWluaUJyb3dzZXIoSFdORCBtYWluV25kLCBIV05EIHVybEJhclduZCwg
Ym9vbCB1c2VMYXllcmVkV2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2FkVGVzdGluZyA9IGZh
bHNlKTsKIAotICAgIEhSRVNVTFQgaW5pdChfYnN0cl90JiByZXF1ZXN0ZWRVUkwpOwotICAgIEhS
RVNVTFQgcHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCwg
Y29uc3QgQlNUUiYgcmVxdWVzdGVkVVJMKTsKKyAgICBIUkVTVUxUIGluaXQoKTsKKyAgICBIUkVT
VUxUIHByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0IFJFQ1QmIGNsaWVudFJlY3QpOwog
CisgICAgSFJFU1VMVCBsb2FkRGVmYXVsdEhUTUwoKTsKICAgICBIUkVTVUxUIGxvYWRVUkwoY29u
c3QgQlNUUiYgcGFzc2VkVVJMKTsKIAogICAgIHZvaWQgc2hvd0xhc3RWaXNpdGVkU2l0ZXMoSVdl
YlZpZXcmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcCBi
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcAppbmRleCAwODdlOTRkZjA2ODIyMzA1
ZjM1Yzc1MTdlNzgyMDlkODMyNDUyZDA0Li40ZDU2MDgzNThjZWZlNWJjZmYxYTdlOGNjMjRhZTMw
NGRmY2VhYTM5IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4uY3BwCkBAIC0zMiwxMCArMzIsNiBA
QAogI2luY2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDb21tb24u
Y3BwIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1mbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldp
bmRvdyhIV05EKTsKLX0KLQogaW50IFdJTkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5DRSBoSW5z
dGFuY2UsIF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLCBfSW5fIExQV1NUUiBscHN0
ckNtZExpbmUsIF9Jbl8gaW50IG5DbWRTaG93KQogewogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9D
CkBAIC01OSwxMCArNTUsNyBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RBTkNFIGhJ
bnN0YW5jZSwgX0luX29wdF8gSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsCiAKICAgICBwYXJzZUNv
bW1hbmRMaW5lKHVzZXNMYXllcmVkV2ViVmlldywgdXNlRnVsbERlc2t0b3AsIHBhZ2VMb2FkVGVz
dGluZywgcmVxdWVzdGVkVVJMKTsKIAotICAgIC8vIEluaXRpYWxpemUgZ2xvYmFsIHN0cmluZ3MK
LSAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRFNfQVBQX1RJVExFLCBzelRpdGxlLCBNQVhfTE9BRFNU
UklORyk7Ci0gICAgTG9hZFN0cmluZyhoSW5zdCwgSURDX01JTklCUk9XU0VSLCBzeldpbmRvd0Ns
YXNzLCBNQVhfTE9BRFNUUklORyk7Ci0gICAgTXlSZWdpc3RlckNsYXNzKGhJbnN0KTsKKyAgICBN
YWluV2luZG93OjpyZWdpc3RlckNsYXNzKGhJbnN0KTsKIAogICAgIGlmICh1c2VGdWxsRGVza3Rv
cCkKICAgICAgICAgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKTsKQEAgLTcyLDQ3ICs2NSwyMCBA
QCBpbnQgV0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RBTkNFIGhJbnN0YW5jZSwgX0luX29wdF8g
SElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsCiAKICAgICA6OlNldFByb2Nlc3NEUElBd2FyZSgpOwog
Ci0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldp
bmRvdyhudWxscHRyKTsKLQotICAgIGhNYWluV25kID0gQ3JlYXRlV2luZG93KHN6V2luZG93Q2xh
c3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgIENXX1VTRURFRkFVTFQs
IDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0LCAwKTsKLQotICAgIGlmICghaE1haW5X
bmQpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGhCYWNrQnV0dG9uV25kID0gQ3JlYXRl
V2luZG93KEwiQlVUVE9OIiwgTCI8IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQs
IDAsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgaEZvcndhcmRCdXR0b25X
bmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUg
fCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIDAsIDAsIGhN
YWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgaFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVE
SVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNf
QVVUT1ZTQ1JPTEwsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIDAs
IDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0KLSAgICBTaG93V2luZG93KGhNYWluV25kLCBu
Q21kU2hvdyk7Ci0gICAgVXBkYXRlV2luZG93KGhNYWluV25kKTsKLQotICAgIERlZkVkaXRQcm9j
ID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25nUHRyKGhVUkxCYXJXbmQs
IEdXTFBfV05EUFJPQykpOwotICAgIERlZkJ1dHRvblByb2MgPSByZWludGVycHJldF9jYXN0PFdO
RFBST0M+KEdldFdpbmRvd0xvbmdQdHIoaEJhY2tCdXR0b25XbmQsIEdXTFBfV05EUFJPQykpOwot
ICAgIFNldFdpbmRvd0xvbmdQdHIoaFVSTEJhclduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJl
dF9jYXN0PExPTkdfUFRSPihFZGl0UHJvYykpOwotICAgIFNldFdpbmRvd0xvbmdQdHIoaEJhY2tC
dXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oQmFja0J1
dHRvblByb2MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRyKGhGb3J3YXJkQnV0dG9uV25kLCBHV0xQ
X1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEZvcndhcmRCdXR0b25Qcm9jKSk7
Ci0KLSAgICBTZXRGb2N1cyhoVVJMQmFyV25kKTsKLQotICAgIGdNaW5pQnJvd3NlciA9IG5ldyBN
aW5pQnJvd3NlcihoTWFpblduZCwgaFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdl
TG9hZFRlc3RpbmcpOwotICAgIGlmICghZ01pbmlCcm93c2VyKQotICAgICAgICBnb3RvIGV4aXQ7
Ci0gICAgSFJFU1VMVCBociA9IGdNaW5pQnJvd3Nlci0+aW5pdChyZXF1ZXN0ZWRVUkwpOworICAg
IGdNYWluV2luZG93ID0gbmV3IE1haW5XaW5kb3coKTsKKyAgICBIUkVTVUxUIGhyID0gZ01haW5X
aW5kb3ctPmluaXQoaEluc3QsIHVzZXNMYXllcmVkV2ViVmlldywgcGFnZUxvYWRUZXN0aW5nKTsK
ICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgZ1ZpZXdXaW5k
b3cgPSBnTWluaUJyb3dzZXItPmh3bmQoKTsKLQotICAgIHJlc2l6ZVN1YlZpZXdzKCk7Ci0KLSAg
ICBTaG93V2luZG93KGdWaWV3V2luZG93LCBuQ21kU2hvdyk7Ci0gICAgVXBkYXRlV2luZG93KGdW
aWV3V2luZG93KTsKKyAgICBnTWluaUJyb3dzZXIgPSBnTWFpbldpbmRvdy0+YnJvd3NlcldpbmRv
dygpOworICAgIFNob3dXaW5kb3coZ01haW5XaW5kb3ctPmh3bmQoKSwgbkNtZFNob3cpOwogCiAg
ICAgaEFjY2VsVGFibGUgPSBMb2FkQWNjZWxlcmF0b3JzKGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0Uo
SURDX01JTklCUk9XU0VSKSk7CiAKICAgICBpZiAocmVxdWVzdGVkVVJMLmxlbmd0aCgpKQogICAg
ICAgICBsb2FkVVJMKHJlcXVlc3RlZFVSTC5HZXRCU1RSKCkpOworICAgIGVsc2UKKyAgICAgICAg
Z01pbmlCcm93c2VyLT5sb2FkRGVmYXVsdEhUTUwoKTsKIAogI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDUwOSkKIApAQCAtMTM3LDI4ICsxMDMsNSBAQCBleGl0OgogICAgIC8vIFNodXQgZG93biBD
T00uCiAgICAgT2xlVW5pbml0aWFsaXplKCk7CiAKLSAgICBkZWxldGUgZ01pbmlCcm93c2VyOwot
ICAgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1zZy53UGFyYW0pOwogfQotCi1BVE9N
IE15UmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKQotewotICAgIFdORENMQVNTRVgg
d2NleDsKLQotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwotCi0gICAgd2Nl
eC5zdHlsZSAgICAgICAgICA9IENTX0hSRURSQVcgfCBDU19WUkVEUkFXOwotICAgIHdjZXgubHBm
blduZFByb2MgICAgPSBXbmRQcm9jOwotICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwotICAg
IHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOwotICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBoSW5z
dGFuY2U7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IExvYWRJY29uKGhJbnN0YW5jZSwgTUFL
RUlOVFJFU09VUkNFKElESV9NSU5JQlJPV1NFUikpOwotICAgIHdjZXguaEN1cnNvciAgICAgICAg
PSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Ci0gICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7
Ci0gICAgd2NleC5scHN6TWVudU5hbWUgICA9IE1BS0VJTlRSRVNPVVJDRShJRENfTUlOSUJST1dT
RVIpOwotICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBzeldpbmRvd0NsYXNzOwotICAgIHdjZXgu
aEljb25TbSAgICAgICAgPSBMb2FkSWNvbih3Y2V4LmhJbnN0YW5jZSwgTUFLRUlOVFJFU09VUkNF
KElESV9TTUFMTCkpOwotCi0gICAgcmV0dXJuIFJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341159</attachid>
            <date>2018-05-23 19:28:33 -0700</date>
            <delta_ts>2018-05-25 03:02:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185814-20180524112832.patch</filename>
            <type>text/plain</type>
            <size>28956</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMTQwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjg0YTVjMWM5NmE5ZjJhMmE4NzBmNDQ0NjM4MmYwMjBl
YmRhMDdjMC4uZTQ3MjdjZTZmOGE3ODYwZTUyMGExYTU4NDdhNzI3OTNkOWMwYzFjMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2
IEBACisyMDE4LTA1LTIzICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgorCisgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBBZGQgTWFpbldpbmRvdyBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1ODE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHN1
YiB0YXNrIG9mIEJ1ZyAxODQ3NzAuIEFkZGVkIGEgbmV3IGNsYXNzIE1haW5XaW5kb3cgdG8KKyAg
ICAgICAgcmVwcmVzZW50IHRoZSBtYWluIHdpbmRvdyB3aGljaCB3aWxsIGJlIHNoYXJlZCBhbW9u
ZyBXSzEgYW5kIFdLMi4KKworICAgICAgICBUaGlzIGNoYW5nZSBpcyBwYXJ0aWFsIHNvIHRoYXQg
aXQncyBlYXN5IHRvIHJldmlldyB0aGlzIHBhdGNoLgorICAgICAgICBJJ2xsIG1vdmUgbW9yZSBm
dW5jdGlvbnMgaW50byBNYWluV2luZG93LmNwcCwgYW5kIHJlbW92ZSBtb3JlCisgICAgICAgIGds
b2JhbCB2YXJpYWJsZXMgaW4gZm9ydGhjb21pbmcgcGF0Y2hlcy4KKworICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9DTWFrZUxpc3RzLnR4dDogQWRkZWQgTWFpbldpbmRvdy5jcHAuCisgICAgICAg
ICogTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHA6IFJlbW92ZWQgTWFpbldpbmRvdyByZWxhdGVk
IGdsb2JhbAorICAgICAgICB2YXJpYWJsZXMgaE1haW5XbmQsIGhVUkxCYXJXbmQsIGhCYWNrQnV0
dG9uV25kIGFuZAorICAgICAgICBoRm9yd2FyZEJ1dHRvblduZC4gQWRkZWQgYSBuZXcgZ2xvYmFs
IHZhcmlhYmxlIGdNYWluV2luZG93LgorICAgICAgICAoV25kUHJvYyk6IE1vdmVkIHRvIE1haW5X
aW5kb3cuY3BwLgorICAgICAgICAocmVzaXplU3ViVmlld3MpOiBEaXR0by4KKyAgICAgICAgKFRv
Z2dsZU1lbnVGbGFnKTogUmVtb3ZlZCBzdGF0aWMgdG8gYmUgY2FsbGVkIGZyb20gTWFpbldpbmRv
dy5jcHAuCisgICAgICAgIChUb2dnbGVNZW51SXRlbSk6IERpdHRvLgorICAgICAgICAoQ3VzdG9t
VXNlckFnZW50KTogRm9sbG93IHRoZSBnbG9iYWwgdmFyaWFibGVzIHJlbW92YWwuCisgICAgICAg
IChEaXNwbGF5QXV0aERpYWxvZyk6IERpdHRvLgorICAgICAgICAobG9hZFVSTCk6IERpdHRvLgor
ICAgICAgICAoV25kUHJvYyk6IFJlbmFtZWQgdG8gTWFpbldpbmRvdzo6V25kUHJvYy4KKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoTWFp
bldpbmRvdzo6cmVnaXN0ZXJDbGFzcyk6IFJlbmFtZWQgZnJvbSBNeVJlZ2lzdGVyQ2xhc3Mgb2Yg
V2luTWFpbi5jcHAuCisgICAgICAgIChNYWluV2luZG93Ojppbml0KTogRXh0cmFjdGVkIE1haW5X
aW5kb3cgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tIHdXaW5NYWluLgorICAgICAgICAoTWFpbldp
bmRvdzo6cmVzaXplU3ViVmlld3MpOiBNb3ZlZCBmcm9tIENvbW1vbi5jcHAuCisgICAgICAgIChN
YWluV2luZG93OjpXbmRQcm9jKTogRGl0dG8uCisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01h
aW5XaW5kb3cuaDogQWRkZWQuCisgICAgICAgIChNYWluV2luZG93Ojpod25kKToKKyAgICAgICAg
KE1haW5XaW5kb3c6OmJyb3dzZXJXaW5kb3cpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9N
aW5pQnJvd3Nlci5jcHA6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6aW5pdCk6CisgICAgICAgIChN
aW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKTogRXh0cmFjdCBzb21lIGNvZGUgaW50byBNaW5pQnJv
d3Nlcjo6bG9hZERlZmF1bHRIVE1MLgorICAgICAgICAoTWluaUJyb3dzZXI6OmxvYWREZWZhdWx0
SFRNTCk6IEV4dHJhY3RlZCBmcm9tIE1pbmlCcm93c2VyOjpwcmVwYXJlVmlld3MuCisgICAgICAg
ICogTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmg6CisgICAgICAgICogTWluaUJyb3dzZXIv
d2luL1dpbk1haW4uY3BwOgorICAgICAgICAod1dpbk1haW4pOiBFeHRyYWN0ZWQgTWFpbldpbmRv
dyBpbml0aWFsaXphdGlvbiBjb2RlIGludG8gTWFpbldpbmRvdzo6aW5pdC4KKyAgICAgICAgKE15
UmVnaXN0ZXJDbGFzcyk6IE1vdmVkIHRvIE1haW5XaW5kb3cuY3BwLgorCiAyMDE4LTA1LTIzICBS
b3kgUmVhcG9yICA8cnJlYXBvckBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIEhlbHZldGljYSBv
biBidWlsZC53ZWJraXQub3JnIHdlYnBhZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vQ01ha2VMaXN0cy50eHQgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50
eHQKaW5kZXggYjg5NTZmODMyMGM3Yjg5NDI2ZmQzYWRiYjA1OTk4ZjM0YWY5MGMzZC4uNzBlNmQ3
Y2U1NmIzZTg4YzFhMGI1NzVlMTNhN2EzNGVjM2QxZmFlMCAxMDA2NDQKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9D
TWFrZUxpc3RzLnR4dApAQCAtOCw2ICs4LDcgQEAgc2V0KE1pbmlCcm93c2VyX0lOQ0xVREVfRElS
RUNUT1JJRVMKIHNldChNaW5pQnJvd3Nlcl9TT1VSQ0VTCiAgICAgQWNjZXNzaWJpbGl0eURlbGVn
YXRlLmNwcAogICAgIERPTURlZmF1bHRJbXBsLmNwcAorICAgIE1haW5XaW5kb3cuY3BwCiAgICAg
UGFnZUxvYWRUZXN0Q2xpZW50LmNwcAogICAgIFByaW50V2ViVUlEZWxlZ2F0ZS5jcHAKICAgICBS
ZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9Db21tb24uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKaW5kZXggMTFj
NjU0OWYzNjgzOGZiOGM4YmM5NTQxNjA1NzEzY2YzMGUzZDNhMi4uY2QyODA3NDBkY2FiYmZkY2U3
MWE1MTRkMjQyYzM3Y2U0NGU3ZGQ3ZCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L0NvbW1vbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKQEAgLTI3
LDYgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKKyNpbmNsdWRl
ICJNYWluV2luZG93LmgiCiAjaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKICNpbmNsdWRlICJNaW5p
QnJvd3NlclJlcGxhY2UuaCIKICNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+
CkBAIC01NSwxMCArNTYsNiBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3aW5pbmV0
Lmg+CiAKLSNkZWZpbmUgTUFYX0xPQURTVFJJTkcgMTAwCi0jZGVmaW5lIFVSTEJBUl9IRUlHSFQg
IDI0Ci0jZGVmaW5lIENPTlRST0xCVVRUT05fV0lEVEggMjQKLQogc3RhdGljIGNvbnN0IGludCBt
YXhIaXN0b3J5U2l6ZSA9IDEwOwogCiAjaWZuZGVmIFdNX0RQSUNIQU5HRUQKQEAgLTcwLDM0ICs2
NywxOCBAQCB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVz
dCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdQogCiAvLyBHbG9iYWwgVmFyaWFibGVzOgog
SElOU1RBTkNFIGhJbnN0OwotSFdORCBoTWFpblduZDsKLUhXTkQgaFVSTEJhclduZDsKLUhHRElP
QkogaFVSTEZvbnQ7Ci1IV05EIGhCYWNrQnV0dG9uV25kOwotSFdORCBoRm9yd2FyZEJ1dHRvbldu
ZDsKIEhXTkQgaENhY2hlV25kOwogV05EUFJPQyBEZWZFZGl0UHJvYyA9IG51bGxwdHI7CiBXTkRQ
Uk9DIERlZkJ1dHRvblByb2MgPSBudWxscHRyOwotV05EUFJPQyBEZWZXZWJLaXRQcm9jID0gbnVs
bHB0cjsKLUhXTkQgZ1ZpZXdXaW5kb3cgPSAwOworCitNYWluV2luZG93KiBnTWFpbldpbmRvdyA9
IG51bGxwdHI7CiBNaW5pQnJvd3NlciogZ01pbmlCcm93c2VyID0gbnVsbHB0cjsKLVRDSEFSIHN6
VGl0bGVbTUFYX0xPQURTVFJJTkddOyAvLyBUaGUgdGl0bGUgYmFyIHRleHQKLVRDSEFSIHN6V2lu
ZG93Q2xhc3NbTUFYX0xPQURTVFJJTkddOyAvLyB0aGUgbWFpbiB3aW5kb3cgY2xhc3MgbmFtZQog
CiAvLyBTdXBwb3J0IG1vdmluZyB0aGUgdHJhbnNwYXJlbnQgd2luZG93CiBQT0lOVCBzX3dpbmRv
d1Bvc2l0aW9uID0geyAxMDAsIDEwMCB9OwogU0laRSBzX3dpbmRvd1NpemUgPSB7IDUwMCwgMjAw
IH07CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiB0
aGlzIGNvZGUgbW9kdWxlOgotQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5j
ZSk7Ci1MUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwotSU5UX1BUUiBDQUxMQkFDSyBBYm91dChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1J
TlRfUFRSIENBTExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7Ci1MUkVTVUxUIENBTExCQUNLIEVkaXRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFN
KTsKLUxSRVNVTFQgQ0FMTEJBQ0sgQmFja0J1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOwotTFJFU1VMVCBDQUxMQkFDSyBGb3J3YXJkQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBX
UEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIFJlbG9hZEJ1dHRvblByb2MoSFdORCwg
VUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMoSFdORCwgVUlO
VCwgV1BBUkFNLCBMUEFSQU0pOwogSU5UX1BUUiBDQUxMQkFDSyBBdXRoRGlhbG9nUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAKIHN0YXRpYyB2b2lkIGxvYWRVUkwoQlNUUiB1cmxC
U3RyKTsKQEAgLTEwNywyNyArODgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKIH0KIAotc3RhdGljIHZvaWQgcmVzaXplU3Vi
Vmlld3MoKQotewotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVG
YWN0b3JGb3JXaW5kb3coaE1haW5XbmQpOwotCi0gICAgUkVDVCByY0NsaWVudDsKLSAgICBHZXRD
bGllbnRSZWN0KGhNYWluV25kLCAmcmNDbGllbnQpOwotCi0gICAgaW50IGhlaWdodCA9IHNjYWxl
RmFjdG9yICogVVJMQkFSX0hFSUdIVDsKLSAgICBpbnQgd2lkdGggPSBzY2FsZUZhY3RvciAqIENP
TlRST0xCVVRUT05fV0lEVEg7Ci0KLSAgICBNb3ZlV2luZG93KGhCYWNrQnV0dG9uV25kLCAwLCAw
LCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3YXJkQnV0dG9uV25k
LCB3aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhoVVJMQmFy
V25kLCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRSVUUpOwotCi0gICAg
OjpTZW5kTWVzc2FnZShoVVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9TRVRGT05UKSwg
cmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGdNaW5pQnJvd3Nlci0+dXJsQmFyRm9udCgpKSwgVFJV
RSk7Ci0KLSAgICBpZiAoZ01pbmlCcm93c2VyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSB8fCAhZ1Zp
ZXdXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAw
LCBoZWlnaHQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBoZWlnaHQsIFRSVUUp
OwotfQotCiBzdGF0aWMgdm9pZCBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpCiB7CiAgICAgUkVD
VCBkZXNrdG9wOwpAQCAtMjc3LDcgKzIzNyw3IEBAIHZvaWQgUHJpbnRWaWV3KEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgIDo6RGVsZXRl
REMocHJpbnREQyk7CiB9CiAKLXN0YXRpYyB2b2lkIFRvZ2dsZU1lbnVGbGFnKEhXTkQgaFduZCwg
VUlOVCBtZW51SUQpCit2b2lkIFRvZ2dsZU1lbnVGbGFnKEhXTkQgaFduZCwgVUlOVCBtZW51SUQp
CiB7CiAgICAgSE1FTlUgbWVudSA9IDo6R2V0TWVudShoV25kKTsKIApAQCAtMzE5LDcgKzI3OSw3
IEBAIHN0YXRpYyB2b2lkIHR1cm5PZmZPdGhlclVzZXJBZ2VudHMoSE1FTlUgbWVudSkKICAgICB9
CiB9CiAKLXN0YXRpYyBib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQp
Citib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiB7CiAgICAgaWYg
KCFnTWluaUJyb3dzZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5OSw5NiArMzU5LDYg
QEAgc3RhdGljIGJvb2wgVG9nZ2xlTWVudUl0ZW0oSFdORCBoV25kLCBVSU5UIG1lbnVJRCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0IGludCBkcmFnQmFySGVpZ2h0ID0gMzA7
Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAg
ICBjYXNlIFdNX0NPTU1BTkQ6IHsKLSAgICAgICAgaW50IHdtSWQgPSBMT1dPUkQod1BhcmFtKTsK
LSAgICAgICAgaW50IHdtRXZlbnQgPSBISVdPUkQod1BhcmFtKTsKLSAgICAgICAgaWYgKHdtSWQg
Pj0gSURNX0hJU1RPUllfTElOSzAgJiYgd21JZCA8PSBJRE1fSElTVE9SWV9MSU5LOSkgewotICAg
ICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXIt
Pm5hdmlnYXRlVG9IaXN0b3J5KGhXbmQsIHdtSWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gUGFyc2UgdGhlIG1lbnUgc2VsZWN0aW9uczoKLSAgICAgICAgc3dp
dGNoICh3bUlkKSB7Ci0gICAgICAgIGNhc2UgSURNX0FCT1VUOgotICAgICAgICAgICAgRGlhbG9n
Qm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FCT1VUQk9YKSwgaFduZCwgQWJvdXQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0VYSVQ6Ci0gICAgICAgICAgICBE
ZXN0cm95V2luZG93KGhXbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURN
X1BSSU5UOgotICAgICAgICAgICAgUHJpbnRWaWV3KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9XRUJfSU5TUEVDVE9S
OgotICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJy
b3dzZXItPmxhdW5jaEluc3BlY3RvcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSURNX0NBQ0hFUzoKLSAgICAgICAgICAgIGlmICghOjpJc1dpbmRvdyhoQ2FjaGVXbmQpKSB7
Ci0gICAgICAgICAgICAgICAgaENhY2hlV25kID0gQ3JlYXRlRGlhbG9nKGhJbnN0LCBNQUtFSU5U
UkVTT1VSQ0UoSUREX0NBQ0hFUyksIGhXbmQsIENhY2hlcyk7Ci0gICAgICAgICAgICAgICAgOjpT
aG93V2luZG93KGhDYWNoZVduZCwgU1dfU0hPVyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fSElTVE9SWV9CQUNLV0FSRDoKLSAgICAgICAgY2Fz
ZSBJRE1fSElTVE9SWV9GT1JXQVJEOgotICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKLSAg
ICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPm5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoaFdu
ZCwgd21JZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fVUFfT1RIRVI6
Ci0gICAgICAgICAgICBpZiAod21FdmVudCkKLSAgICAgICAgICAgICAgICBUb2dnbGVNZW51SXRl
bShoV25kLCB3bUlkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBEaWFsb2dC
b3goaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRERfVVNFUl9BR0VOVCksIGhXbmQsIEN1c3RvbVVz
ZXJBZ2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fQUNUVUFMX1NJ
WkU6Ci0gICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgICAgIGdNaW5p
QnJvd3Nlci0+cmVzZXRab29tKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RE1fWk9PTV9JTjoKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAg
ICAgZ01pbmlCcm93c2VyLT56b29tSW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIElETV9aT09NX09VVDoKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAg
ICAgICAgICAgZ01pbmlCcm93c2VyLT56b29tT3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJRE1fU0hPV19MQVlFUl9UUkVFOgotICAgICAgICAgICAgaWYgKGdNaW5pQnJv
d3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnNob3dMYXllclRyZWUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKCFUb2dn
bGVNZW51SXRlbShoV25kLCB3bUlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRGVmV2luZG93
UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdNX0RFU1RST1k6Ci0jaWYgVVNFKENGKQotICAg
ICAgICBDRlJ1bkxvb3BTdG9wKENGUnVuTG9vcEdldE1haW4oKSk7Ci0jZW5kaWYKLSAgICAgICAg
UG9zdFF1aXRNZXNzYWdlKDApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdNX1NJWkU6Ci0g
ICAgICAgIGlmICghZ01pbmlCcm93c2VyIHx8ICFnTWluaUJyb3dzZXItPmhhc1dlYlZpZXcoKSkK
LSAgICAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtKTsKLQotICAgICAgICByZXNpemVTdWJWaWV3cygpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdNX0RQSUNIQU5HRUQ6Ci0gICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAg
ICAgICBnTWluaUJyb3dzZXItPnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIHJl
dHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFy
YW0sIGxQYXJhbSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIExSRVNVTFQgQ0FMTEJB
Q0sgRWRpdFByb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0pCiB7CiAgICAgc3dpdGNoIChtZXNzYWdlKSB7CkBAIC02MDEsNyArNDcxLDcgQEAg
SU5UX1BUUiBDQUxMQkFDSyBDdXN0b21Vc2VyQWdlbnQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSB3UGFyYW0sIExQQVJBTQogICAgICAgICAgICAgX2JzdHJfdCBic3RyKGJ1ZmZlcik7
CiAgICAgICAgICAgICBpZiAoYnN0ci5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGdNaW5p
QnJvd3Nlci0+c2V0VXNlckFnZW50KGJzdHIpOwotICAgICAgICAgICAgICAgIDo6UG9zdE1lc3Nh
Z2UoaE1haW5XbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX0NPTU1BTkQpLCBNQUtFTFBBUkFNKElE
TV9VQV9PVEhFUiwgMSksIDApOworICAgICAgICAgICAgICAgIDo6UG9zdE1lc3NhZ2UoZ01haW5X
aW5kb3ctPmh3bmQoKSwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fQ09NTUFORCksIE1BS0VMUEFSQU0o
SURNX1VBX09USEVSLCAxKSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNjE2
LDcgKzQ4Niw3IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ3VzdG9tVXNlckFnZW50KEhXTkQgaERsZywg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0KIAogSFJFU1VMVCBEaXNwbGF5QXV0
aERpYWxvZyhzdGQ6OndzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OndzdHJpbmcmIHBhc3N3b3JkKQog
ewotICAgIGF1dG8gcmVzdWx0ID0gRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSURE
X0FVVEgpLCBoTWFpblduZCwgQXV0aERpYWxvZ1Byb2MpOworICAgIGF1dG8gcmVzdWx0ID0gRGlh
bG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FVVEgpLCBnTWFpbldpbmRvdy0+aHdu
ZCgpLCBBdXRoRGlhbG9nUHJvYyk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBF
X0ZBSUw7CiAKQEAgLTY2OSw3ICs1MzksNyBAQCBzdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgcGFz
c2VkVVJMKQogICAgIGlmIChGQUlMRUQoZ01pbmlCcm93c2VyLT5sb2FkVVJMKHBhc3NlZFVSTCkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTZXRGb2N1cyhnVmlld1dpbmRvdyk7CisgICAgU2V0
Rm9jdXMoZ01pbmlCcm93c2VyLT5od25kKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRXaW5kb3dU
ZXh0KEhXTkQgZGlhbG9nLCBVSU5UIGZpZWxkLCBfYnN0cl90IHZhbHVlKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIv
d2luL01haW5XaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyMDAzMWMzYjE5YTE2Nzk2Y2I0YmMxYTUz
MDBiNmY5ZWY0ZGU5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4v
TWFpbldpbmRvdy5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUg
Ik1haW5XaW5kb3cuaCIKKyNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUgIk1pbmlC
cm93c2VyTGliUmVzb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7Cit9CisKKyNkZWZpbmUgVVJMQkFSX0hFSUdIVCAg
MjQKKyNkZWZpbmUgQ09OVFJPTEJVVFRPTl9XSURUSCAyNAorCitjb25zdGV4cHIgc2l6ZV90IE1B
WF9MT0FEU1RSSU5HID0gMTAwOworVENIQVIgc3pUaXRsZVtNQVhfTE9BRFNUUklOR107IC8vIFRo
ZSB0aXRsZSBiYXIgdGV4dAorVENIQVIgc3pXaW5kb3dDbGFzc1tNQVhfTE9BRFNUUklOR107IC8v
IHRoZSBtYWluIHdpbmRvdyBjbGFzcyBuYW1lCisKK2V4dGVybiBNYWluV2luZG93KiBnTWFpbldp
bmRvdzsKK2V4dGVybiBNaW5pQnJvd3NlciogZ01pbmlCcm93c2VyOworZXh0ZXJuIFdORFBST0Mg
RGVmRWRpdFByb2M7CitleHRlcm4gV05EUFJPQyBEZWZCdXR0b25Qcm9jOworZXh0ZXJuIEhJTlNU
QU5DRSBoSW5zdDsKK2V4dGVybiBIV05EIGhDYWNoZVduZDsKKworTFJFU1VMVCBDQUxMQkFDSyBF
ZGl0UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CitMUkVTVUxUIENBTExCQUNLIEJh
Y2tCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xSRVNVTFQgQ0FMTEJB
Q0sgRm9yd2FyZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworTFJFU1VM
VCBDQUxMQkFDSyBSZWxvYWRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
K0lOVF9QVFIgQ0FMTEJBQ0sgQWJvdXQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworSU5U
X1BUUiBDQUxMQkFDSyBDdXN0b21Vc2VyQWdlbnQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OworSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwor
SU5UX1BUUiBDQUxMQkFDSyBBdXRoRGlhbG9nUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7Cit2b2lkIFByaW50VmlldyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSk7Citib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBt
ZW51SUQpOworCitBVE9NIE1haW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0
YW5jZSkKK3sKKyAgICBMb2FkU3RyaW5nKGhJbnN0YW5jZSwgSURTX0FQUF9USVRMRSwgc3pUaXRs
ZSwgTUFYX0xPQURTVFJJTkcpOworICAgIExvYWRTdHJpbmcoaEluc3RhbmNlLCBJRENfTUlOSUJS
T1dTRVIsIHN6V2luZG93Q2xhc3MsIE1BWF9MT0FEU1RSSU5HKTsKKworICAgIFdORENMQVNTRVgg
d2NleDsKKworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworCisgICAgd2Nl
eC5zdHlsZSAgICAgICAgICA9IENTX0hSRURSQVcgfCBDU19WUkVEUkFXOworICAgIHdjZXgubHBm
blduZFByb2MgICAgPSBXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAg
IHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBoSW5z
dGFuY2U7CisgICAgd2NleC5oSWNvbiAgICAgICAgICA9IExvYWRJY29uKGhJbnN0YW5jZSwgTUFL
RUlOVFJFU09VUkNFKElESV9NSU5JQlJPV1NFUikpOworICAgIHdjZXguaEN1cnNvciAgICAgICAg
PSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7
CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IE1BS0VJTlRSRVNPVVJDRShJRENfTUlOSUJST1dT
RVIpOworICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBzeldpbmRvd0NsYXNzOworICAgIHdjZXgu
aEljb25TbSAgICAgICAgPSBMb2FkSWNvbih3Y2V4LmhJbnN0YW5jZSwgTUFLRUlOVFJFU09VUkNF
KElESV9TTUFMTCkpOworCisgICAgcmV0dXJuIFJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisK
K2Jvb2wgTWFpbldpbmRvdzo6aW5pdChISU5TVEFOQ0UgaEluc3RhbmNlLCBib29sIHVzZXNMYXll
cmVkV2ViVmlldywgYm9vbCBwYWdlTG9hZFRlc3RpbmcpCit7CisgICAgbV9oTWFpblduZCA9IENy
ZWF0ZVdpbmRvdyhzeldpbmRvd0NsYXNzLCBzelRpdGxlLCBXU19PVkVSTEFQUEVEV0lORE9XLAor
ICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCAwLCAwLCBoSW5zdGFu
Y2UsIDApOworCisgICAgaWYgKCFtX2hNYWluV25kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2lu
ZG93KG51bGxwdHIpOworICAgIG1faEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRU
T04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwg
bV9oTWFpblduZCwgMCwgaEluc3RhbmNlLCAwKTsKKyAgICBtX2hGb3J3YXJkQnV0dG9uV25kID0g
Q3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgQlNf
VEVYVCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAwLCAwLCBtX2hNYWlu
V25kLCAwLCBoSW5zdGFuY2UsIDApOworICAgIG1faFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhM
IkVESVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwg
RVNfQVVUT1ZTQ1JPTEwsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAs
IDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0YW5jZSwgMCk7CisKKyAgICBEZWZFZGl0UHJvYyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihtX2hVUkxCYXJXbmQs
IEdXTFBfV05EUFJPQykpOworICAgIERlZkJ1dHRvblByb2MgPSByZWludGVycHJldF9jYXN0PFdO
RFBST0M+KEdldFdpbmRvd0xvbmdQdHIobV9oQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DKSk7
CisgICAgU2V0V2luZG93TG9uZ1B0cihtX2hVUkxCYXJXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRl
cnByZXRfY2FzdDxMT05HX1BUUj4oRWRpdFByb2MpKTsKKyAgICBTZXRXaW5kb3dMb25nUHRyKG1f
aEJhY2tCdXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4o
QmFja0J1dHRvblByb2MpKTsKKyAgICBTZXRXaW5kb3dMb25nUHRyKG1faEZvcndhcmRCdXR0b25X
bmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRm9yd2FyZEJ1dHRv
blByb2MpKTsKKworICAgIFNldEZvY3VzKG1faFVSTEJhclduZCk7CisKKyAgICBtX2Jyb3dzZXJX
aW5kb3cgPSBzdGQ6Om1ha2VfdW5pcXVlPE1pbmlCcm93c2VyPihtX2hNYWluV25kLCBtX2hVUkxC
YXJXbmQsIHVzZXNMYXllcmVkV2ViVmlldywgcGFnZUxvYWRUZXN0aW5nKTsKKyAgICBpZiAoIW1f
YnJvd3NlcldpbmRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEhSRVNVTFQgaHIgPSBt
X2Jyb3dzZXJXaW5kb3ctPmluaXQoKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmVzaXplU3ViVmlld3MoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBNYWluV2luZG93OjpyZXNpemVTdWJWaWV3cygpCit7CisgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhtX2hNYWluV25kKTsK
KworICAgIFJFQ1QgcmNDbGllbnQ7CisgICAgR2V0Q2xpZW50UmVjdChtX2hNYWluV25kLCAmcmND
bGllbnQpOworCisgICAgaW50IGhlaWdodCA9IHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVDsK
KyAgICBpbnQgd2lkdGggPSBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEg7CisKKyAg
ICBNb3ZlV2luZG93KG1faEJhY2tCdXR0b25XbmQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUp
OworICAgIE1vdmVXaW5kb3cobV9oRm9yd2FyZEJ1dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBo
ZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3cobV9oVVJMQmFyV25kLCB3aWR0aCAqIDIsIDAs
IHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRSVUUpOworCisgICAgOjpTZW5kTWVzc2FnZShtX2hV
UkxCYXJXbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX1NFVEZPTlQpLCByZWludGVycHJldF9jYXN0
PFdQQVJBTT4obV9icm93c2VyV2luZG93LT51cmxCYXJGb250KCkpLCBUUlVFKTsKKworICAgIGlm
IChtX2Jyb3dzZXJXaW5kb3ctPnVzZXNMYXllcmVkV2ViVmlldygpIHx8ICFtX2Jyb3dzZXJXaW5k
b3ctPmh3bmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE1vdmVXaW5kb3cobV9icm93c2VyV2lu
ZG93LT5od25kKCksIDAsIGhlaWdodCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSAt
IGhlaWdodCwgVFJVRSk7Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgTWFpbldpbmRvdzo6V25kUHJv
YyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkK
K3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX0NPTU1BTkQ6IHsKKyAgICAg
ICAgaW50IHdtSWQgPSBMT1dPUkQod1BhcmFtKTsKKyAgICAgICAgaW50IHdtRXZlbnQgPSBISVdP
UkQod1BhcmFtKTsKKyAgICAgICAgaWYgKHdtSWQgPj0gSURNX0hJU1RPUllfTElOSzAgJiYgd21J
ZCA8PSBJRE1fSElTVE9SWV9MSU5LOSkgeworICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikK
KyAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPm5hdmlnYXRlVG9IaXN0b3J5KGhXbmQsIHdt
SWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gUGFyc2UgdGhl
IG1lbnUgc2VsZWN0aW9uczoKKyAgICAgICAgc3dpdGNoICh3bUlkKSB7CisgICAgICAgIGNhc2Ug
SURNX0FCT1VUOgorICAgICAgICAgICAgRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0Uo
SUREX0FCT1VUQk9YKSwgaFduZCwgQWJvdXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSURNX0VYSVQ6CisgICAgICAgICAgICBEZXN0cm95V2luZG93KGhXbmQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1BSSU5UOgorICAgICAgICAgICAgUHJpbnRW
aWV3KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIElETV9XRUJfSU5TUEVDVE9SOgorICAgICAgICAgICAgaWYgKGdNaW5pQnJv
d3NlcikKKyAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPmxhdW5jaEluc3BlY3RvcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX0NBQ0hFUzoKKyAgICAgICAgICAg
IGlmICghOjpJc1dpbmRvdyhoQ2FjaGVXbmQpKSB7CisgICAgICAgICAgICAgICAgaENhY2hlV25k
ID0gQ3JlYXRlRGlhbG9nKGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0NBQ0hFUyksIGhXbmQs
IENhY2hlcyk7CisgICAgICAgICAgICAgICAgOjpTaG93V2luZG93KGhDYWNoZVduZCwgU1dfU0hP
Vyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1f
SElTVE9SWV9CQUNLV0FSRDoKKyAgICAgICAgY2FzZSBJRE1fSElTVE9SWV9GT1JXQVJEOgorICAg
ICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXIt
Pm5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoaFduZCwgd21JZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJRE1fVUFfT1RIRVI6CisgICAgICAgICAgICBpZiAod21FdmVudCkK
KyAgICAgICAgICAgICAgICBUb2dnbGVNZW51SXRlbShoV25kLCB3bUlkKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBEaWFsb2dCb3goaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJ
RERfVVNFUl9BR0VOVCksIGhXbmQsIEN1c3RvbVVzZXJBZ2VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJRE1fQUNUVUFMX1NJWkU6CisgICAgICAgICAgICBpZiAoZ01pbmlC
cm93c2VyKQorICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+cmVzZXRab29tKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fWk9PTV9JTjoKKyAgICAgICAgICAgIGlm
IChnTWluaUJyb3dzZXIpCisgICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT56b29tSW4oKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9aT09NX09VVDoKKyAgICAgICAg
ICAgIGlmIChnTWluaUJyb3dzZXIpCisgICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT56b29t
T3V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fU0hPV19MQVlFUl9U
UkVFOgorICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgICAgICBnTWlu
aUJyb3dzZXItPnNob3dMYXllclRyZWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgaWYgKCFUb2dnbGVNZW51SXRlbShoV25kLCB3bUlkKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSk7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdNX0RFU1RST1k6CisjaWYgVVNFKENGKQorICAgICAgICBDRlJ1bkxvb3BTdG9wKENGUnVuTG9v
cEdldE1haW4oKSk7CisjZW5kaWYKKyAgICAgICAgUG9zdFF1aXRNZXNzYWdlKDApOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIGlmICghZ01pbmlCcm93c2VyIHx8
ICFnTWluaUJyb3dzZXItPmhhc1dlYlZpZXcoKSkKKyAgICAgICAgICAgIHJldHVybiBEZWZXaW5k
b3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKworICAgICAgICBnTWFpbldp
bmRvdy0+cmVzaXplU3ViVmlld3MoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9EUElD
SEFOR0VEOgorICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAgICAgZ01pbmlCcm93
c2VyLT51cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICByZXR1cm4gRGVmV2luZG93
UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwor
ICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL01haW5XaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2E4ZjJmMzU5ZjBhMjVkYWJkZjA3ZmFjN2E3N2UyYjc4NGJkN2I0NQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmgKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPG1lbW9yeT4KKworY2xhc3MgTWluaUJyb3dzZXI7
CisKK2NsYXNzIE1haW5XaW5kb3cgeworcHVibGljOgorICAgIGJvb2wgaW5pdChISU5TVEFOQ0Ug
aEluc3RhbmNlLCBib29sIHVzZXNMYXllcmVkV2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2Fk
VGVzdGluZyA9IGZhbHNlKTsKKworICAgIHZvaWQgcmVzaXplU3ViVmlld3MoKTsKKyAgICBIV05E
IGh3bmQoKSB7IHJldHVybiBtX2hNYWluV25kOyB9CisgICAgTWluaUJyb3dzZXIqIGJyb3dzZXJX
aW5kb3coKSB7IHJldHVybiBtX2Jyb3dzZXJXaW5kb3cuZ2V0KCk7IH0KKyAgICAKKyAgICBzdGF0
aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
KyAgICBzdGF0aWMgQVRPTSByZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpOworCitw
cml2YXRlOgorICAgIEhXTkQgbV9oTWFpblduZDsKKyAgICBIV05EIG1faFVSTEJhclduZDsKKyAg
ICBIV05EIG1faEJhY2tCdXR0b25XbmQ7CisgICAgSFdORCBtX2hGb3J3YXJkQnV0dG9uV25kOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxNaW5pQnJvd3Nlcj4gbV9icm93c2VyV2luZG93OworfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAgYi9Ub29scy9N
aW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwCmluZGV4IDc0OWJmMDQ0YTVhYzc1NDE5Mzgy
NjFlNWU5ZDU3MDBhOTcyNWRiMDYuLmExNjFjNThhZmYwMzE1NDExNzI4YjdiNzAzMDY3YjYwYjg0
MWRkMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmNwcApAQCAtNjksNyArNjks
NyBAQCBNaW5pQnJvd3Nlcjo6TWluaUJyb3dzZXIoSFdORCBtYWluV25kLCBIV05EIHVybEJhcldu
ZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldywgYgogewogfQogCi1IUkVTVUxUIE1pbmlCcm93c2Vy
Ojppbml0KF9ic3RyX3QmIHJlcXVlc3RlZFVSTCkKK0hSRVNVTFQgTWluaUJyb3dzZXI6OmluaXQo
KQogewogICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7CiAKQEAgLTEzNSw3ICsxMzUsNyBA
QCBIUkVTVUxUIE1pbmlCcm93c2VyOjppbml0KF9ic3RyX3QmIHJlcXVlc3RlZFVSTCkKICAgICBp
ZiAodXNlc0xheWVyZWRXZWJWaWV3KCkpCiAgICAgICAgIGNsaWVudFJlY3QgPSB7IHNfd2luZG93
UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dp
bmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSB9OwogCi0g
ICAgaHIgPSBwcmVwYXJlVmlld3MobV9oTWFpblduZCwgY2xpZW50UmVjdCwgcmVxdWVzdGVkVVJM
LkdldEJTVFIoKSk7CisgICAgaHIgPSBwcmVwYXJlVmlld3MobV9oTWFpblduZCwgY2xpZW50UmVj
dCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKIApAQCAtMTU3LDcg
KzE1Nyw3IEBAIGJvb2wgTWluaUJyb3dzZXI6OnNldENhY2hlRm9sZGVyKCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKEhXTkQgbWFpbldu
ZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCwgY29uc3QgQlNUUiYgcmVxdWVzdGVkVVJMKQorSFJF
U1VMVCBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYg
Y2xpZW50UmVjdCkKIHsKICAgICBpZiAoIW1fd2ViVmlldykKICAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKQEAgLTE3MCwxNSArMTcwLDYgQEAgSFJFU1VMVCBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdz
KEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCwgY29uc3QgQlMKICAgICBpZiAo
RkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgaWYgKCFyZXF1ZXN0ZWRVUkwp
IHsKLSAgICAgICAgSVdlYkZyYW1lUHRyIGZyYW1lOwotICAgICAgICBociA9IG1fd2ViVmlldy0+
bWFpbkZyYW1lKCZmcmFtZS5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgICAgIGZyYW1lLT5sb2FkSFRNTFN0
cmluZyhfYnN0cl90KGRlZmF1bHRIVE1MKS5HZXRCU1RSKCksIDApOwotICAgIH0KLQogICAgIGhy
ID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VHJhbnNwYXJlbnQobV91c2VMYXllcmVkV2ViVmlldyk7
CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKQEAgLTE5Miw2ICsxODMs
MTcgQEAgSFJFU1VMVCBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29u
c3QgUkVDVCYgY2xpZW50UmVjdCwgY29uc3QgQlMKICAgICByZXR1cm4gaHI7CiB9CiAKK0hSRVNV
TFQgTWluaUJyb3dzZXI6OmxvYWREZWZhdWx0SFRNTCgpCit7CisgICAgSVdlYkZyYW1lUHRyIGZy
YW1lOworICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50
ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoX2JzdHJfdChkZWZhdWx0SFRNTCkuR2V0QlNUUigp
LCAwKTsKKyAgICByZXR1cm4gaHI7Cit9CisKIHN0YXRpYyBXTkRQUk9DIGdEZWZXZWJLaXRQcm9j
OwogCiBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB2aWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01p
bmlCcm93c2VyLmgKaW5kZXggNGViNThjMmI0MWRkMmVmOGMxZjUxNzc0YWU1ZWI4ODY0NTVlNzhj
Ni4uZmJmYzM1Y2RkYTJhOTI3NzY0ZjI1YzJmYjQ4ZjRjZGI2ZDlmNDFjOCAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmgKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL01pbmlCcm93c2VyLmgKQEAgLTQ5LDkgKzQ5LDEwIEBAIGNsYXNzIE1pbmlCcm93c2Vy
IHsKIHB1YmxpYzoKICAgICBNaW5pQnJvd3NlcihIV05EIG1haW5XbmQsIEhXTkQgdXJsQmFyV25k
LCBib29sIHVzZUxheWVyZWRXZWJWaWV3ID0gZmFsc2UsIGJvb2wgcGFnZUxvYWRUZXN0aW5nID0g
ZmFsc2UpOwogCi0gICAgSFJFU1VMVCBpbml0KF9ic3RyX3QmIHJlcXVlc3RlZFVSTCk7Ci0gICAg
SFJFU1VMVCBwcmVwYXJlVmlld3MoSFdORCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0
LCBjb25zdCBCU1RSJiByZXF1ZXN0ZWRVUkwpOworICAgIEhSRVNVTFQgaW5pdCgpOworICAgIEhS
RVNVTFQgcHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCk7
CiAKKyAgICBIUkVTVUxUIGxvYWREZWZhdWx0SFRNTCgpOwogICAgIEhSRVNVTFQgbG9hZFVSTChj
b25zdCBCU1RSJiBwYXNzZWRVUkwpOwogCiAgICAgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJ
V2ViVmlldyYpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4uY3Bw
IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4uY3BwCmluZGV4IDA4N2U5NGRmMDY4MjIz
MDVmMzVjNzUxN2U3ODIwOWQ4MzI0NTJkMDQuLjRkNTYwODM1OGNlZmU1YmNmZjFhN2U4Y2MyNGFl
MzA0ZGZjZWFhMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNw
cAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAKQEAgLTMyLDEwICszMiw2
IEBACiAjaW5jbHVkZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNvbW1v
bi5jcHAiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWZsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9y
V2luZG93KEhXTkQpOwotfQotCiBpbnQgV0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RBTkNFIGhJ
bnN0YW5jZSwgX0luX29wdF8gSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIF9Jbl8gTFBXU1RSIGxw
c3RyQ21kTGluZSwgX0luXyBpbnQgbkNtZFNob3cpCiB7CiAjaWZkZWYgX0NSVERCR19NQVBfQUxM
T0MKQEAgLTU5LDEwICs1NSw3IEBAIGludCBXSU5BUEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0Ug
aEluc3RhbmNlLCBfSW5fb3B0XyBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwKIAogICAgIHBhcnNl
Q29tbWFuZExpbmUodXNlc0xheWVyZWRXZWJWaWV3LCB1c2VGdWxsRGVza3RvcCwgcGFnZUxvYWRU
ZXN0aW5nLCByZXF1ZXN0ZWRVUkwpOwogCi0gICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWwgc3RyaW5n
cwotICAgIExvYWRTdHJpbmcoaEluc3QsIElEU19BUFBfVElUTEUsIHN6VGl0bGUsIE1BWF9MT0FE
U1RSSU5HKTsKLSAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRENfTUlOSUJST1dTRVIsIHN6V2luZG93
Q2xhc3MsIE1BWF9MT0FEU1RSSU5HKTsKLSAgICBNeVJlZ2lzdGVyQ2xhc3MoaEluc3QpOworICAg
IE1haW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MoaEluc3QpOwogCiAgICAgaWYgKHVzZUZ1bGxEZXNr
dG9wKQogICAgICAgICBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpOwpAQCAtNzIsNDcgKzY1LDIw
IEBAIGludCBXSU5BUEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0UgaEluc3RhbmNlLCBfSW5fb3B0
XyBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwKIAogICAgIDo6U2V0UHJvY2Vzc0RQSUF3YXJlKCk7
CiAKLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9y
V2luZG93KG51bGxwdHIpOwotCi0gICAgaE1haW5XbmQgPSBDcmVhdGVXaW5kb3coc3pXaW5kb3dD
bGFzcywgc3pUaXRsZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAgQ1dfVVNFREVGQVVM
VCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgMCwgMCwgaEluc3QsIDApOwotCi0gICAgaWYgKCFoTWFp
blduZCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaEJhY2tCdXR0b25XbmQgPSBDcmVh
dGVXaW5kb3coTCJCVVRUT04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVY
VCwgMCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICBoRm9yd2FyZEJ1dHRv
blduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIsIFdTX0NISUxEIHwgV1NfVklTSUJM
RSB8IEJTX1RFWFQsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURUSCwgMCwgMCwgMCwg
aE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwi
RURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBF
U19BVVRPVlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwg
MCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLQotICAgIFNob3dXaW5kb3coaE1haW5XbmQs
IG5DbWRTaG93KTsKLSAgICBVcGRhdGVXaW5kb3coaE1haW5XbmQpOwotCi0gICAgRGVmRWRpdFBy
b2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KEdldFdpbmRvd0xvbmdQdHIoaFVSTEJhcldu
ZCwgR1dMUF9XTkRQUk9DKSk7Ci0gICAgRGVmQnV0dG9uUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihoQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DKSk7
Ci0gICAgU2V0V2luZG93TG9uZ1B0cihoVVJMQmFyV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJw
cmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9jKSk7Ci0gICAgU2V0V2luZG93TG9uZ1B0cihoQmFj
a0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNr
QnV0dG9uUHJvYykpOwotICAgIFNldFdpbmRvd0xvbmdQdHIoaEZvcndhcmRCdXR0b25XbmQsIEdX
TFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRm9yd2FyZEJ1dHRvblByb2Mp
KTsKLQotICAgIFNldEZvY3VzKGhVUkxCYXJXbmQpOwotCi0gICAgZ01pbmlCcm93c2VyID0gbmV3
IE1pbmlCcm93c2VyKGhNYWluV25kLCBoVVJMQmFyV25kLCB1c2VzTGF5ZXJlZFdlYlZpZXcsIHBh
Z2VMb2FkVGVzdGluZyk7Ci0gICAgaWYgKCFnTWluaUJyb3dzZXIpCi0gICAgICAgIGdvdG8gZXhp
dDsKLSAgICBIUkVTVUxUIGhyID0gZ01pbmlCcm93c2VyLT5pbml0KHJlcXVlc3RlZFVSTCk7Cisg
ICAgZ01haW5XaW5kb3cgPSBuZXcgTWFpbldpbmRvdygpOworICAgIEhSRVNVTFQgaHIgPSBnTWFp
bldpbmRvdy0+aW5pdChoSW5zdCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRlc3Rpbmcp
OwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBnVmlld1dp
bmRvdyA9IGdNaW5pQnJvd3Nlci0+aHduZCgpOwotCi0gICAgcmVzaXplU3ViVmlld3MoKTsKLQot
ICAgIFNob3dXaW5kb3coZ1ZpZXdXaW5kb3csIG5DbWRTaG93KTsKLSAgICBVcGRhdGVXaW5kb3co
Z1ZpZXdXaW5kb3cpOworICAgIGdNaW5pQnJvd3NlciA9IGdNYWluV2luZG93LT5icm93c2VyV2lu
ZG93KCk7CisgICAgU2hvd1dpbmRvdyhnTWFpbldpbmRvdy0+aHduZCgpLCBuQ21kU2hvdyk7CiAK
ICAgICBoQWNjZWxUYWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaEluc3QsIE1BS0VJTlRSRVNPVVJD
RShJRENfTUlOSUJST1dTRVIpKTsKIAogICAgIGlmIChyZXF1ZXN0ZWRVUkwubGVuZ3RoKCkpCiAg
ICAgICAgIGxvYWRVUkwocmVxdWVzdGVkVVJMLkdldEJTVFIoKSk7CisgICAgZWxzZQorICAgICAg
ICBnTWluaUJyb3dzZXItPmxvYWREZWZhdWx0SFRNTCgpOwogCiAjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTo0NTA5KQogCkBAIC0xMzcsMjggKzEwMyw1IEBAIGV4aXQ6CiAgICAgLy8gU2h1dCBkb3du
IENPTS4KICAgICBPbGVVbmluaXRpYWxpemUoKTsKIAotICAgIGRlbGV0ZSBnTWluaUJyb3dzZXI7
Ci0gICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obXNnLndQYXJhbSk7CiB9Ci0KLUFU
T00gTXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpCi17Ci0gICAgV05EQ0xBU1NF
WCB3Y2V4OwotCi0gICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0KLSAgICB3
Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7Ci0gICAgd2NleC5s
cGZuV25kUHJvYyAgICA9IFduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0g
ICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGhJ
bnN0YW5jZTsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gTG9hZEljb24oaEluc3RhbmNlLCBN
QUtFSU5UUkVTT1VSQ0UoSURJX01JTklCUk9XU0VSKSk7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAg
ICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0g
MDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19NSU5JQlJP
V1NFUik7Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IHN6V2luZG93Q2xhc3M7Ci0gICAgd2Nl
eC5oSWNvblNtICAgICAgICA9IExvYWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VS
Q0UoSURJX1NNQUxMKSk7Ci0KLSAgICByZXR1cm4gUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0K
</data>
<flag name="review"
          id="359352"
          type_id="1"
          status="-"
          setter="fujii"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341266</attachid>
            <date>2018-05-25 03:01:58 -0700</date>
            <delta_ts>2018-05-25 03:13:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Bug185814.patch</filename>
            <type>text/plain</type>
            <size>18136</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYzlh
OTA3ZGJhMi4uNGQyMmY3NDA1Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxOC0wNS0yNSAgRnVqaWkgSGlyb25v
cmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luXVtNaW5pQnJvd3Nl
cl0gQWRkIE1haW5XaW5kb3cgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NTgxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzdWIgdGFzayBvZiBCdWcgMTg0NzcwLiBBZGRlZCBh
IG5ldyBjbGFzcyBNYWluV2luZG93IHRvCisgICAgICAgIHJlcHJlc2VudCB0aGUgbWFpbiB3aW5k
b3cgd2hpY2ggd2lsbCBiZSBzaGFyZWQgYW1vbmcgV0sxIGFuZCBXSzIuCisKKyAgICAgICAgVGhp
cyBjaGFuZ2UgaXMgcGFydGlhbCBzbyB0aGF0IGl0J3MgZWFzeSB0byByZXZpZXcgdGhpcyBwYXRj
aC4KKyAgICAgICAgSSdsbCBtb3ZlIG1vcmUgZnVuY3Rpb25zIGludG8gTWFpbldpbmRvdy5jcHAs
IGFuZCByZW1vdmUgbW9yZQorICAgICAgICBnbG9iYWwgdmFyaWFibGVzIGluIGZvcnRoY29taW5n
IHBhdGNoZXMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQ6IEFk
ZGVkIE1haW5XaW5kb3cuY3BwLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uY3Bw
OiBSZW1vdmVkIE1haW5XaW5kb3cgcmVsYXRlZCBnbG9iYWwKKyAgICAgICAgdmFyaWFibGVzIGhN
YWluV25kLCBoVVJMQmFyV25kLCBoQmFja0J1dHRvblduZCBhbmQKKyAgICAgICAgaEZvcndhcmRC
dXR0b25XbmQuIEFkZGVkIGEgbmV3IGdsb2JhbCB2YXJpYWJsZSBnTWFpbldpbmRvdy4KKyAgICAg
ICAgKFduZFByb2MpOiBNb3ZlZCB0byBNYWluV2luZG93LmNwcC4KKyAgICAgICAgKHJlc2l6ZVN1
YlZpZXdzKTogRGl0dG8uCisgICAgICAgIChUb2dnbGVNZW51RmxhZyk6IFJlbW92ZWQgc3RhdGlj
IHRvIGJlIGNhbGxlZCBmcm9tIE1haW5XaW5kb3cuY3BwLgorICAgICAgICAoVG9nZ2xlTWVudUl0
ZW0pOiBEaXR0by4KKyAgICAgICAgKEN1c3RvbVVzZXJBZ2VudCk6IEZvbGxvdyB0aGUgZ2xvYmFs
IHZhcmlhYmxlcyByZW1vdmFsLgorICAgICAgICAoRGlzcGxheUF1dGhEaWFsb2cpOiBEaXR0by4K
KyAgICAgICAgKGxvYWRVUkwpOiBEaXR0by4KKyAgICAgICAgKFduZFByb2MpOiBSZW5hbWVkIHRv
IE1haW5XaW5kb3c6OlduZFByb2MuCisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01haW5XaW5k
b3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKE1haW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MpOiBSZW5h
bWVkIGZyb20gTXlSZWdpc3RlckNsYXNzIG9mIFdpbk1haW4uY3BwLgorICAgICAgICAoTWFpbldp
bmRvdzo6aW5pdCk6IEV4dHJhY3RlZCBNYWluV2luZG93IGluaXRpYWxpemF0aW9uIGNvZGUgZnJv
bSB3V2luTWFpbi4KKyAgICAgICAgKE1haW5XaW5kb3c6OnJlc2l6ZVN1YlZpZXdzKTogTW92ZWQg
ZnJvbSBDb21tb24uY3BwLgorICAgICAgICAoTWFpbldpbmRvdzo6V25kUHJvYyk6IERpdHRvLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9NYWluV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAo
TWFpbldpbmRvdzo6aHduZCk6CisgICAgICAgIChNYWluV2luZG93Ojpicm93c2VyV2luZG93KToK
KyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwOgorICAgICAgICAoTWlu
aUJyb3dzZXI6OmluaXQpOgorICAgICAgICAoTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyk6IEV4
dHJhY3Qgc29tZSBjb2RlIGludG8gTWluaUJyb3dzZXI6OmxvYWREZWZhdWx0SFRNTC4KKyAgICAg
ICAgKE1pbmlCcm93c2VyOjpsb2FkRGVmYXVsdEhUTUwpOiBFeHRyYWN0ZWQgZnJvbSBNaW5pQnJv
d3Nlcjo6cHJlcGFyZVZpZXdzLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nl
ci5oOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcDoKKyAgICAgICAgKHdX
aW5NYWluKTogRXh0cmFjdGVkIE1haW5XaW5kb3cgaW5pdGlhbGl6YXRpb24gY29kZSBpbnRvIE1h
aW5XaW5kb3c6OmluaXQuCisgICAgICAgIChNeVJlZ2lzdGVyQ2xhc3MpOiBNb3ZlZCB0byBNYWlu
V2luZG93LmNwcC4KKwogMjAxOC0wNS0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWpp
aUBzb255LmNvbT4KIAogICAgICAgICBbV2luXVtNaW5pQnJvd3Nlcl0gUmVtb3ZlIFVSTCBhcmd1
bWVudCBvZiBNaW5pQnJvd3Nlcjo6aW5pdApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0
CmluZGV4IGI4OTU2ZjgzMjBjLi43MGU2ZDdjZTU2YiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9DTWFr
ZUxpc3RzLnR4dApAQCAtOCw2ICs4LDcgQEAgc2V0KE1pbmlCcm93c2VyX0lOQ0xVREVfRElSRUNU
T1JJRVMKIHNldChNaW5pQnJvd3Nlcl9TT1VSQ0VTCiAgICAgQWNjZXNzaWJpbGl0eURlbGVnYXRl
LmNwcAogICAgIERPTURlZmF1bHRJbXBsLmNwcAorICAgIE1haW5XaW5kb3cuY3BwCiAgICAgUGFn
ZUxvYWRUZXN0Q2xpZW50LmNwcAogICAgIFByaW50V2ViVUlEZWxlZ2F0ZS5jcHAKICAgICBSZXNv
dXJjZUxvYWREZWxlZ2F0ZS5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9D
b21tb24uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKaW5kZXggMTFjNjU0
OWYzNjguLjNlZDdlMzllNjU2IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogICovCiAKICNpbmNsdWRlICJET01EZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIk1h
aW5XaW5kb3cuaCIKICNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgogI2luY2x1ZGUgIk1pbmlCcm93
c2VyUmVwbGFjZS5oIgogI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRDT01BUEkuaD4KQEAg
LTU1LDEyICs1Niw2IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHdpbmluZXQuaD4K
IAotI2RlZmluZSBNQVhfTE9BRFNUUklORyAxMDAKLSNkZWZpbmUgVVJMQkFSX0hFSUdIVCAgMjQK
LSNkZWZpbmUgQ09OVFJPTEJVVFRPTl9XSURUSCAyNAotCi1zdGF0aWMgY29uc3QgaW50IG1heEhp
c3RvcnlTaXplID0gMTA7Ci0KICNpZm5kZWYgV01fRFBJQ0hBTkdFRAogI2RlZmluZSBXTV9EUElD
SEFOR0VEIDB4MDJFMAogI2VuZGlmCkBAIC03MCwzNCArNjUsMTggQEAgdHlwZWRlZiBfY29tX3B0
cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3QsICZfX3V1aWRvZihJV2ViTXV0YWJs
ZVVSTFJlcXUKIAogLy8gR2xvYmFsIFZhcmlhYmxlczoKIEhJTlNUQU5DRSBoSW5zdDsKLUhXTkQg
aE1haW5XbmQ7Ci1IV05EIGhVUkxCYXJXbmQ7Ci1IR0RJT0JKIGhVUkxGb250OwotSFdORCBoQmFj
a0J1dHRvblduZDsKLUhXTkQgaEZvcndhcmRCdXR0b25XbmQ7CiBIV05EIGhDYWNoZVduZDsKIFdO
RFBST0MgRGVmRWRpdFByb2MgPSBudWxscHRyOwogV05EUFJPQyBEZWZCdXR0b25Qcm9jID0gbnVs
bHB0cjsKLVdORFBST0MgRGVmV2ViS2l0UHJvYyA9IG51bGxwdHI7Ci1IV05EIGdWaWV3V2luZG93
ID0gMDsKKworTWFpbldpbmRvdyogZ01haW5XaW5kb3cgPSBudWxscHRyOwogTWluaUJyb3dzZXIq
IGdNaW5pQnJvd3NlciA9IG51bGxwdHI7Ci1UQ0hBUiBzelRpdGxlW01BWF9MT0FEU1RSSU5HXTsg
Ly8gVGhlIHRpdGxlIGJhciB0ZXh0Ci1UQ0hBUiBzeldpbmRvd0NsYXNzW01BWF9MT0FEU1RSSU5H
XTsgLy8gdGhlIG1haW4gd2luZG93IGNsYXNzIG5hbWUKIAogLy8gU3VwcG9ydCBtb3ZpbmcgdGhl
IHRyYW5zcGFyZW50IHdpbmRvdwogUE9JTlQgc193aW5kb3dQb3NpdGlvbiA9IHsgMTAwLCAxMDAg
fTsKIFNJWkUgc193aW5kb3dTaXplID0geyA1MDAsIDIwMCB9OwogCiAvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucyBvZiBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gdGhpcyBjb2RlIG1vZHVsZToKLUFUT00g
TXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpOwotTFJFU1VMVCBDQUxMQkFDSyBX
bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUlOVF9QVFIgQ0FMTEJBQ0sgQWJv
dXQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotSU5UX1BUUiBDQUxMQkFDSyBDdXN0b21V
c2VyQWdlbnQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotTFJFU1VMVCBDQUxMQkFDSyBF
ZGl0UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIEJh
Y2tCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUxSRVNVTFQgQ0FMTEJB
Q0sgRm9yd2FyZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotTFJFU1VM
VCBDQUxMQkFDSyBSZWxvYWRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
LUlOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIElO
VF9QVFIgQ0FMTEJBQ0sgQXV0aERpYWxvZ1Byb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwogCiBzdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgdXJsQlN0cik7CkBAIC0xMDcsMjcgKzg2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3co
SFdORCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2l6ZVN1YlZpZXdzKCkKLXsKLSAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGhNYWluV25k
KTsKLQotICAgIFJFQ1QgcmNDbGllbnQ7Ci0gICAgR2V0Q2xpZW50UmVjdChoTWFpblduZCwgJnJj
Q2xpZW50KTsKLQotICAgIGludCBoZWlnaHQgPSBzY2FsZUZhY3RvciAqIFVSTEJBUl9IRUlHSFQ7
Ci0gICAgaW50IHdpZHRoID0gc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIOwotCi0g
ICAgTW92ZVdpbmRvdyhoQmFja0J1dHRvblduZCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7
Ci0gICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWln
aHQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwgd2lkdGggKiAyLCAwLCByY0Ns
aWVudC5yaWdodCwgaGVpZ2h0LCBUUlVFKTsKLQotICAgIDo6U2VuZE1lc3NhZ2UoaFVSTEJhcldu
ZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCksIHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFN
PihnTWluaUJyb3dzZXItPnVybEJhckZvbnQoKSksIFRSVUUpOwotCi0gICAgaWYgKGdNaW5pQnJv
d3Nlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkgfHwgIWdWaWV3V2luZG93KQotICAgICAgICByZXR1
cm47Ci0gICAgTW92ZVdpbmRvdyhnVmlld1dpbmRvdywgMCwgaGVpZ2h0LCByY0NsaWVudC5yaWdo
dCwgcmNDbGllbnQuYm90dG9tIC0gaGVpZ2h0LCBUUlVFKTsKLX0KLQogc3RhdGljIHZvaWQgY29t
cHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQogewogICAgIFJFQ1QgZGVza3RvcDsKQEAgLTI3Nyw3ICsy
MzUsNyBAQCB2b2lkIFByaW50VmlldyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICA6OkRlbGV0ZURDKHByaW50REMpOwogfQogCi1zdGF0
aWMgdm9pZCBUb2dnbGVNZW51RmxhZyhIV05EIGhXbmQsIFVJTlQgbWVudUlEKQordm9pZCBUb2dn
bGVNZW51RmxhZyhIV05EIGhXbmQsIFVJTlQgbWVudUlEKQogewogICAgIEhNRU5VIG1lbnUgPSA6
OkdldE1lbnUoaFduZCk7CiAKQEAgLTMxOSw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCB0dXJuT2Zm
T3RoZXJVc2VyQWdlbnRzKEhNRU5VIG1lbnUpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBUb2dn
bGVNZW51SXRlbShIV05EIGhXbmQsIFVJTlQgbWVudUlEKQorYm9vbCBUb2dnbGVNZW51SXRlbShI
V05EIGhXbmQsIFVJTlQgbWVudUlEKQogewogICAgIGlmICghZ01pbmlCcm93c2VyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zOTksOTYgKzM1Nyw2IEBAIHN0YXRpYyBib29sIFRvZ2dsZU1l
bnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdCBpbnQgZHJhZ0JhckhlaWdodCA9IDMwOwotCi1MUkVTVUxUIENBTExCQUNLIFdu
ZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9DT01NQU5EOiB7Ci0g
ICAgICAgIGludCB3bUlkID0gTE9XT1JEKHdQYXJhbSk7Ci0gICAgICAgIGludCB3bUV2ZW50ID0g
SElXT1JEKHdQYXJhbSk7Ci0gICAgICAgIGlmICh3bUlkID49IElETV9ISVNUT1JZX0xJTkswICYm
IHdtSWQgPD0gSURNX0hJU1RPUllfTElOSzkpIHsKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dz
ZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5uYXZpZ2F0ZVRvSGlzdG9yeShoV25k
LCB3bUlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8vIFBhcnNl
IHRoZSBtZW51IHNlbGVjdGlvbnM6Ci0gICAgICAgIHN3aXRjaCAod21JZCkgewotICAgICAgICBj
YXNlIElETV9BQk9VVDoKLSAgICAgICAgICAgIERpYWxvZ0JveChoSW5zdCwgTUFLRUlOVFJFU09V
UkNFKElERF9BQk9VVEJPWCksIGhXbmQsIEFib3V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElETV9FWElUOgotICAgICAgICAgICAgRGVzdHJveVdpbmRvdyhoV25kKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9QUklOVDoKLSAgICAgICAgICAgIFBy
aW50VmlldyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJRE1fV0VCX0lOU1BFQ1RPUjoKLSAgICAgICAgICAgIGlmIChnTWlu
aUJyb3dzZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5sYXVuY2hJbnNwZWN0b3Io
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9DQUNIRVM6Ci0gICAgICAg
ICAgICBpZiAoITo6SXNXaW5kb3coaENhY2hlV25kKSkgewotICAgICAgICAgICAgICAgIGhDYWNo
ZVduZCA9IENyZWF0ZURpYWxvZyhoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9DQUNIRVMpLCBo
V25kLCBDYWNoZXMpOwotICAgICAgICAgICAgICAgIDo6U2hvd1dpbmRvdyhoQ2FjaGVXbmQsIFNX
X1NIT1cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURNX0hJU1RPUllfQkFDS1dBUkQ6Ci0gICAgICAgIGNhc2UgSURNX0hJU1RPUllfRk9SV0FSRDoK
LSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93
c2VyLT5uYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKGhXbmQsIHdtSWQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX1VBX09USEVSOgotICAgICAgICAgICAgaWYgKHdtRXZl
bnQpCi0gICAgICAgICAgICAgICAgVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VS
Q0UoSUREX1VTRVJfQUdFTlQpLCBoV25kLCBDdXN0b21Vc2VyQWdlbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0FDVFVBTF9TSVpFOgotICAgICAgICAgICAgaWYgKGdN
aW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnJlc2V0Wm9vbSgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX1pPT01fSU46Ci0gICAgICAgICAg
ICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+em9vbUlu
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fWk9PTV9PVVQ6Ci0gICAg
ICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+
em9vbU91dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX1NIT1dfTEFZ
RVJfVFJFRToKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAgICAg
Z01pbmlCcm93c2VyLT5zaG93TGF5ZXJUcmVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICghVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXTV9ERVNUUk9ZOgotI2lmIFVTRShDRikKLSAgICAgICAgQ0ZSdW5Mb29wU3RvcChDRlJ1
bkxvb3BHZXRNYWluKCkpOwotI2VuZGlmCi0gICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICBpZiAoIWdNaW5pQnJvd3Nl
ciB8fCAhZ01pbmlCcm93c2VyLT5oYXNXZWJWaWV3KCkpCi0gICAgICAgICAgICByZXR1cm4gRGVm
V2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0KLSAgICAgICAgcmVz
aXplU3ViVmlld3MoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9EUElDSEFOR0VEOgot
ICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgZ01pbmlCcm93c2VyLT51cGRh
dGVEZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCiBMUkVTVUxUIENBTExCQUNLIEVkaXRQcm9jKEhXTkQgaERsZywg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIHN3aXRj
aCAobWVzc2FnZSkgewpAQCAtNjAxLDcgKzQ2OSw3IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ3VzdG9t
VXNlckFnZW50KEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0K
ICAgICAgICAgICAgIF9ic3RyX3QgYnN0cihidWZmZXIpOwogICAgICAgICAgICAgaWYgKGJzdHIu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnNldFVzZXJBZ2VudChi
c3RyKTsKLSAgICAgICAgICAgICAgICA6OlBvc3RNZXNzYWdlKGhNYWluV25kLCBzdGF0aWNfY2Fz
dDxVSU5UPihXTV9DT01NQU5EKSwgTUFLRUxQQVJBTShJRE1fVUFfT1RIRVIsIDEpLCAwKTsKKyAg
ICAgICAgICAgICAgICA6OlBvc3RNZXNzYWdlKGdNYWluV2luZG93LT5od25kKCksIHN0YXRpY19j
YXN0PFVJTlQ+KFdNX0NPTU1BTkQpLCBNQUtFTFBBUkFNKElETV9VQV9PVEhFUiwgMSksIDApOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTYxNiw3ICs0ODQsNyBAQCBJTlRfUFRSIENB
TExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNCiAKIEhSRVNVTFQgRGlzcGxheUF1dGhEaWFsb2coc3RkOjp3c3RyaW5nJiB1
c2VybmFtZSwgc3RkOjp3c3RyaW5nJiBwYXNzd29yZCkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IERp
YWxvZ0JveChoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9BVVRIKSwgaE1haW5XbmQsIEF1dGhE
aWFsb2dQcm9jKTsKKyAgICBhdXRvIHJlc3VsdCA9IERpYWxvZ0JveChoSW5zdCwgTUFLRUlOVFJF
U09VUkNFKElERF9BVVRIKSwgZ01haW5XaW5kb3ctPmh3bmQoKSwgQXV0aERpYWxvZ1Byb2MpOwog
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCkBAIC02NjksNyArNTM3
LDcgQEAgc3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHBhc3NlZFVSTCkKICAgICBpZiAoRkFJTEVE
KGdNaW5pQnJvd3Nlci0+bG9hZFVSTChwYXNzZWRVUkwpKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU2V0Rm9jdXMoZ1ZpZXdXaW5kb3cpOworICAgIFNldEZvY3VzKGdNaW5pQnJvd3Nlci0+aHdu
ZCgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0V2luZG93VGV4dChIV05EIGRpYWxvZywgVUlOVCBm
aWVsZCwgX2JzdHJfdCB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9N
YWluV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmNwcAppbmRl
eCBhMjAwMzFjM2IxOS4uMzBhMTE4NDMyZGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9NYWluV2luZG93LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRv
dy5jcHAKQEAgLTM1LDEwICszNSw2IEBAIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93
KEhXTkQpOwogI2RlZmluZSBVUkxCQVJfSEVJR0hUICAyNAogI2RlZmluZSBDT05UUk9MQlVUVE9O
X1dJRFRIIDI0CiAKLWNvbnN0ZXhwciBzaXplX3QgTUFYX0xPQURTVFJJTkcgPSAxMDA7Ci1UQ0hB
UiBzelRpdGxlW01BWF9MT0FEU1RSSU5HXTsgLy8gVGhlIHRpdGxlIGJhciB0ZXh0Ci1UQ0hBUiBz
eldpbmRvd0NsYXNzW01BWF9MT0FEU1RSSU5HXTsgLy8gdGhlIG1haW4gd2luZG93IGNsYXNzIG5h
bWUKLQogZXh0ZXJuIE1haW5XaW5kb3cqIGdNYWluV2luZG93OwogZXh0ZXJuIE1pbmlCcm93c2Vy
KiBnTWluaUJyb3dzZXI7CiBleHRlcm4gV05EUFJPQyBEZWZFZGl0UHJvYzsKQEAgLTU3LDE1ICs1
MywyNyBAQCBJTlRfUFRSIENBTExCQUNLIEF1dGhEaWFsb2dQcm9jKEhXTkQsIFVJTlQsIFdQQVJB
TSwgTFBBUkFNKTsKIHZvaWQgUHJpbnRWaWV3KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKIGJvb2wgVG9nZ2xlTWVudUl0ZW0oSFdORCBoV25k
LCBVSU5UIG1lbnVJRCk7CiAKLUFUT00gTWFpbldpbmRvdzo6cmVnaXN0ZXJDbGFzcyhISU5TVEFO
Q0UgaEluc3RhbmNlKQorc3RkOjp3c3RyaW5nIE1haW5XaW5kb3c6OnNfd2luZG93Q2xhc3M7CisK
K3N0YXRpYyBzdGQ6OndzdHJpbmcgbG9hZFN0cmluZyhpbnQgaWQpCiB7Ci0gICAgTG9hZFN0cmlu
ZyhoSW5zdGFuY2UsIElEU19BUFBfVElUTEUsIHN6VGl0bGUsIE1BWF9MT0FEU1RSSU5HKTsKLSAg
ICBMb2FkU3RyaW5nKGhJbnN0YW5jZSwgSURDX01JTklCUk9XU0VSLCBzeldpbmRvd0NsYXNzLCBN
QVhfTE9BRFNUUklORyk7CisgICAgY29uc3RleHByIHNpemVfdCBsZW5ndGggPSAxMDA7CisgICAg
d2NoYXJfdCBidWZmW2xlbmd0aF07CisgICAgTG9hZFN0cmluZyhoSW5zdCwgSURDX01JTklCUk9X
U0VSLCBidWZmLCBsZW5ndGgpOworICAgIHJldHVybiBidWZmOworfQogCi0gICAgV05EQ0xBU1NF
WCB3Y2V4Owordm9pZCBNYWluV2luZG93OjpyZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFu
Y2UpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5p
dGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CiAKLSAg
ICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICBzX3dpbmRvd0NsYXNzID0g
bG9hZFN0cmluZyhJRENfTUlOSUJST1dTRVIpOwogCisgICAgV05EQ0xBU1NFWCB3Y2V4OworICAg
IHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwogICAgIHdjZXguc3R5bGUgICAgICAg
ICAgPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsKICAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0g
V25kUHJvYzsKICAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKQEAgLTc1LDE1ICs4MywxOSBA
QCBBVE9NIE1haW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5jZSkKICAg
ICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwogICAgIHdj
ZXguaGJyQmFja2dyb3VuZCAgPSAwOwogICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSBNQUtFSU5U
UkVTT1VSQ0UoSURDX01JTklCUk9XU0VSKTsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gc3pX
aW5kb3dDbGFzczsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gc193aW5kb3dDbGFzcy5jX3N0
cigpOwogICAgIHdjZXguaEljb25TbSAgICAgICAgPSBMb2FkSWNvbih3Y2V4LmhJbnN0YW5jZSwg
TUFLRUlOVFJFU09VUkNFKElESV9TTUFMTCkpOwogCi0gICAgcmV0dXJuIFJlZ2lzdGVyQ2xhc3NF
eCgmd2NleCk7CisgICAgUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKIH0KIAogYm9vbCBNYWluV2lu
ZG93Ojppbml0KEhJTlNUQU5DRSBoSW5zdGFuY2UsIGJvb2wgdXNlc0xheWVyZWRXZWJWaWV3LCBi
b29sIHBhZ2VMb2FkVGVzdGluZykKIHsKLSAgICBtX2hNYWluV25kID0gQ3JlYXRlV2luZG93KHN6
V2luZG93Q2xhc3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgcmVnaXN0ZXJD
bGFzcyhoSW5zdGFuY2UpOworCisgICAgYXV0byB0aXRsZSA9IGxvYWRTdHJpbmcoSURTX0FQUF9U
SVRMRSk7CisKKyAgICBtX2hNYWluV25kID0gQ3JlYXRlV2luZG93KHNfd2luZG93Q2xhc3MuY19z
dHIoKSwgdGl0bGUuY19zdHIoKSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKICAgICAgICAgQ1dfVVNF
REVGQVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgMCwgMCwgaEluc3RhbmNlLCAwKTsKIAogICAg
IGlmICghbV9oTWFpblduZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWlu
V2luZG93LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5oCmluZGV4IGNhOGYy
ZjM1OWYwLi4yNDIzZGE3NTA1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01h
aW5XaW5kb3cuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRl
IDxzdHJpbmc+CiAKIGNsYXNzIE1pbmlCcm93c2VyOwogCkBAIC0zNCwxNiArMzUsMTcgQEAgcHVi
bGljOgogICAgIGJvb2wgaW5pdChISU5TVEFOQ0UgaEluc3RhbmNlLCBib29sIHVzZXNMYXllcmVk
V2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2FkVGVzdGluZyA9IGZhbHNlKTsKIAogICAgIHZv
aWQgcmVzaXplU3ViVmlld3MoKTsKLSAgICBIV05EIGh3bmQoKSB7IHJldHVybiBtX2hNYWluV25k
OyB9Ci0gICAgTWluaUJyb3dzZXIqIGJyb3dzZXJXaW5kb3coKSB7IHJldHVybiBtX2Jyb3dzZXJX
aW5kb3cuZ2V0KCk7IH0KKyAgICBIV05EIGh3bmQoKSBjb25zdCB7IHJldHVybiBtX2hNYWluV25k
OyB9CisgICAgTWluaUJyb3dzZXIqIGJyb3dzZXJXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2Jy
b3dzZXJXaW5kb3cuZ2V0KCk7IH0KICAgICAKK3ByaXZhdGU6CiAgICAgc3RhdGljIExSRVNVTFQg
Q0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0gICAgc3RhdGlj
IEFUT00gcmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpOworICAgIHN0YXRpYyBzdGQ6Ondz
dHJpbmcgc193aW5kb3dDbGFzczsKIAotcHJpdmF0ZToKLSAgICBIV05EIG1faE1haW5XbmQ7Ci0g
ICAgSFdORCBtX2hVUkxCYXJXbmQ7Ci0gICAgSFdORCBtX2hCYWNrQnV0dG9uV25kOwotICAgIEhX
TkQgbV9oRm9yd2FyZEJ1dHRvblduZDsKKyAgICBIV05EIG1faE1haW5XbmQgeyBudWxscHRyIH07
CisgICAgSFdORCBtX2hVUkxCYXJXbmQgeyBudWxscHRyIH07CisgICAgSFdORCBtX2hCYWNrQnV0
dG9uV25kIHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9oRm9yd2FyZEJ1dHRvblduZCB7IG51bGxw
dHIgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWluaUJyb3dzZXI+IG1fYnJvd3NlcldpbmRvdzsK
IH07CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAgYi9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAKaW5kZXggNzgxZDU0YTIzMWUuLmNkOTcxZjBh
YTE3IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAKKysrIGIv
VG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4uY3BwCkBAIC0zMiwxMCArMzIsNiBAQAogI2lu
Y2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDb21tb24uY3BwIgog
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1mbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhI
V05EKTsKLX0KLQogaW50IFdJTkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5DRSBoSW5zdGFuY2Us
IF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLCBfSW5fIExQV1NUUiBscHN0ckNtZExp
bmUsIF9Jbl8gaW50IG5DbWRTaG93KQogewogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9DCkBAIC01
OSwxMSArNTUsNiBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RBTkNFIGhJbnN0YW5j
ZSwgX0luX29wdF8gSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsCiAKICAgICBwYXJzZUNvbW1hbmRM
aW5lKHVzZXNMYXllcmVkV2ViVmlldywgdXNlRnVsbERlc2t0b3AsIHBhZ2VMb2FkVGVzdGluZywg
cmVxdWVzdGVkVVJMKTsKIAotICAgIC8vIEluaXRpYWxpemUgZ2xvYmFsIHN0cmluZ3MKLSAgICBM
b2FkU3RyaW5nKGhJbnN0LCBJRFNfQVBQX1RJVExFLCBzelRpdGxlLCBNQVhfTE9BRFNUUklORyk7
Ci0gICAgTG9hZFN0cmluZyhoSW5zdCwgSURDX01JTklCUk9XU0VSLCBzeldpbmRvd0NsYXNzLCBN
QVhfTE9BRFNUUklORyk7Ci0gICAgTXlSZWdpc3RlckNsYXNzKGhJbnN0KTsKLQogICAgIGlmICh1
c2VGdWxsRGVza3RvcCkKICAgICAgICAgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKTsKIApAQCAt
NzIsNDIgKzYzLDEzIEBAIGludCBXSU5BUEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0UgaEluc3Rh
bmNlLCBfSW5fb3B0XyBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwKIAogICAgIDo6U2V0UHJvY2Vz
c0RQSUF3YXJlKCk7CiAKLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNj
YWxlRmFjdG9yRm9yV2luZG93KG51bGxwdHIpOwotCi0gICAgaE1haW5XbmQgPSBDcmVhdGVXaW5k
b3coc3pXaW5kb3dDbGFzcywgc3pUaXRsZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAg
Q1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgMCwgMCwgaEluc3QsIDApOwotCi0g
ICAgaWYgKCFoTWFpblduZCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaEJhY2tCdXR0
b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lC
TEUgIHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICBo
Rm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIsIFdTX0NISUxE
IHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURU
SCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICBoVVJMQmFyV25kID0gQ3Jl
YXRlV2luZG93KEwiRURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8
IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJ
RFRIICogMiwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLQotICAgIFNob3dXaW5k
b3coaE1haW5XbmQsIG5DbWRTaG93KTsKLSAgICBVcGRhdGVXaW5kb3coaE1haW5XbmQpOwotCi0g
ICAgRGVmRWRpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KEdldFdpbmRvd0xvbmdQ
dHIoaFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7Ci0gICAgRGVmQnV0dG9uUHJvYyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihoQmFja0J1dHRvblduZCwgR1dM
UF9XTkRQUk9DKSk7Ci0gICAgU2V0V2luZG93TG9uZ1B0cihoVVJMQmFyV25kLCBHV0xQX1dORFBS
T0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9jKSk7Ci0gICAgU2V0V2luZG93
TG9uZ1B0cihoQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExP
TkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOwotICAgIFNldFdpbmRvd0xvbmdQdHIoaEZvcndhcmRC
dXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRm9yd2Fy
ZEJ1dHRvblByb2MpKTsKLQotICAgIFNldEZvY3VzKGhVUkxCYXJXbmQpOwotCi0gICAgZ01pbmlC
cm93c2VyID0gbmV3IE1pbmlCcm93c2VyKGhNYWluV25kLCBoVVJMQmFyV25kLCB1c2VzTGF5ZXJl
ZFdlYlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7Ci0gICAgaWYgKCFnTWluaUJyb3dzZXIpCi0gICAg
ICAgIGdvdG8gZXhpdDsKLSAgICBIUkVTVUxUIGhyID0gZ01pbmlCcm93c2VyLT5pbml0KCk7Cisg
ICAgZ01haW5XaW5kb3cgPSBuZXcgTWFpbldpbmRvdygpOworICAgIEhSRVNVTFQgaHIgPSBnTWFp
bldpbmRvdy0+aW5pdChoSW5zdCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRlc3Rpbmcp
OwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBnVmlld1dp
bmRvdyA9IGdNaW5pQnJvd3Nlci0+aHduZCgpOwotCi0gICAgcmVzaXplU3ViVmlld3MoKTsKLQot
ICAgIFNob3dXaW5kb3coZ1ZpZXdXaW5kb3csIG5DbWRTaG93KTsKLSAgICBVcGRhdGVXaW5kb3co
Z1ZpZXdXaW5kb3cpOworICAgIGdNaW5pQnJvd3NlciA9IGdNYWluV2luZG93LT5icm93c2VyV2lu
ZG93KCk7CisgICAgU2hvd1dpbmRvdyhnTWFpbldpbmRvdy0+aHduZCgpLCBuQ21kU2hvdyk7CiAK
ICAgICBoQWNjZWxUYWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaEluc3QsIE1BS0VJTlRSRVNPVVJD
RShJRENfTUlOSUJST1dTRVIpKTsKIApAQCAtMTM5LDI4ICsxMDEsNSBAQCBleGl0OgogICAgIC8v
IFNodXQgZG93biBDT00uCiAgICAgT2xlVW5pbml0aWFsaXplKCk7CiAKLSAgICBkZWxldGUgZ01p
bmlCcm93c2VyOwotICAgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1zZy53UGFyYW0p
OwogfQotCi1BVE9NIE15UmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKQotewotICAg
IFdORENMQVNTRVggd2NleDsKLQotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgp
OwotCi0gICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0hSRURSQVcgfCBDU19WUkVEUkFXOwot
ICAgIHdjZXgubHBmblduZFByb2MgICAgPSBXbmRQcm9jOwotICAgIHdjZXguY2JDbHNFeHRyYSAg
ICAgPSAwOwotICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOwotICAgIHdjZXguaEluc3RhbmNl
ICAgICAgPSBoSW5zdGFuY2U7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IExvYWRJY29uKGhJ
bnN0YW5jZSwgTUFLRUlOVFJFU09VUkNFKElESV9NSU5JQlJPV1NFUikpOwotICAgIHdjZXguaEN1
cnNvciAgICAgICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Ci0gICAgd2NleC5oYnJCYWNr
Z3JvdW5kICA9IDA7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgICA9IE1BS0VJTlRSRVNPVVJDRShJ
RENfTUlOSUJST1dTRVIpOwotICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBzeldpbmRvd0NsYXNz
OwotICAgIHdjZXguaEljb25TbSAgICAgICAgPSBMb2FkSWNvbih3Y2V4LmhJbnN0YW5jZSwgTUFL
RUlOVFJFU09VUkNFKElESV9TTUFMTCkpOwotCi0gICAgcmV0dXJuIFJlZ2lzdGVyQ2xhc3NFeCgm
d2NleCk7Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341268</attachid>
            <date>2018-05-25 03:13:40 -0700</date>
            <delta_ts>2018-05-27 20:47:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Bug185814.patch</filename>
            <type>text/plain</type>
            <size>25740</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYzlh
OTA3ZGJhMi4uNGQyMmY3NDA1Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxOC0wNS0yNSAgRnVqaWkgSGlyb25v
cmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luXVtNaW5pQnJvd3Nl
cl0gQWRkIE1haW5XaW5kb3cgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NTgxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzdWIgdGFzayBvZiBCdWcgMTg0NzcwLiBBZGRlZCBh
IG5ldyBjbGFzcyBNYWluV2luZG93IHRvCisgICAgICAgIHJlcHJlc2VudCB0aGUgbWFpbiB3aW5k
b3cgd2hpY2ggd2lsbCBiZSBzaGFyZWQgYW1vbmcgV0sxIGFuZCBXSzIuCisKKyAgICAgICAgVGhp
cyBjaGFuZ2UgaXMgcGFydGlhbCBzbyB0aGF0IGl0J3MgZWFzeSB0byByZXZpZXcgdGhpcyBwYXRj
aC4KKyAgICAgICAgSSdsbCBtb3ZlIG1vcmUgZnVuY3Rpb25zIGludG8gTWFpbldpbmRvdy5jcHAs
IGFuZCByZW1vdmUgbW9yZQorICAgICAgICBnbG9iYWwgdmFyaWFibGVzIGluIGZvcnRoY29taW5n
IHBhdGNoZXMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQ6IEFk
ZGVkIE1haW5XaW5kb3cuY3BwLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uY3Bw
OiBSZW1vdmVkIE1haW5XaW5kb3cgcmVsYXRlZCBnbG9iYWwKKyAgICAgICAgdmFyaWFibGVzIGhN
YWluV25kLCBoVVJMQmFyV25kLCBoQmFja0J1dHRvblduZCBhbmQKKyAgICAgICAgaEZvcndhcmRC
dXR0b25XbmQuIEFkZGVkIGEgbmV3IGdsb2JhbCB2YXJpYWJsZSBnTWFpbldpbmRvdy4KKyAgICAg
ICAgKFduZFByb2MpOiBNb3ZlZCB0byBNYWluV2luZG93LmNwcC4KKyAgICAgICAgKHJlc2l6ZVN1
YlZpZXdzKTogRGl0dG8uCisgICAgICAgIChUb2dnbGVNZW51RmxhZyk6IFJlbW92ZWQgc3RhdGlj
IHRvIGJlIGNhbGxlZCBmcm9tIE1haW5XaW5kb3cuY3BwLgorICAgICAgICAoVG9nZ2xlTWVudUl0
ZW0pOiBEaXR0by4KKyAgICAgICAgKEN1c3RvbVVzZXJBZ2VudCk6IEZvbGxvdyB0aGUgZ2xvYmFs
IHZhcmlhYmxlcyByZW1vdmFsLgorICAgICAgICAoRGlzcGxheUF1dGhEaWFsb2cpOiBEaXR0by4K
KyAgICAgICAgKGxvYWRVUkwpOiBEaXR0by4KKyAgICAgICAgKFduZFByb2MpOiBSZW5hbWVkIHRv
IE1haW5XaW5kb3c6OlduZFByb2MuCisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01haW5XaW5k
b3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKE1haW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MpOiBSZW5h
bWVkIGZyb20gTXlSZWdpc3RlckNsYXNzIG9mIFdpbk1haW4uY3BwLgorICAgICAgICAoTWFpbldp
bmRvdzo6aW5pdCk6IEV4dHJhY3RlZCBNYWluV2luZG93IGluaXRpYWxpemF0aW9uIGNvZGUgZnJv
bSB3V2luTWFpbi4KKyAgICAgICAgKE1haW5XaW5kb3c6OnJlc2l6ZVN1YlZpZXdzKTogTW92ZWQg
ZnJvbSBDb21tb24uY3BwLgorICAgICAgICAoTWFpbldpbmRvdzo6V25kUHJvYyk6IERpdHRvLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9NYWluV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAo
TWFpbldpbmRvdzo6aHduZCk6CisgICAgICAgIChNYWluV2luZG93Ojpicm93c2VyV2luZG93KToK
KyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwOgorICAgICAgICAoTWlu
aUJyb3dzZXI6OmluaXQpOgorICAgICAgICAoTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyk6IEV4
dHJhY3Qgc29tZSBjb2RlIGludG8gTWluaUJyb3dzZXI6OmxvYWREZWZhdWx0SFRNTC4KKyAgICAg
ICAgKE1pbmlCcm93c2VyOjpsb2FkRGVmYXVsdEhUTUwpOiBFeHRyYWN0ZWQgZnJvbSBNaW5pQnJv
d3Nlcjo6cHJlcGFyZVZpZXdzLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nl
ci5oOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcDoKKyAgICAgICAgKHdX
aW5NYWluKTogRXh0cmFjdGVkIE1haW5XaW5kb3cgaW5pdGlhbGl6YXRpb24gY29kZSBpbnRvIE1h
aW5XaW5kb3c6OmluaXQuCisgICAgICAgIChNeVJlZ2lzdGVyQ2xhc3MpOiBNb3ZlZCB0byBNYWlu
V2luZG93LmNwcC4KKwogMjAxOC0wNS0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWpp
aUBzb255LmNvbT4KIAogICAgICAgICBbV2luXVtNaW5pQnJvd3Nlcl0gUmVtb3ZlIFVSTCBhcmd1
bWVudCBvZiBNaW5pQnJvd3Nlcjo6aW5pdApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0
CmluZGV4IGI4OTU2ZjgzMjBjLi43MGU2ZDdjZTU2YiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9DTWFr
ZUxpc3RzLnR4dApAQCAtOCw2ICs4LDcgQEAgc2V0KE1pbmlCcm93c2VyX0lOQ0xVREVfRElSRUNU
T1JJRVMKIHNldChNaW5pQnJvd3Nlcl9TT1VSQ0VTCiAgICAgQWNjZXNzaWJpbGl0eURlbGVnYXRl
LmNwcAogICAgIERPTURlZmF1bHRJbXBsLmNwcAorICAgIE1haW5XaW5kb3cuY3BwCiAgICAgUGFn
ZUxvYWRUZXN0Q2xpZW50LmNwcAogICAgIFByaW50V2ViVUlEZWxlZ2F0ZS5jcHAKICAgICBSZXNv
dXJjZUxvYWREZWxlZ2F0ZS5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9D
b21tb24uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKaW5kZXggMTFjNjU0
OWYzNjguLjNlZDdlMzllNjU2IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29t
bW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogICovCiAKICNpbmNsdWRlICJET01EZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIk1h
aW5XaW5kb3cuaCIKICNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgogI2luY2x1ZGUgIk1pbmlCcm93
c2VyUmVwbGFjZS5oIgogI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRDT01BUEkuaD4KQEAg
LTU1LDEyICs1Niw2IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHdpbmluZXQuaD4K
IAotI2RlZmluZSBNQVhfTE9BRFNUUklORyAxMDAKLSNkZWZpbmUgVVJMQkFSX0hFSUdIVCAgMjQK
LSNkZWZpbmUgQ09OVFJPTEJVVFRPTl9XSURUSCAyNAotCi1zdGF0aWMgY29uc3QgaW50IG1heEhp
c3RvcnlTaXplID0gMTA7Ci0KICNpZm5kZWYgV01fRFBJQ0hBTkdFRAogI2RlZmluZSBXTV9EUElD
SEFOR0VEIDB4MDJFMAogI2VuZGlmCkBAIC03MCwzNCArNjUsMTggQEAgdHlwZWRlZiBfY29tX3B0
cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3QsICZfX3V1aWRvZihJV2ViTXV0YWJs
ZVVSTFJlcXUKIAogLy8gR2xvYmFsIFZhcmlhYmxlczoKIEhJTlNUQU5DRSBoSW5zdDsKLUhXTkQg
aE1haW5XbmQ7Ci1IV05EIGhVUkxCYXJXbmQ7Ci1IR0RJT0JKIGhVUkxGb250OwotSFdORCBoQmFj
a0J1dHRvblduZDsKLUhXTkQgaEZvcndhcmRCdXR0b25XbmQ7CiBIV05EIGhDYWNoZVduZDsKIFdO
RFBST0MgRGVmRWRpdFByb2MgPSBudWxscHRyOwogV05EUFJPQyBEZWZCdXR0b25Qcm9jID0gbnVs
bHB0cjsKLVdORFBST0MgRGVmV2ViS2l0UHJvYyA9IG51bGxwdHI7Ci1IV05EIGdWaWV3V2luZG93
ID0gMDsKKworTWFpbldpbmRvdyogZ01haW5XaW5kb3cgPSBudWxscHRyOwogTWluaUJyb3dzZXIq
IGdNaW5pQnJvd3NlciA9IG51bGxwdHI7Ci1UQ0hBUiBzelRpdGxlW01BWF9MT0FEU1RSSU5HXTsg
Ly8gVGhlIHRpdGxlIGJhciB0ZXh0Ci1UQ0hBUiBzeldpbmRvd0NsYXNzW01BWF9MT0FEU1RSSU5H
XTsgLy8gdGhlIG1haW4gd2luZG93IGNsYXNzIG5hbWUKIAogLy8gU3VwcG9ydCBtb3ZpbmcgdGhl
IHRyYW5zcGFyZW50IHdpbmRvdwogUE9JTlQgc193aW5kb3dQb3NpdGlvbiA9IHsgMTAwLCAxMDAg
fTsKIFNJWkUgc193aW5kb3dTaXplID0geyA1MDAsIDIwMCB9OwogCiAvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucyBvZiBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gdGhpcyBjb2RlIG1vZHVsZToKLUFUT00g
TXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpOwotTFJFU1VMVCBDQUxMQkFDSyBX
bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUlOVF9QVFIgQ0FMTEJBQ0sgQWJv
dXQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotSU5UX1BUUiBDQUxMQkFDSyBDdXN0b21V
c2VyQWdlbnQoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotTFJFU1VMVCBDQUxMQkFDSyBF
ZGl0UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIEJh
Y2tCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUxSRVNVTFQgQ0FMTEJB
Q0sgRm9yd2FyZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotTFJFU1VM
VCBDQUxMQkFDSyBSZWxvYWRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
LUlOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIElO
VF9QVFIgQ0FMTEJBQ0sgQXV0aERpYWxvZ1Byb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwogCiBzdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgdXJsQlN0cik7CkBAIC0xMDcsMjcgKzg2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3co
SFdORCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2l6ZVN1YlZpZXdzKCkKLXsKLSAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGhNYWluV25k
KTsKLQotICAgIFJFQ1QgcmNDbGllbnQ7Ci0gICAgR2V0Q2xpZW50UmVjdChoTWFpblduZCwgJnJj
Q2xpZW50KTsKLQotICAgIGludCBoZWlnaHQgPSBzY2FsZUZhY3RvciAqIFVSTEJBUl9IRUlHSFQ7
Ci0gICAgaW50IHdpZHRoID0gc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIOwotCi0g
ICAgTW92ZVdpbmRvdyhoQmFja0J1dHRvblduZCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7
Ci0gICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWln
aHQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwgd2lkdGggKiAyLCAwLCByY0Ns
aWVudC5yaWdodCwgaGVpZ2h0LCBUUlVFKTsKLQotICAgIDo6U2VuZE1lc3NhZ2UoaFVSTEJhcldu
ZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCksIHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFN
PihnTWluaUJyb3dzZXItPnVybEJhckZvbnQoKSksIFRSVUUpOwotCi0gICAgaWYgKGdNaW5pQnJv
d3Nlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkgfHwgIWdWaWV3V2luZG93KQotICAgICAgICByZXR1
cm47Ci0gICAgTW92ZVdpbmRvdyhnVmlld1dpbmRvdywgMCwgaGVpZ2h0LCByY0NsaWVudC5yaWdo
dCwgcmNDbGllbnQuYm90dG9tIC0gaGVpZ2h0LCBUUlVFKTsKLX0KLQogc3RhdGljIHZvaWQgY29t
cHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQogewogICAgIFJFQ1QgZGVza3RvcDsKQEAgLTI3Nyw3ICsy
MzUsNyBAQCB2b2lkIFByaW50VmlldyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICA6OkRlbGV0ZURDKHByaW50REMpOwogfQogCi1zdGF0
aWMgdm9pZCBUb2dnbGVNZW51RmxhZyhIV05EIGhXbmQsIFVJTlQgbWVudUlEKQordm9pZCBUb2dn
bGVNZW51RmxhZyhIV05EIGhXbmQsIFVJTlQgbWVudUlEKQogewogICAgIEhNRU5VIG1lbnUgPSA6
OkdldE1lbnUoaFduZCk7CiAKQEAgLTMxOSw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCB0dXJuT2Zm
T3RoZXJVc2VyQWdlbnRzKEhNRU5VIG1lbnUpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBUb2dn
bGVNZW51SXRlbShIV05EIGhXbmQsIFVJTlQgbWVudUlEKQorYm9vbCBUb2dnbGVNZW51SXRlbShI
V05EIGhXbmQsIFVJTlQgbWVudUlEKQogewogICAgIGlmICghZ01pbmlCcm93c2VyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zOTksOTYgKzM1Nyw2IEBAIHN0YXRpYyBib29sIFRvZ2dsZU1l
bnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdCBpbnQgZHJhZ0JhckhlaWdodCA9IDMwOwotCi1MUkVTVUxUIENBTExCQUNLIFdu
ZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9DT01NQU5EOiB7Ci0g
ICAgICAgIGludCB3bUlkID0gTE9XT1JEKHdQYXJhbSk7Ci0gICAgICAgIGludCB3bUV2ZW50ID0g
SElXT1JEKHdQYXJhbSk7Ci0gICAgICAgIGlmICh3bUlkID49IElETV9ISVNUT1JZX0xJTkswICYm
IHdtSWQgPD0gSURNX0hJU1RPUllfTElOSzkpIHsKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dz
ZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5uYXZpZ2F0ZVRvSGlzdG9yeShoV25k
LCB3bUlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8vIFBhcnNl
IHRoZSBtZW51IHNlbGVjdGlvbnM6Ci0gICAgICAgIHN3aXRjaCAod21JZCkgewotICAgICAgICBj
YXNlIElETV9BQk9VVDoKLSAgICAgICAgICAgIERpYWxvZ0JveChoSW5zdCwgTUFLRUlOVFJFU09V
UkNFKElERF9BQk9VVEJPWCksIGhXbmQsIEFib3V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElETV9FWElUOgotICAgICAgICAgICAgRGVzdHJveVdpbmRvdyhoV25kKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9QUklOVDoKLSAgICAgICAgICAgIFBy
aW50VmlldyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJRE1fV0VCX0lOU1BFQ1RPUjoKLSAgICAgICAgICAgIGlmIChnTWlu
aUJyb3dzZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5sYXVuY2hJbnNwZWN0b3Io
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9DQUNIRVM6Ci0gICAgICAg
ICAgICBpZiAoITo6SXNXaW5kb3coaENhY2hlV25kKSkgewotICAgICAgICAgICAgICAgIGhDYWNo
ZVduZCA9IENyZWF0ZURpYWxvZyhoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9DQUNIRVMpLCBo
V25kLCBDYWNoZXMpOwotICAgICAgICAgICAgICAgIDo6U2hvd1dpbmRvdyhoQ2FjaGVXbmQsIFNX
X1NIT1cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURNX0hJU1RPUllfQkFDS1dBUkQ6Ci0gICAgICAgIGNhc2UgSURNX0hJU1RPUllfRk9SV0FSRDoK
LSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93
c2VyLT5uYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKGhXbmQsIHdtSWQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX1VBX09USEVSOgotICAgICAgICAgICAgaWYgKHdtRXZl
bnQpCi0gICAgICAgICAgICAgICAgVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VS
Q0UoSUREX1VTRVJfQUdFTlQpLCBoV25kLCBDdXN0b21Vc2VyQWdlbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0FDVFVBTF9TSVpFOgotICAgICAgICAgICAgaWYgKGdN
aW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnJlc2V0Wm9vbSgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX1pPT01fSU46Ci0gICAgICAgICAg
ICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+em9vbUlu
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fWk9PTV9PVVQ6Ci0gICAg
ICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+
em9vbU91dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX1NIT1dfTEFZ
RVJfVFJFRToKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAgICAg
Z01pbmlCcm93c2VyLT5zaG93TGF5ZXJUcmVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICghVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXTV9ERVNUUk9ZOgotI2lmIFVTRShDRikKLSAgICAgICAgQ0ZSdW5Mb29wU3RvcChDRlJ1
bkxvb3BHZXRNYWluKCkpOwotI2VuZGlmCi0gICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICBpZiAoIWdNaW5pQnJvd3Nl
ciB8fCAhZ01pbmlCcm93c2VyLT5oYXNXZWJWaWV3KCkpCi0gICAgICAgICAgICByZXR1cm4gRGVm
V2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0KLSAgICAgICAgcmVz
aXplU3ViVmlld3MoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9EUElDSEFOR0VEOgot
ICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgZ01pbmlCcm93c2VyLT51cGRh
dGVEZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCiBMUkVTVUxUIENBTExCQUNLIEVkaXRQcm9jKEhXTkQgaERsZywg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIHN3aXRj
aCAobWVzc2FnZSkgewpAQCAtNjAxLDcgKzQ2OSw3IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ3VzdG9t
VXNlckFnZW50KEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0K
ICAgICAgICAgICAgIF9ic3RyX3QgYnN0cihidWZmZXIpOwogICAgICAgICAgICAgaWYgKGJzdHIu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnNldFVzZXJBZ2VudChi
c3RyKTsKLSAgICAgICAgICAgICAgICA6OlBvc3RNZXNzYWdlKGhNYWluV25kLCBzdGF0aWNfY2Fz
dDxVSU5UPihXTV9DT01NQU5EKSwgTUFLRUxQQVJBTShJRE1fVUFfT1RIRVIsIDEpLCAwKTsKKyAg
ICAgICAgICAgICAgICA6OlBvc3RNZXNzYWdlKGdNYWluV2luZG93LT5od25kKCksIHN0YXRpY19j
YXN0PFVJTlQ+KFdNX0NPTU1BTkQpLCBNQUtFTFBBUkFNKElETV9VQV9PVEhFUiwgMSksIDApOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTYxNiw3ICs0ODQsNyBAQCBJTlRfUFRSIENB
TExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNCiAKIEhSRVNVTFQgRGlzcGxheUF1dGhEaWFsb2coc3RkOjp3c3RyaW5nJiB1
c2VybmFtZSwgc3RkOjp3c3RyaW5nJiBwYXNzd29yZCkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IERp
YWxvZ0JveChoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9BVVRIKSwgaE1haW5XbmQsIEF1dGhE
aWFsb2dQcm9jKTsKKyAgICBhdXRvIHJlc3VsdCA9IERpYWxvZ0JveChoSW5zdCwgTUFLRUlOVFJF
U09VUkNFKElERF9BVVRIKSwgZ01haW5XaW5kb3ctPmh3bmQoKSwgQXV0aERpYWxvZ1Byb2MpOwog
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCkBAIC02NjksNyArNTM3
LDcgQEAgc3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHBhc3NlZFVSTCkKICAgICBpZiAoRkFJTEVE
KGdNaW5pQnJvd3Nlci0+bG9hZFVSTChwYXNzZWRVUkwpKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU2V0Rm9jdXMoZ1ZpZXdXaW5kb3cpOworICAgIFNldEZvY3VzKGdNaW5pQnJvd3Nlci0+aHdu
ZCgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0V2luZG93VGV4dChIV05EIGRpYWxvZywgVUlOVCBm
aWVsZCwgX2JzdHJfdCB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9N
YWluV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzBhMTE4NDMyZGUKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHAKQEAgLTAsMCAr
MSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgIk1haW5XaW5kb3cuaCIKKyNpbmNsdWRl
ICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdO
RCk7Cit9CisKKyNkZWZpbmUgVVJMQkFSX0hFSUdIVCAgMjQKKyNkZWZpbmUgQ09OVFJPTEJVVFRP
Tl9XSURUSCAyNAorCitleHRlcm4gTWFpbldpbmRvdyogZ01haW5XaW5kb3c7CitleHRlcm4gTWlu
aUJyb3dzZXIqIGdNaW5pQnJvd3NlcjsKK2V4dGVybiBXTkRQUk9DIERlZkVkaXRQcm9jOworZXh0
ZXJuIFdORFBST0MgRGVmQnV0dG9uUHJvYzsKK2V4dGVybiBISU5TVEFOQ0UgaEluc3Q7CitleHRl
cm4gSFdORCBoQ2FjaGVXbmQ7CisKK0xSRVNVTFQgQ0FMTEJBQ0sgRWRpdFByb2MoSFdORCwgVUlO
VCwgV1BBUkFNLCBMUEFSQU0pOworTFJFU1VMVCBDQUxMQkFDSyBCYWNrQnV0dG9uUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CitMUkVTVUxUIENBTExCQUNLIEZvcndhcmRCdXR0b25Q
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVsb2Fk
QnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CitJTlRfUFRSIENBTExCQUNL
IEFib3V0KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0lOVF9QVFIgQ0FMTEJBQ0sgQ3Vz
dG9tVXNlckFnZW50KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0lOVF9QVFIgQ0FMTEJB
Q0sgQ2FjaGVzKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0lOVF9QVFIgQ0FMTEJBQ0sg
QXV0aERpYWxvZ1Byb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwordm9pZCBQcmludFZp
ZXcoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0p
OworYm9vbCBUb2dnbGVNZW51SXRlbShIV05EIGhXbmQsIFVJTlQgbWVudUlEKTsKKworc3RkOjp3
c3RyaW5nIE1haW5XaW5kb3c6OnNfd2luZG93Q2xhc3M7CisKK3N0YXRpYyBzdGQ6OndzdHJpbmcg
bG9hZFN0cmluZyhpbnQgaWQpCit7CisgICAgY29uc3RleHByIHNpemVfdCBsZW5ndGggPSAxMDA7
CisgICAgd2NoYXJfdCBidWZmW2xlbmd0aF07CisgICAgTG9hZFN0cmluZyhoSW5zdCwgSURDX01J
TklCUk9XU0VSLCBidWZmLCBsZW5ndGgpOworICAgIHJldHVybiBidWZmOworfQorCit2b2lkIE1h
aW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5jZSkKK3sKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIHNfd2luZG93Q2xhc3Mg
PSBsb2FkU3RyaW5nKElEQ19NSU5JQlJPV1NFUik7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7Cisg
ICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAg
ICAgICA9IENTX0hSRURSQVcgfCBDU19WUkVEUkFXOworICAgIHdjZXgubHBmblduZFByb2MgICAg
PSBXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRF
eHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAgPSBoSW5zdGFuY2U7CisgICAg
d2NleC5oSWNvbiAgICAgICAgICA9IExvYWRJY29uKGhJbnN0YW5jZSwgTUFLRUlOVFJFU09VUkNF
KElESV9NSU5JQlJPV1NFUikpOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29y
KDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5s
cHN6TWVudU5hbWUgICA9IE1BS0VJTlRSRVNPVVJDRShJRENfTUlOSUJST1dTRVIpOworICAgIHdj
ZXgubHBzekNsYXNzTmFtZSAgPSBzX3dpbmRvd0NsYXNzLmNfc3RyKCk7CisgICAgd2NleC5oSWNv
blNtICAgICAgICA9IExvYWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJ
X1NNQUxMKSk7CisKKyAgICBSZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitib29sIE1haW5X
aW5kb3c6OmluaXQoSElOU1RBTkNFIGhJbnN0YW5jZSwgYm9vbCB1c2VzTGF5ZXJlZFdlYlZpZXcs
IGJvb2wgcGFnZUxvYWRUZXN0aW5nKQoreworICAgIHJlZ2lzdGVyQ2xhc3MoaEluc3RhbmNlKTsK
KworICAgIGF1dG8gdGl0bGUgPSBsb2FkU3RyaW5nKElEU19BUFBfVElUTEUpOworCisgICAgbV9o
TWFpblduZCA9IENyZWF0ZVdpbmRvdyhzX3dpbmRvd0NsYXNzLmNfc3RyKCksIHRpdGxlLmNfc3Ry
KCksIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VT
RURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0YW5jZSwgMCk7CisKKyAgICBpZiAoIW1faE1haW5XbmQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29y
ZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobnVsbHB0cik7CisgICAgbV9oQmFja0J1dHRv
blduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPCIsIFdTX0NISUxEIHwgV1NfVklTSUJM
RSAgfCBCU19URVhULCAwLCAwLCAwLCAwLCBtX2hNYWluV25kLCAwLCBoSW5zdGFuY2UsIDApOwor
ICAgIG1faEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBX
U19DSElMRCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRU
T05fV0lEVEgsIDAsIDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0YW5jZSwgMCk7CisgICAgbV9o
VVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJM
RSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBD
T05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwgMCwgMCwgbV9oTWFpblduZCwgMCwgaEluc3RhbmNl
LCAwKTsKKworICAgIERlZkVkaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRX
aW5kb3dMb25nUHRyKG1faFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgRGVmQnV0dG9u
UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihtX2hCYWNr
QnV0dG9uV25kLCBHV0xQX1dORFBST0MpKTsKKyAgICBTZXRXaW5kb3dMb25nUHRyKG1faFVSTEJh
clduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihFZGl0UHJvYykp
OworICAgIFNldFdpbmRvd0xvbmdQdHIobV9oQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCBy
ZWludGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOworICAgIFNldFdpbmRv
d0xvbmdQdHIobV9oRm9yd2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9j
YXN0PExPTkdfUFRSPihGb3J3YXJkQnV0dG9uUHJvYykpOworCisgICAgU2V0Rm9jdXMobV9oVVJM
QmFyV25kKTsKKworICAgIG1fYnJvd3NlcldpbmRvdyA9IHN0ZDo6bWFrZV91bmlxdWU8TWluaUJy
b3dzZXI+KG1faE1haW5XbmQsIG1faFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdl
TG9hZFRlc3RpbmcpOworICAgIGlmICghbV9icm93c2VyV2luZG93KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgSFJFU1VMVCBociA9IG1fYnJvd3NlcldpbmRvdy0+aW5pdCgpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXNpemVTdWJWaWV3
cygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1haW5XaW5kb3c6OnJlc2l6ZVN1YlZp
ZXdzKCkKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFj
dG9yRm9yV2luZG93KG1faE1haW5XbmQpOworCisgICAgUkVDVCByY0NsaWVudDsKKyAgICBHZXRD
bGllbnRSZWN0KG1faE1haW5XbmQsICZyY0NsaWVudCk7CisKKyAgICBpbnQgaGVpZ2h0ID0gc2Nh
bGVGYWN0b3IgKiBVUkxCQVJfSEVJR0hUOworICAgIGludCB3aWR0aCA9IHNjYWxlRmFjdG9yICog
Q09OVFJPTEJVVFRPTl9XSURUSDsKKworICAgIE1vdmVXaW5kb3cobV9oQmFja0J1dHRvblduZCwg
MCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhtX2hGb3J3YXJkQnV0
dG9uV25kLCB3aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyht
X2hVUkxCYXJXbmQsIHdpZHRoICogMiwgMCwgcmNDbGllbnQucmlnaHQsIGhlaWdodCwgVFJVRSk7
CisKKyAgICA6OlNlbmRNZXNzYWdlKG1faFVSTEJhclduZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01f
U0VURk9OVCksIHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFNPihtX2Jyb3dzZXJXaW5kb3ctPnVybEJh
ckZvbnQoKSksIFRSVUUpOworCisgICAgaWYgKG1fYnJvd3NlcldpbmRvdy0+dXNlc0xheWVyZWRX
ZWJWaWV3KCkgfHwgIW1fYnJvd3NlcldpbmRvdy0+aHduZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgTW92ZVdpbmRvdyhtX2Jyb3dzZXJXaW5kb3ctPmh3bmQoKSwgMCwgaGVpZ2h0LCByY0NsaWVu
dC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gaGVpZ2h0LCBUUlVFKTsKK30KKworTFJFU1VMVCBD
QUxMQkFDSyBNYWluV2luZG93OjpXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAg
IGNhc2UgV01fQ09NTUFORDogeworICAgICAgICBpbnQgd21JZCA9IExPV09SRCh3UGFyYW0pOwor
ICAgICAgICBpbnQgd21FdmVudCA9IEhJV09SRCh3UGFyYW0pOworICAgICAgICBpZiAod21JZCA+
PSBJRE1fSElTVE9SWV9MSU5LMCAmJiB3bUlkIDw9IElETV9ISVNUT1JZX0xJTks5KSB7CisgICAg
ICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+
bmF2aWdhdGVUb0hpc3RvcnkoaFduZCwgd21JZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAvLyBQYXJzZSB0aGUgbWVudSBzZWxlY3Rpb25zOgorICAgICAgICBzd2l0
Y2ggKHdtSWQpIHsKKyAgICAgICAgY2FzZSBJRE1fQUJPVVQ6CisgICAgICAgICAgICBEaWFsb2dC
b3goaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRERfQUJPVVRCT1gpLCBoV25kLCBBYm91dCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fRVhJVDoKKyAgICAgICAgICAgIERl
c3Ryb3lXaW5kb3coaFduZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1f
UFJJTlQ6CisgICAgICAgICAgICBQcmludFZpZXcoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFy
YW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1dFQl9JTlNQRUNUT1I6
CisgICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAgICAgICAgIGdNaW5pQnJv
d3Nlci0+bGF1bmNoSW5zcGVjdG9yKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJRE1fQ0FDSEVTOgorICAgICAgICAgICAgaWYgKCE6OklzV2luZG93KGhDYWNoZVduZCkpIHsK
KyAgICAgICAgICAgICAgICBoQ2FjaGVXbmQgPSBDcmVhdGVEaWFsb2coaEluc3QsIE1BS0VJTlRS
RVNPVVJDRShJRERfQ0FDSEVTKSwgaFduZCwgQ2FjaGVzKTsKKyAgICAgICAgICAgICAgICA6OlNo
b3dXaW5kb3coaENhY2hlV25kLCBTV19TSE9XKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIElETV9ISVNUT1JZX0JBQ0tXQVJEOgorICAgICAgICBjYXNl
IElETV9ISVNUT1JZX0ZPUldBUkQ6CisgICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAg
ICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChoV25k
LCB3bUlkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9VQV9PVEhFUjoK
KyAgICAgICAgICAgIGlmICh3bUV2ZW50KQorICAgICAgICAgICAgICAgIFRvZ2dsZU1lbnVJdGVt
KGhXbmQsIHdtSWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIERpYWxvZ0Jv
eChoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9VU0VSX0FHRU5UKSwgaFduZCwgQ3VzdG9tVXNl
ckFnZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9BQ1RVQUxfU0la
RToKKyAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCisgICAgICAgICAgICAgICAgZ01pbmlC
cm93c2VyLT5yZXNldFpvb20oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElE
TV9aT09NX0lOOgorICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgICAg
ICBnTWluaUJyb3dzZXItPnpvb21JbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSURNX1pPT01fT1VUOgorICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAg
ICAgICAgICBnTWluaUJyb3dzZXItPnpvb21PdXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElETV9TSE9XX0xBWUVSX1RSRUU6CisgICAgICAgICAgICBpZiAoZ01pbmlCcm93
c2VyKQorICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+c2hvd0xheWVyVHJlZSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIVRvZ2ds
ZU1lbnVJdGVtKGhXbmQsIHdtSWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQ
cm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fREVTVFJPWToKKyNpZiBVU0UoQ0YpCisgICAg
ICAgIENGUnVuTG9vcFN0b3AoQ0ZSdW5Mb29wR2V0TWFpbigpKTsKKyNlbmRpZgorICAgICAgICBQ
b3N0UXVpdE1lc3NhZ2UoMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fU0laRToKKyAg
ICAgICAgaWYgKCFnTWluaUJyb3dzZXIgfHwgIWdNaW5pQnJvd3Nlci0+aGFzV2ViVmlldygpKQor
ICAgICAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0pOworCisgICAgICAgIGdNYWluV2luZG93LT5yZXNpemVTdWJWaWV3cygpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdNX0RQSUNIQU5HRUQ6CisgICAgICAgIGlmIChnTWluaUJyb3dz
ZXIpCisgICAgICAgICAgICBnTWluaUJyb3dzZXItPnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7
CisgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvd2luL01haW5XaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMjQyM2RhNzUwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93
aW4vTWFpbldpbmRvdy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxtZW1v
cnk+CisjaW5jbHVkZSA8c3RyaW5nPgorCitjbGFzcyBNaW5pQnJvd3NlcjsKKworY2xhc3MgTWFp
bldpbmRvdyB7CitwdWJsaWM6CisgICAgYm9vbCBpbml0KEhJTlNUQU5DRSBoSW5zdGFuY2UsIGJv
b2wgdXNlc0xheWVyZWRXZWJWaWV3ID0gZmFsc2UsIGJvb2wgcGFnZUxvYWRUZXN0aW5nID0gZmFs
c2UpOworCisgICAgdm9pZCByZXNpemVTdWJWaWV3cygpOworICAgIEhXTkQgaHduZCgpIGNvbnN0
IHsgcmV0dXJuIG1faE1haW5XbmQ7IH0KKyAgICBNaW5pQnJvd3NlciogYnJvd3NlcldpbmRvdygp
IGNvbnN0IHsgcmV0dXJuIG1fYnJvd3NlcldpbmRvdy5nZXQoKTsgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwg
TFBBUkFNKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFu
Y2UpOworICAgIHN0YXRpYyBzdGQ6OndzdHJpbmcgc193aW5kb3dDbGFzczsKKworICAgIEhXTkQg
bV9oTWFpblduZCB7IG51bGxwdHIgfTsKKyAgICBIV05EIG1faFVSTEJhclduZCB7IG51bGxwdHIg
fTsKKyAgICBIV05EIG1faEJhY2tCdXR0b25XbmQgeyBudWxscHRyIH07CisgICAgSFdORCBtX2hG
b3J3YXJkQnV0dG9uV25kIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNaW5pQnJv
d3Nlcj4gbV9icm93c2VyV2luZG93OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9XaW5NYWluLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcAppbmRl
eCA3ODFkNTRhMjMxZS4uY2Q5NzFmMGFhMTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9XaW5NYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAK
QEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIkNvbW1vbi5jcHAiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yRm9yV2luZG93KEhXTkQpOwotfQotCiBpbnQgV0lOQVBJIHdXaW5NYWluKF9J
bl8gSElOU1RBTkNFIGhJbnN0YW5jZSwgX0luX29wdF8gSElOU1RBTkNFIGhQcmV2SW5zdGFuY2Us
IF9Jbl8gTFBXU1RSIGxwc3RyQ21kTGluZSwgX0luXyBpbnQgbkNtZFNob3cpCiB7CiAjaWZkZWYg
X0NSVERCR19NQVBfQUxMT0MKQEAgLTU5LDExICs1NSw2IEBAIGludCBXSU5BUEkgd1dpbk1haW4o
X0luXyBISU5TVEFOQ0UgaEluc3RhbmNlLCBfSW5fb3B0XyBISU5TVEFOQ0UgaFByZXZJbnN0YW5j
ZSwKIAogICAgIHBhcnNlQ29tbWFuZExpbmUodXNlc0xheWVyZWRXZWJWaWV3LCB1c2VGdWxsRGVz
a3RvcCwgcGFnZUxvYWRUZXN0aW5nLCByZXF1ZXN0ZWRVUkwpOwogCi0gICAgLy8gSW5pdGlhbGl6
ZSBnbG9iYWwgc3RyaW5ncwotICAgIExvYWRTdHJpbmcoaEluc3QsIElEU19BUFBfVElUTEUsIHN6
VGl0bGUsIE1BWF9MT0FEU1RSSU5HKTsKLSAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRENfTUlOSUJS
T1dTRVIsIHN6V2luZG93Q2xhc3MsIE1BWF9MT0FEU1RSSU5HKTsKLSAgICBNeVJlZ2lzdGVyQ2xh
c3MoaEluc3QpOwotCiAgICAgaWYgKHVzZUZ1bGxEZXNrdG9wKQogICAgICAgICBjb21wdXRlRnVs
bERlc2t0b3BGcmFtZSgpOwogCkBAIC03Miw0MiArNjMsMTMgQEAgaW50IFdJTkFQSSB3V2luTWFp
bihfSW5fIEhJTlNUQU5DRSBoSW5zdGFuY2UsIF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3Rh
bmNlLAogCiAgICAgOjpTZXRQcm9jZXNzRFBJQXdhcmUoKTsKIAotICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobnVsbHB0cik7Ci0KLSAg
ICBoTWFpblduZCA9IENyZWF0ZVdpbmRvdyhzeldpbmRvd0NsYXNzLCBzelRpdGxlLCBXU19PVkVS
TEFQUEVEV0lORE9XLAotICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAw
LCAwLCAwLCBoSW5zdCwgMCk7Ci0KLSAgICBpZiAoIWhNYWluV25kKQotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0KLSAgICBoQmFja0J1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwi
PCIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSAgfCBCU19URVhULCAwLCAwLCAwLCAwLCBoTWFpbldu
ZCwgMCwgaEluc3QsIDApOwotICAgIGhGb3J3YXJkQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwi
QlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgQlNfVEVYVCwgc2NhbGVGYWN0
b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDAp
OwotICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBX
U19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBzY2FsZUZh
Y3RvciAqIENPTlRST0xCVVRUT05fV0lEVEggKiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaElu
c3QsIDApOwotCi0gICAgU2hvd1dpbmRvdyhoTWFpblduZCwgbkNtZFNob3cpOwotICAgIFVwZGF0
ZVdpbmRvdyhoTWFpblduZCk7Ci0KLSAgICBEZWZFZGl0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihoVVJMQmFyV25kLCBHV0xQX1dORFBST0MpKTsKLSAg
ICBEZWZCdXR0b25Qcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25n
UHRyKGhCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRy
KGhVUkxCYXJXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRWRp
dFByb2MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRyKGhCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBS
T0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEJhY2tCdXR0b25Qcm9jKSk7Ci0gICAgU2V0
V2luZG93TG9uZ1B0cihoRm9yd2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJl
dF9jYXN0PExPTkdfUFRSPihGb3J3YXJkQnV0dG9uUHJvYykpOwotCi0gICAgU2V0Rm9jdXMoaFVS
TEJhclduZCk7Ci0KLSAgICBnTWluaUJyb3dzZXIgPSBuZXcgTWluaUJyb3dzZXIoaE1haW5XbmQs
IGhVUkxCYXJXbmQsIHVzZXNMYXllcmVkV2ViVmlldywgcGFnZUxvYWRUZXN0aW5nKTsKLSAgICBp
ZiAoIWdNaW5pQnJvd3NlcikKLSAgICAgICAgZ290byBleGl0OwotICAgIEhSRVNVTFQgaHIgPSBn
TWluaUJyb3dzZXItPmluaXQoKTsKKyAgICBnTWFpbldpbmRvdyA9IG5ldyBNYWluV2luZG93KCk7
CisgICAgSFJFU1VMVCBociA9IGdNYWluV2luZG93LT5pbml0KGhJbnN0LCB1c2VzTGF5ZXJlZFdl
YlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIGdv
dG8gZXhpdDsKIAotICAgIGdWaWV3V2luZG93ID0gZ01pbmlCcm93c2VyLT5od25kKCk7Ci0KLSAg
ICByZXNpemVTdWJWaWV3cygpOwotCi0gICAgU2hvd1dpbmRvdyhnVmlld1dpbmRvdywgbkNtZFNo
b3cpOwotICAgIFVwZGF0ZVdpbmRvdyhnVmlld1dpbmRvdyk7CisgICAgZ01pbmlCcm93c2VyID0g
Z01haW5XaW5kb3ctPmJyb3dzZXJXaW5kb3coKTsKKyAgICBTaG93V2luZG93KGdNYWluV2luZG93
LT5od25kKCksIG5DbWRTaG93KTsKIAogICAgIGhBY2NlbFRhYmxlID0gTG9hZEFjY2VsZXJhdG9y
cyhoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElEQ19NSU5JQlJPV1NFUikpOwogCkBAIC0xMzksMjgg
KzEwMSw1IEBAIGV4aXQ6CiAgICAgLy8gU2h1dCBkb3duIENPTS4KICAgICBPbGVVbmluaXRpYWxp
emUoKTsKIAotICAgIGRlbGV0ZSBnTWluaUJyb3dzZXI7Ci0gICAgCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4obXNnLndQYXJhbSk7CiB9Ci0KLUFUT00gTXlSZWdpc3RlckNsYXNzKEhJTlNU
QU5DRSBoSW5zdGFuY2UpCi17Ci0gICAgV05EQ0xBU1NFWCB3Y2V4OwotCi0gICAgd2NleC5jYlNp
emUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0KLSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1Nf
SFJFRFJBVyB8IENTX1ZSRURSQVc7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IFduZFByb2M7
Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9
IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGhJbnN0YW5jZTsKLSAgICB3Y2V4LmhJY29u
ICAgICAgICAgID0gTG9hZEljb24oaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX01JTklC
Uk9XU0VSKSk7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FS
Uk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFt
ZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19NSU5JQlJPV1NFUik7Ci0gICAgd2NleC5scHN6Q2xh
c3NOYW1lICA9IHN6V2luZG93Q2xhc3M7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IExvYWRJ
Y29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX1NNQUxMKSk7Ci0KLSAgICBy
ZXR1cm4gUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341442</attachid>
            <date>2018-05-27 20:47:21 -0700</date>
            <delta_ts>2018-05-27 20:47:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185814-20180528124720.patch</filename>
            <type>text/plain</type>
            <size>26126</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjMzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGIwMTBiYTQ4NTk4NTM0NGI1YjdkOGYxOTQ3ZDQyZDEx
NmZlMTg5NS4uYzViMjkwYzFiMDdkNjQ3NDU2NWIwNDMyYTI1NDEyZmE5ZDRmNDc1NCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2
IEBACisyMDE4LTA1LTI3ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgorCisgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBBZGQgTWFpbldpbmRvdyBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1ODE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUGVyIEFybmUgVm9sbGFuLgorCisgICAgICAgIFRoaXMgaXMgYSBz
dWIgdGFzayBvZiBCdWcgMTg0NzcwLiBBZGRlZCBhIG5ldyBjbGFzcyBNYWluV2luZG93IHRvCisg
ICAgICAgIHJlcHJlc2VudCB0aGUgbWFpbiB3aW5kb3cgd2hpY2ggd2lsbCBiZSBzaGFyZWQgYW1v
bmcgV0sxIGFuZCBXSzIuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgcGFydGlhbCBzbyB0aGF0
IGl0J3MgZWFzeSB0byByZXZpZXcgdGhpcyBwYXRjaC4KKyAgICAgICAgSSdsbCBtb3ZlIG1vcmUg
ZnVuY3Rpb25zIGludG8gTWFpbldpbmRvdy5jcHAsIGFuZCByZW1vdmUgbW9yZQorICAgICAgICBn
bG9iYWwgdmFyaWFibGVzIGluIGZvcnRoY29taW5nIHBhdGNoZXMuCisKKyAgICAgICAgKiBNaW5p
QnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQ6IEFkZGVkIE1haW5XaW5kb3cuY3BwLgorICAgICAg
ICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uY3BwOiBSZW1vdmVkIE1haW5XaW5kb3cgcmVsYXRl
ZCBnbG9iYWwKKyAgICAgICAgdmFyaWFibGVzIGhNYWluV25kLCBoVVJMQmFyV25kLCBoQmFja0J1
dHRvblduZCBhbmQKKyAgICAgICAgaEZvcndhcmRCdXR0b25XbmQuIEFkZGVkIGEgbmV3IGdsb2Jh
bCB2YXJpYWJsZSBnTWFpbldpbmRvdy4KKyAgICAgICAgKFduZFByb2MpOiBNb3ZlZCB0byBNYWlu
V2luZG93LmNwcC4KKyAgICAgICAgKHJlc2l6ZVN1YlZpZXdzKTogRGl0dG8uCisgICAgICAgIChU
b2dnbGVNZW51RmxhZyk6IFJlbW92ZWQgc3RhdGljIHRvIGJlIGNhbGxlZCBmcm9tIE1haW5XaW5k
b3cuY3BwLgorICAgICAgICAoVG9nZ2xlTWVudUl0ZW0pOiBEaXR0by4KKyAgICAgICAgKEN1c3Rv
bVVzZXJBZ2VudCk6IEZvbGxvdyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyByZW1vdmFsLgorICAgICAg
ICAoRGlzcGxheUF1dGhEaWFsb2cpOiBEaXR0by4KKyAgICAgICAgKGxvYWRVUkwpOiBEaXR0by4K
KyAgICAgICAgKFduZFByb2MpOiBSZW5hbWVkIHRvIE1haW5XaW5kb3c6OlduZFByb2MuCisgICAg
ICAgICogTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKE1h
aW5XaW5kb3c6OnJlZ2lzdGVyQ2xhc3MpOiBSZW5hbWVkIGZyb20gTXlSZWdpc3RlckNsYXNzIG9m
IFdpbk1haW4uY3BwLgorICAgICAgICAoTWFpbldpbmRvdzo6aW5pdCk6IEV4dHJhY3RlZCBNYWlu
V2luZG93IGluaXRpYWxpemF0aW9uIGNvZGUgZnJvbSB3V2luTWFpbi4KKyAgICAgICAgKE1haW5X
aW5kb3c6OnJlc2l6ZVN1YlZpZXdzKTogTW92ZWQgZnJvbSBDb21tb24uY3BwLgorICAgICAgICAo
TWFpbldpbmRvdzo6V25kUHJvYyk6IERpdHRvLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9N
YWluV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAoTWFpbldpbmRvdzo6aHduZCk6CisgICAgICAg
IChNYWluV2luZG93Ojpicm93c2VyV2luZG93KToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4v
TWluaUJyb3dzZXIuY3BwOgorICAgICAgICAoTWluaUJyb3dzZXI6OmluaXQpOgorICAgICAgICAo
TWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyk6IEV4dHJhY3Qgc29tZSBjb2RlIGludG8gTWluaUJy
b3dzZXI6OmxvYWREZWZhdWx0SFRNTC4KKyAgICAgICAgKE1pbmlCcm93c2VyOjpsb2FkRGVmYXVs
dEhUTUwpOiBFeHRyYWN0ZWQgZnJvbSBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzLgorICAgICAg
ICAqIE1pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oOgorICAgICAgICAqIE1pbmlCcm93c2Vy
L3dpbi9XaW5NYWluLmNwcDoKKyAgICAgICAgKHdXaW5NYWluKTogRXh0cmFjdGVkIE1haW5XaW5k
b3cgaW5pdGlhbGl6YXRpb24gY29kZSBpbnRvIE1haW5XaW5kb3c6OmluaXQuCisgICAgICAgIChN
eVJlZ2lzdGVyQ2xhc3MpOiBNb3ZlZCB0byBNYWluV2luZG93LmNwcC4KKwogMjAxOC0wNS0yNyAg
RnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2lu
XVtNaW5pQnJvd3Nlcl0gUmVtb3ZlIFVSTCBhcmd1bWVudCBvZiBNaW5pQnJvd3Nlcjo6aW5pdApk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMv
TWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CmluZGV4IGI4OTU2ZjgzMjBjN2I4OTQyNmZk
M2FkYmIwNTk5OGYzNGFmOTBjM2QuLjcwZTZkN2NlNTZiM2U4OGMxYTBiNTc1ZTEzYTdhMzRlYzNk
MWZhZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9DTWFrZUxpc3RzLnR4dAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQKQEAgLTgsNiArOCw3IEBA
IHNldChNaW5pQnJvd3Nlcl9JTkNMVURFX0RJUkVDVE9SSUVTCiBzZXQoTWluaUJyb3dzZXJfU09V
UkNFUwogICAgIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5jcHAKICAgICBET01EZWZhdWx0SW1wbC5j
cHAKKyAgICBNYWluV2luZG93LmNwcAogICAgIFBhZ2VMb2FkVGVzdENsaWVudC5jcHAKICAgICBQ
cmludFdlYlVJRGVsZWdhdGUuY3BwCiAgICAgUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcCBiL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9Db21tb24uY3BwCmluZGV4IDExYzY1NDlmMzY4MzhmYjhjOGJjOTU0MTYwNTcxM2Nm
MzBlM2QzYTIuLjNlZDdlMzllNjU2YmRlYjg1YTMwNWVhMjcxOThkZGJmODEwYmE3YzMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uY3BwCisrKyBiL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9Db21tb24uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUg
IkRPTURlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgogI2luY2x1ZGUgIk1p
bmlCcm93c2VyLmgiCiAjaW5jbHVkZSAiTWluaUJyb3dzZXJSZXBsYWNlLmgiCiAjaW5jbHVkZSA8
V2ViS2l0TGVnYWN5L1dlYktpdENPTUFQSS5oPgpAQCAtNTUsMTIgKzU2LDYgQEAKICNpbmNsdWRl
IDx2ZWN0b3I+CiAjaW5jbHVkZSA8d2luaW5ldC5oPgogCi0jZGVmaW5lIE1BWF9MT0FEU1RSSU5H
IDEwMAotI2RlZmluZSBVUkxCQVJfSEVJR0hUICAyNAotI2RlZmluZSBDT05UUk9MQlVUVE9OX1dJ
RFRIIDI0Ci0KLXN0YXRpYyBjb25zdCBpbnQgbWF4SGlzdG9yeVNpemUgPSAxMDsKLQogI2lmbmRl
ZiBXTV9EUElDSEFOR0VECiAjZGVmaW5lIFdNX0RQSUNIQU5HRUQgMHgwMkUwCiAjZW5kaWYKQEAg
LTcwLDM0ICs2NSwxOCBAQCB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxl
VVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdQogCiAvLyBHbG9iYWwgVmFy
aWFibGVzOgogSElOU1RBTkNFIGhJbnN0OwotSFdORCBoTWFpblduZDsKLUhXTkQgaFVSTEJhcldu
ZDsKLUhHRElPQkogaFVSTEZvbnQ7Ci1IV05EIGhCYWNrQnV0dG9uV25kOwotSFdORCBoRm9yd2Fy
ZEJ1dHRvblduZDsKIEhXTkQgaENhY2hlV25kOwogV05EUFJPQyBEZWZFZGl0UHJvYyA9IG51bGxw
dHI7CiBXTkRQUk9DIERlZkJ1dHRvblByb2MgPSBudWxscHRyOwotV05EUFJPQyBEZWZXZWJLaXRQ
cm9jID0gbnVsbHB0cjsKLUhXTkQgZ1ZpZXdXaW5kb3cgPSAwOworCitNYWluV2luZG93KiBnTWFp
bldpbmRvdyA9IG51bGxwdHI7CiBNaW5pQnJvd3NlciogZ01pbmlCcm93c2VyID0gbnVsbHB0cjsK
LVRDSEFSIHN6VGl0bGVbTUFYX0xPQURTVFJJTkddOyAvLyBUaGUgdGl0bGUgYmFyIHRleHQKLVRD
SEFSIHN6V2luZG93Q2xhc3NbTUFYX0xPQURTVFJJTkddOyAvLyB0aGUgbWFpbiB3aW5kb3cgY2xh
c3MgbmFtZQogCiAvLyBTdXBwb3J0IG1vdmluZyB0aGUgdHJhbnNwYXJlbnQgd2luZG93CiBQT0lO
VCBzX3dpbmRvd1Bvc2l0aW9uID0geyAxMDAsIDEwMCB9OwogU0laRSBzX3dpbmRvd1NpemUgPSB7
IDUwMCwgMjAwIH07CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbmNs
dWRlZCBpbiB0aGlzIGNvZGUgbW9kdWxlOgotQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNF
IGhJbnN0YW5jZSk7Ci1MUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOwotSU5UX1BUUiBDQUxMQkFDSyBBYm91dChIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7Ci1JTlRfUFRSIENBTExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIEVkaXRQcm9jKEhXTkQsIFVJTlQsIFdQQVJB
TSwgTFBBUkFNKTsKLUxSRVNVTFQgQ0FMTEJBQ0sgQmFja0J1dHRvblByb2MoSFdORCwgVUlOVCwg
V1BBUkFNLCBMUEFSQU0pOwotTFJFU1VMVCBDQUxMQkFDSyBGb3J3YXJkQnV0dG9uUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLIFJlbG9hZEJ1dHRvblBy
b2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogSU5UX1BUUiBDQUxMQkFDSyBBdXRoRGlhbG9n
UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAKIHN0YXRpYyB2b2lkIGxvYWRVUkwo
QlNUUiB1cmxCU3RyKTsKQEAgLTEwNywyNyArODYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKIH0KIAotc3RhdGljIHZvaWQg
cmVzaXplU3ViVmlld3MoKQotewotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2
aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaE1haW5XbmQpOwotCi0gICAgUkVDVCByY0NsaWVudDsK
LSAgICBHZXRDbGllbnRSZWN0KGhNYWluV25kLCAmcmNDbGllbnQpOwotCi0gICAgaW50IGhlaWdo
dCA9IHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVDsKLSAgICBpbnQgd2lkdGggPSBzY2FsZUZh
Y3RvciAqIENPTlRST0xCVVRUT05fV0lEVEg7Ci0KLSAgICBNb3ZlV2luZG93KGhCYWNrQnV0dG9u
V25kLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3YXJk
QnV0dG9uV25kLCB3aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRv
dyhoVVJMQmFyV25kLCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRSVUUp
OwotCi0gICAgOjpTZW5kTWVzc2FnZShoVVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9T
RVRGT05UKSwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGdNaW5pQnJvd3Nlci0+dXJsQmFyRm9u
dCgpKSwgVFJVRSk7Ci0KLSAgICBpZiAoZ01pbmlCcm93c2VyLT51c2VzTGF5ZXJlZFdlYlZpZXco
KSB8fCAhZ1ZpZXdXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICBNb3ZlV2luZG93KGdWaWV3
V2luZG93LCAwLCBoZWlnaHQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBoZWln
aHQsIFRSVUUpOwotfQotCiBzdGF0aWMgdm9pZCBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpCiB7
CiAgICAgUkVDVCBkZXNrdG9wOwpAQCAtMjc3LDcgKzIzNSw3IEBAIHZvaWQgUHJpbnRWaWV3KEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAg
IDo6RGVsZXRlREMocHJpbnREQyk7CiB9CiAKLXN0YXRpYyB2b2lkIFRvZ2dsZU1lbnVGbGFnKEhX
TkQgaFduZCwgVUlOVCBtZW51SUQpCit2b2lkIFRvZ2dsZU1lbnVGbGFnKEhXTkQgaFduZCwgVUlO
VCBtZW51SUQpCiB7CiAgICAgSE1FTlUgbWVudSA9IDo6R2V0TWVudShoV25kKTsKIApAQCAtMzE5
LDcgKzI3Nyw3IEBAIHN0YXRpYyB2b2lkIHR1cm5PZmZPdGhlclVzZXJBZ2VudHMoSE1FTlUgbWVu
dSkKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlO
VCBtZW51SUQpCitib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiB7
CiAgICAgaWYgKCFnTWluaUJyb3dzZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5OSw5
NiArMzU3LDYgQEAgc3RhdGljIGJvb2wgVG9nZ2xlTWVudUl0ZW0oSFdORCBoV25kLCBVSU5UIG1l
bnVJRCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0IGludCBkcmFnQmFySGVp
Z2h0ID0gMzA7Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1lc3Nh
Z2UpIHsKLSAgICBjYXNlIFdNX0NPTU1BTkQ6IHsKLSAgICAgICAgaW50IHdtSWQgPSBMT1dPUkQo
d1BhcmFtKTsKLSAgICAgICAgaW50IHdtRXZlbnQgPSBISVdPUkQod1BhcmFtKTsKLSAgICAgICAg
aWYgKHdtSWQgPj0gSURNX0hJU1RPUllfTElOSzAgJiYgd21JZCA8PSBJRE1fSElTVE9SWV9MSU5L
OSkgewotICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWlu
aUJyb3dzZXItPm5hdmlnYXRlVG9IaXN0b3J5KGhXbmQsIHdtSWQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUGFyc2UgdGhlIG1lbnUgc2VsZWN0aW9uczoKLSAg
ICAgICAgc3dpdGNoICh3bUlkKSB7Ci0gICAgICAgIGNhc2UgSURNX0FCT1VUOgotICAgICAgICAg
ICAgRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FCT1VUQk9YKSwgaFduZCwg
QWJvdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0VYSVQ6Ci0gICAg
ICAgICAgICBEZXN0cm95V2luZG93KGhXbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSURNX1BSSU5UOgotICAgICAgICAgICAgUHJpbnRWaWV3KGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9XRUJf
SU5TUEVDVE9SOgotICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKLSAgICAgICAgICAgICAg
ICBnTWluaUJyb3dzZXItPmxhdW5jaEluc3BlY3RvcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURNX0NBQ0hFUzoKLSAgICAgICAgICAgIGlmICghOjpJc1dpbmRvdyhoQ2Fj
aGVXbmQpKSB7Ci0gICAgICAgICAgICAgICAgaENhY2hlV25kID0gQ3JlYXRlRGlhbG9nKGhJbnN0
LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0NBQ0hFUyksIGhXbmQsIENhY2hlcyk7Ci0gICAgICAgICAg
ICAgICAgOjpTaG93V2luZG93KGhDYWNoZVduZCwgU1dfU0hPVyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fSElTVE9SWV9CQUNLV0FSRDoKLSAg
ICAgICAgY2FzZSBJRE1fSElTVE9SWV9GT1JXQVJEOgotICAgICAgICAgICAgaWYgKGdNaW5pQnJv
d3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPm5hdmlnYXRlRm9yd2FyZE9yQmFj
a3dhcmQoaFduZCwgd21JZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1f
VUFfT1RIRVI6Ci0gICAgICAgICAgICBpZiAod21FdmVudCkKLSAgICAgICAgICAgICAgICBUb2dn
bGVNZW51SXRlbShoV25kLCB3bUlkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBEaWFsb2dCb3goaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRERfVVNFUl9BR0VOVCksIGhXbmQs
IEN1c3RvbVVzZXJBZ2VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1f
QUNUVUFMX1NJWkU6Ci0gICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAg
ICAgIGdNaW5pQnJvd3Nlci0+cmVzZXRab29tKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJRE1fWk9PTV9JTjoKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAg
ICAgICAgICAgICAgZ01pbmlCcm93c2VyLT56b29tSW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElETV9aT09NX09VVDoKLSAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIp
Ci0gICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT56b29tT3V0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJRE1fU0hPV19MQVlFUl9UUkVFOgotICAgICAgICAgICAgaWYg
KGdNaW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnNob3dMYXllclRy
ZWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
aWYgKCFUb2dnbGVNZW51SXRlbShoV25kLCB3bUlkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
RGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdNX0RFU1RST1k6Ci0jaWYgVVNF
KENGKQotICAgICAgICBDRlJ1bkxvb3BTdG9wKENGUnVuTG9vcEdldE1haW4oKSk7Ci0jZW5kaWYK
LSAgICAgICAgUG9zdFF1aXRNZXNzYWdlKDApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdN
X1NJWkU6Ci0gICAgICAgIGlmICghZ01pbmlCcm93c2VyIHx8ICFnTWluaUJyb3dzZXItPmhhc1dl
YlZpZXcoKSkKLSAgICAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtKTsKLQotICAgICAgICByZXNpemVTdWJWaWV3cygpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdNX0RQSUNIQU5HRUQ6Ci0gICAgICAgIGlmIChnTWluaUJyb3dzZXIp
Ci0gICAgICAgICAgICBnTWluaUJyb3dzZXItPnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7Ci0g
ICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIExSRVNV
TFQgQ0FMTEJBQ0sgRWRpdFByb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgc3dpdGNoIChtZXNzYWdlKSB7CkBAIC02MDEsNyAr
NDY5LDcgQEAgSU5UX1BUUiBDQUxMQkFDSyBDdXN0b21Vc2VyQWdlbnQoSFdORCBoRGxnLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTQogICAgICAgICAgICAgX2JzdHJfdCBic3Ry
KGJ1ZmZlcik7CiAgICAgICAgICAgICBpZiAoYnN0ci5sZW5ndGgoKSkgewogICAgICAgICAgICAg
ICAgIGdNaW5pQnJvd3Nlci0+c2V0VXNlckFnZW50KGJzdHIpOwotICAgICAgICAgICAgICAgIDo6
UG9zdE1lc3NhZ2UoaE1haW5XbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX0NPTU1BTkQpLCBNQUtF
TFBBUkFNKElETV9VQV9PVEhFUiwgMSksIDApOworICAgICAgICAgICAgICAgIDo6UG9zdE1lc3Nh
Z2UoZ01haW5XaW5kb3ctPmh3bmQoKSwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fQ09NTUFORCksIE1B
S0VMUEFSQU0oSURNX1VBX09USEVSLCAxKSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IApAQCAtNjE2LDcgKzQ4NCw3IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ3VzdG9tVXNlckFnZW50KEhX
TkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0KIAogSFJFU1VMVCBE
aXNwbGF5QXV0aERpYWxvZyhzdGQ6OndzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OndzdHJpbmcmIHBh
c3N3b3JkKQogewotICAgIGF1dG8gcmVzdWx0ID0gRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVT
T1VSQ0UoSUREX0FVVEgpLCBoTWFpblduZCwgQXV0aERpYWxvZ1Byb2MpOworICAgIGF1dG8gcmVz
dWx0ID0gRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FVVEgpLCBnTWFpbldp
bmRvdy0+aHduZCgpLCBBdXRoRGlhbG9nUHJvYyk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBFX0ZBSUw7CiAKQEAgLTY2OSw3ICs1MzcsNyBAQCBzdGF0aWMgdm9pZCBsb2FkVVJM
KEJTVFIgcGFzc2VkVVJMKQogICAgIGlmIChGQUlMRUQoZ01pbmlCcm93c2VyLT5sb2FkVVJMKHBh
c3NlZFVSTCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZXRGb2N1cyhnVmlld1dpbmRvdyk7
CisgICAgU2V0Rm9jdXMoZ01pbmlCcm93c2VyLT5od25kKCkpOwogfQogCiBzdGF0aWMgdm9pZCBz
ZXRXaW5kb3dUZXh0KEhXTkQgZGlhbG9nLCBVSU5UIGZpZWxkLCBfYnN0cl90IHZhbHVlKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZmM2ZGZlOThhOWFkOTkx
NDJiMjJjNjI5NTk5Mzk5YzcxMDBlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci93aW4vTWFpbldpbmRvdy5jcHAKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInN0ZGFmeC5oIgor
I2luY2x1ZGUgIk1haW5XaW5kb3cuaCIKKyNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1
ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7Cit9CisKK3N0YXRpYyBjb25zdGV4
cHIgaW50IGNvbnRyb2xCdXR0b25XaWR0aCA9IDI0OworCitleHRlcm4gTWFpbldpbmRvdyogZ01h
aW5XaW5kb3c7CitleHRlcm4gTWluaUJyb3dzZXIqIGdNaW5pQnJvd3NlcjsKK2V4dGVybiBXTkRQ
Uk9DIERlZkVkaXRQcm9jOworZXh0ZXJuIFdORFBST0MgRGVmQnV0dG9uUHJvYzsKK2V4dGVybiBI
SU5TVEFOQ0UgaEluc3Q7CitleHRlcm4gSFdORCBoQ2FjaGVXbmQ7CisKK0xSRVNVTFQgQ0FMTEJB
Q0sgRWRpdFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworTFJFU1VMVCBDQUxMQkFD
SyBCYWNrQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CitMUkVTVUxUIENB
TExCQUNLIEZvcndhcmRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xS
RVNVTFQgQ0FMTEJBQ0sgUmVsb2FkQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7CitJTlRfUFRSIENBTExCQUNLIEFib3V0KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
K0lOVF9QVFIgQ0FMTEJBQ0sgQ3VzdG9tVXNlckFnZW50KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKK0lOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFN
KTsKK0lOVF9QVFIgQ0FMTEJBQ0sgQXV0aERpYWxvZ1Byb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOwordm9pZCBQcmludFZpZXcoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pOworYm9vbCBUb2dnbGVNZW51SXRlbShIV05EIGhXbmQsIFVJ
TlQgbWVudUlEKTsKKworc3RkOjp3c3RyaW5nIE1haW5XaW5kb3c6OnNfd2luZG93Q2xhc3M7CisK
K3N0YXRpYyBzdGQ6OndzdHJpbmcgbG9hZFN0cmluZyhpbnQgaWQpCit7CisgICAgY29uc3RleHBy
IHNpemVfdCBsZW5ndGggPSAxMDA7CisgICAgd2NoYXJfdCBidWZmW2xlbmd0aF07CisgICAgTG9h
ZFN0cmluZyhoSW5zdCwgaWQsIGJ1ZmYsIGxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmY7Cit9CisK
K3ZvaWQgTWFpbldpbmRvdzo6cmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKQorewor
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKGluaXRpYWxpemVk
KQorICAgICAgICByZXR1cm47CisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgc193aW5k
b3dDbGFzcyA9IGxvYWRTdHJpbmcoSURDX01JTklCUk9XU0VSKTsKKworICAgIFdORENMQVNTRVgg
d2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0
eWxlICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7CisgICAgd2NleC5scGZuV25k
UHJvYyAgICA9IFduZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CisgICAgd2Nl
eC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGhJbnN0YW5j
ZTsKKyAgICB3Y2V4LmhJY29uICAgICAgICAgID0gTG9hZEljb24oaEluc3RhbmNlLCBNQUtFSU5U
UkVTT1VSQ0UoSURJX01JTklCUk9XU0VSKSk7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExv
YWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKKyAg
ICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19NSU5JQlJPV1NFUik7
CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IHNfd2luZG93Q2xhc3MuY19zdHIoKTsKKyAgICB3
Y2V4LmhJY29uU20gICAgICAgID0gTG9hZEljb24od2NleC5oSW5zdGFuY2UsIE1BS0VJTlRSRVNP
VVJDRShJRElfU01BTEwpKTsKKworICAgIFJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK2Jv
b2wgTWFpbldpbmRvdzo6aW5pdChISU5TVEFOQ0UgaEluc3RhbmNlLCBib29sIHVzZXNMYXllcmVk
V2ViVmlldywgYm9vbCBwYWdlTG9hZFRlc3RpbmcpCit7CisgICAgcmVnaXN0ZXJDbGFzcyhoSW5z
dGFuY2UpOworCisgICAgYXV0byB0aXRsZSA9IGxvYWRTdHJpbmcoSURTX0FQUF9USVRMRSk7CisK
KyAgICBtX2hNYWluV25kID0gQ3JlYXRlV2luZG93KHNfd2luZG93Q2xhc3MuY19zdHIoKSwgdGl0
bGUuY19zdHIoKSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICAgICAgQ1dfVVNFREVGQVVMVCwg
MCwgQ1dfVVNFREVGQVVMVCwgMCwgMCwgMCwgaEluc3RhbmNlLCAwKTsKKworICAgIGlmICghbV9o
TWFpblduZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhudWxscHRyKTsKKyAgICBtX2hC
YWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI8IiwgV1NfQ0hJTEQgfCBX
U19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAsIDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0YW5j
ZSwgMCk7CisgICAgbV9oRm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIs
IEwiPiIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIHNjYWxlRmFjdG9yICogY29u
dHJvbEJ1dHRvbldpZHRoLCAwLCAwLCAwLCBtX2hNYWluV25kLCAwLCBoSW5zdGFuY2UsIDApOwor
ICAgIG1faFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElMRCB8IFdT
X1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIHNjYWxlRmFj
dG9yICogY29udHJvbEJ1dHRvbldpZHRoICogMiwgMCwgMCwgMCwgbV9oTWFpblduZCwgMCwgaElu
c3RhbmNlLCAwKTsKKworICAgIERlZkVkaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9D
PihHZXRXaW5kb3dMb25nUHRyKG1faFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgRGVm
QnV0dG9uUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0ciht
X2hCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0MpKTsKKyAgICBTZXRXaW5kb3dMb25nUHRyKG1f
aFVSTEJhclduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihFZGl0
UHJvYykpOworICAgIFNldFdpbmRvd0xvbmdQdHIobV9oQmFja0J1dHRvblduZCwgR1dMUF9XTkRQ
Uk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOworICAgIFNl
dFdpbmRvd0xvbmdQdHIobV9oRm9yd2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVy
cHJldF9jYXN0PExPTkdfUFRSPihGb3J3YXJkQnV0dG9uUHJvYykpOworCisgICAgU2V0Rm9jdXMo
bV9oVVJMQmFyV25kKTsKKworICAgIG1fYnJvd3NlcldpbmRvdyA9IHN0ZDo6bWFrZV91bmlxdWU8
TWluaUJyb3dzZXI+KG1faE1haW5XbmQsIG1faFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3
LCBwYWdlTG9hZFRlc3RpbmcpOworICAgIGlmICghbV9icm93c2VyV2luZG93KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgSFJFU1VMVCBociA9IG1fYnJvd3NlcldpbmRvdy0+aW5pdCgpOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXNpemVT
dWJWaWV3cygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1haW5XaW5kb3c6OnJlc2l6
ZVN1YlZpZXdzKCkKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNj
YWxlRmFjdG9yRm9yV2luZG93KG1faE1haW5XbmQpOworCisgICAgUkVDVCByY0NsaWVudDsKKyAg
ICBHZXRDbGllbnRSZWN0KG1faE1haW5XbmQsICZyY0NsaWVudCk7CisKKyAgICBjb25zdGV4cHIg
aW50IHVybEJhckhlaWdodCA9IDI0OworICAgIGludCBoZWlnaHQgPSBzY2FsZUZhY3RvciAqIHVy
bEJhckhlaWdodDsKKyAgICBpbnQgd2lkdGggPSBzY2FsZUZhY3RvciAqIGNvbnRyb2xCdXR0b25X
aWR0aDsKKworICAgIE1vdmVXaW5kb3cobV9oQmFja0J1dHRvblduZCwgMCwgMCwgd2lkdGgsIGhl
aWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhtX2hGb3J3YXJkQnV0dG9uV25kLCB3aWR0aCwg
MCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhtX2hVUkxCYXJXbmQsIHdp
ZHRoICogMiwgMCwgcmNDbGllbnQucmlnaHQsIGhlaWdodCwgVFJVRSk7CisKKyAgICA6OlNlbmRN
ZXNzYWdlKG1faFVSTEJhclduZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCksIHJlaW50
ZXJwcmV0X2Nhc3Q8V1BBUkFNPihtX2Jyb3dzZXJXaW5kb3ctPnVybEJhckZvbnQoKSksIFRSVUUp
OworCisgICAgaWYgKG1fYnJvd3NlcldpbmRvdy0+dXNlc0xheWVyZWRXZWJWaWV3KCkgfHwgIW1f
YnJvd3NlcldpbmRvdy0+aHduZCgpKQorICAgICAgICByZXR1cm47CisgICAgTW92ZVdpbmRvdyht
X2Jyb3dzZXJXaW5kb3ctPmh3bmQoKSwgMCwgaGVpZ2h0LCByY0NsaWVudC5yaWdodCwgcmNDbGll
bnQuYm90dG9tIC0gaGVpZ2h0LCBUUlVFKTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBNYWluV2lu
ZG93OjpXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fQ09NTUFO
RDogeworICAgICAgICBpbnQgd21JZCA9IExPV09SRCh3UGFyYW0pOworICAgICAgICBpbnQgd21F
dmVudCA9IEhJV09SRCh3UGFyYW0pOworICAgICAgICBpZiAod21JZCA+PSBJRE1fSElTVE9SWV9M
SU5LMCAmJiB3bUlkIDw9IElETV9ISVNUT1JZX0xJTks5KSB7CisgICAgICAgICAgICBpZiAoZ01p
bmlCcm93c2VyKQorICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+bmF2aWdhdGVUb0hpc3Rv
cnkoaFduZCwgd21JZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAv
LyBQYXJzZSB0aGUgbWVudSBzZWxlY3Rpb25zOgorICAgICAgICBzd2l0Y2ggKHdtSWQpIHsKKyAg
ICAgICAgY2FzZSBJRE1fQUJPVVQ6CisgICAgICAgICAgICBEaWFsb2dCb3goaEluc3QsIE1BS0VJ
TlRSRVNPVVJDRShJRERfQUJPVVRCT1gpLCBoV25kLCBBYm91dCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJRE1fRVhJVDoKKyAgICAgICAgICAgIERlc3Ryb3lXaW5kb3coaFdu
ZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fUFJJTlQ6CisgICAgICAg
ICAgICBQcmludFZpZXcoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1dFQl9JTlNQRUNUT1I6CisgICAgICAgICAgICBp
ZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+bGF1bmNoSW5z
cGVjdG9yKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fQ0FDSEVTOgor
ICAgICAgICAgICAgaWYgKCE6OklzV2luZG93KGhDYWNoZVduZCkpIHsKKyAgICAgICAgICAgICAg
ICBoQ2FjaGVXbmQgPSBDcmVhdGVEaWFsb2coaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRERfQ0FD
SEVTKSwgaFduZCwgQ2FjaGVzKTsKKyAgICAgICAgICAgICAgICA6OlNob3dXaW5kb3coaENhY2hl
V25kLCBTV19TSE9XKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIElETV9ISVNUT1JZX0JBQ0tXQVJEOgorICAgICAgICBjYXNlIElETV9ISVNUT1JZX0ZP
UldBUkQ6CisgICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAgICAgICAgIGdN
aW5pQnJvd3Nlci0+bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChoV25kLCB3bUlkKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9VQV9PVEhFUjoKKyAgICAgICAgICAgIGlm
ICh3bUV2ZW50KQorICAgICAgICAgICAgICAgIFRvZ2dsZU1lbnVJdGVtKGhXbmQsIHdtSWQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIERpYWxvZ0JveChoSW5zdCwgTUFLRUlO
VFJFU09VUkNFKElERF9VU0VSX0FHRU5UKSwgaFduZCwgQ3VzdG9tVXNlckFnZW50KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9BQ1RVQUxfU0laRToKKyAgICAgICAgICAg
IGlmIChnTWluaUJyb3dzZXIpCisgICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5yZXNldFpv
b20oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9aT09NX0lOOgorICAg
ICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXIt
Pnpvb21JbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURNX1pPT01fT1VU
OgorICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgICAgICBnTWluaUJy
b3dzZXItPnpvb21PdXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9T
SE9XX0xBWUVSX1RSRUU6CisgICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAg
ICAgICAgIGdNaW5pQnJvd3Nlci0+c2hvd0xheWVyVHJlZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIVRvZ2dsZU1lbnVJdGVtKGhXbmQs
IHdtSWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fREVTVFJPWToKKyNpZiBVU0UoQ0YpCisgICAgICAgIENGUnVuTG9vcFN0
b3AoQ0ZSdW5Mb29wR2V0TWFpbigpKTsKKyNlbmRpZgorICAgICAgICBQb3N0UXVpdE1lc3NhZ2Uo
MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgaWYgKCFnTWlu
aUJyb3dzZXIgfHwgIWdNaW5pQnJvd3Nlci0+aGFzV2ViVmlldygpKQorICAgICAgICAgICAgcmV0
dXJuIERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworCisgICAg
ICAgIGdNYWluV2luZG93LT5yZXNpemVTdWJWaWV3cygpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdNX0RQSUNIQU5HRUQ6CisgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCisgICAgICAgICAg
ICBnTWluaUJyb3dzZXItPnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVy
biBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5X
aW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNDIzZGE3NTA1ZjMwM2ZjZDE5ZDdjMWFiODExY2EyNDMyN2Vm
MDAxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cu
aApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUg
PHN0cmluZz4KKworY2xhc3MgTWluaUJyb3dzZXI7CisKK2NsYXNzIE1haW5XaW5kb3cgeworcHVi
bGljOgorICAgIGJvb2wgaW5pdChISU5TVEFOQ0UgaEluc3RhbmNlLCBib29sIHVzZXNMYXllcmVk
V2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2FkVGVzdGluZyA9IGZhbHNlKTsKKworICAgIHZv
aWQgcmVzaXplU3ViVmlld3MoKTsKKyAgICBIV05EIGh3bmQoKSBjb25zdCB7IHJldHVybiBtX2hN
YWluV25kOyB9CisgICAgTWluaUJyb3dzZXIqIGJyb3dzZXJXaW5kb3coKSBjb25zdCB7IHJldHVy
biBtX2Jyb3dzZXJXaW5kb3cuZ2V0KCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIExS
RVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKTsKKyAgICBzdGF0
aWMgc3RkOjp3c3RyaW5nIHNfd2luZG93Q2xhc3M7CisKKyAgICBIV05EIG1faE1haW5XbmQgeyBu
dWxscHRyIH07CisgICAgSFdORCBtX2hVUkxCYXJXbmQgeyBudWxscHRyIH07CisgICAgSFdORCBt
X2hCYWNrQnV0dG9uV25kIHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9oRm9yd2FyZEJ1dHRvbldu
ZCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWluaUJyb3dzZXI+IG1fYnJvd3Nl
cldpbmRvdzsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5j
cHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAKaW5kZXggNzgxZDU0YTIzMWVh
NzY1MmQ4NGYxZGU2OGQ5ZDZkNDUxNjU1NDExMC4uY2Q5NzFmMGFhMTdhZjY3YzIyN2ZiMTViOTJi
OWQ3MGYxZGQ2NWQxZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4u
Y3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcApAQCAtMzIsMTAgKzMy
LDYgQEAKICNpbmNsdWRlICJNaW5pQnJvd3NlckxpYlJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ29t
bW9uLmNwcCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JG
b3JXaW5kb3coSFdORCk7Ci19Ci0KIGludCBXSU5BUEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0Ug
aEluc3RhbmNlLCBfSW5fb3B0XyBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgX0luXyBMUFdTVFIg
bHBzdHJDbWRMaW5lLCBfSW5fIGludCBuQ21kU2hvdykKIHsKICNpZmRlZiBfQ1JUREJHX01BUF9B
TExPQwpAQCAtNTksMTEgKzU1LDYgQEAgaW50IFdJTkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5D
RSBoSW5zdGFuY2UsIF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLAogCiAgICAgcGFy
c2VDb21tYW5kTGluZSh1c2VzTGF5ZXJlZFdlYlZpZXcsIHVzZUZ1bGxEZXNrdG9wLCBwYWdlTG9h
ZFRlc3RpbmcsIHJlcXVlc3RlZFVSTCk7CiAKLSAgICAvLyBJbml0aWFsaXplIGdsb2JhbCBzdHJp
bmdzCi0gICAgTG9hZFN0cmluZyhoSW5zdCwgSURTX0FQUF9USVRMRSwgc3pUaXRsZSwgTUFYX0xP
QURTVFJJTkcpOwotICAgIExvYWRTdHJpbmcoaEluc3QsIElEQ19NSU5JQlJPV1NFUiwgc3pXaW5k
b3dDbGFzcywgTUFYX0xPQURTVFJJTkcpOwotICAgIE15UmVnaXN0ZXJDbGFzcyhoSW5zdCk7Ci0K
ICAgICBpZiAodXNlRnVsbERlc2t0b3ApCiAgICAgICAgIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1l
KCk7CiAKQEAgLTcyLDQyICs2MywxMyBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RB
TkNFIGhJbnN0YW5jZSwgX0luX29wdF8gSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsCiAKICAgICA6
OlNldFByb2Nlc3NEUElBd2FyZSgpOwogCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBXZWJDb3Jl
OjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhudWxscHRyKTsKLQotICAgIGhNYWluV25kID0g
Q3JlYXRlV2luZG93KHN6V2luZG93Q2xhc3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQRURXSU5ET1cs
Ci0gICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0
LCAwKTsKLQotICAgIGlmICghaE1haW5XbmQpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAg
IGhCYWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI8IiwgV1NfQ0hJTEQg
fCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwg
MCk7Ci0gICAgaEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4i
LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xC
VVRUT05fV0lEVEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgaFVSTEJh
clduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBX
U19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIHNjYWxlRmFjdG9yICogQ09OVFJP
TEJVVFRPTl9XSURUSCAqIDIsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0KLSAg
ICBTaG93V2luZG93KGhNYWluV25kLCBuQ21kU2hvdyk7Ci0gICAgVXBkYXRlV2luZG93KGhNYWlu
V25kKTsKLQotICAgIERlZkVkaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRX
aW5kb3dMb25nUHRyKGhVUkxCYXJXbmQsIEdXTFBfV05EUFJPQykpOwotICAgIERlZkJ1dHRvblBy
b2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KEdldFdpbmRvd0xvbmdQdHIoaEJhY2tCdXR0
b25XbmQsIEdXTFBfV05EUFJPQykpOwotICAgIFNldFdpbmRvd0xvbmdQdHIoaFVSTEJhclduZCwg
R1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihFZGl0UHJvYykpOwotICAg
IFNldFdpbmRvd0xvbmdQdHIoaEJhY2tCdXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnBy
ZXRfY2FzdDxMT05HX1BUUj4oQmFja0J1dHRvblByb2MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRy
KGhGb3J3YXJkQnV0dG9uV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19Q
VFI+KEZvcndhcmRCdXR0b25Qcm9jKSk7Ci0KLSAgICBTZXRGb2N1cyhoVVJMQmFyV25kKTsKLQot
ICAgIGdNaW5pQnJvd3NlciA9IG5ldyBNaW5pQnJvd3NlcihoTWFpblduZCwgaFVSTEJhclduZCwg
dXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRlc3RpbmcpOwotICAgIGlmICghZ01pbmlCcm93
c2VyKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgSFJFU1VMVCBociA9IGdNaW5pQnJvd3Nlci0+
aW5pdCgpOworICAgIGdNYWluV2luZG93ID0gbmV3IE1haW5XaW5kb3coKTsKKyAgICBIUkVTVUxU
IGhyID0gZ01haW5XaW5kb3ctPmluaXQoaEluc3QsIHVzZXNMYXllcmVkV2ViVmlldywgcGFnZUxv
YWRUZXN0aW5nKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgZ290byBleGl0OwogCi0g
ICAgZ1ZpZXdXaW5kb3cgPSBnTWluaUJyb3dzZXItPmh3bmQoKTsKLQotICAgIHJlc2l6ZVN1YlZp
ZXdzKCk7Ci0KLSAgICBTaG93V2luZG93KGdWaWV3V2luZG93LCBuQ21kU2hvdyk7Ci0gICAgVXBk
YXRlV2luZG93KGdWaWV3V2luZG93KTsKKyAgICBnTWluaUJyb3dzZXIgPSBnTWFpbldpbmRvdy0+
YnJvd3NlcldpbmRvdygpOworICAgIFNob3dXaW5kb3coZ01haW5XaW5kb3ctPmh3bmQoKSwgbkNt
ZFNob3cpOwogCiAgICAgaEFjY2VsVGFibGUgPSBMb2FkQWNjZWxlcmF0b3JzKGhJbnN0LCBNQUtF
SU5UUkVTT1VSQ0UoSURDX01JTklCUk9XU0VSKSk7CiAKQEAgLTEzOSwyOCArMTAxLDUgQEAgZXhp
dDoKICAgICAvLyBTaHV0IGRvd24gQ09NLgogICAgIE9sZVVuaW5pdGlhbGl6ZSgpOwogCi0gICAg
ZGVsZXRlIGdNaW5pQnJvd3NlcjsKLSAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Piht
c2cud1BhcmFtKTsKIH0KLQotQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5j
ZSkKLXsKLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0KLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihX
TkRDTEFTU0VYKTsKLQotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19IUkVEUkFXIHwgQ1Nf
VlJFRFJBVzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gV25kUHJvYzsKLSAgICB3Y2V4LmNi
Q2xzRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4
LmhJbnN0YW5jZSAgICAgID0gaEluc3RhbmNlOwotICAgIHdjZXguaEljb24gICAgICAgICAgPSBM
b2FkSWNvbihoSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfTUlOSUJST1dTRVIpKTsKLSAg
ICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdj
ZXguaGJyQmFja2dyb3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSBNQUtFSU5U
UkVTT1VSQ0UoSURDX01JTklCUk9XU0VSKTsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gc3pX
aW5kb3dDbGFzczsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gTG9hZEljb24od2NleC5oSW5z
dGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfU01BTEwpKTsKLQotICAgIHJldHVybiBSZWdpc3Rl
ckNsYXNzRXgoJndjZXgpOwotfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>