<?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>30349</bug_id>
          
          <creation_ts>2009-10-13 18:57:35 -0700</creation_ts>
          <short_desc>WebGL LayoutTests fail on buildbot</short_desc>
          <delta_ts>2009-11-06 16:55:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>jorlow</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>154514</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-13 18:57:35 -0700</bug_when>
    <thetext>Looks like it is failing because it is not able to get the desired pixel format. This may be due to the monitor being plugged in, or because the card is old or something. I need to make the code more robust in the face of a pixel format failure, make it succeed in more cases (on this buildbot if possible) and somehow avoid failing if the target machine can&apos;t run the webgl tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154521</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-13 19:47:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/7301008&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154626</commentid>
    <comment_count>2</comment_count>
      <attachid>41177</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-14 11:55:10 -0700</bug_when>
    <thetext>Created attachment 41177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154627</commentid>
    <comment_count>3</comment_count>
      <attachid>41177</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-14 12:02:51 -0700</bug_when>
    <thetext>Comment on attachment 41177
Patch

I don&apos;t like having to add this notion of validity everywhere. I think it would be better to just not be able to construct a GraphicsContext3D if the 3d is not available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158242</commentid>
    <comment_count>4</comment_count>
      <attachid>41960</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-27 10:20:23 -0700</bug_when>
    <thetext>Created attachment 41960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158247</commentid>
    <comment_count>5</comment_count>
      <attachid>41960</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-27 10:32:19 -0700</bug_when>
    <thetext>Comment on attachment 41960
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        (WebCore::CanvasRenderingContext3D::create):
&gt; +        (WebCore::CanvasRenderingContext3D::CanvasRenderingContext3D):
&gt; +        (WebCore::CanvasRenderingContext3D::beginPaint):
&gt; +        (WebCore::CanvasRenderingContext3D::endPaint):
&gt; +        (WebCore::CanvasRenderingContext3D::reshape):
&gt; +        (WebCore::CanvasRenderingContext3D::sizeInBytes):
&gt; +        (WebCore::CanvasRenderingContext3D::activeTexture):
&gt; +        (WebCore::CanvasRenderingContext3D::attachShader):
&gt; +        (WebCore::CanvasRenderingContext3D::bindAttribLocation):
&gt; +        (WebCore::CanvasRenderingContext3D::bindBuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::bindTexture):
&gt; +        (WebCore::CanvasRenderingContext3D::blendColor):
&gt; +        (WebCore::CanvasRenderingContext3D::blendEquation):
&gt; +        (WebCore::CanvasRenderingContext3D::blendEquationSeparate):
&gt; +        (WebCore::CanvasRenderingContext3D::blendFunc):
&gt; +        (WebCore::CanvasRenderingContext3D::blendFuncSeparate):
&gt; +        (WebCore::CanvasRenderingContext3D::bufferData):
&gt; +        (WebCore::CanvasRenderingContext3D::bufferSubData):
&gt; +        (WebCore::CanvasRenderingContext3D::checkFramebufferStatus):
&gt; +        (WebCore::CanvasRenderingContext3D::clear):
&gt; +        (WebCore::CanvasRenderingContext3D::clearColor):
&gt; +        (WebCore::CanvasRenderingContext3D::clearDepth):
&gt; +        (WebCore::CanvasRenderingContext3D::clearStencil):
&gt; +        (WebCore::CanvasRenderingContext3D::colorMask):
&gt; +        (WebCore::CanvasRenderingContext3D::compileShader):
&gt; +        (WebCore::CanvasRenderingContext3D::copyTexImage2D):
&gt; +        (WebCore::CanvasRenderingContext3D::copyTexSubImage2D):
&gt; +        (WebCore::CanvasRenderingContext3D::cullFace):
&gt; +        (WebCore::CanvasRenderingContext3D::depthFunc):
&gt; +        (WebCore::CanvasRenderingContext3D::depthMask):
&gt; +        (WebCore::CanvasRenderingContext3D::depthRange):
&gt; +        (WebCore::CanvasRenderingContext3D::detachShader):
&gt; +        (WebCore::CanvasRenderingContext3D::disable):
&gt; +        (WebCore::CanvasRenderingContext3D::disableVertexAttribArray):
&gt; +        (WebCore::CanvasRenderingContext3D::drawArrays):
&gt; +        (WebCore::CanvasRenderingContext3D::drawElements):
&gt; +        (WebCore::CanvasRenderingContext3D::enable):
&gt; +        (WebCore::CanvasRenderingContext3D::enableVertexAttribArray):
&gt; +        (WebCore::CanvasRenderingContext3D::finish):
&gt; +        (WebCore::CanvasRenderingContext3D::flush):
&gt; +        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
&gt; +        (WebCore::CanvasRenderingContext3D::frontFace):
&gt; +        (WebCore::CanvasRenderingContext3D::generateMipmap):
&gt; +        (WebCore::CanvasRenderingContext3D::getActiveAttrib):
&gt; +        (WebCore::CanvasRenderingContext3D::getActiveUniform):
&gt; +        (WebCore::CanvasRenderingContext3D::getAttribLocation):
&gt; +        (WebCore::CanvasRenderingContext3D::getBoolean):
&gt; +        (WebCore::CanvasRenderingContext3D::getBooleanv):
&gt; +        (WebCore::CanvasRenderingContext3D::getBufferParameteri):
&gt; +        (WebCore::CanvasRenderingContext3D::getBufferParameteriv):
&gt; +        (WebCore::CanvasRenderingContext3D::getError):
&gt; +        (WebCore::CanvasRenderingContext3D::getFloat):
&gt; +        (WebCore::CanvasRenderingContext3D::getFloatv):
&gt; +        (WebCore::CanvasRenderingContext3D::getFramebufferAttachmentParameteri):
&gt; +        (WebCore::CanvasRenderingContext3D::getFramebufferAttachmentParameteriv):
&gt; +        (WebCore::CanvasRenderingContext3D::getInteger):
&gt; +        (WebCore::CanvasRenderingContext3D::getIntegerv):
&gt; +        (WebCore::CanvasRenderingContext3D::getProgrami):
&gt; +        (WebCore::CanvasRenderingContext3D::getProgramiv):
&gt; +        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
&gt; +        (WebCore::CanvasRenderingContext3D::getRenderbufferParameteri):
&gt; +        (WebCore::CanvasRenderingContext3D::getRenderbufferParameteriv):
&gt; +        (WebCore::CanvasRenderingContext3D::getShaderi):
&gt; +        (WebCore::CanvasRenderingContext3D::getShaderiv):
&gt; +        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
&gt; +        (WebCore::CanvasRenderingContext3D::getShaderSource):
&gt; +        (WebCore::CanvasRenderingContext3D::getString):
&gt; +        (WebCore::CanvasRenderingContext3D::getTexParameterf):
&gt; +        (WebCore::CanvasRenderingContext3D::getTexParameterfv):
&gt; +        (WebCore::CanvasRenderingContext3D::getTexParameteri):
&gt; +        (WebCore::CanvasRenderingContext3D::getTexParameteriv):
&gt; +        (WebCore::CanvasRenderingContext3D::getUniformf):
&gt; +        (WebCore::CanvasRenderingContext3D::getUniformfv):
&gt; +        (WebCore::CanvasRenderingContext3D::getUniformi):
&gt; +        (WebCore::CanvasRenderingContext3D::getUniformiv):
&gt; +        (WebCore::CanvasRenderingContext3D::getUniformLocation):
&gt; +        (WebCore::CanvasRenderingContext3D::getVertexAttribf):
&gt; +        (WebCore::CanvasRenderingContext3D::getVertexAttribfv):
&gt; +        (WebCore::CanvasRenderingContext3D::getVertexAttribi):
&gt; +        (WebCore::CanvasRenderingContext3D::getVertexAttribiv):
&gt; +        (WebCore::CanvasRenderingContext3D::getVertexAttribOffset):
&gt; +        (WebCore::CanvasRenderingContext3D::hint):
&gt; +        (WebCore::CanvasRenderingContext3D::isBuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::isEnabled):
&gt; +        (WebCore::CanvasRenderingContext3D::isFramebuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::isProgram):
&gt; +        (WebCore::CanvasRenderingContext3D::isRenderbuffer):
&gt; +        (WebCore::CanvasRenderingContext3D::isShader):
&gt; +        (WebCore::CanvasRenderingContext3D::isTexture):
&gt; +        (WebCore::CanvasRenderingContext3D::lineWidth):
&gt; +        (WebCore::CanvasRenderingContext3D::linkProgram):
&gt; +        (WebCore::CanvasRenderingContext3D::pixelStorei):
&gt; +        (WebCore::CanvasRenderingContext3D::polygonOffset):
&gt; +        (WebCore::CanvasRenderingContext3D::readPixels):
&gt; +        (WebCore::CanvasRenderingContext3D::releaseShaderCompiler):
&gt; +        (WebCore::CanvasRenderingContext3D::renderbufferStorage):
&gt; +        (WebCore::CanvasRenderingContext3D::sampleCoverage):
&gt; +        (WebCore::CanvasRenderingContext3D::scissor):
&gt; +        (WebCore::CanvasRenderingContext3D::shaderSource):
&gt; +        (WebCore::CanvasRenderingContext3D::stencilFunc):
&gt; +        (WebCore::CanvasRenderingContext3D::stencilFuncSeparate):
&gt; +        (WebCore::CanvasRenderingContext3D::stencilMask):
&gt; +        (WebCore::CanvasRenderingContext3D::stencilMaskSeparate):
&gt; +        (WebCore::CanvasRenderingContext3D::stencilOp):
&gt; +        (WebCore::CanvasRenderingContext3D::stencilOpSeparate):
&gt; +        (WebCore::CanvasRenderingContext3D::texImage2D):
&gt; +        (WebCore::CanvasRenderingContext3D::texParameterf):
&gt; +        (WebCore::CanvasRenderingContext3D::texParameteri):
&gt; +        (WebCore::CanvasRenderingContext3D::texSubImage2D):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform1f):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform1fv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform1i):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform1iv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform2f):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform2fv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform2i):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform2iv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform3f):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform3fv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform3i):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform3iv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform4f):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform4fv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform4i):
&gt; +        (WebCore::CanvasRenderingContext3D::uniform4iv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniformMatrix2fv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniformMatrix3fv):
&gt; +        (WebCore::CanvasRenderingContext3D::uniformMatrix4fv):
&gt; +        (WebCore::CanvasRenderingContext3D::useProgram):
&gt; +        (WebCore::CanvasRenderingContext3D::validateProgram):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib1f):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib1fv):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib2f):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib2fv):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib3f):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib3fv):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib4f):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttrib4fv):
&gt; +        (WebCore::CanvasRenderingContext3D::vertexAttribPointer):
&gt; +        (WebCore::CanvasRenderingContext3D::viewport):

No need for this huge list.


&gt; Index: WebCore/html/canvas/CanvasRenderingContext3D.cpp
&gt; ===================================================================

