<?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>210153</bug_id>
          
          <creation_ts>2020-04-07 13:54:58 -0700</creation_ts>
          <short_desc>Crash in StoreKitUIService: WebCore: gl::FramebufferManager::getFramebuffer const</short_desc>
          <delta_ts>2020-05-29 17:27:23 -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>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>212461</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>210151</dependson>
    
    <dependson>210213</dependson>
    
    <dependson>210222</dependson>
    
    <dependson>212461</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>kbr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1638785</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-04-07 13:54:58 -0700</bug_when>
    <thetext>Unfortunately this one is on an internal iOS build and doesn&apos;t have reproduction steps.


Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000068
VM Region Info: 0x68 is not in any region.  Bytes before following region: 4337565592
      REGION TYPE                      START - END             [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      UNUSED SPACE AT START
---&gt;  
      __TEXT                 00000001028a0000-00000001028d0000 [  192K] r-x/r-x SM=COW  ...eKitUIService

Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [2021]
Triggered by Thread:  4

Thread 4 name:  WebThread
Thread 4 Crashed:
0   WebCore                       	0x000000019c8cdb3c gl::FramebufferManager::getFramebuffer(gl::FramebufferID) const + 16 (ResourceMap.h:29)
1   WebCore                       	0x000000019c774fc0 gl::Context::unsetDefaultFramebuffer() + 36 (Context.cpp:8505)
2   WebCore                       	0x000000019c774fc0 gl::Context::unsetDefaultFramebuffer() + 36 (Context.cpp:8505)
3   WebCore                       	0x000000019c773db4 gl::Context::unMakeCurrent(egl::Display const*) + 36 (Context.cpp:705)
4   WebCore                       	0x000000019c7b9b50 egl::Display::makeCurrent(egl::Thread const*, egl::Surface*, egl::Surface*, gl::Context*) + 68 (Display.cpp:1066)
5   WebCore                       	0x000000019c7c34ec EGL_MakeCurrent + 208 (entry_points_egl.cpp:448)
6   WebCore                       	0x000000019b2ea26c WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL(WebCore::GraphicsContextGLAttributes, WebCore::HostWindow*, WebCore::GraphicsContextGL::Destination, WebCore::GraphicsContextGLOpenGL*) + 1404 (GraphicsContextGLOpenGLCocoa.mm:366)
7   WebCore                       	0x000000019b2e988c WebCore::GraphicsContextGLOpenGL::create(WebCore::GraphicsContextGLAttributes, WebCore::HostWindow*, WebCore::GraphicsContextGL::Destination) + 472 (GraphicsContextGLOpenGLCocoa.mm:188)
8   WebCore                       	0x000000019bc77990 WebCore::WebGLRenderingContextBase::create(WebCore::CanvasBase&amp;, WebCore::GraphicsContextGLAttributes&amp;, WTF::String const&amp;) + 1036 (WebGLRenderingContextBase.cpp:580)
9   WebCore                       	0x000000019bb21e80 WebCore::HTMLCanvasElement::getContext(JSC::JSGlobalObject&amp;, WTF::String const&amp;, WTF::Vector&lt;JSC::Strong&lt;JSC::Unknown, (JSC::ShouldStrongDestructorGrabLock)0&gt;, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;&amp;) + 852 (HTMLCanvasElement.cpp:413)
10  WebCore                       	0x000000019ad21cf0 WebCore::jsHTMLCanvasElementPrototypeFunctionGetContext(JSC::JSGlobalObject*, JSC::CallFrame*) + 504 (JSHTMLCanvasElement.cpp:310)
11  ???                           	0x0000000dd37b01fc 0 + 59382628860</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638786</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-04-07 13:55:23 -0700</bug_when>
    <thetext>rdar://60470428</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638788</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-04-07 13:59:16 -0700</bug_when>
    <thetext>Is any multithreaded usage of OpenGL ES / EGL occurring in this service?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639179</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-04-08 11:37:41 -0700</bug_when>
    <thetext>Older radar is:
rdar://60106363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643620</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-04-20 13:41:12 -0700</bug_when>
    <thetext>Any possibility of re-testing this now that the fixes for Bug 210151 and Bug 210222 have landed? They should have improved correctness in this general area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648216</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-02 01:01:13 -0700</bug_when>
    <thetext>This still occurs.

It looks like we&apos;re deleting the context on the web thread, but it&apos;s still current on the main thread. Then, when the main thread tries to make a new context current, it tries to unMakeCurrent() whatever is already current, which is a context that has been deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648217</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-02 01:05:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/60733185&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648218</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-02 01:12:34 -0700</bug_when>
    <thetext>Off the top of my head, there are (at least) 3 ways to fix this:

1. Make EGLContexts have an internal reference count, and have EGL_DestroyContext() only decrement the reference count. Making a context current would increment the reference count
2. When one thread wants to destroy a EGLContext, send a synchronous message to any other threads which might be using it. The synchronous message would make the context un-current
3. Don&apos;t have GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL() call EGL_DestroyContext() directly. Instead, defer the destruction of the context using some threadsafe global manager object. This would effectively be the same as option 1, but implemented in WebKit.

I&apos;d lean toward option 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648219</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-02 01:13:26 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #7)
&gt; Off the top of my head, there are (at least) 3 ways to fix this:
&gt; 
&gt; 1. Make EGLContexts have an internal reference count, and have
&gt; EGL_DestroyContext() only decrement the reference count. Making a context
&gt; current would increment the reference count
&gt; 2. When one thread wants to destroy a EGLContext, send a synchronous message
&gt; to any other threads which might be using it. The synchronous message would
&gt; make the context un-current
&gt; 3. Don&apos;t have GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL() call
&gt; EGL_DestroyContext() directly. Instead, defer the destruction of the context
&gt; using some threadsafe global manager object. This would effectively be the
&gt; same as option 1, but implemented in WebKit.
&gt; 
&gt; I&apos;d lean toward option 1.

****typo. I&apos;d actually lean toward option 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648223</commentid>
    <comment_count>9</comment_count>
      <attachid>398284</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-02 02:22:51 -0700</bug_when>
    <thetext>Created attachment 398284
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648280</commentid>
    <comment_count>10</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-02 14:10:05 -0700</bug_when>
    <thetext>I&apos;d go for option 3 too.

I have a couple of questions though.

How did the main thread make a context current? I mean, how did it get to use WebGL at all?

Could we dispatch whatever the main thread is doing to the web thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648626</commentid>
    <comment_count>11</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-04 11:08:28 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #10)
&gt; How did the main thread make a context current? I mean, how did it get to use WebGL at all?

Here’s the stack where it gets deleted on the Web thread:
#0	0x000000011b60f5fc in gl::ResourceManagerBase&lt;gl::HandleAllocator&gt;::release(gl::Context const*) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/ResourceManager.cpp:59
#1	0x000000011b299538 in gl::Context::onDestroy(egl::Display const*) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:566
#2	0x000000011b34fa8c in egl::Display::destroyContext(egl::Thread const*, gl::Context*) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/Display.cpp:1211
#3	0x000000011b37aa68 in ::EGL_DestroyContext(EGLDisplay, EGLContext) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libGLESv2/entry_points_egl.cpp:408
#4	0x0000000118131b90 in WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:594
#5	0x0000000118131ca4 in WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:542
#6	0x0000000118131cdc in WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:542
#7	0x0000000116c5b91c in std::__1::default_delete&lt;WebCore::GraphicsContextGL&gt;::operator()(WebCore::GraphicsContextGL*) const at /Applications/Xcode.app/Contents/Developer/Toolchains/iOS14.0.xctoolchain/usr/include/c++/v1/memory:2338
#8	0x0000000116c5b8b4 in WTF::RefCounted&lt;WebCore::GraphicsContextGL, std::__1::default_delete&lt;WebCore::GraphicsContextGL&gt; &gt;::deref() const at /Users/mmaxfield/Build/Products/Debug-iphoneos/usr/local/include/wtf/RefCounted.h:190
#9	0x000000011813d990 in void WTF::derefIfNotNull&lt;WebCore::GraphicsContextGLOpenGL&gt;(WebCore::GraphicsContextGLOpenGL*) at /Users/mmaxfield/Build/Products/Debug-iphoneos/usr/local/include/wtf/RefPtr.h:44
#10	0x000000011989d04c in WTF::RefPtr&lt;WebCore::GraphicsContextGLOpenGL, WTF::DumbPtrTraits&lt;WebCore::GraphicsContextGLOpenGL&gt; &gt;::operator=(std::nullptr_t) at /Users/mmaxfield/Build/Products/Debug-iphoneos/usr/local/include/wtf/RefPtr.h:156
#11	0x000000011989cc98 in WebCore::WebGLRenderingContextBase::destroyGraphicsContextGL() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:916
#12	0x00000001198adb44 in WebCore::WebGLRenderingContextBase::stop() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5630
#13	0x00000001193ab0f0 in auto WebCore::ScriptExecutionContext::stopActiveDOMObjects()::$_9::operator()&lt;WebCore::ActiveDOMObject&gt;(WebCore::ActiveDOMObject&amp;) const at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/dom/ScriptExecutionContext.cpp:299
#14	0x00000001193ab05c in WTF::Detail::CallableWrapper&lt;WebCore::ScriptExecutionContext::stopActiveDOMObjects()::$_9, WebCore::ScriptExecutionContext::ShouldContinue, WebCore::ActiveDOMObject&amp;&gt;::call(WebCore::ActiveDOMObject&amp;) at /Users/mmaxfield/Build/Products/Debug-iphoneos/usr/local/include/wtf/Function.h:52
#15	0x00000001193862f8 in WTF::Function&lt;WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&amp;)&gt;::operator()(WebCore::ActiveDOMObject&amp;) const at /Users/mmaxfield/Build/Products/Debug-iphoneos/usr/local/include/wtf/Function.h:84
#16	0x0000000119386118 in WebCore::ScriptExecutionContext::forEachActiveDOMObject(WTF::Function&lt;WebCore::ScriptExecutionContext::ShouldContinue (WebCore::ActiveDOMObject&amp;)&gt; const&amp;) const at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/dom/ScriptExecutionContext.cpp:244
#17	0x00000001193865d0 in WebCore::ScriptExecutionContext::stopActiveDOMObjects() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/dom/ScriptExecutionContext.cpp:298
#18	0x0000000119184e50 in WebCore::Document::stopActiveDOMObjects() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/dom/Document.cpp:2699
#19	0x0000000119184c58 in WebCore::Document::commonTeardown() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/dom/Document.cpp:790
#20	0x0000000119190850 in WebCore::Document::willBeRemovedFromFrame() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/dom/Document.cpp:2572
#21	0x0000000119ee2714 in WebCore::Frame::setView(WTF::RefPtr&lt;WebCore::FrameView, WTF::DumbPtrTraits&lt;WebCore::FrameView&gt; &gt;&amp;&amp;) at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/page/Frame.cpp:235
#22	0x0000000119cf957c in WebCore::FrameLoader::detachFromParent() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/loader/FrameLoader.cpp:2861
#23	0x000000010f12d774 in __29-[WebView(WebPrivate) _close]_block_invoke at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebKitLegacy/mac/WebView/WebView.mm:2366
#24	0x000000011a49625c in (anonymous namespace)::WebThreadBlock::operator()() const at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/ios/wak/WebCoreThreadRun.cpp:98
#25	0x000000011a493d84 in HandleRunSource(void*) at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/ios/wak/WebCoreThreadRun.cpp:133


But it’s used again here on the main thread:

#0	0x000000011b615280 in gl::ResourceMap&lt;gl::Framebuffer, gl::FramebufferID&gt;::query(gl::FramebufferID) const [inlined] at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/ResourceMap.h:29
#1	0x000000011b615260 in gl::FramebufferManager::getFramebuffer(gl::FramebufferID) const at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/ResourceManager.cpp:374
#2	0x000000011b29b3a4 in gl::Context::unsetDefaultFramebuffer() at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:8182
#3	0x000000011b2996bc in gl::Context::unMakeCurrent(egl::Display const*) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp:646
#4	0x000000011b34fc9c in egl::Display::makeCurrent(egl::Thread const*, egl::Surface*, egl::Surface*, gl::Context*) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libANGLE/Display.cpp:1099
#5	0x000000011b37acb4 in ::EGL_MakeCurrent(EGLDisplay, EGLSurface, EGLSurface, EGLContext) at /Users/mmaxfield/src/WebKit/OpenSource/Source/ThirdParty/ANGLE/src/libGLESv2/entry_points_egl.cpp:448
#6	0x0000000118131d58 in WebCore::GraphicsContextGLOpenGL::makeContextCurrent() at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:632
#7	0x0000000118175f34 in -[WebGLLayer display] at /Users/mmaxfield/src/WebKit/OpenSource/Source/WebCore/platform/graphics/cocoa/WebGLLayer.mm:161
#8	0x00000001b538c984 in CA::Layer::layout_and_display_if_needed(CA::Transaction*) ()
#9	0x00000001b52d7acc in CA::Context::commit_transaction(CA::Transaction*, double, double*) ()
#10	0x00000001b5302594 in CA::Transaction::commit() ()

&gt; Could we dispatch whatever the main thread is doing to the web thread?

I don&apos;t think we can (easily) move the CA transaction to run on a different thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649884</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-05-06 16:23:09 -0700</bug_when>
    <thetext>Is there any possibility that the Web thread could be told to do the EGL work in WebGLLayer&apos;s display method, so that the WebGLLayer would only be interacting with the resulting IOSurface? Would there be a good point in the browser&apos;s composition lifecycle to do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650048</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-07 06:06:38 -0700</bug_when>
    <thetext>I&apos;m going to take this bug. I have a prototype of doing the EGL work (and more) on the Web thread before display happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657522</commentid>
    <comment_count>14</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-05-29 17:27:23 -0700</bug_when>
    <thetext>Marking this as a duplicate, although it should be the other way around.

*** This bug has been marked as a duplicate of bug 212461 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398284</attachid>
            <date>2020-05-02 02:22:51 -0700</date>
            <delta_ts>2020-05-02 02:22:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-210153-20200502022251.patch</filename>
            <type>text/plain</type>
            <size>21514</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmMzOTM4ZWI0NGFjYTVl
YjNlYmE1MGIwZjJkYjNhNDYxOTY4N2U5YS4uZmNkZTA2NzIxNjQ5MzhlNmU1ZWNjMGEzYmI0Zjli
M2Y0ZjkzMjY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTA1LTAyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggaW4g
U3RvcmVLaXRVSVNlcnZpY2U6IFdlYkNvcmU6IGdsOjpGcmFtZWJ1ZmZlck1hbmFnZXI6OmdldEZy
YW1lYnVmZmVyIGNvbnN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTAxNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdXNwZW5kQWxsTWVkaWFQbGF5YmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbGxNZWRpYVBsYXliYWNrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlQ291bnRlZEVHTENvbnRleHQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWZlcmVuY2VDb3VudGVkRUdMQ29udGV4dDo6flJlZmVyZW5jZUNv
dW50ZWRFR0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZmVyZW5jZUNvdW50ZWRFR0xD
b250ZXh0OjptYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZWZlcmVuY2VDb3VudGVk
RUdMQ29udGV4dDo6ZGlzcGxheSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWZlcmVuY2VD
b3VudGVkRUdMQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWZl
cmVuY2VDb3VudGVkRUdMQ29udGV4dDo6c2V0RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWZlcmVuY2VDb3VudGVkRUdMQ29udGV4dDo6c2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybURpc3BsYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVwZGF0ZUNHTENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjcmVlbkRpZENoYW5n
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxh
dGZvcm1EaXNwbGF5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvTGVn
YWN5VGlsZUxheWVyLm1tOgorICAgICAgICAoLVtMZWdhY3lUaWxlTGF5ZXIgZHJhd0luQ29udGV4
dDpdKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6c2V0Q29tcHV0ZWRDb2x1bW5Db3VudEFuZFdpZHRo
KToKKwogMjAyMC0wNC0zMCAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IGZvciBjcmFzaCBpbiBBWExvZ2dlci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOGNjYzlj
YzNiZWJlYmE3ZjRiOTlmMzBjZGI2ODFlOWVlMzQzYTM1NC4uMTVmYWIxYTMyMDE1NTU3ZDE2ZDY5
YjM1YWE3YWYzYTAzMTA4NGUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wNS0w
MiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIENy
YXNoIGluIFN0b3JlS2l0VUlTZXJ2aWNlOiBXZWJDb3JlOiBnbDo6RnJhbWVidWZmZXJNYW5hZ2Vy
OjpnZXRGcmFtZWJ1ZmZlciBjb25zdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEwMTUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6bWVkaWFSZWxhdGVkTWFjaFNlcnZpY2VzKToKKyAgICAgICAgKFdl
YktpdDo6bm9uQnJvd3NlclNlcnZpY2VzKToKKyAgICAgICAgKFdlYktpdDo6YWd4Q29tcGlsZXJD
bGFzc2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRS
ZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai94
Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYktpdC54Y3NjaGVtZToKKwogMjAyMC0wNC0zMCAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gSW1wbGVtZW50
IC1tYXJrZWRUZXh0UmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAwMTVlMjZh
ZmQwYjc2OWJjZGI4ZTUyOTA5ZDFkMzcyZjcwZjMwNGE1Li5kZjJhMTljYjVjNTU1NDcwMDZhZDBi
MTc4Yjk2YjUwYjU1MzU2YzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjAtMDUtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KKworICAgICAgICBDcmFzaCBpbiBTdG9yZUtpdFVJU2VydmljZTogV2ViQ29yZTogZ2w6
OkZyYW1lYnVmZmVyTWFuYWdlcjo6Z2V0RnJhbWVidWZmZXIgY29uc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE1MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUNTUy5tbToKKyAgICAg
ICAgKGtpdENsYXNzKToKKwogMjAyMC0wNC0zMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSAtW1dlYlZpZXcgc2V0Q1NTQW5pbWF0aW9uc1N1c3Bl
bmRlZDpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCAzODMwNTliNThhOWE2ZGMxNjk1MzExNGEzMGVh
OTkyY2ZiYTkwMmZlLi5kMjc4MDMyNGIyYzhmODdlZmEyMjZhZGY3ZTc1ZjdhY2U4ZGEyMmM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTE4NjEsNyArMTg2MSw3IEBAIHZvaWQgUGFnZTo6c3RvcEFs
bE1lZGlhUGxheWJhY2soKQogdm9pZCBQYWdlOjpzdXNwZW5kQWxsTWVkaWFQbGF5YmFjaygpCiB7
CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEFTU0VSVCghbV9tZWRpYVBsYXliYWNrSXNTdXNwZW5k
ZWQpOworICAgIC8vQVNTRVJUKCFtX21lZGlhUGxheWJhY2tJc1N1c3BlbmRlZCk7CiAgICAgaWYg
KG1fbWVkaWFQbGF5YmFja0lzU3VzcGVuZGVkKQogICAgICAgICByZXR1cm47CiAKQEAgLTE4NzYs
NyArMTg3Niw3IEBAIHZvaWQgUGFnZTo6c3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKQogdm9pZCBQ
YWdlOjpyZXN1bWVBbGxNZWRpYVBsYXliYWNrKCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAg
QVNTRVJUKG1fbWVkaWFQbGF5YmFja0lzU3VzcGVuZGVkKTsKKyAgICAvL0FTU0VSVChtX21lZGlh
UGxheWJhY2tJc1N1c3BlbmRlZCk7CiAgICAgaWYgKCFtX21lZGlhUGxheWJhY2tJc1N1c3BlbmRl
ZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbWVkaWFQbGF5YmFja0lzU3VzcGVuZGVkID0gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQppbmRleCBlMzQ5
N2NkMGEzY2E3NjlmZTZhOWY4Y2NhNGQ1M2I0OGMwMGU3MGZmLi5jNDM2YzE3YTdhZTljMzhiOTMw
MGJiZGZiMDRjYmM4ZTc1YzFlYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW0KQEAgLTkyLDYgKzkyLDUyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHN0YXR1c0NoZWNrVGhyZXNob2xkID0gNTsKIAorY2xhc3MgUmVm
ZXJlbmNlQ291bnRlZEVHTENvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVm
ZXJlbmNlQ291bnRlZEVHTENvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlZmVy
ZW5jZUNvdW50ZWRFR0xDb250ZXh0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUmVmZXJlbmNlQ291bnRlZEVHTENvbnRleHQoKSk7CisgICAgfQorCisgICAg
flJlZmVyZW5jZUNvdW50ZWRFR0xDb250ZXh0KCkKKyAgICB7CisgICAgICAgIEVHTF9EZXN0cm95
Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dCk7CisgICAgfQorCisgICAgdm9pZCBtYWtlQ3Vy
cmVudCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVW5yZWYgdGhlIHByZXZpb3VzIGNvbnRl
eHQsIHVubGVzcyBpdCdzIEVHTF9OT19DT05URVhUCisgICAgICAgIC8vIFRoaXMgd2lsbCBsaWtl
bHkgaW52b2x2ZSBhIGdsb2JhbCByZWdpc3RyeSBhbmQgYSBsb2NrLgorICAgICAgICBFR0xfTWFr
ZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29u
dGV4dCk7CisgICAgICAgIHJlZigpOworICAgIH0KKworICAgIEVHTERpc3BsYXkgZGlzcGxheSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kaXNwbGF5OworICAgIH0KKworICAgIEVH
TENvbnRleHQgY29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZXh0
OworICAgIH0KKworICAgIHZvaWQgc2V0RGlzcGxheShFR0xEaXNwbGF5IGRpc3BsYXkpCisgICAg
eworICAgICAgICBtX2Rpc3BsYXkgPSBkaXNwbGF5OworICAgIH0KKworICAgIHZvaWQgc2V0Q29u
dGV4dChFR0xDb250ZXh0IGNvbnRleHQpCisgICAgeworICAgICAgICBtX2NvbnRleHQgPSBjb250
ZXh0OworICAgIH0KKworcHJpdmF0ZToKKworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5OworICAg
IEVHTENvbnRleHQgbV9jb250ZXh0OworfTsKKwogLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgY3Vy
cmVudGx5IGVtcHR5IG9uIE1hYywgYnV0IHdpbGwgZ2V0IHBvcHVsYXRlZCBhcwogLy8gdGhlIHJl
c3RydWN0dXJpbmcgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
OTAzIGlzIGRvbmUKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSB7CkBAIC0x
MTUsNyArMTYxLDcgQEAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEcKIAogICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHRHTE9wZW5HTD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChhdHRycywgaG9zdFdpbmRvdywgZGVzdGluYXRpb24pKTsKIAotICAgIGlmICgh
Y29udGV4dC0+bV9jb250ZXh0T2JqKQorICAgIGlmICghY29udGV4dC0+cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5n
ZXQoKSwgaG9zdFdpbmRvdyk7CkBAIC0xODMsOCArMjI5LDI0IEBAIHN0YXRpYyB2b2lkIHNldEdQ
VUJ5UmVnaXN0cnlJRChDR0xDb250ZXh0T2JqIGNvbnRleHRPYmosIENHTFBpeGVsRm9ybWF0T2Jq
IHBpeGVsCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpKQogCisjaWYgVVNFKEFOR0xFKQorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3Bs
YXkgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dE9iai0+ZGlzcGxheSgpOworfQorCitQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0T2JqLT5jb250ZXh0KCk7Cit9CisK
KyNlbmRpZgorCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBHcmFwaGljc0NvbnRleHRHTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQogICAgIDogR3JhcGhpY3NDb250ZXh0R0wo
YXR0cnMsIGRlc3RpbmF0aW9uLCBzaGFyZWRDb250ZXh0KQorI2lmIFVTRShBTkdMRSkKKyAgICAs
IG1fY29udGV4dE9iaihSZWZlcmVuY2VDb3VudGVkRUdMQ29udGV4dDo6Y3JlYXRlKCkpCisjZW5k
aWYKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMuaXNXZWJHTDI7CiAKQEAgLTMwMCwxNiAr
MzYyLDE2IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAKICNlbGlmIFVTRShBTkdMRSkKIAot
ICAgIG1fZGlzcGxheU9iaiA9IEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwot
ICAgIGlmIChtX2Rpc3BsYXlPYmogPT0gRUdMX05PX0RJU1BMQVkpCisgICAgbV9jb250ZXh0T2Jq
LT5zZXREaXNwbGF5KEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpKTsKKyAgICBp
ZiAobV9jb250ZXh0T2JqLT5kaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJl
dHVybjsKICAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247Ci0gICAgaWYgKEVH
TF9Jbml0aWFsaXplKG1fZGlzcGxheU9iaiwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikg
PT0gRUdMX0ZBTFNFKSB7CisgICAgaWYgKEVHTF9Jbml0aWFsaXplKG1fY29udGV4dE9iai0+ZGlz
cGxheSgpLCAmbWFqb3JWZXJzaW9uLCAmbWlub3JWZXJzaW9uKSA9PSBFR0xfRkFMU0UpIHsKICAg
ICAgICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgTE9HKFdlYkdMLCAiQU5HTEUgaW5pdGlhbGlzZWQg
TWFqb3I6ICVkIE1pbm9yOiAlZCIsIG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uKTsKLSAgICBj
b25zdCBjaGFyICpkaXNwbGF5RXh0ZW5zaW9ucyA9IEVHTF9RdWVyeVN0cmluZyhtX2Rpc3BsYXlP
YmosIEVHTF9FWFRFTlNJT05TKTsKKyAgICBjb25zdCBjaGFyICpkaXNwbGF5RXh0ZW5zaW9ucyA9
IEVHTF9RdWVyeVN0cmluZyhtX2NvbnRleHRPYmotPmRpc3BsYXkoKSwgRUdMX0VYVEVOU0lPTlMp
OwogICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOwog
CiAgICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9IHsKQEAgLTMyMSw3ICszODMsNyBAQCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgICAgICBFR0xfTk9ORQogICAgIH07CiAgICAgRUdM
aW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7Ci0gICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rp
c3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2NvbmZpZ09iaiwgMSwgJm51bWJlckNvbmZp
Z3NSZXR1cm5lZCk7CisgICAgRUdMX0Nob29zZUNvbmZpZyhtX2NvbnRleHRPYmotPmRpc3BsYXko
KSwgY29uZmlnQXR0cmlidXRlcywgJm1fY29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVy
bmVkKTsKICAgICBpZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9IDEpIHsKICAgICAgICAgTE9H
KFdlYkdMLCAiRUdMQ29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMzcyLDE0ICs0MzQsMTQgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICB9
CiAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKIAotICAgIG1fY29u
dGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHNo
YXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0PihzaGFyZWRDb250ZXh0LT5tX2Nv
bnRleHRPYmopIDogRUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7
Ci0gICAgaWYgKG1fY29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgeworICAgIG1fY29udGV4
dE9iai0+c2V0Q29udGV4dChFR0xfQ3JlYXRlQ29udGV4dChtX2NvbnRleHRPYmotPmRpc3BsYXko
KSwgbV9jb25maWdPYmosIHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0Pihz
aGFyZWRDb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpIDogRUdMX05PX0NPTlRF
WFQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSkpOworICAgIGlmIChtX2NvbnRleHRPYmot
PmNvbnRleHQoKSA9PSBFR0xfTk9fQ09OVEVYVCkgewogICAgICAgICBMT0coV2ViR0wsICJFR0xD
b250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOwogCi0gICAgRUdMX01ha2VDdXJyZW50
KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRP
YmopOworICAgIG1fY29udGV4dE9iai0+bWFrZUN1cnJlbnQoKTsKIAogICAgIGlmIChtX2lzRm9y
V2ViR0wyKQogICAgICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVf
UkVTVEFSVF9GSVhFRF9JTkRFWCk7CkBAIC00MDIsNyArNDY0LDcgQEAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHQKICAgICB9CiAKICAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKLSAg
ICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQs
IHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOworICAgIEVHTF9RdWVyeURp
c3BsYXlBdHRyaWJFWFQobV9jb250ZXh0T2JqLT5kaXNwbGF5KCksIEVHTF9ERVZJQ0VfRVhULCBy
ZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZpY2UpKTsKICAgICBDR0xDb250ZXh0T2Jq
IGNnbENvbnRleHQgPSBudWxscHRyOwogICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0
ID0gbnVsbHB0cjsKICAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dM
X0NPTlRFWFRfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmNnbENvbnRleHQp
KTsKQEAgLTQyNSw3ICs0ODcsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgICAgICBb
bV93ZWJHTExheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOwogI2VuZGlmCiAjaWYgVVNFKEFO
R0xFKQotICAgICAgICBbbV93ZWJHTExheWVyIHNldEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGNv
bmZpZzptX2NvbmZpZ09ial07CisgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxheTpt
X2NvbnRleHRPYmotPmRpc3BsYXkoKSBjb25maWc6bV9jb25maWdPYmpdOwogI2VuZGlmCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCkBAIC01NDIsNyArNjA0LDcgQEAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0
aGlzKTsKIAotICAgIGlmIChtX2NvbnRleHRPYmopIHsKKyAgICBpZiAocGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCgpKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRy
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQpAQCAtNTU0LDcg
KzYxNiw3IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0woKQogICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChjZ2xDb250ZXh0KTsKICAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2VsaWYgVVNFKEFOR0xFKQotICAg
ICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05P
X1NVUkZBQ0UsIG1fY29udGV4dE9iaik7CisgICAgICAgIG1fY29udGV4dE9iai0+bWFrZUN1cnJl
bnQoKTsKICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2VuZGlm
CiAKQEAgLTU5MCw4ICs2NTIsNiBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKCkKICAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY2dsQ29udGV4dCk7
CiAjZWxpZiBVU0UoQU5HTEUpCiAgICAgICAgIFttX3dlYkdMTGF5ZXIgcmVsZWFzZUdMUmVzb3Vy
Y2VzXTsKLSAgICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIEVHTF9EZXN0cm95
Q29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaik7CiAjZW5kaWYKICAgICAgICAgW21f
d2ViR0xMYXllciBzZXRDb250ZXh0Om51bGxwdHJdOwogICAgIH0KQEAgLTYxNyw3ICs2NzcsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJv
bURyYXdhYmxlKEdDR0xzaXplaSB3aWR0aAogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgIGlm
ICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICNpZiBVU0UoT1BFTkdMX0VTKQpAQCAtNjI4LDggKzY4OCw4IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAgICAgaWYgKGN1cnJlbnRDb250ZXh0
ICE9IG1fY29udGV4dE9iaikKICAgICAgICAgcmV0dXJuIENHTFNldEN1cnJlbnRDb250ZXh0KHN0
YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaikpID09IGtDR0xOb0Vycm9yOwog
I2VsaWYgVVNFKEFOR0xFKQotICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2Nv
bnRleHRPYmopCi0gICAgICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBF
R0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7CisgICAgaWYgKEVH
TF9HZXRDdXJyZW50Q29udGV4dCgpICE9IHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKKyAg
ICAgICAgbV9jb250ZXh0T2JqLT5tYWtlQ3VycmVudCgpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC02NDUsNyArNzA1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2hlY2tHUFVTdGF0dXMoKQogI2VsaWYgVVNFKE9QRU5HTF9FUykKICAgICAgICAgW0VBR0xDb250
ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOwogI2VsaWYgVVNFKEFOR0xFKQotICAgICAgICBFR0xf
TWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0Us
IEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgbV9jb250ZXh0T2JqLT5tYWtlQ3VycmVudCgpOwog
I2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03NjEsMTQgKzgyMSwxNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlz
aWJsZSkKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
cGRhdGVDR0xDb250ZXh0KCkKIHsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICBpZiAoIXBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTE9HKFdl
YkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkgcmVjb25maWd1cmF0aW9uLiBD
YWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKIAogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxscHRyOwotICAgIEVHTF9RdWVy
eURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnBy
ZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7CisgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJp
YkVYVChtX2NvbnRleHRPYmotPmRpc3BsYXkoKSwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0
X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwogICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4
dCA9IG51bGxwdHI7CiAgICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NH
TF9DT05URVhUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0
KSk7CiAKQEAgLTgzNCwxMiArODk0LDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFsbG93T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0CiAjaWYgUExBVEZPUk0oTUFDKQogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlE
IGRpc3BsYXlJRCkKIHsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICBpZiAoIXBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0woKSkKICAgICAgICAgcmV0dXJuOwogI2lmIFVTRShBTkdMRSkKICAg
ICBpZiAoIW1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSkgewogICAgICAgICBFR0xE
ZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKLSAgICAgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJp
YkVYVChtX2Rpc3BsYXlPYmosIEVHTF9ERVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0
dHJpYio+KCZkZXZpY2UpKTsKKyAgICAgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJpYkVYVChtX2Nv
bnRleHRPYmotPmRpc3BsYXkoKSwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdM
QXR0cmliKj4oJmRldmljZSkpOwogICAgICAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBu
dWxscHRyOwogICAgICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdCA9IG51bGxwdHI7
CiAgICAgICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVY
VF9BTkdMRSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCA2Y2E0OWViYTJlYzRkOTQ4NzM2YTNl
MGVhZWI2NTBmNTgxMzU0Njk5Li5kNjQwODI1YzFmNzc4NjYxYmQwODZhMzk0OGYyYjRjNzk4YmYz
MWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtODEsNiArODEsNyBA
QCBjbGFzcyBJbWFnZURhdGE7CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogY2xhc3MgVGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOwogI2VuZGlmCitjbGFzcyBSZWZlcmVuY2VDb3VudGVk
RUdMQ29udGV4dDsKIAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+IFNo
YWRlck5hbWVIYXNoOwogCkBAIC0xMDUsMTIgKzEwNiwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9i
ajsgfQogICAgIFBsYXRmb3JtR0xPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV90ZXh0dXJlOyB9CiAgICAgQ0FMYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1fd2ViR0xM
YXllci5nZXQoKSk7IH0KICNpZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5T2Jq
OyB9CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5
KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNv
bmZpZygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlnT2JqOyB9CisgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3Qgb3ZlcnJpZGU7Cisj
ZWxzZQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9iajsgfQogI2VuZGlmIC8v
IFVTRShBTkdMRSkKICNlbHNlCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3QgZmluYWw7CkBAIC03MDMsMTAgKzcwNiwxMSBAQCBw
cml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+
IG1fd2ViR0xMYXllcjsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dE9i
aiB7IG51bGxwdHIgfTsKICNpZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9OwogICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0xDb25maWcgbV9jb25maWdPYmogeyBudWxscHRyIH07CisgICAgUmVmPFJlZmVy
ZW5jZUNvdW50ZWRFR0xDb250ZXh0PiBtX2NvbnRleHRPYmo7CisjZWxzZQorICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwogI2VuZGlmIC8vIFVT
RShBTkdMRSkKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXllci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlTGF5ZXIubW0KaW5kZXggZDdhOTlmNzRhM2MwYzFmMTk0
MjdjM2VhNTNkNGFkZjY5YzA5NzlhMC4uYTAzN2Y4YTE5OWM1NDQ1ZTZiYzYzOGI3ZTE5NzNkOWVk
ZGY5NTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRp
bGVMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUxh
eWVyLm1tCkBAIC0xMDgsNyArMTA4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRl
eHRSZWYpY29udGV4dAogICAgIC8vIGNvbW1pdCB3aWxsIGZsdXNoIHN1Y2ggdGlsZXMgYW5kIHRo
ZXkgd2lsbCBnZXQgcGFpbnRlZCB3aXRob3V0IGhvbGRpbmcgdGhlIHdlYiBsb2NrLgogICAgIC8v
IHJkYXI6Ly9wcm9ibGVtLzIxMTQ5NzU5CiAgICAgLy8gU3RpbGwgYXNzZXJ0IGFzIHRoZSBjb25k
aXRpb24gaXMgbm90IG5vcm1hbCBhbmQgbWF5IGNhdXNlIGdyYXBoaWNhbCBnbGl0Y2hlcy4KLSAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIC8vQVNTRVJUKFdl
YlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKICAgICBpZiAocHRocmVhZF9tYWluX25wKCkp
CiAgICAgICAgIFdlYlRocmVhZExvY2soKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBlMjEzYWFjNzFhOTQ0NTg3M2UyMTYwNDE2NGU0MTQ0
NThiMDZjYTkwLi4zMTk4Yzc3OWQ0YWFhOGU2NmIzMmNmMzkxMTliZWE4MGY4OTBhMzQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtNDAzMCw3
ICs0MDMwLDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnJlcXVpcmVzQ29sdW1ucyhpbnQgZGVz
aXJlZENvbHVtbkNvdW50KSBjb25zdAogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0Q29tcHV0
ZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgTGF5b3V0VW5pdCB3aWR0aCkKIHsKLSAg
ICBBU1NFUlQoISFtdWx0aUNvbHVtbkZsb3coKSA9PSByZXF1aXJlc0NvbHVtbnMoY291bnQpKTsK
KyAgICAvL0FTU0VSVCghIW11bHRpQ29sdW1uRmxvdygpID09IHJlcXVpcmVzQ29sdW1ucyhjb3Vu
dCkpOwogICAgIGlmICghbXVsdGlDb2x1bW5GbG93KCkpCiAgICAgICAgIHJldHVybjsKICAgICBt
dWx0aUNvbHVtbkZsb3coKS0+c2V0Q29sdW1uQ291bnRBbmRXaWR0aChjb3VudCwgd2lkdGgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KaW5kZXggMzYyMWI5OWMzNzBjNGUwNjhmZmIxM2JlOTc4N2M3NmMzYjBjZDNkYy4uODBk
NWU2NmMzNDY5MGNjM2E5MGI0NTlhYTMxNWVhMDc2ODNjMDU0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0yMTEs
NyArMjExLDcgQEAgc3RhdGljIGJvb2wgaXNJbnRlcm5hbEluc3RhbGwoKQogLy8gRklYTUUoMjA3
NzE2KTogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBHUFUgcHJvY2Vz
cyBpcyBjb21wbGV0ZS4KIHN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbWVkaWFSZWxhdGVk
TWFjaFNlcnZpY2VzKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzZXJ2aWNlcyA9IG1h
a2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7CiAgICAgICAgICJjb20uYXBwbGUuYXVk
aW8uQXVkaW9Db21wb25lbnRSZWdpc3RyYXIiLCAiY29tLmFwcGxlLmNvcmVtZWRpYS5lbmRwb2lu
dC54cGMiLAogICAgICAgICAiY29tLmFwcGxlLmNvcmVtZWRpYS5yb3V0ZWRpc2NvdmVyZXIueHBj
IiwgImNvbS5hcHBsZS5jb3JlbWVkaWEucm91dGluZ2NvbnRleHQueHBjIiwKQEAgLTI0Nyw3ICsy
NDcsNyBAQCBzdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1lZGlhUmVsYXRlZE1hY2hTZXJ2
aWNlcygpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIHN0YXRpYyBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgbm9uQnJvd3NlclNlcnZpY2VzKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIC8vQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBz
ZXJ2aWNlcyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7CiAgICAgICAgICJj
b20uYXBwbGUubHNkLm9wZW4iLAogICAgICAgICAiY29tLmFwcGxlLm1vYmlsZWFzc2V0ZCIsCkBA
IC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBub25Ccm93c2Vy
U2VydmljZXMoKQogCiBzdGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFneENvbXBpbGVyQ2xh
c3NlcygpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvL0FTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gaW9raXRDbGFzc2VzID0gbWFrZU5l
dmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsKICAgICAgICAgIkFHWENvbW1hbmRRdWV1ZSIs
CiAgICAgICAgICJBR1hEZXZpY2UiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAKaW5kZXggMDFhMWFjZmVhNjMxNTQy
YzBlYWJiMThjOGI1ZjAxZGVlMTUwMWJjZC4uMTEyZTQyMTAzNzIwZmJhN2U3M2NmMjhlZDU0NGVj
MjNlYjcwMWFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoT3B0
aW9uYWw8TmF2aWdhCiAKIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNl
aXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZl
QnJvd3NpbmdXYXJuaW5nKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy9B
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9zYWZlQnJvd3NpbmdXYXJuaW5n
KTsKICAgICBpZiAobV9wb2xpY3lSZXN1bHQgJiYgbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKSB7CiAgICAgICAgIGlmIChtX3JlcGx5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViS2l0Lnhjc2NoZW1lIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2Vi
S2l0Lnhjc2NoZW1lCmluZGV4IDYxMDM5YjFjNzE3MzhmMzIzM2RiOGIzNTk4NDNjNDRjODNlZjlj
OWYuLjIxOGRiMmIzNzY5OTBjNDU4YjVlOTgzYjE1ZDgyZjlkYzRhMzE4NmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dl
YktpdC54Y3NjaGVtZQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2oveGNzaGFy
ZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQueGNzY2hlbWUKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAg
IDwvVGVzdGFibGVzPgogICAgPC9UZXN0QWN0aW9uPgogICAgPExhdW5jaEFjdGlvbgotICAgICAg
YnVpbGRDb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCisgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiRGVidWciCiAgICAgICBzZWxlY3RlZERlYnVnZ2VySWRlbnRpZmllciA9ICJYY29kZS5EZWJ1
Z2dlckZvdW5kYXRpb24uRGVidWdnZXIuTExEQiIKICAgICAgIHNlbGVjdGVkTGF1bmNoZXJJZGVu
dGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5MYXVuY2hlci5MTERCIgogICAgICAg
bGF1bmNoU3R5bGUgPSAiMCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01DU1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NQ1NTLm1tCmluZGV4
IDJiYjUyZjJhNmQyMDMyM2U1ZWVjODU5N2YzODRmZmFmYjgzYWQ4MDcuLjMwNjMzZGRiYjZmZTEy
MzMyYTgwNjg5MmY1ZmY0N2VjZTc5MGFkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01DU1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TUNTUy5tbQpAQCAtOTksNyArOTksNyBAQCBDbGFzcyBraXRDbGFzcyhXZWJDb3JlOjpEZXByZWNh
dGVkQ1NTT01WYWx1ZSogaW1wbCkKICAgICBjYXNlIFdlYkNvcmU6OkRlcHJlY2F0ZWRDU1NPTVZh
bHVlOjpDU1NfQ1VTVE9NOgogICAgICAgICByZXR1cm4gW0RPTUNTU1ZhbHVlIGNsYXNzXTsKICAg
ICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gbmlsOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>