<?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>211883</bug_id>
          
          <creation_ts>2020-05-13 23:17:22 -0700</creation_ts>
          <short_desc>[WinCairo][WK2] Use GraphicsLayerTextureMapper for Accelerated Compositing mode</short_desc>
          <delta_ts>2020-05-26 19:10:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186364</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1652529</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-13 23:17:22 -0700</bug_when>
    <thetext>[WinCairo][WK2] Use GraphicsLayerTextureMapper for Accelerated Compositing mode

WinCairo WK1 is also using GraphicsLayerTextureMapper for AC mode.

I experimented CoordinatedGraphicsLayer for WinCairo WK2. But, it has a problem (Bug 186364 Comment 45).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652532</commentid>
    <comment_count>1</comment_count>
      <attachid>399337</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-13 23:18:13 -0700</bug_when>
    <thetext>Created attachment 399337
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652538</commentid>
    <comment_count>2</comment_count>
      <attachid>399339</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-14 00:42:56 -0700</bug_when>
    <thetext>Created attachment 399339
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652792</commentid>
    <comment_count>3</comment_count>
      <attachid>399409</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-14 14:28:23 -0700</bug_when>
    <thetext>Created attachment 399409
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652945</commentid>
    <comment_count>4</comment_count>
      <attachid>399455</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-14 22:08:19 -0700</bug_when>
    <thetext>Created attachment 399455
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653905</commentid>
    <comment_count>5</comment_count>
      <attachid>399710</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-18 22:20:33 -0700</bug_when>
    <thetext>Created attachment 399710
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654834</commentid>
    <comment_count>6</comment_count>
      <attachid>399942</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-21 01:15:55 -0700</bug_when>
    <thetext>Created attachment 399942
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655068</commentid>
    <comment_count>7</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-21 14:07:58 -0700</bug_when>
    <thetext>* createDisplayRefreshMonitor should be implemented
* Use DisplayRefreshMonitor instead of Timer for layer flushing
* WebKitTestRunner can&apos;t capture the window for pixel dump
* Resizing the browser window cuases rendering gliches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655773</commentid>
    <comment_count>8</comment_count>
      <attachid>400178</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-24 14:07:26 -0700</bug_when>
    <thetext>Created attachment 400178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656150</commentid>
    <comment_count>9</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-26 13:31:24 -0700</bug_when>
    <thetext>Committed r262158: &lt;https://trac.webkit.org/changeset/262158&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656152</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-26 13:32:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/63638725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656243</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-26 18:34:55 -0700</bug_when>
    <thetext>Oops, clang-cl can&apos;t compile.