&gt; +CanvasRenderingContext3D::CanvasRenderingContext3D(HTMLCanvasElement* canvas, GraphicsContext3D* context)
&gt;      : CanvasRenderingContext(canvas)
&gt; +    , m_context(context)
&gt;      , m_needsUpdate(true)
&gt;      , m_markedCanvasDirty(false)
&gt;  {

I think an ASSERT(context) would make the contract clearer.

&gt; Index: WebCore/html/canvas/CanvasRenderingContext3D.h
&gt; ===================================================================

&gt;  
&gt; -        GraphicsContext3D* graphicsContext3D() { return &amp;m_context; }
&gt; +        GraphicsContext3D* graphicsContext3D() { return m_context.get(); }

As I mentioned in previous reviews, this getter should be &quot;const&quot;.

&gt; Index: WebCore/platform/graphics/mac/Canvas3DLayer.mm
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/mac/Canvas3DLayer.mm	(revision 50115)
&gt; +++ WebCore/platform/graphics/mac/Canvas3DLayer.mm	(working copy)
&gt; @@ -50,6 +50,8 @@ using namespace WebCore;
&gt;  
&gt;  -(CGLPixelFormatObj)copyCGLPixelFormatForDisplayMask:(uint32_t)mask
&gt;  {
&gt; +    UNUSED_PARAM(mask);
&gt; +    /*
&gt;      CGLPixelFormatAttribute attribs[] =
&gt;      {
&gt;          (CGLPixelFormatAttribute) kCGLPFAAccelerated,
&gt; @@ -63,6 +65,9 @@ using namespace WebCore;
&gt;   
&gt;      CGLChoosePixelFormat(attribs, &amp;pixelFormatObj, &amp;numPixelFormats);
&gt;      return pixelFormatObj;
&gt; +    */

Why are you commenting out this code? If it shouldn&apos;t be there, remove it.

&gt; Index: WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
&gt; ===================================================================

&gt; +static void setPixelFormat(CGLPixelFormatAttribute* attribs, int colorBits, int depthBits, 
&gt; +                           bool accelerated, bool supersample, bool closest)
&gt; +{
&gt; +    *attribs++ = kCGLPFAColorSize;
&gt; +    *attribs++ = static_cast&lt;CGLPixelFormatAttribute&gt;(colorBits);
&gt; +    *attribs++ = kCGLPFADepthSize;
&gt; +    *attribs++ = static_cast&lt;CGLPixelFormatAttribute&gt;(depthBits);

I don&apos;t like this at all. This method just blindly assumes that the caller has allocated enough space.

You could use a Vector&lt;CGLPixelFormatAttribute&gt;, which would be much cleaner.

&gt; @@ -176,7 +200,7 @@ void GraphicsContext3D::endPaint()
&gt;  
&gt;  void GraphicsContext3D::reshape(int width, int height)
&gt;  {
&gt; -    if (width == m_currentWidth &amp;&amp; height == m_currentHeight)
&gt; +    if (width == m_currentWidth &amp;&amp; height == m_currentHeight || !m_contextObj)
&gt;          return;

How do you ever get here with m_contextObj == 0 ?

&gt;      m_currentWidth = width;
&gt; @@ -208,6 +232,9 @@ void GraphicsContext3D::reshape(int widt
&gt;  
&gt;  static inline void ensureContext(CGLContextObj context)
&gt;  {
&gt; +    if (!context)
&gt; +        return;
&gt; +        
&gt;      CGLContextObj currentContext = CGLGetCurrentContext();
&gt;      if (currentContext != context)
&gt;          CGLSetCurrentContext(context);

r- to clean up the setPixelFormat() stuff, but in general it looks ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158264</commentid>
    <comment_count>6</comment_count>
      <attachid>41960</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-27 10:40:52 -0700</bug_when>
    <thetext>Comment on attachment 41960
Patch

I think that CanvasRenderContext.h needs a comment explaining that ref/deref just ref/deref the canvas.

I think that m_canvas in CanvasRenderContext should be private, not protected.

&gt; +CanvasRenderingContext3D* CanvasRenderingContext3D::create(HTMLCanvasElement* canvas)

This function should return a PassOwnPtr&lt;CanvasRenderingContext3D&gt;.

&gt; +        static GraphicsContext3D* create();

This function should return a PassOwnPtr&lt;GraphicsContext3D&gt;.

&gt;  -(CGLPixelFormatObj)copyCGLPixelFormatForDisplayMask:(uint32_t)mask
&gt;  {
&gt; +    UNUSED_PARAM(mask);
&gt; +    /*
&gt;      CGLPixelFormatAttribute attribs[] =
&gt;      {
&gt;          (CGLPixelFormatAttribute) kCGLPFAAccelerated,
&gt; @@ -63,6 +65,9 @@ using namespace WebCore;
&gt;   
&gt;      CGLChoosePixelFormat(attribs, &amp;pixelFormatObj, &amp;numPixelFormats);
&gt;      return pixelFormatObj;
&gt; +    */
&gt; +    
&gt; +    return CGLRetainPixelFormat(CGLGetPixelFormat(m_contextObj));
&gt;  }

Normally we do not leave commented-out code in WebKit. Could you just delete this instead?

&gt; +static void setPixelFormat(CGLPixelFormatAttribute* attribs, int colorBits, int depthBits, 
&gt; +                           bool accelerated, bool supersample, bool closest)

Normally in WebKit we don&apos;t line up the second line with the parenthesis like this.

&gt; +    *attribs++ = static_cast&lt;CGLPixelFormatAttribute&gt;(0);

I&apos;m surprised this cast is helpful or

&gt; +GraphicsContext3D* GraphicsContext3D::create()
&gt; +{
&gt; +    GraphicsContext3D* context = new GraphicsContext3D();
&gt; +    if (context-&gt;m_contextObj)
&gt; +        return context;
&gt; +    delete context;
&gt; +    return 0;
&gt; +}

It would be slightly better to use OwnPtr inside this function. Also no need for the parentheses in the new expression.

&gt;  void GraphicsContext3D::reshape(int width, int height)
&gt;  {
&gt; -    if (width == m_currentWidth &amp;&amp; height == m_currentHeight)
&gt; +    if (width == m_currentWidth &amp;&amp; height == m_currentHeight || !m_contextObj)
&gt;          return;

Is this needed? You made the create function return 0 if m_contextObj is 0. How can this ever be called with an m_contextObj of zero?

&gt;  static inline void ensureContext(CGLContextObj context)
&gt;  {
&gt; +    if (!context)
&gt; +        return;

Same question. Does this get called with a context of 0? From where?

Seems on the right track, but review- because I think you should be using PassOwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158270</commentid>
    <comment_count>7</comment_count>
      <attachid>41967</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-27 11:02:39 -0700</bug_when>
    <thetext>Created attachment 41967
Replacement patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158275</commentid>
    <comment_count>8</comment_count>
      <attachid>41967</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-27 11:10:59 -0700</bug_when>
    <thetext>Comment on attachment 41967
Replacement patch

Looks like you addressed Simon’s comments, but not mine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158338</commentid>
    <comment_count>9</comment_count>
      <attachid>41976</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-27 13:33:49 -0700</bug_when>
    <thetext>Created attachment 41976
replacement patch

This addresses Simon and Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158339</commentid>
    <comment_count>10</comment_count>
      <attachid>41976</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-27 13:38:14 -0700</bug_when>
    <thetext>Comment on attachment 41976
replacement patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 50169)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,34 @@
&gt; +2009-10-27  Chris Marrin  &lt;cmarrin@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +        Make WebGL context failure more robust
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=30349
&gt; +
&gt; +        The buildbot failure has already been fixed and checked in. This

This is not a useful comment in a changelog; there isn&apos;t enough context. Just say what the current patch is doing.

&gt; +void CanvasRenderingContext2D::drawImage(HTMLCanvasElement* passedCanvas, const FloatRect&amp; srcRect,

passedCanvas is vague. Is it the source or the destination?


&gt; Index: WebCore/html/canvas/CanvasRenderingContext3D.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/CanvasRenderingContext3D.cpp	(revision 50115)
&gt; +++ WebCore/html/canvas/CanvasRenderingContext3D.cpp	(working copy)
&gt; @@ -42,12 +42,23 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -CanvasRenderingContext3D::CanvasRenderingContext3D(HTMLCanvasElement* canvas)
&gt; -    : CanvasRenderingContext(canvas)
&gt; +CanvasRenderingContext3D* CanvasRenderingContext3D::create(HTMLCanvasElement* canvas)

Darin said:
&gt; This function should return a PassOwnPtr&lt;CanvasRenderingContext3D&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158355</commentid>
    <comment_count>11</comment_count>
      <attachid>41976</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-27 14:05:48 -0700</bug_when>
    <thetext>Comment on attachment 41976
replacement patch

My comments are similar to Simon&apos;s.

&gt; -void CanvasRenderingContext2D::drawImage(HTMLCanvasElement* canvas, const FloatRect&amp; srcRect,
&gt; +void CanvasRenderingContext2D::drawImage(HTMLCanvasElement* passedCanvas, const FloatRect&amp; srcRect,

I think sourceCanvas or srcCanvas would be clearer.

&gt; +CanvasRenderingContext3D* CanvasRenderingContext3D::create(HTMLCanvasElement* canvas)

I suggested changing the return type of this function to PassOwnPtr. Did you decide not to? Maybe you confused this comment with the similar one about GraphicsContext3D::create?

&gt; +    PassOwnPtr&lt;GraphicsContext3D&gt; context = GraphicsContext3D::create();

This local variable should be OwnPtr, not PassOwnPtr.

&gt; +CanvasRenderingContext3D::CanvasRenderingContext3D(HTMLCanvasElement* passedCanvas, PassOwnPtr&lt;GraphicsContext3D&gt; context)
&gt; +    : CanvasRenderingContext(passedCanvas)

You could call it targetCanvas. But here passedCanvas seems OK.

&gt; +        // Ref and deref the m_canvas

We normally put a period on a comment like this one.

&gt; -    if (width == m_currentWidth &amp;&amp; height == m_currentHeight)
&gt; +    if (width == m_currentWidth &amp;&amp; height == m_currentHeight || !m_contextObj)
&gt;          return;

I believe you added this because reshape is called in the constructor. I asked you this in my last review comments, and you didn&apos;t answer or change the code. But I think I figured the answer out myself.

&gt;  static inline void ensureContext(CGLContextObj context)
&gt;  {
&gt; +    if (!context)
&gt; +        return;

I asked why you needed to add this, but you didn&apos;t say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158356</commentid>
    <comment_count>12</comment_count>
      <attachid>41983</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-27 14:06:24 -0700</bug_when>
    <thetext>Created attachment 41983
replacement patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158367</commentid>
    <comment_count>13</comment_count>
      <attachid>41983</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-27 14:27:24 -0700</bug_when>
    <thetext>Comment on attachment 41983
replacement patch

&gt; Index: WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
&gt; ===================================================================

&gt; +static void setPixelFormat(Vector&lt;CGLPixelFormatAttribute&gt;&amp; attribs, int colorBits, int depthBits, bool accelerated, bool supersample, bool closest)
&gt; +{
&gt; +    attribs.clear();
&gt; +    
&gt; +    attribs.append(kCGLPFAColorSize);
&gt; +    attribs.append(static_cast&lt;CGLPixelFormatAttribute&gt;(colorBits));
&gt; +    attribs.append(kCGLPFADepthSize);
&gt; +    attribs.append(static_cast&lt;CGLPixelFormatAttribute&gt;(depthBits));

So much better!

&gt; +PassOwnPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::create()
&gt; +{
&gt; +    PassOwnPtr&lt;GraphicsContext3D&gt; context = new GraphicsContext3D();

I think you should use an OwnPtr on the stack here.

&gt; +    setPixelFormat(attribs, 32, 32, true, true, false);

&gt; +        setPixelFormat(attribs, 32, 32, true, false, false);

&gt; +            setPixelFormat(attribs, 32, 16, true, false, false);

&gt; +                setPixelFormat(attribs, 32, 16, false, false, true);

This would be even more readable if we had enum values rather than &apos;true&apos;, &apos;false&apos; here. But OK for now (since the called method is just above).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158396</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-27 15:41:42 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/html/HTMLCanvasElement.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext.h
Sending        WebCore/html/canvas/CanvasRenderingContext2D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext3D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext3D.h
Sending        WebCore/platform/graphics/GraphicsContext3D.h
Sending        WebCore/platform/graphics/mac/Canvas3DLayer.mm
Sending        WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Transmitting file data .........
Committed revision 50181.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158411</commentid>
    <comment_count>15</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-10-27 16:36:52 -0700</bug_when>
    <thetext>&gt; +PassOwnPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::create()
&gt; +{
&gt; +    PassOwnPtr&lt;GraphicsContext3D&gt; context = new GraphicsContext3D();

If these were RefPtr&apos;s, it seems like http://webkit.org/coding/RefPtr.html would suggest this should be a OwnPtr not a PassOwnPtr.  I&apos;ve never used a PassOwnPtr though, so maybe I&apos;m off base?

&gt; +    return context-&gt;m_contextObj ? context : 0;
&gt; +}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158415</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-27 16:47:44 -0700</bug_when>
    <thetext>Jeremy: it got fixed before the commit:

PassOwnPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::create()
{
    OwnPtr&lt;GraphicsContext3D&gt; context(new GraphicsContext3D());
    return context-&gt;m_contextObj ? context.release() : 0;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158418</commentid>
    <comment_count>17</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-10-27 17:06:41 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Jeremy: it got fixed before the commit:
&gt; 
&gt; PassOwnPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::create()
&gt; {
&gt;     OwnPtr&lt;GraphicsContext3D&gt; context(new GraphicsContext3D());
&gt;     return context-&gt;m_contextObj ? context.release() : 0;
&gt; }

Gotcha.  Sorry for the noise.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158422</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-27 17:14:52 -0700</bug_when>
    <thetext>This change broke a security test:
http/tests/security/canvas-remote-read-remote-image.html

http://build.webkit.org/results/Leopard%20Intel%20Debug%20(Tests)/r50184%20(6527)/http/tests/security/canvas-remote-read-remote-image-pretty-diff.html

I&apos;ll see if I can see the easy fix in the patch.  If not, then I&apos;ll start a rollout since Chris isn&apos;t around. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158427</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-10-27 17:20:33 -0700</bug_when>
    <thetext>Fixing the test bustage via bug 30840.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41177</attachid>
            <date>2009-10-14 11:55:10 -0700</date>
            <delta_ts>2009-10-27 10:20:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>30349.patch</filename>
            <type>text/plain</type>
            <size>8217</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTU3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMTAtMTQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2UgV2ViR0wgY29udGV4dCBmYWlsdXJlIG1vcmUgcm9idXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDM0OQorCisgICAgICAgIFRoZSBidWlsZGJv
dCBmYWlsdXJlIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYW5kIGNoZWNrZWQgaW4uIFRoaXMKKyAg
ICAgICAgcGF0Y2ggd2lsbCBidWJibGUgdGhlIGZhaWx1cmUgdXAgdG8gSFRNTENvbnRleHRFbGVt
ZW50IHNvIGl0IGNhbgorICAgICAgICByZXR1cm4gbnVsbCBmcm9tIGdldENvbnRleHQgd2hlbiB0
aGUgY29udGV4dCBjcmVhdGlvbiBmYWlscy4KKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc09iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNPYmplY3Q6OmRlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDo6aXNWYWxpZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmlzVmFsaWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpp
c1ZhbGlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzVmFsaWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuc3VyZUNvbnRleHQpOgorCiAyMDA5LTEwLTE0ICBDaHJpcyBNYXJyaW4gIDxj
bWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUgbGFzdCBjaGFuZ2UgZml4ZWQgdGhlIHBy
b2JsZW0sIHJlbW92aW5nIGRpYWdub3N0aWMgcHJpbnRmcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNDk1NzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOSArMTczLDE1IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgbV9jb250
ZXh0ID0gbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCh0aGlzKTsKLQotICAgICAgICAgICAg
ICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxh
eWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzCi0gICAgICAgICAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGNvbnRleHQgaXMgdmFsaWQKKyAgICAgICAgICAgICAg
ICBpZiAobV9jb250ZXh0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNy
ZWF0ZWQgZm9yIHRoZSBDYW52YXMKKyAgICAgICAgICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQ29udGV4dCBjcmVhdGlvbiBmYWlsZWQsIHNvIGludmFsaWRh
dGUgdGhlIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0
LmdldCgpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuY3Bw
CShyZXZpc2lvbiA0OTU3NykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2b2lkIENhbnZhc09iamVjdDo6ZGVs
ZXRlT2JqZWN0KCkKIHsKICAgICBpZiAobV9vYmplY3QpIHsKICAgICAgICAgaWYgKG1fY29udGV4
dCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgICAgIF9kZWxldGVPYmplY3QobV9vYmplY3QpOworICAg
ICAgICAgICAgaWYgKG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgICAgICAgICAgX2RlbGV0ZU9iamVjdChtX29iamVjdCk7CiAgICAg
ICAgIH0KICAgICAgICAgbV9vYmplY3QgPSAwOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gNDk1NzcpCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgCisgICAgICAg
IC8vIElmIGNyZWF0ZWQgMkQgY29udGV4dHMgYXJlIGFsd2F5cyB2YWxpZAorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICBDYW52
YXNTdHlsZSogc3Ryb2tlU3R5bGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRTdHJva2VTdHls
ZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHJldmlzaW9uIDQ5NTc3KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIH5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuaXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gSGVscGVyIHRvIHJl
dHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcwogICAgICAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA0OTU3NykKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29s
IGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZhczsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDQ5NTc3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Miw4ICs5Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm0zRE9i
amVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVj
dDsgfQogI2VuZGlmCiAgICAgICAgIHZvaWQgY2hlY2tFcnJvcigpIGNvbnN0OwotICAgICAgICAK
LSAgICAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9CisgICAgICAgIGJvb2wgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgICAgIAogICAgICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBz
aXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxP
QVQsIEdMX0lOVCwgZXRjLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gNDk1NzgpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDEwICs2MiwxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoKQogICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbXSA9CiAg
ICAgewogICAgICAgICBrQ0dMUEZBQ2xvc2VzdFBvbGljeSwKLSAgICAgICAgKENHTFBpeGVsRm9y
bWF0QXR0cmlidXRlKSBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUp
IDMyLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFEZXB0aFNpemUs
IChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0
dHJpYnV0ZSkga0NHTFBGQUFjY2VsZXJhdGVkLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUpIGtDR0xQRkFTdXBlcnNhbXBsZSwKKyAgICAgICAga0NHTFBGQUNvbG9yU2l6ZSwgKENH
TFBpeGVsRm9ybWF0QXR0cmlidXRlKSAzMiwKKyAgICAgICAga0NHTFBGQURlcHRoU2l6ZSwgKENH
TFBpeGVsRm9ybWF0QXR0cmlidXRlKSAzMiwKKyAgICAgICAga0NHTFBGQUFjY2VsZXJhdGVkLAor
ICAgICAgICBrQ0dMUEZBU3VwZXJzYW1wbGUsCiAgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJp
YnV0ZSkgMAogICAgIH07CiAgICAgCkBAIC05Nyw3ICs5Nyw2IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRCgpCiAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChudW1Q
aXhlbEZvcm1hdHMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvLyBDb3VsZCBub3QgZmlu
ZCBhbiBhY2NlcHRhYmxlIHJlbmRlcmVyIC0gZmFpbAotICAgICAgICAgICAgICAgICAgICBtX2Nv
bnRleHRPYmogPSAwOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtMTQzLDYgKzE0Miw5IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRCgpCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250
ZXh0M0QoKQogeworICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJiBtX2RlcHRoQnVmZmVyKTsKICAgICA6OmdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CkBAIC0xNjAsOSArMTYyLDEzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNoZWNrRXJyb3IoKSBjb24KICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgQ0dMU2V0Q3Vy
cmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBDR0xFcnJvciBlcnIgPSBDR0xTZXRDdXJy
ZW50Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiBlcnIgPT0ga0NHTE5vRXJyb3I7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEKiBjb250ZXh0KQpAQCAtMTc2LDcgKzE4Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmVuZFBhaW50KCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYm
IGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdp
ZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQgfHwgIW1fY29udGV4dE9iaikKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CkBAIC0yMDgsNiAr
MjE0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdAogCiBzdGF0
aWMgaW5saW5lIHZvaWQgZW5zdXJlQ29udGV4dChDR0xDb250ZXh0T2JqIGNvbnRleHQpCiB7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIENHTENvbnRl
eHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOwogICAgIGlmIChj
dXJyZW50Q29udGV4dCAhPSBjb250ZXh0KQogICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChj
b250ZXh0KTsK
</data>
<flag name="review"
          id="22510"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41960</attachid>
            <date>2009-10-27 10:20:23 -0700</date>
            <delta_ts>2009-10-27 11:02:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>30349.patch</filename>
            <type>text/plain</type>
            <size>64759</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDE1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTc1IEBACisyMDA5LTEwLTI3ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIFdlYkdMIGNvbnRleHQgZmFpbHVyZSBtb3JlIHJvYnVzdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzNDkKKworICAgICAgICBUaGUgYnVpbGRi
b3QgZmFpbHVyZSBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGFuZCBjaGVja2VkIGluLiBUaGlzCisg
ICAgICAgIHBhdGNoIHdpbGwgYnViYmxlIHRoZSBmYWlsdXJlIHVwIHRvIEhUTUxDb250ZXh0RWxl
bWVudCBzbyBpdCBjYW4KKyAgICAgICAgcmV0dXJuIG51bGwgZnJvbSBnZXRDb250ZXh0IHdoZW4g
dGhlIGNvbnRleHQgY3JlYXRpb24gZmFpbHMuIEl0IGFsc28KKyAgICAgICAgaGFzIGEgbW9yZSBy
b2J1c3QgcGl4ZWwgZm9ybWF0IGNob29zaW5nIG1lY2hhbmlzbSBhbmQgY2FuIHJlbmRlcgorICAg
ICAgICBjb3JyZWN0bHkgd2hlbiBhIFNXIHJlbmRlcmVyIGlzIGNob3Nlbi4KKworICAgICAgICAq
IGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZh
c0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjplbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5k
RXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyRGVwdGgpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb3B5VGV4U3Vi
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmN1
bGxGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVw
dGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVw
dGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVw
dGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRl
dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpk
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmcm9udEZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZW5lcmF0ZU1p
cG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEFj
dGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RmxvYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGbG9hdHYpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtaSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmYp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJh
bWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dFRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFVuaWZvcm1mKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybWkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJpKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzYW1wbGVD
b3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNj
aXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaGFk
ZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpz
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpzdGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWYpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpdik6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZik6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZnYp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmkp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMml2
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNm
dik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0z
aSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0z
aXYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
NGYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTRpdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmli
M2YpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp2aWV3cG9ydCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tOgorICAgICAgICAoLVtDYW52YXMzRExh
eWVyIGNvcHlDR0xQaXhlbEZvcm1hdEZvckRpc3BsYXlNYXNrOl0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRQaXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVDb250ZXh0KToKKwogMjAwOS0xMC0yNyAgRnVt
aXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
aW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlz
aW9uIDUwMTE1KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcyLDEwICsxNzIsMTEgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRN
TENhbnZhc0VsZW1lbgogICAgICAgICAgICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5p
czNkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBpZiAoIW1fY29u
dGV4dCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IG5ldyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBh
IFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENh
bnZhcwotICAgICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVD
aGFuZ2UpOworICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQg
Y29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMKKyAgICAgICAgICAg
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4
dC5nZXQoKTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDEyICs0MiwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMpCitDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMpCit7CisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgcmV0dXJuIG5ldyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QoY2FudmFzLCBjb250ZXh0KTsKK30KKworQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcywgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgOiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0KGNhbnZhcykKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9uZWVk
c1VwZGF0ZSh0cnVlKQogICAgICwgbV9tYXJrZWRDYW52YXNEaXJ0eShmYWxzZSkKIHsKLSAgICBt
X2NvbnRleHQucmVzaGFwZShtX2NhbnZhcy0+d2lkdGgoKSwgbV9jYW52YXMtPmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnJlc2hhcGUobV9jYW52YXMtPndpZHRoKCksIG1fY2FudmFzLT5oZWln
aHQoKSk7CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6fkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRCgpCkBAIC03Niw3ICs4Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjptYXJrQ29udGUKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiZWdpblBhaW50KCkK
IHsKICAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICBtX2NvbnRleHQuYmVn
aW5QYWludCh0aGlzKTsKKyAgICAgICAgbV9jb250ZXh0LT5iZWdpblBhaW50KHRoaXMpOwogICAg
IH0KIH0KIApAQCAtODQsNyArOTQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
ZW5kUGFpbnQoCiB7CiAgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKICAgICAgICAgbV9t
YXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQuZW5kUGFpbnQoKTsK
KyAgICAgICAgbV9jb250ZXh0LT5lbmRQYWludCgpOwogICAgIH0KIH0KIApAQCAtOTgsMTIgKzEw
OCwxMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVzaGFwZShpCiAgICAgICAg
IG1fbmVlZHNVcGRhdGUgPSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgbV9jb250ZXh0LnJlc2hh
cGUod2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQp
OwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC5zaXpl
SW5CeXRlcyh0eXBlKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5zaXplSW5CeXRlcyh0
eXBlKTsKICAgICBpZiAocmVzdWx0IDw9IDApIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgIH0KQEAgLTExMiw3ICsxMjIsNyBAQCBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpz
aXplSW5CeXRlCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphY3RpdmVUZXh0dXJl
KHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKIHsKLSAgICBtX2NvbnRleHQuYWN0aXZlVGV4dHVyZSh0
ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTIwLDcgKzEzMCw3IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphdHRhY2hTaGEKIHsKICAgICBpZiAoIXByb2dy
YW0gfHwgIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC5hdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgc2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAg
LTEyOCw5NCArMTM4LDk0IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQXR0
cmkKIHsKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQu
YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0J1ZmZlciogYnVmZmVy
KQogewotICAgIG1fY29udGV4dC5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJp
bmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzRnJhbWVidWZmZXIqIGJ1
ZmZlcikKIHsKLSAgICBtX2NvbnRleHQuYmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
KyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1Jl
bmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIG1fY29udGV4dC5iaW5kUmVuZGVyYnVm
ZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZm
ZXIodGFyZ2V0LCByZW5kZXJidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRUZXh0dXJl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIG1f
Y29udGV4dC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRDb2xvcihk
b3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCiB7Ci0g
ICAgbV9jb250ZXh0LmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIG1f
Y29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmJsZW5kRXF1YXRpb24oIHVuc2lnbmVkIGxvbmcgbW9kZSApCiB7Ci0gICAgbV9jb250
ZXh0LmJsZW5kRXF1YXRpb24obW9kZSk7CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1v
ZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9u
ZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKIHsKLSAgICBtX2NvbnRleHQuYmxl
bmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgbV9jb250ZXh0LT5i
bGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0
b3IpCiB7Ci0gICAgbV9jb250ZXh0LmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKKyAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfSAgICAgICAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBs
b25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBo
YSkKIHsKLSAgICBtX2NvbnRleHQuYmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNy
Y0FscGhhLCBkc3RBbHBoYSk7CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNS
R0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVmZmVy
RGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcgdXNhZ2Up
CiB7Ci0gICAgbV9jb250ZXh0LmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CisgICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgdXNhZ2UpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJheSogZGF0YSwg
dW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKLSAgICBtX2NvbnRleHQuYnVmZmVyRGF0YSh0YXJnZXQs
IGRhdGEsIHVzYWdlKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLCB1
c2FnZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNBcnJheSogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQuYnVm
ZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJT
dWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCiB1bnNpZ25lZCBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKLSAgICByZXR1
cm4gbV9jb250ZXh0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKKyAgICByZXR1cm4g
bV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLSAgICBtX2NvbnRleHQuY2xlYXIobWFz
ayk7CisgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTIyOSw0MyArMjM5LDQzIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpjbGVhckNvbG8KICAgICAgICAgYiA9IDA7CiAgICAgaWYgKGlzbmFuKGEp
KQogICAgICAgICBhID0gMTsKLSAgICBtX2NvbnRleHQuY2xlYXJDb2xvcihyLCBnLCBiLCBhKTsK
KyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQogewotICAgIG1fY29udGV4dC5jbGVhckRlcHRoKGRl
cHRoKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpjbGVhclN0ZW5jaWwobG9uZyBzKQogewotICAgIG1fY29udGV4dC5jbGVhclN0ZW5jaWwocyk7
CisgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNvbG9y
TWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogewotICAg
IG1fY29udGV4dC5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBtX2NvbnRleHQu
Y29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihzaGFk
ZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25n
IHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRl
cikKIHsKLSAgICBtX2NvbnRleHQuY29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgbV9jb250ZXh0LT5j
b3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0
LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpCiB7Ci0gICAgbV9jb250ZXh0LmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIG1fY29udGV4dC0+Y29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMzE5LDcgKzMyOSw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBDYW52YXNSZW5kZXJp
bmcKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmN1bGxGYWNlKHVuc2lnbmVkIGxv
bmcgbW9kZSkKIHsKLSAgICBtX2NvbnRleHQuY3VsbEZhY2UobW9kZSk7CisgICAgbV9jb250ZXh0
LT5jdWxsRmFjZShtb2RlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC0zNzMsMTkgKzM4MywxOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
ZGVsZXRlVGV4CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXB0aEZ1bmModW5z
aWduZWQgbG9uZyBmdW5jKQogewotICAgIG1fY29udGV4dC5kZXB0aEZ1bmMoZnVuYyk7CisgICAg
bV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVuYyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlcHRoTWFzayhi
b29sIGZsYWcpCiB7Ci0gICAgbV9jb250ZXh0LmRlcHRoTWFzayhmbGFnKTsKKyAgICBtX2NvbnRl
eHQtPmRlcHRoTWFzayhmbGFnKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVwdGhSYW5nZShkb3VibGUg
ek5lYXIsIGRvdWJsZSB6RmFyKQogewotICAgIG1fY29udGV4dC5kZXB0aFJhbmdlKHpOZWFyLCB6
RmFyKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTM5NCw1OCArNDA0LDU4IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXRhY2hTaGEKICAgICBpZiAoIXByb2dyYW0g
fHwgIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LmRldGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW0s
IHNoYWRlcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkK
IHsKLSAgICBtX2NvbnRleHQuZGlzYWJsZShjYXApOworICAgIG1fY29udGV4dC0+ZGlzYWJsZShj
YXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCkKIHsKLSAgICBtX2NvbnRleHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKKyAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmly
c3QsIGxvbmcgY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKKyAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25l
ZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQogewotICAgIG1f
Y29udGV4dC5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7CisgICAgbV9j
b250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAgIG1fY29udGV4dC5lbmFi
bGUoY2FwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQogewotICAgIG1fY29u
dGV4dC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisgICAgbV9jb250ZXh0LT5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZpbmlzaCgpCiB7
Ci0gICAgbV9jb250ZXh0LmZpbmlzaCgpOworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpmbHVzaCgpCiB7Ci0gICAgbV9jb250ZXh0LmZsdXNoKCk7CisgICAgbV9j
b250ZXh0LT5mbHVzaCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0K
IApAQCAtNDU0LDcgKzQ2NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmcmFt
ZWJ1ZmYKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBt
X2NvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5k
ZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC00NjMsMjYgKzQ3
MywyNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZnJhbWVidWZmCiAgICAgaWYg
KCF0ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1fY29udGV4dC5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZnJv
bnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKLSAgICBtX2NvbnRleHQuZnJvbnRGYWNlKG1v
ZGUpOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpn
ZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKLSAgICBtX2NvbnRleHQuZ2Vu
ZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdl
dCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0
cjxDYW52YXNBY3RpdmVJbmZvPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEFjdGl2ZUF0
dHJpYihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFwcm9ncmFtIHx8
IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFtX2NvbnRleHQuZ2V0QWN0aXZlQXR0cmli
KHByb2dyYW0sIGluZGV4LCBpbmZvKSkgeworICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5j
b250ZXh0KCkgIT0gdGhpcyB8fCAhbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwg
aW5kZXgsIGluZm8pKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KQEAgLTQ5Miw3ICs1MDIsNyBAQCBQYXNzUmVmUHRyPENhbnZhc0FjdGl2
ZUluZm8+IENhbnZhc1JlbmRlCiBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShDYW52YXNQcm9ncmFtKiBwcm9ncmFt
LCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBY3RpdmVJ
bmZvIGluZm87Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlz
IHx8ICFtX2NvbnRleHQuZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbykpIHsK
KyAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMgfHwgIW1fY29u
dGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbykpIHsKICAgICAgICAg
ZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNTAxLDI1
MSArNTExLDI1MSBAQCBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlCiAK
IGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0LmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOworICAgIHJldHVybiBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCiBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVhbih1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAg
IGJvb2wgcmVzdWx0ID0gbV9jb250ZXh0LmdldEJvb2xlYW4ocG5hbWUpOworICAgIGJvb2wgcmVz
dWx0ID0gbV9jb250ZXh0LT5nZXRCb29sZWFuKHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVh
bnYodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRl
QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldEJvb2xlYW52KHBuYW1lKTsKKyAgICBSZWZQdHI8
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRCb29sZWFudihw
bmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4g
YXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFt
ZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAg
aW50IHJlc3VsdCA9IG1fY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUp
OworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0
LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkg
PSBtX2NvbnRleHQuZ2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CisgICAgUmVm
UHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVy
aXYodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
ICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZXRFcnJvcigpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXRFcnJvcigpOwor
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7CiB9CiAKIGZsb2F0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0RmxvYXQodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBmbG9h
dCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0RmxvYXQocG5hbWUpOworICAgIGZsb2F0IHJlc3VsdCA9
IG1fY29udGV4dC0+Z2V0RmxvYXQocG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9h
dEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25n
IHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4
dC5nZXRGbG9hdHYocG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQog
ewotICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9j
b250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHRhcmdldCwgYXR0YWNo
bWVudCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQu
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBw
bmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFt
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJy
YXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEludGVnZXIodW5zaWdu
ZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0SW50ZWdl
cihwbmFtZSk7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRJbnRlZ2VyKHBuYW1l
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldEludGVnZXJ2KHBuYW1lKTsKKyAgICBS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFt
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJy
YXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1pKENhbnZh
c1Byb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgaW50IHJlc3Vs
dCA9IG1fY29udGV4dC5nZXRQcm9ncmFtaShwcm9ncmFtLCBwbmFtZSk7CisgICAgaW50IHJlc3Vs
dCA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWkocHJvZ3JhbSwgcG5hbWUpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1Jl
ZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFt
aXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFByb2dyYW1pdihwcm9n
cmFtLCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4
dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkK
IHsKLSAgICBTdHJpbmcgcyA9IG1fY29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsK
KyAgICBTdHJpbmcgcyA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gczsKIH0KIAog
aW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBpbnQgcmVz
dWx0ID0gbV9jb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7
CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0
YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0ludEFy
cmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaShDYW52YXNTaGFkZXIqIHNoYWRlciwgdW5z
aWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFNoYWRl
cmkoc2hhZGVyLCBwbmFtZSk7CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0U2hhZGVy
aShzaGFkZXIsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC5nZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFz
SW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsK
IH0KIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhD
YW52YXNTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBTdHJpbmcgcyA9IG1fY29udGV4dC5nZXRTaGFk
ZXJJbmZvTG9nKHNoYWRlcik7CisgICAgU3RyaW5nIHMgPSBtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2coc2hhZGVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAg
IHJldHVybiBzOwogfQogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFk
ZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgU3RyaW5nIHMgPSBtX2NvbnRl
eHQuZ2V0U2hhZGVyU291cmNlKHNoYWRlcik7CisgICAgU3RyaW5nIHMgPSBtX2NvbnRleHQtPmdl
dFNoYWRlclNvdXJjZShzaGFkZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiAgICAgcmV0dXJuIHM7CiB9CiAKIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5n
ZXRTdHJpbmcobmFtZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKG5hbWUpOwog
fQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgZmxvYXQgcmVz
dWx0ID0gbV9jb250ZXh0LmdldFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSk7CisgICAgZmxv
YXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4
dC5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzRmxv
YXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFy
cmF5OwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJp
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGludCBy
ZXN1bHQgPSBtX2NvbnRleHQuZ2V0VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKKyAgICBp
bnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBw
bmFtZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0Lmdl
dFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5Owog
fQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1mKENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9j
b250ZXh0LmdldFVuaWZvcm1mKHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBmbG9hdCByZXN1bHQg
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1mKHByb2dyYW0sIGxvY2F0aW9uKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NS
ZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlm
b3JtZnYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKIHsKLSAgICBSZWZQ
dHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VW5pZm9ybWZ2KHByb2dy
YW0sIGxvY2F0aW9uKTsKKyAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGxvbmcgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtaShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBs
b25nIGxvY2F0aW9uKQogewotICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0LmdldFVuaWZvcm1p
KHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWkocHJvZ3JhbSwgbG9jYXRpb24pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJh
eT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoQ2FudmFzUHJvZ3JhbSog
cHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFy
cmF5ID0gbV9jb250ZXh0LmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbik7CisgICAgUmVm
UHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dy
YW0sIGxvY2F0aW9uKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAg
IHJldHVybiBhcnJheTsKIH0KIAogbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5h
bWUpOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
YmYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBmbG9h
dCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliZihpbmRleCwgcG5hbWUpOworICAg
IGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliZihpbmRleCwgcG5hbWUp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxv
bmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250
ZXh0LmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0Zs
b2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFy
cmF5OwogfQogCiBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
aSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGxvbmcg
cmVzdWx0ID0gbV9jb250ZXh0LmdldFZlcnRleEF0dHJpYmkoaW5kZXgsIHBuYW1lKTsKKyAgICBs
b25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliaShpbmRleCwgcG5hbWUpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBu
YW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0
VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+
IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQog
CiBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVu
c2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgbG9uZyByZXN1
bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CisgICAg
bG9uZyByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmhpbnQodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKLSAgICBtX2NvbnRleHQuaGludCh0
YXJnZXQsIG1vZGUpOworICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTc1NCw0MiArNzY0LDQyIEBA
IGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0J1ZmZlcigKICAgICBpZiAoIWJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICByZXR1cm4gbV9jb250ZXh0
LmlzQnVmZmVyKGJ1ZmZlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVy
KTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzRW5hYmxlZCh1bnNpZ25l
ZCBsb25nIGNhcCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmlzRW5hYmxlZChjYXApOworICAg
IHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChjYXApOwogfQogCiBib29sIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZm
ZXIpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAog
Ym9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBw
cm9ncmFtKQogewotICAgIHJldHVybiBtX2NvbnRleHQuaXNQcm9ncmFtKHByb2dyYW0pOworICAg
IHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogYm9vbCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVu
ZGVyYnVmZmVyKQogewotICAgIHJldHVybiBtX2NvbnRleHQuaXNSZW5kZXJidWZmZXIocmVuZGVy
YnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXIpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNTaGFkZXIoQ2FudmFz
U2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5pc1NoYWRlcihzaGFkZXIp
OworICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlcik7CiB9CiAKIGJvb2wgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc1RleHR1cmUoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkK
IHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmlzVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICByZXR1cm4g
bV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQogewotICAgIG1fY29udGV4dC5saW5l
V2lkdGgoKGZsb2F0KSB3aWR0aCk7CisgICAgbV9jb250ZXh0LT5saW5lV2lkdGgoKGZsb2F0KSB3
aWR0aCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtNzk4
LDkyICs4MDgsOTIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmxpbmtQcm9ncgog
ICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRl
eHQubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9n
cmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwg
bG9uZyBwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQucGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsK
KyAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQogewotICAgIG1f
Y29udGV4dC5wb2x5Z29uT2Zmc2V0KChmbG9hdCkgZmFjdG9yLCAoZmxvYXQpIHVuaXRzKTsKKyAg
ICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoKGZsb2F0KSBmYWN0b3IsIChmbG9hdCkgdW5pdHMp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8
Q2FudmFzQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgs
IGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2ln
bmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7Ci0gICAgUmVmUHRyPENhbnZh
c0FycmF5PiBhcnJheSA9IG1fY29udGV4dC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSk7CisgICAgUmVmUHRyPENhbnZhc0FycmF5PiBhcnJheSA9IG1fY29udGV4
dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIHsK
LSAgICBtX2NvbnRleHQucmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CisgICAgbV9jb250ZXh0LT5y
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9jb250
ZXh0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CisgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFn
ZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQogewotICAgIG1fY29udGV4dC5zYW1wbGVDb3Zl
cmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJh
Z2UoKGZsb2F0KSB2YWx1ZSwgaW52ZXJ0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c2Npc3Nvcihsb25n
IHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7
Ci0gICAgbV9jb250ZXh0LnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250
ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaGFk
ZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewot
ICAgIG1fY29udGV4dC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJpbmcpOworICAgIG1fY29udGV4
dC0+c2hhZGVyU291cmNlKHNoYWRlciwgc3RyaW5nKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNp
bEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQog
ewotICAgIG1fY29udGV4dC5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworICAgIG1fY29u
dGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywg
bG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLSAgICBtX2NvbnRleHQuc3RlbmNpbEZ1
bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworICAgIG1fY29udGV4dC0+c3RlbmNp
bEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpz
dGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0gICAgbV9jb250ZXh0LnN0ZW5jaWxN
YXNrKG1hc2spOworICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBs
b25nIG1hc2spCiB7Ci0gICAgbV9jb250ZXh0LnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFz
ayk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25n
IHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQogewotICAgIG1fY29udGV4dC5zdGVuY2lsT3Ao
ZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBs
b25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWdu
ZWQgbG9uZyB6cGFzcykKIHsKLSAgICBtX2NvbnRleHQuc3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwg
ZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZh
Y2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIApAQCAtODkzLDcgKzkwMyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp0ZXhJbWFnZTIKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVy
cm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTkwNCw3ICs5MTQs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyCiB7CiAgICAgLy8g
RklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7
Ci0gICAgbV9jb250ZXh0LnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsCisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CkBAIC05MTQsNyArOTI0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnRleEltYWdlMgogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBh
bnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlw
bHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
OTIzLDcgKzkzMyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTIK
IHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAog
ICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjYW52
YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgY2FudmFzLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTMyLDE5ICs5NDIsMTkgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMgogewogICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAg
IG1fY29udGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHZpZGVvLCBmbGlwWSwgcHJlbXVs
dGlwbHlBbHBoYSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHZp
ZGVvLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pCiB7Ci0g
ICAgbV9jb250ZXh0LnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOworICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50
IHBhcmFtKQogewotICAgIG1fY29udGV4dC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBh
cmFtKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0p
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTk1NCw3ICs5
NjQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hCiB7CiAgICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9
IDA7Ci0gICAgbV9jb250ZXh0LnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTY0LDcgKzk3NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC05
NzQsNyArOTg0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYQog
ewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAg
ICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlB
bHBoYSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBo
YSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTg0LDcg
Kzk5NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVj
ID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBjYW52YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgY2FudmFzLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTk0LDEzICsx
MDA0LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVj
ID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB2aWRlbywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEp
OworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB2aWRlbywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCkKIHsKLSAg
ICBtX2NvbnRleHQudW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZihsb2NhdGlvbiwgeCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIApAQCAtMTAxMCw3ICsxMDIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnVuaWZvcm0xZgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBt
X2NvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7Cisg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgp
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDIwLDEz
ICsxMDMwLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWYKICAg
ICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LnVuaWZv
cm0xZnYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2Nh
dGlvbiwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9u
LCBpbnQgeCkKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTAzNiw3ICsxMDQ2LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaQogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICBtX2NvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC0xMDQ2LDEzICsxMDU2LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtMWkKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAg
bV9jb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+
dW5pZm9ybTFpdihsb2NhdGlvbiwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0y
Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIG1fY29udGV4dC51bmlm
b3JtMmYobG9jYXRpb24sIHgsIHkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9u
LCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0x
MDYzLDcgKzEwNzMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJm
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwg
di0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihs
b2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEwNzQsMTMgKzEwODQsMTMgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZgogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAg
bV9jb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKIHsKLSAgICBtX2NvbnRleHQu
dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2Nh
dGlvbiwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMTA5MSw3ICsxMTAxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm0yaQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LnVuaWZvcm0yaXYobG9jYXRp
b24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTAyLDEzICsxMTEyLDEzIEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmkKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgot
ICAgIG1fY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAgbV9j
b250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQog
ewotICAgIG1fY29udGV4dC51bmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTE5LDcgKzExMjksNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2Nv
bnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgo
KSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEx
MzAsMTMgKzExNDAsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0z
ZgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24s
IHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYsIHNp
emUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4
LCBpbnQgeSwgaW50IHopCiB7Ci0gICAgbV9jb250ZXh0LnVuaWZvcm0zaShsb2NhdGlvbiwgeCwg
eSwgeik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTExNDcsNyArMTE1Nyw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2kKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgMwotICAgIG1fY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpIC8gMyk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIApAQCAtMTE1OCwxMyArMTE2OCwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTNpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQudW5p
Zm9ybTNpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNp
dihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKIHsKLSAgICBt
X2NvbnRleHQudW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTE3NSw3ICsxMTg1LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250
ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkg
LyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTg2
LDEzICsxMTk2LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGYK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2
LCBzaXplIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LCBzaXpl
IC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwg
aW50IHksIGludCB6LCBpbnQgdykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTRpKGxvY2F0aW9u
LCB4LCB5LCB6LCB3KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwg
eiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTIw
Myw3ICsxMjEzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aQog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9j
YXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMjE0LDcgKzEyMjQsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2Nv
bnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+
dW5pZm9ybTRpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyMjUsNyArMTIzNSw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29u
dGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+
bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24s
IHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyMzYsNyArMTI0Niw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAg
IG1fY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUg
LyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKQEAgLTEyNDcsNyArMTI1Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA5KTsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKQEAgLTEyNTgsNyArMTI2OCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1fY29udGV4dC51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDkpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyNjksNyArMTI3
OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMTYKLSAgICBtX2NvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOworICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgp
IC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEy
ODAsMzIgKzEyOTAsMzIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1N
YQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBtX2NvbnRl
eHQudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3Jh
bSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9n
cmFtKQogewotICAgIG1fY29udGV4dC52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgbV9j
b250ZXh0LT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCiB7Ci0gICAgbV9jb250ZXh0
LnZlcnRleEF0dHJpYjFmKGluZHgsIHYwKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFm
KGluZHgsIHYwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBt
YWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAg
IG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjFmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEzMTQsMjAgKzEzMjQsMjAgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1h
a2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAg
VU5VU0VEX1BBUkFNKHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYo
aW5keCwgdik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAs
IGZsb2F0IHYxKQogewotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEp
OworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYoaW5keCwgdjAsIHYxKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRB
cnJheSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmln
IGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRy
aWIyZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihp
bmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKQEAgLTEzMzYsMjAgKzEzNDYsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcg
ZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwog
ICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdik7CisgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikK
IHsKLSAgICBtX2NvbnRleHQudmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2Mik7CisgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJh
eSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVu
b3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4
LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
QEAgLTEzNTgsMjAgKzEzNjgsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZl
cnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5v
dWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogICAg
IAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdik7CisgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxv
YXQgdjMpCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIs
IHYzKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYz
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
Q2FudmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUg
YXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4
dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYjRmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKQEAgLTEzODAsMTMgKzEzOTAsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBh
cnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BB
UkFNKHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdik7
CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVu
c2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwg
dW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYlBvaW50
ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOworICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIG9mZnNldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIApAQCAtMTQwMCw3ICsxNDEwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnZpZXdwb3J0KAogICAgICAgICB3aWR0aCA9IDEwMDsKICAgICBpZiAoaXNuYW4oaGVpZ2h0KSkK
ICAgICAgICAgaGVpZ2h0ID0gMTAwOwotICAgIG1fY29udGV4dC52aWV3cG9ydCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaAkocmV2aXNpb24g
NTAxMTUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsK
IAogICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCA6IHB1YmxpYyBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRChIVE1MQ2FudmFzRWxlbWVudCopOwotICAgICAgICB+Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKCk7CisgICAgICAgIHN0YXRpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNyZWF0ZShI
VE1MQ2FudmFzRWxlbWVudCopOworICAgICAgICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIApAQCAtMjg4LDcgKzI4OCw3IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKIAogICAg
ICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBo
aWNzQ29udGV4dDNEKCkgeyByZXR1cm4gJm1fY29udGV4dDsgfQorICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0K
ICAgICAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKQEAg
LTMwMCwxOCArMzAwLDIxIEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgCiAgICAg
cHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENhbnZhc09iamVjdDsKKworICAgICAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRl
eHQzRCopOworCiAgICAgICAgIHZvaWQgYWRkT2JqZWN0KENhbnZhc09iamVjdCopOwogICAgICAg
ICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIAogICAgICAgICB2b2lkIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwogICAgICAgICB2b2lkIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChi
b29sIGNoYW5nZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY29udGV4dC5jaGVja0Vycm9y
KCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmNoZWNrRXJyb3IoKTsKICAgICAgICAgICAgIGlm
IChjaGFuZ2VkKQogICAgICAgICAgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBtX2NvbnRleHQ7CisgICAg
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgICAgICBib29sIG1f
bmVlZHNVcGRhdGU7CiAgICAgICAgIGJvb2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKICAgICAgICAg
Ly8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0gaXQgZG9lcyBub3QgaW5jcmVtZW50
IGFueQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDExICs3NCwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKICNlbmRp
ZgogCi0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0QgOiBOb25jb3B5YWJsZSB7CisgICAgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgZW51bSBTaGFkZXJUeXBlIHsgRlJBR01FTlRfU0hBREVSLCBWRVJURVhfU0hBREVS
IH07CiAgICAgCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIHN0YXRpYyBH
cmFwaGljc0NvbnRleHQzRCogY3JlYXRlKCk7CiAgICAgICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dDNEKCk7CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC05Miw3ICs5Miw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBj
b25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQogI2VuZGlmCiAgICAgICAgIHZv
aWQgY2hlY2tFcnJvcigpIGNvbnN0OwotICAgICAgICAKICAgICAgICAgdm9pZCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlbHBlciB0byByZXR1cm4gdGhlIHNp
emUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKQEAgLTMyMCw2ICszMTksOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCk7ICAg
ICAgICAKICAgICAgICAgCiAgICAgcHJpdmF0ZTogICAgICAgIAorICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRCgpOworCiAgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0
OwogICAgICAgICAKICNpZiBQTEFURk9STShNQUMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0JKHJldmlzaW9uIDUwMTE1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLShDR0xQaXhl
bEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFz
awogeworICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKKyAgICAvKgogICAgIENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlIGF0dHJpYnNbXSA9CiAgICAgewogICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUpIGtDR0xQRkFBY2NlbGVyYXRlZCwKQEAgLTYzLDYgKzY1LDkgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAgCiAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVs
Rm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKICAgICByZXR1cm4gcGl4ZWxGb3JtYXRPYmo7
CisgICAgKi8KKyAgICAKKyAgICByZXR1cm4gQ0dMUmV0YWluUGl4ZWxGb3JtYXQoQ0dMR2V0UGl4
ZWxGb3JtYXQobV9jb250ZXh0T2JqKSk7CiB9CiAKIC0oQ0dMQ29udGV4dE9iailjb3B5Q0dMQ29u
dGV4dEZvclBpeGVsRm9ybWF0OihDR0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLmNwcAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDU0ICs1
MCw3OCBAQAogI2luY2x1ZGUgIldlYktpdENTU01hdHJpeC5oIgogCiAjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPE9wZW5HTC9DR0xSZW5kZXJlcnMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSogYXR0cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRo
Qml0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjY2VsZXJhdGVkLCBib29s
IHN1cGVyc2FtcGxlLCBib29sIGNsb3Nlc3QpCit7CisgICAgKmF0dHJpYnMrKyA9IGtDR0xQRkFD
b2xvclNpemU7CisgICAgKmF0dHJpYnMrKyA9IHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0
cmlidXRlPihjb2xvckJpdHMpOworICAgICphdHRyaWJzKysgPSBrQ0dMUEZBRGVwdGhTaXplOwor
ICAgICphdHRyaWJzKysgPSBzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oZGVw
dGhCaXRzKTsKKyAgICAKKyAgICBpZiAoYWNjZWxlcmF0ZWQpCisgICAgICAgICphdHRyaWJzKysg
PSBrQ0dMUEZBQWNjZWxlcmF0ZWQ7CisgICAgZWxzZSB7CisgICAgICAgICphdHRyaWJzKysgPSBr
Q0dMUEZBUmVuZGVyZXJJRDsKKyAgICAgICAgKmF0dHJpYnMrKyA9IHN0YXRpY19jYXN0PENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlPihrQ0dMUmVuZGVyZXJHZW5lcmljRmxvYXRJRCk7CisgICAgfQor
ICAgICAgICAKKyAgICBpZiAoc3VwZXJzYW1wbGUpCisgICAgICAgICphdHRyaWJzKysgPSBrQ0dM
UEZBU3VwZXJzYW1wbGU7CisgICAgICAgIAorICAgIGlmIChjbG9zZXN0KQorICAgICAgICAqYXR0
cmlicysrID0ga0NHTFBGQUNsb3Nlc3RQb2xpY3k7CisgICAgICAgIAorICAgICphdHRyaWJzKysg
PSBzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dDNEKiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCkKK3sKKyAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQzRCgpOworICAgIGlmIChjb250
ZXh0LT5tX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBjb250ZXh0OworICAgIGRlbGV0ZSBj
b250ZXh0OworICAgIHJldHVybiAwOworfQorCiBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoKQogICAgIDogbV9jb250ZXh0T2JqKDApCiAgICAgLCBtX3RleHR1cmUoMCkKICAg
ICAsIG1fZmJvKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCiB7Ci0gICAgQ0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGUgYXR0cmlic1tdID0KLSAgICB7Ci0gICAgICAgIGtDR0xQRkFDbG9zZXN0UG9s
aWN5LAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFDb2xvclNpemUs
IChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0
dHJpYnV0ZSkga0NHTFBGQURlcHRoU2l6ZSwgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAzMiwK
LSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBQWNjZWxlcmF0ZWQsCi0g
ICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQVN1cGVyc2FtcGxlLAotICAg
ICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKLSAgICB9OwotICAgIAotICAgIC8vIE1h
a2Ugc3VyZSB0byBjaGFuZ2UgdGhlc2UgY29uc3RhbnRzIHRvIG1hdGNoIHRoZSBhYm92ZSBsaXN0
Ci0gICAgY29uc3QgaW50IHN1cGVyU2FtcGxlSW5kZXggPSA2OwotICAgIGNvbnN0IGludCBhY2Nl
bGVyYXRlZEluZGV4ID0gNTsKLSAgICBjb25zdCBpbnQgZGVwdGhTaXplSW5kZXggPSA0OwotICAg
IAorICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbMjBdOwogICAgIENHTFBpeGVs
Rm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKICAgICBHTGludCBudW1QaXhlbEZvcm1hdHMg
PSAwOwogICAgIAotICAgIC8vIFdlIHdpbGwgdHJ5IGZvciB0aGUgYWJvdmUgZm9ybWF0IGZpcnN0
LiBJZiB0aGF0IGZhaWxzLCB3ZSB3aWxsCi0gICAgLy8gdHJ5IGZvciBvbmUgd2l0aG91dCBzdXBl
cnNhbXBsZS4gSWYgdGhhdCBmYWlscywgd2Ugd2lsbCB0cnkgZm9yCi0gICAgLy8gb25lIHRoYXQg
aGFzIGEgMTYgYml0IGRlcHRoIGJ1ZmZlci4gSWYgdGhhdCBmYWlscywgd2Ugd2lsbCB0cnkKLSAg
ICAvLyBmb3IgYSBzb2Z0d2FyZSByZW5kZXJlci4gSWYgbm9uZSBvZiB0aGF0IHdvcmtzLCB3ZSBz
aW1wbHkgZmFpbCAKLSAgICAvLyBhbmQgc2V0IG1fY29udGV4dE9iaiB0byAwLgorICAgIC8vIFdl
IHdpbGwgdHJ5OgorICAgIC8vCisgICAgLy8gIDEpIDMyIGJpdCBSR0JBLzMyIGJpdCBkZXB0aC9h
Y2NlbGVyYXRlZC9zdXBlcnNhbXBsZWQKKyAgICAvLyAgMikgMzIgYml0IFJHQkEvMzIgYml0IGRl
cHRoL2FjY2VsZXJhdGVkCisgICAgLy8gIDMpIDMyIGJpdCBSR0JBLzE2IGJpdCBkZXB0aC9hY2Nl
bGVyYXRlZAorICAgIC8vICA0KSBjbG9zZXN0IHRvIDMyIGJpdCBSR0JBLzE2IGJpdCBkZXB0aC9z
b2Z0d2FyZSByZW5kZXJlcgorICAgIC8vCisgICAgLy8gIElmIG5vbmUgb2YgdGhhdCB3b3Jrcywg
d2Ugc2ltcGx5IGZhaWwgYW5kIHNldCBtX2NvbnRleHRPYmogdG8gMC4KKyAgICAKKyAgICAvL3Nl
dFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMyLCAzMiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwogICAgIENH
TENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9y
bWF0cyk7CiAgICAgaWYgKG51bVBpeGVsRm9ybWF0cyA9PSAwKSB7Ci0gICAgICAgIGF0dHJpYnNb
c3VwZXJTYW1wbGVJbmRleF0gPSBzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4o
MCk7CisgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMyLCAzMiwgdHJ1ZSwgZmFsc2Us
IGZhbHNlKTsKICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9y
bWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKICAgICAgICAgCiAgICAgICAgIGlmIChudW1QaXhl
bEZvcm1hdHMgPT0gMCkgewotICAgICAgICAgICAgYXR0cmlic1tkZXB0aFNpemVJbmRleF0gPSBz
dGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMTYpOworICAgICAgICAgICAgc2V0
UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDE2LCB0cnVlLCBmYWxzZSwgZmFsc2UpOwogICAgICAg
ICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0T2JqLCAmbnVt
UGl4ZWxGb3JtYXRzKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobnVtUGl4ZWxGb3JtYXRz
ID09IDApIHsKLSAgICAgICAgICAgICAgICBhdHRyaWJzW2FjY2VsZXJhdGVkSW5kZXhdID0gc3Rh
dGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApOworICAgICAgICAgICAgICAgIHNl
dFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMyLCAxNiwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKICAgICAg
ICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXRPYmos
ICZudW1QaXhlbEZvcm1hdHMpOwogICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobnVtUGl4
ZWxGb3JtYXRzID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ291bGQgbm90IGZpbmQg
YW4gYWNjZXB0YWJsZSByZW5kZXJlciAtIGZhaWwKLSAgICAgICAgICAgICAgICAgICAgbV9jb250
ZXh0T2JqID0gMDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KQEAgLTE3Niw3ICsyMDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmRQYWludCgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBo
ZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0
aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0IHx8ICFtX2NvbnRleHRPYmopCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwpAQCAtMjA4LDYgKzIz
Miw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKIAogc3RhdGlj
IGlubGluZSB2b2lkIGVuc3VyZUNvbnRleHQoQ0dMQ29udGV4dE9iaiBjb250ZXh0KQogeworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBDR0xDb250ZXh0
T2JqIGN1cnJlbnRDb250ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQoKTsKICAgICBpZiAoY3Vy
cmVudENvbnRleHQgIT0gY29udGV4dCkKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY29u
dGV4dCk7Cg==
</data>
<flag name="review"
          id="23440"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41967</attachid>
            <date>2009-10-27 11:02:39 -0700</date>
            <delta_ts>2009-10-27 13:33:49 -0700</delta_ts>
            <desc>Replacement patch</desc>
            <filename>30349.patch</filename>
            <type>text/plain</type>
            <size>57825</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDE1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMTAtMjcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2UgV2ViR0wgY29udGV4dCBmYWlsdXJlIG1vcmUgcm9idXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDM0OQorCisgICAgICAgIFRoZSBidWlsZGJv
dCBmYWlsdXJlIGhhcyBhbHJlYWR5IGJlZW4gZml4ZWQgYW5kIGNoZWNrZWQgaW4uIFRoaXMKKyAg
ICAgICAgcGF0Y2ggd2lsbCBidWJibGUgdGhlIGZhaWx1cmUgdXAgdG8gSFRNTENvbnRleHRFbGVt
ZW50IHNvIGl0IGNhbgorICAgICAgICByZXR1cm4gbnVsbCBmcm9tIGdldENvbnRleHQgd2hlbiB0
aGUgY29udGV4dCBjcmVhdGlvbiBmYWlscy4gSXQgYWxzbworICAgICAgICBoYXMgYSBtb3JlIHJv
YnVzdCBwaXhlbCBmb3JtYXQgY2hvb3NpbmcgbWVjaGFuaXNtIGFuZCBjYW4gcmVuZGVyCisgICAg
ICAgIGNvcnJlY3RseSB3aGVuIGEgU1cgcmVuZGVyZXIgaXMgY2hvc2VuLgorCisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NhbnZhczNETGF5ZXIubW06CisgICAgICAgICgtW0NhbnZhczNETGF5ZXIgY29weUNHTFBp
eGVsRm9ybWF0Rm9yRGlzcGxheU1hc2s6XSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVs
Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuc3VyZUNvbnRleHQpOgorCiAyMDA5LTEwLTI3ICBGdW1pdG9zaGkgVWthaSAg
PHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNTAxMTUpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzIsMTAgKzE3MiwxMSBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVu
CiAgICAgICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2QoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0ID0gbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCh0aGlz
KTsKLQotICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIg
YW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzCi0gICAgICAg
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGUo
dGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBs
YXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcworICAgICAgICAgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogICAg
ICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QuY3BwCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQyLDIz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKK0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGUoSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcykKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiAwOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRChjYW52YXMsIGNvbnRleHQpOworfQorCitDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2Fu
dmFzKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX25lZWRzVXBkYXRlKHRydWUp
CiAgICAgLCBtX21hcmtlZENhbnZhc0RpcnR5KGZhbHNlKQogewotICAgIG1fY29udGV4dC5yZXNo
YXBlKG1fY2FudmFzLT53aWR0aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCkpOworICAgIEFTU0VSVChj
b250ZXh0KTsKKyAgICBtX2NvbnRleHQtPnJlc2hhcGUobV9jYW52YXMtPndpZHRoKCksIG1fY2Fu
dmFzLT5oZWlnaHQoKSk7CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6fkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRCgpCkBAIC03Niw3ICs4Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjptYXJrQ29udGUKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiZWdp
blBhaW50KCkKIHsKICAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICBtX2Nv
bnRleHQuYmVnaW5QYWludCh0aGlzKTsKKyAgICAgICAgbV9jb250ZXh0LT5iZWdpblBhaW50KHRo
aXMpOwogICAgIH0KIH0KIApAQCAtODQsNyArOTUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZW5kUGFpbnQoCiB7CiAgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKICAg
ICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQuZW5k
UGFpbnQoKTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmRQYWludCgpOwogICAgIH0KIH0KIApAQCAt
OTgsMTIgKzEwOSwxMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVzaGFwZShp
CiAgICAgICAgIG1fbmVlZHNVcGRhdGUgPSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgbV9jb250
ZXh0LnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRo
LCBoZWlnaHQpOwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaXplSW5CeXRl
cyhpbnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29u
dGV4dC5zaXplSW5CeXRlcyh0eXBlKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5zaXpl
SW5CeXRlcyh0eXBlKTsKICAgICBpZiAocmVzdWx0IDw9IDApIHsKICAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOwogICAgIH0KQEAgLTExMiw3ICsxMjMsNyBAQCBpbnQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpzaXplSW5CeXRlCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphY3Rp
dmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKIHsKLSAgICBtX2NvbnRleHQuYWN0aXZl
VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTIwLDcgKzEz
MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphdHRhY2hTaGEKIHsKICAgICBp
ZiAoIXByb2dyYW0gfHwgIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC5h
dHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKQEAgLTEyOCw5NCArMTM5LDk0IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpiaW5kQXR0cmkKIHsKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKKyAgICBt
X2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0J1ZmZl
ciogYnVmZmVyKQogewotICAgIG1fY29udGV4dC5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
KyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzRnJhbWVi
dWZmZXIqIGJ1ZmZlcikKIHsKLSAgICBtX2NvbnRleHQuYmluZEZyYW1lYnVmZmVyKHRhcmdldCwg
YnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIG1fY29udGV4dC5iaW5k
UmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRS
ZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJp
bmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQog
ewotICAgIG1fY29udGV4dC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Ymxl
bmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxw
aGEpCiB7Ci0gICAgbV9jb250ZXh0LmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworICAgIG1fY29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oIHVuc2lnbmVkIGxvbmcgbW9kZSApCiB7Ci0g
ICAgbV9jb250ZXh0LmJsZW5kRXF1YXRpb24obW9kZSk7CisgICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uKG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKIHsKLSAgICBtX2Nv
bnRleHQuYmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgbV9j
b250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBs
b25nIGRmYWN0b3IpCiB7Ci0gICAgbV9jb250ZXh0LmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9y
KTsKKyAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfSAgICAgICAKIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1
bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9u
ZyBkc3RBbHBoYSkKIHsKLSAgICBtX2NvbnRleHQuYmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBk
c3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBh
cmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxv
bmcgdXNhZ2UpCiB7Ci0gICAgbV9jb250ZXh0LmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCB1c2Fn
ZSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgdXNhZ2UpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJh
eSogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKLSAgICBtX2NvbnRleHQuYnVmZmVyRGF0
YSh0YXJnZXQsIGRhdGEsIHVzYWdlKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBkYXRhLCB1c2FnZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQg
bG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNBcnJheSogZGF0YSkKIHsKLSAgICBtX2Nv
bnRleHQuYnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YSk7CisgICAgbV9jb250ZXh0
LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB1bnNpZ25lZCBsb25nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsK
LSAgICByZXR1cm4gbV9jb250ZXh0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLSAgICBtX2NvbnRleHQu
Y2xlYXIobWFzayk7CisgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTIyOSw0MyArMjQwLDQzIEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhckNvbG8KICAgICAgICAgYiA9IDA7CiAgICAgaWYg
KGlzbmFuKGEpKQogICAgICAgICBhID0gMTsKLSAgICBtX2NvbnRleHQuY2xlYXJDb2xvcihyLCBn
LCBiLCBhKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQogewotICAgIG1fY29udGV4dC5jbGVh
ckRlcHRoKGRlcHRoKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpjbGVhclN0ZW5jaWwobG9uZyBzKQogewotICAgIG1fY29udGV4dC5jbGVhclN0
ZW5jaWwocyk7CisgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhh
KQogewotICAgIG1fY29udGV4dC5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwor
ICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBt
X2NvbnRleHQuY29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNo
YWRlcihzaGFkZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBs
b25nIGJvcmRlcikKIHsKLSAgICBtX2NvbnRleHQuY29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgbV9j
b250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29weVRleFN1Yklt
YWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9u
ZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9jb250ZXh0LmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIG1fY29u
dGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
eCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIApAQCAtMzE5LDcgKzMzMCw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBDYW52
YXNSZW5kZXJpbmcKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmN1bGxGYWNlKHVu
c2lnbmVkIGxvbmcgbW9kZSkKIHsKLSAgICBtX2NvbnRleHQuY3VsbEZhY2UobW9kZSk7CisgICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCkBAIC0zNzMsMTkgKzM4NCwxOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZGVsZXRlVGV4CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXB0
aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQogewotICAgIG1fY29udGV4dC5kZXB0aEZ1bmMoZnVu
Yyk7CisgICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVuYyk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRl
cHRoTWFzayhib29sIGZsYWcpCiB7Ci0gICAgbV9jb250ZXh0LmRlcHRoTWFzayhmbGFnKTsKKyAg
ICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFnKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVwdGhSYW5n
ZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQogewotICAgIG1fY29udGV4dC5kZXB0aFJhbmdl
KHpOZWFyLCB6RmFyKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTM5NCw1OCArNDA1
LDU4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXRhY2hTaGEKICAgICBpZiAo
IXByb2dyYW0gfHwgIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LmRl
dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVy
KHByb2dyYW0sIHNoYWRlcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBs
b25nIGNhcCkKIHsKLSAgICBtX2NvbnRleHQuZGlzYWJsZShjYXApOworICAgIG1fY29udGV4dC0+
ZGlzYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
dW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLSAgICBtX2NvbnRleHQuZGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKKyAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUs
IGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LmRyYXdBcnJheXMobW9k
ZSwgZmlyc3QsIGNvdW50KTsKKyAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2Rl
LCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQog
ewotICAgIG1fY29udGV4dC5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7
CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAgIG1fY29u
dGV4dC5lbmFibGUoY2FwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQogewot
ICAgIG1fY29udGV4dC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CisgICAgbV9jb250
ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZp
bmlzaCgpCiB7Ci0gICAgbV9jb250ZXh0LmZpbmlzaCgpOworICAgIG1fY29udGV4dC0+ZmluaXNo
KCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmbHVzaCgpCiB7Ci0gICAgbV9jb250ZXh0LmZsdXNoKCk7
CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0
cnVlKTsKIH0KIApAQCAtNDU0LDcgKzQ2NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpmcmFtZWJ1ZmYKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICBtX2NvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2ht
ZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC00
NjMsMjYgKzQ3NCwyNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZnJhbWVidWZm
CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1fY29u
dGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFy
Z2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKLSAgICBtX2NvbnRleHQuZnJv
bnRGYWNlKG1vZGUpOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKLSAgICBtX2Nv
bnRleHQuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlw
bWFwKHRhcmdldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAog
UGFzc1JlZlB0cjxDYW52YXNBY3RpdmVJbmZvPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dEFjdGl2ZUF0dHJpYihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFw
cm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFtX2NvbnRleHQuZ2V0QWN0
aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKSkgeworICAgIGlmICghcHJvZ3JhbSB8fCBw
cm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcyB8fCAhbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIo
cHJvZ3JhbSwgaW5kZXgsIGluZm8pKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQ5Miw3ICs1MDMsNyBAQCBQYXNzUmVmUHRyPENh
bnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlCiBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShDYW52YXNQcm9ncmFt
KiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQo
KSAhPSB0aGlzIHx8ICFtX2NvbnRleHQuZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwg
aW5mbykpIHsKKyAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMg
fHwgIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbykpIHsK
ICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpA
QCAtNTAxLDI1MSArNTEyLDI1MSBAQCBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZh
c1JlbmRlCiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9u
KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1
cm4gbV9jb250ZXh0LmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOworICAgIHJldHVy
biBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCiBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVhbih1bnNpZ25lZCBsb25nIHBuYW1l
KQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9jb250ZXh0LmdldEJvb2xlYW4ocG5hbWUpOworICAg
IGJvb2wgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRCb29sZWFuKHBuYW1lKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NS
ZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldEJvb2xlYW52KHBuYW1lKTsKKyAg
ICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRC
b29sZWFudihwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1
ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdl
dCwgcG5hbWUpOworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRl
cmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7
CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0QnVmZmVy
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRFcnJvcigpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXRF
cnJvcigpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7CiB9CiAKIGZsb2F0IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RmxvYXQodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsK
LSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0RmxvYXQocG5hbWUpOworICAgIGZsb2F0
IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0RmxvYXQocG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNp
Z25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC5nZXRGbG9hdHYocG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5
PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHBuYW1lKQogewotICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKKyAgICBpbnQgcmVz
dWx0ID0gbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHRhcmdl
dCwgYXR0YWNobWVudCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBt
X2NvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29u
dGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2ht
ZW50LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICBy
ZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEludGVn
ZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQu
Z2V0SW50ZWdlcihwbmFtZSk7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRJbnRl
Z2VyKHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldEludGVnZXJ2KHBuYW1l
KTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICBy
ZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dy
YW1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAg
aW50IHJlc3VsdCA9IG1fY29udGV4dC5nZXRQcm9ncmFtaShwcm9ncmFtLCBwbmFtZSk7CisgICAg
aW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWkocHJvZ3JhbSwgcG5hbWUpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
IHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFByb2dy
YW1pdihwcm9ncmFtLCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogU3RyaW5nIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coQ2FudmFzUHJvZ3JhbSog
cHJvZ3JhbSkKIHsKLSAgICBTdHJpbmcgcyA9IG1fY29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyhw
cm9ncmFtKTsKKyAgICBTdHJpbmcgcyA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJv
Z3JhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4g
czsKIH0KIAogaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAg
ICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0
LCBwbmFtZSk7CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENh
bnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9j
b250ZXh0LT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAog
aW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaShDYW52YXNTaGFkZXIqIHNo
YWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0
LmdldFNoYWRlcmkoc2hhZGVyLCBwbmFtZSk7CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+
Z2V0U2hhZGVyaShzaGFkZXIsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJy
YXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBz
aGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5
PiBhcnJheSA9IG1fY29udGV4dC5nZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lKTsKKyAgICBSZWZQ
dHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIs
IHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVy
biBhcnJheTsKIH0KIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhDYW52YXNTaGFkZXIqIHNoYWRlcikKIHsKLSAgICBTdHJpbmcgcyA9IG1fY29udGV4
dC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7CisgICAgU3RyaW5nIHMgPSBtX2NvbnRleHQtPmdl
dFNoYWRlckluZm9Mb2coc2hhZGVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogICAgIHJldHVybiBzOwogfQogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgU3RyaW5nIHMg
PSBtX2NvbnRleHQuZ2V0U2hhZGVyU291cmNlKHNoYWRlcik7CisgICAgU3RyaW5nIHMgPSBtX2Nv
bnRleHQtPmdldFNoYWRlclNvdXJjZShzaGFkZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHM7CiB9CiAKIFN0cmluZyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1f
Y29udGV4dC5nZXRTdHJpbmcobmFtZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5n
KG5hbWUpOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcmYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAg
ZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSk7
CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwg
cG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8
Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcmZ2KHRh
cmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAg
cmV0dXJuIGFycmF5OwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQ
YXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewot
ICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
KTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpKHRhcmdldCwg
cG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9j
b250ZXh0LmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUpOworICAgIFJlZlB0cjxDYW52
YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJu
IGFycmF5OwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1m
KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7Ci0gICAgZmxvYXQgcmVz
dWx0ID0gbV9jb250ZXh0LmdldFVuaWZvcm1mKHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBmbG9h
dCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1mKHByb2dyYW0sIGxvY2F0aW9uKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRVbmlmb3JtZnYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKIHsK
LSAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbik7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGxv
bmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtaShDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBsb25nIGxvY2F0aW9uKQogewotICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0Lmdl
dFVuaWZvcm1pKHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybWkocHJvZ3JhbSwgbG9jYXRpb24pOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52
YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoQ2FudmFz
UHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50
QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbik7
CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VW5pZm9y
bWl2KHByb2dyYW0sIGxvY2F0aW9uKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIG5hbWUpOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZl
cnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsK
LSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliZihpbmRleCwgcG5h
bWUpOworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliZihpbmRl
eCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5
ID0gbV9jb250ZXh0LmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSk7CisgICAgUmVmUHRy
PENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJmdihp
bmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAg
cmV0dXJuIGFycmF5OwogfQogCiBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVy
dGV4QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewot
ICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0LmdldFZlcnRleEF0dHJpYmkoaW5kZXgsIHBuYW1l
KTsKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliaShpbmRleCwg
cG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2Nv
bnRleHQuZ2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFz
SW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFy
cmF5OwogfQogCiBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmli
T2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAg
bG9uZyByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFt
ZSk7CisgICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChp
bmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmhpbnQo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKLSAgICBtX2NvbnRl
eHQuaGludCh0YXJnZXQsIG1vZGUpOworICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTc1NCw0MiAr
NzY1LDQyIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0J1ZmZlcigKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICByZXR1cm4g
bV9jb250ZXh0LmlzQnVmZmVyKGJ1ZmZlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZm
ZXIoYnVmZmVyKTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzRW5hYmxl
ZCh1bnNpZ25lZCBsb25nIGNhcCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmlzRW5hYmxlZChj
YXApOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChjYXApOwogfQogCiBib29sIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciog
ZnJhbWVidWZmZXIpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5pc0ZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzUHJvZ3JhbShDYW52YXNQ
cm9ncmFtKiBwcm9ncmFtKQogewotICAgIHJldHVybiBtX2NvbnRleHQuaXNQcm9ncmFtKHByb2dy
YW0pOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogYm9v
bCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1
ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIHJldHVybiBtX2NvbnRleHQuaXNSZW5kZXJidWZm
ZXIocmVuZGVyYnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXIpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNTaGFk
ZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5pc1NoYWRl
cihzaGFkZXIpOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlcik7CiB9CiAK
IGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc1RleHR1cmUoQ2FudmFzVGV4dHVyZSog
dGV4dHVyZSkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmlzVGV4dHVyZSh0ZXh0dXJlKTsKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQogewotICAgIG1fY29u
dGV4dC5saW5lV2lkdGgoKGZsb2F0KSB3aWR0aCk7CisgICAgbV9jb250ZXh0LT5saW5lV2lkdGgo
KGZsb2F0KSB3aWR0aCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApAQCAtNzk4LDkyICs4MDksOTIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omxp
bmtQcm9ncgogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICBtX2NvbnRleHQubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5saW5rUHJv
Z3JhbShwcm9ncmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9u
ZyBwbmFtZSwgbG9uZyBwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQucGl4ZWxTdG9yZWkocG5hbWUs
IHBhcmFtKTsKKyAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQog
ewotICAgIG1fY29udGV4dC5wb2x5Z29uT2Zmc2V0KChmbG9hdCkgZmFjdG9yLCAoZmxvYXQpIHVu
aXRzKTsKKyAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoKGZsb2F0KSBmYWN0b3IsIChmbG9h
dCkgdW5pdHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIFBh
c3NSZWZQdHI8Q2FudmFzQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVhZFBpeGVs
cyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7Ci0gICAgUmVm
UHRyPENhbnZhc0FycmF5PiBhcnJheSA9IG1fY29udGV4dC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAgUmVmUHRyPENhbnZhc0FycmF5PiBhcnJheSA9
IG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBp
bGVyKCkKIHsKLSAgICBtX2NvbnRleHQucmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CisgICAgbV9j
b250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVuZGVy
YnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5h
bGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0g
ICAgbV9jb250ZXh0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzYW1w
bGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQogewotICAgIG1fY29udGV4dC5z
YW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOworICAgIG1fY29udGV4dC0+c2Ft
cGxlQ292ZXJhZ2UoKGZsb2F0KSB2YWx1ZSwgaW52ZXJ0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c2Np
c3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpCiB7Ci0gICAgbV9jb250ZXh0LnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpzaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIG1fY29udGV4dC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJpbmcpOworICAg
IG1fY29udGV4dC0+c2hhZGVyU291cmNlKHNoYWRlciwgc3RyaW5nKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9u
ZyBtYXNrKQogewotICAgIG1fY29udGV4dC5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwor
ICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxv
bmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLSAgICBtX2NvbnRleHQu
c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworICAgIG1fY29udGV4
dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0gICAgbV9jb250ZXh0
LnN0ZW5jaWxNYXNrKG1hc2spOworICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0gICAgbV9jb250ZXh0LnN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNp
Z25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQogewotICAgIG1fY29udGV4dC5z
dGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFp
bCwgdW5zaWduZWQgbG9uZyB6cGFzcykKIHsKLSAgICBtX2NvbnRleHQuc3RlbmNpbE9wU2VwYXJh
dGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNl
cGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtODkzLDcgKzkwNCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp0ZXhJbWFnZTIKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICBt
X2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTkw
NCw3ICs5MTUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyCiB7
CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAg
ICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC05MTQsNyArOTI1LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMgogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlLCBmbGlwWSwg
cHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIApAQCAtOTIzLDcgKzkzNCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0
ZXhJbWFnZTIKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyBy
ZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBjYW52YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2FudmFzLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTMyLDE5ICs5
NDMsMTkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMgogewogICAg
IC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMg
PSAwOwotICAgIG1fY29udGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHZpZGVvLCBmbGlw
WSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHZpZGVvLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFy
YW0pCiB7Ci0gICAgbV9jb250ZXh0LnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0p
OworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBw
bmFtZSwgaW50IHBhcmFtKQogewotICAgIG1fY29udGV4dC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
cG5hbWUsIHBhcmFtKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFt
ZSwgcGFyYW0pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAg
LTk1NCw3ICs5NjUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1h
CiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQK
ICAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
ICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTY0LDcgKzk3NSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5v
dyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRl
eHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC05NzQsNyArOTg1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRl
eFN1YkltYQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJl
dHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlLCBmbGlwWSwgcHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlLCBmbGlwWSwgcHJlbXVs
dGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtOTg0LDcgKzk5NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJ
bWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5l
ZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBjYW52YXMsIGZsaXBZLCBwcmVtdWx0
aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgY2FudmFzLCBmbGlwWSwgcHJlbXVsdGlw
bHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
OTk0LDEzICsxMDA1LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJ
bWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5l
ZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB2aWRlbywgZmxpcFksIHByZW11bHRp
cGx5QWxwaGEpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB2aWRlbywgZmxpcFksIHByZW11bHRpcGx5
QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQg
eCkKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIApAQCAtMTAxMCw3ICsxMDIxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnVuaWZvcm0xZgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICBtX2NvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5n
dGgoKSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBA
IC0xMDIwLDEzICsxMDMxLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlm
b3JtMWYKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9jb250
ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9y
bTFmdihsb2NhdGlvbiwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaShsb25n
IGxvY2F0aW9uLCBpbnQgeCkKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTFpKGxvY2F0aW9uLCB4
KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTAzNiw3ICsxMDQ3LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaQogICAgIGlmICghdikKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9u
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCkBAIC0xMDQ2LDEzICsxMDU3LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtMWkKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgbV9jb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHYsIHNpemUpOworICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgdiwgc2l6ZSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIG1fY29u
dGV4dC51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
KGxvY2F0aW9uLCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC0xMDYzLDcgKzEwNzQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dW5pZm9ybTJmCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRleHQudW5pZm9ybTJmdihs
b2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOworICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEwNzQsMTMgKzEwODUsMTMgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZgogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAyCi0gICAgbV9jb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKIHsKLSAgICBt
X2NvbnRleHQudW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaShsb2NhdGlvbiwgeCwgeSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIApAQCAtMTA5MSw3ICsxMTAyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnVuaWZvcm0yaQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LnVuaWZvcm0y
aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0yaXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTAyLDEzICsxMTEzLDEz
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmkKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgMgotICAgIG1fY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6KQogewotICAgIG1fY29udGV4dC51bmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTE5LDcgKzExMzAsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMK
LSAgICBtX2NvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgo
KSAvIDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKQEAgLTExMzAsMTMgKzExNDEsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnVuaWZvcm0zZgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LnVuaWZvcm0zZnYo
bG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRp
b24sIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRp
b24sIGludCB4LCBpbnQgeSwgaW50IHopCiB7Ci0gICAgbV9jb250ZXh0LnVuaWZvcm0zaShsb2Nh
dGlvbiwgeCwgeSwgeik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9jYXRpb24sIHgsIHks
IHopOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTExNDcs
NyArMTE1OCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2kKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgMwotICAgIG1fY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0
aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTE1OCwxMyArMTE2OSwxMyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2Nv
bnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOworICAgIG1fY29udGV4dC0+
dW5pZm9ybTNpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlm
b3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykK
IHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTE3NSw3ICsxMTg2LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZgogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0g
ICAgbV9jb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkg
LyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+
bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CkBAIC0xMTg2LDEzICsxMTk3LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtNGYKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC51bmlmb3JtNGZ2KGxv
Y2F0aW9uLCB2LCBzaXplIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9u
LCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aShsb25nIGxvY2F0aW9u
LCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTRp
KGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlv
biwgeCwgeSwgeiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApAQCAtMTIwMyw3ICsxMjE0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVu
aWZvcm00aQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm00aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMjE0LDcgKzEyMjUsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpCiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQK
LSAgICBtX2NvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIG1f
Y29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyMjUsNyArMTIzNiw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAot
ICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyMzYsNyArMTI0Nyw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgNAotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYsIHNpemUgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKQEAgLTEyNDcsNyArMTI1OCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1fY29udGV4dC51bmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkg
LyA5KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyNTgsNyArMTI2OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1fY29udGV4
dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6
ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEy
NjksNyArMTI4MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAgICBtX2NvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOworICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKQEAgLTEyODAsMzIgKzEyOTEsMzIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnVuaWZvcm1NYQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1fY29udGV4dC51bmlmb3JtTWF0
cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CisgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyAxNik7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAg
ICBtX2NvbnRleHQudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dy
YW0ocHJvZ3JhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShDYW52YXNQcm9n
cmFtKiBwcm9ncmFtKQogewotICAgIG1fY29udGV4dC52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7
CisgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCiB7Ci0gICAg
bV9jb250ZXh0LnZlcnRleEF0dHJpYjFmKGluZHgsIHYwKTsKKyAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYjFmKGluZHgsIHYwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVu
c2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTog
TmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5n
IHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEzMTQsMjAgKzEzMjUsMjAgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcg
c2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhB
dHRyaWIxZnYoaW5keCwgdik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwg
dik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgdjAsIGZsb2F0IHYxKQogewotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZihpbmR4
LCB2MCwgdjEpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYoaW5keCwgdjAsIHYxKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2Fu
dmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJy
YXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC52
ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYjJmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKQEAgLTEzMzYsMjAgKzEzNDcsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJh
eSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BBUkFN
KHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdik7Cisg
ICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBm
bG9hdCB2MikKIHsKLSAgICBtX2NvbnRleHQudmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2
Mik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFz
RmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkg
aXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC52ZXJ0
ZXhBdHRyaWIzZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKQEAgLTEzNTgsMjAgKzEzNjksMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBp
cyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BBUkFNKHNp
emUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdik7CisgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9h
dCB2MiwgZmxvYXQgdjMpCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjRmKGluZHgsIHYw
LCB2MSwgdjIsIHYzKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2
MSwgdjIsIHYzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBt
YWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAg
IG1fY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjRmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEzODAsMTMgKzEzOTEsMTMgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1h
a2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAg
VU5VU0VEX1BBUkFNKHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYo
aW5keCwgdik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25n
IHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25n
IHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0
dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQp
OworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBu
b3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIApAQCAtMTQwMCw3ICsxNDExLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnZpZXdwb3J0KAogICAgICAgICB3aWR0aCA9IDEwMDsKICAgICBpZiAoaXNuYW4o
aGVpZ2h0KSkKICAgICAgICAgaGVpZ2h0ID0gMTAwOwotICAgIG1fY29udGV4dC52aWV3cG9ydCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaAko
cmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBAIGNsYXNzIFdlYktpdENT
U01hdHJpeDsKIAogICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCA6IHB1YmxpYyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCopOwotICAgICAgICB+Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEKCk7CisgICAgICAgIHN0YXRpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qq
IGNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCopOworICAgICAgICB2aXJ0dWFsIH5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIApAQCAtMjg4LDcgKzI4OCw3IEBAIGNsYXNzIFdlYktpdENTU01hdHJp
eDsKIAogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgeyByZXR1cm4gJm1fY29udGV4dDsgfQorICAgICAgICBH
cmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7IH0KICAgICAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCk7CiAKQEAgLTMwMCwxOCArMzAwLDIxIEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsK
ICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENhbnZhc09iamVj
dDsKKworICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQq
LCBHcmFwaGljc0NvbnRleHQzRCopOworCiAgICAgICAgIHZvaWQgYWRkT2JqZWN0KENhbnZhc09i
amVjdCopOwogICAgICAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIAogICAg
ICAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgICAgICB2b2lkIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChib29sIGNoYW5nZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC5jaGVja0Vycm9yKCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmNoZWNrRXJyb3IoKTsK
ICAgICAgICAgICAgIGlmIChjaGFuZ2VkKQogICAgICAgICAgICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBt
X2NvbnRleHQ7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0Owog
ICAgICAgICBib29sIG1fbmVlZHNVcGRhdGU7CiAgICAgICAgIGJvb2wgbV9tYXJrZWRDYW52YXNE
aXJ0eTsKICAgICAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0gaXQgZG9l
cyBub3QgaW5jcmVtZW50IGFueQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDExICs3
NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDsKICNlbmRpZgogCi0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0QgOiBOb25jb3B5
YWJsZSB7CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgTm9uY29weWFibGUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBTaGFkZXJUeXBlIHsgRlJBR01FTlRfU0hBREVS
LCBWRVJURVhfU0hBREVSIH07CiAgICAgCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKCk7Cisg
ICAgICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlKCk7CiAgICAgICAgIHZpcnR1
YWwgfkdyYXBoaWNzQ29udGV4dDNEKCk7CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC05Miw3ICs5
Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0
Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQogI2Vu
ZGlmCiAgICAgICAgIHZvaWQgY2hlY2tFcnJvcigpIGNvbnN0OwotICAgICAgICAKICAgICAgICAg
dm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKQEAgLTMyMCw2
ICszMTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVsZXRlVGV4dHVy
ZSh1bnNpZ25lZCk7ICAgICAgICAKICAgICAgICAgCiAgICAgcHJpdmF0ZTogICAgICAgIAorICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0OwogICAgICAgICAKICNpZiBQTEFURk9STShNQUMpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0JKHJldmlzaW9u
IDUwMTE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTAsMTkgKzUwLDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiAtKENHTFBpeGVsRm9ybWF0T2JqKWNvcHlDR0xQaXhlbEZvcm1hdEZvckRpc3BsYXlN
YXNrOih1aW50MzJfdCltYXNrCiB7Ci0gICAgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmli
c1tdID0KLSAgICB7Ci0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQUFj
Y2VsZXJhdGVkLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFDb2xv
clNpemUsIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCi0gICAgICAgIChDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZSkga0NHTFBGQURpc3BsYXlNYXNrLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGUpIG1hc2ssCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAotICAgIH07Ci0g
ICAgCi0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmo7Ci0gICAgR0xpbnQgbnVt
UGl4ZWxGb3JtYXRzOwotIAotICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhl
bEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0gICAgcmV0dXJuIHBpeGVsRm9ybWF0T2Jq
OworICAgIC8vIEZJWE1FOiBUaGUgbWFzayBwYXJhbSB0ZWxscyB5b3Ugd2hpY2ggZGlzcGxheSAo
b24gYSBtdWx0aS1kaXNwbGF5IHN5c3RlbSkKKyAgICAvLyBpcyB0byBiZSB1c2VkLiBCdXQgc2lu
Y2Ugd2UgYXJlIG5vdyBnZXR0aW5nIHRoZSBwaXhlbCBmb3JtYXQgZnJvbSB0aGUgCisgICAgLy8g
Q2FudmFzIENHTCBjb250ZXh0LCB3ZSBkb24ndCB1c2UgaXQuIFRoaXMgc2VlbXMgdG8gZG8gdGhl
IHJpZ2h0IHRoaW5nIG9uCisgICAgLy8gb25lIG11bHRpLWRpc3BsYXkgc3lzdGVtLiBCdXQgdGhl
cmUgbWF5IGJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorICAgIC8vIElmIG5l
ZWRlZCB3ZSB3aWxsIGhhdmUgdG8gc2V0IHRoZSBkaXNwbGF5IG1hc2sgaW4gdGhlIENhbnZhcyBD
R0xDb250ZXh0IGFuZAorICAgIC8vIG1ha2Ugc3VyZSBpdCBtYXRjaGVzLgorICAgIFVOVVNFRF9Q
QVJBTShtYXNrKTsKKyAgICByZXR1cm4gQ0dMUmV0YWluUGl4ZWxGb3JtYXQoQ0dMR2V0UGl4ZWxG
b3JtYXQobV9jb250ZXh0T2JqKSk7CiB9CiAKIC0oQ0dMQ29udGV4dE9iailjb3B5Q0dMQ29udGV4
dEZvclBpeGVsRm9ybWF0OihDR0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLmNwcAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDU0ICs1MCw4
MCBAQAogI2luY2x1ZGUgIldlYktpdENTU01hdHJpeC5oIgogCiAjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPE9wZW5HTC9DR0xSZW5kZXJlcnMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChWZWN0
b3I8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JCaXRzLCBpbnQg
ZGVwdGhCaXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWQs
IGJvb2wgc3VwZXJzYW1wbGUsIGJvb2wgY2xvc2VzdCkKK3sKKyAgICBhdHRyaWJzLmNsZWFyKCk7
CisgICAgCisgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUNvbG9yU2l6ZSk7CisgICAgYXR0cmli
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGNvbG9yQml0cykp
OworICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFEZXB0aFNpemUpOworICAgIGF0dHJpYnMuYXBw
ZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPihkZXB0aEJpdHMpKTsKKyAg
ICAKKyAgICBpZiAoYWNjZWxlcmF0ZWQpCisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFB
Y2NlbGVyYXRlZCk7CisgICAgZWxzZSB7CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFS
ZW5kZXJlcklEKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxG
b3JtYXRBdHRyaWJ1dGU+KGtDR0xSZW5kZXJlckdlbmVyaWNGbG9hdElEKSk7CisgICAgfQorICAg
ICAgICAKKyAgICBpZiAoc3VwZXJzYW1wbGUpCisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQ
RkFTdXBlcnNhbXBsZSk7CisgICAgICAgIAorICAgIGlmIChjbG9zZXN0KQorICAgICAgICBhdHRy
aWJzLmFwcGVuZChrQ0dMUEZBQ2xvc2VzdFBvbGljeSk7CisgICAgICAgIAorICAgIGF0dHJpYnMu
YXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCkKK3sKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQzRCgpOworICAgIGlm
IChjb250ZXh0LT5tX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBjb250ZXh0OworICAgIGRl
bGV0ZSBjb250ZXh0OworICAgIHJldHVybiAwOworfQorCiBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoKQogICAgIDogbV9jb250ZXh0T2JqKDApCiAgICAgLCBtX3RleHR1cmUo
MCkKICAgICAsIG1fZmJvKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCiB7Ci0gICAgQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmlic1tdID0KLSAgICB7Ci0gICAgICAgIGtDR0xQRkFDbG9z
ZXN0UG9saWN5LAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFDb2xv
clNpemUsIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCi0gICAgICAgIChDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZSkga0NHTFBGQURlcHRoU2l6ZSwgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
KSAzMiwKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBQWNjZWxlcmF0
ZWQsCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQVN1cGVyc2FtcGxl
LAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKLSAgICB9OwotICAgIAotICAg
IC8vIE1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlc2UgY29uc3RhbnRzIHRvIG1hdGNoIHRoZSBhYm92
ZSBsaXN0Ci0gICAgY29uc3QgaW50IHN1cGVyU2FtcGxlSW5kZXggPSA2OwotICAgIGNvbnN0IGlu
dCBhY2NlbGVyYXRlZEluZGV4ID0gNTsKLSAgICBjb25zdCBpbnQgZGVwdGhTaXplSW5kZXggPSA0
OwotICAgIAorICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAg
ICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4
ZWxGb3JtYXRzID0gMDsKICAgICAKLSAgICAvLyBXZSB3aWxsIHRyeSBmb3IgdGhlIGFib3ZlIGZv
cm1hdCBmaXJzdC4gSWYgdGhhdCBmYWlscywgd2Ugd2lsbAotICAgIC8vIHRyeSBmb3Igb25lIHdp
dGhvdXQgc3VwZXJzYW1wbGUuIElmIHRoYXQgZmFpbHMsIHdlIHdpbGwgdHJ5IGZvcgotICAgIC8v
IG9uZSB0aGF0IGhhcyBhIDE2IGJpdCBkZXB0aCBidWZmZXIuIElmIHRoYXQgZmFpbHMsIHdlIHdp
bGwgdHJ5Ci0gICAgLy8gZm9yIGEgc29mdHdhcmUgcmVuZGVyZXIuIElmIG5vbmUgb2YgdGhhdCB3
b3Jrcywgd2Ugc2ltcGx5IGZhaWwgCi0gICAgLy8gYW5kIHNldCBtX2NvbnRleHRPYmogdG8gMC4K
LSAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXRPYmosICZudW1Q
aXhlbEZvcm1hdHMpOworICAgIC8vIFdlIHdpbGwgdHJ5OgorICAgIC8vCisgICAgLy8gIDEpIDMy
IGJpdCBSR0JBLzMyIGJpdCBkZXB0aC9hY2NlbGVyYXRlZC9zdXBlcnNhbXBsZWQKKyAgICAvLyAg
MikgMzIgYml0IFJHQkEvMzIgYml0IGRlcHRoL2FjY2VsZXJhdGVkCisgICAgLy8gIDMpIDMyIGJp
dCBSR0JBLzE2IGJpdCBkZXB0aC9hY2NlbGVyYXRlZAorICAgIC8vICA0KSBjbG9zZXN0IHRvIDMy
IGJpdCBSR0JBLzE2IGJpdCBkZXB0aC9zb2Z0d2FyZSByZW5kZXJlcgorICAgIC8vCisgICAgLy8g
IElmIG5vbmUgb2YgdGhhdCB3b3Jrcywgd2Ugc2ltcGx5IGZhaWwgYW5kIHNldCBtX2NvbnRleHRP
YmogdG8gMC4KKyAgICAKKyAgICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMzIsIHRydWUs
IHRydWUsIGZhbHNlKTsKKyAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwg
JnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKICAgICBpZiAobnVtUGl4ZWxGb3Jt
YXRzID09IDApIHsKLSAgICAgICAgYXR0cmlic1tzdXBlclNhbXBsZUluZGV4XSA9IHN0YXRpY19j
YXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKTsKLSAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxG
b3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAgICAg
ICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDMyLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwor
ICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0
T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKICAgICAgICAgCiAgICAgICAgIGlmIChudW1QaXhlbEZv
cm1hdHMgPT0gMCkgewotICAgICAgICAgICAgYXR0cmlic1tkZXB0aFNpemVJbmRleF0gPSBzdGF0
aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMTYpOwotICAgICAgICAgICAgQ0dMQ2hv
b3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRz
KTsKKyAgICAgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMyLCAxNiwgdHJ1ZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMuZGF0
YSgpLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMpOwogICAgICAgICAKICAgICAg
ICAgICAgIGlmIChudW1QaXhlbEZvcm1hdHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGF0dHJp
YnNbYWNjZWxlcmF0ZWRJbmRleF0gPSBzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZT4oMCk7Ci0gICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBp
eGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAgICAgICAgICAgICAgICBzZXRQaXhl
bEZvcm1hdChhdHRyaWJzLCAzMiwgMTYsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9i
aiwgJm51bVBpeGVsRm9ybWF0cyk7CiAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChudW1Q
aXhlbEZvcm1hdHMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvLyBDb3VsZCBub3QgZmlu
ZCBhbiBhY2NlcHRhYmxlIHJlbmRlcmVyIC0gZmFpbAotICAgICAgICAgICAgICAgICAgICBtX2Nv
bnRleHRPYmogPSAwOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtMTQzLDEyICsxNjksMTQgQEAgR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKCkKIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCgpCiB7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmIG1fZGVwdGhCdWZmZXIpOwotICAgIDo6
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICA6OmdsRGVsZXRlRnJhbWVidWZm
ZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7Ci0gICAgQ0dM
RGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBpZiAobV9jb250ZXh0T2JqKSB7Cisg
ICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgICAgIDo6Z2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICYgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIDo6Z2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9mYm8pOworICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKKyAg
ICAgICAgQ0dMRGVzdHJveUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICB9CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRXJyb3IoKSBjb25zdApAQCAtMTc2LDcgKzIwNCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgaWYgKHdpZHRoID09
IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgaWYgKHdp
ZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQgfHwgIW1f
Y29udGV4dE9iaikKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fY3VycmVudFdpZHRoID0g
d2lkdGg7CkBAIC0yMDgsNiArMjM2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFw
ZShpbnQgd2lkdAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5zdXJlQ29udGV4dChDR0xDb250ZXh0
T2JqIGNvbnRleHQpCiB7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAogICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29u
dGV4dCgpOwogICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBjb250ZXh0KQogICAgICAgICBDR0xT
ZXRDdXJyZW50Q29udGV4dChjb250ZXh0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41976</attachid>
            <date>2009-10-27 13:33:49 -0700</date>
            <delta_ts>2009-10-27 14:06:24 -0700</delta_ts>
            <desc>replacement patch</desc>
            <filename>30349.patch</filename>
            <type>text/plain</type>
            <size>70957</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDE2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMTAtMjcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBNYWtl
IFdlYkdMIGNvbnRleHQgZmFpbHVyZSBtb3JlIHJvYnVzdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzNDkKKworICAgICAgICBUaGUgYnVpbGRib3Qg
ZmFpbHVyZSBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGFuZCBjaGVja2VkIGluLiBUaGlzCisgICAg
ICAgIHBhdGNoIHdpbGwgYnViYmxlIHRoZSBmYWlsdXJlIHVwIHRvIEhUTUxDb250ZXh0RWxlbWVu
dCBzbyBpdCBjYW4KKyAgICAgICAgcmV0dXJuIG51bGwgZnJvbSBnZXRDb250ZXh0IHdoZW4gdGhl
IGNvbnRleHQgY3JlYXRpb24gZmFpbHMuIEl0IGFsc28KKyAgICAgICAgaGFzIGEgbW9yZSByb2J1
c3QgcGl4ZWwgZm9ybWF0IGNob29zaW5nIG1lY2hhbmlzbSBhbmQgY2FuIHJlbmRlcgorICAgICAg
ICBjb3JyZWN0bHkgd2hlbiBhIFNXIHJlbmRlcmVyIGlzIGNob3Nlbi4KKworICAgICAgICAqIGh0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5j
cHA6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExh
eWVyLm1tOgorICAgICAgICAoLVtDYW52YXMzRExheWVyIGNvcHlDR0xQaXhlbEZvcm1hdEZvckRp
c3BsYXlNYXNrOl0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0Nv
bnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbEZvcm1hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmVu
c3VyZUNvbnRleHQpOgorCiAyMDA5LTEwLTI3ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTAgKzE3MiwxMSBA
QCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAgICAgICAgICAgICBp
ZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2QoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgbV9j
b250ZXh0ID0gbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCh0aGlzKTsKLQotICAgICAgICAg
ICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5n
IGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzCi0gICAgICAgICAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICAgICAgbV9j
b250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGUodGhpcyk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRl
ZCBmb3IgdGhlIENhbnZhcworICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogICAgICAgICB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDEwICsxNjUsMTAgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZQogICAgIGlmICghc3R5bGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgeworICAgIGlmIChj
YW52YXMoKS0+b3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0
dGVybiA9IHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpIHsKICAgICAgICAgICAgIGlmICghcGF0dGVy
bi0+b3JpZ2luQ2xlYW4oKSkKLSAgICAgICAgICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFp
bnRlZCgpOworICAgICAgICAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTE4OSwxMCArMTg5LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGaWxsU3QKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47
CiAgCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpKSB7CisgICAgaWYgKGNhbnZhcygp
LT5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0g
c3R5bGUtPmNhbnZhc1BhdHRlcm4oKSkgewogICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5vcmln
aW5DbGVhbigpKQotICAgICAgICAgICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7
CisgICAgICAgICAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRUcmFuc2YKICAgICBpZiAoIWN0bS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGMtPmNvbmNhdENUTShjLT5nZXRDVE0oKS5pbnZlcnNlKCkpOwotICAgIGMtPmNv
bmNhdENUTShtX2NhbnZhcy0+YmFzZVRyYW5zZm9ybSgpKTsKKyAgICBjLT5jb25jYXRDVE0oY2Fu
dmFzKCktPmJhc2VUcmFuc2Zvcm0oKSk7CiAgICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5tdWx0aXBs
eShjdG0uaW52ZXJzZSgpKTsKICAgICBtX3BhdGgudHJhbnNmb3JtKGN0bSk7CiAKQEAgLTYzMCw3
ICs2MzAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVjdChmbG9hCiAjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKQogewotICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KSkKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gY2FudmFzKCktPmRvY3VtZW50KCktPnNl
dHRpbmdzKCkpCiAgICAgICAgIGlmIChzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29t
cGF0aWJpbGl0eU1vZGUoKSkKICAgICAgICAgICAgIG1fcGF0aC5jbGVhcigpOwogfQpAQCAtOTM1
LDggKzkzNSw4IEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IG5vcm1hbGl6ZVJlY3QoY28KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNoZWNrT3JpZ2luKGNvbnN0IEtVUkwmIHVy
bCkKIHsKLSAgICBpZiAobV9jYW52YXMtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRh
aW50c0NhbnZhcyh1cmwpKQotICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOwor
ICAgIGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dGFpbnRzQ2Fu
dmFzKHVybCkpCisgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjaGVja09yaWdpbihjb25zdCBTdHJpbmcmIHVy
bCkKQEAgLTk4NiwxMSArOTg2LDExIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UKICAgICBpZiAoIWNhY2hlZEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpCisgICAgaWYgKGNhbnZhcygpLT5vcmlnaW5DbGVh
bigpKQogICAgICAgICBjaGVja09yaWdpbihjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS51cmwoKSk7
CiAKLSAgICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkgJiYgIWNhY2hlZEltYWdlLT5pbWFn
ZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQotICAgICAgICBtX2NhbnZhcy0+c2V0T3Jp
Z2luVGFpbnRlZCgpOworICAgIGlmIChjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSAmJiAhY2FjaGVk
SW1hZ2UtPmltYWdlKCktPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCisgICAgICAgIGNhbnZh
cygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdCA9IGMt
PnJvdW5kVG9EZXZpY2VQaXhlbHMoc3JjUmVjdCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
Yy0+cm91bmRUb0RldmljZVBpeGVscyhkc3RSZWN0KTsKQEAgLTEwMTIsMTQgKzEwMTIsMTQgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIGRyYXdJbWFnZShj
YW52YXMsIEZsb2F0UmVjdCgwLCAwLCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkp
LCBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGVjKTsKIH0KIAotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwKICAgICBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIEFTU0VSVChjYW52YXMpOworICAgIEFTU0VSVChwYXNzZWRDYW52YXMpOwog
CiAgICAgZWMgPSAwOwogCi0gICAgRmxvYXRSZWN0IHNyY0NhbnZhc1JlY3QgPSBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBjYW52YXMtPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IHNyY0NhbnZhc1Jl
Y3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBwYXNzZWRDYW52YXMtPnNpemUoKSk7CiAgICAg
aWYgKCFzcmNDYW52YXNSZWN0LmNvbnRhaW5zKG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCkpIHx8IHNy
Y1JlY3Qud2lkdGgoKSA9PSAwIHx8IHNyY1JlY3QuaGVpZ2h0KCkgPT0gMCkgewogICAgICAgICBl
YyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CkBAIC0xMDM4LDEyICsxMDM4LDEy
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKGRzdFJlY3QpOwogICAgICAgICAK
ICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0gICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVy
KCk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IHBhc3NlZENhbnZhcy0+YnVmZmVyKCk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2FudmFzLT5vcmln
aW5DbGVhbigpKQotICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOworICAgIGlm
ICghY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpCisgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5U
YWludGVkKCk7CiAKICAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBkZXN0UmVjdCwg
c291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAgICAgd2lsbERyYXcoZGVz
dFJlY3QpOyAvLyBUaGlzIGNhbGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdlLCBzaW5jZSB0aGUgYnVm
ZmVyIHdlIGRyYXcgaW50byBtYXkgYmUgb3VyIG93biwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IGl0IGlzIGRpcnR5LgpAQCAtMTA4OCwxMSArMTA4OCwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpKQorICAg
IGlmIChjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSkKICAgICAgICAgY2hlY2tPcmlnaW4odmlkZW8t
PmN1cnJlbnRTcmMoKSk7CiAKLSAgICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkgJiYgIXZp
ZGVvLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQotICAgICAgICBtX2NhbnZhcy0+c2V0T3Jp
Z2luVGFpbnRlZCgpOworICAgIGlmIChjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSAmJiAhdmlkZW8t
Pmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCisgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5U
YWludGVkKCk7CiAKICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQ
aXhlbHMoc3JjUmVjdCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gYy0+cm91bmRUb0Rldmlj
ZVBpeGVscyhkc3RSZWN0KTsKQEAgLTExMjEsMTEgKzExMjEsMTEgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIGlmICghY2FjaGVkSW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKKyAgICBpZiAoY2Fu
dmFzKCktPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgIGNoZWNrT3JpZ2luKGNhY2hlZEltYWdlLT5y
ZXNwb25zZSgpLnVybCgpKTsKIAotICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSAmJiAh
Y2FjaGVkSW1hZ2UtPmltYWdlKCktPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCi0gICAgICAg
IG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7CisgICAgaWYgKGNhbnZhcygpLT5vcmlnaW5D
bGVhbigpICYmICFjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4o
KSkKKyAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQpAQCAtMTE1NSw3ICsx
MTU1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldENvbXBvcwogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnByZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChDYW52
YXNHcmFkaWVudCogZ3JhZGllbnQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQ
T1JUKQotICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+
c2V0dGluZ3MoKSkKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gY2FudmFzKCktPmRvY3Vt
ZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAgIGlmIChzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJh
Y2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSkKICAgICAgICAgICAgIGdyYWRpZW50LT5zZXREYXNo
Ym9hcmRDb21wYXRpYmlsaXR5TW9kZSgpOwogI2Vsc2UKQEAgLTEyMDUsNyArMTIwNSw3IEBAIFBh
c3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW4KICAgICBpZiAoIWNhY2hlZElt
YWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIENh
bnZhc1BhdHRlcm46OmNyZWF0ZShJbWFnZTo6bnVsbEltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFks
IHRydWUpOwogCi0gICAgYm9vbCBvcmlnaW5DbGVhbiA9ICFtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+dGFpbnRzQ2FudmFzKEtVUkwoS1VSTCgpLCBjYWNoZWRJbWFnZS0+
dXJsKCkpKTsKKyAgICBib29sIG9yaWdpbkNsZWFuID0gIWNhbnZhcygpLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT50YWludHNDYW52YXMoS1VSTChLVVJMKCksIGNhY2hlZEltYWdlLT51
cmwoKSkpOwogICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FjaGVkSW1hZ2UtPmlt
YWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKIH0KIApAQCAtMTI1MywxMiAr
MTI1MywxMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoCiAgICAg
ICAgIC8vIHdlJ2QgaGF2ZSB0byBrZWVwIHRoZSBjbGlwIHBhdGggYXJvdW5kLgogICAgIH0KICAg
ICAKLSAgICBtX2NhbnZhcy0+d2lsbERyYXcoZGlydHlSZWN0KTsKKyAgICBjYW52YXMoKS0+d2ls
bERyYXcoZGlydHlSZWN0KTsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jYW52YXMt
PmRyYXdpbmdDb250ZXh0KCk7CisgICAgcmV0dXJuIGNhbnZhcygpLT5kcmF3aW5nQ29udGV4dCgp
OwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUVtcHR5SW1hZ2VEYXRh
KGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0xMjc2LDcgKzEyNzYsNyBAQCBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29uCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKHN3LCBzaCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXpl
ID0gbV9jYW52YXMtPmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsKKyAgICBJ
bnRTaXplIHNjYWxlZFNpemUgPSBjYW52YXMoKS0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNj
YWxlZFNpemUpOwogICAgIGlmIChzY2FsZWRTaXplLndpZHRoKCkgPCAxKQogICAgICAgICBzY2Fs
ZWRTaXplLnNldFdpZHRoKDEpOwogICAgIGlmIChzY2FsZWRTaXplLmhlaWdodCgpIDwgMSkKQEAg
LTEyODcsMTggKzEyODcsMTggQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IENhbnZhc1JlbmRlcmlu
Z0NvbgogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpn
ZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmICghbV9jYW52YXMtPm9yaWdpbkNsZWFuKCkp
IHsKKyAgICBpZiAoIWNhbnZhcygpLT5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIGVjID0gU0VD
VVJJVFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgRmxvYXRSZWN0
IHVuc2NhbGVkUmVjdChzeCwgc3ksIHN3LCBzaCk7Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0ID0g
bV9jYW52YXMtPmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRSZWN0KTsKKyAgICBJbnRS
ZWN0IHNjYWxlZFJlY3QgPSBjYW52YXMoKS0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxl
ZFJlY3QpOwogICAgIGlmIChzY2FsZWRSZWN0LndpZHRoKCkgPCAxKQogICAgICAgICBzY2FsZWRS
ZWN0LnNldFdpZHRoKDEpOwogICAgIGlmIChzY2FsZWRSZWN0LmhlaWdodCgpIDwgMSkKICAgICAg
ICAgc2NhbGVkUmVjdC5zZXRIZWlnaHQoMSk7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IG1f
Y2FudmFzID8gbV9jYW52YXMtPmJ1ZmZlcigpIDogMDsKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVy
ID0gY2FudmFzKCkgPyBjYW52YXMoKS0+YnVmZmVyKCkgOiAwOwogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoc2NhbGVkUmVjdC5zaXplKCkpOwog
ICAgIHJldHVybiBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShzY2FsZWRSZWN0KTsK
QEAgLTEzMjYsNyArMTMyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJ
bWFnZUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEltYWdlQnVmZmVyKiBidWZmZXIg
PSBtX2NhbnZhcy0+YnVmZmVyKCk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcygp
LT5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzYz
LDcgKzEzNjMsNyBAQCBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250KCkgCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0Zv
bnQpCiB7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wRGVjbCA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAgICBDU1NQYXJzZXIgcGFy
c2VyKCFtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOyAvLyBVc2UgdGhlIHBh
cnNlIG1vZGUgb2YgdGhlIGNhbnZhcycgZG9jdW1lbnQgd2hlbiBwYXJzaW5nIENTUy4KKyAgICBD
U1NQYXJzZXIgcGFyc2VyKCFjYW52YXMoKS0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOyAv
LyBVc2UgdGhlIHBhcnNlIG1vZGUgb2YgdGhlIGNhbnZhcycgZG9jdW1lbnQgd2hlbiBwYXJzaW5n
IENTUy4KICAgICAgICAgCiAgICAgU3RyaW5nIGRlY2xhcmF0aW9uVGV4dCgiZm9udDogIik7CiAg
ICAgZGVjbGFyYXRpb25UZXh0ICs9IG5ld0ZvbnQ7CkBAIC0xMzc3LDExICsxMzc3LDExIEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAvLyBNYXAgdGhlIDxj
YW52YXM+IGZvbnQgaW50byB0aGUgdGV4dCBzdHlsZS4gSWYgdGhlIGZvbnQgdXNlcyBrZXl3b3Jk
cyBsaWtlIGxhcmdlci9zbWFsbGVyLCB0aGVzZSB3aWxsIHdvcmsKICAgICAvLyByZWxhdGl2ZSB0
byB0aGUgY2FudmFzLgogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y3JlYXRlKCk7Ci0gICAgaWYgKG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCkpCi0gICAg
ICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obV9jYW52YXMtPmNvbXB1dGVkU3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCkpOworICAgIGlmIChjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgp
KQorICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGNhbnZhcygpLT5jb21wdXRl
ZFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQg
cHJvcGVydHkgaW50byB0aGUgc3R5bGUuCi0gICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxl
Y3RvciA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IGNhbnZhcygpLT5kb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCk7CiAgICAgc3R5bGVTZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJv
cGVydHlGb250LCB0ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnQp
LmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7CiAgICAgCiAgICAgc3RhdGUoKS5tX2ZvbnQgPSBuZXdT
dHlsZS0+Zm9udCgpOwpAQCAtMTQ1NSw4ICsxNDU1LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdUZXh0SQogICAgIC8vIEZJWE1FOiBIYW5kbGUgbWF4V2lkdGguCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdHVybiBvZmYgZm9udCBzbW9vdGhpbmcuCiAKLSAgICBib29sIHJ0
bCA9IG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCkgPyBtX2NhbnZhcy0+Y29tcHV0ZWRTdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBSVEwgOiBmYWxzZTsKLSAgICBib29sIG92ZXJyaWRlID0gbV9jYW52
YXMtPmNvbXB1dGVkU3R5bGUoKSA/IG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCktPnVuaWNvZGVC
aWRpKCkgPT0gT3ZlcnJpZGUgOiBmYWxzZTsKKyAgICBib29sIHJ0bCA9IGNhbnZhcygpLT5jb21w
dXRlZFN0eWxlKCkgPyBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBS
VEwgOiBmYWxzZTsKKyAgICBib29sIG92ZXJyaWRlID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUo
KSA/IGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCktPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUg
OiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgY29u
c3QgVUNoYXIqIHN0cmluZyA9IHRleHQuY2hhcmFjdGVycygpOwpAQCAtMTUwOCwxMSArMTUwOCwx
MSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgICAgIHRl
eHRSZWN0LmluZmxhdGUoYy0+c3Ryb2tlVGhpY2tuZXNzKCkgLyAyKTsKIAogICAgIGlmIChmaWxs
KQotICAgICAgICBtX2NhbnZhcy0+d2lsbERyYXcodGV4dFJlY3QpOworICAgICAgICBjYW52YXMo
KS0+d2lsbERyYXcodGV4dFJlY3QpOwogICAgIGVsc2UgewogICAgICAgICAvLyBXaGVuIHN0cm9r
aW5nIHRleHQsIHBvaW50eSBtaXRlcnMgY2FuIGV4dGVuZCBvdXRzaWRlIG9mIHRleHRSZWN0LCBz
byB3ZQogICAgICAgICAvLyBwdW50IGFuZCBkaXJ0eSB0aGUgd2hvbGUgY2FudmFzLgotICAgICAg
ICBtX2NhbnZhcy0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIG1fY2FudmFzLT53aWR0aCgpLCBt
X2NhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAgICAgY2FudmFzKCktPndpbGxEcmF3KEZsb2F0UmVj
dCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CiAgICAgfQog
ICAgIAogI2lmIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDEyICs0MiwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykKK0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGUoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcykKK3sKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEKGNhbnZhcywgY29udGV4dCk7Cit9CisKK0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKEhUTUxDYW52YXNFbGVtZW50KiBwYXNz
ZWRDYW52YXMsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCisgICAgOiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKKyAgICAsIG1fY29udGV4dChjb250
ZXh0KQogICAgICwgbV9uZWVkc1VwZGF0ZSh0cnVlKQogICAgICwgbV9tYXJrZWRDYW52YXNEaXJ0
eShmYWxzZSkKIHsKLSAgICBtX2NvbnRleHQucmVzaGFwZShtX2NhbnZhcy0+d2lkdGgoKSwgbV9j
YW52YXMtPmhlaWdodCgpKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBtX2NvbnRleHQt
PnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiB9CiAKIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCgpCkBAIC01
OCwxNCArNjksMTQgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp+Q2FudmFzUmVuZGVyaQog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCiB7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2NhbnZhcy0+cmVuZGVy
Qm94KCkgJiYgbV9jYW52YXMtPnJlbmRlckJveCgpLT5oYXNMYXllcigpKSB7Ci0gICAgICAgIG1f
Y2FudmFzLT5yZW5kZXJCb3goKS0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOwor
ICAgIGlmIChjYW52YXMoKS0+cmVuZGVyQm94KCkgJiYgY2FudmFzKCktPnJlbmRlckJveCgpLT5o
YXNMYXllcigpKSB7CisgICAgICAgIGNhbnZhcygpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKS0+cmVu
ZGVyZXJDb250ZW50Q2hhbmdlZCgpOwogICAgIH0gZWxzZSB7CiAjZW5kaWYKICAgICAgICAgaWYg
KCFtX21hcmtlZENhbnZhc0RpcnR5KSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNh
bnZhcydzIGltYWdlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCi0gICAgICAgICAgICBtX2NhbnZhcy0+
YnVmZmVyKCk7Ci0gICAgICAgICAgICBtX2NhbnZhcy0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAs
IG1fY2FudmFzLT53aWR0aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNh
bnZhcygpLT5idWZmZXIoKTsKKyAgICAgICAgICAgIGNhbnZhcygpLT53aWxsRHJhdyhGbG9hdFJl
Y3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwogICAgICAg
ICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CiAgICAgICAgIH0KICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03Niw3ICs4Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjptYXJrQ29udGUKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpi
ZWdpblBhaW50KCkKIHsKICAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICBt
X2NvbnRleHQuYmVnaW5QYWludCh0aGlzKTsKKyAgICAgICAgbV9jb250ZXh0LT5iZWdpblBhaW50
KHRoaXMpOwogICAgIH0KIH0KIApAQCAtODQsNyArOTUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6ZW5kUGFpbnQoCiB7CiAgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsK
ICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQu
ZW5kUGFpbnQoKTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmRQYWludCgpOwogICAgIH0KIH0KIApA
QCAtOTIsMTggKzEwMywxOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVzaGFw
ZShpCiB7CiAgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgICAgIGlmIChtX2NhbnZhcy0+cmVuZGVyQm94KCkgJiYgbV9jYW52YXMt
PnJlbmRlckJveCgpLT5oYXNMYXllcigpKQotICAgICAgICAgICAgbV9jYW52YXMtPnJlbmRlckJv
eCgpLT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CisgICAgICAgIGlmIChjYW52
YXMoKS0+cmVuZGVyQm94KCkgJiYgY2FudmFzKCktPnJlbmRlckJveCgpLT5oYXNMYXllcigpKQor
ICAgICAgICAgICAgY2FudmFzKCktPnJlbmRlckJveCgpLT5sYXllcigpLT5yZW5kZXJlckNvbnRl
bnRDaGFuZ2VkKCk7CiAjZW5kaWYKICAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwogICAg
IH0KICAgICAKLSAgICBtX2NvbnRleHQucmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2Nv
bnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnNpemVJbkJ5dGVzKGludCB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LnNpemVJbkJ5dGVzKHR5cGUpOworICAgIGludCByZXN1
bHQgPSBtX2NvbnRleHQtPnNpemVJbkJ5dGVzKHR5cGUpOwogICAgIGlmIChyZXN1bHQgPD0gMCkg
ewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgfQpAQCAtMTEyLDcgKzEyMyw3IEBAIGlu
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNpemVJbkJ5dGUKIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewot
ICAgIG1fY29udGV4dC5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOworICAgIG1fY29udGV4dC0+YWN0
aXZlVGV4dHVyZSh0ZXh0dXJlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCkBAIC0xMjAsNyArMTMxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmF0dGFjaFNoYQogewogICAgIGlmICghcHJvZ3JhbSB8fCAhc2hhZGVyKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9jb250ZXh0LmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAgIG1f
Y29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTI4LDk0ICsxMzksOTQgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRBdHRyaQogewogICAgIGlmICghcHJvZ3JhbSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
aW5kZXgsIG5hbWUpOworICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IGluZGV4LCBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25n
IHRhcmdldCwgQ2FudmFzQnVmZmVyKiBidWZmZXIpCiB7Ci0gICAgbV9jb250ZXh0LmJpbmRCdWZm
ZXIodGFyZ2V0LCBidWZmZXIpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1
ZmZlcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBDYW52YXNGcmFtZWJ1ZmZlciogYnVmZmVyKQogewotICAgIG1fY29udGV4dC5iaW5k
RnJhbWVidWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKHRhcmdldCwgYnVmZmVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7
Ci0gICAgbV9jb250ZXh0LmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIpOwor
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZh
c1RleHR1cmUqIHRleHR1cmUpCiB7Ci0gICAgbV9jb250ZXh0LmJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91
YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKIHsKLSAgICBtX2NvbnRleHQuYmxlbmRDb2xvcihyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbiggdW5zaWdu
ZWQgbG9uZyBtb2RlICkKIHsKLSAgICBtX2NvbnRleHQuYmxlbmRFcXVhdGlvbihtb2RlKTsKKyAg
ICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9k
ZUFscGhhKQogewotICAgIG1fY29udGV4dC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwg
bW9kZUFscGhhKTsKKyAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdC
LCBtb2RlQWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25n
IHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3RvcikKIHsKLSAgICBtX2NvbnRleHQuYmxlbmRG
dW5jKHNmYWN0b3IsIGRmYWN0b3IpOworICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3Is
IGRmYWN0b3IpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9ICAgICAg
IAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNy
Y0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQogewotICAgIG1fY29udGV4dC5ibGVuZEZ1
bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKKyAgICBtX2Nv
bnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKLSAgICBtX2NvbnRleHQuYnVmZmVyRGF0
YSh0YXJnZXQsIHNpemUsIHVzYWdlKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCB1c2FnZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIENhbnZhc0FycmF5KiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlKQogewotICAg
IG1fY29udGV4dC5idWZmZXJEYXRhKHRhcmdldCwgZGF0YSwgdXNhZ2UpOworICAgIG1fY29udGV4
dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEsIHVzYWdlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVm
ZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZhc0FycmF5
KiBkYXRhKQogewotICAgIG1fY29udGV4dC5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBk
YXRhKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHVuc2lnbmVkIGxv
bmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0KQogewotICAgIHJldHVybiBtX2NvbnRleHQuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyh0YXJnZXQpOworICAgIHJldHVybiBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJT
dGF0dXModGFyZ2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNr
KQogewotICAgIG1fY29udGV4dC5jbGVhcihtYXNrKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKG1h
c2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtMjI5LDQz
ICsyNDAsNDMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyQ29sbwogICAg
ICAgICBiID0gMDsKICAgICBpZiAoaXNuYW4oYSkpCiAgICAgICAgIGEgPSAxOwotICAgIG1fY29u
dGV4dC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihy
LCBnLCBiLCBhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xlYXJEZXB0aChkb3VibGUgZGVwdGgpCiB7
Ci0gICAgbV9jb250ZXh0LmNsZWFyRGVwdGgoZGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJE
ZXB0aChkZXB0aCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCiB7Ci0g
ICAgbV9jb250ZXh0LmNsZWFyU3RlbmNpbChzKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNp
bChzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7Ci0gICAgbV9jb250ZXh0LmNvbG9yTWFzayhyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2socmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKENhbnZhc1NoYWRl
ciogc2hhZGVyKQogewotICAgIG1fY29udGV4dC5jb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAg
bV9jb250ZXh0LT5jb21waWxlU2hhZGVyKHNoYWRlcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNvcHlU
ZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQogewotICAgIG1fY29udGV4dC5jb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZl
bCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQuY29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMTksNyArMzMwLDcgQEAgUGFzc1JlZlB0
cjxDYW52YXNTaGFkZXI+IENhbnZhc1JlbmRlcmluZwogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQogewotICAgIG1fY29udGV4dC5j
dWxsRmFjZShtb2RlKTsKKyAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTM3MywxOSArMzg0LDE5IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVUZXgKIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmRlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpCiB7Ci0gICAgbV9j
b250ZXh0LmRlcHRoRnVuYyhmdW5jKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoRnVuYyhmdW5jKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6ZGVwdGhNYXNrKGJvb2wgZmxhZykKIHsKLSAgICBtX2NvbnRleHQu
ZGVwdGhNYXNrKGZsYWcpOworICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKGZsYWcpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpCiB7Ci0gICAg
bV9jb250ZXh0LmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworICAgIG1fY29udGV4dC0+ZGVwdGhS
YW5nZSh6TmVhciwgekZhcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIApAQCAtMzk0LDU4ICs0MDUsNTggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmRldGFjaFNoYQogICAgIGlmICghcHJvZ3JhbSB8fCAhc2hhZGVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2NvbnRleHQuZGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CisgICAgbV9j
b250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAgIG1fY29udGV4dC5kaXNhYmxlKGNh
cCk7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQogewotICAgIG1fY29udGV4
dC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworICAgIG1fY29udGV4dC0+ZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkcmF3QXJyYXlz
KHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKIHsKLSAgICBtX2Nv
bnRleHQuZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIG1fY29udGV4dC0+ZHJh
d0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bCh0cnVlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRyYXdFbGVtZW50
cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcg
dHlwZSwgbG9uZyBvZmZzZXQpCiB7Ci0gICAgbV9jb250ZXh0LmRyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgb2Zmc2V0KTsKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgb2Zmc2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9u
ZyBjYXApCiB7Ci0gICAgbV9jb250ZXh0LmVuYWJsZShjYXApOworICAgIG1fY29udGV4dC0+ZW5h
YmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2ln
bmVkIGxvbmcgaW5kZXgpCiB7Ci0gICAgbV9jb250ZXh0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6ZmluaXNoKCkKIHsKLSAgICBtX2NvbnRleHQuZmluaXNoKCk7Cisg
ICAgbV9jb250ZXh0LT5maW5pc2goKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1
ZSk7CiB9CiAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZsdXNoKCkKIHsKLSAg
ICBtX2NvbnRleHQuZmx1c2goKTsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCkBAIC00NTQsNyArNDY1LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZyYW1lYnVmZgogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1fY29udGV4dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKKyAg
ICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwg
cmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKQEAgLTQ2MywyNiArNDc0LDI2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpmcmFtZWJ1ZmYKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgbV9jb250ZXh0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQog
ewotICAgIG1fY29udGV4dC5mcm9udEZhY2UobW9kZSk7CisgICAgbV9jb250ZXh0LT5mcm9udEZh
Y2UobW9kZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0KQogewotICAgIG1fY29udGV4dC5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworICAgIG1f
Y29udGV4dC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKENhbnZhc1Byb2dyYW0qIHByb2dyYW0s
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFjdGl2ZUlu
Zm8gaW5mbzsKLSAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMg
fHwgIW1fY29udGV4dC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIGluZm8pKSB7Cisg
ICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFtX2NvbnRl
eHQtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgaW5mbykpIHsKICAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNDkyLDcgKzUw
Myw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzQWN0aXZlSW5mbz4gQ2FudmFzUmVuZGUKIFBhc3NSZWZQ
dHI8Q2FudmFzQWN0aXZlSW5mbz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRBY3RpdmVV
bmlmb3JtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICBpZiAoIXByb2dyYW0g
fHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMgfHwgIW1fY29udGV4dC5nZXRBY3RpdmVVbmlm
b3JtKHByb2dyYW0sIGluZGV4LCBpbmZvKSkgeworICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFt
LT5jb250ZXh0KCkgIT0gdGhpcyB8fCAhbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKHByb2dy
YW0sIGluZGV4LCBpbmZvKSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC01MDEsMjUxICs1MTIsMjUxIEBAIFBhc3NSZWZQdHI8Q2Fu
dmFzQWN0aXZlSW5mbz4gQ2FudmFzUmVuZGUKIAogaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0QXR0cmliTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewotICAgIHJldHVybiBtX2NvbnRleHQuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3Jh
bSwgbmFtZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3Jh
bSwgbmFtZSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRCb29sZWFu
KHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0
Qm9vbGVhbihwbmFtZSk7CisgICAgYm9vbCByZXN1bHQgPSBtX2NvbnRleHQtPmdldEJvb2xlYW4o
cG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lKQogewot
ICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0
Qm9vbGVhbnYocG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldEJ1
ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4
dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8
Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1l
dGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAg
UmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0g
bV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogdW5z
aWduZWQgbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEVycm9yKCkKIHsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LmdldEVycm9yKCk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJy
b3IoKTsKIH0KIAogZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGbG9hdCh1bnNp
Z25lZCBsb25nIHBuYW1lKQogewotICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC5nZXRGbG9h
dChwbmFtZSk7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRGbG9hdChwbmFtZSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZh
c0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldEZsb2F0dihwbmFtZSk7CisgICAgUmVm
UHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5
OwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFj
aG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4
dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHRhcmdldCwgYXR0YWNobWVudCwg
cG5hbWUpOworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcmkodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVm
UHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZh
c0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50
QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2V0SW50ZWdlcih1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGZsb2F0
IHJlc3VsdCA9IG1fY29udGV4dC5nZXRJbnRlZ2VyKHBuYW1lKTsKKyAgICBmbG9hdCByZXN1bHQg
PSBtX2NvbnRleHQtPmdldEludGVnZXIocG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJ
bnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBs
b25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRl
eHQuZ2V0SW50ZWdlcnYocG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkg
PSBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBwbmFtZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFByb2dyYW1pKHBy
b2dyYW0sIHBuYW1lKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtaShw
cm9ncmFtLCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1
bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkg
PSBtX2NvbnRleHQuZ2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFy
cmF5OwogfQogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5m
b0xvZyhDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIFN0cmluZyBzID0gbV9jb250ZXh0
LmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOworICAgIFN0cmluZyBzID0gbV9jb250ZXh0LT5n
ZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogICAgIHJldHVybiBzOwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKQogewotICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0
LT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1Jl
ZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNJ
bnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRh
cmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAg
cmV0dXJuIGFycmF5OwogfQogCiBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFk
ZXJpKENhbnZhc1NoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGlu
dCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0U2hhZGVyaShzaGFkZXIsIHBuYW1lKTsKKyAgICBpbnQg
cmVzdWx0ID0gbV9jb250ZXh0LT5nZXRTaGFkZXJpKHNoYWRlciwgcG5hbWUpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFz
c1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFk
ZXJpdihDYW52YXNTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFNoYWRlcml2KHNoYWRl
ciwgcG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQt
PmdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKENhbnZhc1NoYWRlciogc2hhZGVyKQogewotICAg
IFN0cmluZyBzID0gbV9jb250ZXh0LmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICBTdHJp
bmcgcyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHM7CiB9CiAKIFN0cmluZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNoYWRl
cikKIHsKLSAgICBTdHJpbmcgcyA9IG1fY29udGV4dC5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsK
KyAgICBTdHJpbmcgcyA9IG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKHNoYWRlcik7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gczsKIH0KIAogU3Ry
aW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFt
ZSkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmdldFN0cmluZyhuYW1lKTsKKyAgICByZXR1cm4g
bV9jb250ZXh0LT5nZXRTdHJpbmcobmFtZSk7CiB9CiAKIGZsb2F0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBwbmFtZSkKIHsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VGV4UGFyYW1l
dGVyZih0YXJnZXQsIHBuYW1lKTsKKyAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0
QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZh
c0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwg
cG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+
Z2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC5nZXRUZXhQYXJh
bWV0ZXJpKHRhcmdldCwgcG5hbWUpOworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0ludEFy
cmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJ
bnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGZsb2F0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlv
bikKIHsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VW5pZm9ybWYocHJvZ3JhbSwg
bG9jYXRpb24pOworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWYocHJv
Z3JhbSwgbG9jYXRpb24pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFt
LCBsb25nIGxvY2F0aW9uKQogewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC5nZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24pOworICAgIFJlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KHByb2dyYW0s
IGxvY2F0aW9uKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJl
dHVybiBhcnJheTsKIH0KIAogbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZv
cm1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7Ci0gICAgbG9uZyBy
ZXN1bHQgPSBtX2NvbnRleHQuZ2V0VW5pZm9ybWkocHJvZ3JhbSwgbG9jYXRpb24pOworICAgIGxv
bmcgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtaShwcm9ncmFtLCBsb2NhdGlvbik7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdldFVuaWZvcm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQogewot
ICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VW5pZm9ybWl2
KHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24pOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiBsb25nIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKENhbnZhc1Byb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0Lmdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7CiB9CiAKIGZsb2F0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQogewotICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC5nZXRWZXJ0
ZXhBdHRyaWJmKGluZGV4LCBwbmFtZSk7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0Zs
b2F0QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5z
aWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2Fu
dmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliZnYoaW5kZXgs
IHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQt
PmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGxvbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4
QXR0cmliaShpbmRleCwgcG5hbWUpOworICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJpKGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPENhbnZhc0ludEFy
cmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0lu
dEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUp
OworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFZlcnRl
eEF0dHJpYml2KGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQg
bG9uZyBwbmFtZSkKIHsKLSAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC5nZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0
VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBt
b2RlKQogewotICAgIG1fY29udGV4dC5oaW50KHRhcmdldCwgbW9kZSk7CisgICAgbV9jb250ZXh0
LT5oaW50KHRhcmdldCwgbW9kZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIApAQCAtNzU0LDQyICs3NjUsNDIgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmlzQnVmZmVyKAogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAotICAgIHJldHVybiBtX2NvbnRleHQuaXNCdWZmZXIoYnVmZmVyKTsKKyAgICByZXR1
cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXIpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAgIHJldHVybiBt
X2NvbnRleHQuaXNFbmFibGVkKGNhcCk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVk
KGNhcCk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVy
KENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0
LmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJh
bWVidWZmZXIoZnJhbWVidWZmZXIpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6aXNQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCiB7Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC5pc1Byb2dyYW0ocHJvZ3JhbSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFt
KHByb2dyYW0pOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNSZW5kZXJi
dWZmZXIoQ2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7Ci0gICAgcmV0dXJuIG1f
Y29udGV4dC5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjppc1NoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikKIHsKLSAgICByZXR1
cm4gbV9jb250ZXh0LmlzU2hhZGVyKHNoYWRlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNT
aGFkZXIoc2hhZGVyKTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzVGV4
dHVyZShDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIHJldHVybiBtX2NvbnRleHQuaXNU
ZXh0dXJlKHRleHR1cmUpOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJl
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmxpbmVXaWR0aChkb3VibGUg
d2lkdGgpCiB7Ci0gICAgbV9jb250ZXh0LmxpbmVXaWR0aCgoZmxvYXQpIHdpZHRoKTsKKyAgICBt
X2NvbnRleHQtPmxpbmVXaWR0aCgoZmxvYXQpIHdpZHRoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC03OTgsOTIgKzgwOSw5MiBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6bGlua1Byb2dyCiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgIG1fY29udGV4dC5saW5rUHJvZ3JhbShwcm9ncmFtKTsKKyAg
ICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW0pOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpwaXhl
bFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQogewotICAgIG1fY29udGV4
dC5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
cG5hbWUsIHBhcmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChkb3VibGUgZmFj
dG9yLCBkb3VibGUgdW5pdHMpCiB7Ci0gICAgbV9jb250ZXh0LnBvbHlnb25PZmZzZXQoKGZsb2F0
KSBmYWN0b3IsIChmbG9hdCkgdW5pdHMpOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldCgo
ZmxvYXQpIGZhY3RvciwgKGZsb2F0KSB1bml0cyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNBcnJheT4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgdHlwZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKKyAgICBSZWZQdHI8
Q2FudmFzQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewotICAgIG1fY29udGV4dC5yZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKTsKKyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQucmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJn
ZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2NvbnRleHQtPnJlbmRl
cmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQp
CiB7Ci0gICAgbV9jb250ZXh0LnNhbXBsZUNvdmVyYWdlKChmbG9hdCkgdmFsdWUsIGludmVydCk7
CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQuc2Npc3Nvcih4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhl
aWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNoYWRl
ciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgbV9jb250ZXh0LnNoYWRlclNvdXJjZShz
aGFkZXIsIHN0cmluZyk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJp
bmcpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxv
bmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0gICAgbV9jb250ZXh0LnN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhmdW5jLCByZWYs
IG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxv
bmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNr
KQogewotICAgIG1fY29udGV4dC5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwg
bWFzayk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJl
ZiwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFz
aykKIHsKLSAgICBtX2NvbnRleHQuc3RlbmNpbE1hc2sobWFzayk7CisgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFzayhtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLSAgICBtX2NvbnRleHQu
c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxPcCh1bnNp
Z25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3Mp
CiB7Ci0gICAgbV9jb250ZXh0LnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworICAgIG1f
Y29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnN0ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWls
LCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQogewotICAgIG1fY29u
dGV4dC5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworICAgIG1f
Y29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC04OTMsNyArOTA0LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMgogewogICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwot
ICAgIG1fY29udGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LAorICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtOTA0LDcgKzkxNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp0ZXhJbWFnZTIKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55
IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTkxNCw3ICs5
MjUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyCiB7CiAgICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9
IDA7Ci0gICAgbV9jb250ZXh0LnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW1hZ2UsIGZsaXBZ
LCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC05MjMsNyArOTM0LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMgogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNhbnZhcywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEp
OworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjYW52YXMsIGZsaXBZ
LCBwcmVtdWx0aXBseUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCkBAIC05MzIsMTkgKzk0MywxOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6dGV4SW1hZ2UyCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJv
cnMgcmV0dXJuZWQKICAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgdmlkZW8sIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgdmlkZW8sIGZsaXBZLCBwcmVtdWx0aXBseUFscGhh
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIHBuYW1lLCBmbG9hdCBwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQudGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCBwYXJhbSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdl
dCwgcG5hbWUsIHBhcmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pCiB7Ci0gICAgbV9jb250ZXh0LnRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOworICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIApAQCAtOTU0LDcgKzk2NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUg
YW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC05NjQs
NyArOTc1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYQogewog
ICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAg
ZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBt
X2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTk3NCw3ICs5ODUsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2Ug
aWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQtPnRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCkBAIC05ODQsNyArOTk1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnRleFN1YkltYQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9y
ZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGNh
bnZhcywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBjYW52
YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCkBAIC05OTQsMTMgKzEwMDUsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnRleFN1YkltYQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9y
ZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHZp
ZGVvLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHZpZGVv
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZihs
b25nIGxvY2F0aW9uLCBmbG9hdCB4KQogewotICAgIG1fY29udGV4dC51bmlmb3JtMWYobG9jYXRp
b24sIHgpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDEwLDcgKzEwMjEsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFmCiAgICAgaWYgKCF2KQogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1fY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9u
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9j
YXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKQEAgLTEwMjAsMTMgKzEwMzEsMTMgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZgogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICBtX2NvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgdiwgc2l6ZSk7Cisg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2LCBzaXplKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KQogewotICAgIG1fY29udGV4dC51
bmlmb3JtMWkobG9jYXRpb24sIHgpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9u
LCB4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDM2
LDcgKzEwNDcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpCiAg
ICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1fY29udGV4dC51bmlm
b3JtMWl2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEwNDYsMTMgKzEwNTcsMTMgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaQogICAgIGlmICghdikKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQudW5pZm9ybTFpdihsb2NhdGlv
biwgdiwgc2l6ZSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLCB2LCBzaXpl
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZs
b2F0IHkpCiB7Ci0gICAgbV9jb250ZXh0LnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7CisgICAg
bV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEwNjMsNyArMTA3NCw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmYKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1f
Y29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMik7
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
MTA3NCwxMyArMTA4NSwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTJmCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRleHQudW5pZm9ybTJmdihsb2NhdGlv
biwgdiwgc2l6ZSAvIDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgdiwg
c2l6ZSAvIDIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50
IHgsIGludCB5KQogewotICAgIG1fY29udGV4dC51bmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDkxLDcgKzExMDIsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAg
ICBtX2NvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5s
ZW5ndGgoKSAvIDIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
QEAgLTExMDIsMTMgKzExMTMsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVu
aWZvcm0yaQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LnVuaWZvcm0yaXYobG9j
YXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24s
IHYsIHNpemUgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24s
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCiB7Ci0gICAgbV9jb250ZXh0LnVuaWZvcm0zZihs
b2NhdGlvbiwgeCwgeSwgeik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24sIHgs
IHksIHopOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEx
MTksNyArMTEzMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2YK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1fY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxv
Y2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTEzMCwxMyArMTE0MSwxMyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBt
X2NvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOworICAgIG1fY29udGV4
dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeikKIHsKLSAgICBtX2Nv
bnRleHQudW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0zaShsb2NhdGlvbiwgeCwgeSwgeik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIApAQCAtMTE0Nyw3ICsxMTU4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnVuaWZvcm0zaQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LnVuaWZv
cm0zaXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAzKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTU4LDEzICsxMTY5
LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2kKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMwotICAgIG1fY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LCBzaXplIC8g
Myk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LCBzaXplIC8gMyk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCB3KQogewotICAgIG1fY29udGV4dC51bmlmb3JtNGYobG9jYXRpb24s
IHgsIHksIHosIHcpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6
LCB3KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTc1
LDcgKzExODYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRmCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2NvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2Nh
dGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTExODYsMTMgKzExOTcsMTMgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZgogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9j
b250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHYsIHNpemUgLyA0KTsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm00ZnYobG9jYXRpb24sIHYsIHNpemUgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5p
Zm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KQogewotICAg
IG1fY29udGV4dC51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOworICAgIG1fY29udGV4
dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMjAzLDcgKzEyMTQsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2Nv
bnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgo
KSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEy
MTQsNyArMTIyNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2
LCBzaXplIC8gNCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCB2LCBzaXpl
IC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTIy
NSw3ICsxMjM2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOworICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMTIzNiw3ICsxMjQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm1NYQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTI0Nyw3ICsxMjU4LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5
Ci0gICAgbV9jb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNm
dihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTI1OCw3ICsxMjY5LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA5Ci0gICAgbV9jb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgdiwgc2l6ZSAvIDkpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgdHJhbnNwb3NlLCB2LCBzaXplIC8gOSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIApAQCAtMTI2OSw3ICsxMjgwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnVuaWZvcm1NYQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1fY29udGV4dC51
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCkgLyAxNik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFu
c3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTI4MCwzMiArMTI5MSwzMiBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAg
bV9jb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSAv
IDE2KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgdiwgc2l6ZSAvIDE2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dXNlUHJvZ3JhbShDYW52YXNQcm9n
cmFtKiBwcm9ncmFtKQogewotICAgIG1fY29udGV4dC51c2VQcm9ncmFtKHByb2dyYW0pOworICAg
IG1fY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmFsaWRh
dGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCiB7Ci0gICAgbV9jb250ZXh0LnZhbGlk
YXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShwcm9n
cmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCB2MCkKIHsKLSAgICBtX2NvbnRleHQudmVydGV4QXR0cmliMWYoaW5keCwgdjApOwor
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5keCwgdjApOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2
KQogewogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdo
IGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjFmdihp
bmR4LCB2LT5kYXRhKCkpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZHgsIHYt
PmRhdGEoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
MTMxNCwyMCArMTMyNSwyMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4
QXR0CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2gg
Zm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CiAgICAgCi0g
ICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmR4LCB2KTsKKyAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjFmdihpbmR4LCB2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCiB7Ci0gICAgbV9jb250ZXh0
LnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWIyZihpbmR4LCB2MCwgdjEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYodW5z
aWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2KQogewogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcg
c2V0Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmR4LCB2LT5kYXRhKCkpOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZHgsIHYtPmRhdGEoKSk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTMzNiwyMCArMTM0NywyMCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0CiAgICAgLy8gRklYTUU6IE5l
ZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBz
ZXQKICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CiAgICAgCi0gICAgbV9jb250ZXh0LnZlcnRleEF0
dHJpYjJmdihpbmR4LCB2KTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmR4LCB2
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQogewotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRy
aWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGlu
ZHgsIHYwLCB2MSwgdjIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2KQogewogICAgIC8vIEZJWE1FOiBOZWVk
IHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0
Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmR4LCB2LT5kYXRhKCkpOworICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZHgsIHYtPmRhdGEoKSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTM1OCwyMCArMTM2OSwyMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0CiAgICAgLy8gRklYTUU6IE5lZWQg
dG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQK
ICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CiAgICAgCi0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmR4LCB2KTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2KTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKIHsKLSAgICBtX2NvbnRleHQudmVy
dGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2KQogewogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRy
aWJ1dGUgYmVpbmcgc2V0Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmR4LCB2LT5k
YXRhKCkpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIHYtPmRhdGEoKSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTM4MCwxMyAr
MTM5MSwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0CiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJp
YnV0ZSBiZWluZyBzZXQKICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CiAgICAgCi0gICAgbV9jb250
ZXh0LnZlcnRleEF0dHJpYjRmdihpbmR4LCB2KTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjRmdihpbmR4LCB2KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcih1bnNp
Z25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1h
bGl6ZWQsIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLSAg
ICBtX2NvbnRleHQudmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIG9mZnNldCk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVy
KGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xNDAwLDcgKzE0MTEsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmlld3BvcnQoCiAgICAgICAgIHdpZHRoID0g
MTAwOwogICAgIGlmIChpc25hbihoZWlnaHQpKQogICAgICAgICBoZWlnaHQgPSAxMDA7Ci0gICAg
bV9jb250ZXh0LnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIG1fY29udGV4dC0+
dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5oCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUx
LDggQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIHB1YmxpYzoK
LSAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKEhUTUxDYW52YXNFbGVtZW50Kik7Ci0g
ICAgICAgIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoKTsKKyAgICAgICAgc3RhdGljIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRCogY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50Kik7CisgICAgICAg
IHZpcnR1YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCgpOwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0yODgsNyArMjg4LDcgQEAg
Y2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBs
b25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAotICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSB7IHJldHVybiAmbV9j
b250ZXh0OyB9CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIAogICAgICAgICB2b2lkIHJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIApAQCAtMzAwLDE4ICszMDAsMjEgQEAgY2xh
c3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBmcmll
bmQgY2xhc3MgQ2FudmFzT2JqZWN0OworCisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKwog
ICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmplY3QqKTsKICAgICAgICAgdm9pZCBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKICAgICAgICAgdm9pZCBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKICAgICAgICAgdm9pZCBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoYm9vbCBjaGFuZ2Vk
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2NvbnRleHQuY2hlY2tFcnJvcigpOworICAgICAg
ICAgICAgbV9jb250ZXh0LT5jaGVja0Vycm9yKCk7CiAgICAgICAgICAgICBpZiAoY2hhbmdlZCkK
ICAgICAgICAgICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgbV9jb250ZXh0OworICAgICAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAgICAgICAgYm9vbCBtX25lZWRzVXBkYXRl
OwogICAgICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7CiAgICAgICAgIC8vIEZJWE1FOiBJ
IHRoaW5rIHRoaXMgaXMgYnJva2VuIC0tIGl0IGRvZXMgbm90IGluY3JlbWVudCBhbnkKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lv
biA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCopOwogICAgICAg
ICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0KCkgeyB9CiAgICAgICAgIAorICAgICAg
ICAvLyBSZWYgYW5kIGRlcmVmIHRoZSBtX2NhbnZhcwogICAgICAgICB2b2lkIHJlZigpOwogICAg
ICAgICB2b2lkIGRlcmVmKCk7CiAgICAgICAgIApAQCAtNDYsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBtX2NhbnZhczsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQs
MTEgKzc0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOwogI2VuZGlmCiAKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRCA6IE5v
bmNvcHlhYmxlIHsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNoYWRlclR5cGUgeyBGUkFHTUVOVF9T
SEFERVIsIFZFUlRFWF9TSEFERVIgfTsKICAgICAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qo
KTsKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZSgp
OwogICAgICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRCgpOwogCiAjaWYgUExBVEZPUk0o
TUFDKQpAQCAtOTIsNyArOTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRm
b3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gTnVsbFBsYXRmb3Jt
M0RPYmplY3Q7IH0KICNlbmRpZgogICAgICAgICB2b2lkIGNoZWNrRXJyb3IoKSBjb25zdDsKLSAg
ICAgICAgCiAgICAgICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRh
IHR5cGVzCkBAIC0zMjAsNiArMzE5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQpOyAgICAgICAgCiAgICAgICAgIAogICAgIHByaXZh
dGU6ICAgICAgICAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QoKTsKKwogICAgICAgICBpbnQg
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsKICAgICAgICAgCiAjaWYgUExBVEZPUk0o
TUFDKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExh
eWVyLm1tCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NhbnZhczNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDE5ICs1MCwxNCBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLShDR0xQaXhlbEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxG
b3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFzawogewotICAgIENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlIGF0dHJpYnNbXSA9Ci0gICAgewotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUpIGtDR0xQRkFBY2NlbGVyYXRlZCwKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlKSBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDMyLAotICAg
ICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFEaXNwbGF5TWFzaywgKENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlKSBtYXNrLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGUpIDAKLSAgICB9OwotICAgIAotICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2Jq
OwotICAgIEdMaW50IG51bVBpeGVsRm9ybWF0czsKLSAKLSAgICBDR0xDaG9vc2VQaXhlbEZvcm1h
dChhdHRyaWJzLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMpOwotICAgIHJldHVy
biBwaXhlbEZvcm1hdE9iajsKKyAgICAvLyBGSVhNRTogVGhlIG1hc2sgcGFyYW0gdGVsbHMgeW91
IHdoaWNoIGRpc3BsYXkgKG9uIGEgbXVsdGktZGlzcGxheSBzeXN0ZW0pCisgICAgLy8gaXMgdG8g
YmUgdXNlZC4gQnV0IHNpbmNlIHdlIGFyZSBub3cgZ2V0dGluZyB0aGUgcGl4ZWwgZm9ybWF0IGZy
b20gdGhlIAorICAgIC8vIENhbnZhcyBDR0wgY29udGV4dCwgd2UgZG9uJ3QgdXNlIGl0LiBUaGlz
IHNlZW1zIHRvIGRvIHRoZSByaWdodCB0aGluZyBvbgorICAgIC8vIG9uZSBtdWx0aS1kaXNwbGF5
IHN5c3RlbS4gQnV0IHRoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgY2Fz
ZS4KKyAgICAvLyBJZiBuZWVkZWQgd2Ugd2lsbCBoYXZlIHRvIHNldCB0aGUgZGlzcGxheSBtYXNr
IGluIHRoZSBDYW52YXMgQ0dMQ29udGV4dCBhbmQKKyAgICAvLyBtYWtlIHN1cmUgaXQgbWF0Y2hl
cy4KKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgcmV0dXJuIENHTFJldGFpblBpeGVsRm9y
bWF0KENHTEdldFBpeGVsRm9ybWF0KG1fY29udGV4dE9iaikpOwogfQogCiAtKENHTENvbnRleHRP
YmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxG
b3JtYXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHJldmlzaW9uIDUwMTE1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw1NCArNTAsNzYgQEAKICNpbmNsdWRlICJXZWJLaXRDU1NNYXRyaXguaCIKIAogI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKyNpbmNsdWRlIDxPcGVuR0wv
Q0dMUmVuZGVyZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIHZvaWQgc2V0
UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiYgYXR0cmlicywgaW50
IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBhY2NlbGVyYXRlZCwgYm9vbCBzdXBlcnNh
bXBsZSwgYm9vbCBjbG9zZXN0KQoreworICAgIGF0dHJpYnMuY2xlYXIoKTsKKyAgICAKKyAgICBh
dHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKKyAgICBhdHRyaWJzLmFwcGVuZChzdGF0
aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oY29sb3JCaXRzKSk7CisgICAgYXR0cmli
cy5hcHBlbmQoa0NHTFBGQURlcHRoU2l6ZSk7CisgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGRlcHRoQml0cykpOworICAgIAorICAgIGlmIChh
Y2NlbGVyYXRlZCkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQVJlbmRlcmVySUQpOwor
ICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZT4oa0NHTFJlbmRlcmVyR2VuZXJpY0Zsb2F0SUQpKTsKKyAgICB9CisgICAgICAgIAorICAgIGlm
IChzdXBlcnNhbXBsZSkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQVN1cGVyc2FtcGxl
KTsKKyAgICAgICAgCisgICAgaWYgKGNsb3Nlc3QpCisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtD
R0xQRkFDbG9zZXN0UG9saWN5KTsKKyAgICAgICAgCisgICAgYXR0cmlicy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApKTsKK30KKworUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSgpCit7CisgICAgUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQzRCgp
OworICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250ZXh0IDogMDsKK30KKwog
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICA6IG1fY29udGV4dE9i
aigwKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9kZXB0aEJ1
ZmZlcigwKQogewotICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbXSA9Ci0gICAg
ewotICAgICAgICBrQ0dMUEZBQ2xvc2VzdFBvbGljeSwKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlKSBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDMy
LAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFEZXB0aFNpemUsIChD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCi0gICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJp
YnV0ZSkga0NHTFBGQUFjY2VsZXJhdGVkLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGUpIGtDR0xQRkFTdXBlcnNhbXBsZSwKLSAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
KSAwCi0gICAgfTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdG8gY2hhbmdlIHRoZXNlIGNvbnN0
YW50cyB0byBtYXRjaCB0aGUgYWJvdmUgbGlzdAotICAgIGNvbnN0IGludCBzdXBlclNhbXBsZUlu
ZGV4ID0gNjsKLSAgICBjb25zdCBpbnQgYWNjZWxlcmF0ZWRJbmRleCA9IDU7Ci0gICAgY29uc3Qg
aW50IGRlcHRoU2l6ZUluZGV4ID0gNDsKLSAgICAKKyAgICBWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmog
PSAwOwogICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7CiAgICAgCi0gICAgLy8gV2Ugd2ls
bCB0cnkgZm9yIHRoZSBhYm92ZSBmb3JtYXQgZmlyc3QuIElmIHRoYXQgZmFpbHMsIHdlIHdpbGwK
LSAgICAvLyB0cnkgZm9yIG9uZSB3aXRob3V0IHN1cGVyc2FtcGxlLiBJZiB0aGF0IGZhaWxzLCB3
ZSB3aWxsIHRyeSBmb3IKLSAgICAvLyBvbmUgdGhhdCBoYXMgYSAxNiBiaXQgZGVwdGggYnVmZmVy
LiBJZiB0aGF0IGZhaWxzLCB3ZSB3aWxsIHRyeQotICAgIC8vIGZvciBhIHNvZnR3YXJlIHJlbmRl
cmVyLiBJZiBub25lIG9mIHRoYXQgd29ya3MsIHdlIHNpbXBseSBmYWlsIAotICAgIC8vIGFuZCBz
ZXQgbV9jb250ZXh0T2JqIHRvIDAuCi0gICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywg
JnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAgICAvLyBXZSB3aWxsIHRyeToK
KyAgICAvLworICAgIC8vICAxKSAzMiBiaXQgUkdCQS8zMiBiaXQgZGVwdGgvYWNjZWxlcmF0ZWQv
c3VwZXJzYW1wbGVkCisgICAgLy8gIDIpIDMyIGJpdCBSR0JBLzMyIGJpdCBkZXB0aC9hY2NlbGVy
YXRlZAorICAgIC8vICAzKSAzMiBiaXQgUkdCQS8xNiBiaXQgZGVwdGgvYWNjZWxlcmF0ZWQKKyAg
ICAvLyAgNCkgY2xvc2VzdCB0byAzMiBiaXQgUkdCQS8xNiBiaXQgZGVwdGgvc29mdHdhcmUgcmVu
ZGVyZXIKKyAgICAvLworICAgIC8vICBJZiBub25lIG9mIHRoYXQgd29ya3MsIHdlIHNpbXBseSBm
YWlsIGFuZCBzZXQgbV9jb250ZXh0T2JqIHRvIDAuCisgICAgCisgICAgc2V0UGl4ZWxGb3JtYXQo
YXR0cmlicywgMzIsIDMyLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisgICAgQ0dMQ2hvb3NlUGl4ZWxG
b3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7
CiAgICAgaWYgKG51bVBpeGVsRm9ybWF0cyA9PSAwKSB7Ci0gICAgICAgIGF0dHJpYnNbc3VwZXJT
YW1wbGVJbmRleF0gPSBzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCk7Ci0g
ICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1hdE9iaiwgJm51
bVBpeGVsRm9ybWF0cyk7CisgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMyLCAzMiwg
dHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmli
cy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CiAgICAgICAgIAog
ICAgICAgICBpZiAobnVtUGl4ZWxGb3JtYXRzID09IDApIHsKLSAgICAgICAgICAgIGF0dHJpYnNb
ZGVwdGhTaXplSW5kZXhdID0gc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDE2
KTsKLSAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1h
dE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisgICAgICAgICAgICBzZXRQaXhlbEZvcm1hdChhdHRy
aWJzLCAzMiwgMTYsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBDR0xDaG9vc2VQ
aXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3Jt
YXRzKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobnVtUGl4ZWxGb3JtYXRzID09IDApIHsK
LSAgICAgICAgICAgICAgICBhdHRyaWJzW2FjY2VsZXJhdGVkSW5kZXhdID0gc3RhdGljX2Nhc3Q8
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApOwotICAgICAgICAgICAgICAgIENHTENob29zZVBp
eGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Cisg
ICAgICAgICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDE2LCBmYWxzZSwgZmFs
c2UsIHRydWUpOworICAgICAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMu
ZGF0YSgpLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMpOwogICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAobnVtUGl4ZWxGb3JtYXRzID09IDApIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gQ291bGQgbm90IGZpbmQgYW4gYWNjZXB0YWJsZSByZW5kZXJlciAtIGZhaWwKLSAg
ICAgICAgICAgICAgICAgICAgbV9jb250ZXh0T2JqID0gMDsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE0MywxMiArMTY1
LDE0IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCgpCiAKIEdyYXBoaWNz
Q29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIENHTFNldEN1cnJlbnRDb250
ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJiBt
X2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0g
ICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KDApOwotICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
aWYgKG1fY29udGV4dE9iaikgeworICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRl
eHRPYmopOworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmIG1fZGVwdGhC
dWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAg
ICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyAgICAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQoMCk7CisgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0Vycm9yKCkgY29u
c3QKQEAgLTE3Niw3ICsyMDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgp
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJy
ZW50SGVpZ2h0KQorICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0g
bV9jdXJyZW50SGVpZ2h0IHx8ICFtX2NvbnRleHRPYmopCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwpAQCAtMjA4LDYgKzIzMiw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKIAogc3RhdGljIGlubGluZSB2b2lkIGVu
c3VyZUNvbnRleHQoQ0dMQ29udGV4dE9iaiBjb250ZXh0KQogeworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBDR0xDb250ZXh0T2JqIGN1cnJlbnRDb250
ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQoKTsKICAgICBpZiAoY3VycmVudENvbnRleHQgIT0g
Y29udGV4dCkKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY29udGV4dCk7Cg==
</data>
<flag name="review"
          id="23461"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41983</attachid>
            <date>2009-10-27 14:06:24 -0700</date>
            <delta_ts>2009-10-27 14:27:24 -0700</delta_ts>
            <desc>replacement patch</desc>
            <filename>30349.patch</filename>
            <type>text/plain</type>
            <size>70915</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDE2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMTAtMjcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgTWFrZSBXZWJHTCBjb250ZXh0IGZhaWx1cmUgbW9yZSByb2J1c3QgYW5kIG1ha2UgaXQg
c3VjY2VlZCBpbiBtb3JlIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMDM0OQorCisgICAgICAgIEJ1YmJsZSBhIGZhaWx1cmUgdG8gZ2V0IGEg
Q0dMQ29udGV4dCB1cCB0byBIVE1MQ29udGV4dEVsZW1lbnQgc28gaXQgY2FuCisgICAgICAgIHJl
dHVybiBudWxsIGZyb20gZ2V0Q29udGV4dC4gQWxzbyBhZGRlZCBhIG1vcmUgcm9idXN0IHBpeGVs
IGZvcm1hdCBjaG9vc2luZyAKKyAgICAgICAgbWVjaGFuaXNtIGFuZCBjYW4gcmVuZGVyIGNvcnJl
Y3RseSB3aGVuIGEgU1cgcmVuZGVyZXIgaXMgY2hvc2VuLgorCisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW06
CisgICAgICAgICgtW0NhbnZhczNETGF5ZXIgY29weUNHTFBpeGVsRm9ybWF0Rm9yRGlzcGxheU1h
c2s6XSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsRm9ybWF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQ29u
dGV4dCk6CisKIDIwMDktMTAtMjcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxMCArMTcyLDExIEBAIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgIGlmIChtX2Nv
bnRleHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKHRoaXMpOwotCi0gICAgICAgICAgICAgICAg
Ly8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIg
Z2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMKLSAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSBz
dXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0
aGUgQ2FudmFzCisgICAgICAgICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhl
dGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9u
IDUwMTE1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMTAgKzE2NSwxMCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpKSB7CisgICAgaWYgKGNhbnZhcygp
LT5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0g
c3R5bGUtPmNhbnZhc1BhdHRlcm4oKSkgewogICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5vcmln
aW5DbGVhbigpKQotICAgICAgICAgICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7
CisgICAgICAgICAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTg5LDEwICsxODksMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZpbGxTdAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybjsKICAKLSAg
ICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpIHsKKyAgICBpZiAoY2FudmFzKCktPm9yaWdp
bkNsZWFuKCkpIHsKICAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHlsZS0+
Y2FudmFzUGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNsZWFu
KCkpCi0gICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKKyAgICAg
ICAgICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dFRyYW5zZgogICAgIGlmICghY3RtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgYy0+Y29uY2F0Q1RNKGMtPmdldENUTSgpLmludmVyc2UoKSk7Ci0gICAgYy0+Y29uY2F0Q1RN
KG1fY2FudmFzLT5iYXNlVHJhbnNmb3JtKCkpOworICAgIGMtPmNvbmNhdENUTShjYW52YXMoKS0+
YmFzZVRyYW5zZm9ybSgpKTsKICAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLm11bHRpcGx5KGN0bS5p
bnZlcnNlKCkpOwogICAgIG1fcGF0aC50cmFuc2Zvcm0oY3RtKTsKIApAQCAtNjMwLDcgKzYzMCw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZWN0KGZsb2EKICNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJQ
YXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpCiB7Ci0gICAgaWYgKFNl
dHRpbmdzKiBzZXR0aW5ncyA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQorICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KSkKICAgICAgICAgaWYgKHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSgpKQogICAgICAgICAgICAgbV9wYXRoLmNsZWFyKCk7CiB9CkBAIC05MzUsOCArOTM1
LDggQEAgc3RhdGljIGlubGluZSBGbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChjbwogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2hlY2tPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIGlmIChtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dGFpbnRzQ2Fu
dmFzKHVybCkpCi0gICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7CisgICAgaWYg
KGNhbnZhcygpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50YWludHNDYW52YXModXJs
KSkKKyAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNoZWNrT3JpZ2luKGNvbnN0IFN0cmluZyYgdXJsKQpAQCAt
OTg2LDExICs5ODYsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZQogICAgIGlmICghY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2Nh
bnZhcy0+b3JpZ2luQ2xlYW4oKSkKKyAgICBpZiAoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpCiAg
ICAgICAgIGNoZWNrT3JpZ2luKGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLnVybCgpKTsKIAotICAg
IGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSAmJiAhY2FjaGVkSW1hZ2UtPmltYWdlKCktPmhh
c1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCi0gICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWlu
dGVkKCk7CisgICAgaWYgKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpICYmICFjYWNoZWRJbWFnZS0+
aW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKKyAgICAgICAgY2FudmFzKCktPnNl
dE9yaWdpblRhaW50ZWQoKTsKIAogICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0ID0gYy0+cm91bmRU
b0RldmljZVBpeGVscyhzcmNSZWN0KTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjLT5yb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGRzdFJlY3QpOwpAQCAtMTAxMiwxNCArMTAxMiwxNCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgZHJhd0ltYWdlKGNhbnZhcywg
RmxvYXRSZWN0KDAsIDAsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSksIEZsb2F0
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UoSFRNTENhbnZhc0VsZW1lbnQqIHNvdXJjZUNhbnZhcywgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LAogICAgIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgQVNTRVJUKGNhbnZhcyk7CisgICAgQVNTRVJUKHNvdXJjZUNhbnZhcyk7CiAKICAgICBl
YyA9IDA7CiAKLSAgICBGbG9hdFJlY3Qgc3JjQ2FudmFzUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGNhbnZhcy0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3Qgc3JjQ2FudmFzUmVjdCA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIHNvdXJjZUNhbnZhcy0+c2l6ZSgpKTsKICAgICBpZiAoIXNy
Y0NhbnZhc1JlY3QuY29udGFpbnMobm9ybWFsaXplUmVjdChzcmNSZWN0KSkgfHwgc3JjUmVjdC53
aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKSB7CiAgICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTEwMzgsMTIgKzEwMzgsMTIgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoZHN0UmVjdCk7CiAgICAgICAgIAogICAgIC8v
IEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250
ZXh0IEFQSS4KLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gc291cmNlQ2FudmFzLT5idWZmZXIoKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjYW52YXMtPm9yaWdpbkNsZWFu
KCkpCi0gICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7CisgICAgaWYgKCFjYW52
YXMoKS0+b3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQo
KTsKIAogICAgIGMtPmRyYXdJbWFnZShidWZmZXItPmltYWdlKCksIGRlc3RSZWN0LCBzb3VyY2VS
ZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7
IC8vIFRoaXMgY2FsbCBjb21lcyBhZnRlciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2Ug
ZHJhdyBpbnRvIG1heSBiZSBvdXIgb3duLCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMg
ZGlydHkuCkBAIC0xMDg4LDExICsxMDg4LDExIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpkcmF3SW1hZ2UKICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpCisgICAgaWYgKGNh
bnZhcygpLT5vcmlnaW5DbGVhbigpKQogICAgICAgICBjaGVja09yaWdpbih2aWRlby0+Y3VycmVu
dFNyYygpKTsKIAotICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSAmJiAhdmlkZW8tPmhh
c1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCi0gICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWlu
dGVkKCk7CisgICAgaWYgKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpICYmICF2aWRlby0+aGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4oKSkKKyAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQo
KTsKIAogICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhz
cmNSZWN0KTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KGRzdFJlY3QpOwpAQCAtMTEyMSwxMSArMTEyMSwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYgKCFjYWNoZWRJbWFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpKQorICAgIGlmIChjYW52YXMoKS0+
b3JpZ2luQ2xlYW4oKSkKICAgICAgICAgY2hlY2tPcmlnaW4oY2FjaGVkSW1hZ2UtPnJlc3BvbnNl
KCkudXJsKCkpOwogCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpICYmICFjYWNoZWRJ
bWFnZS0+aW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKLSAgICAgICAgbV9jYW52
YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKKyAgICBpZiAoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkg
JiYgIWNhY2hlZEltYWdlLT5pbWFnZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQorICAg
ICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCkBAIC0xMTU1LDcgKzExNTUsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Q29tcG9zCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cHJlcGFyZUdyYWRpZW50Rm9yRGFzaGJvYXJkKENhbnZhc0dyYWRp
ZW50KiBncmFkaWVudCkgY29uc3QKIHsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0g
ICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zZXR0aW5n
cygpKQorICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS0+
c2V0dGluZ3MoKSkKICAgICAgICAgaWYgKHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRD
b21wYXRpYmlsaXR5TW9kZSgpKQogICAgICAgICAgICAgZ3JhZGllbnQtPnNldERhc2hib2FyZENv
bXBhdGliaWxpdHlNb2RlKCk7CiAjZWxzZQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAgUGFzc1JlZlB0
cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbgogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwg
IWltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpKQogICAgICAgICByZXR1cm4gQ2FudmFzUGF0
dGVybjo6Y3JlYXRlKEltYWdlOjpudWxsSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgdHJ1ZSk7
CiAKLSAgICBib29sIG9yaWdpbkNsZWFuID0gIW1fY2FudmFzLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT50YWludHNDYW52YXMoS1VSTChLVVJMKCksIGNhY2hlZEltYWdlLT51cmwoKSkp
OworICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSAhY2FudmFzKCktPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCktPnRhaW50c0NhbnZhcyhLVVJMKEtVUkwoKSwgY2FjaGVkSW1hZ2UtPnVybCgpKSk7
CiAgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwg
cmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pOwogfQogCkBAIC0xMjUzLDEyICsxMjUzLDEy
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdygKICAgICAgICAgLy8g
d2UnZCBoYXZlIHRvIGtlZXAgdGhlIGNsaXAgcGF0aCBhcm91bmQuCiAgICAgfQogICAgIAotICAg
IG1fY2FudmFzLT53aWxsRHJhdyhkaXJ0eVJlY3QpOworICAgIGNhbnZhcygpLT53aWxsRHJhdyhk
aXJ0eVJlY3QpOwogfQogCiBHcmFwaGljc0NvbnRleHQqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd2luZ0NvbnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NhbnZhcy0+ZHJhd2lu
Z0NvbnRleHQoKTsKKyAgICByZXR1cm4gY2FudmFzKCktPmRyYXdpbmdDb250ZXh0KCk7CiB9CiAK
IHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1wdHlJbWFnZURhdGEoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKQEAgLTEyNzYsNyArMTI3Niw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBDYW52YXNSZW5kZXJpbmdDb24KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEZsb2F0
U2l6ZSB1bnNjYWxlZFNpemUoc3csIHNoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBtX2Nh
bnZhcy0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNpemUpOworICAgIEludFNpemUg
c2NhbGVkU2l6ZSA9IGNhbnZhcygpLT5jb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6
ZSk7CiAgICAgaWYgKHNjYWxlZFNpemUud2lkdGgoKSA8IDEpCiAgICAgICAgIHNjYWxlZFNpemUu
c2V0V2lkdGgoMSk7CiAgICAgaWYgKHNjYWxlZFNpemUuaGVpZ2h0KCkgPCAxKQpAQCAtMTI4Nywx
OCArMTI4NywxOCBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29uCiAK
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdl
RGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgeworICAg
IGlmICghY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKICAgICBGbG9hdFJlY3QgdW5zY2Fs
ZWRSZWN0KHN4LCBzeSwgc3csIHNoKTsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSBtX2NhbnZh
cy0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFJlY3QpOworICAgIEludFJlY3Qgc2Nh
bGVkUmVjdCA9IGNhbnZhcygpLT5jb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkUmVjdCk7
CiAgICAgaWYgKHNjYWxlZFJlY3Qud2lkdGgoKSA8IDEpCiAgICAgICAgIHNjYWxlZFJlY3Quc2V0
V2lkdGgoMSk7CiAgICAgaWYgKHNjYWxlZFJlY3QuaGVpZ2h0KCkgPCAxKQogICAgICAgICBzY2Fs
ZWRSZWN0LnNldEhlaWdodCgxKTsKLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gbV9jYW52YXMg
PyBtX2NhbnZhcy0+YnVmZmVyKCkgOiAwOworICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXMoKSA/IGNhbnZhcygpLT5idWZmZXIoKSA6IDA7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShzY2FsZWRSZWN0LnNpemUoKSk7CiAgICAgcmV0
dXJuIGJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNjYWxlZFJlY3QpOwpAQCAtMTMy
Niw3ICsxMzI2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IG1fY2Fu
dmFzLT5idWZmZXIoKTsKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzKCktPmJ1ZmZl
cigpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNjMsNyArMTM2
Myw3IEBAIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQoKSAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKIHsK
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHRlbXBEZWNsID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwotICAgIENTU1BhcnNlciBwYXJzZXIoIW1f
Y2FudmFzLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7IC8vIFVzZSB0aGUgcGFyc2UgbW9k
ZSBvZiB0aGUgY2FudmFzJyBkb2N1bWVudCB3aGVuIHBhcnNpbmcgQ1NTLgorICAgIENTU1BhcnNl
ciBwYXJzZXIoIWNhbnZhcygpLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7IC8vIFVzZSB0
aGUgcGFyc2UgbW9kZSBvZiB0aGUgY2FudmFzJyBkb2N1bWVudCB3aGVuIHBhcnNpbmcgQ1NTLgog
ICAgICAgICAKICAgICBTdHJpbmcgZGVjbGFyYXRpb25UZXh0KCJmb250OiAiKTsKICAgICBkZWNs
YXJhdGlvblRleHQgKz0gbmV3Rm9udDsKQEAgLTEzNzcsMTEgKzEzNzcsMTEgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgIC8vIE1hcCB0aGUgPGNhbnZhcz4g
Zm9udCBpbnRvIHRoZSB0ZXh0IHN0eWxlLiBJZiB0aGUgZm9udCB1c2VzIGtleXdvcmRzIGxpa2Ug
bGFyZ2VyL3NtYWxsZXIsIHRoZXNlIHdpbGwgd29yawogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBj
YW52YXMuCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKLSAgICBpZiAobV9jYW52YXMtPmNvbXB1dGVkU3R5bGUoKSkKLSAgICAgICAgbmV3
U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihtX2NhbnZhcy0+Y29tcHV0ZWRTdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKSk7CisgICAgaWYgKGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCkpCisgICAg
ICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oY2FudmFzKCktPmNvbXB1dGVkU3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0
eSBpbnRvIHRoZSBzdHlsZS4KLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0g
bV9jYW52YXMtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBDU1NTdHlsZVNlbGVj
dG9yKiBzdHlsZVNlbGVjdG9yID0gY2FudmFzKCktPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KTsKICAgICBzdHlsZVNlbGVjdG9yLT5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUZv
bnQsIHRlbXBEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udCkuZ2V0KCks
IG5ld1N0eWxlLmdldCgpKTsKICAgICAKICAgICBzdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5m
b250KCk7CkBAIC0xNDU1LDggKzE0NTUsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd1RleHRJCiAgICAgLy8gRklYTUU6IEhhbmRsZSBtYXhXaWR0aC4KICAgICAvLyBGSVhN
RTogTmVlZCB0byB0dXJuIG9mZiBmb250IHNtb290aGluZy4KIAotICAgIGJvb2wgcnRsID0gbV9j
YW52YXMtPmNvbXB1dGVkU3R5bGUoKSA/IG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCktPmRpcmVj
dGlvbigpID09IFJUTCA6IGZhbHNlOwotICAgIGJvb2wgb3ZlcnJpZGUgPSBtX2NhbnZhcy0+Y29t
cHV0ZWRTdHlsZSgpID8gbV9jYW52YXMtPmNvbXB1dGVkU3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9
PSBPdmVycmlkZSA6IGZhbHNlOworICAgIGJvb2wgcnRsID0gY2FudmFzKCktPmNvbXB1dGVkU3R5
bGUoKSA/IGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA6IGZh
bHNlOworICAgIGJvb2wgb3ZlcnJpZGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpID8gY2Fu
dmFzKCktPmNvbXB1dGVkU3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSA6IGZhbHNl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKICAgICBjb25zdCBVQ2hh
ciogc3RyaW5nID0gdGV4dC5jaGFyYWN0ZXJzKCk7CkBAIC0xNTA4LDExICsxNTA4LDExIEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAgICAgICAgdGV4dFJlY3Qu
aW5mbGF0ZShjLT5zdHJva2VUaGlja25lc3MoKSAvIDIpOwogCiAgICAgaWYgKGZpbGwpCi0gICAg
ICAgIG1fY2FudmFzLT53aWxsRHJhdyh0ZXh0UmVjdCk7CisgICAgICAgIGNhbnZhcygpLT53aWxs
RHJhdyh0ZXh0UmVjdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdoZW4gc3Ryb2tpbmcgdGV4
dCwgcG9pbnR5IG1pdGVycyBjYW4gZXh0ZW5kIG91dHNpZGUgb2YgdGV4dFJlY3QsIHNvIHdlCiAg
ICAgICAgIC8vIHB1bnQgYW5kIGRpcnR5IHRoZSB3aG9sZSBjYW52YXMuCi0gICAgICAgIG1fY2Fu
dmFzLT53aWxsRHJhdyhGbG9hdFJlY3QoMCwgMCwgbV9jYW52YXMtPndpZHRoKCksIG1fY2FudmFz
LT5oZWlnaHQoKSkpOworICAgICAgICBjYW52YXMoKS0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAs
IGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAgICB9CiAgICAgCiAj
aWYgUExBVEZPUk0oQ0cpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTIgKzQyLDIzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQorUGFzc093blB0cjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlKEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMpCit7CisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRChjYW52YXMsIGNvbnRleHQpOworfQorCitDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCog
cGFzc2VkQ2FudmFzLCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorICAg
IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKICAgICAsIG1fbmVlZHNVcGRhdGUodHJ1ZSkKICAgICAsIG1fbWFya2VkQ2FudmFz
RGlydHkoZmFsc2UpCiB7Ci0gICAgbV9jb250ZXh0LnJlc2hhcGUobV9jYW52YXMtPndpZHRoKCks
IG1fY2FudmFzLT5oZWlnaHQoKSk7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250
ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogfQog
CiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoKQpA
QCAtNTgsMTQgKzY5LDE0IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6fkNhbnZhc1JlbmRl
cmkKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQog
ewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9jYW52YXMtPnJl
bmRlckJveCgpICYmIG1fY2FudmFzLT5yZW5kZXJCb3goKS0+aGFzTGF5ZXIoKSkgewotICAgICAg
ICBtX2NhbnZhcy0+cmVuZGVyQm94KCktPmxheWVyKCktPnJlbmRlcmVyQ29udGVudENoYW5nZWQo
KTsKKyAgICBpZiAoY2FudmFzKCktPnJlbmRlckJveCgpICYmIGNhbnZhcygpLT5yZW5kZXJCb3go
KS0+aGFzTGF5ZXIoKSkgeworICAgICAgICBjYW52YXMoKS0+cmVuZGVyQm94KCktPmxheWVyKCkt
PnJlbmRlcmVyQ29udGVudENoYW5nZWQoKTsKICAgICB9IGVsc2UgewogI2VuZGlmCiAgICAgICAg
IGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkgewogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMgYWxsb2NhdGVkLgotICAgICAgICAgICAgbV9jYW52
YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgbV9jYW52YXMtPndpbGxEcmF3KEZsb2F0UmVjdCgw
LCAwLCBtX2NhbnZhcy0+d2lkdGgoKSwgbV9jYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAg
ICBjYW52YXMoKS0+YnVmZmVyKCk7CisgICAgICAgICAgICBjYW52YXMoKS0+d2lsbERyYXcoRmxv
YXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAg
ICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwogICAgICAgICB9CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNzYsNyArODcsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6bWFya0NvbnRlCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6YmVnaW5QYWludCgpCiB7CiAgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAg
ICAgbV9jb250ZXh0LmJlZ2luUGFpbnQodGhpcyk7CisgICAgICAgIG1fY29udGV4dC0+YmVnaW5Q
YWludCh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTg0LDcgKzk1LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmVuZFBhaW50KAogewogICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5
KSB7CiAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICAgICAgbV9jb250
ZXh0LmVuZFBhaW50KCk7CisgICAgICAgIG1fY29udGV4dC0+ZW5kUGFpbnQoKTsKICAgICB9CiB9
CiAKQEAgLTkyLDE4ICsxMDMsMTggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnJl
c2hhcGUoaQogewogICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgICAgICBpZiAobV9jYW52YXMtPnJlbmRlckJveCgpICYmIG1fY2Fu
dmFzLT5yZW5kZXJCb3goKS0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fY2FudmFzLT5yZW5k
ZXJCb3goKS0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOworICAgICAgICBpZiAo
Y2FudmFzKCktPnJlbmRlckJveCgpICYmIGNhbnZhcygpLT5yZW5kZXJCb3goKS0+aGFzTGF5ZXIo
KSkKKyAgICAgICAgICAgIGNhbnZhcygpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKS0+cmVuZGVyZXJD
b250ZW50Q2hhbmdlZCgpOwogI2VuZGlmCiAgICAgICAgIG1fbmVlZHNVcGRhdGUgPSBmYWxzZTsK
ICAgICB9CiAgICAgCi0gICAgbV9jb250ZXh0LnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisgICAg
bV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogfQogCiBpbnQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC5zaXplSW5CeXRlcyh0eXBlKTsKKyAgICBpbnQg
cmVzdWx0ID0gbV9jb250ZXh0LT5zaXplSW5CeXRlcyh0eXBlKTsKICAgICBpZiAocmVzdWx0IDw9
IDApIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIH0KQEAgLTExMiw3ICsxMjMsNyBA
QCBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaXplSW5CeXRlCiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkK
IHsKLSAgICBtX2NvbnRleHQuYWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIApAQCAtMTIwLDcgKzEzMSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjphdHRhY2hTaGEKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgIXNoYWRlcikKICAgICAgICAg
cmV0dXJuOwotICAgIG1fY29udGV4dC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKKyAg
ICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyOCw5NCArMTM5LDk0IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQXR0cmkKIHsKICAgICBpZiAoIXByb2dyYW0p
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIGluZGV4LCBuYW1lKTsKKyAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIENhbnZhc0J1ZmZlciogYnVmZmVyKQogewotICAgIG1fY29udGV4dC5iaW5k
QnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0
LCBidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgQ2FudmFzRnJhbWVidWZmZXIqIGJ1ZmZlcikKIHsKLSAgICBtX2NvbnRleHQu
YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVy
KQogewotICAgIG1fY29udGV4dC5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVy
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBD
YW52YXNUZXh0dXJlKiB0ZXh0dXJlKQogewotICAgIG1fY29udGV4dC5iaW5kVGV4dHVyZSh0YXJn
ZXQsIHRleHR1cmUpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJl
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4s
IGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCiB7Ci0gICAgbV9jb250ZXh0LmJsZW5kQ29sb3Io
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIG1fY29udGV4dC0+YmxlbmRDb2xvcihyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oIHVu
c2lnbmVkIGxvbmcgbW9kZSApCiB7Ci0gICAgbV9jb250ZXh0LmJsZW5kRXF1YXRpb24obW9kZSk7
CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpi
bGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25n
IG1vZGVBbHBoYSkKIHsKLSAgICBtX2NvbnRleHQuYmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVS
R0IsIG1vZGVBbHBoYSk7CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9k
ZVJHQiwgbW9kZUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpibGVuZEZ1bmModW5zaWduZWQg
bG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3IpCiB7Ci0gICAgbV9jb250ZXh0LmJs
ZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKKyAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFj
dG9yLCBkZmFjdG9yKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfSAg
ICAgICAKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRl
KHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9u
ZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKIHsKLSAgICBtX2NvbnRleHQuYmxl
bmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CisgICAg
bV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgaW50IHNpemUsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCiB7Ci0gICAgbV9jb250ZXh0LmJ1ZmZl
ckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRh
cmdldCwgc2l6ZSwgdXNhZ2UpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJheSogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsK
LSAgICBtX2NvbnRleHQuYnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEsIHVzYWdlKTsKKyAgICBtX2Nv
bnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLCB1c2FnZSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNB
cnJheSogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQuYnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNl
dCwgZGF0YSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBk
YXRhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB1bnNpZ25l
ZCBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1
bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXModGFyZ2V0KTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKHRhcmdldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcg
bWFzaykKIHsKLSAgICBtX2NvbnRleHQuY2xlYXIobWFzayk7CisgICAgbV9jb250ZXh0LT5jbGVh
cihtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTIy
OSw0MyArMjQwLDQzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhckNvbG8K
ICAgICAgICAgYiA9IDA7CiAgICAgaWYgKGlzbmFuKGEpKQogICAgICAgICBhID0gMTsKLSAgICBt
X2NvbnRleHQuY2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29s
b3IociwgZywgYiwgYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRo
KQogewotICAgIG1fY29udGV4dC5jbGVhckRlcHRoKGRlcHRoKTsKKyAgICBtX2NvbnRleHQtPmNs
ZWFyRGVwdGgoZGVwdGgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwobG9uZyBzKQog
ewotICAgIG1fY29udGV4dC5jbGVhclN0ZW5jaWwocyk7CisgICAgbV9jb250ZXh0LT5jbGVhclN0
ZW5jaWwocyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVl
biwgYm9vbCBibHVlLCBib29sIGFscGhhKQogewotICAgIG1fY29udGV4dC5jb2xvck1hc2socmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihDYW52YXNT
aGFkZXIqIHNoYWRlcikKIHsKLSAgICBtX2NvbnRleHQuY29tcGlsZVNoYWRlcihzaGFkZXIpOwor
ICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihzaGFkZXIpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpj
b3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQg
bG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKIHsKLSAgICBtX2NvbnRleHQuY29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7CisgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
bGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9jb250ZXh0LmNv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMzE5LDcgKzMzMCw3IEBAIFBhc3NS
ZWZQdHI8Q2FudmFzU2hhZGVyPiBDYW52YXNSZW5kZXJpbmcKIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKLSAgICBtX2NvbnRl
eHQuY3VsbEZhY2UobW9kZSk7CisgICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zNzMsMTkgKzM4NCwxOSBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlVGV4CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQogewotICAg
IG1fY29udGV4dC5kZXB0aEZ1bmMoZnVuYyk7CisgICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVu
Yyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlcHRoTWFzayhib29sIGZsYWcpCiB7Ci0gICAgbV9jb250
ZXh0LmRlcHRoTWFzayhmbGFnKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFnKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6ZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQogewot
ICAgIG1fY29udGV4dC5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyAgICBtX2NvbnRleHQtPmRl
cHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKQEAgLTM5NCw1OCArNDA1LDU4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpkZXRhY2hTaGEKICAgICBpZiAoIXByb2dyYW0gfHwgIXNoYWRlcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9jb250ZXh0LmRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAg
IG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKIHsKLSAgICBtX2NvbnRleHQuZGlzYWJs
ZShjYXApOworICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpk
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLSAgICBtX2Nv
bnRleHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyAgICBtX2NvbnRleHQtPmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZHJhd0Fy
cmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCiB7Ci0gICAg
bV9jb250ZXh0LmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwodHJ1ZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkcmF3RWxl
bWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBs
b25nIHR5cGUsIGxvbmcgb2Zmc2V0KQogewotICAgIG1fY29udGV4dC5kcmF3RWxlbWVudHMobW9k
ZSwgY291bnQsIHR5cGUsIG9mZnNldCk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9k
ZSwgY291bnQsIHR5cGUsIG9mZnNldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRy
dWUpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZW5hYmxlKHVuc2lnbmVk
IGxvbmcgY2FwKQogewotICAgIG1fY29udGV4dC5lbmFibGUoY2FwKTsKKyAgICBtX2NvbnRleHQt
PmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1
bnNpZ25lZCBsb25nIGluZGV4KQogewotICAgIG1fY29udGV4dC5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRl
eCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZpbmlzaCgpCiB7Ci0gICAgbV9jb250ZXh0LmZpbmlzaCgp
OworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KHRydWUpOwogfQogCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmbHVzaCgpCiB7
Ci0gICAgbV9jb250ZXh0LmZsdXNoKCk7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtNDU0LDcgKzQ2NSw3IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmcmFtZWJ1ZmYKICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQuZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7
CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCkBAIC00NjMsMjYgKzQ3NCwyNiBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6ZnJhbWVidWZmCiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgIG1fY29udGV4dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQs
IGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworICAgIG1fY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1
cmUsIGxldmVsKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9k
ZSkKIHsKLSAgICBtX2NvbnRleHQuZnJvbnRGYWNlKG1vZGUpOworICAgIG1fY29udGV4dC0+ZnJv
bnRGYWNlKG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBs
b25nIHRhcmdldCkKIHsKLSAgICBtX2NvbnRleHQuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyAg
ICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNBY3RpdmVJbmZvPiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihDYW52YXNQcm9ncmFtKiBwcm9n
cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBY3Rp
dmVJbmZvIGluZm87Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0
aGlzIHx8ICFtX2NvbnRleHQuZ2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKSkg
eworICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcyB8fCAhbV9j
b250ZXh0LT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIGluZm8pKSB7CiAgICAgICAg
IGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQ5Miw3
ICs1MDMsNyBAQCBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlCiBQYXNz
UmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFwcm9n
cmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFtX2NvbnRleHQuZ2V0QWN0aXZl
VW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbykpIHsKKyAgICBpZiAoIXByb2dyYW0gfHwgcHJv
Z3JhbS0+Y29udGV4dCgpICE9IHRoaXMgfHwgIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShw
cm9ncmFtLCBpbmRleCwgaW5mbykpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNTAxLDI1MSArNTEyLDI1MSBAQCBQYXNzUmVmUHRy
PENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlCiAKIGludCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIG5hbWUpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIG5hbWUpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9v
bGVhbih1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGJvb2wgcmVzdWx0ID0gbV9jb250ZXh0
LmdldEJvb2xlYW4ocG5hbWUpOworICAgIGJvb2wgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRCb29s
ZWFuKHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSkK
IHsKLSAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0
LmdldEJvb2xlYW52KHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+
IGFycmF5ID0gbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC5n
ZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOworICAgIGludCByZXN1bHQgPSBtX2Nv
bnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVm
UHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBh
cmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewot
ICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0QnVmZmVyUGFy
YW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJh
eSA9IG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAK
IHVuc2lnbmVkIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRFcnJvcigpCiB7Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC5nZXRFcnJvcigpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdl
dEVycm9yKCk7CiB9CiAKIGZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RmxvYXQo
dW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0
RmxvYXQocG5hbWUpOworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0RmxvYXQocG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRGbG9hdHYocG5hbWUpOworICAg
IFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0RmxvYXR2KHBu
YW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBh
cnJheTsKIH0KIAogaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGludCByZXN1bHQgPSBtX2Nv
bnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1l
bnQsIHBuYW1lKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFz
c1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxD
YW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZh
c0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldEludGVnZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBm
bG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0SW50ZWdlcihwbmFtZSk7CisgICAgZmxvYXQgcmVz
dWx0ID0gbV9jb250ZXh0LT5nZXRJbnRlZ2VyKHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWdu
ZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9j
b250ZXh0LmdldEludGVnZXJ2KHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFy
cmF5ID0gbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKIGludCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFByb2dyYW1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC5nZXRQcm9ncmFt
aShwcm9ncmFtLCBwbmFtZSk7CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0UHJvZ3Jh
bWkocHJvZ3JhbSwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3Jh
bSwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFy
cmF5ID0gbV9jb250ZXh0LmdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSk7CisgICAgUmVmUHRy
PENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0s
IHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVy
biBhcnJheTsKIH0KIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UHJvZ3Jh
bUluZm9Mb2coQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBTdHJpbmcgcyA9IG1fY29u
dGV4dC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKKyAgICBTdHJpbmcgcyA9IG1fY29udGV4
dC0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKICAgICByZXR1cm4gczsKIH0KIAogaW50IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CisgICAgaW50IHJlc3VsdCA9IG1fY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBh
c3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5n
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dih0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
ICAgIHJldHVybiBhcnJheTsKIH0KIAogaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
U2hhZGVyaShDYW52YXNTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAg
ICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFNoYWRlcmkoc2hhZGVyLCBwbmFtZSk7CisgICAg
aW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0U2hhZGVyaShzaGFkZXIsIHBuYW1lKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0g
ICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRTaGFkZXJpdihz
aGFkZXIsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250
ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhDYW52YXNTaGFkZXIqIHNoYWRlcikKIHsK
LSAgICBTdHJpbmcgcyA9IG1fY29udGV4dC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7CisgICAg
U3RyaW5nIHMgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBzOwogfQogCiBTdHJpbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBz
aGFkZXIpCiB7Ci0gICAgU3RyaW5nIHMgPSBtX2NvbnRleHQuZ2V0U2hhZGVyU291cmNlKHNoYWRl
cik7CisgICAgU3RyaW5nIHMgPSBtX2NvbnRleHQtPmdldFNoYWRlclNvdXJjZShzaGFkZXIpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHM7CiB9CiAK
IFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25n
IG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXRTdHJpbmcobmFtZSk7CisgICAgcmV0
dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKG5hbWUpOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFRleFBh
cmFtZXRlcmYodGFyZ2V0LCBwbmFtZSk7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5n
ZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNG
bG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRUZXhQYXJhbWV0ZXJmdih0YXJn
ZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiBpbnQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VGV4
UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5n
ZXRUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJ
bnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUpOworICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdl
dFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFVuaWZvcm1mKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24pCiB7Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LmdldFVuaWZvcm1mKHByb2dy
YW0sIGxvY2F0aW9uKTsKKyAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1m
KHByb2dyYW0sIGxvY2F0aW9uKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoQ2FudmFzUHJvZ3JhbSogcHJv
Z3JhbSwgbG9uZyBsb2NhdGlvbikKIHsKLSAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQuZ2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBSZWZQ
dHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihwcm9n
cmFtLCBsb2NhdGlvbik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRV
bmlmb3JtaShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQogewotICAgIGxv
bmcgcmVzdWx0ID0gbV9jb250ZXh0LmdldFVuaWZvcm1pKHByb2dyYW0sIGxvY2F0aW9uKTsKKyAg
ICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWkocHJvZ3JhbSwgbG9jYXRpb24p
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRVbmlmb3JtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikK
IHsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFVuaWZv
cm1pdihwcm9ncmFtLCBsb2NhdGlvbik7CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJh
eSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAogbG9u
ZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihDYW52YXNQcm9n
cmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4
dC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7CisgICAgcmV0dXJuIG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwogfQogCiBmbG9hdCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQuZ2V0
VmVydGV4QXR0cmliZihpbmRleCwgcG5hbWUpOworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4
dC0+Z2V0VmVydGV4QXR0cmliZihpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52
YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRy
PENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFZlcnRleEF0dHJpYmZ2KGlu
ZGV4LCBwbmFtZSk7CisgICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250
ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiBsb25nIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LCB1
bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIGxvbmcgcmVzdWx0ID0gbV9jb250ZXh0LmdldFZl
cnRleEF0dHJpYmkoaW5kZXgsIHBuYW1lKTsKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+
Z2V0VmVydGV4QXR0cmliaShpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNJ
bnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52
YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBu
YW1lKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiBsb25nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQuZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CisgICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQt
PmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgbW9kZSkKIHsKLSAgICBtX2NvbnRleHQuaGludCh0YXJnZXQsIG1vZGUpOworICAgIG1fY29u
dGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKQEAgLTc1NCw0MiArNzY1LDQyIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjppc0J1ZmZlcigKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICByZXR1cm4gbV9jb250ZXh0LmlzQnVmZmVyKGJ1ZmZlcik7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVyKTsKIH0KIAogYm9vbCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKIHsKLSAgICByZXR1
cm4gbV9jb250ZXh0LmlzRW5hYmxlZChjYXApOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5h
YmxlZChjYXApOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNGcmFtZWJ1
ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiB7Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5p
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmlzUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIHJldHVybiBt
X2NvbnRleHQuaXNQcm9ncmFtKHByb2dyYW0pOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzUmVu
ZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIHJldHVy
biBtX2NvbnRleHQuaXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwogfQogCiBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6aXNTaGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCiB7Ci0gICAg
cmV0dXJuIG1fY29udGV4dC5pc1NoYWRlcihzaGFkZXIpOworICAgIHJldHVybiBtX2NvbnRleHQt
PmlzU2hhZGVyKHNoYWRlcik7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpp
c1RleHR1cmUoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0
LmlzVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4
dHVyZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpsaW5lV2lkdGgoZG91
YmxlIHdpZHRoKQogewotICAgIG1fY29udGV4dC5saW5lV2lkdGgoKGZsb2F0KSB3aWR0aCk7Cisg
ICAgbV9jb250ZXh0LT5saW5lV2lkdGgoKGZsb2F0KSB3aWR0aCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtNzk4LDkyICs4MDksOTIgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmxpbmtQcm9ncgogICAgIGlmICghcHJvZ3JhbSkKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQubGlua1Byb2dyYW0ocHJvZ3JhbSk7
CisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKIHsKLSAgICBtX2Nv
bnRleHQucGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKHBuYW1lLCBwYXJhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoZG91Ymxl
IGZhY3RvciwgZG91YmxlIHVuaXRzKQogewotICAgIG1fY29udGV4dC5wb2x5Z29uT2Zmc2V0KChm
bG9hdCkgZmFjdG9yLCAoZmxvYXQpIHVuaXRzKTsKKyAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZz
ZXQoKGZsb2F0KSBmYWN0b3IsIChmbG9hdCkgdW5pdHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzQXJyYXk+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHR5cGUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0FycmF5PiBhcnJheSA9IG1fY29udGV4
dC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAgUmVm
UHRyPENhbnZhc0FycmF5PiBhcnJheSA9IG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIHsKLSAgICBtX2NvbnRleHQucmVsZWFzZVNo
YWRlckNvbXBpbGVyKCk7CisgICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9jb250ZXh0LnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
dGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250ZXh0LT5y
ZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52
ZXJ0KQogewotICAgIG1fY29udGV4dC5zYW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZl
cnQpOworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UoKGZsb2F0KSB2YWx1ZSwgaW52ZXJ0
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9jb250ZXh0LnNjaXNzb3Io
eCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBz
aGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIG1fY29udGV4dC5zaGFkZXJTb3Vy
Y2Uoc2hhZGVyLCBzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHNoYWRlciwg
c3RyaW5nKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5j
LCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQogewotICAgIG1fY29udGV4dC5zdGVuY2ls
RnVuYyhmdW5jLCByZWYsIG1hc2spOworICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywg
cmVmLCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25l
ZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcg
bWFzaykKIHsKLSAgICBtX2NvbnRleHQuc3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCBy
ZWYsIG1hc2spOworICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5j
LCByZWYsIG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25n
IG1hc2spCiB7Ci0gICAgbV9jb250ZXh0LnN0ZW5jaWxNYXNrKG1hc2spOworICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2sobWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0gICAgbV9jb250
ZXh0LnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CisgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3Ao
dW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpw
YXNzKQogewotICAgIG1fY29udGV4dC5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcg
ZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKIHsKLSAgICBt
X2NvbnRleHQuc3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtODkzLDcgKzkw
NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTIKIHsKICAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0g
MDsKLSAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KQEAgLTkwNCw3ICs5MTUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dGV4SW1hZ2UyCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3Jl
IGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC05MTQs
NyArOTI1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMgogewog
ICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAg
ZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlLCBm
bGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTIzLDcgKzkzNCw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTIKIHsKICAgICAvLyBGSVhNRTogRm9yIG5v
dyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRl
eHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjYW52YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFs
cGhhKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2FudmFzLCBm
bGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIApAQCAtOTMyLDE5ICs5NDMsMTkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnRleEltYWdlMgogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkg
ZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4dC50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHZpZGVvLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHZpZGVvLCBmbGlwWSwgcHJlbXVsdGlwbHlB
bHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pCiB7Ci0gICAgbV9jb250ZXh0LnRleFBhcmFtZXRl
cmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQogewotICAgIG1fY29udGV4
dC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKKyAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTk1NCw3ICs5NjUsNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdu
b3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LnRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
OTY0LDcgKzk3NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEK
IHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAog
ICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cisg
ICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC05NzQsNyArOTg1LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93
IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwotICAgIG1fY29udGV4
dC50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgbV9jb250ZXh0LT50
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGltYWdlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTg0LDcgKzk5NSw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBjYW52YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBtX2NvbnRleHQtPnRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Y2FudmFzLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTk0LDEzICsxMDA1LDEzIEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKIHsKICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQudGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCB2aWRlbywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOworICAgIG1fY29udGV4dC0+dGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB2
aWRlbywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
MWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCkKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTFmKGxv
Y2F0aW9uLCB4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTAxMCw3ICsxMDIxLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZgogICAgIGlmICghdikK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQudW5pZm9ybTFmdihsb2Nh
dGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2
KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDIwLDEzICsxMDMxLDEzIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWYKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHYsIHNpemUp
OworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgdiwgc2l6ZSk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBpbnQgeCkKIHsKLSAgICBtX2NvbnRl
eHQudW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2Nh
dGlvbiwgeCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
MTAzNiw3ICsxMDQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0x
aQogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRleHQu
dW5pZm9ybTFpdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CisgICAgbV9jb250
ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDQ2LDEzICsxMDU3LDEz
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWkKICAgICBpZiAoIXYp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9jb250ZXh0LnVuaWZvcm0xaXYobG9j
YXRpb24sIHYsIHNpemUpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgdiwg
c2l6ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4
LCBmbG9hdCB5KQogewotICAgIG1fY29udGV4dC51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDYzLDcgKzEwNzQsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJmCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAg
ICBtX2NvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAv
IDIpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5s
ZW5ndGgoKSAvIDIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
QEAgLTEwNzQsMTMgKzEwODUsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVu
aWZvcm0yZgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LnVuaWZvcm0yZnYobG9j
YXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24s
IHYsIHNpemUgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24s
IGludCB4LCBpbnQgeSkKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5
KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTA5MSw3ICsxMTAyLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yaQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
Ci0gICAgbV9jb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCkgLyAyKTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC0xMTAyLDEzICsxMTEzLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtMmkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4dC51bmlmb3JtMml2
KGxvY2F0aW9uLCB2LCBzaXplIC8gMik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0
aW9uLCB2LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zZihsb25nIGxvY2F0
aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQogewotICAgIG1fY29udGV4dC51bmlmb3Jt
M2YobG9jYXRpb24sIHgsIHksIHopOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9u
LCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBA
IC0xMTE5LDcgKzExMzAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTNmCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQudW5pZm9ybTNmdihsb2NhdGlv
biwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNm
dihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTExMzAsMTMgKzExNDEsMTMgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zZgogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0g
ICAgbV9jb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopCiB7Ci0gICAg
bV9jb250ZXh0LnVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7CisgICAgbV9jb250ZXh0LT51
bmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKQEAgLTExNDcsNyArMTE1OCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtM2kKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1fY29udGV4dC51
bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7CisgICAgbV9j
b250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTE1OCwxMyAr
MTE2OSwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDMKLSAgICBtX2NvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgdiwgc2l6
ZSAvIDMpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKIHsKLSAgICBtX2NvbnRleHQudW5pZm9ybTRmKGxvY2F0
aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbiwgeCwg
eSwgeiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAt
MTE3NSw3ICsxMTg2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00
ZgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbV9jb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24s
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYo
bG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMTg2LDEzICsxMTk3LDEzIEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGYKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAg
IG1fY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LCBzaXplIC8gNCk7CisgICAgbV9jb250
ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LCBzaXplIC8gNCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdykKIHsK
LSAgICBtX2NvbnRleHQudW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTIwMyw3ICsxMjE0LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAg
bV9jb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0
KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVu
Z3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBA
IC0xMjE0LDcgKzEyMjUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTRpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2NvbnRleHQudW5pZm9ybTRpdihsb2NhdGlv
biwgdiwgc2l6ZSAvIDQpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgdiwg
c2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAg
LTEyMjUsNyArMTIzNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
TWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2
LT5sZW5ndGgoKSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKQEAgLTEyMzYsNyArMTI0Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA0KTsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDQpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyNDcsNyArMTI1OCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgOQotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA5KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyNTgsNyArMTI2
OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgOQotICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFu
c3Bvc2UsIHYsIHNpemUgLyA5KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSAvIDkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyNjksNyArMTI4MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtTWEKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAgICBtX2NvbnRl
eHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpIC8gMTYpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEyODAsMzIgKzEyOTEsMzIgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgot
ICAgIG1fY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNp
emUgLyAxNik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFu
c3Bvc2UsIHYsIHNpemUgLyAxNik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVzZVByb2dyYW0oQ2FudmFz
UHJvZ3JhbSogcHJvZ3JhbSkKIHsKLSAgICBtX2NvbnRleHQudXNlUHJvZ3JhbShwcm9ncmFtKTsK
KyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZh
bGlkYXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIG1fY29udGV4dC52
YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0o
cHJvZ3JhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQgdjApCiB7Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYjFmKGluZHgsIHYw
KTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZHgsIHYwKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJh
eSogdikKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVu
b3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIx
ZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmR4
LCB2LT5kYXRhKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
QEAgLTEzMTQsMjAgKzEzMjUsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZl
cnRleEF0dAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5v
dWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogICAg
IAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdik7CisgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxKQogewotICAgIG1fY29u
dGV4dC52ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMmYoaW5keCwgdjAsIHYxKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhN
RTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJl
aW5nIHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdi0+ZGF0YSgpKTsK
KyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEzMzYsMjAgKzEzNDcsMjAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVp
bmcgc2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0
ZXhBdHRyaWIyZnYoaW5keCwgdik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5k
eCwgdik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKIHsKLSAgICBtX2NvbnRleHQudmVydGV4
QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2Mik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIz
ZihpbmR4LCB2MCwgdjEsIHYyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVu
c2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTog
TmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5n
IHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2LT5kYXRhKCkpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEzNTgsMjAgKzEzNjksMjAgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcg
c2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogICAgIAotICAgIG1fY29udGV4dC52ZXJ0ZXhB
dHRyaWIzZnYoaW5keCwgdik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwg
dik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCiB7Ci0gICAgbV9jb250ZXh0
LnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKIHsK
ICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3Ig
YXR0cmlidXRlIGJlaW5nIHNldAotICAgIG1fY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwg
di0+ZGF0YSgpKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmR4LCB2LT5kYXRh
KCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTEzODAs
MTMgKzEzOTEsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAog
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBh
dHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogICAgIAotICAgIG1f
Y29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWI0ZnYoaW5keCwgdik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBu
b3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7
Ci0gICAgbV9jb250ZXh0LnZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9y
bWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTQwMCw3ICsxNDExLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZpZXdwb3J0KAogICAgICAgICB3aWR0
aCA9IDEwMDsKICAgICBpZiAoaXNuYW4oaGVpZ2h0KSkKICAgICAgICAgaGVpZ2h0ID0gMTAwOwot
ICAgIG1fY29udGV4dC52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2NvbnRl
eHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuaAkocmV2aXNpb24gNTAxMTUpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4
ICs1MSw4IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKIAogICAgIGNsYXNzIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCop
OwotICAgICAgICB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKCk7CisgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4gY3JlYXRlKEhUTUxDYW52YXNFbGVt
ZW50Kik7CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCgpOwogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0y
ODgsNyArMjg4LDcgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIHZvaWQgdmll
d3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0Qo
KSB7IHJldHVybiAmbV9jb250ZXh0OyB9CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFw
aGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIAog
ICAgICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIApAQCAtMzAwLDE4
ICszMDAsMjEgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgQ2FudmFzT2JqZWN0OworCisgICAgICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NPd25QdHI8R3JhcGhpY3ND
b250ZXh0M0Q+KTsKKwogICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmplY3QqKTsKICAg
ICAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKICAgICAgICAgdm9pZCBt
YXJrQ29udGV4dENoYW5nZWQoKTsKICAgICAgICAgdm9pZCBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoYm9vbCBjaGFuZ2VkKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2NvbnRleHQuY2hlY2tF
cnJvcigpOworICAgICAgICAgICAgbV9jb250ZXh0LT5jaGVja0Vycm9yKCk7CiAgICAgICAgICAg
ICBpZiAoY2hhbmdlZCkKICAgICAgICAgICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgbV9jb250ZXh0Owor
ICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAgICAgICAgYm9v
bCBtX25lZWRzVXBkYXRlOwogICAgICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7CiAgICAg
ICAgIC8vIEZJWE1FOiBJIHRoaW5rIHRoaXMgaXMgYnJva2VuIC0tIGl0IGRvZXMgbm90IGluY3Jl
bWVudCBhbnkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxl
bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0KCkgeyB9CiAg
ICAgICAgIAorICAgICAgICAvLyBSZWYgYW5kIGRlcmVmIHRoZSBtX2NhbnZhcwogICAgICAgICB2
b2lkIHJlZigpOwogICAgICAgICB2b2lkIGRlcmVmKCk7CiAgICAgICAgIApAQCAtNDYsNyArNDcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAg
IEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZhczsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA1MDExNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQsMTEgKzc0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwogI2VuZGlmCiAKLSAgICBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRCA6IE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRCA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFNoYWRlclR5
cGUgeyBGUkFHTUVOVF9TSEFERVIsIFZFUlRFWF9TSEFERVIgfTsKICAgICAKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNyZWF0ZSgpOwogICAgICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRCgpOwog
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtOTIsNyArOTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gTnVsbFBsYXRmb3JtM0RPYmplY3Q7IH0KICNlbmRpZgogICAgICAgICB2b2lkIGNoZWNrRXJy
b3IoKSBjb25zdDsKLSAgICAgICAgCiAgICAgICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgICAgIAogICAgICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVz
IG9mIE9wZW5HTCBkYXRhIHR5cGVzCkBAIC0zMjAsNiArMzE5LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQpOyAgICAgICAgCiAgICAg
ICAgIAogICAgIHByaXZhdGU6ICAgICAgICAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QoKTsK
KwogICAgICAgICBpbnQgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsKICAgICAgICAg
CiAjaWYgUExBVEZPUk0oTUFDKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q2FudmFzM0RMYXllci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9DYW52YXMzRExheWVyLm1tCShyZXZpc2lvbiA1MDExNSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDE5
ICs1MCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLShDR0xQaXhlbEZvcm1hdE9i
ailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3QpbWFzawogewotICAg
IENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbXSA9Ci0gICAgewotICAgICAgICAoQ0dM
UGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFBY2NlbGVyYXRlZCwKLSAgICAgICAgKENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUpIDMyLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFEaXNw
bGF5TWFzaywgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBtYXNrLAotICAgICAgICAoQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKLSAgICB9OwotICAgIAotICAgIENHTFBpeGVsRm9ybWF0T2Jq
IHBpeGVsRm9ybWF0T2JqOwotICAgIEdMaW50IG51bVBpeGVsRm9ybWF0czsKLSAKLSAgICBDR0xD
aG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1h
dHMpOwotICAgIHJldHVybiBwaXhlbEZvcm1hdE9iajsKKyAgICAvLyBGSVhNRTogVGhlIG1hc2sg
cGFyYW0gdGVsbHMgeW91IHdoaWNoIGRpc3BsYXkgKG9uIGEgbXVsdGktZGlzcGxheSBzeXN0ZW0p
CisgICAgLy8gaXMgdG8gYmUgdXNlZC4gQnV0IHNpbmNlIHdlIGFyZSBub3cgZ2V0dGluZyB0aGUg
cGl4ZWwgZm9ybWF0IGZyb20gdGhlIAorICAgIC8vIENhbnZhcyBDR0wgY29udGV4dCwgd2UgZG9u
J3QgdXNlIGl0LiBUaGlzIHNlZW1zIHRvIGRvIHRoZSByaWdodCB0aGluZyBvbgorICAgIC8vIG9u
ZSBtdWx0aS1kaXNwbGF5IHN5c3RlbS4gQnV0IHRoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSB0aGlz
IGlzIG5vdCB0aGUgY2FzZS4KKyAgICAvLyBJZiBuZWVkZWQgd2Ugd2lsbCBoYXZlIHRvIHNldCB0
aGUgZGlzcGxheSBtYXNrIGluIHRoZSBDYW52YXMgQ0dMQ29udGV4dCBhbmQKKyAgICAvLyBtYWtl
IHN1cmUgaXQgbWF0Y2hlcy4KKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgcmV0dXJuIENH
TFJldGFpblBpeGVsRm9ybWF0KENHTEdldFBpeGVsRm9ybWF0KG1fY29udGV4dE9iaikpOwogfQog
CiAtKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvcm1hdDooQ0dMUGl4ZWxG
b3JtYXRPYmopcGl4ZWxGb3JtYXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHJldmlzaW9uIDUwMTE1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw1NCArNTAsNzYgQEAKICNpbmNsdWRlICJXZWJLaXRDU1NN
YXRyaXguaCIKIAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKyNp
bmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
PiYgYXR0cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBhY2NlbGVyYXRl
ZCwgYm9vbCBzdXBlcnNhbXBsZSwgYm9vbCBjbG9zZXN0KQoreworICAgIGF0dHJpYnMuY2xlYXIo
KTsKKyAgICAKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKKyAgICBhdHRy
aWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oY29sb3JCaXRz
KSk7CisgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQURlcHRoU2l6ZSk7CisgICAgYXR0cmlicy5h
cHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGRlcHRoQml0cykpOwor
ICAgIAorICAgIGlmIChhY2NlbGVyYXRlZCkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBG
QUFjY2VsZXJhdGVkKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBG
QVJlbmRlcmVySUQpOworICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhl
bEZvcm1hdEF0dHJpYnV0ZT4oa0NHTFJlbmRlcmVyR2VuZXJpY0Zsb2F0SUQpKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGlmIChzdXBlcnNhbXBsZSkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NH
TFBGQVN1cGVyc2FtcGxlKTsKKyAgICAgICAgCisgICAgaWYgKGNsb3Nlc3QpCisgICAgICAgIGF0
dHJpYnMuYXBwZW5kKGtDR0xQRkFDbG9zZXN0UG9saWN5KTsKKyAgICAgICAgCisgICAgYXR0cmli
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApKTsKK30KKwor
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSgp
Cit7CisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG5ldyBHcmFw
aGljc0NvbnRleHQzRCgpOworICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250
ZXh0IDogMDsKK30KKwogR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKCkKICAg
ICA6IG1fY29udGV4dE9iaigwKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQog
ICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogewotICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0
dHJpYnNbXSA9Ci0gICAgewotICAgICAgICBrQ0dMUEZBQ2xvc2VzdFBvbGljeSwKLSAgICAgICAg
KENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGUpIDMyLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQ
RkFEZXB0aFNpemUsIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCi0gICAgICAgIChDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQUFjY2VsZXJhdGVkLAotICAgICAgICAoQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFTdXBlcnNhbXBsZSwKLSAgICAgICAgKENHTFBpeGVs
Rm9ybWF0QXR0cmlidXRlKSAwCi0gICAgfTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdG8gY2hh
bmdlIHRoZXNlIGNvbnN0YW50cyB0byBtYXRjaCB0aGUgYWJvdmUgbGlzdAotICAgIGNvbnN0IGlu
dCBzdXBlclNhbXBsZUluZGV4ID0gNjsKLSAgICBjb25zdCBpbnQgYWNjZWxlcmF0ZWRJbmRleCA9
IDU7Ci0gICAgY29uc3QgaW50IGRlcHRoU2l6ZUluZGV4ID0gNDsKLSAgICAKKyAgICBWZWN0b3I8
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAgQ0dMUGl4ZWxGb3JtYXRPYmog
cGl4ZWxGb3JtYXRPYmogPSAwOwogICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7CiAgICAg
Ci0gICAgLy8gV2Ugd2lsbCB0cnkgZm9yIHRoZSBhYm92ZSBmb3JtYXQgZmlyc3QuIElmIHRoYXQg
ZmFpbHMsIHdlIHdpbGwKLSAgICAvLyB0cnkgZm9yIG9uZSB3aXRob3V0IHN1cGVyc2FtcGxlLiBJ
ZiB0aGF0IGZhaWxzLCB3ZSB3aWxsIHRyeSBmb3IKLSAgICAvLyBvbmUgdGhhdCBoYXMgYSAxNiBi
aXQgZGVwdGggYnVmZmVyLiBJZiB0aGF0IGZhaWxzLCB3ZSB3aWxsIHRyeQotICAgIC8vIGZvciBh
IHNvZnR3YXJlIHJlbmRlcmVyLiBJZiBub25lIG9mIHRoYXQgd29ya3MsIHdlIHNpbXBseSBmYWls
IAotICAgIC8vIGFuZCBzZXQgbV9jb250ZXh0T2JqIHRvIDAuCi0gICAgQ0dMQ2hvb3NlUGl4ZWxG
b3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAgICAv
LyBXZSB3aWxsIHRyeToKKyAgICAvLworICAgIC8vICAxKSAzMiBiaXQgUkdCQS8zMiBiaXQgZGVw
dGgvYWNjZWxlcmF0ZWQvc3VwZXJzYW1wbGVkCisgICAgLy8gIDIpIDMyIGJpdCBSR0JBLzMyIGJp
dCBkZXB0aC9hY2NlbGVyYXRlZAorICAgIC8vICAzKSAzMiBiaXQgUkdCQS8xNiBiaXQgZGVwdGgv
YWNjZWxlcmF0ZWQKKyAgICAvLyAgNCkgY2xvc2VzdCB0byAzMiBiaXQgUkdCQS8xNiBiaXQgZGVw
dGgvc29mdHdhcmUgcmVuZGVyZXIKKyAgICAvLworICAgIC8vICBJZiBub25lIG9mIHRoYXQgd29y
a3MsIHdlIHNpbXBseSBmYWlsIGFuZCBzZXQgbV9jb250ZXh0T2JqIHRvIDAuCisgICAgCisgICAg
c2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDMyLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisgICAg
Q0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51
bVBpeGVsRm9ybWF0cyk7CiAgICAgaWYgKG51bVBpeGVsRm9ybWF0cyA9PSAwKSB7Ci0gICAgICAg
IGF0dHJpYnNbc3VwZXJTYW1wbGVJbmRleF0gPSBzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0
dHJpYnV0ZT4oMCk7Ci0gICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhl
bEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0
dHJpYnMsIDMyLCAzMiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgQ0dMQ2hvb3NlUGl4
ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0
cyk7CiAgICAgICAgIAogICAgICAgICBpZiAobnVtUGl4ZWxGb3JtYXRzID09IDApIHsKLSAgICAg
ICAgICAgIGF0dHJpYnNbZGVwdGhTaXplSW5kZXhdID0gc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGU+KDE2KTsKLSAgICAgICAgICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJp
YnMsICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisgICAgICAgICAgICBzZXRQ
aXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMTYsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
ICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2Jq
LCAmbnVtUGl4ZWxGb3JtYXRzKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobnVtUGl4ZWxG
b3JtYXRzID09IDApIHsKLSAgICAgICAgICAgICAgICBhdHRyaWJzW2FjY2VsZXJhdGVkSW5kZXhd
ID0gc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDApOwotICAgICAgICAgICAg
ICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1hdE9iaiwgJm51bVBp
eGVsRm9ybWF0cyk7CisgICAgICAgICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIs
IDE2LCBmYWxzZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgIENHTENob29zZVBpeGVs
Rm9ybWF0KGF0dHJpYnMuZGF0YSgpLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMp
OwogICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobnVtUGl4ZWxGb3JtYXRzID09IDApIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gQ291bGQgbm90IGZpbmQgYW4gYWNjZXB0YWJsZSByZW5k
ZXJlciAtIGZhaWwKLSAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0T2JqID0gMDsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE0MywxMiArMTY1LDE0IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCgpCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIENH
TFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJiBtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7Ci0gICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwot
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29u
dGV4dE9iaik7CisgICAgaWYgKG1fY29udGV4dE9iaikgeworICAgICAgICBDR0xTZXRDdXJyZW50
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmIG1fZGVwdGhCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsK
KyAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7CisgICAgICAgIENHTERlc3Ryb3lDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
aGVja0Vycm9yKCkgY29uc3QKQEAgLTE3Niw3ICsyMDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmRQYWludCgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBo
ZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0
aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0IHx8ICFtX2NvbnRleHRPYmopCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwpAQCAtMjA4LDYgKzIz
Miw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKIAogc3RhdGlj
IGlubGluZSB2b2lkIGVuc3VyZUNvbnRleHQoQ0dMQ29udGV4dE9iaiBjb250ZXh0KQogeworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBDR0xDb250ZXh0
T2JqIGN1cnJlbnRDb250ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQoKTsKICAgICBpZiAoY3Vy
cmVudENvbnRleHQgIT0gY29udGV4dCkKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY29u
dGV4dCk7Cg==
</data>
<flag name="review"
          id="23465"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>