&gt; [4732/5247] Building CXX object Source\WebKit\CMakeFiles\WebKit.dir\WebProcess\WebPage\CoordinatedGraphics\DrawingAreaCoordinatedGraphics.cpp.obj
&gt; FAILED: Source/WebKit/CMakeFiles/WebKit.dir/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp.obj 
&gt; C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP -DANGLE_ENABLE_D3D11 -DANGLE_ENABLE_D3D9 -DANGLE_ENABLE_ESSL -DANGLE_ENABLE_HLSL -DBUILDING_WEBKIT -DBUILDING_WITH_CMAKE=1 -DBUILDING_WebKit -DEGL_EGLEXT_PROTOTYPES -DEGL_EGL_PROTOTYPES=1 -DGL_API=&quot;&quot; -DGL_APICALL=&quot;&quot; -DGL_GLES_PROTOTYPES=1 -DGL_GLEXT_PROTOTYPES -DHAVE_CONFIG_H=1 -DNOCRYPT -DNOMINMAX -DSTATICALLY_LINKED_WITH_PAL -DSTATICALLY_LINKED_WITH_PAL=1 -DSTATICALLY_LINKED_WITH_WebCore -DUNICODE -DUSE_CAIRO=1 -DUSE_CURL=1 -DWINVER=0x601 -DWTF_PLATFORM_WIN_CAIRO=1 -DWebKit_EXPORTS -D_CRT_SECURE_NO_WARNINGS -D_HAS_EXCEPTIONS=0 -D_UNICODE -D_WIN32_WINNT=0x601 -D_WINDOWS -D_WINSOCKAPI_=&quot;&quot; -IWebCore\PrivateHeaders -IWebKit\Headers -IWebKit\DerivedSources -IWebKit\DerivedSources\include -I..\..\Source\WebKit -I..\..\Source\WebKit\GPUProcess -I..\..\Source\WebKit\GPUProcess\graphics -I..\..\Source\WebKit\GPUProcess\media -I..\..\Source\WebKit\GPUProcess\webrtc -I..\..\Source\WebKit\NetworkProcess -I..\..\Source\WebKit\NetworkProcess\Classifier -I..\..\Source\WebKit\NetworkProcess\Cookies -I..\..\Source\WebKit\NetworkProcess\CustomProtocols -I..\..\Source\WebKit\NetworkProcess\Downloads -I..\..\Source\WebKit\NetworkProcess\FileAPI -I..\..\Source\WebKit\NetworkProcess\IndexedDB -I..\..\Source\WebKit\NetworkProcess\ServiceWorker -I..\..\Source\WebKit\NetworkProcess\WebStorage -I..\..\Source\WebKit\NetworkProcess\cache -I..\..\Source\WebKit\NetworkProcess\watchos -I..\..\Source\WebKit\NetworkProcess\webrtc -I..\..\Source\WebKit\Platform -I..\..\Source\WebKit\Platform\IPC -I..\..\Source\WebKit\PluginProcess -I..\..\Source\WebKit\Shared -I..\..\Source\WebKit\Shared\API -I..\..\Source\WebKit\Shared\API\c -I..\..\Source\WebKit\Shared\ApplePay -I..\..\Source\WebKit\Shared\Authentication -I..\..\Source\WebKit\Shared\CoreIPCSupport -I..\..\Source\WebKit\Shared\Databases -I..\..\Source\WebKit\Shared\Databases\IndexedDB -I..\..\Source\WebKit\Shared\FileAPI -I..\..\Source\WebKit\Shared\Gamepad -I..\..\Source\WebKit\Shared\Plugins -I..\..\Source\WebKit\Shared\Plugins\Netscape -I..\..\Source\WebKit\Shared\Plugins\Netscape\x11 -I..\..\Source\WebKit\Shared\RemoteLayerTree -I..\..\Source\WebKit\Shared\WebsiteData -I..\..\Source\WebKit\UIProcess -I..\..\Source\WebKit\UIProcess\API -I..\..\Source\WebKit\UIProcess\API\C -I..\..\Source\WebKit\UIProcess\API\cpp -I..\..\Source\WebKit\UIProcess\Authentication -I..\..\Source\WebKit\UIProcess\Automation -I..\..\Source\WebKit\UIProcess\Downloads -I..\..\Source\WebKit\UIProcess\Gamepad -I..\..\Source\WebKit\UIProcess\GPU -I..\..\Source\WebKit\UIProcess\Inspector -I..\..\Source\WebKit\UIProcess\Inspector\Agents -I..\..\Source\WebKit\UIProcess\Launcher -I..\..\Source\WebKit\UIProcess\Network -I..\..\Source\WebKit\UIProcess\Network\CustomProtocols -I..\..\Source\WebKit\UIProcess\Notifications -I..\..\Source\WebKit\UIProcess\Plugins -I..\..\Source\WebKit\UIProcess\RemoteLayerTree -I..\..\Source\WebKit\UIProcess\UserContent -I..\..\Source\WebKit\UIProcess\WebAuthentication -I..\..\Source\WebKit\UIProcess\WebAuthentication\Mock -I..\..\Source\WebKit\UIProcess\WebsiteData -I..\..\Source\WebKit\WebProcess -I..\..\Source\WebKit\WebProcess\ApplePay -I..\..\Source\WebKit\WebProcess\ApplicationCache -I..\..\Source\WebKit\WebProcess\Automation -I..\..\Source\WebKit\WebProcess\Cache -I..\..\Source\WebKit\WebProcess\Databases -I..\..\Source\WebKit\WebProcess\Databases\IndexedDB -I..\..\Source\WebKit\WebProcess\FileAPI -I..\..\Source\WebKit\WebProcess\FullScreen -I..\..\Source\WebKit\WebProcess\Gamepad -I..\..\Source\WebKit\WebProcess\Geolocation -I..\..\Source\WebKit\WebProcess\GPU -I..\..\Source\WebKit\WebProcess\GPU\graphics -I..\..\Source\WebKit\WebProcess\GPU\media -I..\..\Source\WebKit\WebProcess\GPU\webrtc -I..\..\Source\WebKit\WebProcess\IconDatabase -I..\..\Source\WebKit\WebProcess\InjectedBundle -I..\..\Source\WebKit\WebProcess\InjectedBundle\API -I..\..\Source\WebKit\WebProcess\InjectedBundle\API\c -I..\..\Source\WebKit\WebProcess\InjectedBundle\DOM -I..\..\Source\WebKit\WebProcess\Inspector -I..\..\Source\WebKit\WebProcess\Launching -I..\..\Source\WebKit\WebProcess\MediaCache -I..\..\Source\WebKit\WebProcess\MediaStream -I..\..\Source\WebKit\WebProcess\Network -I..\..\Source\WebKit\WebProcess\Network\webrtc -I..\..\Source\WebKit\WebProcess\Notifications -I..\..\Source\WebKit\WebProcess\OriginData -I..\..\Source\WebKit\WebProcess\Plugins -I..\..\Source\WebKit\WebProcess\Plugins\Netscape -I..\..\Source\WebKit\WebProcess\ResourceCache -I..\..\Source\WebKit\WebProcess\Storage -I..\..\Source\WebKit\WebProcess\UserContent -I..\..\Source\WebKit\WebProcess\WebCoreSupport -I..\..\Source\WebKit\WebProcess\WebPage -I..\..\Source\WebKit\WebProcess\WebPage\RemoteLayerTree -I..\..\Source\WebKit\WebProcess\WebStorage -I..\..\Source -I..\..\WebKitLibraries -I..\..\Source\WebKit\Platform\classifier -I..\..\Source\WebKit\Platform\generic -I..\..\Source\WebKit\PluginProcess\win -I..\..\Source\WebKit\Shared\API\c\win -I..\..\Source\WebKit\Shared\CoordinatedGraphics -I..\..\Source\WebKit\Shared\CoordinatedGraphics\threadedcompositor -I..\..\Source\WebKit\Shared\Plugins\win -I..\..\Source\WebKit\Shared\win -I..\..\Source\WebKit\UIProcess\API\C\cairo -I..\..\Source\WebKit\UIProcess\API\C\curl -I..\..\Source\WebKit\UIProcess\API\C\win -I..\..\Source\WebKit\UIProcess\API\cpp\win -I..\..\Source\WebKit\UIProcess\API\win -I..\..\Source\WebKit\UIProcess\CoordinatedGraphics -I..\..\Source\WebKit\UIProcess\Inspector\socket -I..\..\Source\WebKit\UIProcess\Inspector\win -I..\..\Source\WebKit\UIProcess\Plugins\win -I..\..\Source\WebKit\UIProcess\win -I..\..\Source\WebKit\WebProcess\InjectedBundle\API\win -I..\..\Source\WebKit\WebProcess\InjectedBundle\API\win\DOM -I..\..\Source\WebKit\WebProcess\Inspector\win -I..\..\Source\WebKit\WebProcess\WebCoreSupport\win -I..\..\Source\WebKit\WebProcess\WebPage\CoordinatedGraphics -I..\..\Source\WebKit\WebProcess\WebPage\win -I..\..\Source\WebKit\win -I..\..\Source\WebKit\NetworkProcess\curl -I..\..\Source\WebKit\WebProcess\WebCoreSupport\curl -I..\..\Source\WebKit\UIProcess\socket -I. -IDerivedSources\ForwardingHeaders -IJavaScriptCore\Headers -IJavaScriptCore\PrivateHeaders -IWTF\Headers -IPAL\Headers -I..\include\private -IANGLE\Headers -I..\..\WebKitLibraries\win\include -I..\..\WebKitLibraries\win\include\cairo /W4 -fdiagnostics-color=always -fcolor-diagnostics -Wno-noexcept-type -Wno-parentheses-equality -Qunused-arguments -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align -Wno-unknown-argument -Wno-nonportable-include-path -Wno-unknown-pragmas -Wno-macro-redefined -Wno-undef /DWIN32 /D_WINDOWS  /GR- /EHsc- -fno-strict-aliasing /MD /O2 /Ob2 /DNDEBUG   /wd4018 /wd4068 /wd4099 /wd4100 /wd4127 /wd4138 /wd4146 /wd4180 /wd4189 /wd4201 /wd4206 /wd4244 /wd4251 /wd4267 /wd4275 /wd4288 /wd4291 /wd4305 /wd4309 /wd4344 /wd4355 /wd4389 /wd4396 /wd4456 /wd4457 /wd4458 /wd4459 /wd4481 /wd4503 /wd4505 /wd4510 /wd4512 /wd4530 /wd4610 /wd4611 /wd4646 /wd4702 /wd4706 /wd4722 /wd4800 /wd4819 /wd4951 /wd4952 /wd4996 /wd6011 /wd6031 /wd6211 /wd6246 /wd6255 /wd6387 /wd4091 /Zi /GS /EHa- /EHc- /EHs- /fp:except- /analyze- /bigobj /utf-8 /validate-charset /Oy- -fmsc-version=1911 -Wno-unused-parameter -std:c++17 /showIncludes /FoSource\WebKit\CMakeFiles\WebKit.dir\WebProcess\WebPage\CoordinatedGraphics\DrawingAreaCoordinatedGraphics.cpp.obj /FdSource\WebKit\CMakeFiles\WebKit.dir\ -c ..\..\Source\WebKit\WebProcess\WebPage\CoordinatedGraphics\DrawingAreaCoordinatedGraphics.cpp
&gt; In file included from ..\..\Source\WebKit\WebProcess\WebPage\CoordinatedGraphics\DrawingAreaCoordinatedGraphics.cpp:28:
&gt; In file included from ..\..\Source\WebKit\config.h:42:
&gt; In file included from WTF\Headers\wtf/FastMalloc.h:26:
&gt; In file included from WTF\Headers\wtf/StdLibExtras.h:30:
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.25.28610\include\memory(1757,27): error: invalid application of &apos;sizeof&apos; to an incomplete type &apos;WebCore::TextureMapper&apos;
&gt;         static_assert(0 &lt; sizeof(_Ty), &quot;can&apos;t delete an incomplete type&quot;);
&gt;                           ^~~~~~~~~~~
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.25.28610\include\memory(1873,13): note: in instantiation of member function &apos;std::default_delete&lt;WebCore::TextureMapper&gt;::operator()&apos; requested here
&gt;             _Mypair._Get_first()(_Mypair._Myval2);
&gt;             ^
&gt; ..\..\Source\WebKit\WebProcess\WebPage\CoordinatedGraphics/LayerTreeHostTextureMapper.h(54,7): note: in instantiation of member function &apos;std::unique_ptr&lt;WebCore::TextureMapper, std::default_delete&lt;WebCore::TextureMapper&gt; &gt;::~unique_ptr&apos; requested here
&gt; class LayerTreeHost : public WebCore::GraphicsLayerClient {
&gt;       ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.25.28610\include\memory(1873,13): note: in instantiation of member function &apos;std::default_delete&lt;WebKit::LayerTreeHost&gt;::operator()&apos; requested here
&gt;             _Mypair._Get_first()(_Mypair._Myval2);
&gt;             ^
&gt; ..\..\Source\WebKit\WebProcess\WebPage\CoordinatedGraphics\DrawingAreaCoordinatedGraphics.cpp(59,33): note: in instantiation of member function &apos;std::unique_ptr&lt;WebKit::LayerTreeHost, std::default_delete&lt;WebKit::LayerTreeHost&gt; &gt;::~unique_ptr&apos; requested here
&gt; DrawingAreaCoordinatedGraphics::DrawingAreaCoordinatedGraphics(WebPage&amp; webPage, const WebPageCreationParameters&amp; parameters)
&gt;                                 ^
&gt; WebCore\PrivateHeaders\WebCore/TextureMapperFPSCounter.h(31,7): note: forward declaration of &apos;WebCore::TextureMapper&apos;
&gt; class TextureMapper;
&gt;       ^
&gt; 1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656253</commentid>
    <comment_count>12</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-05-26 19:10:20 -0700</bug_when>
    <thetext>Committed r262172: &lt;https://trac.webkit.org/changeset/262172&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399337</attachid>
            <date>2020-05-13 23:18:13 -0700</date>
            <delta_ts>2020-05-14 00:42:56 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>graphics-layer-texture-mapper.patch</filename>
            <type>text/plain</type>
            <size>24995</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGE5NGM3ZTExY2U2Li4zYjk0ZjRkYmEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04MSw3ICs4MSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0
dXJlTWFwcGVyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IDhjODBkZTJmMzJlLi4wMzE3NWJhZjU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTExNCw2ICsx
MTQsOSBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGVu
Y29kZXIgPDwgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIGVuY29kZXIgPDwgbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgZW5jb2RlciA8
PCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVkOwogICAgIGVuY29kZXIgPDwgYXBwbGVN
YWlsTGluZXNDbGFtcEVuYWJsZWQ7CkBAIC0zNTQsNiArMzU3LDExIEBAIE9wdGlvbmFsPFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0Vu
YWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggY2ZmMzEzNTVjMWEu
LmVhOWZjZDRkN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCkBAIC0xNzQsNiArMTc0LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgewogI2VuZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0
dGFjaG1lbnQgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVN
YWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBF
bmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWUy
NDg0YjM0MzUuLjFiMTczNDdiMThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTc3OTQsNiArNzc5NCwxMCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwog
ICAgIHBhcmFtZXRlcnMuaG9zdEZpbGVEZXNjcmlwdG9yID0gcGFnZUNsaWVudCgpLmhvc3RGaWxl
RGVzY3JpcHRvcigpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgcGFyYW1ldGVy
cy5uYXRpdmVXaW5kb3dIYW5kbGUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2aWV3V2lk
Z2V0KCkpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV91cmxTY2hlbWVI
YW5kbGVyc0J5U2NoZW1lKQogICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZUhhbmRsZXJzLnNl
dChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLT5pZGVudGlmaWVyKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggNGE5NmI1ZTk5ODguLjZkOTYxYjY2
OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yMzcsNiAr
MjM3LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUp
ICYgV1NfVklTSUJMRSkpOwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24uY29weSgpOworI2lmIDAKICAgICBhdXRvKiBwcmVmZXJlbmNlcyA9IHBhZ2VDb25maWd1
cmF0aW9uLT5wcmVmZXJlbmNlcygpOwogICAgIGlmICghcHJlZmVyZW5jZXMgJiYgcGFnZUNvbmZp
Z3VyYXRpb24tPnBhZ2VHcm91cCgpKSB7CiAgICAgICAgIHByZWZlcmVuY2VzID0gJnBhZ2VDb25m
aWd1cmF0aW9uLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKQEAgLTI0Niw2ICsyNDcsNyBA
QCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbiwgSFdORCBwYQogICAgICAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHVudGlsIGl0IGlzIHN1cHBvcnRlZC4KICAgICAgICAgcHJlZmVyZW5jZXMt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKTsKICAgICB9CisjZW5kaWYK
IAogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCA9IHBhZ2VDb25maWd1cmF0aW9uLT5w
cm9jZXNzUG9vbCgpOwogICAgIG1fcGFnZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCpt
X3BhZ2VDbGllbnQsIFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVIb3N0LmgKaW5kZXggNGE1ZTIxYTJlMzUuLjM0ZDcyMTA0YWU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaApAQCAtMzksOCArMzksMTEg
QEAKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
IAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNlbmRpZgorI2lmIFVTRShHUkFQSElD
U19MQVlFUl9URVhUVVJFX01BUFBFUikKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RUZXh0dXJl
TWFwcGVyLmgiCisKKyNlbHNlIC8vIFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUikK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKQEAgLTIyMywzICsyMjYsNSBA
QCBpbmxpbmUgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlcwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjYyYWM0Zjg5NDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmNwcApAQCAtMCwwICsx
LDQxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCIKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9U
RVhUVVJFX01BUFBFUikKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N5c3Rl
bUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJHTC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4
dHVyZU1hcHBlckxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dChXZWJDb3JlOjpQYWdlJiBwYWdlLCBIV05EIHdpbmRvdykKKyAgICA6
IG1fcGFnZShwYWdlKQorICAgICwgbV9jb250ZXh0KG51bGxwdHIpCisgICAgLCBtX3dpbmRvdyh3
aW5kb3cpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcigqdGhpcykKK3sKK30KKworc3RhdGljIElu
dFNpemUgZ2V0V2ViVmlld1NpemUoSFdORCB3aW5kb3cpCit7CisgICAgUkVDVCByOworICAgIEdl
dENsaWVudFJlY3Qod2luZG93LCAmcik7CisgICAgcmV0dXJuIHsgci5yaWdodCwgci5ib3R0b20g
fTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgaWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRTaXpl
IHBhZ2VTaXplID0gZ2V0V2ViVmlld1NpemUobV93aW5kb3cpOworCisgICAgbV9yb290TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUobnVsbHB0ciwgKnRoaXMpOworICAgIG1fcm9vdExheWVy
LT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VT
aXplKTsKKworICAgIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIC8vIFRoZSBub24t
Y29tcG9zaXRlZCBjb250ZW50cyBhcmUgYSBjaGlsZCBvZiB0aGUgcm9vdCBsYXllci4KKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobnVsbHB0
ciwgKnRoaXMpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNP
cGFxdWUoZmFsc2UpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShw
YWdlU2l6ZSk7CisgICAgaWYgKG1fcGFnZS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRBY2NlbGVy
YXRlc0RyYXdpbmcodHJ1ZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNl
dE5hbWUoIlJvb3QgbGF5ZXIiKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dE5hbWUoIk5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9yb290TGF5
ZXItPmFkZENoaWxkKCptX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpOworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICAvLyBUaGUgY3Jl
YXRpb24gb2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0
LgorICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3cpOworCisgICAgaWYgKCFtX2NvbnRleHQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgIGRv
d25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbV9yb290TGF5ZXIpLmxheWVyKCku
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojp+QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKQoreworICAgIHN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzdG9wQW55UGVu
ZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwor
Ym9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCit7CisgICAgcmV0
dXJuIG1fd2luZG93ICYmIG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKK30KKworYm9v
bCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cHJlcGFyZUZvclJlbmRlcmluZygpCit7
CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
bV9jb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzdGFydGVk
QW5pbWF0aW9uKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBkb3duY2FzdDxHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcj4oKmxheWVyKS5sYXllcigpLmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIGlmICghbV9yb290TGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSA9IG1fcm9vdExh
eWVyLT5zaXplKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtOworICAgIG0uc2NhbGUo
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgLy8gQ2VudGVyIHZpZXcKKyAgICBkb3VibGUgdHgg
PSAoc2l6ZS53aWR0aCgpIC0gc2l6ZS53aWR0aCgpIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSkgLyAy
LjA7CisgICAgZG91YmxlIHR5ID0gKHNpemUuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpIC8gZGV2
aWNlU2NhbGVGYWN0b3IoKSkgLyAyLjA7CisgICAgbS50cmFuc2xhdGUodHgsIHR5KTsKKyAgICBt
X3Jvb3RMYXllci0+c2V0VHJhbnNmb3JtKG0pOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0Ojpjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoQ29tcG9zaXRlUHVycG9zZSBw
dXJwb3NlKQoreworICAgIGlmICghcHJlcGFyZUZvclJlbmRlcmluZygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSRUNUIHI7CisgICAgaWYgKCE6OkdldENsaWVudFJlY3QobV93aW5kb3csICZy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFNpemUgd2luZG93U2l6ZShyLnJpZ2h0LCByLmJv
dHRvbSk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1Np
emUuaGVpZ2h0KCkpOworCisgICAgaWYgKHB1cnBvc2UgPT0gRm9yUmVzaXplKSB7CisgICAgICAg
IFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdM
X0ZBTFNFKTsKKyAgICAgICAgZ2xDbGVhckNvbG9yKDEsIDEsIDEsIDApOworICAgICAgICBnbENs
ZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworICAgIH0KKworICAgIG1fdGV4dHVyZU1hcHBlci0+
YmVnaW5QYWludGluZygpOworICAgIGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
PigqbV9yb290TGF5ZXIpLmxheWVyKCkucGFpbnQoKTsKKyAgICBtX2Zwc0NvdW50ZXIudXBkYXRl
RlBTQW5kRGlzcGxheSgqbV90ZXh0dXJlTWFwcGVyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVu
ZFBhaW50aW5nKCk7CisKKyAgICBtX2NvbnRleHQtPnN3YXBCdWZmZXJzKCk7Cit9CisKK3ZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdy
YXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgcHJlcGFyZUZvclJlbmRlcmluZygp
OworCisgICAgaWYgKCFncmFwaGljc0xheWVyKSB7CisgICAgICAgIHN0b3BBbnlQZW5kaW5nTGF5
ZXJGbHVzaCgpOworICAgICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1fdGV4dHVyZU1hcHBl
ciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgdGhlIGFj
Y2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGluaXRpYWxpemUoKTsKKyAgICBp
ZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5hZGRDaGlsZCgqZ3JhcGhpY3NMYXllcik7CisKKyAgICBzdG9wQW55UGVuZGluZ0xh
eWVyRmx1c2goKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlz
cGxheShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9yb290TGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yb290TGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBp
ZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcm9vdExheWVyLT5z
aXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7CisKKyAgICBhcHBseURldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICAv
LyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQg
Y29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3
bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndp
ZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9s
ZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWln
aHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0
KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5l
d1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50KCks
IG5ld1NpemUpKTsKKyAgICBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoRm9yUmVzaXplKTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IEludFNpemUmIC8qIHNjcm9sbE9mZnNldCAqLykKK3sKKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY2hl
ZHVsZUxheWVyRmx1c2goKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDUwX21zKTsKK30KKworYm9v
bCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3
KCk7CisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAoIWZyYW1lVmlldy0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbV9yb290TGF5ZXIpLnVw
ZGF0ZUJhY2tpbmdTdG9yZUluY2x1ZGluZ1N1YkxheWVycygpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXNTb29uKCkKK3sKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hBbmRS
ZW5kZXJMYXllcnMoKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3BhZ2UudXBkYXRlUmVuZGVyaW5nKCk7CisKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tcG9zaXRlTGF5ZXJzVG9D
b250ZXh0KCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKCkKK3sKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOworCisgICAg
Ly8gSW4gY2FzZSBhbiBhbmltYXRpb24gaXMgcnVubmluZywgd2Ugc2hvdWxkIGZsdXNoIGFnYWlu
IHNvb24uCisgICAgaWYgKHN0YXJ0ZWRBbmltYXRpb24obV9yb290TGF5ZXIuZ2V0KCkpKQorICAg
ICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBHcmFwaGljc0xh
eWVyUGFpbnRCZWhhdmlvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmNs
aXAocmVjdFRvUGFpbnQpOworICAgIG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPnBhaW50KGNv
bnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdFRvUGFpbnQpKTsKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKworZmxvYXQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmRldmljZVNjYWxlRmFjdG9y
KCk7Cit9CisKKworTGF5ZXJUcmVlSG9zdDo6TGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdl
KQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCisgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0KCp3ZWJQYWdlLmNvcmVQYWdlKCksIHdlYlBhZ2UubmF0aXZlV2luZG93SGFuZGxl
KCkpCit7Cit9CisKK0xheWVyVHJlZUhvc3Q6On5MYXllclRyZWVIb3N0KCkKK3sKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCkKK3sK
K30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVs
ZWRMYXllckZsdXNoKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVM
YXllckZsdXNoKCkKK3sKKyAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LnNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdM
YXllckZsdXNoKCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX2FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGxheWVyKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21w
b3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCit7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0LmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9z
dDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKQoreworICAgIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQucmVzaXpl
Um9vdExheWVyKHNpemUpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5n
KCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcoKQoreworfQor
CitXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NM
YXllckZhY3RvcnkoKQoreworICAgIHJldHVybiBudWxscHRyOyAKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQorewor
fQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpz
ZXRJc0Rpc2NhcmRhYmxlKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKK30KKworUmVmUHRyPFdlYkNvcmU6OkRpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKQoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlF
Ul9URVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNGQyYzYxYmFmODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJl
TWFwcGVyLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0xheWVyOworY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CitjbGFzcyBJbnRS
ZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFBhZ2U7CitzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1
dGVzOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3Mg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQpOworcHVibGljOgorICAg
IGV4cGxpY2l0IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYkNvcmU6OlBhZ2UmLCBI
V05EKTsKKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpOworCisg
ICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7
CisgICAgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2b2lk
IHJlc2l6ZVJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgYm9vbCBlbmFi
bGVkKCk7CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAg
ZW51bSBDb21wb3NpdGVQdXJwb3NlIHsgRm9yUmVzaXplLCBOb3RGb3JSZXNpemUgfTsKKyAgICB2
b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlID0gTm90Rm9yUmVz
aXplKTsKKworICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAgICBib29sIGZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
U29vbigpOworICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9m
ZnNldCk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6UGFnZSYgbV9wYWdlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsKKyAgICBIV05EIG1fd2lu
ZG93OworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1
cmVNYXBwZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIgbV9mcHNDb3Vu
dGVyOworCisgICAgY2xhc3MgTGF5ZXJGbHVzaFRpbWVyIDogcHVibGljIFdlYkNvcmU6OlRpbWVy
QmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBMYXllckZsdXNoVGltZXIoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQmIGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmaXJlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29udGV4dC5sYXllckZs
dXNoVGltZXJGaXJlZCgpOworICAgICAgICB9CisKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQmIG1fY29udGV4dDsKKyAgICB9IG1fbGF5ZXJGbHVzaFRpbWVyOworCisgICAg
dm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIHZvaWQgc3RvcEFueVBlbmRpbmdMYXll
ckZsdXNoKCk7CisgICAgYm9vbCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgYm9vbCBzdGFy
dGVkQW5pbWF0aW9uKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoKTsKK307CisKK2NsYXNzIExheWVyVHJlZUhvc3QgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3Qo
V2ViUGFnZSYpOworICAgIH5MYXllclRyZWVIb3N0KCk7CisKKyAgICBjb25zdCBMYXllclRyZWVD
b250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVDb250
ZXh0OyB9CisgICAgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Cisg
ICAgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wp
OworCisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKik7CisKKyAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBmb3JjZVJlcGFpbnQoKTsK
KyAgICBib29sIGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpOworICAgIHZvaWQgc2l6ZURp
ZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZvaWQgcGF1
c2VSZW5kZXJpbmcoKTsKKyAgICB2b2lkIHJlc3VtZVJlbmRlcmluZygpOworCisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7CisKKyAgICB2
b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZv
aWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYmKTsKKworICAgIHZvaWQgc2V0SXNEaXNjYXJkYWJsZShib29sKTsKKworICAgIHZvaWQgZGV2
aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGlz
cGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6
UGxhdGZvcm1EaXNwbGF5SUQpOworCisgICAgV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0KKworcHJpdmF0ZToKKyAgICBX
ZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQgbV9h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDsKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5
ZXJUcmVlQ29udGV4dDsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCBtX2Rpc3BsYXlJ
RDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA4YmE5MzQyYmMwZi4uZTIwZTJlNjllMTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC00Mjcs
NiArNDI3LDkgQEAgV2ViUGFnZTo6V2ViUGFnZShQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgICwgbV92aWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yKG1ha2VVbmlxdWU8Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcj4o
KnRoaXMpKQogI2VsaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKEdUSykKICAg
ICAsIG1fYWNjZXNzaWJpbGl0eU9iamVjdChudWxscHRyKQorI2VuZGlmCisjaWYgUExBVEZPUk0o
V0lOKQorICAgICwgbV9uYXRpdmVXaW5kb3dIYW5kbGUocmVpbnRlcnByZXRfY2FzdDxIV05EPihw
YXJhbWV0ZXJzLm5hdGl2ZVdpbmRvd0hhbmRsZSkpCiAjZW5kaWYKICAgICAsIG1fc2V0Q2FuU3Rh
cnRNZWRpYVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlBhZ2U6OnNldENhblN0YXJ0
TWVkaWFUaW1lckZpcmVkKQogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDE1ZjI4Y2YyNjczLi5hYmEwYjk1
OTcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAt
MTMyOCw2ICsxMzI4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU1lZGlhVXNhZ2VNYW5h
Z2VyU2Vzc2lvbihXZWJDb3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVyKTsKICNlbmRpZgogCisj
aWYgUExBVEZPUk0oV0lOKQorICAgIEhXTkQgbmF0aXZlV2luZG93SGFuZGxlKCkgeyByZXR1cm4g
bV9uYXRpdmVXaW5kb3dIYW5kbGU7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2Uo
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAK
QEAgLTE4MjIsNiArMTgyNiwxMCBAQCBwcml2YXRlOgogICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBt
X2FjY2Vzc2liaWxpdHlPYmplY3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBI
V05EIG1fbmF0aXZlV2luZG93SGFuZGxlIHsgMCB9OworI2VuZGlmCisKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBSZWZQdHI8UGFnZUJhbm5lcj4gbV9oZWFkZXJCYW5uZXI7CiAgICAg
UmVmUHRyPFBhZ2VCYW5uZXI+IG1fZm9vdGVyQmFubmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAppbmRleCBmMGVhNWM1NzAzYi4u
ZTMyZjMzNGFlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2Vi
UHJvY2Vzc01haW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2Vi
UHJvY2Vzc01haW5XaW4uY3BwCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFdlYlByb2Nlc3NNYWlu
V2luIGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAg
ICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgU2V0
UHJvY2Vzc0RQSUF3YXJlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DYWlyby5jbWFrZQppbmRleCAzNWVkZjg1M2Y4OS4uMTEzMTcwY2UyMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtMzksNiArMzksNyBAQCBzZXQoVVNFX0FO
R0xFX0VHTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DQUlSTyBPTikKIFNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVT
RV9DVVJMIE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1RF
WFRVUkVfTUFQUEVSIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKIFNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCiBTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChIQVZFX09QRU5HTF9FU18zIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399339</attachid>
            <date>2020-05-14 00:42:56 -0700</date>
            <delta_ts>2020-05-14 14:28:23 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>graphics-layer-texture-mapper.patch</filename>
            <type>text/plain</type>
            <size>26549</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGE5NGM3ZTExY2U2Li4zYjk0ZjRkYmEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04MSw3ICs4MSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0
dXJlTWFwcGVyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IDhjODBkZTJmMzJlLi4wMzE3NWJhZjU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTExNCw2ICsx
MTQsOSBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGVu
Y29kZXIgPDwgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIGVuY29kZXIgPDwgbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgZW5jb2RlciA8
PCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVkOwogICAgIGVuY29kZXIgPDwgYXBwbGVN
YWlsTGluZXNDbGFtcEVuYWJsZWQ7CkBAIC0zNTQsNiArMzU3LDExIEBAIE9wdGlvbmFsPFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0Vu
YWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggY2ZmMzEzNTVjMWEu
LmVhOWZjZDRkN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCkBAIC0xNzQsNiArMTc0LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgewogI2VuZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0
dGFjaG1lbnQgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVN
YWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBF
bmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWUy
NDg0YjM0MzUuLjFiMTczNDdiMThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTc3OTQsNiArNzc5NCwxMCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwog
ICAgIHBhcmFtZXRlcnMuaG9zdEZpbGVEZXNjcmlwdG9yID0gcGFnZUNsaWVudCgpLmhvc3RGaWxl
RGVzY3JpcHRvcigpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgcGFyYW1ldGVy
cy5uYXRpdmVXaW5kb3dIYW5kbGUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2aWV3V2lk
Z2V0KCkpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV91cmxTY2hlbWVI
YW5kbGVyc0J5U2NoZW1lKQogICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZUhhbmRsZXJzLnNl
dChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLT5pZGVudGlmaWVyKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggNGE5NmI1ZTk5ODguLjZkOTYxYjY2
OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yMzcsNiAr
MjM3LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUp
ICYgV1NfVklTSUJMRSkpOwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24uY29weSgpOworI2lmIDAKICAgICBhdXRvKiBwcmVmZXJlbmNlcyA9IHBhZ2VDb25maWd1
cmF0aW9uLT5wcmVmZXJlbmNlcygpOwogICAgIGlmICghcHJlZmVyZW5jZXMgJiYgcGFnZUNvbmZp
Z3VyYXRpb24tPnBhZ2VHcm91cCgpKSB7CiAgICAgICAgIHByZWZlcmVuY2VzID0gJnBhZ2VDb25m
aWd1cmF0aW9uLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKQEAgLTI0Niw2ICsyNDcsNyBA
QCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbiwgSFdORCBwYQogICAgICAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHVudGlsIGl0IGlzIHN1cHBvcnRlZC4KICAgICAgICAgcHJlZmVyZW5jZXMt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKTsKICAgICB9CisjZW5kaWYK
IAogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCA9IHBhZ2VDb25maWd1cmF0aW9uLT5w
cm9jZXNzUG9vbCgpOwogICAgIG1fcGFnZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCpt
X3BhZ2VDbGllbnQsIFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAyODE4OWM4MmRhNi4uMzM2YWNmMWE0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKQEAgLTk1LDYgKzk1LDkgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgp
KTsKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkocmVjdCk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTg4LDcgKzU5MSw3IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5CiAgICAgICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
KQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVY
VFVSRV9NQVBQRVIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IG1ha2VVbmlxdWU8TGF5ZXJU
cmVlSG9zdD4obV93ZWJQYWdlKTsKICAgICAgICAgY2hhbmdlV2luZG93U2NyZWVuKCk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRleCA0YTVlMjFhMmUz
NS4uMzRkNzIxMDRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5o
CkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCIKKworI2Vsc2UgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1RFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwpA
QCAtMjIzLDMgKzIyNiw1IEBAIGlubGluZSBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzCiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
SG9zdFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5kOWFiYzZlNDBjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5oIgorCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU3lzdGVtSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckdMLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyTGF5ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYkNvcmU6OlBhZ2UmIHBhZ2UsIEhX
TkQgd2luZG93KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NvbnRleHQobnVsbHB0cikK
KyAgICAsIG1fd2luZG93KHdpbmRvdykKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKCp0aGlzKQor
eworfQorCitzdGF0aWMgSW50U2l6ZSBnZXRXZWJWaWV3U2l6ZShIV05EIHdpbmRvdykKK3sKKyAg
ICBSRUNUIHI7CisgICAgR2V0Q2xpZW50UmVjdCh3aW5kb3csICZyKTsKKyAgICByZXR1cm4geyBy
LnJpZ2h0LCByLmJvdHRvbSB9OworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFNpemUgcGFnZVNpemUgPSBnZXRXZWJWaWV3U2l6ZShtX3dpbmRvdyk7CisK
KyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShudWxscHRyLCAqdGhpcyk7
CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5
ZXItPnNldFNpemUocGFnZVNpemUpOworCisgICAgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpOwor
CisgICAgLy8gVGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSBy
b290IGxheWVyLgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZShudWxscHRyLCAqdGhpcyk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRDb250ZW50c09wYXF1ZShmYWxzZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKKyAgICBpZiAobV9wYWdlLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyh0cnVlKTsKKworI2lmbmRlZiBOREVCVUcKKyAg
ICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiUm9vdCBsYXllciIpOworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlm
CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoKm1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
cik7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
KworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBhY3Rp
dmUgT3BlbkdMIGNvbnRleHQuCisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4
dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhtX3dpbmRvdyk7CisKKyAgICBp
ZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6
Y3JlYXRlKCk7CisgICAgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jv
b3RMYXllcikubGF5ZXIoKS5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7
CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6On5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpCit7CisgICAgc3RvcEFu
eVBlbmRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OnN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNoVGlt
ZXIuc3RvcCgpOworfQorCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gbV93aW5kb3cgJiYgbV9yb290TGF5ZXIgJiYgbV90ZXh0dXJl
TWFwcGVyOworfQorCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwcmVwYXJl
Rm9yUmVuZGVyaW5nKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OnN0YXJ0ZWRBbmltYXRpb24oV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIp
Cit7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbGF5ZXIpLmxheWVyKCkuZGVz
Y2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKTsKK30KKwordm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAg
aWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRmxvYXRTaXpl
JiBzaXplID0gbV9yb290TGF5ZXItPnNpemUoKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG07CisgICAgbS5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAvLyBDZW50ZXIgdmll
dworICAgIGRvdWJsZSB0eCA9IChzaXplLndpZHRoKCkgLSBzaXplLndpZHRoKCkgLyBkZXZpY2VT
Y2FsZUZhY3RvcigpKSAvIDIuMDsKKyAgICBkb3VibGUgdHkgPSAoc2l6ZS5oZWlnaHQoKSAtIHNp
emUuaGVpZ2h0KCkgLyBkZXZpY2VTY2FsZUZhY3RvcigpKSAvIDIuMDsKKyAgICBtLnRyYW5zbGF0
ZSh0eCwgdHkpOworICAgIG1fcm9vdExheWVyLT5zZXRUcmFuc2Zvcm0obSk7Cit9CisKK3ZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChD
b21wb3NpdGVQdXJwb3NlIHB1cnBvc2UpCit7CisgICAgaWYgKCFwcmVwYXJlRm9yUmVuZGVyaW5n
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJFQ1QgcjsKKyAgICBpZiAoITo6R2V0Q2xpZW50
UmVjdChtX3dpbmRvdywgJnIpKQorICAgICAgICByZXR1cm47CisgICAgSW50U2l6ZSB3aW5kb3dT
aXplKHIucmlnaHQsIHIuYm90dG9tKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRvd1NpemUu
d2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisKKyAgICBpZiAocHVycG9zZSA9PSBGb3JS
ZXNpemUpIHsKKyAgICAgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdM
X1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgICAgICBnbENsZWFyQ29sb3IoMSwgMSwgMSwg
MCk7CisgICAgICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgfQorCisgICAg
bV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgZG93bmNhc3Q8R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RMYXllcikubGF5ZXIoKS5wYWludCgpOworICAgIG1f
ZnBzQ291bnRlci51cGRhdGVGUFNBbmREaXNwbGF5KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1f
dGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZl
cnMoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBwcmVw
YXJlRm9yUmVuZGVyaW5nKCk7CisKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAg
c3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCk7CisgICAgICAgIG1fcm9vdExheWVyID0gbnVsbHB0
cjsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gbnVsbHB0cjsKKyAgICAg
ICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaW5p
dGlhbGl6ZSgpOworICAgIGlmICghbV93aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKCpncmFwaGljc0xheWVyKTsKKworICAg
IHN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldE5vbkNvbXBvc2l0
ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFt
X3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBu
ZXdTaXplKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRo
ZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAg
IC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXpl
ID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lk
dGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1p
bihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkp
OworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRT
aXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgp
ID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5l
d1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKwor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgbmV3U2l6ZSkpOworICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4
dChGb3JSZXNpemUpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29u
c3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgLyogc2Nyb2xsT2Zmc2V0ICov
KQoreworICAgIGlmICghbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKQorICAgICAgICByZXR1
cm47CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCg1
MF9tcyk7Cit9CisKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2Uu
bWFpbkZyYW1lKCkudmlldygpOworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5m
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKCFmcmFtZVZp
ZXctPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBkb3duY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4o
Km1fcm9vdExheWVyKS51cGRhdGVCYWNraW5nU3RvcmVJbmNsdWRpbmdTdWJMYXllcnMoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzU29vbigpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLnVwZGF0ZVJlbmRlcmluZygpOworCisgICAgaWYg
KCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbnRleHQgJiYgIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNv
bXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjpsYXllckZsdXNoVGltZXJGaXJlZCgpCit7CisgICAgZmx1c2hBbmRSZW5kZXJM
YXllcnMoKTsKKworICAgIC8vIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIHJ1bm5pbmcsIHdlIHNo
b3VsZCBmbHVzaCBhZ2FpbiBzb29uLgorICAgIGlmIChzdGFydGVkQW5pbWF0aW9uKG1fcm9vdExh
eWVyLmdldCgpKSkKKyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NM
YXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0VG9Q
YWludCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpCit7CisgICAgY29udGV4dC5zYXZlKCk7
CisgICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAgICBtX3BhZ2UubWFpbkZyYW1lKCku
dmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3RUb1BhaW50KSk7Cisg
ICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Zsb2F0IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpOworfQorCisKK0xheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3Qo
V2ViUGFnZSYgd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQorICAgICwgbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgqd2ViUGFnZS5jb3JlUGFnZSgpLCB3ZWJQYWdlLm5h
dGl2ZVdpbmRvd0hhbmRsZSgpKQoreworfQorCitMYXllclRyZWVIb3N0Ojp+TGF5ZXJUcmVlSG9z
dCgpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5
QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKQoreworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgbV9hY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dC5zY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCit7
CisgICAgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5zZXRSb290Q29tcG9zaXRpbmdM
YXllcihsYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlSb290
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKK3sKKyAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHJlY3QpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0KQoreworICAgIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuc2Ny
b2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKHNjcm9sbFJlY3QsIHsgfSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0LmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9z
dDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKQoreworICAgIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQucmVzaXpl
Um9vdExheWVyKHNpemUpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5n
KCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcoKQoreworfQor
CitXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NM
YXllckZhY3RvcnkoKQoreworICAgIHJldHVybiBudWxscHRyOyAKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQorewor
fQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpz
ZXRJc0Rpc2NhcmRhYmxlKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKK30KKworUmVmUHRyPFdlYkNvcmU6OkRpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKQoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlF
Ul9URVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uYmQ3MDk0MjVjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJl
TWFwcGVyLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0xheWVyOworY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CitjbGFzcyBJbnRS
ZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFBhZ2U7CitzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1
dGVzOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3Mg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQpOworcHVibGljOgorICAg
IGV4cGxpY2l0IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYkNvcmU6OlBhZ2UmLCBI
V05EKTsKKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpOworCisg
ICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7
CisgICAgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2b2lk
IHJlc2l6ZVJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgYm9vbCBlbmFi
bGVkKCk7CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAg
ZW51bSBDb21wb3NpdGVQdXJwb3NlIHsgRm9yUmVzaXplLCBOb3RGb3JSZXNpemUgfTsKKyAgICB2
b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlID0gTm90Rm9yUmVz
aXplKTsKKworICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAgICBib29sIGZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
U29vbigpOworICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9m
ZnNldCk7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6UGFnZSYgbV9wYWdlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsKKyAgICBIV05EIG1fd2lu
ZG93OworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1
cmVNYXBwZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIgbV9mcHNDb3Vu
dGVyOworCisgICAgY2xhc3MgTGF5ZXJGbHVzaFRpbWVyIDogcHVibGljIFdlYkNvcmU6OlRpbWVy
QmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBMYXllckZsdXNoVGltZXIoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQmIGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmaXJlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29udGV4dC5sYXllckZs
dXNoVGltZXJGaXJlZCgpOworICAgICAgICB9CisKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQmIG1fY29udGV4dDsKKyAgICB9IG1fbGF5ZXJGbHVzaFRpbWVyOworCisgICAg
dm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIHZvaWQgc3RvcEFueVBlbmRpbmdMYXll
ckZsdXNoKCk7CisgICAgYm9vbCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgYm9vbCBzdGFy
dGVkQW5pbWF0aW9uKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoKTsKK307CisKK2NsYXNzIExheWVyVHJlZUhvc3QgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3Qo
V2ViUGFnZSYpOworICAgIH5MYXllclRyZWVIb3N0KCk7CisKKyAgICBjb25zdCBMYXllclRyZWVD
b250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVDb250
ZXh0OyB9CisgICAgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Cisg
ICAgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wp
OworCisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKik7CisKKyAgICB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50
c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHNjcm9sbE5v
bkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBm
b3JjZVJlcGFpbnQoKTsKKyAgICBib29sIGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpOwor
ICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsK
KworICAgIHZvaWQgcGF1c2VSZW5kZXJpbmcoKTsKKyAgICB2b2lkIHJlc3VtZVJlbmRlcmluZygp
OworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCk7CisKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZp
ZXdwb3J0QXR0cmlidXRlcyYmKTsKKworICAgIHZvaWQgc2V0SXNEaXNjYXJkYWJsZShib29sKTsK
KworICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1v
bml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworCisgICAgV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0KKwor
cHJpdmF0ZToKKyAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDsKKyAgICBMYXllclRy
ZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybURpc3Bs
YXlJRCBtX2Rpc3BsYXlJRDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA4YmE5MzQyYmMwZi4u
ZTIwZTJlNjllMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC00MjcsNiArNDI3LDkgQEAgV2ViUGFnZTo6V2ViUGFnZShQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgICwg
bV92aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yKG1ha2VVbmlxdWU8Vmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvcj4oKnRoaXMpKQogI2VsaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBM
QVRGT1JNKEdUSykKICAgICAsIG1fYWNjZXNzaWJpbGl0eU9iamVjdChudWxscHRyKQorI2VuZGlm
CisjaWYgUExBVEZPUk0oV0lOKQorICAgICwgbV9uYXRpdmVXaW5kb3dIYW5kbGUocmVpbnRlcnBy
ZXRfY2FzdDxIV05EPihwYXJhbWV0ZXJzLm5hdGl2ZVdpbmRvd0hhbmRsZSkpCiAjZW5kaWYKICAg
ICAsIG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlBh
Z2U6OnNldENhblN0YXJ0TWVkaWFUaW1lckZpcmVkKQogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDE1ZjI4
Y2YyNjczLi5hYmEwYjk1OTcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaApAQCAtMTMyOCw2ICsxMzI4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZU1lZGlhVXNhZ2VNYW5hZ2VyU2Vzc2lvbihXZWJDb3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVy
KTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEhXTkQgbmF0aXZlV2luZG93SGFu
ZGxlKCkgeyByZXR1cm4gbV9uYXRpdmVXaW5kb3dIYW5kbGU7IH0KKyNlbmRpZgorCiBwcml2YXRl
OgogICAgIFdlYlBhZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMmJik7CiAKQEAgLTE4MjIsNiArMTgyNiwxMCBAQCBwcml2YXRlOgogICAgIEdSZWZQ
dHI8QXRrT2JqZWN0PiBtX2FjY2Vzc2liaWxpdHlPYmplY3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKFdJTikKKyAgICBIV05EIG1fbmF0aXZlV2luZG93SGFuZGxlIHsgMCB9OworI2VuZGlmCisK
ICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZWZQdHI8UGFnZUJhbm5lcj4gbV9oZWFk
ZXJCYW5uZXI7CiAgICAgUmVmUHRyPFBhZ2VCYW5uZXI+IG1fZm9vdGVyQmFubmVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAppbmRl
eCBmMGVhNWM1NzAzYi4uZTMyZjMzNGFlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNz
IFdlYlByb2Nlc3NNYWluV2luIGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFz
ZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQogICAg
IHsKKyAgICAgICAgU2V0UHJvY2Vzc0RQSUF3YXJlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQppbmRleCAzNWVkZjg1M2Y4OS4u
MTEzMTcwY2UyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtMzksNiArMzks
NyBAQCBzZXQoVVNFX0FOR0xFX0VHTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
QUlSTyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dS
QVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0VHTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCiBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZFX09QRU5HTF9FU18zIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399409</attachid>
            <date>2020-05-14 14:28:23 -0700</date>
            <delta_ts>2020-05-14 22:08:19 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>graphics-layer-texture-mapper.patch</filename>
            <type>text/plain</type>
            <size>23735</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGE5NGM3ZTExY2U2Li4zYjk0ZjRkYmEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04MSw3ICs4MSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0
dXJlTWFwcGVyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IDhjODBkZTJmMzJlLi4wMzE3NWJhZjU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTExNCw2ICsx
MTQsOSBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGVu
Y29kZXIgPDwgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIGVuY29kZXIgPDwgbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgZW5jb2RlciA8
PCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVkOwogICAgIGVuY29kZXIgPDwgYXBwbGVN
YWlsTGluZXNDbGFtcEVuYWJsZWQ7CkBAIC0zNTQsNiArMzU3LDExIEBAIE9wdGlvbmFsPFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0Vu
YWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggY2ZmMzEzNTVjMWEu
LmVhOWZjZDRkN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCkBAIC0xNzQsNiArMTc0LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgewogI2VuZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0
dGFjaG1lbnQgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVN
YWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBF
bmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWUy
NDg0YjM0MzUuLjFiMTczNDdiMThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTc3OTQsNiArNzc5NCwxMCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwog
ICAgIHBhcmFtZXRlcnMuaG9zdEZpbGVEZXNjcmlwdG9yID0gcGFnZUNsaWVudCgpLmhvc3RGaWxl
RGVzY3JpcHRvcigpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgcGFyYW1ldGVy
cy5uYXRpdmVXaW5kb3dIYW5kbGUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2aWV3V2lk
Z2V0KCkpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV91cmxTY2hlbWVI
YW5kbGVyc0J5U2NoZW1lKQogICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZUhhbmRsZXJzLnNl
dChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLT5pZGVudGlmaWVyKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggNGE5NmI1ZTk5ODguLjZkOTYxYjY2
OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yMzcsNiAr
MjM3LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUp
ICYgV1NfVklTSUJMRSkpOwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24uY29weSgpOworI2lmIDAKICAgICBhdXRvKiBwcmVmZXJlbmNlcyA9IHBhZ2VDb25maWd1
cmF0aW9uLT5wcmVmZXJlbmNlcygpOwogICAgIGlmICghcHJlZmVyZW5jZXMgJiYgcGFnZUNvbmZp
Z3VyYXRpb24tPnBhZ2VHcm91cCgpKSB7CiAgICAgICAgIHByZWZlcmVuY2VzID0gJnBhZ2VDb25m
aWd1cmF0aW9uLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKQEAgLTI0Niw2ICsyNDcsNyBA
QCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbiwgSFdORCBwYQogICAgICAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHVudGlsIGl0IGlzIHN1cHBvcnRlZC4KICAgICAgICAgcHJlZmVyZW5jZXMt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKTsKICAgICB9CisjZW5kaWYK
IAogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCA9IHBhZ2VDb25maWd1cmF0aW9uLT5w
cm9jZXNzUG9vbCgpOwogICAgIG1fcGFnZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCpt
X3BhZ2VDbGllbnQsIFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAyODE4OWM4MmRhNi4uMzM2YWNmMWE0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKQEAgLTk1LDYgKzk1LDkgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgp
KTsKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkocmVjdCk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTg4LDcgKzU5MSw3IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5CiAgICAgICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
KQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVY
VFVSRV9NQVBQRVIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IG1ha2VVbmlxdWU8TGF5ZXJU
cmVlSG9zdD4obV93ZWJQYWdlKTsKICAgICAgICAgY2hhbmdlV2luZG93U2NyZWVuKCk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRleCA0YTVlMjFhMmUz
NS4uMzRkNzIxMDRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5o
CkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCIKKworI2Vsc2UgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1RFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwpA
QCAtMjIzLDMgKzIyNiw1IEBAIGlubGluZSBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzCiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
SG9zdFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi44YTExODBmMjI4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5oIgorCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyTGF5ZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3Rh
dGljIEludFNpemUgZ2V0V2ViVmlld1NpemUoSFdORCB3aW5kb3cpCit7CisgICAgUkVDVCByOwor
ICAgIEdldENsaWVudFJlY3Qod2luZG93LCAmcik7CisgICAgcmV0dXJuIHsgci5yaWdodCwgci5i
b3R0b20gfTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0OjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkK
K3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250
ZXh0KENvbXBvc2l0ZVB1cnBvc2UgcHVycG9zZSkKK3sKKyAgICBpZiAoIXByZXBhcmVGb3JSZW5k
ZXJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZ2V0
V2ViVmlld1NpemUod2luZG93KCkpOworICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53
aWR0aCgpLCB3aW5kb3dTaXplLmhlaWdodCgpKTsKKworICAgIGlmIChwdXJwb3NlID09IEZvclJl
c2l6ZSkgeworICAgICAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xf
U0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgICAgIGdsQ2xlYXJDb2xvcigxLCAxLCAxLCAw
KTsKKyAgICAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICB9CisKKyAgICBt
X3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBkb3duY2FzdDxHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcj4oKm1fcm9vdExheWVyKS5sYXllcigpLnBhaW50KCk7CisgICAgbV9m
cHNDb3VudGVyLnVwZGF0ZUZQU0FuZERpc3BsYXkoKm1fdGV4dHVyZU1hcHBlcik7CisgICAgbV90
ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAgbV9jb250ZXh0LT5zd2FwQnVmZmVy
cygpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
Cit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkudmlldygpOworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKCFmcmFtZVZpZXct
PmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBkb3duY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4oKm1f
cm9vdExheWVyKS51cGRhdGVCYWNraW5nU3RvcmVJbmNsdWRpbmdTdWJMYXllcnMoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJl
ZCgpCit7CisgICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKworICAgIC8vIEluIGNhc2UgYW4g
YW5pbWF0aW9uIGlzIHJ1bm5pbmcsIHdlIHNob3VsZCBmbHVzaCBhZ2FpbiBzb29uLgorICAgIGlm
IChkb3duY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4obV9yb290TGF5ZXIuZ2V0KCkp
LT5sYXllcigpLmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAg
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitMYXllclRyZWVIb3N0OjpMYXllclRyZWVI
b3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKKyAgICAsIG1f
bGF5ZXJGbHVzaFRpbWVyKCp0aGlzLCAmTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQpCit7Cit9CisKK0xheWVyVHJlZUhvc3Q6On5MYXllclRyZWVIb3N0KCkKK3sKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCkKK3sK
K30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVs
ZWRMYXllckZsdXNoKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVM
YXllckZsdXNoKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgxNl9tcyk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKK3sK
KyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgcGFn
ZVNpemUgPSBnZXRXZWJWaWV3U2l6ZSh3aW5kb3coKSk7CisKKyAgICBtX3Jvb3RMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShudWxscHRyLCAqdGhpcyk7CisgICAgbV9yb290TGF5ZXItPnNl
dERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUocGFnZVNpemUp
OworCisgICAgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgLy8gVGhlIG5vbi1jb21w
b3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSByb290IGxheWVyLgorICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShudWxscHRyLCAq
dGhpcyk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1
ZShmYWxzZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKHBhZ2VT
aXplKTsKKyAgICBpZiAobV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0
ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldEFjY2VsZXJhdGVzRHJhd2luZyh0cnVlKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jv
b3RMYXllci0+c2V0TmFtZSgiUm9vdCBsYXllciIpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmFtZSgiTm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisKKyAg
ICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoKm1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcik7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAg
IC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBhY3RpdmUgT3Bl
bkdMIGNvbnRleHQuCisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dCA9IEdM
Q29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh3aW5kb3coKSk7CisKKyAgICBpZiAoIW1f
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRl
KCk7CisgICAgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RMYXll
cikubGF5ZXIoKS5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcHJlcGFyZUZvclJlbmRlcmluZygpOworCisgICAg
aWYgKCFsYXllcikgeworICAgICAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgICAg
ICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllciA9IG51bGxwdHI7CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IG51bGxwdHI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRy
ZWUgaGllcmFyY2h5LgorICAgIGluaXRpYWxpemUoKTsKKyAgICBpZiAoIXdpbmRvdygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFs
bENoaWxkcmVuKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZCgq
bGF5ZXIpOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9v
dExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworfQorCit2b2lkIExheWVyVHJlZUhv
c3Q6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENv
bnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QpCit7CisgICAgaWYgKCFl
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKK3sKKyAgICBpZiAoIWVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnVw
ZGF0ZVJlbmRlcmluZygpOworCisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dChOb3RGb3JS
ZXNpemUpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCit7CisgICAg
Zmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJl
cGFpbnRBc3luYyhDYWxsYmFja0lEKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1Np
emUpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cigpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5v
bi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8g
Zm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgp
ID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0
YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUu
d2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBv
bGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6
ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBuZXdTaXplKSk7CisgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KEZv
clJlc2l6ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6cGF1c2VSZW5kZXJpbmcoKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnJlc3Vt
ZVJlbmRlcmluZygpCit7Cit9CisKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXll
clRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7
IAorfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmll
d3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYmKQoreworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9vbCkKK3sKK30KKwordm9pZCBM
YXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQoreworfQorCitS
ZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVh
dGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpCit7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0hXTkQgTGF5ZXJUcmVlSG9zdDo6d2luZG93KCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIV05EPihtX3dlYlBhZ2UubmF0aXZlV2luZG93
SGFuZGxlKCkpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OmVuYWJsZWQoKQoreworICAgIHJl
dHVybiB3aW5kb3coKSAmJiBtX3Jvb3RMYXllciAmJiBtX3RleHR1cmVNYXBwZXI7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBHcmFw
aGljc0xheWVyUGFpbnRCZWhhdmlvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250
ZXh0LmNsaXAocmVjdFRvUGFpbnQpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS52aWV3KCktPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdFRvUGFpbnQp
KTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworZmxvYXQgTGF5ZXJUcmVlSG9zdDo6ZGV2
aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjphcHBseURl
dmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICBpZiAoIW1fcm9vdExheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb25zdCBGbG9hdFNpemUmIHNpemUgPSBtX3Jvb3RMYXllci0+c2l6ZSgpOwor
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbTsKKyAgICBtLnNjYWxlKGRldmljZVNjYWxlRmFj
dG9yKCkpOworICAgIC8vIENlbnRlciB2aWV3CisgICAgZG91YmxlIHR4ID0gKHNpemUud2lkdGgo
KSAtIHNpemUud2lkdGgoKSAvIGRldmljZVNjYWxlRmFjdG9yKCkpIC8gMi4wOworICAgIGRvdWJs
ZSB0eSA9IChzaXplLmhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKSAvIGRldmljZVNjYWxlRmFjdG9y
KCkpIC8gMi4wOworICAgIG0udHJhbnNsYXRlKHR4LCB0eSk7CisgICAgbV9yb290TGF5ZXItPnNl
dFRyYW5zZm9ybShtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RU
ZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2YzQwMDIyMDFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVIb3N0VGV4dHVyZU1hcHBlci5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgorI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR0xDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0
b3J5OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBQYWdlOworc3RydWN0
IFZpZXdwb3J0QXR0cmlidXRlczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUhvc3QgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlJik7CisgICAgfkxheWVyVHJlZUhvc3QoKTsK
KyAgICBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Cisg
ICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgc2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Vmlld092
ZXJsYXlSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIGJvb2wgZm9yY2VSZXBhaW50QXN5
bmMoQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpOworICAgIHZvaWQgcGF1c2VSZW5kZXJpbmcoKTsKKyAgICB2b2lkIHJl
c3VtZVJlbmRlcmluZygpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFw
aGljc0xheWVyRmFjdG9yeSgpOworICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMo
V2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpOworICAgIHZvaWQgc2V0SXNEaXNjYXJkYWJs
ZShib29sKTsKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CisgICAgV2ViQ29yZTo6UGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0K
KworcHJpdmF0ZToKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdm9pZCBwYWludENv
bnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3RUb1BhaW50LCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyUGFpbnRCZWhhdmlvcikgb3ZlcnJpZGU7CisgICAgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAg
IEhXTkQgd2luZG93KCk7CisgICAgYm9vbCBlbmFibGVkKCk7CisgICAgZW51bSBDb21wb3NpdGVQ
dXJwb3NlIHsgRm9yUmVzaXplLCBOb3RGb3JSZXNpemUgfTsKKyAgICB2b2lkIGNvbXBvc2l0ZUxh
eWVyc1RvQ29udGV4dChDb21wb3NpdGVQdXJwb3NlKTsKKyAgICB2b2lkIGZsdXNoQW5kUmVuZGVy
TGF5ZXJzKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lk
IHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZvaWQg
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICBib29sIHByZXBhcmVGb3JSZW5kZXJpbmcoKTsK
KyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIFdlYlBhZ2UmIG1fd2Vi
UGFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7
CisgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisgICAgV2ViQ29yZTo6
UGxhdGZvcm1EaXNwbGF5SUQgbV9kaXNwbGF5SUQ7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyRlBTQ291bnRlciBtX2Zwc0NvdW50ZXI7CisgICAgV2ViQ29yZTo6VGltZXIgbV9sYXll
ckZsdXNoVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOGJhOTM0MmJjMGYuLjk2OWY4
N2Y4YTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cApAQCAtNDI3LDYgKzQyNyw5IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUGFnZUlkZW50aWZpZXIgcGFn
ZUlELCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAsIG1fdmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcihtYWtlVW5pcXVlPFZpZXdHZXN0dXJlR2VvbWV0cnlD
b2xsZWN0b3I+KCp0aGlzKSkKICNlbGlmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9S
TShHVEspCiAgICAgLCBtX2FjY2Vzc2liaWxpdHlPYmplY3QobnVsbHB0cikKKyNlbmRpZgorI2lm
IFBMQVRGT1JNKFdJTikKKyAgICAsIG1fbmF0aXZlV2luZG93SGFuZGxlKHBhcmFtZXRlcnMubmF0
aXZlV2luZG93SGFuZGxlKQogI2VuZGlmCiAgICAgLCBtX3NldENhblN0YXJ0TWVkaWFUaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJQYWdlOjpzZXRDYW5TdGFydE1lZGlhVGltZXJGaXJl
ZCkKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAxNWYyOGNmMjY3My4uNTE0NjNkZmE4OGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEzMjgsNiArMTMyOCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVNZWRpYVVzYWdlTWFuYWdlclNlc3Npb24oV2Vi
Q29yZTo6TWVkaWFTZXNzaW9uSWRlbnRpZmllcik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJ
TikKKyAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJldHVybiBtX25hdGl2ZVdp
bmRvd0hhbmRsZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZShXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmKTsKIApAQCAtMTgyMiw2
ICsxODI2LDEwIEBAIHByaXZhdGU6CiAgICAgR1JlZlB0cjxBdGtPYmplY3Q+IG1fYWNjZXNzaWJp
bGl0eU9iamVjdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHVpbnQ2NF90IG1f
bmF0aXZlV2luZG93SGFuZGxlIHsgMCB9OworI2VuZGlmCisKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBSZWZQdHI8UGFnZUJhbm5lcj4gbV9oZWFkZXJCYW5uZXI7CiAgICAgUmVmUHRy
PFBhZ2VCYW5uZXI+IG1fZm9vdGVyQmFubmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAppbmRleCBmMGVhNWM1NzAzYi4uZTMyZjMz
NGFlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vz
c01haW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vz
c01haW5XaW4uY3BwCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFdlYlByb2Nlc3NNYWluV2luIGZp
bmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9v
bCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgU2V0UHJvY2Vz
c0RQSUF3YXJlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlv
bnNXaW5DYWlyby5jbWFrZQppbmRleCAzNWVkZjg1M2Y4OS4uMTEzMTcwY2UyMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtMzksNiArMzksNyBAQCBzZXQoVVNFX0FOR0xFX0VH
TCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DQUlSTyBPTikKIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJM
IE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1RFWFRVUkVf
TUFQUEVSIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChIQVZFX09QRU5HTF9FU18zIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399455</attachid>
            <date>2020-05-14 22:08:19 -0700</date>
            <delta_ts>2020-05-18 22:20:33 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>graphics-layer-texture-mapper.3.patch</filename>
            <type>text/plain</type>
            <size>21665</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGE5NGM3ZTExY2U2Li4zYjk0ZjRkYmEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04MSw3ICs4MSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0
dXJlTWFwcGVyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IDhjODBkZTJmMzJlLi4wMzE3NWJhZjU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTExNCw2ICsx
MTQsOSBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGVu
Y29kZXIgPDwgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIGVuY29kZXIgPDwgbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgZW5jb2RlciA8
PCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVkOwogICAgIGVuY29kZXIgPDwgYXBwbGVN
YWlsTGluZXNDbGFtcEVuYWJsZWQ7CkBAIC0zNTQsNiArMzU3LDExIEBAIE9wdGlvbmFsPFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0Vu
YWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggY2ZmMzEzNTVjMWEu
LmVhOWZjZDRkN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCkBAIC0xNzQsNiArMTc0LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgewogI2VuZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0
dGFjaG1lbnQgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVN
YWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBF
bmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWUy
NDg0YjM0MzUuLjFiMTczNDdiMThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTc3OTQsNiArNzc5NCwxMCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwog
ICAgIHBhcmFtZXRlcnMuaG9zdEZpbGVEZXNjcmlwdG9yID0gcGFnZUNsaWVudCgpLmhvc3RGaWxl
RGVzY3JpcHRvcigpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgcGFyYW1ldGVy
cy5uYXRpdmVXaW5kb3dIYW5kbGUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2aWV3V2lk
Z2V0KCkpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV91cmxTY2hlbWVI
YW5kbGVyc0J5U2NoZW1lKQogICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZUhhbmRsZXJzLnNl
dChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLT5pZGVudGlmaWVyKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggNGE5NmI1ZTk5ODguLjZkOTYxYjY2
OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yMzcsNiAr
MjM3LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUp
ICYgV1NfVklTSUJMRSkpOwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24uY29weSgpOworI2lmIDAKICAgICBhdXRvKiBwcmVmZXJlbmNlcyA9IHBhZ2VDb25maWd1
cmF0aW9uLT5wcmVmZXJlbmNlcygpOwogICAgIGlmICghcHJlZmVyZW5jZXMgJiYgcGFnZUNvbmZp
Z3VyYXRpb24tPnBhZ2VHcm91cCgpKSB7CiAgICAgICAgIHByZWZlcmVuY2VzID0gJnBhZ2VDb25m
aWd1cmF0aW9uLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKQEAgLTI0Niw2ICsyNDcsNyBA
QCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbiwgSFdORCBwYQogICAgICAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHVudGlsIGl0IGlzIHN1cHBvcnRlZC4KICAgICAgICAgcHJlZmVyZW5jZXMt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKTsKICAgICB9CisjZW5kaWYK
IAogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCA9IHBhZ2VDb25maWd1cmF0aW9uLT5w
cm9jZXNzUG9vbCgpOwogICAgIG1fcGFnZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCpt
X3BhZ2VDbGllbnQsIFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAyODE4OWM4MmRhNi4uMzM2YWNmMWE0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKQEAgLTk1LDYgKzk1LDkgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgp
KTsKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkocmVjdCk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTg4LDcgKzU5MSw3IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5CiAgICAgICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
KQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVY
VFVSRV9NQVBQRVIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IG1ha2VVbmlxdWU8TGF5ZXJU
cmVlSG9zdD4obV93ZWJQYWdlKTsKICAgICAgICAgY2hhbmdlV2luZG93U2NyZWVuKCk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRleCA0YTVlMjFhMmUz
NS4uMzRkNzIxMDRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5o
CkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCIKKworI2Vsc2UgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1RFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwpA
QCAtMjIzLDMgKzIyNiw1IEBAIGlubGluZSBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzCiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
SG9zdFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5mN2IxNGQ2NTUxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5oIgorCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyTGF5ZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3Rh
dGljIEludFNpemUgZ2V0V2ViVmlld1NpemUoSFdORCB3aW5kb3cpCit7CisgICAgUkVDVCByOwor
ICAgIEdldENsaWVudFJlY3Qod2luZG93LCAmcik7CisgICAgcmV0dXJuIHsgci5yaWdodCwgci5i
b3R0b20gfTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0OjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkK
K3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250
ZXh0KCkKK3sKKyAgICBpZiAoIXByZXBhcmVGb3JSZW5kZXJpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZ2V0V2ViVmlld1NpemUod2luZG93KCkpOwor
ICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5kb3dTaXplLmhlaWdo
dCgpKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIGRvd25j
YXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbV9yb290TGF5ZXIpLmxheWVyKCkucGFp
bnQoKTsKKyAgICBtX2Zwc0NvdW50ZXIudXBkYXRlRlBTQW5kRGlzcGxheSgqbV90ZXh0dXJlTWFw
cGVyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBtX2NvbnRl
eHQtPnN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAoIWZyYW1lVmlldy0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbV9yb290
TGF5ZXIpLnVwZGF0ZUJhY2tpbmdTdG9yZUluY2x1ZGluZ1N1YkxheWVycygpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkK
K3sKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOworCisgICAgaWYgKCFlbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEluIGNhc2UgYW4gYW5pbWF0aW9uIGlzIHJ1bm5pbmcs
IHdlIHNob3VsZCBmbHVzaCBhZ2FpbiBzb29uLgorICAgIGlmIChkb3duY2FzdDxHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcj4obV9yb290TGF5ZXIuZ2V0KCkpLT5sYXllcigpLmRlc2NlbmRhbnRz
T3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCitMYXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2Up
CisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKCp0aGlz
LCAmTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCit7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpCit7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5
ZXJGbHVzaChib29sKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJG
bHVzaCgpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMTZfbXMpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1l
ci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCit7CisgICAg
aWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRTaXplIHBhZ2VTaXpl
ID0gZ2V0V2ViVmlld1NpemUod2luZG93KCkpOworCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUobnVsbHB0ciwgKnRoaXMpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9yb290TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGZhbHNl
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShwYWdlU2l6ZSk7CisgICAgbV9yb290TGF5ZXIt
PnNldE5lZWRzRGlzcGxheSgpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0
TmFtZSgiUm9vdCBsYXllciIpOworI2VuZGlmCisgICAgYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcigp
OworCisgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBUZXh0dXJlTWFwcGVyIG5lZWRzIGFuIGFj
dGl2ZSBPcGVuR0wgY29udGV4dC4KKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgbV9jb250
ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHdpbmRvdygpKTsKKworICAg
IGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworCisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdM
OjpjcmVhdGUoKTsKKyAgICBkb3duY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4oKm1f
cm9vdExheWVyKS5sYXllcigpLnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgp
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7
CisKKyAgICBpZiAoIWxheWVyKSB7CisgICAgICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7
CisgICAgICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVy
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFkZCB0aGUgYWNj
ZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaW5pdGlhbGl6ZSgpOworICAgIGlm
ICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3Zl
QWxsQ2hpbGRyZW4oKTsKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoKmxheWVyKTsKKworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldFZpZXdP
dmVybGF5Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxS
ZWN0KQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJl
Y3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKK3sK
KyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlLmNv
cmVQYWdlKCktPnVwZGF0ZVJlbmRlcmluZygpOworCisgICAgaWYgKCFlbmFibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29u
dGV4dCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCit7CisgICAg
Zmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJl
cGFpbnRBc3luYyhDYWxsYmFja0lEKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1Np
emUpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jv
b3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKyAgICBhcHBseURldmljZVNjYWxlRmFjdG9yKCk7
CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpw
YXVzZVJlbmRlcmluZygpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVy
aW5nKCkKK3sKK30KKworV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIExheWVyVHJlZUhv
c3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsgCit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0
dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpCit7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sKQoreworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCit7Cit9CisKK1JlZlB0cjxX
ZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZURpc3Bs
YXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkKK3sKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworSFdORCBMYXllclRyZWVIb3N0Ojp3aW5kb3coKQoreworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEhXTkQ+KG1fd2ViUGFnZS5uYXRpdmVXaW5kb3dIYW5kbGUo
KSk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6ZW5hYmxlZCgpCit7CisgICAgcmV0dXJuIHdp
bmRvdygpICYmIG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdFRvUGFpbnQsIEdyYXBoaWNzTGF5
ZXJQYWludEJlaGF2aW9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuY2xp
cChyZWN0VG9QYWludCk7CisgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0VG9QYWludCkpOworICAg
IGNvbnRleHQucmVzdG9yZSgpOworfQorCitmbG9hdCBMYXllclRyZWVIb3N0OjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoKQoreworICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSA9IG1fcm9vdExheWVyLT5zaXplKCk7CisKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtOworICAgIG0uc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisgICAgLy8gQ2VudGVyIHZpZXcKKyAgICBkb3VibGUgdHggPSAoc2l6ZS53aWR0aCgpIC0gc2l6
ZS53aWR0aCgpIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSkgLyAyLjA7CisgICAgZG91YmxlIHR5ID0g
KHNpemUuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSkgLyAy
LjA7CisgICAgbS50cmFuc2xhdGUodHgsIHR5KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0VHJhbnNm
b3JtKG0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQ
SElDU19MQVlFUl9URVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVN
YXBwZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uM2NiMjk5OGU5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhv
c3RUZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisKKyNp
bmNsdWRlICJDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HTENvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFw
aGljc0xheWVyOworY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CitjbGFzcyBJbnRSZWN0Owor
Y2xhc3MgSW50U2l6ZTsKK2NsYXNzIFBhZ2U7CitzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJU
cmVlSG9zdCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0
KFdlYlBhZ2UmKTsKKworICAgIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2b2lkIHNldExh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisgICAgdm9pZCBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisgICAgdm9p
ZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAg
dm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Cisg
ICAgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgYm9vbCBm
b3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEKTsKKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBwYXVzZVJlbmRlcmluZygp
OworICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7CisgICAgdm9pZCBjb250ZW50c1NpemVD
aGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdw
b3J0QXR0cmlidXRlcyhXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJik7CisgICAgdm9pZCBz
ZXRJc0Rpc2NhcmRhYmxlKGJvb2wpOworICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKKyAg
ICBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlJRDsgfQorCitwcml2YXRlOgorICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAg
ICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdFRvUGFp
bnQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKKyAgICBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBpbml0
aWFsaXplKCk7CisgICAgSFdORCB3aW5kb3coKTsKKyAgICBib29sIGVuYWJsZWQoKTsKKyAgICB2
b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJM
YXllcnMoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQg
c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisgICAgdm9pZCBs
YXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIGJvb2wgcHJlcGFyZUZvclJlbmRlcmluZygpOwor
ICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgV2ViUGFnZSYgbV93ZWJQ
YWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fY29udGV4dDsK
KyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXlJRCBtX2Rpc3BsYXlJRDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRlBT
Q291bnRlciBtX2Zwc0NvdW50ZXI7CisgICAgV2ViQ29yZTo6VGltZXIgbV9sYXllckZsdXNoVGlt
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElD
U19MQVlFUl9URVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggOGJhOTM0MmJjMGYuLjk2OWY4N2Y4YTNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNDI3LDYgKzQyNyw5
IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAsIG1fdmlld0dlc3R1cmVHZW9tZXRyeUNv
bGxlY3RvcihtYWtlVW5pcXVlPFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I+KCp0aGlzKSkK
ICNlbGlmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShHVEspCiAgICAgLCBtX2Fj
Y2Vzc2liaWxpdHlPYmplY3QobnVsbHB0cikKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICAsIG1fbmF0aXZlV2luZG93SGFuZGxlKHBhcmFtZXRlcnMubmF0aXZlV2luZG93SGFuZGxlKQog
I2VuZGlmCiAgICAgLCBtX3NldENhblN0YXJ0TWVkaWFUaW1lcihSdW5Mb29wOjptYWluKCksIHRo
aXMsICZXZWJQYWdlOjpzZXRDYW5TdGFydE1lZGlhVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApp
bmRleCAxNWYyOGNmMjY3My4uNTE0NjNkZmE4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEzMjgsNiArMTMyOCwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmVNZWRpYVVzYWdlTWFuYWdlclNlc3Npb24oV2ViQ29yZTo6TWVkaWFTZXNzaW9u
SWRlbnRpZmllcik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICB1aW50NjRfdCBu
YXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJldHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQorI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgV2ViUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmKTsKIApAQCAtMTgyMiw2ICsxODI2LDEwIEBAIHByaXZh
dGU6CiAgICAgR1JlZlB0cjxBdGtPYmplY3Q+IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHVpbnQ2NF90IG1fbmF0aXZlV2luZG93SGFuZGxl
IHsgMCB9OworI2VuZGlmCisKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZWZQdHI8
UGFnZUJhbm5lcj4gbV9oZWFkZXJCYW5uZXI7CiAgICAgUmVmUHRyPFBhZ2VCYW5uZXI+IG1fZm9v
dGVyQmFubmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQ
cm9jZXNzTWFpbldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nl
c3NNYWluV2luLmNwcAppbmRleCBmMGVhNWM1NzAzYi4uZTMyZjMzNGFlYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0z
Nyw2ICszNyw3IEBAIGNsYXNzIFdlYlByb2Nlc3NNYWluV2luIGZpbmFsIDogcHVibGljIEF1eGls
aWFyeVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxp
emUoKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgU2V0UHJvY2Vzc0RQSUF3YXJlKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0
aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQpp
bmRleCAzNWVkZjg1M2Y4OS4uMTEzMTcwY2UyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5j
bWFrZQpAQCAtMzksNiArMzksNyBAQCBzZXQoVVNFX0FOR0xFX0VHTCBPTikKIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9DQUlSTyBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
RiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQorU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0dSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSIE9OKQogU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVT
RV9PUEVOR0xfRVMgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChIQVZFX09QRU5HTF9FU18z
IE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399710</attachid>
            <date>2020-05-18 22:20:33 -0700</date>
            <delta_ts>2020-05-21 01:15:55 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>graphics-layer-texture-mapper.patch</filename>
            <type>text/plain</type>
            <size>22170</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGE5NGM3ZTExY2U2Li4zYjk0ZjRkYmEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04MSw3ICs4MSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0
dXJlTWFwcGVyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IDhjODBkZTJmMzJlLi4wMzE3NWJhZjU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTExNCw2ICsx
MTQsOSBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGVu
Y29kZXIgPDwgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIGVuY29kZXIgPDwgbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgZW5jb2RlciA8
PCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVkOwogICAgIGVuY29kZXIgPDwgYXBwbGVN
YWlsTGluZXNDbGFtcEVuYWJsZWQ7CkBAIC0zNTQsNiArMzU3LDExIEBAIE9wdGlvbmFsPFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0Vu
YWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggY2ZmMzEzNTVjMWEu
LmVhOWZjZDRkN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCkBAIC0xNzQsNiArMTc0LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgewogI2VuZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0
dGFjaG1lbnQgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVN
YWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBF
bmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggOWUy
NDg0YjM0MzUuLjFiMTczNDdiMThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTc3OTQsNiArNzc5NCwxMCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwog
ICAgIHBhcmFtZXRlcnMuaG9zdEZpbGVEZXNjcmlwdG9yID0gcGFnZUNsaWVudCgpLmhvc3RGaWxl
RGVzY3JpcHRvcigpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgcGFyYW1ldGVy
cy5uYXRpdmVXaW5kb3dIYW5kbGUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2aWV3V2lk
Z2V0KCkpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV91cmxTY2hlbWVI
YW5kbGVyc0J5U2NoZW1lKQogICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZUhhbmRsZXJzLnNl
dChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLT5pZGVudGlmaWVyKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggNGE5NmI1ZTk5ODguLjZkOTYxYjY2
OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yMzcsNiAr
MjM3LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUp
ICYgV1NfVklTSUJMRSkpOwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24uY29weSgpOworI2lmIDAKICAgICBhdXRvKiBwcmVmZXJlbmNlcyA9IHBhZ2VDb25maWd1
cmF0aW9uLT5wcmVmZXJlbmNlcygpOwogICAgIGlmICghcHJlZmVyZW5jZXMgJiYgcGFnZUNvbmZp
Z3VyYXRpb24tPnBhZ2VHcm91cCgpKSB7CiAgICAgICAgIHByZWZlcmVuY2VzID0gJnBhZ2VDb25m
aWd1cmF0aW9uLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKQEAgLTI0Niw2ICsyNDcsNyBA
QCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbiwgSFdORCBwYQogICAgICAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHVudGlsIGl0IGlzIHN1cHBvcnRlZC4KICAgICAgICAgcHJlZmVyZW5jZXMt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKTsKICAgICB9CisjZW5kaWYK
IAogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCA9IHBhZ2VDb25maWd1cmF0aW9uLT5w
cm9jZXNzUG9vbCgpOwogICAgIG1fcGFnZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCpt
X3BhZ2VDbGllbnQsIFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAyODE4OWM4MmRhNi4uMzM2YWNmMWE0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKQEAgLTk1LDYgKzk1LDkgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgp
KTsKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkocmVjdCk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTg4LDcgKzU5MSw3IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5CiAgICAgICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
KQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVY
VFVSRV9NQVBQRVIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IG1ha2VVbmlxdWU8TGF5ZXJU
cmVlSG9zdD4obV93ZWJQYWdlKTsKICAgICAgICAgY2hhbmdlV2luZG93U2NyZWVuKCk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRleCA0YTVlMjFhMmUz
NS4uMzRkNzIxMDRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5o
CkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCIKKworI2Vsc2UgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1RFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwpA
QCAtMjIzLDMgKzIyNiw1IEBAIGlubGluZSBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzCiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
SG9zdFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi41N2RmOTFiYjZkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5oIgorCisjaWYgVVNF
KEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyTGF5ZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3Rh
dGljIEludFNpemUgZ2V0V2ViVmlld1NpemUoSFdORCB3aW5kb3cpCit7CisgICAgUkVDVCByOwor
ICAgIEdldENsaWVudFJlY3Qod2luZG93LCAmcik7CisgICAgcmV0dXJuIHsgci5yaWdodCwgci5i
b3R0b20gfTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0OjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkK
K3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250
ZXh0KCkKK3sKKyAgICBpZiAoIXByZXBhcmVGb3JSZW5kZXJpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSW50U2l6ZSB3aW5kb3dTaXplID0gZ2V0V2ViVmlld1NpemUod2luZG93KCkpOwor
ICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5kb3dTaXplLmhlaWdo
dCgpKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIGRvd25j
YXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbV9yb290TGF5ZXIpLmxheWVyKCkucGFp
bnQoKTsKKyAgICBtX2Zwc0NvdW50ZXIudXBkYXRlRlBTQW5kRGlzcGxheSgqbV90ZXh0dXJlTWFw
cGVyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBtX2NvbnRl
eHQtPnN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAoIWZyYW1lVmlldy0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX292ZXJsYXlDb21wb3NpdGluZ0xheWVyKQorICAgICAgICBtX292
ZXJsYXlDb21wb3NpdGluZ0xheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgbV9yb290TGF5ZXItPnNpemUoKSkpOworCisgICAgZG93bmNhc3Q8R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RMYXllcikudXBkYXRlQmFja2luZ1N0b3JlSW5j
bHVkaW5nU3ViTGF5ZXJzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQoreworICAgIGZsdXNoQW5kUmVuZGVyTGF5ZXJz
KCk7CisKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW4g
Y2FzZSBhbiBhbmltYXRpb24gaXMgcnVubmluZywgd2Ugc2hvdWxkIGZsdXNoIGFnYWluIHNvb24u
CisgICAgaWYgKGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPihtX3Jvb3RMYXll
ci5nZXQoKSktPmxheWVyKCkuZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMo
KSkKKyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK0xheWVyVHJlZUhvc3Q6Okxh
eWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQor
ICAgICwgbV9sYXllckZsdXNoVGltZXIoKnRoaXMsICZMYXllclRyZWVIb3N0OjpsYXllckZsdXNo
VGltZXJGaXJlZCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQoYm9vbCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpCit7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hv
dCgxNl9tcyk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1
c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFNpemUgcGFnZVNpemUgPSBnZXRXZWJWaWV3U2l6ZSh3aW5kb3coKSk7
CisKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShudWxscHRyLCAqdGhp
cyk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0Q29udGVudHNPcGFxdWUoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXpl
KHBhZ2VTaXplKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisjaWZuZGVm
IE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJSb290IGxheWVyIik7CisjZW5kaWYK
KyAgICBhcHBseURldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2Yg
dGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIGlm
ICghbV9jb250ZXh0KQorICAgICAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRl
eHRGb3JXaW5kb3cod2luZG93KCkpOworCisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBtX3Rl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgIGRvd25jYXN0PEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigqbV9yb290TGF5ZXIpLmxheWVyKCkuc2V0VGV4dHVy
ZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQor
eworICAgIHByZXBhcmVGb3JSZW5kZXJpbmcoKTsKKworICAgIGlmICghbGF5ZXIpIHsKKyAgICAg
ICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICAgICAgbV9yb290TGF5ZXIgPSBudWxs
cHRyOworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBudWxscHRyOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNo
eS4KKyAgICBpbml0aWFsaXplKCk7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgIG1fcm9vdExh
eWVyLT5hZGRDaGlsZCgqbGF5ZXIpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIg
PT0gbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX292ZXJsYXlDb21wb3NpdGlu
Z0xheWVyKQorICAgICAgICBtX292ZXJsYXlDb21wb3NpdGluZ0xheWVyLT5yZW1vdmVGcm9tUGFy
ZW50KCk7CisKKyAgICBtX292ZXJsYXlDb21wb3NpdGluZ0xheWVyID0gbGF5ZXI7CisgICAgaWYg
KG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGls
ZCgqbV9vdmVybGF5Q29tcG9zaXRpbmdMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
cm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENv
bnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QpCit7CisgICAgc2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQoreworICAgIGlmICghZW5hYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+dXBkYXRlUmVu
ZGVyaW5nKCk7CisKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBmbHVzaEFuZFJlbmRlckxheWVy
cygpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNr
SUQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNpemVE
aWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAoIWVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkg
PT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5l
d1NpemUpOworICAgIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKK3sK
K30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcoKQoreworfQorCitXZWJD
b3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZh
Y3RvcnkoKQoreworICAgIHJldHVybiBudWxscHRyOyAKK30KKwordm9pZCBMYXllclRyZWVIb3N0
Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJDb3JlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMmJikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRJc0Rp
c2NhcmRhYmxlKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKK30KKworUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZy
ZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitI
V05EIExheWVyVHJlZUhvc3Q6OndpbmRvdygpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SFdORD4obV93ZWJQYWdlLm5hdGl2ZVdpbmRvd0hhbmRsZSgpKTsKK30KKworYm9vbCBMYXll
clRyZWVIb3N0OjplbmFibGVkKCkKK3sKKyAgICByZXR1cm4gd2luZG93KCkgJiYgbV9yb290TGF5
ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhaW50Q29u
dGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0VG9QYWludCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpCit7
CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAg
ICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5wYWludChjb250ZXh0
LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3RUb1BhaW50KSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7
Cit9CisKK2Zsb2F0IExheWVyVHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAg
aWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRmxvYXRTaXpl
JiBzaXplID0gbV9yb290TGF5ZXItPnNpemUoKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG07CisgICAgbS5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAvLyBDZW50ZXIgdmll
dworICAgIGRvdWJsZSB0eCA9IChzaXplLndpZHRoKCkgLSBzaXplLndpZHRoKCkgLyBkZXZpY2VT
Y2FsZUZhY3RvcigpKSAvIDIuMDsKKyAgICBkb3VibGUgdHkgPSAoc2l6ZS5oZWlnaHQoKSAtIHNp
emUuaGVpZ2h0KCkgLyBkZXZpY2VTY2FsZUZhY3RvcigpKSAvIDIuMDsKKyAgICBtLnRyYW5zbGF0
ZSh0eCwgdHkpOworICAgIG1fcm9vdExheWVyLT5zZXRUcmFuc2Zvcm0obSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVf
TUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0
VGV4dHVyZU1hcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40
YjNkZjEwZmRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaApA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUikKKworI2luY2x1ZGUgIkNhbGxiYWNrSUQu
aCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNw
bGF5UmVmcmVzaE1vbml0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dMQ29udGV4dC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1TY3JlZW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJGUFNDb3Vu
dGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBH
cmFwaGljc0xheWVyRmFjdG9yeTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xh
c3MgUGFnZTsKK3N0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBMYXllclRyZWVIb3N0IDogcHVibGljIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOworCisgICAg
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVk
TGF5ZXJGbHVzaChib29sKTsKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZv
aWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldFZpZXdPdmVybGF5
Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2
b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisgICAgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICBib29sIGZvcmNlUmVwYWludEFzeW5jKENh
bGxiYWNrSUQpOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBuZXdTaXplKTsKKyAgICB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVS
ZW5kZXJpbmcoKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NM
YXllckZhY3RvcnkoKTsKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNv
cmU6OlZpZXdwb3J0QXR0cmlidXRlcyYmKTsKKyAgICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9v
bCk7CisgICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1v
bml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
RGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlEOyB9CisKK3By
aXZhdGU6CisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZvaWQgcGFpbnRDb250ZW50
cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBIV05E
IHdpbmRvdygpOworICAgIGJvb2wgZW5hYmxlZCgpOworICAgIHZvaWQgY29tcG9zaXRlTGF5ZXJz
VG9Db250ZXh0KCk7CisgICAgdm9pZCBmbHVzaEFuZFJlbmRlckxheWVycygpOworICAgIGJvb2wg
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVk
Q29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVk
KCk7CisgICAgYm9vbCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgdm9pZCBhcHBseURldmlj
ZVNjYWxlRmFjdG9yKCk7CisKKyAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OworICAgIExheWVyVHJlZUNvbnRl
eHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIG1f
ZGlzcGxheUlEOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXll
cjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX292ZXJsYXlDb21wb3NpdGluZ0xheWVy
IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
PiBtX3RleHR1cmVNYXBwZXI7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckZQU0NvdW50ZXIg
bV9mcHNDb3VudGVyOworICAgIFdlYkNvcmU6OlRpbWVyIG1fbGF5ZXJGbHVzaFRpbWVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJf
VEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDhiYTkzNDJiYzBmLi45NjlmODdmOGEzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQyNyw2ICs0MjcsOSBAQCBXZWJQ
YWdlOjpXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYmIHBhcmFtZXRlcnMpCiAgICAgLCBtX3ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3Io
bWFrZVVuaXF1ZTxWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yPigqdGhpcykpCiAjZWxpZiBF
TkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oR1RLKQogICAgICwgbV9hY2Nlc3NpYmls
aXR5T2JqZWN0KG51bGxwdHIpCisjZW5kaWYKKyNpZiBQTEFURk9STShXSU4pCisgICAgLCBtX25h
dGl2ZVdpbmRvd0hhbmRsZShwYXJhbWV0ZXJzLm5hdGl2ZVdpbmRvd0hhbmRsZSkKICNlbmRpZgog
ICAgICwgbV9zZXRDYW5TdGFydE1lZGlhVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2Vi
UGFnZTo6c2V0Q2FuU3RhcnRNZWRpYVRpbWVyRmlyZWQpCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVO
VVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMTVm
MjhjZjI2NzMuLjUxNDYzZGZhODhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCkBAIC0xMzI4LDYgKzEzMjgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVt
b3ZlTWVkaWFVc2FnZU1hbmFnZXJTZXNzaW9uKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbklkZW50aWZp
ZXIpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgdWludDY0X3QgbmF0aXZlV2lu
ZG93SGFuZGxlKCkgeyByZXR1cm4gbV9uYXRpdmVXaW5kb3dIYW5kbGU7IH0KKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIFdlYlBhZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMmJik7CiAKQEAgLTE4MjIsNiArMTgyNiwxMCBAQCBwcml2YXRlOgogICAg
IEdSZWZQdHI8QXRrT2JqZWN0PiBtX2FjY2Vzc2liaWxpdHlPYmplY3Q7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKFdJTikKKyAgICB1aW50NjRfdCBtX25hdGl2ZVdpbmRvd0hhbmRsZSB7IDAgfTsK
KyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgUmVmUHRyPFBhZ2VCYW5u
ZXI+IG1faGVhZGVyQmFubmVyOwogICAgIFJlZlB0cjxQYWdlQmFubmVyPiBtX2Zvb3RlckJhbm5l
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01h
aW5XaW4uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldp
bi5jcHAKaW5kZXggZjBlYTVjNTcwM2IuLmUzMmYzMzRhZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcApAQCAtMzcsNiArMzcs
NyBAQCBjbGFzcyBXZWJQcm9jZXNzTWFpbldpbiBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9j
ZXNzTWFpbkJhc2UgewogcHVibGljOgogICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgb3Zl
cnJpZGUKICAgICB7CisgICAgICAgIFNldFByb2Nlc3NEUElBd2FyZSgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5D
YWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKaW5kZXggMzVl
ZGY4NTNmODkuLjExMzE3MGNlMjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dp
bkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKQEAg
LTM5LDYgKzM5LDcgQEAgc2V0KFVTRV9BTkdMRV9FR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfQ0FJUk8gT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0YgT04pCiBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1VSTCBPTikKK1NFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9HUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUiBPTikKIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9FR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfT1BFTkdM
X0VTIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoSEFWRV9PUEVOR0xfRVNfMyBPTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399942</attachid>
            <date>2020-05-21 01:15:55 -0700</date>
            <delta_ts>2020-05-24 14:07:16 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>graphics-layer-texture-mapper.patch</filename>
            <type>text/plain</type>
            <size>22353</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGE5NGM3ZTExY2U2Li4zYjk0ZjRkYmEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04MSw3ICs4MSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0
dXJlTWFwcGVyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmluZGV4IDhjODBkZTJmMzJlLi4wMzE3NWJhZjU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTExNCw2ICsx
MTQsOSBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGVu
Y29kZXIgPDwgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIGVuY29kZXIgPDwgbmF0aXZlV2luZG93SGFuZGxlOwogI2VuZGlmCiAgICAgZW5jb2RlciA8
PCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVkOwogICAgIGVuY29kZXIgPDwgYXBwbGVN
YWlsTGluZXNDbGFtcEVuYWJsZWQ7CkBAIC0zNTQsNiArMzU3LDExIEBAIE9wdGlvbmFsPFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlY29kCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmF0aXZlV2lu
ZG93SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0Vu
YWJsZWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggY2ZmMzEzNTVjMWEu
LmVhOWZjZDRkN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCkBAIC0xNzQsNiArMTc0LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgewogI2VuZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0
dGFjaG1lbnQgaG9zdEZpbGVEZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVN
YWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBF
bmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWNj
MzIxNjZjZDAuLjFlMDVkYzVkZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTc4MTQsNiArNzgxNCwxMCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwog
ICAgIHBhcmFtZXRlcnMuaG9zdEZpbGVEZXNjcmlwdG9yID0gcGFnZUNsaWVudCgpLmhvc3RGaWxl
RGVzY3JpcHRvcigpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgcGFyYW1ldGVy
cy5uYXRpdmVXaW5kb3dIYW5kbGUgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih2aWV3V2lk
Z2V0KCkpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV91cmxTY2hlbWVI
YW5kbGVyc0J5U2NoZW1lKQogICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZUhhbmRsZXJzLnNl
dChpdGVyYXRvci5rZXksIGl0ZXJhdG9yLnZhbHVlLT5pZGVudGlmaWVyKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggNGE5NmI1ZTk5ODguLjZkOTYxYjY2
OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0yMzcsNiAr
MjM3LDcgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUp
ICYgV1NfVklTSUJMRSkpOwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3Vy
YXRpb24uY29weSgpOworI2lmIDAKICAgICBhdXRvKiBwcmVmZXJlbmNlcyA9IHBhZ2VDb25maWd1
cmF0aW9uLT5wcmVmZXJlbmNlcygpOwogICAgIGlmICghcHJlZmVyZW5jZXMgJiYgcGFnZUNvbmZp
Z3VyYXRpb24tPnBhZ2VHcm91cCgpKSB7CiAgICAgICAgIHByZWZlcmVuY2VzID0gJnBhZ2VDb25m
aWd1cmF0aW9uLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKQEAgLTI0Niw2ICsyNDcsNyBA
QCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbiwgSFdORCBwYQogICAgICAgICAvLyBEaXNhYmxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHVudGlsIGl0IGlzIHN1cHBvcnRlZC4KICAgICAgICAgcHJlZmVyZW5jZXMt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKTsKICAgICB9CisjZW5kaWYK
IAogICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCA9IHBhZ2VDb25maWd1cmF0aW9uLT5w
cm9jZXNzUG9vbCgpOwogICAgIG1fcGFnZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCpt
X3BhZ2VDbGllbnQsIFdURk1vdmUocGFnZUNvbmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAyODE4OWM4MmRhNi4uMzM2YWNmMWE0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5j
cHAKQEAgLTk1LDYgKzk1LDkgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgp
KTsKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkocmVjdCk7Cisj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTg4LDcgKzU5MSw3IEBAIHZvaWQg
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5CiAgICAgICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
KQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQodHJ1ZSk7CiAgICAgfSBlbHNlIHsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVY
VFVSRV9NQVBQRVIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IG1ha2VVbmlxdWU8TGF5ZXJU
cmVlSG9zdD4obV93ZWJQYWdlKTsKICAgICAgICAgY2hhbmdlV2luZG93U2NyZWVuKCk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRleCA0YTVlMjFhMmUz
NS4uMzRkNzIxMDRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5o
CkBAIC0zOSw4ICszOSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCIKKworI2Vsc2UgLy8gVVNFKEdSQVBISUNTX0xBWUVS
X1RFWFRVUkVfTUFQUEVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OwpA
QCAtMjIzLDMgKzIyNiw1IEBAIGlubGluZSBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzCiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
SG9zdFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5kNGRjMWRlYTUxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RUZXh0dXJlTWFwcGVyLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZW1wb3JhcnlP
cGVuR0xTZXR0aW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitib29sIExheWVyVHJlZUhvc3Q6OnByZXBh
cmVGb3JSZW5kZXJpbmcoKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpjb21w
b3NpdGVMYXllcnNUb0NvbnRleHQoKQoreworICAgIGlmICghcHJlcGFyZUZvclJlbmRlcmluZygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRTaXplIHdpbmRvd1NpemUgPSBleHBhbmRlZElu
dFNpemUobV9yb290TGF5ZXItPnNpemUoKSk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dT
aXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0KCkpOworCisgICAgbV90ZXh0dXJlTWFwcGVy
LT5iZWdpblBhaW50aW5nKCk7CisgICAgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI+KCptX3Jvb3RMYXllcikubGF5ZXIoKS5wYWludCgpOworICAgIG1fZnBzQ291bnRlci51cGRh
dGVGUFNBbmREaXNwbGF5KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+
ZW5kUGFpbnRpbmcoKTsKKworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworYm9v
bCBMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXco
KTsKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOworICAgIGlmICghZnJhbWVWaWV3LT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdT
dWJmcmFtZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb3ZlcmxheUNv
bXBvc2l0aW5nTGF5ZXIpCisgICAgICAgIG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXItPmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3Jvb3RMYXllci0+c2l6
ZSgpKSk7CisKKyAgICBkb3duY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4oKm1fcm9v
dExheWVyKS51cGRhdGVCYWNraW5nU3RvcmVJbmNsdWRpbmdTdWJMYXllcnMoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCgp
Cit7CisgICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKworICAgIGlmICghZW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbiBjYXNlIGFuIGFuaW1hdGlvbiBpcyBydW5uaW5n
LCB3ZSBzaG91bGQgZmx1c2ggYWdhaW4gc29vbi4KKyAgICBpZiAoZG93bmNhc3Q8R3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI+KG1fcm9vdExheWVyLmdldCgpKS0+bGF5ZXIoKS5kZXNjZW5kYW50
c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKK30KKworTGF5ZXJUcmVlSG9zdDo6TGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdl
KQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcigqdGhp
cywgJkxheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQoreworICAgIG1fcm9vdExh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG51bGxwdHIsICp0aGlzKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcm9vdExheWVyLT5zZXRDb250ZW50
c09wYXF1ZSh0cnVlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Uuc2l6ZSgp
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisjaWZuZGVmIE5ERUJVRwor
ICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJSb290IGxheWVyIik7CisjZW5kaWYKKyAgICBhcHBs
eURldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1
cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIG1fY29udGV4dCA9
IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh3aW5kb3coKSk7CisKKyAgICBpZiAo
IW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlKCk7CisgICAgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCptX3Jvb3RM
YXllcikubGF5ZXIoKS5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJv
b2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0
U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMTZfbXMpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xh
eWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sK
KyAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllciA9PSBncmFwaGljc0xheWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgbV9y
b290Q29tcG9zaXRpbmdMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgbV9yb290Q29t
cG9zaXRpbmdMYXllciA9IGdyYXBoaWNzTGF5ZXI7CisgICAgaWYgKG1fcm9vdENvbXBvc2l0aW5n
TGF5ZXIpCisgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZEF0SW5kZXgoKm1fcm9vdENvbXBv
c2l0aW5nTGF5ZXIsIDApOworCisgICAgaWYgKCFncmFwaGljc0xheWVyKQorICAgICAgICBjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldFZpZXdP
dmVybGF5Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7
CisgICAgaWYgKG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIgPT0gZ3JhcGhpY3NMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIpCisgICAg
ICAgIG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAg
IG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIgPSBncmFwaGljc0xheWVyOworICAgIGlmIChtX292
ZXJsYXlDb21wb3NpdGluZ0xheWVyKQorICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoKm1f
b3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jvb3RM
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50
cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0KQoreworICAgIHNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnVwZGF0ZVJlbmRlcmlu
ZygpOworCisgICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOwor
fQorCitib29sIExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFu
Z2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAoIWVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUp
OworICAgIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKK3sKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcoKQoreworfQorCitXZWJDb3JlOjpH
cmFwaGljc0xheWVyRmFjdG9yeSogTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3Rvcnko
KQoreworICAgIHJldHVybiBudWxscHRyOyAKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpjb250
ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworfQorCit2b2lkIExh
eWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJDb3JlOjpWaWV3cG9y
dEF0dHJpYnV0ZXMmJikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRh
YmxlKGJvb2wpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKCkKK3sKK30KKworUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6
OlBsYXRmb3JtRGlzcGxheUlEKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitIV05EIExh
eWVyVHJlZUhvc3Q6OndpbmRvdygpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SFdO
RD4obV93ZWJQYWdlLm5hdGl2ZVdpbmRvd0hhbmRsZSgpKTsKK30KKworYm9vbCBMYXllclRyZWVI
b3N0OjplbmFibGVkKCkKK3sKKyAgICByZXR1cm4gd2luZG93KCkgJiYgbV9yb290Q29tcG9zaXRp
bmdMYXllcjsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdFRvUGFpbnQsIEdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKQoreworICAgIGNvbnRleHQu
c2F2ZSgpOworICAgIGNvbnRleHQuY2xpcChyZWN0VG9QYWludCk7CisgICAgbV93ZWJQYWdlLmNv
cmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50
UmVjdChyZWN0VG9QYWludCkpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmbG9hdCBM
YXllclRyZWVIb3N0OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
d2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3Q6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSA9IG1fcm9vdExheWVyLT5zaXplKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtOworICAgIG0uc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgLy8gQ2VudGVyIHZp
ZXcKKyAgICBkb3VibGUgdHggPSAoc2l6ZS53aWR0aCgpIC0gc2l6ZS53aWR0aCgpIC8gZGV2aWNl
U2NhbGVGYWN0b3IoKSkgLyAyLjA7CisgICAgZG91YmxlIHR5ID0gKHNpemUuaGVpZ2h0KCkgLSBz
aXplLmhlaWdodCgpIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSkgLyAyLjA7CisgICAgbS50cmFuc2xh
dGUodHgsIHR5KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0VHJhbnNmb3JtKG0pOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJF
X01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9z
dFRleHR1cmVNYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
Y2I5OGI4YjZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmgK
QEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9URVhU
VVJFX01BUFBFUikKKworI2luY2x1ZGUgIkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJMYXllclRy
ZWVDb250ZXh0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dMQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsK
K2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgUGFnZTsKK3N0cnVjdCBWaWV3
cG9ydEF0dHJpYnV0ZXM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
OworCitjbGFzcyBMYXllclRyZWVIb3N0IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxp
Y2l0IExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOworCisgICAgY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYgbGF5ZXJUcmVlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsg
fQorICAgIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZv
aWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAg
ICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldFZpZXdPdmVybGF5Um9vdExheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNw
bGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0
ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBmb3JjZVJlcGFp
bnQoKTsKKyAgICBib29sIGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpOworICAgIHZvaWQg
c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lk
IHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmcoKTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKTsKKyAgICB2
b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZv
aWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYmKTsKKyAgICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCk7CisgICAgdm9pZCBkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQpOworICAgIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlEOyB9CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAorICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiByZWN0VG9QYWludCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3Ip
IG92ZXJyaWRlOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBIV05EIHdpbmRvdygpOworICAgIGJvb2wg
ZW5hYmxlZCgpOworICAgIHZvaWQgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisgICAgdm9p
ZCBmbHVzaEFuZFJlbmRlckxheWVycygpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCk7CisgICAgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zm
c2V0KTsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKCk7CisgICAgYm9vbCBwcmVwYXJl
Rm9yUmVuZGVyaW5nKCk7CisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKCk7CisKKyAg
ICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29u
dGV4dD4gbV9jb250ZXh0OworICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0
OworICAgIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIG1fZGlzcGxheUlEOworICAgIFJlZlB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBtX3Jvb3RDb21wb3NpdGluZ0xheWVyIHsgbnVsbHB0ciB9OworICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIgeyBudWxscHRyIH07
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1h
cHBlcjsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyRlBTQ291bnRlciBtX2Zwc0NvdW50ZXI7
CisgICAgV2ViQ29yZTo6VGltZXIgbV9sYXllckZsdXNoVGltZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBF
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXgg
NGFjNDQ3YzFjOGYuLjE2MjFmNzZjMmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNDI3LDYgKzQyNyw5IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
UGFnZUlkZW50aWZpZXIgcGFnZUlELCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1l
dGVycykKICAgICAsIG1fdmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcihtYWtlVW5pcXVlPFZp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I+KCp0aGlzKSkKICNlbGlmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZKSAmJiBQTEFURk9STShHVEspCiAgICAgLCBtX2FjY2Vzc2liaWxpdHlPYmplY3QobnVs
bHB0cikKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTikKKyAgICAsIG1fbmF0aXZlV2luZG93SGFu
ZGxlKHBhcmFtZXRlcnMubmF0aXZlV2luZG93SGFuZGxlKQogI2VuZGlmCiAgICAgLCBtX3NldENh
blN0YXJ0TWVkaWFUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJQYWdlOjpzZXRDYW5T
dGFydE1lZGlhVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAwYjFkODFjODY5OC4uZTY3
Y2FmYTRkMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTEzMzAsNiArMTMzMCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVNZWRpYVVzYWdl
TWFuYWdlclNlc3Npb24oV2ViQ29yZTo6TWVkaWFTZXNzaW9uSWRlbnRpZmllcik7CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7
IHJldHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
V2ViUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyYmKTsKIApAQCAtMTgyNCw2ICsxODI4LDEwIEBAIHByaXZhdGU6CiAgICAgR1JlZlB0cjxBdGtP
YmplY3Q+IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lO
KQorICAgIHVpbnQ2NF90IG1fbmF0aXZlV2luZG93SGFuZGxlIHsgMCB9OworI2VuZGlmCisKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZWZQdHI8UGFnZUJhbm5lcj4gbV9oZWFkZXJC
YW5uZXI7CiAgICAgUmVmUHRyPFBhZ2VCYW5uZXI+IG1fZm9vdGVyQmFubmVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAppbmRleCBm
MGVhNWM1NzAzYi4uODliYzE1OWRmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0yOSw2ICsyOSwxMCBAQAogI2luY2x1
ZGUgIkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgPE9iamJhc2UuaD4KKyNpbmNsdWRlIDx3dGYvd2luL1NvZnRMaW5raW5nLmg+CisKK1NP
RlRfTElOS19MSUJSQVJZKHVzZXIzMik7CitTT0ZUX0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQ
cm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dCwgQk9PTCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdB
UkVORVNTX0NPTlRFWFQpKTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTM3LDYgKzQxLDEwIEBAIGNsYXNzIFdlYlByb2Nlc3NNYWluV2luIGZpbmFs
IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBw
bGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQogICAgIHsKKyAgICAgICAgaWYgKFNldFByb2Nl
c3NEcGlBd2FyZW5lc3NDb250ZXh0UHRyKCkpCisgICAgICAgICAgICBTZXRQcm9jZXNzRHBpQXdh
cmVuZXNzQ29udGV4dFB0cigpKERQSV9BV0FSRU5FU1NfQ09OVEVYVF9QRVJfTU9OSVRPUl9BV0FS
RV9WMik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNldFByb2Nlc3NEUElBd2FyZSgpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21h
a2UKaW5kZXggMzVlZGY4NTNmODkuLjExMzE3MGNlMjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fp
cm8uY21ha2UKQEAgLTM5LDYgKzM5LDcgQEAgc2V0KFVTRV9BTkdMRV9FR0wgT04pCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfQ0FJUk8gT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChV
U0VfQ0YgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1VSTCBPTikKK1NFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9HUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUiBPTikKIFNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9FR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfT1BFTkdMX0VTIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoSEFWRV9PUEVOR0xf
RVNfMyBPTikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400178</attachid>
            <date>2020-05-24 14:07:26 -0700</date>
            <delta_ts>2020-05-26 13:01:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211883-20200525060725.patch</filename>
            <type>text/plain</type>
            <size>30026</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxOTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhmZTZjNGExNjVkODJkNGMz
Yjk0N2MyZWE3NjEyYTU1ZmNhYmU1MTMuLmY2NGMyOTFlYjFkYmQ2ZGFkZTkyNTAyZjEwOTgwNTc4
YzNlZmM1YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIgQEAKKzIwMjAtMDUtMjQgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtX
SzJdIFVzZSBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciBmb3IgQWNjZWxlcmF0ZWQgQ29tcG9z
aXRpbmcgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjExODgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIgaXMgYSBzaW1wbGUgR3JhcGhpY3NMYXllcgor
ICAgICAgICBpbXBsZW1lbnRhdGlvbiB1c2luZyBUZXh0dXJlTWFwcGVyIHdoaWNoIGlzIHVzZWQg
V2luQ2Fpcm8gV2ViS2l0MS4KKworICAgICAgICBBZGQgYSBuZXcgTGF5ZXJUcmVlSG9zdCBpbXBs
ZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIgYnkgY29w
eWluZyBXaW5DYWlybyBXZWJLaXQxJ3MKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQuCisKKyAgICAgICAgV2luZG93cyBXZWJLaXRUZXN0UnVubmVyIGNhbid0IGNhcHR1cmUg
dGhlIHdpbmRvdyBjb250ZW50IGZvcgorICAgICAgICBwaXhlbCBkdW1wIHRlc3RzIHlldC4KKwor
ICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2Vi
Vmlldyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpwcmVwYXJlRm9yUmVuZGVy
aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlTGF5ZXJzVG9D
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRp
bWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0OjpzZXRWaWV3T3ZlcmxheVJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0OjpwYXVzZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OnJlc3VtZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Omdy
YXBoaWNzTGF5ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y29u
dGVudHNTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZENo
YW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6
OnNldElzRGlzY2FyZGFibGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0Ojp3aW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjplbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlSG9zdFRleHR1cmVNYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OmxheWVyVHJlZUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0OjpkaXNwbGF5SUQgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpuYXRpdmVXaW5kb3dIYW5kbGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcDoKKwogMjAyMC0wNS0yMSAgRW5yaXF1
ZSBPY2HDsWEgR29uesOhbGV6ICA8ZW9jYW5oYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3Ry
ZWFtZXJdW0dUS11bV1BFXSBFeHBvc2UgYW5kIGhvbm9yIHRoZSBtZWRpYSBjb250ZW50IHR5cGVz
IHJlcXVpcmluZyBoYXJkd2FyZSBzdXBwb3J0IHNldHRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtl
CmluZGV4IGE5NGM3ZTExY2U2ODk4ZmEwYzU4YTZiMDZiMTkzMTA3ODA3ZGZhODQuLjNiOTRmNGRi
YTJjM2I5NjU5YTEyNjliZmUwMzBkNWQwMTBiNWIxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFr
ZQpAQCAtODEsNyArODEsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5n
QXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5jcHAKIAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCBhMWM2ZDE2
ZTllNThmZmU2MGYyM2I5YTU0NzQ4ZTAwN2RmODNkMDY0Li5jYWU0ZDE4Zjc4OWU4YzJkM2Y4ZTdj
MWFlNzQ2YTE4MTc5MmRkNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtMTE1LDYgKzExNSw5IEBAIHZvaWQgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICNlbmRpZgogI2lmIFVTRShXUEVfUkVOREVSRVIpCiAgICAgZW5jb2RlciA8PCBob3N0RmlsZURl
c2NyaXB0b3I7CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU4pCisgICAgZW5jb2RlciA8PCBuYXRp
dmVXaW5kb3dIYW5kbGU7CiAjZW5kaWYKICAgICBlbmNvZGVyIDw8IGFwcGxlTWFpbFBhZ2luYXRp
b25RdWlya0VuYWJsZWQ7CiAgICAgZW5jb2RlciA8PCBhcHBsZU1haWxMaW5lc0NsYW1wRW5hYmxl
ZDsKQEAgLTM1Nyw2ICszNjAsMTEgQEAgT3B0aW9uYWw8V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cz4gV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2QKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5uYXRpdmVXaW5kb3dIYW5kbGUpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworI2VuZGlmCisKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHBhcmFtZXRlcnMuYXBwbGVNYWlsUGFnaW5hdGlvblF1aXJrRW5hYmxlZCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAzNDFlNGRlMjc3NTViMDg1Y2NmYzYyNDllOGFlMGY2
NjM0ZTg1Yjc0Li4yZWI3MWU5ZjIyMzkxZWZmMWNiNzA3MzMwZTU0ZmRjZjRjNWIwZjBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCkBA
IC0xNzUsNiArMTc1LDkgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgewogI2Vu
ZGlmCiAjaWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBJUEM6OkF0dGFjaG1lbnQgaG9zdEZpbGVE
ZXNjcmlwdG9yOworI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHVpbnQ2NF90IG5hdGl2
ZVdpbmRvd0hhbmRsZTsKICNlbmRpZgogICAgIGJvb2wgYXBwbGVNYWlsUGFnaW5hdGlvblF1aXJr
RW5hYmxlZDsKICAgICBib29sIGFwcGxlTWFpbExpbmVzQ2xhbXBFbmFibGVkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjBhMzhkOGE1NWFhYjIzYWY4MTJl
NDA0YTQ1NGQyODgwODNkZDBmMS4uODU4Y2NlNWZkZDgwZjUxZDI0ZWE2YmZlMjJhODBjOWFiZmU4
ODlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03ODE0
LDYgKzc4MTQsMTAgQEAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBXZWJQYWdlUHJveHk6OmNy
ZWF0aW9uUGFyYW1ldGVycyhXZWJQcm9jZXNzUHJveHkmIHByb2MKICAgICBwYXJhbWV0ZXJzLmhv
c3RGaWxlRGVzY3JpcHRvciA9IHBhZ2VDbGllbnQoKS5ob3N0RmlsZURlc2NyaXB0b3IoKTsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHBhcmFtZXRlcnMubmF0aXZlV2luZG93SGFu
ZGxlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4odmlld1dpZGdldCgpKTsKKyNlbmRpZgor
CiAgICAgZm9yIChhdXRvJiBpdGVyYXRvciA6IG1fdXJsU2NoZW1lSGFuZGxlcnNCeVNjaGVtZSkK
ICAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVIYW5kbGVycy5zZXQoaXRlcmF0b3Iua2V5LCBp
dGVyYXRvci52YWx1ZS0+aWRlbnRpZmllcigpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuY3BwCmluZGV4IDRhOTZiNWU5OTg4MDBiYjdiMWNhMTA0Zjg2MGU5NmRjZjQxOGQx
NzguLjI3Njg2ZDdhOTQwNDQxMDU4ZDRkMTc2YTM3MzljMmU3ZDQ5NDUxMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKQEAgLTIzNywxNiArMjM3LDYgQEAgV2ViVmll
dzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24sIEhXTkQgcGEKICAgICBBU1NFUlQobV9pc1Zpc2libGUgPT0gc3RhdGljX2Nhc3Q8
Ym9vbD4oOjpHZXRXaW5kb3dMb25nKG1fd2luZG93LCBHV0xfU1RZTEUpICYgV1NfVklTSUJMRSkp
OwogCiAgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24uY29weSgpOwot
ICAgIGF1dG8qIHByZWZlcmVuY2VzID0gcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VzKCk7
Ci0gICAgaWYgKCFwcmVmZXJlbmNlcyAmJiBwYWdlQ29uZmlndXJhdGlvbi0+cGFnZUdyb3VwKCkp
IHsKLSAgICAgICAgcHJlZmVyZW5jZXMgPSAmcGFnZUNvbmZpZ3VyYXRpb24tPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpOwotICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5j
ZXMocHJlZmVyZW5jZXMpOwotICAgIH0KLSAgICBpZiAocHJlZmVyZW5jZXMpIHsKLSAgICAgICAg
Ly8gRGlzYWJsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB1bnRpbCBpdCBpcyBzdXBwb3J0ZWQu
Ci0gICAgICAgIHByZWZlcmVuY2VzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChm
YWxzZSk7Ci0gICAgfQotCiAgICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sID0gcGFnZUNv
bmZpZ3VyYXRpb24tPnByb2Nlc3NQb29sKCk7CiAgICAgbV9wYWdlID0gcHJvY2Vzc1Bvb2wtPmNy
ZWF0ZVdlYlBhZ2UoKm1fcGFnZUNsaWVudCwgV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwog
ICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29y
ZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRl
eCBmNWYyNGJjMGZkMTJmMmRlODFmMmFjNTJmZGYwY2EyZjcxYmJhY2IzLi41NjQxMjZlMTRlMjI4
ODJlNzg5NmZjZmYzZTZkMzJmNzIyZWVjNDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0
ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCkBAIC05
NSw2ICs5NSw5IEBAIHZvaWQgRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAobV9sYXllclRy
ZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7CisjaWYg
VVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQorICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHJlY3QpOworI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU4OCw3ICs1OTEsNyBAQCB2b2lkIERyYXdpbmdB
cmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShH
cmFwaGljc0xheQogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRy
dWUpOwogICAgIH0gZWxzZSB7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQ
UEVSKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBtYWtlVW5pcXVlPExheWVyVHJlZUhvc3Q+
KG1fd2ViUGFnZSk7CiAgICAgICAgIGNoYW5nZVdpbmRvd1NjcmVlbigpOwogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmgKaW5kZXggNGE1ZTIxYTJlMzVmZWJiZjcx
OTgxYTZlMTc3ZjkxMzliODZmMmM5NS4uMzRkNzIxMDRhZTkzMmM1ZWI1MWRjZjEwZTU5NzZkZDQ4
ZDY4Y2JlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmgKQEAgLTM5
LDggKzM5LDExIEBACiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jZW5kaWYKKyNpZiBV
U0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJMYXllclRyZWVI
b3N0VGV4dHVyZU1hcHBlci5oIgorCisjZWxzZSAvLyBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVS
RV9NQVBQRVIpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7CkBAIC0yMjMs
MyArMjI2LDUgQEAgaW5saW5lIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+
IExheWVyVHJlZUhvc3Q6OmNyZWF0ZURpc3BsYXlSZWZyZXMKICNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBF
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0VGV4
dHVyZU1hcHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJhMGMzOWQyMDU3NjdiNzhiYzJhYzgxMjU0YzA2
OTRhZTMxZjNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdFRleHR1cmVNYXBwZXIuY3Bw
CkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RUZXh0dXJlTWFwcGVyLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQ
RVIpCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyR0wuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitib29sIExheWVyVHJlZUhvc3Q6OnByZXBhcmVGb3JS
ZW5kZXJpbmcoKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVM
YXllcnNUb0NvbnRleHQoKQoreworICAgIGlmICghcHJlcGFyZUZvclJlbmRlcmluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBJbnRTaXplIHdpbmRvd1NpemUgPSBleHBhbmRlZEludFNpemUo
bV9yb290TGF5ZXItPnNpemUoKSk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndp
ZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0KCkpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdp
blBhaW50aW5nKCk7CisgICAgZG93bmNhc3Q8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+KCpt
X3Jvb3RMYXllcikubGF5ZXIoKS5wYWludCgpOworICAgIG1fZnBzQ291bnRlci51cGRhdGVGUFNB
bmREaXNwbGF5KCptX3RleHR1cmVNYXBwZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFp
bnRpbmcoKTsKKworICAgIG1fY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKK30KKworYm9vbCBMYXll
clRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKKyAg
ICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
ICAgIGlmICghZnJhbWVWaWV3LT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFt
ZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb3ZlcmxheUNvbXBvc2l0
aW5nTGF5ZXIpCisgICAgICAgIG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXItPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZShGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3Jvb3RMYXllci0+c2l6ZSgpKSk7
CisKKyAgICBkb3duY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4oKm1fcm9vdExheWVy
KS51cGRhdGVCYWNraW5nU3RvcmVJbmNsdWRpbmdTdWJMYXllcnMoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCgpCit7Cisg
ICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJbiBjYXNlIGFuIGFuaW1hdGlvbiBpcyBydW5uaW5nLCB3ZSBz
aG91bGQgZmx1c2ggYWdhaW4gc29vbi4KKyAgICBpZiAoZG93bmNhc3Q8R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI+KG1fcm9vdExheWVyLmdldCgpKS0+bGF5ZXIoKS5kZXNjZW5kYW50c09yU2Vs
ZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+
c2NoZWR1bGVUaW1lZFJlbmRlcmluZ1VwZGF0ZSgpOworfQorCitMYXllclRyZWVIb3N0OjpMYXll
clRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKKyAg
ICAsIG1fbGF5ZXJGbHVzaFRpbWVyKCp0aGlzLCAmTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRp
bWVyRmlyZWQpCit7CisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobnVs
bHB0ciwgKnRoaXMpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Cisg
ICAgbV9yb290TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKHRydWUpOworICAgIG1fcm9vdExheWVy
LT5zZXRTaXplKG1fd2ViUGFnZS5zaXplKCkpOworICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIlJvb3Qg
bGF5ZXIiKTsKKyNlbmRpZgorICAgIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgIC8v
IFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBhY3RpdmUgT3BlbkdM
IGNvbnRleHQuCisgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2lu
ZG93KHdpbmRvdygpKTsKKworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgbV90ZXh0dXJlTWFw
cGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKyAgICBkb3duY2FzdDxHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcj4oKm1fcm9vdExheWVyKS5sYXllcigpLnNldFRleHR1cmVNYXBwZXIo
bV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRMYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0
OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpCit7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAo
IWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdM
YXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBpZiAobV9yb290Q29tcG9zaXRpbmdMYXllciA9
PSBncmFwaGljc0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RDb21wb3NpdGlu
Z0xheWVyID0gZ3JhcGhpY3NMYXllcjsKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBpZiAobV9vdmVybGF5Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKCptX292ZXJsYXlDb21wb3NpdGluZ0xheWVyKTsKKyAgICBpZiAobV9y
b290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKCptX3Jv
b3RDb21wb3NpdGluZ0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRWaWV3T3Zl
cmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQorewor
ICAgIGlmIChtX292ZXJsYXlDb21wb3NpdGluZ0xheWVyID09IGdyYXBoaWNzTGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fb3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIgPSBncmFwaGljc0xh
eWVyOworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgIGlmIChtX292
ZXJsYXlDb21wb3NpdGluZ0xheWVyKQorICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoKm1f
b3ZlcmxheUNvbXBvc2l0aW5nTGF5ZXIpOworICAgIGlmIChtX3Jvb3RDb21wb3NpdGluZ0xheWVy
KQorICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoKm1fcm9vdENvbXBvc2l0aW5nTGF5ZXIp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWRE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFlbmFibGVk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0KQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
KHNjcm9sbFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmZsdXNoQW5kUmVuZGVyTGF5
ZXJzKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93
ZWJQYWdlLmNvcmVQYWdlKCktPnVwZGF0ZVJlbmRlcmluZygpOworCisgICAgaWYgKCFmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29tcG9zaXRlTGF5
ZXJzVG9Db250ZXh0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkK
K3sKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6
OmZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworICAgIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXN1
bWVSZW5kZXJpbmcoKQoreworfQorCitXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogTGF5
ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmll
d3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYmKQoreworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9vbCkKK3sKK30KKwordm9pZCBM
YXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQoreworfQorCitS
ZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVh
dGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpCit7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0hXTkQgTGF5ZXJUcmVlSG9zdDo6d2luZG93KCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIV05EPihtX3dlYlBhZ2UubmF0aXZlV2luZG93
SGFuZGxlKCkpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OmVuYWJsZWQoKQoreworICAgIHJl
dHVybiB3aW5kb3coKSAmJiBtX3Jvb3RDb21wb3NpdGluZ0xheWVyOworfQorCit2b2lkIExheWVy
VHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0VG9QYWludCwgR3JhcGhpY3NMYXll
clBhaW50QmVoYXZpb3IpCit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5jbGlw
KHJlY3RUb1BhaW50KTsKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3RUb1BhaW50KSk7CisgICAg
Y29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Zsb2F0IExheWVyVHJlZUhvc3Q6OmRldmljZVNjYWxl
RmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcigpCit7CisgICAgY29uc3QgRmxvYXRTaXplJiBzaXplID0gbV9yb290TGF5ZXItPnNp
emUoKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG07CisgICAgbS5zY2FsZShkZXZpY2VT
Y2FsZUZhY3RvcigpKTsKKyAgICAvLyBDZW50ZXIgdmlldworICAgIGRvdWJsZSB0eCA9IChzaXpl
LndpZHRoKCkgLSBzaXplLndpZHRoKCkgLyBkZXZpY2VTY2FsZUZhY3RvcigpKSAvIDIuMDsKKyAg
ICBkb3VibGUgdHkgPSAoc2l6ZS5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCkgLyBkZXZpY2VTY2Fs
ZUZhY3RvcigpKSAvIDIuMDsKKyAgICBtLnRyYW5zbGF0ZSh0eCwgdHkpOworICAgIG1fcm9vdExh
eWVyLT5zZXRUcmFuc2Zvcm0obSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gVVNFKEdSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVIb3N0VGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0VGV4dHVyZU1hcHBlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNiOThiOGI2ZTRiYWFiZjJmNTRjYTBjYzdkNWExMTEwMTJhODBkNjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUhvc3RUZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUikKKworI2luY2x1ZGUg
IkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dMQ29u
dGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVN
YXBwZXJGUFNDb3VudGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzTGF5
ZXI7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJ
bnRTaXplOworY2xhc3MgUGFnZTsKK3N0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBMYXllclRyZWVIb3N0
IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3QoV2ViUGFn
ZSYpOworCisgICAgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZvaWQgc2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJO
ZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNl
dFZpZXdPdmVybGF5Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lk
IHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICBib29sIGZvcmNlUmVw
YWludEFzeW5jKENhbGxiYWNrSUQpOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAg
dm9pZCByZXN1bWVSZW5kZXJpbmcoKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9y
eSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKTsKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRy
aWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYmKTsKKyAgICB2b2lkIHNldElzRGlz
Y2FyZGFibGUoYm9vbCk7CisgICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNw
bGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworICAgIFdlYkNv
cmU6OlBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eUlEOyB9CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZvaWQg
cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0VG9QYWludCwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlOworICAgIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGluaXRpYWxpemUo
KTsKKyAgICBIV05EIHdpbmRvdygpOworICAgIGJvb2wgZW5hYmxlZCgpOworICAgIHZvaWQgY29t
cG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisgICAgdm9pZCBmbHVzaEFuZFJlbmRlckxheWVycygp
OworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBzY3JvbGxO
b25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKyAgICB2b2lkIGxheWVyRmx1
c2hUaW1lckZpcmVkKCk7CisgICAgYm9vbCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OworICAgIExh
eWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
RGlzcGxheUlEIG1fZGlzcGxheUlEOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RDb21wb3Np
dGluZ0xheWVyIHsgbnVsbHB0ciB9OworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fb3Zl
cmxheUNvbXBvc2l0aW5nTGF5ZXIgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyRlBTQ291bnRlciBtX2Zwc0NvdW50ZXI7CisgICAgV2ViQ29yZTo6VGltZXIgbV9s
YXllckZsdXNoVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFVTRShHUkFQSElDU19MQVlFUl9URVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMTRmZjBlYmI1MzRmMGU4OTQyNTEzYzBl
ZTE3NTc2MmY3ZWMzYWM4NS4uYzJiYjBiYTJjYmQ5YWVlNTMwN2Q3MDkwYTZmNzhjMTc5M2RmODY3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAg
LTQyNyw2ICs0MjcsOSBAQCBXZWJQYWdlOjpXZWJQYWdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwg
V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgLCBtX3ZpZXdHZXN0
dXJlR2VvbWV0cnlDb2xsZWN0b3IobWFrZVVuaXF1ZTxWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yPigqdGhpcykpCiAjZWxpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oR1RL
KQogICAgICwgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0KG51bGxwdHIpCisjZW5kaWYKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgLCBtX25hdGl2ZVdpbmRvd0hhbmRsZShwYXJhbWV0ZXJzLm5hdGl2ZVdp
bmRvd0hhbmRsZSkKICNlbmRpZgogICAgICwgbV9zZXRDYW5TdGFydE1lZGlhVGltZXIoUnVuTG9v
cDo6bWFpbigpLCB0aGlzLCAmV2ViUGFnZTo6c2V0Q2FuU3RhcnRNZWRpYVRpbWVyRmlyZWQpCiAj
aWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKaW5kZXggN2IyNjRiYjhlNDUxZmM4YjNkMjY3NjBjZTVhNmY4NjJjZWNjYjk4
MC4uMTc2NjRlYzExZjY5ZTNlZWQyY2JjODc3ZDkxYzU5MjI0ZTVlOTNlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTMzNiw2ICsxMzM2LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU1lZGlhVXNhZ2VNYW5hZ2VyU2Vzc2lvbihXZWJDb3Jl
OjpNZWRpYVNlc3Npb25JZGVudGlmaWVyKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZSgpIHsgcmV0dXJuIG1fbmF0aXZlV2luZG93
SGFuZGxlOyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlKFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyLCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCkBAIC0xODMwLDYgKzE4
MzQsMTAgQEAgcHJpdmF0ZToKICAgICBHUmVmUHRyPEF0a09iamVjdD4gbV9hY2Nlc3NpYmlsaXR5
T2JqZWN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgdWludDY0X3QgbV9uYXRp
dmVXaW5kb3dIYW5kbGUgeyAwIH07CisjZW5kaWYKKwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIFJlZlB0cjxQYWdlQmFubmVyPiBtX2hlYWRlckJhbm5lcjsKICAgICBSZWZQdHI8UGFn
ZUJhbm5lcj4gbV9mb290ZXJCYW5uZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCmluZGV4IGYwZWE1YzU3MDNiOTg2MjY0OTQ4NDNj
OTBmZjhmNGVjZjY4YzIxMDcuLjg5YmMxNTlkZjM1OTEwYWJlMTMzYzY4ZDcxMDU3Y2RmZTE5OTVj
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01h
aW5XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01h
aW5XaW4uY3BwCkBAIC0yOSw2ICsyOSwxMCBAQAogI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NN
YWluLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPE9iamJhc2UuaD4KKyNp
bmNsdWRlIDx3dGYvd2luL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19MSUJSQVJZKHVzZXIz
Mik7CitTT0ZUX0xJTktfT1BUSU9OQUwodXNlcjMyLCBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29u
dGV4dCwgQk9PTCwgU1REQVBJQ0FMTFRZUEUsIChEUElfQVdBUkVORVNTX0NPTlRFWFQpKTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTM3LDYgKzQx
LDEwIEBAIGNsYXNzIFdlYlByb2Nlc3NNYWluV2luIGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBv
dmVycmlkZQogICAgIHsKKyAgICAgICAgaWYgKFNldFByb2Nlc3NEcGlBd2FyZW5lc3NDb250ZXh0
UHRyKCkpCisgICAgICAgICAgICBTZXRQcm9jZXNzRHBpQXdhcmVuZXNzQ29udGV4dFB0cigpKERQ
SV9BV0FSRU5FU1NfQ09OVEVYVF9QRVJfTU9OSVRPUl9BV0FSRV9WMik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFNldFByb2Nlc3NEUElBd2FyZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFr
ZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKaW5kZXggMzVlZGY4NTNmODkz
MmMyMjliNWI5NDI2ZTc2MDY0ZWQzMTliMDcwYS4uMTEzMTcwY2UyMTE0NWZjNTNhM2M4MDQ4MjJl
ZjIwZmE5ZDg5ZGU4YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5j
bWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC0zOSw2ICsz
OSw3IEBAIHNldChVU0VfQU5HTEVfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNF
X0NBSVJPIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NGIE9OKQogU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
R1JBUEhJQ1NfTEFZRVJfVEVYVFVSRV9NQVBQRVIgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX09QRU5HTF9FUyBPTikK
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhBVkVfT1BFTkdMX0VTXzMgT04pCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGI3YTQ1OGMzYTlmMzAx
MjdmYmE0MTYzZmJhMWZmYTQ5OTgwYjBmNS4uMmY4MWEzMDE1YTZlYjZkMzkxYzliODNmNTNhYWE5
YmNmMmNmZjlkMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA1LTI0ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9u
b3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb11bV0syXSBVc2UgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIgZm9yIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIG1vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTg4MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWluaUJyb3dz
ZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwOgorICAgICAgICAoV2ViS2l0QnJvd3Nlcldp
bmRvdzo6c2V0UHJlZmVyZW5jZSk6IENhbGwgV0tQcmVmZXJlbmNlc1NldCogZm9yCisgICAgICAg
IG1lbnUgaXRlbXMgSURNX0FDQ19DT01QT1NJVElORywgSURNX0NPTVBPU0lUSU5HX0JPUkRFUlMg
YW5kCisgICAgICAgIElETV9ERUJVR19JTkZPX0xBWUVSLgorCiAyMDIwLTA1LTIxICBFbnJpcXVl
IE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJl
YW1lcl1bR1RLXVtXUEVdIEV4cG9zZSBhbmQgaG9ub3IgdGhlIG1lZGlhIGNvbnRlbnQgdHlwZXMg
cmVxdWlyaW5nIGhhcmR3YXJlIHN1cHBvcnQgc2V0dGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIv
d2luL1dlYktpdEJyb3dzZXJXaW5kb3cuY3BwCmluZGV4IDFlNGZiMjc4ODQwMzRkY2NhMzMzZjc3
ZWZkMjQxNTBkNGM5ZGMyZWMuLjkyNDVkZmM3ZjgxZjNhODA0ODBhMGRkZGNlN2ZmY2M3ZTA5ZWQ0
MDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRCcm93c2VyV2luZG93
LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0QnJvd3NlcldpbmRvdy5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm9DdXJs
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQ3JlZGVudGlhbC5oPgogI2luY2x1ZGUgPFdlYktpdC9X
S0luc3BlY3Rvci5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5o
PgogI2luY2x1ZGUgPFdlYktpdC9XS1Byb3RlY3Rpb25TcGFjZS5oPgogI2luY2x1ZGUgPFdlYktp
dC9XS1Byb3RlY3Rpb25TcGFjZUN1cmwuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmg+CkBAIC0yMjUsNiArMjI2LDE2IEBAIHZvaWQgV2ViS2l0QnJvd3NlcldpbmRv
dzo6c2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpCiAgICAgYXV0byBwZ3Jv
dXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAocGFnZSk7CiAgICAgYXV0byBwcmVmID0gV0tQYWdlR3Jv
dXBHZXRQcmVmZXJlbmNlcyhwZ3JvdXApOwogICAgIHN3aXRjaCAobWVudUlEKSB7CisgICAgY2Fz
ZSBJRE1fQUNDX0NPTVBPU0lUSU5HOgorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQocHJlZiwgZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUzoKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldENv
bXBvc2l0aW5nQm9yZGVyc1Zpc2libGUocHJlZiwgZW5hYmxlKTsKKyAgICAgICAgV0tQcmVmZXJl
bmNlc1NldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShwcmVmLCBlbmFibGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9ERUJVR19JTkZPX0xBWUVSOgorICAgICAgICBX
S1ByZWZlcmVuY2VzU2V0VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JWaXNpYmxlKHByZWYsIGVuYWJs
ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURNX0RJU0FCTEVfSU1BR0VTOgogICAgICAg
ICBXS1ByZWZlcmVuY2VzU2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHByZWYsICFlbmFibGUp
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRl
eCA5NDgzMDU0YzY3ODUzZjcxOWEzMzIwMTM5N2RkM2QzZmQ0M2UxYmY3Li4wMzU5MGZlOTgwN2Rl
M2Y1YzE0YzVkYjdjNTJjMmVhMTM2YWNlMGUzIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMjQgIEZ1amlpIEhpcm9ub3JpICA8
SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXVtXSzJdIFVzZSBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciBmb3IgQWNjZWxlcmF0ZWQgQ29tcG9zaXRpbmcgbW9k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExODgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlOiBBZGRlZCBhIG5ldyBidWlsZCBvcHRpb24K
KyAgICAgICAgVVNFX0dSQVBISUNTX0xBWUVSX1RFWFRVUkVfTUFQUEVSLCBhbmQgc2V0IE9OIGFz
IHRoZSBkZWZhdWx0LgorCiAyMDIwLTA1LTIwICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbR1RLXSBJbXBsZW1lbnQgY29ubmVjdGVkIGFuZCBkaXNjb25u
ZWN0ZWQgZXZlbnRzIG9mIEdBTUVQQUQgQVBJIHdpdGggbGlibWFuZXR0ZQo=
</data>
<flag name="review"
          id="415595"
          type_id="1"
          status="+"
          setter="don.olmstead"
    />
          </attachment>
      

    </bug>

</bugzilla>