<?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>96627</bug_id>
          
          <creation_ts>2012-09-13 03:00:53 -0700</creation_ts>
          <short_desc>[EFL] Use the shareable GraphicsContext3DOpenGL* implementation.</short_desc>
          <delta_ts>2012-10-15 07:54:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>97651</blocked>
    
    <blocked>97652</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Regina Chung">heejin.r.chung</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>joone</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>719290</commentid>
    <comment_count>0</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-13 03:00:53 -0700</bug_when>
    <thetext>Current implementation of GraphicsContext3DEfl has much duplicated code, due to characteristics of Evas.
It would be better to remove the duplicated code, use the common GC3D implementation under graphics\opengl,
and deal with Evas in another way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720320</commentid>
    <comment_count>1</comment_count>
      <attachid>164049</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-13 22:36:47 -0700</bug_when>
    <thetext>Created attachment 164049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721383</commentid>
    <comment_count>2</comment_count>
      <attachid>164049</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-14 23:08:14 -0700</bug_when>
    <thetext>Comment on attachment 164049
Patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:73
&gt; +    static bool initialized = false;
&gt; +    static bool success = true;

In the presence of &quot;success&quot; I suggest to rename the generic &quot;initialized&quot; to something more specific, because it refers only to the initialization of the GL shims.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:79
&gt; +#if USE(OPENGL_ES_2)
&gt; +        success = initializeOpenGLESShims();
&gt; +#else
&gt; +        success = initializeOpenGLShims();
&gt; +#endif

initializeOpenGLESShims() doesn&apos;t exists AFAICS. initializeOpenGLShims() should be used for both I believe.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:144
&gt; +    if (renderStyle == RenderOffscreen) {
&gt; +        // Create buffers for the canvas FBO.
&gt; +        glGenFramebuffers(/* count */ 1, &amp;m_fbo);
&gt; +
&gt; +        glGenTextures(1, &amp;m_texture);
&gt; +        glBindTexture(GraphicsContext3D::TEXTURE_2D, m_texture);
&gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR);
&gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR);
&gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; +        glBindTexture(GraphicsContext3D::TEXTURE_2D, 0);
&gt; +
&gt; +        // Create a multisample FBO.
&gt; +        if (m_attrs.antialias) {
&gt; +            glGenFramebuffers(1, &amp;m_multisampleFBO);
&gt; +            glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
&gt; +            m_boundFBO = m_multisampleFBO;
&gt; +            glGenRenderbuffers(1, &amp;m_multisampleColorBuffer);
&gt; +            if (m_attrs.stencil || m_attrs.depth)
&gt; +                glGenRenderbuffers(1, &amp;m_multisampleDepthStencilBuffer);
&gt; +        } else {
&gt; +            // Bind canvas FBO.
&gt; +            glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
&gt; +            m_boundFBO = m_fbo;
&gt; +#if USE(OPENGL_ES_2)
&gt; +            if (m_attrs.depth)
&gt; +                glGenRenderbuffers(1, &amp;m_depthBuffer);
&gt; +            if (m_context-&gt;m_attrs.stencil)
&gt; +                glGenRenderbuffers(1, &amp;m_stencilBuffer);
&gt; +#endif
&gt; +            if (m_attrs.stencil || m_attrs.depth)
&gt; +                glGenRenderbuffers(1, &amp;m_depthStencilBuffer);
&gt; +        }
&gt; +    }
&gt; +
&gt; +    // ANGLE initialization.
&gt; +    ShBuiltInResources ANGLEResources;
&gt; +    ShInitBuiltInResources(&amp;ANGLEResources);
&gt; +
&gt; +    getIntegerv(GraphicsContext3D::MAX_VERTEX_ATTRIBS, &amp;ANGLEResources.MaxVertexAttribs);
&gt; +    getIntegerv(GraphicsContext3D::MAX_VERTEX_UNIFORM_VECTORS, &amp;ANGLEResources.MaxVertexUniformVectors);
&gt; +    getIntegerv(GraphicsContext3D::MAX_VARYING_VECTORS, &amp;ANGLEResources.MaxVaryingVectors);
&gt; +    getIntegerv(GraphicsContext3D::MAX_VERTEX_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxVertexTextureImageUnits);
&gt; +    getIntegerv(GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxCombinedTextureImageUnits);
&gt; +    getIntegerv(GraphicsContext3D::MAX_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxTextureImageUnits);
&gt; +    getIntegerv(GraphicsContext3D::MAX_FRAGMENT_UNIFORM_VECTORS, &amp;ANGLEResources.MaxFragmentUniformVectors);
&gt; +
&gt; +    // Always set to 1 for OpenGL ES.
&gt; +    ANGLEResources.MaxDrawBuffers = 1;
&gt; +    m_compiler.setResources(ANGLEResources);
&gt; +
&gt; +#if !USE(OPENGL_ES_2)
&gt; +    glEnable(GL_POINT_SPRITE);
&gt; +    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
&gt; +#endif
&gt;  
&gt; +    glClearColor(0.0, 0.0, 0.0, 0.0);
&gt; +}

It feels like that the bulk of this code is a prime candidate for sharing between difference GC3D implementations. What do you think?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:169
&gt; +    if (!m_private || m_renderStyle == RenderToCurrentGLContext)
&gt; +        return false;

Are you sure that false should be returned when m_renderStyle == RenderToCurrentGLContext?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:49
&gt; +        // FIXME: Retrive evas object from platformPageClient-&gt;view().

Retrive -&gt; Retrieve

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:163
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; +void GraphicsContext3DPrivate::paintToTextureMapper(TextureMapper*, const FloatRect&amp; target, const TransformationMatrix&amp;, float opacity, BitmapTexture* mask)
&gt;  {
&gt; -    makeContextCurrent();
&gt; -    m_api-&gt;glGetAttachedShaders(program, maxCount, count, shaders);
&gt;  }

Perhaps add a notImplemented() here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721701</commentid>
    <comment_count>3</comment_count>
      <attachid>164343</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-16 23:34:50 -0700</bug_when>
    <thetext>Created attachment 164343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721710</commentid>
    <comment_count>4</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-16 23:46:17 -0700</bug_when>
    <thetext>Hi Simon, thank you for your comments!
I uploaded a new patch with most of your suggestions applied, except the one about making FBO and ANGLE initialization code sharable.
Maybe that one should be in another patch?

(In reply to comment #2)
&gt; (From update of attachment 164049 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164049&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:73
&gt; &gt; +    static bool initialized = false;
&gt; &gt; +    static bool success = true;
&gt; In the presence of &quot;success&quot; I suggest to rename the generic &quot;initialized&quot; to something more specific, because it refers only to the initialization of the GL shims.

Took your advice and changed it to &quot;initializedShims&quot;.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:79
&gt; &gt; +#if USE(OPENGL_ES_2)
&gt; &gt; +        success = initializeOpenGLESShims();
&gt; &gt; +#else
&gt; &gt; +        success = initializeOpenGLShims();
&gt; &gt; +#endif
&gt; initializeOpenGLESShims() doesn&apos;t exists AFAICS. initializeOpenGLShims() should be used for both I believe.

You&apos;re right. Removed #if and only left initializeOpenGLShims().

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:144
&gt; &gt; +    if (renderStyle == RenderOffscreen) {
&gt; &gt; +        // Create buffers for the canvas FBO.
&gt; &gt; +        glGenFramebuffers(/* count */ 1, &amp;m_fbo);
&gt; &gt; +
&gt; &gt; +        glGenTextures(1, &amp;m_texture);
&gt; &gt; +        glBindTexture(GraphicsContext3D::TEXTURE_2D, m_texture);
&gt; &gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR);
&gt; &gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR);
&gt; &gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; &gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; &gt; +        glBindTexture(GraphicsContext3D::TEXTURE_2D, 0);
&gt; &gt; +
&gt; &gt; +        // Create a multisample FBO.
&gt; &gt; +        if (m_attrs.antialias) {
&gt; &gt; +            glGenFramebuffers(1, &amp;m_multisampleFBO);
&gt; &gt; +            glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
&gt; &gt; +            m_boundFBO = m_multisampleFBO;
&gt; &gt; +            glGenRenderbuffers(1, &amp;m_multisampleColorBuffer);
&gt; &gt; +            if (m_attrs.stencil || m_attrs.depth)
&gt; &gt; +                glGenRenderbuffers(1, &amp;m_multisampleDepthStencilBuffer);
&gt; &gt; +        } else {
&gt; &gt; +            // Bind canvas FBO.
&gt; &gt; +            glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
&gt; &gt; +            m_boundFBO = m_fbo;
&gt; &gt; +#if USE(OPENGL_ES_2)
&gt; &gt; +            if (m_attrs.depth)
&gt; &gt; +                glGenRenderbuffers(1, &amp;m_depthBuffer);
&gt; &gt; +            if (m_context-&gt;m_attrs.stencil)
&gt; &gt; +                glGenRenderbuffers(1, &amp;m_stencilBuffer);
&gt; &gt; +#endif
&gt; &gt; +            if (m_attrs.stencil || m_attrs.depth)
&gt; &gt; +                glGenRenderbuffers(1, &amp;m_depthStencilBuffer);
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    // ANGLE initialization.
&gt; &gt; +    ShBuiltInResources ANGLEResources;
&gt; &gt; +    ShInitBuiltInResources(&amp;ANGLEResources);
&gt; &gt; +
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_VERTEX_ATTRIBS, &amp;ANGLEResources.MaxVertexAttribs);
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_VERTEX_UNIFORM_VECTORS, &amp;ANGLEResources.MaxVertexUniformVectors);
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_VARYING_VECTORS, &amp;ANGLEResources.MaxVaryingVectors);
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_VERTEX_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxVertexTextureImageUnits);
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxCombinedTextureImageUnits);
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxTextureImageUnits);
&gt; &gt; +    getIntegerv(GraphicsContext3D::MAX_FRAGMENT_UNIFORM_VECTORS, &amp;ANGLEResources.MaxFragmentUniformVectors);
&gt; &gt; +
&gt; &gt; +    // Always set to 1 for OpenGL ES.
&gt; &gt; +    ANGLEResources.MaxDrawBuffers = 1;
&gt; &gt; +    m_compiler.setResources(ANGLEResources);
&gt; &gt; +
&gt; &gt; +#if !USE(OPENGL_ES_2)
&gt; &gt; +    glEnable(GL_POINT_SPRITE);
&gt; &gt; +    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
&gt; &gt; +#endif
&gt; &gt;  
&gt; &gt; +    glClearColor(0.0, 0.0, 0.0, 0.0);
&gt; &gt; +}
&gt; It feels like that the bulk of this code is a prime candidate for sharing between difference GC3D implementations. What do you think?

I agree that it would be nice if this code could be shared. Maybe something like GC3D::initializeFBOs() and GC3D::initializeANGLE().



&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:169
&gt; &gt; +    if (!m_private || m_renderStyle == RenderToCurrentGLContext)
&gt; &gt; +        return false;
&gt; Are you sure that false should be returned when m_renderStyle == RenderToCurrentGLContext?

Changed code so that false is returned when !m_private, and true is returned when m_renderStyle == RenderToCurrentGLContext.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:49
&gt; &gt; +        // FIXME: Retrive evas object from platformPageClient-&gt;view().
&gt; Retrive -&gt; Retrieve

Fixed typo.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:163
&gt; &gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; &gt; +void GraphicsContext3DPrivate::paintToTextureMapper(TextureMapper*, const FloatRect&amp; target, const TransformationMatrix&amp;, float opacity, BitmapTexture* mask)
&gt; &gt;  {
&gt; &gt; -    makeContextCurrent();
&gt; &gt; -    m_api-&gt;glGetAttachedShaders(program, maxCount, count, shaders);
&gt; &gt;  }
&gt; Perhaps add a notImplemented() here?

Added notImplemented().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728368</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-26 02:54:50 -0700</bug_when>
    <thetext>Kim, do the Evas GL and other EFL bits look okay to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728370</commentid>
    <comment_count>6</comment_count>
      <attachid>164343</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-26 02:56:12 -0700</bug_when>
    <thetext>Comment on attachment 164343
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Changed EFL implementation of GraphicsContext3D(GC3D) to use GraphicsContext3DOpenGL*.
&gt; +        It was initially implemented in a different way, due to characteristics of Evas,
&gt; +        but it would be better to use the common implementation and find another way
&gt; +        to deal with Evas, especially because all the duplicated code.

Plus the fact that maybe using Evas will make less sense in the near future, where we can do the same directly using OpenGL and eventually combine it with Wayland for compositing. I support this change!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728377</commentid>
    <comment_count>7</comment_count>
      <attachid>164343</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-26 03:11:48 -0700</bug_when>
    <thetext>Comment on attachment 164343
Patch

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

Did you compare this new code with what Qt is doing?

&gt; Source/WebCore/PlatformEfl.cmake:295
&gt; -    platform/graphics/cairo/GLContext.cpp
&gt; -    platform/graphics/cairo/GraphicsContext3DCairo.cpp
&gt; -    platform/graphics/cairo/GraphicsContext3DPrivate.cpp
&gt; +    platform/graphics/efl/GraphicsContext3DEfl.cpp
&gt; +    platform/graphics/efl/GraphicsContext3DPrivate.cpp

So any reason why GTK doesnt want to use the same? I guess this is still based on cairo right

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:48
&gt; +    , m_attrs(attrs)

attributes?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:92
&gt; +        glGenTextures(1, &amp;m_texture);
&gt; +        glBindTexture(GraphicsContext3D::TEXTURE_2D, m_texture);
&gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR);
&gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR);
&gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);

Maybe a small comment here makes sense, so that people dont have to look up the functions

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:105
&gt; +            glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);

Maybe m_fbo should be called soemthing like m_nonMultisampleFBO to make the difference clear

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:120
&gt; +    // ANGLE initialization.
&gt; +    ShBuiltInResources ANGLEResources;
&gt; +    ShInitBuiltInResources(&amp;ANGLEResources);

Shouldnt this be per PLATFORM(WIN) only?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:139
&gt; +    glClearColor(0.0, 0.0, 0.0, 0.0);

why not white?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:165
&gt; +    if (!m_private)
&gt; +        return false;

enwline after return

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:167
&gt; +    if (m_renderStyle == RenderToCurrentGLContext)
&gt; +        return true;

same here

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:60
&gt; +    // For WebKit2, we need to create a dummy ecoreEvas object for the WebProcess in order to use EvasGL APIs.
&gt; +    ecore_evas_init();
&gt; +    Ecore_Evas* ecoreEvas = ecore_evas_gl_x11_new(0, 0, 0, 0, 1, 1);
&gt; +    if (!ecoreEvas)
&gt; +        return;
&gt; +    evas = ecore_evas_get(ecoreEvas);
&gt; +    if (!evas)
&gt; +        return;

As this is X11 dependent we might want to abstract that out. Or at least add some ifdefs

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:91
&gt; +    if (m_surface)
&gt; +        evas_gl_surface_destroy(m_evasGL, m_surface);

OwnPtr works for this, look at RenderThemeEfl for examples

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:96
&gt; +
&gt; +    evas_gl_free(m_evasGL);

where is the ecoreEvas freed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728381</commentid>
    <comment_count>8</comment_count>
      <attachid>164343</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-26 03:30:28 -0700</bug_when>
    <thetext>Comment on attachment 164343
Patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:48
&gt; +        // WebKit1 code path.

I don&apos;t understand this comment well.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:57
&gt; +        return;

new line?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:58
&gt; +    evas = ecore_evas_get(ecoreEvas);

Why not define this here ?

Evas* evas =  ecore_evas_get(ecoreEvas);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730321</commentid>
    <comment_count>9</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-28 00:45:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 164343 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164343&amp;action=review
&gt; Did you compare this new code with what Qt is doing?

Yes, I referenced Qt&apos;s code while changing our code.

&gt; &gt; Source/WebCore/PlatformEfl.cmake:295
&gt; &gt; -    platform/graphics/cairo/GLContext.cpp
&gt; &gt; -    platform/graphics/cairo/GraphicsContext3DCairo.cpp
&gt; &gt; -    platform/graphics/cairo/GraphicsContext3DPrivate.cpp
&gt; &gt; +    platform/graphics/efl/GraphicsContext3DEfl.cpp
&gt; &gt; +    platform/graphics/efl/GraphicsContext3DPrivate.cpp
&gt; So any reason why GTK doesnt want to use the same? I guess this is still based on cairo right
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:48
&gt; &gt; +    , m_attrs(attrs)
&gt; attributes?

m_attrs and m_fbo are actually defined in the common code, so I think it should be changed in a seperate patch (if necessary).
Maybe it can be done when moving the fbo and ANGLE initialization code to the common area.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:92
&gt; &gt; +        glGenTextures(1, &amp;m_texture);
&gt; &gt; +        glBindTexture(GraphicsContext3D::TEXTURE_2D, m_texture);
&gt; &gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR);
&gt; &gt; +        glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR);
&gt; &gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; &gt; +        glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);
&gt; Maybe a small comment here makes sense, so that people dont have to look up the functions

Added a short comment.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:105
&gt; &gt; +            glBindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
&gt; Maybe m_fbo should be called soemthing like m_nonMultisampleFBO to make the difference clear
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:120
&gt; &gt; +    // ANGLE initialization.
&gt; &gt; +    ShBuiltInResources ANGLEResources;
&gt; &gt; +    ShInitBuiltInResources(&amp;ANGLEResources);
&gt; Shouldnt this be per PLATFORM(WIN) only?
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:139
&gt; &gt; +    glClearColor(0.0, 0.0, 0.0, 0.0);
&gt; why not white?

The default clear color for opengl(es) is black. 
However, I just removed this line because I think the clear color 
should be set in the actual WebGL content or whatever is using GC3D.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:165
&gt; &gt; +    if (!m_private)
&gt; &gt; +        return false;
&gt; enwline after return
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:167
&gt; &gt; +    if (m_renderStyle == RenderToCurrentGLContext)
&gt; &gt; +        return true;
&gt; same here

Added newlines.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:60
&gt; &gt; +    // For WebKit2, we need to create a dummy ecoreEvas object for the WebProcess in order to use EvasGL APIs.
&gt; &gt; +    ecore_evas_init();
&gt; &gt; +    Ecore_Evas* ecoreEvas = ecore_evas_gl_x11_new(0, 0, 0, 0, 1, 1);
&gt; &gt; +    if (!ecoreEvas)
&gt; &gt; +        return;
&gt; &gt; +    evas = ecore_evas_get(ecoreEvas);
&gt; &gt; +    if (!evas)
&gt; &gt; +        return;
&gt; As this is X11 dependent we might want to abstract that out. Or at least add some ifdefs

Added #ifdef HAVE_ECORE_X.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:91
&gt; &gt; +    if (m_surface)
&gt; &gt; +        evas_gl_surface_destroy(m_evasGL, m_surface);
&gt; OwnPtr works for this, look at RenderThemeEfl for examples

I see that it works for Ecore_Evas* but not for Evas_GL related pointers.
Do you think I should add code for them to our OwnPtr implementation?

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:96
&gt; &gt; +
&gt; &gt; +    evas_gl_free(m_evasGL);
&gt; where is the ecoreEvas freed?

added OwnPtr&lt;m_ecoreEvas&gt; as a member variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730326</commentid>
    <comment_count>10</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-28 00:52:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 164343 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164343&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:48
&gt; &gt; +        // WebKit1 code path.
&gt; I don&apos;t understand this comment well.

I temporarily removed the WebKit1 related code because it brang up problems in WebKit2 but am planning on putting it back in with some fixes in another patch.
(https://bugs.webkit.org/show_bug.cgi?id=97651)
Anyways I changed the comment to make it a bit more understandable.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:57
&gt; &gt; +        return;
&gt; new line?

Added new line.

&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:58
&gt; &gt; +    evas = ecore_evas_get(ecoreEvas);
&gt; Why not define this here ?
&gt; Evas* evas =  ecore_evas_get(ecoreEvas);

This also had to do with putting back the WebKit1 code in, but I changed the code as you suggested. I guess I shouldn&apos;t commit code that &apos;must&apos; be fixed in the future :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730333</commentid>
    <comment_count>11</comment_count>
      <attachid>166164</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-09-28 01:01:27 -0700</bug_when>
    <thetext>Created attachment 166164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730443</commentid>
    <comment_count>12</comment_count>
      <attachid>166164</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-28 03:29:28 -0700</bug_when>
    <thetext>Comment on attachment 166164
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        * PlatformEfl.cmake: Removed cairo implementaion of GC3D and added efl files to WebCore_SOURCES.

implementaion -&gt; implementation

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:205
&gt; +    cairo_rectangle(cr, 0, 0, canvasWidth, canvasHeight);
&gt; +    cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
&gt; +    cairo_paint(cr);
&gt;  
&gt; -void GraphicsContext3D::deleteProgram(Platform3DObject program)
&gt; -{
&gt; -    m_private-&gt;deleteProgram(program);
&gt; -}
&gt; +    RefPtr&lt;cairo_surface_t&gt; imageSurface = adoptRef(cairo_image_surface_create_for_data(
&gt; +        const_cast&lt;unsigned char*&gt;(imagePixels), CAIRO_FORMAT_ARGB32, imageWidth, imageHeight, imageWidth * 4));
&gt;  
&gt; -void GraphicsContext3D::deleteRenderbuffer(Platform3DObject buffer)
&gt; -{
&gt; -    m_private-&gt;deleteRenderbuffer(buffer);
&gt; -}
&gt; +    // OpenGL keeps the pixels stored bottom up, so we need to flip the image here.
&gt; +    cairo_translate(cr, 0, imageHeight);
&gt; +    cairo_scale(cr, 1, -1);
&gt;  
&gt; -void GraphicsContext3D::deleteShader(Platform3DObject shader)
&gt; -{
&gt; -    m_private-&gt;deleteShader(shader);
&gt; -}
&gt; +    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);

Just a thought, but isn&apos;t CLEAR + OVER the same as just OPERATOR_SOURCE? I mean, perhaps you can safe an operation here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730743</commentid>
    <comment_count>13</comment_count>
      <attachid>166164</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-09-28 09:40:33 -0700</bug_when>
    <thetext>Comment on attachment 166164
Patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:43
&gt; +    if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext)

There seems to be an inconsistency here. GraphicsContext3D::createForCurrentGLContext() sets renderStyle to GraphicsContext3D::RenderToCurrentGLContext.
So we always return here without creating a GL context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730829</commentid>
    <comment_count>14</comment_count>
      <attachid>166164</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-09-28 11:21:51 -0700</bug_when>
    <thetext>Comment on attachment 166164
Patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:47
&gt; +    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)

This will crash.
GraphicsContext3D::isGLES2Compliant() is calling on m_private which was not created yet.
You need to change GraphicsContext3D::isGLES2Compliant() to simply return a value, like other ports do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731551</commentid>
    <comment_count>15</comment_count>
      <attachid>166164</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-01 04:02:22 -0700</bug_when>
    <thetext>Comment on attachment 166164
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:47
&gt;&gt; +    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
&gt; 
&gt; This will crash.
&gt; GraphicsContext3D::isGLES2Compliant() is calling on m_private which was not created yet.
&gt; You need to change GraphicsContext3D::isGLES2Compliant() to simply return a value, like other ports do.

Yael is right, and there&apos;s no reason for isGLES2Compliant() to use m_private, since it&apos;s just returning true or false depending on #ifdef, so that&apos;s easy to fix :)

&gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:43
&gt;&gt; +    if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext)
&gt; 
&gt; There seems to be an inconsistency here. GraphicsContext3D::createForCurrentGLContext() sets renderStyle to GraphicsContext3D::RenderToCurrentGLContext.
&gt; So we always return here without creating a GL context.

That seems generally correct, doesn&apos;t it? There&apos;s no surface, etc. to create in that case, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731652</commentid>
    <comment_count>16</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-10-01 06:43:30 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 166164 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:43
&gt; &gt;&gt; +    if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext)
&gt; &gt; 
&gt; &gt; There seems to be an inconsistency here. GraphicsContext3D::createForCurrentGLContext() sets renderStyle to GraphicsContext3D::RenderToCurrentGLContext.
&gt; &gt; So we always return here without creating a GL context.
&gt; 
&gt; That seems generally correct, doesn&apos;t it? There&apos;s no surface, etc. to create in that case, no?

The context that we are supposed to create here is used as key for the hash table. Not creating one, as proposed by this patch, triggers ASSERT in debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734359</commentid>
    <comment_count>17</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-03 22:10:26 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 166164 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        * PlatformEfl.cmake: Removed cairo implementaion of GC3D and added efl files to WebCore_SOURCES.
&gt; implementaion -&gt; implementation

I&apos;ll fix that typo :)
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:205
&gt; &gt; +    cairo_rectangle(cr, 0, 0, canvasWidth, canvasHeight);
&gt; &gt; +    cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
&gt; &gt; +    cairo_paint(cr);
&gt; &gt;  
&gt; &gt; -void GraphicsContext3D::deleteProgram(Platform3DObject program)
&gt; &gt; -{
&gt; &gt; -    m_private-&gt;deleteProgram(program);
&gt; &gt; -}
&gt; &gt; +    RefPtr&lt;cairo_surface_t&gt; imageSurface = adoptRef(cairo_image_surface_create_for_data(
&gt; &gt; +        const_cast&lt;unsigned char*&gt;(imagePixels), CAIRO_FORMAT_ARGB32, imageWidth, imageHeight, imageWidth * 4));
&gt; &gt;  
&gt; &gt; -void GraphicsContext3D::deleteRenderbuffer(Platform3DObject buffer)
&gt; &gt; -{
&gt; &gt; -    m_private-&gt;deleteRenderbuffer(buffer);
&gt; &gt; -}
&gt; &gt; +    // OpenGL keeps the pixels stored bottom up, so we need to flip the image here.
&gt; &gt; +    cairo_translate(cr, 0, imageHeight);
&gt; &gt; +    cairo_scale(cr, 1, -1);
&gt; &gt;  
&gt; &gt; -void GraphicsContext3D::deleteShader(Platform3DObject shader)
&gt; &gt; -{
&gt; &gt; -    m_private-&gt;deleteShader(shader);
&gt; &gt; -}
&gt; &gt; +    cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
&gt; Just a thought, but isn&apos;t CLEAR + OVER the same as just OPERATOR_SOURCE? I mean, perhaps you can safe an operation here :)

Yes, you&apos;re right, removed the unnecessary operation as you suggested. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734360</commentid>
    <comment_count>18</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-03 22:11:22 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 166164 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:47
&gt; &gt; +    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
&gt; This will crash.
&gt; GraphicsContext3D::isGLES2Compliant() is calling on m_private which was not created yet.
&gt; You need to change GraphicsContext3D::isGLES2Compliant() to simply return a value, like other ports do.

I&apos;ll move the isGLES2Compliant() implementation in GC3DPrivate to GC3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734416</commentid>
    <comment_count>19</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-04 00:11:09 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 166164 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:43
&gt; &gt; &gt;&gt; +    if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext)
&gt; &gt; &gt; 
&gt; &gt; &gt; There seems to be an inconsistency here. GraphicsContext3D::createForCurrentGLContext() sets renderStyle to GraphicsContext3D::RenderToCurrentGLContext.
&gt; &gt; &gt; So we always return here without creating a GL context.
&gt; &gt; 
&gt; &gt; That seems generally correct, doesn&apos;t it? There&apos;s no surface, etc. to create in that case, no?
&gt; The context that we are supposed to create here is used as key for the hash table. Not creating one, as proposed by this patch, triggers ASSERT in debug builds.

I should set m_evasGLContext and m_surface to the current values, but Evas doesn&apos;t provide any APIs to query them :(
I guess I&apos;ll just have to query the current context and surface using egl in GC3D and set the GC3DPrivate values with them.
(EvasGL and EGL APIs can&apos;t be used in the same source files so I&apos;ll need to call the EGL functions from GC3DEfl.cpp)
Do you think that will be okay? Or do you have another suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735209</commentid>
    <comment_count>20</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-04 18:22:12 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (From update of attachment 166164 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:43
&gt; &gt; &gt; &gt;&gt; +    if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; There seems to be an inconsistency here. GraphicsContext3D::createForCurrentGLContext() sets renderStyle to GraphicsContext3D::RenderToCurrentGLContext.
&gt; &gt; &gt; &gt; So we always return here without creating a GL context.
&gt; &gt; &gt; 
&gt; &gt; &gt; That seems generally correct, doesn&apos;t it? There&apos;s no surface, etc. to create in that case, no?
&gt; &gt; The context that we are supposed to create here is used as key for the hash table. Not creating one, as proposed by this patch, triggers ASSERT in debug builds.
&gt; I should set m_evasGLContext and m_surface to the current values, but Evas doesn&apos;t provide any APIs to query them :(
&gt; I guess I&apos;ll just have to query the current context and surface using egl in GC3D and set the GC3DPrivate values with them.
Actually, it will be glX functions for OpenGL and EGL functions for OpenGL ES.

&gt; (EvasGL and EGL APIs can&apos;t be used in the same source files so I&apos;ll need to call the EGL functions from GC3DEfl.cpp)
&gt; Do you think that will be okay? Or do you have another suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736171</commentid>
    <comment_count>21</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-10-05 19:23:14 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (From update of attachment 166164 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; I should set m_evasGLContext and m_surface to the current values, but Evas doesn&apos;t provide any APIs to query them :(
&gt; I guess I&apos;ll just have to query the current context and surface using egl in GC3D and set the GC3DPrivate values with them.
&gt; (EvasGL and EGL APIs can&apos;t be used in the same source files so I&apos;ll need to call the EGL functions from GC3DEfl.cpp)
&gt; Do you think that will be okay? Or do you have another suggestion?
That sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736618</commentid>
    <comment_count>22</comment_count>
      <attachid>167522</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-08 04:01:23 -0700</bug_when>
    <thetext>Created attachment 167522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736619</commentid>
    <comment_count>23</comment_count>
      <attachid>167522</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-08 04:02:09 -0700</bug_when>
    <thetext>Comment on attachment 167522
Patch

Patch with suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736620</commentid>
    <comment_count>24</comment_count>
      <attachid>167522</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-08 04:02:11 -0700</bug_when>
    <thetext>Comment on attachment 167522
Patch

Patch with suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736655</commentid>
    <comment_count>25</comment_count>
      <attachid>167522</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-08 06:32:17 -0700</bug_when>
    <thetext>Comment on attachment 167522
Patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:56
&gt; +    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
&gt; +    , m_attrs(attrs)
&gt; +    , m_texture(0)
&gt; +    , m_compositorTexture(0)
&gt; +    , m_fbo(0)
&gt; +#if USE(OPENGL_ES_2)
&gt; +    , m_depthBuffer(0)
&gt; +    , m_stencilBuffer(0)
&gt; +#endif

So some of the GLES2 support is build in using ifdefs and some is runtime? isGLES2Compliant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737277</commentid>
    <comment_count>26</comment_count>
      <attachid>167522</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-08 17:55:15 -0700</bug_when>
    <thetext>Comment on attachment 167522
Patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:25
&gt; +#if USE(OPENGL_ES_2)

It looks WebKit prefers to place #if macro below include list as below,

#include &quot;GraphicsContext3DPrivate.h&quot;
#include &quot;ImageData.h&quot;
#include &quot;NotImplemented.h&quot;
#include &quot;OpenGLShims.h&quot;
#include &quot;PlatformContextCairo.h&quot;
#include &lt;GL/glx.h&gt;

#if USE(OPENGL_ES_2)
#include &quot;Extensions3DOpenGLES.h&quot;
#else
#include &quot;Extensions3DOpenGL.h&quot;
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737334</commentid>
    <comment_count>27</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-08 18:50:57 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 167522 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167522&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:56
&gt; &gt; +    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
&gt; &gt; +    , m_attrs(attrs)
&gt; &gt; +    , m_texture(0)
&gt; &gt; +    , m_compositorTexture(0)
&gt; &gt; +    , m_fbo(0)
&gt; &gt; +#if USE(OPENGL_ES_2)
&gt; &gt; +    , m_depthBuffer(0)
&gt; &gt; +    , m_stencilBuffer(0)
&gt; &gt; +#endif
&gt; So some of the GLES2 support is build in using ifdefs and some is runtime? isGLES2Compliant?

The implementation of isGLES2Compliant() is actually defined using ifdefs.
I think the API exists to keep the ifdefs local (in platform/graphics).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737349</commentid>
    <comment_count>28</comment_count>
      <attachid>167671</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-08 19:14:02 -0700</bug_when>
    <thetext>Created attachment 167671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737351</commentid>
    <comment_count>29</comment_count>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-08 19:14:45 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 167522 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167522&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:25
&gt; &gt; +#if USE(OPENGL_ES_2)
&gt; It looks WebKit prefers to place #if macro below include list as below,
&gt; #include &quot;GraphicsContext3DPrivate.h&quot;
&gt; #include &quot;ImageData.h&quot;
&gt; #include &quot;NotImplemented.h&quot;
&gt; #include &quot;OpenGLShims.h&quot;
&gt; #include &quot;PlatformContextCairo.h&quot;
&gt; #include &lt;GL/glx.h&gt;
&gt; #if USE(OPENGL_ES_2)
&gt; #include &quot;Extensions3DOpenGLES.h&quot;
&gt; #else
&gt; #include &quot;Extensions3DOpenGL.h&quot;
&gt; #endif

Changed the order if includes as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737472</commentid>
    <comment_count>30</comment_count>
      <attachid>167700</attachid>
    <who name="Regina Chung">heejin.r.chung</who>
    <bug_when>2012-10-09 00:01:57 -0700</bug_when>
    <thetext>Created attachment 167700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739297</commentid>
    <comment_count>31</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-10-10 14:22:46 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Created an attachment (id=167700) [details]
&gt; Patch
This looks like a good step in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739305</commentid>
    <comment_count>32</comment_count>
      <attachid>167700</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-10 14:34:02 -0700</bug_when>
    <thetext>Comment on attachment 167700
Patch

LGTM - probably a good starting point for further fixes if required. Quite red this patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739316</commentid>
    <comment_count>33</comment_count>
      <attachid>167700</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-10 14:56:00 -0700</bug_when>
    <thetext>Comment on attachment 167700
Patch

Let&apos;s land this and take it from there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739322</commentid>
    <comment_count>34</comment_count>
      <attachid>167700</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 15:07:41 -0700</bug_when>
    <thetext>Comment on attachment 167700
Patch

Clearing flags on attachment: 167700

Committed r130966: &lt;http://trac.webkit.org/changeset/130966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739323</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 15:07:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742041</commentid>
    <comment_count>36</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-10-15 07:54:21 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (From update of attachment 166164 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166164&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:43
&gt; &gt; &gt; &gt;&gt; +    if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; There seems to be an inconsistency here. GraphicsContext3D::createForCurrentGLContext() sets renderStyle to GraphicsContext3D::RenderToCurrentGLContext.
&gt; &gt; &gt; &gt; So we always return here without creating a GL context.
&gt; &gt; &gt; 
&gt; &gt; &gt; That seems generally correct, doesn&apos;t it? There&apos;s no surface, etc. to create in that case, no?
&gt; &gt; The context that we are supposed to create here is used as key for the hash table. Not creating one, as proposed by this patch, triggers ASSERT in debug builds.
&gt; 
&gt; I should set m_evasGLContext and m_surface to the current values, but Evas doesn&apos;t provide any APIs to query them :(
&gt; I guess I&apos;ll just have to query the current context and surface using egl in GC3D and set the GC3DPrivate values with them.
&gt; (EvasGL and EGL APIs can&apos;t be used in the same source files so I&apos;ll need to call the EGL functions from GC3DEfl.cpp)
&gt; Do you think that will be okay? Or do you have another suggestion?

This additional code was lost in the final patch.
Filed https://bugs.webkit.org/show_bug.cgi?id=99325 to add it back.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164049</attachid>
            <date>2012-09-13 22:36:47 -0700</date>
            <delta_ts>2012-09-16 23:34:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96627-20120914143640.patch</filename>
            <type>text/plain</type>
            <size>78546</size>
            <attacher name="Regina Chung">heejin.r.chung</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODU1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA5LTEzICBSZWdpbmEg
Q2h1bmcgIDxoZWVqaW4uci5jaHVuZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2Ug
dGhlIHNoYXJlYWJsZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCogaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYyNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgRUZM
IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNEKEdDM0QpIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTCouCisgICAgICAgIEl0IHdhcyBpbml0aWFsbHkgaW1wbGVtZW50ZWQg
aW4gYSBkaWZmZXJlbnQgd2F5LCBkdWUgdG8gY2hhcmFjdGVyaXN0aWNzIG9mIEV2YXMsCisgICAg
ICAgIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBjb21tb24gaW1wbGVtZW50YXRp
b24gYW5kIGZpbmQgYW5vdGhlciB3YXkKKyAgICAgICAgdG8gZGVhbCB3aXRoIEV2YXMsIGVzcGVj
aWFsbHkgYmVjYXVzZSBhbGwgdGhlIGR1cGxpY2F0ZWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmVkIGNhaXJvIGltcGxlbWVudGFpb24gb2YgR0MzRCBhbmQgYWRkZWQgZWZsIGZp
bGVzIHRvIFdlYkNvcmVfU09VUkNFUy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOiBNb2RpZmllZCBjb2RlIHNvIEdDM0RPcGVuR0wqIGNh
biBiZSB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNz
YWdlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
VG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOiBSZW1vdmVkIGZ1bmN0
aW9ucyBpbXBsZW1lbnRlZCBpbiBHQzNET3BlbkdMKgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzR0xFUzJDb21wbGlh
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oOiBSZW1vdmVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBHQzNE
T3BlbkdMKgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKwogMjAxMi0wOS0x
MyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBzdXNwZW5kL3Jl
c3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMgc2hvdWxkIGJlIGEgUkFJSSBvYmplY3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAxMjg0MTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5Miw4IEBA
IElGIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9EcmF3aW5nQnVmZmVyQ2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR0xDb250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEQ2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzREVmbC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAJKHJldmlzaW9uIDEy
ODQxNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzREVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDM1ICsxOCwxMzAgQEAKICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAj
aWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNp
ZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKKyNl
bHNlCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZW5kaWYKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLQogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0V2
YXNHTE9iamVjdCA9IChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7
Ci0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBpbnRlcm5hbCA9IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJEaXJl
Y3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICBpZiAoIWludGVybmFsKQotICAgICAgICByZXR1cm4g
MDsKLQogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5l
dyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKLSAg
ICBjb250ZXh0LT5tX3ByaXZhdGUgPSBpbnRlcm5hbC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGNv
bnRleHQucmVsZWFzZSgpOworICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0
LnJlbGVhc2UoKSA6IDA7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDog
bV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQotewotfQorICAgICwg
bV9jb21waWxlcihpc0dMRVMyQ29tcGxpYW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xf
T1VUUFVUKQorICAgICwgbV9hdHRycyhhdHRycykKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwg
bV9jb21wb3NpdG9yVGV4dHVyZSgwKQorICAgICwgbV9mYm8oMCkKKyNpZiBVU0UoT1BFTkdMX0VT
XzIpCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKKyNl
bmRpZgorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbGF5ZXJDb21wb3Np
dGVkKGZhbHNlKQorICAgICwgbV9pbnRlcm5hbENvbG9yRm9ybWF0KDApCisgICAgLCBtX2JvdW5k
RkJPKDApCisgICAgLCBtX2FjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApCisgICAgLCBtX2JvdW5k
VGV4dHVyZTAoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigw
KQorICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
dGhpcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKSkKK3sKKyAgICB2YWxpZGF0ZUF0dHJpYnV0
ZXMoKTsKKworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAg
ICAgIHN1Y2Nlc3MgPSBpbml0aWFsaXplT3BlbkdMRVNTaGltcygpOworI2Vsc2UKKyAgICAgICAg
c3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworI2VuZGlmCisgICAgICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIG1fcHJp
dmF0ZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmVuZGVy
U3R5bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKSB7CisgICAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZv
ciB0aGUgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8g
MSwgJm1fZmJvKTsKKworICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAg
ICAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmUpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAgICBn
bEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAgICAg
ICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcykgeworICAgICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIG1fYm91bmRGQk8gPSBt
X211bHRpc2FtcGxlRkJPOworICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8
fCBtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAm
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1f
Ym91bmRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICBpZiAo
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
ZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2ls
KQorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVy
KTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRl
cHRoKQorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRp
b24uCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1
aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291
cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3Bl
bkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2Nv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyNpZiAhVVNFKE9QRU5HTF9F
U18yKQorICAgIGdsRW5hYmxlKEdMX1BPSU5UX1NQUklURSk7CisgICAgZ2xFbmFibGUoR0xfVkVS
VEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CisjZW5kaWYKIAorICAgIGdsQ2xlYXJDb2xvcigwLjAs
IDAuMCwgMC4wLCAwLjApOworfQogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCgpCiB7CiB9CkBAIC01OSwxMyArMTU0LDE5IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
R3JhcGhpY3NDb250ZXgKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9y
bUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7CisjZWxz
ZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KICNlbmRp
ZgogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogeworICAg
IGlmICghbV9wcml2YXRlIHx8IG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250
ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiB9CiAKQEAgLTc0LDc4NSArMTc1LDYwIEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICAgICByZXR1cm4gbV9wcml2YXRlLT5pc0dMRVMy
Q29tcGxpYW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUo
R0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtX3ByaXZhdGUtPmFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1fcHJpdmF0
ZS0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbV9wcml2YXRlLT5iaW5kQXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCi17Ci0gICAgbV9wcml2YXRlLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9wcml2YXRlLT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVu
ZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIp
Ci17Ci0gICAgbV9wcml2YXRlLT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbV9wcml2YXRlLT5iaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVu
ZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUs
IEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZENvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJpdmF0ZS0+YmxlbmRFcXVhdGlvbihtb2Rl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBtX3ByaXZhdGUtPmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc3JjRmFjdG9yLCBHQzNEZW51bSBkc3RG
YWN0b3IpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEZ1bmMoc3JjRmFjdG9yLCBkc3RGYWN0b3Ip
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRz
dEFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UpCi17Ci0gICAgbV9wcml2YXRlLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQot
ewotICAgIG1fcHJpdmF0ZS0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkKLXsKLSAgICBtX3ByaXZhdGUtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUs
IGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtX3ByaXZhdGUtPmNsZWFyKG1hc2spOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBH
QzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0g
ICAgbV9wcml2YXRlLT5jbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQotewot
ICAgIG1fcHJpdmF0ZS0+Y2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IGNsZWFyVmFsdWUpCi17Ci0gICAgbV9wcml2YXRl
LT5jbGVhclN0ZW5jaWwoY2xlYXJWYWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVh
biBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBtX3ByaXZhdGUtPmNvbG9yTWFzayhy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9wcml2YXRlLT5j
b21waWxlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIG1fcHJpdmF0ZS0+Y29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlP
ZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4T2Zmc2V0LCB5T2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX3ByaXZhdGUt
PmN1bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMo
R0MzRGVudW0gZnVuYykKLXsKLSAgICBtX3ByaXZhdGUtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCi17Ci0g
ICAgbV9wcml2YXRlLT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAg
IG1fcHJpdmF0ZS0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1fcHJpdmF0ZS0+ZGV0YWNoU2hhZGVyKHByb2dyYW0s
IHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0g
Y2FwKQotewotICAgIG1fcHJpdmF0ZS0+ZGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0g
ICAgbV9wcml2YXRlLT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtX3ByaXZhdGUtPmRyYXdBcnJheXMobW9kZSwg
Zmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRz
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQpCi17Ci0gICAgbV9wcml2YXRlLT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51
bSBjYXApCi17Ci0gICAgbV9wcml2YXRlLT5lbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0g
ICAgbV9wcml2YXRlLT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCi17Ci0gICAgbV9wcml2YXRlLT5maW5pc2goKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQotewotICAgIG1fcHJpdmF0ZS0+
Zmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5k
ZXJidWZmZXJUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0
ZS0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZm
ZXJUYXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCi17
Ci0gICAgbV9wcml2YXRlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleFRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX3ByaXZhdGUtPmZyb250RmFjZSht
b2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVu
dW0gdGFyZ2V0KQotewotICAgIG1fcHJpdmF0ZS0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Z2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIGluZm8pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBs
YXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKLX0KLQotaW50IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCi17Ci0gICAg
bV9wcml2YXRlLT5nZXRCb29sZWFudihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0QnVm
ZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwot
fQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPmdldEVycm9yKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9w
cml2YXRlLT5nZXRGbG9hdHYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KHRhcmdldCwgYXR0YWNobWVudCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCog
dmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRJbnRlZ2VydihwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
X3ByaXZhdGUtPmdldFByb2dyYW1pdihwcm9ncmFtLCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQot
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0UHJvZ3JhbUluZm9Mb2co
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdl
dCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBwYXJhbU5h
bWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZv
TG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dFNoYWRlckluZm9Mb2coc2hhZGVyKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Z2V0U2hhZGVyU291cmNlKHNoYWRlcik7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0U3RyaW5nKG5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQ
YXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0
KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFy
YW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1
ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUp
Ci17Ci0gICAgbV9wcml2YXRlLT5nZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAg
bV9wcml2YXRlLT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQot
R0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBh
cmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFZlcnRleEF0
dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRWZXJ0ZXhBdHRyaWJpdihp
bmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLWxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lKQot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcGFy
YW1OYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2YXRlLT5oaW50KHRhcmdldCwgbW9kZSk7
Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0J1ZmZlcihvYmopOwotfQot
Ci1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkK
LXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0VuYWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmop
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNGcmFtZWJ1ZmZlcihvYmopOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3Qgb2Jq
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUHJvZ3JhbShvYmopOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBv
YmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNSZW5kZXJidWZmZXIob2JqKTsKLX0KLQot
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
b2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzU2hhZGVyKG9iaik7Ci19Ci0KLUdDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCBvYmop
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0dXJlKG9iaik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbV9wcml2
YXRlLT5saW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5r
UHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9wcml2YXRlLT5saW5r
UHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9y
ZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+
cGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewot
ICAgIG1fcHJpdmF0ZS0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgbV9wcml2YXRlLT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQp
Ci17Ci0gICAgbV9wcml2YXRlLT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+c2Npc3Nv
cih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hh
ZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgbV9wcml2YXRlLT5zaGFkZXJTb3VyY2UocHJvZ3JhbSwgc3RyaW5nKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsRnVuYyhmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1Nl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWlu
dCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhH
QzNEdWludCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNE
ZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbV9wcml2
YXRlLT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZv
aWQqIHBpeGVscykKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50ZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewot
ICAgIG1fcHJpdmF0ZS0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+
dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpCi17Ci0gICAgbV9wcml2YXRlLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCB4KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9u
LCBHR0MzRHNpemVpIHNpemUsIEMzRGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9y
bTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpCi17Ci0gICAgbV9wcml2YXRlLT51
bmlmb3JtMWkobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEaW50KiB2KQotewot
ICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZv
cm0yZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAg
bV9wcml2YXRlLT51bmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBH
QzNEaW50KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1fcHJp
dmF0ZS0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0
aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KQotewotICAgIG1fcHJpdmF0ZS0+
dW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCog
dikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAg
bV9wcml2YXRlLT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBHQzNEZmxvYXQqIHYpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGZ2KGxvY2F0aW9u
LCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykK
LXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIHNpemUsIEdDM0RpbnQqIHYpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGl2KGxv
Y2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBt
X3ByaXZhdGUtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0Rm
bG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9wcml2YXRlLT51
c2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1fcHJpdmF0ZS0+dmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpCi17Ci0gICAgbV9wcml2YXRl
LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0g
ICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHkpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIyZihpbmRl
eCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0
ZXhBdHRyaWIyZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHgs
IHksIHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4
QXR0cmliM2Z2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWI0
ZihpbmRleCwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9w
cml2YXRlLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT52
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJr
TGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciosIERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVC
dWZmZXIoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLX0KLQotUGxhdGZv
cm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJh
Y2s+KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQog
Ci1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KQogewotICAgIHJldHVybiBtX3ByaXZh
dGUtPmNyZWF0ZVNoYWRlcih0eXBlKTsKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRv
Q2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwg
aW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIFBsYXRm
b3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0
ZVRleHR1cmUoKTsKLX0KKyAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlV2lkdGggPD0gMCB8
fCBpbWFnZUhlaWdodCA8PSAwIHx8IGNhbnZhc1dpZHRoIDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9
IDAgfHwgIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0
ZS0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7Ci19CisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5j
cigpOworICAgIGNvbnRleHQtPnNhdmUoKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9wcml2YXRl
LT5kZWxldGVGcmFtZWJ1ZmZlcihidWZmZXIpOwotfQorICAgIGNhaXJvX3JlY3RhbmdsZShjciwg
MCwgMCwgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoY3IpOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBtX3ByaXZhdGUtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19CisgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGltYWdlUGl4ZWxzKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VXaWR0aCwgaW1hZ2VI
ZWlnaHQsIGltYWdlV2lkdGggKiA0KSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUt
PmRlbGV0ZVJlbmRlcmJ1ZmZlcihidWZmZXIpOwotfQorICAgIC8vIE9wZW5HTCBrZWVwcyB0aGUg
cGl4ZWxzIHN0b3JlZCBib3R0b20gdXAsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgaW1hZ2UgaGVy
ZS4KKyAgICBjYWlyb190cmFuc2xhdGUoY3IsIDAsIGltYWdlSGVpZ2h0KTsKKyAgICBjYWlyb19z
Y2FsZShjciwgMSwgLTEpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9wcml2YXRlLT5kZWxldGVTaGFkZXIo
c2hhZGVyKTsKLX0KKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09W
RVIpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgaW1hZ2VTdXJmYWNlLmdldCgp
LCAwLCAwKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1dpZHRoLCAtY2Fu
dmFzSGVpZ2h0KTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbV9wcml2YXRlLT5kZWxldGVUZXh0dXJlKHRl
eHR1cmUpOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJy
b3IpCi17Ci0gICAgbV9wcml2YXRlLT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci19Ci0KLUV4
dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEV4dGVuc2lvbnMoKTsKLX0KLQotSW50U2l6ZSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAorI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJm
YWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIEludFNpemUoKTsKIH0KKyNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
ZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCisj
aWYgIVVTRShPUEVOR0xfRVNfMikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFk
ZXJDb21waWxlcigpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCiBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxl
LCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMs
IGludCBwaXhlbHNTaXplKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAkocmV2aXNp
b24gMTI4NDE2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDkzICsyMCw4MyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0KICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5k
b3cuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRF
ZmwuaCIKLQorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzX0dMLmg+CiAj
aW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotewotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU+IGludGVybmFsID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSgpKTsKLQotICAgIGlmICghaW50ZXJuYWwtPmluaXRpYWxpemUoYXR0cmlidXRlcywgaG9zdFdp
bmRvdywgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBpbnRlcm5hbC5yZWxlYXNlKCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKLSAgICA6IG1fYm91bmRGQk8o
MCkKLSAgICAsIG1fYm91bmRUZXh0dXJlKDApCi0gICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkK
K0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCisgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQogICAgICwgbV9ldmFzR0woMCkKLSAg
ICAsIG1fY29udGV4dCgwKQorICAgICwgbV9ldmFzR0xDb250ZXh0KDApCiAgICAgLCBtX3N1cmZh
Y2UoMCkKICAgICAsIG1fYXBpKDApCiB7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCi17Ci0gICAgaWYgKCFtX2V2YXNHTCkKKyAgICBp
ZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgZXZh
c19nbF9zdXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0wsIG1fc3VyZmFjZSk7Ci0KLSAgICBpZiAobV9j
b250ZXh0KQotICAgICAgICBldmFzX2dsX2NvbnRleHRfZGVzdHJveShtX2V2YXNHTCwgbV9jb250
ZXh0KTsKLQotICAgIGV2YXNfZ2xfZnJlZShtX2V2YXNHTCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCi17Ci0gICAgUGFnZUNsaWVudEVmbCogcGFnZUNsaWVudCA9IHN0YXRpY19j
YXN0PFBhZ2VDbGllbnRFZmwqPihob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Cisg
ICAgRXZhcyogZXZhcyA9IDA7CisgICAgaWYgKG1faG9zdFdpbmRvdyAmJiBtX2hvc3RXaW5kb3ct
PnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7CisgICAgICAgIC8vIFdlYktpdDEgY29kZSBwYXRoLgor
ICAgICAgICAvLyBGSVhNRTogUmV0cml2ZSBldmFzIG9iamVjdCBmcm9tIHBsYXRmb3JtUGFnZUNs
aWVudC0+dmlldygpLgorICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgRXZhcyogZXZhcyA9
IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHBhZ2VDbGllbnQtPnZpZXcoKSk7CisgICAgLy8gRm9yIFdl
YktpdDIsIHdlIG5lZWQgdG8gY3JlYXRlIGEgZHVtbXkgZWNvcmVFdmFzIG9iamVjdCBmb3IgdGhl
IFdlYlByb2Nlc3MgaW4gb3JkZXIgdG8gdXNlIEV2YXNHTCBBUElzLgorICAgIGVjb3JlX2V2YXNf
aW5pdCgpOworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZ2xfeDExX25l
dygwLCAwLCAwLCAwLCAxLCAxKTsKKyAgICBpZiAoIWVjb3JlRXZhcykKKyAgICAgICAgcmV0dXJu
OworICAgIGV2YXMgPSBlY29yZV9ldmFzX2dldChlY29yZUV2YXMpOworICAgIGlmICghZXZhcykK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNfR0wgb2JqZWN0IGZv
ciBnbCByZW5kZXJpbmcgb24gZWZsLgogICAgIG1fZXZhc0dMID0gZXZhc19nbF9uZXcoZXZhcyk7
CiAgICAgaWYgKCFtX2V2YXNHTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm47CiAKICAgICAvLyBHZXQgdGhlIEFQSSBmb3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KICAg
ICAvLyBUaGlzIHJldHVybnMgYSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5H
TCBmdW5jdGlvbnMgd2UgY2FuIHVzZSB0byByZW5kZXIgaW4gRXZhcwogICAgIG1fYXBpID0gZXZh
c19nbF9hcGlfZ2V0KG1fZXZhc0dMKTsKICAgICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBFdmFzX0dMX0NvbnRleHQqIHNoYXJlQ29udGV4dCA9IDA7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gR0MzRCB3aXRoIFJlbmRlck9mZnNj
cmVlbiBzdHlsZSBmb3IgV2ViR0wgaGFzIHRvIGJlIHNoYXJlZCB3aXRoIEFDJ3MgY29udGV4dCB3
aGVuIEFDIGlzIGVuYWJsZWQuCi0gICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IHBhZ2VDbGllbnQtPmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICAgICAgc2hhcmVDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXZhc19HTF9Db250ZXh0Kj4oY29udGV4
dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICB9Ci0jZW5kaWYKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgY29udGV4dAotICAgIG1fY29udGV4dCA9IGV2YXNf
Z2xfY29udGV4dF9jcmVhdGUobV9ldmFzR0wsIHNoYXJlQ29udGV4dCk7Ci0gICAgaWYgKCFtX2Nv
bnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2V2YXNHTENvbnRleHQgPSBldmFz
X2dsX2NvbnRleHRfY3JlYXRlKG1fZXZhc0dMLCAwKTsKKyAgICBpZiAoIW1fZXZhc0dMQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgc3VyZmFjZQotICAgIGlmICgh
Y3JlYXRlU3VyZmFjZShwYWdlQ2xpZW50LCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWNyZWF0ZVN1cmZhY2UoMCwgcmVuZGVyU3R5
bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCit7CisgICAgaWYg
KCFtX2V2YXNHTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAg
ICAgZXZhc19nbF9zdXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0wsIG1fc3VyZmFjZSk7CiAKLSAgICBy
ZXR1cm4gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZXZhc0dMQ29udGV4dCkKKyAg
ICAgICAgZXZhc19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMQ29udGV4dCk7
CisKKyAgICBldmFzX2dsX2ZyZWUobV9ldmFzR0wpOwogfQogCisKIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRFZmwqIHBhZ2VDbGllbnQsIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiB7CiAgICAgLy8gSWYgUmVuZGVyU3R5bGUg
aXMgUmVuZGVyT2Zmc2NyZWVuLCB3ZSB3aWxsIGJlIHJlbmRlcmluZyB0byBhIEZCTywKQEAgLTEx
Nyw4ICsxMDcsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cgog
ICAgIGludCBoZWlnaHQgPSAxOwogCiAgICAgLy8gQnV0LCBpbiBjYXNlIG9mIFJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93LCB3ZSBoYXZlIHRvIHJlbmRlciB0byBhIHJlbmRlciB0YXJnZXQgc3Vy
ZmFjZSB3aXRoIHRoZSBzYW1lIHNpemUgYXMgb3VyIHdlYlZpZXcuCi0gICAgaWYgKHJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQocGFn
ZUNsaWVudC0+dmlldygpLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgaWYgKHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KSB7CisgICAgICAgIGlmICghcGFnZUNsaWVudCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IEdldCBnZW9tZXRyeSBvZiB3
ZWJWaWV3IGFuZCBzZXQgc2l6ZSBvZiB0YXJnZXQgc3VyZmFjZS4KKyAgICB9CiAKICAgICBFdmFz
X0dMX0NvbmZpZyBjb25maWcgPSB7CiAgICAgICAgIEVWQVNfR0xfUkdCQV84ODg4LApAQCAtMTM4
LDk5MiArMTMxLDM3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXIK
ICAgICAgICAgLy8gRmlsbCBpbiB0aGUgTmF0aXZlIFN1cmZhY2UgaW5mb3JtYXRpb24gZnJvbSB0
aGUgZ2l2ZW4gRXZhcyBHTCBzdXJmYWNlLgogICAgICAgICBldmFzX2dsX25hdGl2ZV9zdXJmYWNl
X2dldChtX2V2YXNHTCwgbV9zdXJmYWNlLCAmbmF0aXZlU3VyZmFjZSk7CiAKLSAgICAgICAgLy8g
Q3JlYXRlIGFuZCBzcGVjaWFsbHkgc2V0IHVwIGEgZXZhc19vYmplY3Qgd2hpY2ggYWN0IGFzIHRo
ZSByZW5kZXIgdGFyZ2VyIHN1cmZhY2UuCi0gICAgICAgIGlmICghcGFnZUNsaWVudC0+Y3JlYXRl
RXZhc09iamVjdEZvckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoJm5hdGl2ZVN1cmZhY2UsIEludFJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyBGSVhNRTogQ3JlYXRlIGFuZCBzcGVjaWFsbHkgc2V0IHVwIGEgZXZhc19vYmplY3Qg
d2hpY2ggYWN0IGFzIHRoZSByZW5kZXIgdGFyZ2VyIHN1cmZhY2UuCiAgICAgfQogI2VuZGlmCisK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbnRleHQ7CisgICAgcmV0dXJuIG1fZXZhc0dMQ29udGV4dDsKIH0KIAog
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0g
ICAgcmV0dXJuIGV2YXNfZ2xfbWFrZV9jdXJyZW50KG1fZXZhc0dMLCBtX3N1cmZhY2UsIG1fY29u
dGV4dCk7CisgICAgcmV0dXJuIGV2YXNfZ2xfbWFrZV9jdXJyZW50KG1fZXZhc0dMLCBtX3N1cmZh
Y2UsIG1fZXZhc0dMQ29udGV4dCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAg
cmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEFjdGl2ZVRleHR1
cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphdHRhY2hT
aGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xBdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJp
bmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmluZEJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwot
Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRBcnJh
eUJ1ZmZlciA9IGJ1ZmZlcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJp
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZm
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIg
IT0gbV9ib3VuZEZCTykgewotICAgICAgICBtX2FwaS0+Z2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0
LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBmcmFtZWJ1ZmZlcjsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kUmVuZGVyYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGJ1ZmZl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwot
ICAgIG1fYm91bmRUZXh0dXJlID0gdGV4dHVyZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdD
M0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsZW5kRXF1YXRpb24oR0MzRGVu
dW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVu
ZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Ymxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmJsZW5kRnVuYyhHQzNEZW51bSBzcmNGYWN0b3IsIEdDM0RlbnVtIGRzdEZhY3Rv
cikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZEZ1bmMo
c3JjRmFjdG9yLCBkc3RGYWN0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdD
M0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQnVmZmVyU3Vi
RGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENoZWNr
RnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbENsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwg
R0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y2xlYXJEZXB0aChHQzNEY2xh
bXBmIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENs
ZWFyRGVwdGhmKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNs
ZWFyU3RlbmNpbChHQzNEaW50IGNsZWFyVmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsQ2xlYXJTdGVuY2lsKGNsZWFyVmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENvbG9yTWFzayhyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb21w
aWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENvcHlUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0Rp
bnQgeU9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xD
b3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmN1bGxG
YWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0Rj
bGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xE
ZXB0aFJhbmdlZih6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xE
ZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmRpc2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZHJh
d0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRHJhd0FycmF5cyhtb2Rl
LCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZHJh
d0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5k
ZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xG
aW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmZsdXNoKCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xGbHVzaCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJU
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwg
YXR0YWNobWVudCwgcmVuZGVyYnVmZmVyVGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1l
bnQsIHRleFRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdlbmVyYXRlTWlwbWFwKHRh
cmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAwOwotICAg
IG1fYXBpLT5nbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9M
RU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIW1heE5hbWVMZW5ndGgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9wdEFycmF5
UHRyKG5ldyBjaGFyW21heE5hbWVMZW5ndGhdKTsKLSAgICBpZiAoIW5hbWUpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7
Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIG1fYXBpLT5nbEdldEFjdGl2ZUF0dHJpYihwcm9n
cmFtLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmdl
dCgpKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5m
by5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lLmdldCgpLCBsZW5ndGgpOwotICAgIGluZm8u
dHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsK
LSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAwOwotICAgIG1fYXBpLT5n
bEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4
TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFtYXhOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBPd25BcnJheVB0cjxjaGFyPiBuYW1lID0gYWRvcHRBcnJheVB0cihuZXcgY2hh
clttYXhOYW1lTGVuZ3RoXSk7Ci0gICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgR0xzaXplaSBsZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51
bSB0eXBlID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4
LCBtYXhOYW1lTGVuZ3RoLCAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZ2V0KCkpOwotICAg
IGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbmZvLm5hbWUgPSBT
dHJpbmc6OmZyb21VVEY4KG5hbWUuZ2V0KCksIGxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlw
ZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9y
bTNET2JqZWN0KiBzaGFkZXJzKQorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291
bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5n
bEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRCb29sZWFudihHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xHZXRCb29sZWFudihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBh
cmFtTmFtZSwgdmFsdWUpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1
cm4gbV9hdHRyaWJ1dGVzOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewot
ICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fc3ludGhldGljRXJyb3JzLmZpcnN0KCk7Ci0gICAg
ICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpKTsK
LSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiBtX2FwaS0+Z2xHZXRFcnJvcigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRGbG9h
dHYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwYXJhbU5hbWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEludGVnZXJ2KEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsR2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFByb2dyYW1pdihwcm9ncmFtLCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdU
SCwgJmxvZ0xlbmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0QXJyYXlQdHIobmV3IGNo
YXJbbG9nTGVuZ3RoXSk7Ci0gICAgaWYgKCFsb2cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIEdMaW50IHJldHVybmVkTG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRQcm9n
cmFtSW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nLmdl
dCgpKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0K
LSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChsb2cuZ2V0KCksIHJldHVybmVk
TG9nTGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwg
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
ZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbG9nTGVu
Z3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4
dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmIChsb2dMZW5ndGggPD0g
MSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9n
ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAgICBpZiAoIWxvZykKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJuZWRMb2dMZW5ndGggPSAw
OwotICAgIG1fYXBpLT5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1
cm5lZExvZ0xlbmd0aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVy
bmVkTG9nTGVuZ3RoICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRG
OChsb2cuZ2V0KCksIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBH
TGludCBsb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRlcml2KHNoYWRlciwgR0xf
U0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmIChsb2dMZW5ndGggPD0g
MSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9n
ID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAgICBpZiAoIWxvZykKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJuZWRMb2dMZW5ndGggPSAw
OwotICAgIG1fYXBpLT5nbEdldFNoYWRlclNvdXJjZShzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVy
bmVkTG9nTGVuZ3RoLCBsb2cuZ2V0KCkpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJu
ZWRMb2dMZW5ndGggKyAxKTsKLQotICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4
KGxvZy5nZXQoKSwgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFN0cmluZyhHQzNEZW51bSBuYW1l
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9hcGktPmdsR2V0U3RyaW5nKG5hbWUpKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJn
ZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFVuaWZvcm1mdihwcm9ncmFtLCBs
b2NhdGlvbiwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0
VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0
VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZs
b2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xH
ZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwg
R0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcGFyYW1OYW1l
LCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdl
dFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZvaWQqIHBvaW50ZXIgPSAwOwotICAg
IG1fYXBpLT5nbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUsICZwb2lu
dGVyKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHQzNEc2l6ZWlwdHI+KHBvaW50ZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aGludChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc0J1ZmZlcihidWZmZXIp
OwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1f
YXBpLT5nbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNQcm9ncmFtKHByb2dyYW0pOwot
fQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzUmVuZGVyYnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwot
fQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBtX2FwaS0+Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzVGV4dHVy
ZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmxpbmVXaWR0
aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBhcmFt
TmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xQaXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZs
b2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFBv
bHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCog
ZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIG1fYXBpLT5nbEZsdXNo
KCk7Ci0gICAgbV9hcGktPmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTYW1wbGVDb3ZlcmFn
ZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNj
aXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTY2lzc29y
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBjb25zdCBjaGFyKiBzdHIg
PSBzdHJpbmcudXRmOCgpLmRhdGEoKTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgp
OwotICAgIG1fYXBpLT5nbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzdHIsICZsZW5ndGgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbEZ1bmMoR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbEZ1bmNTZXBhcmF0
ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xT
dGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpGYWlsLCBHQzNE
ZW51bSB6UGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xT
dGVuY2lsT3AoZmFpbCwgekZhaWwsIHpQYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWws
IEdDM0RlbnVtIHpGYWlsLCBHQzNEZW51bSB6UGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6RmFpbCwg
elBhc3MpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0RmbG9hdCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHBhcmFt
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9m
ZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZz
ZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xVbmlmb3JtMWYobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xV
bmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0xaShsb2NhdGlv
biwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWl2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3Jt
MmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0yZihsb2NhdGlvbiwgeCwg
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0yZnYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0y
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJpdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTNmKGxvY2F0aW9u
LCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0z
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogYXJyYXkpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTNmdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50
IHopCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTNp
KGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0z
aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGYobG9jYXRpb24sIHgsIHksIHosIHcpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtNGkoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm00aShsb2NhdGlv
biwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlm
b3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGl2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1
bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJh
bnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlm
b3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNw
b3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1c2VQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWYWxpZGF0ZVBy
b2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0
ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHgsIHksIHopOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHgs
IHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0
cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZhbHVl
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA8
PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBs
YXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVCdWZmZXIoKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
ID0gMDsKLSAgICBtX2FwaS0+Z2xHZW5CdWZmZXJzKDEsICZidWZmZXIpOwotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIgPSAwOwotICAgIG1fYXBpLT5nbEdlbkZyYW1lYnVmZmVycygx
LCAmYnVmZmVyKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENyZWF0ZVByb2dyYW0oKTsKLX0KLQot
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXI7Ci0gICAgbV9hcGktPmdsR2VuUmVuZGVyYnVmZmVycygxLCAmYnVmZmVyKTsKLSAg
ICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHNoYWRlclR5cGUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENyZWF0ZVNoYWRlcihzaGFkZXJU
eXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgdGV4dHVyZTsKLSAgICBtX2FwaS0+Z2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7
Ci0gICAgcmV0dXJuIHRleHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgaWYgKGZyYW1lYnVmZmVyID09IG1fYm91bmRGQk8pIHsKLSAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZwotICAg
ICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KLSAgICAgICAgYmluZEZy
YW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgbV9hcGktPmdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVQcm9ncmFtKHByb2dyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVsZXRlUmVuZGVyYnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVUZXh0dXJlcygxLCAmdGV4
dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzeW50aGVzaXplR0xF
cnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3Ip
OwotfQotCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RXh0ZW5z
aW9ucygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQorI2Vu
ZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1Mp
IHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmgJKHJldmlzaW9uIDEyODQxNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIsMTUgKzIyLDI2IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCi0j
aW5jbHVkZSA8RXZhc19HTC5oPgorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpbmNsdWRl
IDx0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KKyNlbmRpZgogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTCAgICAgICAgICAgICAgIEV2YXNf
R0w7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlICAgICAgIEV2YXNfR0xfU3VyZmFj
ZTsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgICAgICAgRXZhc19HTF9Db250ZXh0
OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29uZmlnICAgICAgICBFdmFzX0dMX0NvbmZpZzsK
K3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0FQSSAgICAgICAgICAgRXZhc19HTF9BUEk7CiAKIGNs
YXNzIFBhZ2VDbGllbnRFZmw7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB7Citu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgICAgIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyCisjZW5kaWYKK3sKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCk7
CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdp
bmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAgICAgfkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZSgpOwogCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CkBAIC0zOCwxODYgKzQ5LDIxIEBAIHB1YmxpYzoK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCi0KKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKTsKKyNlbmRpZgogICAgIGJvb2wgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLQot
ICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKTsKLSAgICB2b2lkIGF0dGFj
aFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJsZW5k
Q29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwg
R0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUp
OwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0Rl
bnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc3JjRmFjdG9yLCBH
QzNEZW51bSBkc3RGYWN0b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0g
c3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RB
bHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKTsKLSAgICB2b2lkIGJ1ZmZlclN1
YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyLCBj
b25zdCB2b2lkKiBkYXRhKTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAg
ICB2b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0Rj
bGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBjbGVhckRlcHRoKEdDM0Rj
bGFtcGYgZGVwdGgpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgY2xlYXJWYWx1ZSk7
Ci0gICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwg
R0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpOwotICAgIHZvaWQgY29tcGlsZVNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIpOwotICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9p
ZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBm
dW5jKTsKLSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKTsKLSAgICB2b2lkIGRl
cHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKTsKLSAgICB2b2lkIGRl
dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lk
IGRpc2FibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQzNEdWludCBpbmRleCk7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9m
ZnNldCk7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpOwotICAgIHZvaWQgZmluaXNoKCk7Ci0g
ICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJUYXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFBs
YXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0Rl
bnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKLQot
ICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIHZv
aWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVp
IG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKTsK
LSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0Rib29sZWFuKiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgR0Mz
RGVudW0gZ2V0RXJyb3IoKTsKLSAgICB2b2lkIGdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldEludGVnZXJ2KEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7
Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZv
aWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFNoYWRlcml2KFBsYXRmb3Jt
M0RPYmplY3QsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIFN0cmlu
ZyBnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgU3RyaW5nIGdldFNo
YWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBTdHJpbmcgZ2V0U3RyaW5nKEdDM0Rl
bnVtIG5hbWUpOwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VGV4UGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKTsKLSAgICB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VW5pZm9ybWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFs
dWUpOwotICAgIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIGdl
dFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1
aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoUGxhdGZv
cm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7Ci0g
ICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNE
Ym9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNS
ZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RP
YmplY3QpOwotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0gICAgdm9pZCBsaW5rUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBh
cmFtTmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9h
dCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHJlYWRQaXhlbHMoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKTsKLQotICAgIHZvaWQgcmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJh
Z2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsKLSAgICB2b2lkIHNjaXNz
b3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7Ci0gICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0
ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51
bSBmYWlsLCBHQzNEZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3MpOwotICAgIHZvaWQgc3RlbmNp
bE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gekZhaWws
IEdDM0RlbnVtIHpQYXNzKTsKLQotICAgIGJvb2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQgcGFyYW0pOwotICAg
IHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwg
R0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0gICAgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCB4KTsKLSAgICB2b2lkIHVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0y
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7Ci0gICAgdm9pZCB1bmlm
b3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGludCogdik7Ci0gICAgdm9p
ZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KTsKLSAgICB2b2lkIHVuaWZvcm0zaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lkIHVuaWZv
cm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9h
dCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZvcm00aShHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpOwotICAg
IHZvaWQgdW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYp
OwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogdmFsdWUpOwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAg
IHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4
QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsK
LSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1
ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwg
R0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50
IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGNyZWF0ZUJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlRnJhbWVidWZm
ZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3Jl
YXRlU2hhZGVyKEdDM0RlbnVtKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUo
KTsKLQotICAgIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQg
ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgc3lu
dGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpOwotCi0gICAgRXh0ZW5zaW9uczNEKiBnZXRF
eHRlbnNpb25zKCk7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7
Ci0KLSAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLQogICAg
IGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCByZW5kZXJEaXJlY3RseVRv
RXZhc0dMT2JqZWN0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0
cmlidXRlczsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9ib3VuZEZCTzsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fYm91bmRUZXh0dXJlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9ib3VuZEFy
cmF5QnVmZmVyOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgSG9zdFdp
bmRvdyogbV9ob3N0V2luZG93OwogCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhl
dGljRXJyb3JzOwogCiAgICAgRXZhc19HTCogbV9ldmFzR0w7Ci0gICAgRXZhc19HTF9Db250ZXh0
KiBtX2NvbnRleHQ7CisgICAgRXZhc19HTF9Db250ZXh0KiBtX2V2YXNHTENvbnRleHQ7CiAgICAg
RXZhc19HTF9TdXJmYWNlKiBtX3N1cmZhY2U7CiAgICAgRXZhc19HTF9BUEkqIG1fYXBpOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164343</attachid>
            <date>2012-09-16 23:34:50 -0700</date>
            <delta_ts>2012-09-28 01:01:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96627-20120917153448.patch</filename>
            <type>text/plain</type>
            <size>78562</size>
            <attacher name="Regina Chung">heejin.r.chung</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA5LTE2ICBSZWdpbmEg
Q2h1bmcgIDxoZWVqaW4uci5jaHVuZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2Ug
dGhlIHNoYXJlYWJsZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCogaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYyNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgRUZM
IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNEKEdDM0QpIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTCouCisgICAgICAgIEl0IHdhcyBpbml0aWFsbHkgaW1wbGVtZW50ZWQg
aW4gYSBkaWZmZXJlbnQgd2F5LCBkdWUgdG8gY2hhcmFjdGVyaXN0aWNzIG9mIEV2YXMsCisgICAg
ICAgIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBjb21tb24gaW1wbGVtZW50YXRp
b24gYW5kIGZpbmQgYW5vdGhlciB3YXkKKyAgICAgICAgdG8gZGVhbCB3aXRoIEV2YXMsIGVzcGVj
aWFsbHkgYmVjYXVzZSBhbGwgdGhlIGR1cGxpY2F0ZWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmVkIGNhaXJvIGltcGxlbWVudGFpb24gb2YgR0MzRCBhbmQgYWRkZWQgZWZsIGZp
bGVzIHRvIFdlYkNvcmVfU09VUkNFUy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOiBNb2RpZmllZCBjb2RlIHNvIEdDM0RPcGVuR0wqIGNh
biBiZSB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNz
YWdlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
VG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOiBSZW1vdmVkIGZ1bmN0
aW9ucyBpbXBsZW1lbnRlZCBpbiBHQzNET3BlbkdMKgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzR0xFUzJDb21wbGlh
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oOiBSZW1vdmVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBHQzNE
T3BlbkdMKgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKwogMjAxMi0wOS0x
NiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04g
KHIxMjY3NjMpOiBjc3MxL3BzZXVkby9maXJzdGxpbmUuaHRtbCBmYWlscyB3aGVuIHVzaW5nIHRo
ZSBjb21wbGV4IHRleHQgY29kZSBwYXRoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQko
cmV2aXNpb24gMTI4NzE1KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTI5MSw5ICsyOTEsOCBAQCBJRiAoV1RGX1VTRV8zRF9HUkFQSElDUykK
ICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvT3Bl
bkdMU2hpbXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNh
aXJvLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RFZmwuY3BwCShyZXZpc2lvbiAxMjg3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOCwzNSArMTgsMTI2IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RE9wZW5HTC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgi
Ci0KICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
IHsKLSAgICBib29sIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QgPSAocmVuZGVyU3R5bGUg
PT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotCi0gICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZT4gaW50ZXJuYWwgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCk7Ci0gICAg
aWYgKCFpbnRlcm5hbCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMs
IGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7Ci0gICAgY29udGV4dC0+bV9wcml2YXRlID0gaW50
ZXJuYWwucmVsZWFzZSgpOwotICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCiBHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBt
X2N1cnJlbnRIZWlnaHQoMCkKLXsKLX0KKyAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFu
dCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNMX09VVFBVVCkKKyAgICAsIG1fYXR0cnMoYXR0
cnMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKKyAg
ICAsIG1fZmJvKDApCisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICwgbV9kZXB0aEJ1ZmZlcigw
KQorICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCisjZW5kaWYKKyAgICAsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKKyAgICAsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCgwKQorICAgICwgbV9ib3VuZEZCTygwKQorICAgICwgbV9hY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKQorICAgICwgbV9ib3VuZFRleHR1cmUwKDApCisgICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCisg
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0
cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0
eWxlKSkpCit7CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoIW1fcHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRTaGltcyA9
IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGlmICghaW5pdGlh
bGl6ZWRTaGltcykgeworICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7
CisgICAgICAgIGluaXRpYWxpemVkU2hpbXMgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pIHsKKyAgICAgICAg
Ly8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgorICAgICAgICBnbEdlbkZyYW1l
YnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8pOworCisgICAgICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7CisgICAgICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVy
ZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIGdsVGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Cisg
ICAgICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7CisgICAgICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApOworCisgICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICAg
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICBnbEdlbkZyYW1lYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAg
ICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgICAgICBnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgICAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworI2lmIFVTRShPUEVOR0xfRVNf
MikKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9jb250
ZXh0LT5tX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNv
dXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisg
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3Jz
KTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMp
OworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywg
JkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3
YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMgPSAxOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KworI2lmICFVU0UoT1BFTkdMX0VTXzIpCisgICAgZ2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsK
KyAgICBnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKyNlbmRpZgogCisg
ICAgZ2xDbGVhckNvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7Cit9CiBHcmFwaGljc0NvbnRleHQz
RDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKIH0KQEAgLTU5LDEzICsxNTAsMjEgQEAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKIHsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgcmV0dXJuIG1f
cHJpdmF0ZS5nZXQoKTsKKyNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
MDsKKyNlbmRpZgogfQogI2VuZGlmCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250
ZXh0Q3VycmVudCgpCiB7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogfQogCkBAIC03NCw3ODUgKzE3Myw2MCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc0dMRVMyQ29tcGxpYW50CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNHTEVTMkNvbXBsaWFu
dCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmUpCi17Ci0gICAgbV9wcml2YXRlLT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX3ByaXZhdGUtPmF0dGFj
aFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fcHJpdmF0ZS0+YmluZEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewot
ICAgIG1fcHJpdmF0ZS0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+YmluZEZyYW1lYnVmZmVyKHRhcmdl
dCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAg
IG1fcHJpdmF0ZS0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1fcHJpdmF0ZS0+YmluZFRleHR1cmUodGFy
Z2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihH
QzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xh
bXBmIGFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBt
b2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEVxdWF0
aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNyY0ZhY3RvciwgR0MzRGVudW0gZHN0RmFjdG9yKQot
ewotICAgIG1fcHJpdmF0ZS0+YmxlbmRGdW5jKHNyY0ZhY3RvciwgZHN0RmFjdG9yKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdC
LCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkK
LXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNB
bHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewot
ICAgIG1fcHJpdmF0ZS0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBt
X3ByaXZhdGUtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0g
ICAgbV9wcml2YXRlLT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsK
LX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0MzRGVudW0gdGFyZ2V0KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXModGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0Mz
RGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbV9wcml2YXRlLT5jbGVhcihtYXNrKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1fcHJp
dmF0ZS0+Y2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtX3By
aXZhdGUtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhclN0ZW5jaWwoR0MzRGludCBjbGVhclZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Y2xlYXJT
dGVuY2lsKGNsZWFyVmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1h
c2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwg
R0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbV9wcml2YXRlLT5jb2xvck1hc2socmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1fcHJpdmF0ZS0+Y29tcGlsZVNo
YWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtX3ByaXZhdGUtPmNvcHlUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQot
ewotICAgIG1fcHJpdmF0ZS0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeE9mZnNl
dCwgeU9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2YXRlLT5jdWxsRmFj
ZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKEdDM0RlbnVt
IGZ1bmMpCi17Ci0gICAgbV9wcml2YXRlLT5kZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIG1fcHJp
dmF0ZS0+ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0
aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtX3ByaXZh
dGUtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKLXsKLSAgICBtX3ByaXZhdGUtPmRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsK
LSAgICBtX3ByaXZhdGUtPmRpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1fcHJp
dmF0ZS0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgY291bnQpCi17Ci0gICAgbV9wcml2YXRlLT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBj
b3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KQotewotICAgIG1fcHJpdmF0ZS0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZz
ZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQot
ewotICAgIG1fcHJpdmF0ZS0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1fcHJp
dmF0ZS0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1fcHJpdmF0ZS0+ZmluaXNoKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtX3ByaXZhdGUtPmZsdXNoKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVy
VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVyVGFyZ2V0
LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1
cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1f
cHJpdmF0ZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXhUYXJn
ZXQsIHRleHR1cmUsIGxldmVsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRG
YWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2YXRlLT5mcm9udEZhY2UobW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdl
dCkKLXsKLSAgICBtX3ByaXZhdGUtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBtX3By
aXZhdGUtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNE
T2JqZWN0KiBzaGFkZXJzKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0QXR0YWNoZWRTaGFkZXJzKHBy
b2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0QXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52
KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQotewotICAgIG1fcHJpdmF0
ZS0+Z2V0Qm9vbGVhbnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldEJ1ZmZlclBhcmFt
ZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLX0KLQotR0Mz
RGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5nZXRFcnJvcigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYo
R0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+
Z2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbV9wcml2YXRlLT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRl
LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbV9wcml2YXRlLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFt
TmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1
ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFNoYWRlcml2KHNoYWRlciwgcGFyYW1OYW1lLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTaGFkZXJJ
bmZvTG9nKHNoYWRlcik7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldFNoYWRlclNvdXJjZShzaGFkZXIpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0
cmluZyhuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVy
ZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUp
Ci17Ci0gICAgbV9wcml2YXRlLT5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0g
ICAgbV9wcml2YXRlLT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAg
IG1fcHJpdmF0ZS0+Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0
ZS0+Z2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRWZXJ0ZXhBdHRyaWJmdihp
bmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBh
cmFtTmFtZSwgdmFsdWUpOwotfQotCi1sb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSkKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBhcmFtTmFtZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBtb2RlKQotewotICAgIG1fcHJpdmF0ZS0+aGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1H
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBv
YmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNCdWZmZXIob2JqKTsKLX0KLQotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzRnJhbWVidWZmZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc1Byb2dyYW0ob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUmVuZGVyYnVmZmVyKG9iaik7Ci19Ci0KLUdDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1NoYWRlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBH
cmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzVGV4dHVyZShvYmopOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1fcHJpdmF0ZS0+bGlu
ZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1fcHJpdmF0ZS0+bGlua1Byb2dyYW0o
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtX3ByaXZhdGUtPnBpeGVsU3Rv
cmVpKHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5
Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtX3By
aXZhdGUtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lk
KiBkYXRhKQotewotICAgIG1fcHJpdmF0ZS0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQotewotICAgIG1fcHJpdmF0ZS0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Ft
cGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewotICAg
IG1fcHJpdmF0ZS0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtX3ByaXZhdGUtPnNjaXNzb3IoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJj
ZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAg
IG1fcHJpdmF0ZS0+c2hhZGVyU291cmNlKHByb2dyYW0sIHN0cmluZyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBH
QzNEdWludCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBt
YXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykK
LXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBt
YXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQg
bWFzaykKLXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFp
bCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1fcHJpdmF0ZS0+c3Rl
bmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVt
IHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxPcFNlcGFy
YXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKLXsKLSAgICBtX3By
aXZhdGUtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtX3ByaXZhdGUtPnRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIG1fcHJpdmF0ZS0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0
LCB5T2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0dDM0Rz
aXplaSBzaXplLCBDM0RmbG9hdCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0xZnYobG9j
YXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFp
KGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihH
QzNEaW50IGxvY2F0aW9uLCBHR0MzRHNpemVpIHNpemUsIEMzRGludCogdikKLXsKLSAgICBtX3By
aXZhdGUtPnVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMmZ2KGxv
Y2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJp
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5KQotewotICAgIG1fcHJpdmF0
ZS0+dW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCog
dikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikKLXsKLSAgICBtX3ByaXZhdGUtPnVu
aWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCog
dikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0z
aShsb2NhdGlvbiwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIHYpCi17Ci0g
ICAgbV9wcml2YXRlLT51bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQotewotICAgIG1fcHJpdmF0
ZS0+dW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0
aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpCi17Ci0gICAg
bV9wcml2YXRlLT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBHQzNEaW50KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTRpdihsb2NhdGlvbiwg
c2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm1NYXRyaXgyZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRl
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1fcHJpdmF0ZS0+dXNlUHJvZ3Jh
bShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX3ByaXZhdGUtPnZhbGlkYXRlUHJv
Z3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4
QXR0cmliMWYoaW5kZXgsIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJp
dmF0ZS0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdD
M0RmbG9hdCB5KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHgsIHkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmli
MmZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeikKLXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjNm
dihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEdDM0RmbG9hdCB3KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliNGYoaW5kZXgs
IHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+
dmVydGV4QXR0cmliNGZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdD
M0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdD
M0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliUG9pbnRlcihp
bmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+dmlld3BvcnQo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29t
cG9zaXRlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqLCBEcmF3aW5nQnVmZmVyKiBkcmF3
aW5nQnVmZmVyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBv
c2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkK
LXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIHJldHVybiBtX3By
aXZhdGUtPmNyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNl
dENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKIHsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKIH0KIAotUGxhdGZv
cm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQYXNzT3du
UHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPikKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVh
dGVTaGFkZXIodHlwZSk7CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVRleHR1cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhj
b25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFn
ZUhlaWdodCwgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBQbGF0Zm9ybUNvbnRl
eHRDYWlybyogY29udGV4dCkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVUZXh0dXJl
KCk7Ci19CisgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVdpZHRoIDw9IDAgfHwgaW1hZ2VI
ZWlnaHQgPD0gMCB8fCBjYW52YXNXaWR0aCA8PSAwIHx8IGNhbnZhc0hlaWdodCA8PSAwIHx8ICFj
b250ZXh0KQorICAgICAgICByZXR1cm47CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmRlbGV0
ZUJ1ZmZlcihidWZmZXIpOwotfQorICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+Y3IoKTsKKyAg
ICBjb250ZXh0LT5zYXZlKCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRl
RnJhbWVidWZmZXIoYnVmZmVyKTsKLX0KKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNh
bnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJ
Uk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNyKTsKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0g
ICAgbV9wcml2YXRlLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQorICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Y3JlYXRlX2Zvcl9kYXRhKAorICAgICAgICBjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFn
ZVBpeGVscyksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCBp
bWFnZVdpZHRoICogNCkpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9wcml2YXRlLT5kZWxldGVS
ZW5kZXJidWZmZXIoYnVmZmVyKTsKLX0KKyAgICAvLyBPcGVuR0wga2VlcHMgdGhlIHBpeGVscyBz
dG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGltYWdlIGhlcmUuCisgICAg
Y2Fpcm9fdHJhbnNsYXRlKGNyLCAwLCBpbWFnZUhlaWdodCk7CisgICAgY2Fpcm9fc2NhbGUoY3Is
IDEsIC0xKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7
Ci19CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKKyAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIGltYWdlU3VyZmFjZS5nZXQoKSwgMCwgMCk7
CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBjYW52YXNXaWR0aCwgLWNhbnZhc0hlaWdo
dCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlKQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsK
KyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQotewot
ICAgIG1fcHJpdmF0ZS0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwotfQotCi1FeHRlbnNpb25z
M0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5nZXRFeHRlbnNpb25zKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJ
bnRTaXplKCk7CiB9CisjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4
dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQorI2lmICFVU0Uo
T1BFTkdMX0VTXzIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGls
ZXIoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmli
dXRlcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciogcGl4ZWxzLCBpbnQgcGl4
ZWxzU2l6ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDEyODcx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5MyArMjAsODMgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKIAogI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50RWZsLmgiCi0K
KyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhc19HTC5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdykKLXsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
PiBpbnRlcm5hbCA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKSk7Ci0K
LSAgICBpZiAoIWludGVybmFsLT5pbml0aWFsaXplKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gaW50ZXJuYWwucmVsZWFzZSgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCi0gICAgOiBtX2JvdW5kRkJPKDApCi0gICAg
LCBtX2JvdW5kVGV4dHVyZSgwKQotICAgICwgbV9ib3VuZEFycmF5QnVmZmVyKDApCitHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fZXZhc0dMKDApCi0gICAgLCBtX2Nv
bnRleHQoMCkKKyAgICAsIG1fZXZhc0dMQ29udGV4dCgwKQogICAgICwgbV9zdXJmYWNlKDApCiAg
ICAgLCBtX2FwaSgwKQogewotfQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoKQotewotICAgIGlmICghbV9ldmFzR0wpCisgICAgaWYgKHJlbmRl
clN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGV2YXNfZ2xfc3Vy
ZmFjZV9kZXN0cm95KG1fZXZhc0dMLCBtX3N1cmZhY2UpOwotCi0gICAgaWYgKG1fY29udGV4dCkK
LSAgICAgICAgZXZhc19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fY29udGV4dCk7Ci0K
LSAgICBldmFzX2dsX2ZyZWUobV9ldmFzR0wpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQotewotICAgIFBhZ2VDbGllbnRFZmwqIHBhZ2VDbGllbnQgPSBzdGF0aWNfY2FzdDxQYWdl
Q2xpZW50RWZsKj4oaG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOworICAgIEV2YXMq
IGV2YXMgPSAwOworICAgIGlmIChtX2hvc3RXaW5kb3cgJiYgbV9ob3N0V2luZG93LT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKSkgeworICAgICAgICAvLyBXZWJLaXQxIGNvZGUgcGF0aC4KKyAgICAgICAg
Ly8gRklYTUU6IFJldHJpZXZlIGV2YXMgb2JqZWN0IGZyb20gcGxhdGZvcm1QYWdlQ2xpZW50LT52
aWV3KCkuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBFdmFzKiBldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQocGFnZUNsaWVudC0+dmlldygpKTsKKyAgICAvLyBGb3IgV2ViS2l0Miwg
d2UgbmVlZCB0byBjcmVhdGUgYSBkdW1teSBlY29yZUV2YXMgb2JqZWN0IGZvciB0aGUgV2ViUHJv
Y2VzcyBpbiBvcmRlciB0byB1c2UgRXZhc0dMIEFQSXMuCisgICAgZWNvcmVfZXZhc19pbml0KCk7
CisgICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0gZWNvcmVfZXZhc19nbF94MTFfbmV3KDAsIDAs
IDAsIDAsIDEsIDEpOworICAgIGlmICghZWNvcmVFdmFzKQorICAgICAgICByZXR1cm47CisgICAg
ZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KGVjb3JlRXZhcyk7CisgICAgaWYgKCFldmFzKQorICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTCBvYmplY3QgZm9yIGdsIHJl
bmRlcmluZyBvbiBlZmwuCiAgICAgbV9ldmFzR0wgPSBldmFzX2dsX25ldyhldmFzKTsKICAgICBp
ZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEdldCB0aGUgQVBJIGZvciByZW5kZXJpbmcgdXNpbmcgT3BlbkdMLgogICAgIC8vIFRo
aXMgcmV0dXJucyBhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgT3BlbkdMIGZ1bmN0
aW9ucyB3ZSBjYW4gdXNlIHRvIHJlbmRlciBpbiBFdmFzCiAgICAgbV9hcGkgPSBldmFzX2dsX2Fw
aV9nZXQobV9ldmFzR0wpOwogICAgIGlmICghbV9hcGkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEV2YXNfR0xfQ29udGV4dCogc2hhcmVDb250ZXh0ID0gMDsKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICAvLyBHQzNEIHdpdGggUmVuZGVyT2Zmc2NyZWVuIHN0
eWxlIGZvciBXZWJHTCBoYXMgdG8gYmUgc2hhcmVkIHdpdGggQUMncyBjb250ZXh0IHdoZW4gQUMg
aXMgZW5hYmxlZC4KLSAgICBpZiAoIXJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gcGFnZUNsaWVudC0+YWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQoKTsKLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBz
aGFyZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxFdmFzX0dMX0NvbnRleHQqPihjb250ZXh0LT5wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIH0KLSNlbmRpZgorICAgICAgICByZXR1cm47
CiAKICAgICAvLyBDcmVhdGUgYSBjb250ZXh0Ci0gICAgbV9jb250ZXh0ID0gZXZhc19nbF9jb250
ZXh0X2NyZWF0ZShtX2V2YXNHTCwgc2hhcmVDb250ZXh0KTsKLSAgICBpZiAoIW1fY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZXZhc0dMQ29udGV4dCA9IGV2YXNfZ2xfY29u
dGV4dF9jcmVhdGUobV9ldmFzR0wsIDApOworICAgIGlmICghbV9ldmFzR0xDb250ZXh0KQorICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgYSBzdXJmYWNlCi0gICAgaWYgKCFjcmVhdGVT
dXJmYWNlKHBhZ2VDbGllbnQsIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghY3JlYXRlU3VyZmFjZSgwLCByZW5kZXJTdHlsZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKK3sKKyAgICBpZiAoIW1fZXZh
c0dMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBldmFz
X2dsX3N1cmZhY2VfZGVzdHJveShtX2V2YXNHTCwgbV9zdXJmYWNlKTsKIAotICAgIHJldHVybiBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9ldmFzR0xDb250ZXh0KQorICAgICAgICBl
dmFzX2dsX2NvbnRleHRfZGVzdHJveShtX2V2YXNHTCwgbV9ldmFzR0xDb250ZXh0KTsKKworICAg
IGV2YXNfZ2xfZnJlZShtX2V2YXNHTCk7CiB9CiAKKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCogcGFnZUNsaWVudCwgYm9vbCByZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKIHsKICAgICAvLyBJZiBSZW5kZXJTdHlsZSBpcyBSZW5k
ZXJPZmZzY3JlZW4sIHdlIHdpbGwgYmUgcmVuZGVyaW5nIHRvIGEgRkJPLApAQCAtMTE3LDggKzEw
NywxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyCiAgICAgaW50
IGhlaWdodCA9IDE7CiAKICAgICAvLyBCdXQsIGluIGNhc2Ugb2YgUmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3csIHdlIGhhdmUgdG8gcmVuZGVyIHRvIGEgcmVuZGVyIHRhcmdldCBzdXJmYWNlIHdp
dGggdGhlIHNhbWUgc2l6ZSBhcyBvdXIgd2ViVmlldy4KLSAgICBpZiAocmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCi0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChwYWdlQ2xpZW50
LT52aWV3KCksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBpZiAocmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpIHsKKyAgICAgICAgaWYgKCFwYWdlQ2xpZW50KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGSVhNRTogR2V0IGdlb21ldHJ5IG9mIHdlYlZpZXcg
YW5kIHNldCBzaXplIG9mIHRhcmdldCBzdXJmYWNlLgorICAgIH0KIAogICAgIEV2YXNfR0xfQ29u
ZmlnIGNvbmZpZyA9IHsKICAgICAgICAgRVZBU19HTF9SR0JBXzg4ODgsCkBAIC0xMzgsOTkyICsx
MzEsMzggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cgogICAgICAg
ICAvLyBGaWxsIGluIHRoZSBOYXRpdmUgU3VyZmFjZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZl
biBFdmFzIEdMIHN1cmZhY2UuCiAgICAgICAgIGV2YXNfZ2xfbmF0aXZlX3N1cmZhY2VfZ2V0KG1f
ZXZhc0dMLCBtX3N1cmZhY2UsICZuYXRpdmVTdXJmYWNlKTsKIAotICAgICAgICAvLyBDcmVhdGUg
YW5kIHNwZWNpYWxseSBzZXQgdXAgYSBldmFzX29iamVjdCB3aGljaCBhY3QgYXMgdGhlIHJlbmRl
ciB0YXJnZXIgc3VyZmFjZS4KLSAgICAgICAgaWYgKCFwYWdlQ2xpZW50LT5jcmVhdGVFdmFzT2Jq
ZWN0Rm9yQWNjZWxlcmF0ZWRDb21wb3NpdGluZygmbmF0aXZlU3VyZmFjZSwgSW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IEZJWE1FOiBDcmVhdGUgYW5kIHNwZWNpYWxseSBzZXQgdXAgYSBldmFzX29iamVjdCB3aGljaCBh
Y3QgYXMgdGhlIHJlbmRlciB0YXJnZXIgc3VyZmFjZS4KICAgICB9CiAjZW5kaWYKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fY29udGV4dDsKKyAgICByZXR1cm4gbV9ldmFzR0xDb250ZXh0OwogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICByZXR1
cm4gZXZhc19nbF9tYWtlX2N1cnJlbnQobV9ldmFzR0wsIG1fc3VyZmFjZSwgbV9jb250ZXh0KTsK
KyAgICByZXR1cm4gZXZhc19nbF9tYWtlX2N1cnJlbnQobV9ldmFzR0wsIG1fc3VyZmFjZSwgbV9l
dmFzR0xDb250ZXh0KTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzR0xF
UzJDb21wbGlhbnQoKSBjb25zdAogeworI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmF0dGFjaFNoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEF0dGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmluZEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kQnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci0KLSAgICBp
ZiAodGFyZ2V0ID09IEdMX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVy
ID0gYnVmZmVyOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlciAhPSBtX2Jv
dW5kRkJPKSB7Ci0gICAgICAgIG1fYXBpLT5nbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1l
YnVmZmVyKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IGZyYW1lYnVmZmVyOwotICAgIH0KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci0gICAgbV9i
b3VuZFRleHR1cmUgPSB0ZXh0dXJlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1w
ZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJsZW5kRXF1YXRp
b24obW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGVuZEVxdWF0
aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJsZW5kRXF1YXRpb25TZXBhcmF0
ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6YmxlbmRGdW5jKEdDM0RlbnVtIHNyY0ZhY3RvciwgR0MzRGVudW0gZHN0RmFjdG9yKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJsZW5kRnVuYyhzcmNGYWN0
b3IsIGRzdEZhY3Rvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGVu
ZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0g
c3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBo
YSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
LCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2Fw
aS0+Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCdWZmZXJTdWJEYXRhKHRh
cmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsQ2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xh
bXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsQ2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVw
dGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ2xlYXJEZXB0
aGYoZGVwdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y2xlYXJTdGVu
Y2lsKEdDM0RpbnQgY2xlYXJWYWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xDbGVhclN0ZW5jaWwoY2xlYXJWYWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBn
cmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvbXBpbGVTaGFk
ZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ29weVRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENvcHlUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xD
dWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlcHRo
RnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbERlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbERlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6
RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlcHRoUmFu
Z2VmKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRl
dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERldGFjaFNo
YWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsRGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkcmF3QXJyYXlz
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0
LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkcmF3RWxlbWVu
dHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xE
cmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsRW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpmaW5p
c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEZpbmlzaCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Zmx1c2goKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlclRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2ht
ZW50LCByZW5kZXJidWZmZXJUYXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbEZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4
VGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xGcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFjdGl2ZUF0dHJpYihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQot
ewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IDA7Ci0gICAgbV9hcGkt
PmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwg
Jm1heE5hbWVMZW5ndGgpOwotICAgIGlmICghbWF4TmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZSA9IGFkb3B0QXJyYXlQdHIobmV3
IGNoYXJbbWF4TmFtZUxlbmd0aF0pOwotICAgIGlmICghbmFtZSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIEdMc2l6ZWkgbGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBH
TGVudW0gdHlwZSA9IDA7Ci0gICAgbV9hcGktPmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGlu
ZGV4LCBtYXhOYW1lTGVuZ3RoLCAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZ2V0KCkpOwot
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbmZvLm5hbWUg
PSBTdHJpbmc6OmZyb21VVEY4KG5hbWUuZ2V0KCksIGxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0g
dHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlm
ICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IDA7Ci0gICAgbV9hcGktPmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhOYW1lTGVu
Z3RoKTsKLSAgICBpZiAoIW1heE5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heE5h
bWVMZW5ndGhdKTsKLSAgICBpZiAoIW5hbWUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBH
THNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUg
PSAwOwotICAgIG1fYXBpLT5nbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heE5h
bWVMZW5ndGgsICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5nZXQoKSk7Ci0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluZm8ubmFtZSA9IFN0cmluZzo6
ZnJvbVVURjgobmFtZS5nZXQoKSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmpl
Y3QqIHNoYWRlcnMpCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBv
cGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291
bnQsIHNoYWRlcnMpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9Ci0KLWludCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBtX2FwaS0+Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Qm9vbGVhbnYo
R0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0Qm9vbGVhbnYocGFyYW1OYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRCdWZmZXJQYXJhbWV0ZXJp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRDb250ZXh0QXR0cmlidXRl
cygpCi17Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlczsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9y
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX3N5bnRoZXRpY0Vycm9y
cy5maXJzdCgpOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUobV9zeW50aGV0aWNF
cnJvcnMuYmVnaW4oKSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsR2V0RXJyb3IoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsR2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5n
bEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwg
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
ZXRJbnRlZ2VydihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldEludGVnZXJ2KHBhcmFtTmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0UHJvZ3JhbWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IGxvZ0xlbmd0aCA9
IDA7Ci0gICAgbV9hcGktPmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNE
OjpJTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBPd25BcnJheVB0cjxjaGFyPiBsb2cgPSBhZG9w
dEFycmF5UHRyKG5ldyBjaGFyW2xvZ0xlbmd0aF0pOwotICAgIGlmICghbG9nKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHTGludCByZXR1cm5lZExvZ0xlbmd0aCA9IDA7Ci0gICAg
bV9hcGktPmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRM
b2dMZW5ndGgsIGxvZy5nZXQoKSk7Ci0gICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExv
Z0xlbmd0aCArIDEpOwotCi0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgobG9n
LmdldCgpLCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7Ci0gICAgbV9hcGktPmdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBp
ZiAobG9nTGVuZ3RoIDw9IDEpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE93bkFy
cmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbG9nTGVuZ3RoXSk7Ci0g
ICAgaWYgKCFsb2cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IHJldHVy
bmVkTG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwg
bG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZy5nZXQoKSk7Ci0gICAgQVNTRVJUKGxv
Z0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOwotCi0gICAgU3RyaW5nIHJlc3VsdCA9
IFN0cmluZzo6ZnJvbVVURjgobG9nLmdldCgpLCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hh
ZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFk
ZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBp
ZiAobG9nTGVuZ3RoIDw9IDEpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE93bkFy
cmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbG9nTGVuZ3RoXSk7Ci0g
ICAgaWYgKCFsb2cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IHJldHVy
bmVkTG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJTb3VyY2Uoc2hhZGVyLCBs
b2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9n
TGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0g
U3RyaW5nOjpmcm9tVVRGOChsb2cuZ2V0KCksIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTdHJp
bmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1
cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1fYXBpLT5nbEdldFN0cmlu
ZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VGV4UGFy
YW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCog
dmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0VGV4
UGFyYW1ldGVyZnYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRVbmlm
b3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwot
fQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VmVydGV4QXR0cmliaXYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0VmVydGV4QXR0cmliaXYo
aW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBhcmFtTmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB2b2lkKiBw
b2ludGVyID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwg
cGFyYW1OYW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0MzRHNp
emVpcHRyPihwb2ludGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omhp
bnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmds
SXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiBtX2FwaS0+Z2xJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qg
ZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1f
YXBpLT5nbElzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzUHJv
Z3JhbShwcm9ncmFtKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNSZW5kZXJidWZmZXIo
cmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNTaGFkZXIoc2hhZGVyKTsKLX0KLQotR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc1RleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBt
X2FwaS0+Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbExpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsTGlua1Byb2dyYW0o
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwaXhlbFN0b3Jl
aShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsUGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9h
dCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBtX2FwaS0+Z2xGbHVzaCgpOwotICAgIG1fYXBpLT5nbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
dGFyZ2V0LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNE
Ym9vbGVhbiBpbnZlcnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Y29uc3QgY2hhciogc3RyID0gc3RyaW5nLnV0ZjgoKS5kYXRhKCk7Ci0gICAgaW50IGxlbmd0aCA9
IHN0cmluZy5sZW5ndGgoKTsKLSAgICBtX2FwaS0+Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAm
c3RyLCAmbGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0ZW5jaWxGdW5jKGZ1bmMsIHJl
ZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzdGVuY2lsRnVu
Y1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNE
dWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0
ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbE1hc2sobWFzayk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNE
ZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsU3RlbmNpbE9wKGZhaWwsIHpGYWlsLCB6UGFzcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNl
LCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3MpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFj
ZSwgZmFpbCwgekZhaWwsIHpQYXNzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQgcGFyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4UGFyYW1ldGVyaShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwg
cGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zm
c2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIHNpemUsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgeCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xV
bmlmb3JtMWkobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCog
YXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9y
bTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3Jt
MmYobG9jYXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3Jt
MmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTJpKGxv
Y2F0aW9uLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZv
cm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0yaXYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVu
aWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNE
ZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5n
bFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRGludCB6KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbFVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5
LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00ZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTRmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5p
Zm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHos
IEdDM0RpbnQgdykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xV
bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
R0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjFm
KGluZGV4LCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCB2YWx1
ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliMmYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjJmdihpbmRleCwgdmFsdWVzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5
LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjNm
dihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCB2YWx1ZXMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliNGYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9h
dCB3KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0
dHJpYjRmKGluZGV4LCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmli
NGZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51
bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50
cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX2Jv
dW5kQXJyYXlCdWZmZXIgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hcGktPmdsVmVy
dGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2aWV3cG9ydChHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlciA9IDA7Ci0gICAgbV9hcGktPmdsR2VuQnVmZmVycygxLCAmYnVmZmVy
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyID0gMDsKLSAgICBtX2FwaS0+Z2xH
ZW5GcmFtZWJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVByb2dyYW0oKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xDcmVhdGVQ
cm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyOwotICAgIG1fYXBpLT5nbEdlblJlbmRlcmJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSBzaGFkZXJUeXBl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xDcmVh
dGVTaGFkZXIoc2hhZGVyVHlwZSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmU7Ci0gICAgbV9hcGktPmdsR2VuVGV4dHVy
ZXMoMSwgJnRleHR1cmUpOwotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlbGV0ZUJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVG
cmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2JvdW5kRkJPKSB7Ci0gICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQg
Zm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQu
Ci0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotICAgIG1f
YXBpLT5nbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVs
ZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRl
VGV4dHVyZXMoMSwgJnRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNF
cnJvcnMuYWRkKGVycm9yKTsKLX0KLQotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmdldEV4dGVuc2lvbnMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCShyZXZpc2lvbiAxMjg3MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDE1ICsyMiwyNiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKIAotI2luY2x1ZGUgPEV2YXNfR0wuaD4KKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCisjaW5jbHVkZSA8dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+Cisj
ZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgewordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0wgICAg
ICAgICAgICAgICBFdmFzX0dMOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSAgICAg
ICBFdmFzX0dMX1N1cmZhY2U7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db250ZXh0ICAgICAg
IEV2YXNfR0xfQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbmZpZyAgICAgICAg
RXZhc19HTF9Db25maWc7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9BUEkgICAgICAgICAgIEV2
YXNfR0xfQVBJOwogCiBjbGFzcyBQYWdlQ2xpZW50RWZsOwogCi1jbGFzcyBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUgeworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgICAgICA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcgorI2VuZGlmCit7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5
VG9FdmFzR0xPYmplY3QpOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0Nv
bnRleHQzRCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOwog
ICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKIAogICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OwpAQCAtMzgsMTg2ICs0
OSwyMSBAQCBwdWJsaWM6CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgotCisjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQorICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CisjZW5kaWYK
ICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxp
YW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSk7
Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcik7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBi
aW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBi
aW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2
b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7
Ci0gICAgdm9pZCBibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBH
QzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlv
bihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51
bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAgIHZvaWQgYmxlbmRGdW5jKEdDM0Rl
bnVtIHNyY0ZhY3RvciwgR0MzRGVudW0gZHN0RmFjdG9yKTsKLSAgICB2b2lkIGJsZW5kRnVuY1Nl
cGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBo
YSwgR0MzRGVudW0gZHN0QWxwaGEpOwotCi0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSk7Ci0g
ICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQs
IEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSk7Ci0KLSAgICBHQzNEZW51bSBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7Ci0gICAgdm9pZCBjbGVhcihHQzNEYml0
ZmllbGQgbWFzayk7Ci0gICAgdm9pZCBjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xh
bXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpOwotICAgIHZvaWQg
Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKTsKLSAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNE
aW50IGNsZWFyVmFsdWUpOwotICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0Mz
RGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKLSAg
ICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICB2b2lkIGNvcHlU
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsKLSAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlP
ZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpOwotICAgIHZvaWQgY3VsbEZhY2UoR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBkZXB0
aEZ1bmMoR0MzRGVudW0gZnVuYyk7Ci0gICAgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxh
Zyk7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZh
cik7Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9i
amVjdCk7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci0gICAgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpOwotICAgIHZvaWQgZHJhd0FycmF5cyhH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpOwotICAgIHZvaWQg
ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludHB0ciBvZmZzZXQpOwotCi0gICAgdm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsK
LSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KTsKLSAgICB2
b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
cmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50IGxldmVsKTsKLSAgICB2b2lk
IGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCk7Ci0KLSAgICBib29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgYm9vbCBnZXRBY3Rp
dmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9i
amVjdCogc2hhZGVycyk7Ci0gICAgR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNE
T2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgZ2V0Qm9vbGVhbnYoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpOwotICAgIHZvaWQgZ2V0QnVmZmVyUGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmli
dXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgdm9pZCBnZXRGbG9hdHYoR0Mz
RGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIGdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRJ
bnRlZ2VydihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdl
dFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwg
R0MzRGludCogdmFsdWUpOwotICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNE
T2JqZWN0KTsKLSAgICB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKLQot
ICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgU3RyaW5n
IGdldFN0cmluZyhHQzNEZW51bSBuYW1lKTsKLSAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAg
ICB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1O
YW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2
b2lkIGdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgZ2V0VmVydGV4QXR0
cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1
ZSk7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0g
cGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0
dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lKTsKLQotICAgIHZv
aWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOwotICAgIEdDM0Rib29sZWFu
IGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChH
QzNEZW51bSBjYXApOwotICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9i
amVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAg
IEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Ri
b29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzVGV4
dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwot
ICAgIHZvaWQgbGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBwaXhlbFN0
b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAgIHZvaWQgcG9seWdv
bk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOwotCi0gICAgdm9pZCBy
ZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7Ci0K
LSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2
b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7
Ci0gICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmpl
Y3QsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywg
R0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
ayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBz
dGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gekZhaWwsIEdDM0RlbnVtIHpQYXNzKTsK
LSAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWws
IEdDM0RlbnVtIHpGYWlsLCBHQzNEZW51bSB6UGFzcyk7Ci0KLSAgICBib29sIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQg
dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZs
b2F0IHBhcmFtKTsKLSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNldCwgR0MzRGludCB5
T2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLQotICAgIHZvaWQgdW5pZm9y
bTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KTsKLSAgICB2b2lkIHVuaWZvcm0xZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5p
Zm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCk7Ci0gICAgdm9pZCB1bmlmb3JtMWl2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGludCogdik7Ci0gICAgdm9pZCB1bmlm
b3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZvaWQg
dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0g
ICAgdm9pZCB1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkp
OwotICAgIHZvaWQgdW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rp
bnQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlmb3JtM2ko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeik7Ci0gICAg
dm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGludCogdik7
Ci0gICAgdm9pZCB1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdW5pZm9ybTRmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlm
b3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3KTsKLSAgICB2b2lkIHVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUp
OwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCB1bmlm
b3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsKLQotICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0KTsKLSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsK
LQotICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsK
LSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1
ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZv
aWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
UG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNE
Ym9vbGVhbiBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6
ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkIHZpZXdwb3J0KEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotCi0g
ICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVQcm9ncmFt
KCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVNoYWRlcihHQzNEZW51bSk7Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAg
IHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVJl
bmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0
Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7
Ci0KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKTsKLQotICAgIEV4
dGVuc2lvbnMzRCogZ2V0RXh0ZW5zaW9ucygpOwotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZSgpOwotCi0gICAgYm9vbCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7Ci0KICAgICBib29sIGNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCosIGJvb2wg
cmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYm91bmRG
Qk87Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2JvdW5kVGV4dHVyZTsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250
ZXh0OworICAgIEhvc3RXaW5kb3cqIG1faG9zdFdpbmRvdzsKIAogICAgIExpc3RIYXNoU2V0PEdD
M0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIAogICAgIEV2YXNfR0wqIG1fZXZhc0dMOwotICAg
IEV2YXNfR0xfQ29udGV4dCogbV9jb250ZXh0OworICAgIEV2YXNfR0xfQ29udGV4dCogbV9ldmFz
R0xDb250ZXh0OwogICAgIEV2YXNfR0xfU3VyZmFjZSogbV9zdXJmYWNlOwogICAgIEV2YXNfR0xf
QVBJKiBtX2FwaTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166164</attachid>
            <date>2012-09-28 01:01:27 -0700</date>
            <delta_ts>2012-10-08 04:01:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96627-20120928170145.patch</filename>
            <type>text/plain</type>
            <size>78655</size>
            <attacher name="Regina Chung">heejin.r.chung</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTg1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA5LTI3ICBSZWdpbmEg
Q2h1bmcgIDxoZWVqaW4uci5jaHVuZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2Ug
dGhlIHNoYXJlYWJsZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCogaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYyNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgRUZM
IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNEKEdDM0QpIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTCouCisgICAgICAgIEl0IHdhcyBpbml0aWFsbHkgaW1wbGVtZW50ZWQg
aW4gYSBkaWZmZXJlbnQgd2F5LCBkdWUgdG8gY2hhcmFjdGVyaXN0aWNzIG9mIEV2YXMsCisgICAg
ICAgIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBjb21tb24gaW1wbGVtZW50YXRp
b24gYW5kIGZpbmQgYW5vdGhlciB3YXkKKyAgICAgICAgdG8gZGVhbCB3aXRoIEV2YXMsIGVzcGVj
aWFsbHkgYmVjYXVzZSBhbGwgdGhlIGR1cGxpY2F0ZWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmVkIGNhaXJvIGltcGxlbWVudGFpb24gb2YgR0MzRCBhbmQgYWRkZWQgZWZsIGZp
bGVzIHRvIFdlYkNvcmVfU09VUkNFUy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOiBNb2RpZmllZCBjb2RlIHNvIEdDM0RPcGVuR0wqIGNh
biBiZSB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNz
YWdlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
VG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOiBSZW1vdmVkIGZ1bmN0
aW9ucyBpbXBsZW1lbnRlZCBpbiBHQzNET3BlbkdMKgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzR0xFUzJDb21wbGlh
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRv
VGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oOiBSZW1vdmVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBHQzNE
T3BlbkdMKgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKwogMjAxMi0wOS0y
OCAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzLmJ1Z0BnbWFpbC5jb20+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogRWxlbWVudHM6IFNob3cgZW50aXRpZXMgaW4gZWRpdCBhcyBIVE1MLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHJldmlzaW9uIDEyOTg1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsOSArMjg3
LDggQEAgSUYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzQ29udGV4dDNERWZsLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAkocmV2aXNp
b24gMTI5ODU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzQ29udGV4dDNERWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsMzMgKzE4LDEyNCBAQAog
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAorI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5o
IgorI2Vsc2UKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNlbmRpZgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgotCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgYm9vbCByZW5kZXJEaXJlY3Rs
eVRvRXZhc0dMT2JqZWN0ID0gKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKLQotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IGludGVybmFsID0g
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGUoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRl
ckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpOwotICAgIGlmICghaW50ZXJuYWwpCi0gICAgICAgIHJl
dHVybiAwOwotCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRS
ZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkp
OwotICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IGludGVybmFsLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gY29udGV4dC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNv
bnRleHQucmVsZWFzZSgpIDogMDsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAg
ICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi17CisgICAg
LCBtX2NvbXBpbGVyKGlzR0xFUzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xT
TF9PVVRQVVQpCisgICAgLCBtX2F0dHJzKGF0dHJzKQorICAgICwgbV90ZXh0dXJlKDApCisgICAg
LCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQorI2lmIFVTRShPUEVOR0xf
RVNfMikKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQor
I2VuZGlmCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9sYXllckNvbXBv
c2l0ZWQoZmFsc2UpCisgICAgLCBtX2ludGVybmFsQ29sb3JGb3JtYXQoMCkKKyAgICAsIG1fYm91
bmRGQk8oMCkKKyAgICAsIG1fYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkKKyAgICAsIG1fYm91
bmRUZXh0dXJlMCgwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KDApCisgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSh0aGlzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpKQoreworICAgIHZhbGlkYXRlQXR0cmli
dXRlcygpOworCisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICBpZiAoIWluaXRpYWxpemVkU2hpbXMpIHsKKyAgICAgICAgc3VjY2Vz
cyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXplZFNoaW1zID0g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIG1fcHJpdmF0ZSA9IG51
bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0g
UmVuZGVyT2Zmc2NyZWVuKSB7CisgICAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2Fu
dmFzIEZCTy4KKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fZmJv
KTsKKworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgICAg
ICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgICAgICBnbFRleFBh
cmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAg
ICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
OworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNh
bXBsZSBGQk8uCisgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAg
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgZ2xC
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQorICAg
ICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCaW5kIGNhbnZh
cyBGQk8uCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKKyNp
ZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAg
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAg
ICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVz
b3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xF
UmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5N
YXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVz
b3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7CisKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgIGdsRW5hYmxlKEdM
X1BPSU5UX1NQUklURSk7CisgICAgZ2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0la
RSk7CisjZW5kaWYKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgp
CkBAIC01OSwxMyArMTUwLDIzIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3ND
b250ZXgKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQorICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7CisjZWxzZQogICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KICNlbmRpZgogCiBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogeworICAgIGlmICghbV9w
cml2YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZW5kZXJTdHlsZSA9
PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKQEAgLTc0LDc4NSAr
MTc1LDYwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pc0dMRVMyQ29tcGxpYW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtX3ByaXZh
dGUtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQotewotICAgIG1fcHJpdmF0ZS0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgbV9wcml2YXRlLT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9wcml2YXRlLT5iaW5kQnVmZmVy
KHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAg
bV9wcml2YXRlLT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbV9wcml2YXRlLT5iaW5kUmVuZGVyYnVm
ZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17
Ci0gICAgbV9wcml2YXRlLT5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBm
IGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbV9wcml2
YXRlLT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJp
dmF0ZS0+YmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBo
YSkKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2Rl
QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0g
c3JjRmFjdG9yLCBHQzNEZW51bSBkc3RGYWN0b3IpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEZ1
bmMoc3JjRmFjdG9yLCBkc3RGYWN0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
bGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVu
dW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+YmxlbmRG
dW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6
ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbV9wcml2YXRlLT5idWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQq
IGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1fcHJpdmF0ZS0+YnVmZmVyRGF0YSh0YXJn
ZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVm
ZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlw
dHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtX3ByaXZhdGUtPmJ1ZmZlclN1YkRh
dGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBt
X3ByaXZhdGUtPmNsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
ckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUs
IEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbV9wcml2YXRlLT5jbGVhckNvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAgIG1fcHJpdmF0ZS0+Y2xlYXJEZXB0aChkZXB0aCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IGNsZWFy
VmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5jbGVhclN0ZW5jaWwoY2xlYXJWYWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Ri
b29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAg
ICBtX3ByaXZhdGUtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgbV9wcml2YXRlLT5jb21waWxlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAg
IG1fcHJpdmF0ZS0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5jb3B5VGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkKLXsKLSAgICBtX3ByaXZhdGUtPmN1bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBtX3ByaXZhdGUt
PmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNr
KEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAgbV9wcml2YXRlLT5kZXB0aE1hc2soZmxhZyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwg
R0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1fcHJpdmF0ZS0+ZGVwdGhSYW5nZSh6TmVhciwgekZh
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1fcHJpdmF0
ZS0+ZGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1fcHJpdmF0ZS0+ZGlzYWJsZShj
YXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbV9wcml2YXRlLT5kaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdD
M0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtX3By
aXZhdGUtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbV9wcml2YXRlLT5kcmF3
RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbV9wcml2YXRlLT5lbmFibGUo
Y2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbV9wcml2YXRlLT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCi17Ci0g
ICAgbV9wcml2YXRlLT5maW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1
c2goKQotewotICAgIG1fcHJpdmF0ZS0+Zmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0
LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJUYXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgbV9wcml2YXRlLT5mcmFtZWJ1ZmZlclRleHR1
cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleFRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAg
ICBtX3ByaXZhdGUtPmZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1fcHJpdmF0ZS0+Z2Vu
ZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0QWN0aXZlQXR0cmliKHBy
b2dyYW0sIGluZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEFjdGl2ZVVuaWZvcm0o
cHJvZ3JhbSwgaW5kZXgsIGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
dHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291
bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAg
bV9wcml2YXRlLT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBz
aGFkZXJzKTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNE
Ym9vbGVhbiogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRCb29sZWFudihwYXJhbU5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1fcHJpdmF0ZS0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUs
IHZhbHVlKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRDb250ZXh0QXR0cmlidXRlcygpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RXJyb3IoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEVycm9yKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRGbG9hdHYocGFyYW1OYW1lLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcGFyYW1OYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRJbnRl
Z2VydihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFByb2dyYW1pdihwcm9ncmFtLCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9n
cmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0
U2hhZGVyaXYoc2hhZGVyLCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKLX0KLQotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U2hhZGVyU291cmNlKHNoYWRlcik7
Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUp
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKG5hbWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFRl
eFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFRleFBhcmFt
ZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRVbmlmb3JtZnYo
cHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwg
bG9jYXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBu
YW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAg
ICBtX3ByaXZhdGUtPmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2
YXRlLT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLWxv
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcGFyYW1OYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFZlcnRl
eEF0dHJpYk9mZnNldChpbmRleCwgcGFyYW1OYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2
YXRlLT5oaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5pc0J1ZmZlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0VuYWJs
ZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNGcmFt
ZWJ1ZmZlcihvYmopOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUHJv
Z3JhbShvYmopOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNS
ZW5kZXJidWZmZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6Omlz
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlz
U2hhZGVyKG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1
cmUoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0
dXJlKG9iaik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxv
YXQgd2lkdGgpCi17Ci0gICAgbV9wcml2YXRlLT5saW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgbV9wcml2YXRlLT5saW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBh
cmFtKQotewotICAgIG1fcHJpdmF0ZS0+cGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1fcHJpdmF0ZS0+cG9seWdvbk9mZnNldChmYWN0
b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgbV9wcml2YXRl
LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5yZW5k
ZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZh
bHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgbV9wcml2YXRlLT5zYW1wbGVDb3ZlcmFn
ZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQot
ewotICAgIG1fcHJpdmF0ZS0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9wcml2YXRlLT5zaGFkZXJTb3VyY2Uo
cHJvZ3JhbSwgc3RyaW5nKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbV9w
cml2YXRlLT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1
bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNp
bEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+
c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtX3ByaXZh
dGUtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVu
dW0genBhc3MpCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQot
ewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpw
YXNzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGZsb2F0IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+dGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQ
YXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBh
cmFtKQotewotICAgIG1fcHJpdmF0ZS0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwg
cGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZz
ZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbV9wcml2YXRlLT50ZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KQotewotICAgIG1fcHJpdmF0ZS0+
dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHR0MzRHNpemVpIHNpemUsIEMzRGZsb2F0KiB2KQot
ewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHgpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMWkobG9jYXRpb24sIHgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdHQzNEc2l6
ZWkgc2l6ZSwgQzNEaW50KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFpdihsb2NhdGlv
biwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBtX3ByaXZhdGUtPnVu
aWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogdikK
LXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHkpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMmkobG9jYXRpb24sIHgs
IHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5p
Zm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5p
Zm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0zaXYo
bG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQg
eiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGYobG9jYXRpb24sIHgs
IHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCi17Ci0gICAgbV9wcml2
YXRlLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEaW50IHosIEdDM0RpbnQgdykKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm00aShsb2Nh
dGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIHYpCi17Ci0gICAg
bV9wcml2YXRlLT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAg
IG1fcHJpdmF0ZS0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT51
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCi17Ci0gICAgbV9wcml2YXRlLT51c2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQotewotICAgIG1fcHJpdmF0ZS0+dmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHgpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIxZnYoaW5k
ZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCi17Ci0gICAgbV9wcml2
YXRlLT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMp
Ci17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1fcHJpdmF0ZS0+
dmVydGV4QXR0cmliM2YoaW5kZXgsIHgsIHksIHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQot
ewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAg
bV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZh
bHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIo
R0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4g
bm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAg
bV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdw
b3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCi17Ci0gICAgbV9wcml2YXRlLT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciosIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUt
PmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRnJh
bWVidWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlUHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlUHJvZ3JhbSgpOwot
fQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZm
ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNz
T3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVNoYWRlcih0eXBlKTsKIH0KIAotUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdl
UGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgs
IGludCBjYW52YXNIZWlnaHQsIFBsYXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQogewotICAg
IHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVRleHR1cmUoKTsKLX0KKyAgICBpZiAoIWltYWdlUGl4
ZWxzIHx8IGltYWdlV2lkdGggPD0gMCB8fCBpbWFnZUhlaWdodCA8PSAwIHx8IGNhbnZhc1dpZHRo
IDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9IDAgfHwgIWNvbnRleHQpCisgICAgICAgIHJldHVybjsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7Ci19CisgICAg
Y2Fpcm9fdCogY3IgPSBjb250ZXh0LT5jcigpOworICAgIGNvbnRleHQtPnNhdmUoKTsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCi17Ci0gICAgbV9wcml2YXRlLT5kZWxldGVGcmFtZWJ1ZmZlcihidWZmZXIpOwotfQor
ICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAg
Y2Fpcm9fcGFpbnQoY3IpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX3ByaXZhdGUtPmRlbGV0ZVByb2dy
YW0ocHJvZ3JhbSk7Ci19CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAg
IGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlUGl4ZWxzKSwgQ0FJUk9fRk9STUFUX0FS
R0IzMiwgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGggKiA0KSk7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihidWZmZXIpOwotfQor
ICAgIC8vIE9wZW5HTCBrZWVwcyB0aGUgcGl4ZWxzIHN0b3JlZCBib3R0b20gdXAsIHNvIHdlIG5l
ZWQgdG8gZmxpcCB0aGUgaW1hZ2UgaGVyZS4KKyAgICBjYWlyb190cmFuc2xhdGUoY3IsIDAsIGlt
YWdlSGVpZ2h0KTsKKyAgICBjYWlyb19zY2FsZShjciwgMSwgLTEpOwogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAg
bV9wcml2YXRlLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgaW1hZ2VTdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3Is
IDAsIDAsIGNhbnZhc1dpZHRoLCAtY2FudmFzSGVpZ2h0KTsKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbV9w
cml2YXRlLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhl
c2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9wcml2YXRlLT5zeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7Ci19Ci0KLUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEV4dGVuc2lvbnMoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEV4dGVuc2lvbnMoKTsK
LX0KLQotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKSBjb25zdAorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKIH0KKyNlbmRpZgogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8
Q29udGV4dExvc3RDYWxsYmFjaz4pCisjaWYgIVVTRShPUEVOR0xfRVNfMikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KKyNlbmRpZgogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEo
SW1hZ2UqIGltYWdlLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0
cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXplKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0
IEludFNpemUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
aXNSZXNvdXJjZVNhZmUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmNwcAkocmV2aXNpb24gMTI5ODU2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDkzICsyMCw4NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgVVNF
KDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBhZ2VDbGllbnRFZmwuaCIKLQorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
KyNpbmNsdWRlIDxFdmFzX0dMLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NP
d25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2lu
ZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotewotICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IGludGVybmFsID0gYWRvcHRQdHIobmV3
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpKTsKLQotICAgIGlmICghaW50ZXJuYWwtPmluaXRp
YWxpemUoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBpbnRlcm5hbC5yZWxlYXNl
KCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKCkKLSAgICA6IG1fYm91bmRGQk8oMCkKLSAgICAsIG1fYm91bmRUZXh0dXJlKDApCi0gICAg
LCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUp
CisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93
KQogICAgICwgbV9ldmFzR0woMCkKLSAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV9ldmFzR0xD
b250ZXh0KDApCiAgICAgLCBtX3N1cmZhY2UoMCkKICAgICAsIG1fYXBpKDApCiB7Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCi17Ci0g
ICAgaWYgKCFtX2V2YXNHTCkKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fc3VyZmFjZSkKLSAgICAgICAgZXZhc19nbF9zdXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0wsIG1f
c3VyZmFjZSk7Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBldmFzX2dsX2NvbnRleHRf
ZGVzdHJveShtX2V2YXNHTCwgbV9jb250ZXh0KTsKLQotICAgIGV2YXNfZ2xfZnJlZShtX2V2YXNH
TCk7Ci19CisgICAgaWYgKG1faG9zdFdpbmRvdyAmJiBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFn
ZUNsaWVudCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBjb2RlIHBhdGgg
Zm9yIFdlYktpdDEuCisgICAgICAgIC8vIEdldCBFdmFzIG9iamVjdCBmcm9tIHBsYXRmb3JtUGFn
ZUNsaWVudCBhbmQgc2V0IEV2YXNHTCByZWxhdGVkIG1lbWJlcnMuCisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi17Ci0gICAgUGFnZUNsaWVudEVm
bCogcGFnZUNsaWVudCA9IHN0YXRpY19jYXN0PFBhZ2VDbGllbnRFZmwqPihob3N0V2luZG93LT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSk7CisgICAgLy8gRm9yIFdlYktpdDIsIHdlIG5lZWQgdG8gY3Jl
YXRlIGEgZHVtbXkgZWNvcmVFdmFzIG9iamVjdCBmb3IgdGhlIFdlYlByb2Nlc3MgaW4gb3JkZXIg
dG8gdXNlIEV2YXNHTCBBUElzLgorI2lmZGVmIEhBVkVfRUNPUkVfWAorICAgIGVjb3JlX2V2YXNf
aW5pdCgpOworICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19nbF94MTFfbmV3
KDAsIDAsIDAsIDAsIDEsIDEpKTsKKyAgICBpZiAoIW1fZWNvcmVFdmFzKQorICAgICAgICByZXR1
cm47CisjZWxzZQorICAgIHJldHVybjsKKyNlbmRpZgogCi0gICAgRXZhcyogZXZhcyA9IGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KHBhZ2VDbGllbnQtPnZpZXcoKSk7CisgICAgRXZhcyogZXZhcyA9IGVj
b3JlX2V2YXNfZ2V0KG1fZWNvcmVFdmFzLmdldCgpKTsKKyAgICBpZiAoIWV2YXMpCisgICAgICAg
IHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBFdmFzX0dMIG9iamVjdCBmb3IgZ2wgcmVu
ZGVyaW5nIG9uIGVmbC4KICAgICBtX2V2YXNHTCA9IGV2YXNfZ2xfbmV3KGV2YXMpOwogICAgIGlm
ICghbV9ldmFzR0wpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gR2V0IHRoZSBBUEkgZm9yIHJlbmRlcmluZyB1c2luZyBPcGVuR0wuCiAgICAgLy8gVGhp
cyByZXR1cm5zIGEgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgYWxsIHRoZSBPcGVuR0wgZnVuY3Rp
b25zIHdlIGNhbiB1c2UgdG8gcmVuZGVyIGluIEV2YXMKICAgICBtX2FwaSA9IGV2YXNfZ2xfYXBp
X2dldChtX2V2YXNHTCk7CiAgICAgaWYgKCFtX2FwaSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgRXZhc19HTF9Db250ZXh0KiBzaGFyZUNvbnRleHQgPSAwOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEdDM0Qgd2l0aCBSZW5kZXJPZmZzY3JlZW4gc3R5
bGUgZm9yIFdlYkdMIGhhcyB0byBiZSBzaGFyZWQgd2l0aCBBQydzIGNvbnRleHQgd2hlbiBBQyBp
cyBlbmFibGVkLgotICAgIGlmICghcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBwYWdlQ2xpZW50LT5hY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dCgpOwotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIHNo
YXJlQ29udGV4dCA9IHN0YXRpY19jYXN0PEV2YXNfR0xfQ29udGV4dCo+KGNvbnRleHQtPnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIHJldHVybjsK
IAogICAgIC8vIENyZWF0ZSBhIGNvbnRleHQKLSAgICBtX2NvbnRleHQgPSBldmFzX2dsX2NvbnRl
eHRfY3JlYXRlKG1fZXZhc0dMLCBzaGFyZUNvbnRleHQpOwotICAgIGlmICghbV9jb250ZXh0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250
ZXh0X2NyZWF0ZShtX2V2YXNHTCwgMCk7CisgICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCisgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1
cmZhY2UocGFnZUNsaWVudCwgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFjcmVhdGVTdXJmYWNlKDAsIHJlbmRlclN0eWxlID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQoreworICAgIGlmICghbV9ldmFz
R0wpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIGV2YXNf
Z2xfc3VyZmFjZV9kZXN0cm95KG1fZXZhc0dMLCBtX3N1cmZhY2UpOwogCi0gICAgcmV0dXJuIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2V2YXNHTENvbnRleHQpCisgICAgICAgIGV2
YXNfZ2xfY29udGV4dF9kZXN0cm95KG1fZXZhc0dMLCBtX2V2YXNHTENvbnRleHQpOworCisgICAg
ZXZhc19nbF9mcmVlKG1fZXZhc0dMKTsKIH0KIAorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiBwYWdlQ2xpZW50LCBib29sIHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KQogewogICAgIC8vIElmIFJlbmRlclN0eWxlIGlzIFJlbmRl
ck9mZnNjcmVlbiwgd2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSBGQk8sCkBAIC0xMTcsOCArMTEx
LDExIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXIKICAgICBpbnQg
aGVpZ2h0ID0gMTsKIAogICAgIC8vIEJ1dCwgaW4gY2FzZSBvZiBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdywgd2UgaGF2ZSB0byByZW5kZXIgdG8gYSByZW5kZXIgdGFyZ2V0IHN1cmZhY2Ugd2l0
aCB0aGUgc2FtZSBzaXplIGFzIG91ciB3ZWJWaWV3LgotICAgIGlmIChyZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykKLSAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHBhZ2VDbGllbnQt
PnZpZXcoKSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGlmIChyZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdykgeworICAgICAgICBpZiAoIXBhZ2VDbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZJWE1FOiBHZXQgZ2VvbWV0cnkgb2Ygd2ViVmlldyBh
bmQgc2V0IHNpemUgb2YgdGFyZ2V0IHN1cmZhY2UuCisgICAgfQogCiAgICAgRXZhc19HTF9Db25m
aWcgY29uZmlnID0gewogICAgICAgICBFVkFTX0dMX1JHQkFfODg4OCwKQEAgLTEzOCw5OTIgKzEz
NSwzOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyCiAgICAgICAg
IC8vIEZpbGwgaW4gdGhlIE5hdGl2ZSBTdXJmYWNlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVu
IEV2YXMgR0wgc3VyZmFjZS4KICAgICAgICAgZXZhc19nbF9uYXRpdmVfc3VyZmFjZV9nZXQobV9l
dmFzR0wsIG1fc3VyZmFjZSwgJm5hdGl2ZVN1cmZhY2UpOwogCi0gICAgICAgIC8vIENyZWF0ZSBh
bmQgc3BlY2lhbGx5IHNldCB1cCBhIGV2YXNfb2JqZWN0IHdoaWNoIGFjdCBhcyB0aGUgcmVuZGVy
IHRhcmdlciBzdXJmYWNlLgotICAgICAgICBpZiAoIXBhZ2VDbGllbnQtPmNyZWF0ZUV2YXNPYmpl
Y3RGb3JBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCZuYXRpdmVTdXJmYWNlLCBJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
RklYTUU6IENyZWF0ZSBhbmQgc3BlY2lhbGx5IHNldCB1cCBhIGV2YXNfb2JqZWN0IHdoaWNoIGFj
dCBhcyB0aGUgcmVuZGVyIHRhcmdlciBzdXJmYWNlLgogICAgIH0KICNlbmRpZgorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jb250ZXh0OworICAgIHJldHVybiBtX2V2YXNHTENvbnRleHQ7CiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIHJldHVy
biBldmFzX2dsX21ha2VfY3VycmVudChtX2V2YXNHTCwgbV9zdXJmYWNlLCBtX2NvbnRleHQpOwor
ICAgIHJldHVybiBldmFzX2dsX21ha2VfY3VycmVudChtX2V2YXNHTCwgbV9zdXJmYWNlLCBtX2V2
YXNHTENvbnRleHQpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNHTEVT
MkNvbXBsaWFudCgpIGNvbnN0CiB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgIHJldHVybiB0
cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xBY3RpdmVUZXh0dXJlKHRleHR1
cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YXR0YWNoU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQXR0YWNoU2hhZGVyKHByb2dyYW0s
IHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kQXR0cmli
TG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5n
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRCdWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLQotICAgIGlm
ICh0YXJnZXQgPT0gR0xfQVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIg
PSBidWZmZXI7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kRnJhbWVi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyICE9IG1fYm91
bmRGQk8pIHsKLSAgICAgICAgbV9hcGktPmdsQmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZnJhbWVi
dWZmZXIpOwotICAgICAgICBtX2JvdW5kRkJPID0gZnJhbWVidWZmZXI7Ci0gICAgfQotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLSAgICBtX2Jv
dW5kVGV4dHVyZSA9IHRleHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBm
IGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRFcXVhdGlv
bihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsZW5kRXF1YXRp
b25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRFcXVhdGlvblNlcGFyYXRl
KG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpibGVuZEZ1bmMoR0MzRGVudW0gc3JjRmFjdG9yLCBHQzNEZW51bSBkc3RGYWN0b3IpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRGdW5jKHNyY0ZhY3Rv
ciwgZHN0RmFjdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsZW5k
RnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBz
cmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhh
LCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJ1ZmZlclN1YkRhdGEodGFy
Z2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
bGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xDbGVhcihtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFt
cGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xDbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0
aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDbGVhckRlcHRo
ZihkZXB0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhclN0ZW5j
aWwoR0MzRGludCBjbGVhclZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IG1fYXBpLT5nbENsZWFyU3RlbmNpbChjbGVhclZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdy
ZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29tcGlsZVNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZz
ZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ29weVRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeE9mZnNldCwgeU9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjdWxsRmFjZShHQzNE
ZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEN1
bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVwdGhG
dW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsRGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpG
YXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVwdGhSYW5n
ZWYoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGV0
YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGV0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRyYXdBcnJheXMo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRyYXdFbGVtZW50
cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRw
dHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERy
YXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmZpbmlz
aCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRmluaXNoKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpmbHVzaCgpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlclRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsRnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXhU
YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlQXR0cmliKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17
Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAm
bWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFtYXhOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBPd25BcnJheVB0cjxjaGFyPiBuYW1lID0gYWRvcHRBcnJheVB0cihuZXcg
Y2hhclttYXhOYW1lTGVuZ3RoXSk7Ci0gICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgR0xzaXplaSBsZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdM
ZW51bSB0eXBlID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5k
ZXgsIG1heE5hbWVMZW5ndGgsICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5nZXQoKSk7Ci0g
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluZm8ubmFtZSA9
IFN0cmluZzo6ZnJvbVVURjgobmFtZS5nZXQoKSwgbGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0
eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYg
KCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICBHTGludCBtYXhOYW1lTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heE5hbWVMZW5n
dGgpOwotICAgIGlmICghbWF4TmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbWF4TmFt
ZUxlbmd0aF0pOwotICAgIGlmICghbmFtZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdM
c2l6ZWkgbGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9
IDA7Ci0gICAgbV9hcGktPmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4TmFt
ZUxlbmd0aCwgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmdldCgpKTsKLSAgICBpZiAoIWxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5uYW1lID0gU3RyaW5nOjpm
cm9tVVRGOChuYW1lLmdldCgpLCBsZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAg
aW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVj
dCogc2hhZGVycykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3Vu
dCwgc2hhZGVycyk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KLQotaW50IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
cmV0dXJuIG1fYXBpLT5nbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRh
dGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRCb29sZWFudihH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRCb29sZWFudihwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEJ1ZmZlclBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldENvbnRleHRBdHRyaWJ1dGVz
KCkKLXsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3Jz
LmlzRW1wdHkoKSkgewotICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fc3ludGhldGljRXJyb3Jz
LmZpcnN0KCk7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShtX3N5bnRoZXRpY0Vy
cm9ycy5iZWdpbigpKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xHZXRFcnJvcigpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xHZXRGbG9hdHYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdl
dEludGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRQcm9ncmFtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFByb2dy
YW1pdihwcm9ncmFtLCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbG9nTGVuZ3RoID0g
MDsKLSAgICBtX2FwaS0+Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6
OklORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0
QXJyYXlQdHIobmV3IGNoYXJbbG9nTGVuZ3RoXSk7Ci0gICAgaWYgKCFsb2cpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IHJldHVybmVkTG9nTGVuZ3RoID0gMDsKLSAgICBt
X2FwaS0+Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZyZXR1cm5lZExv
Z0xlbmd0aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9n
TGVuZ3RoICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChsb2cu
Z2V0KCksIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFtZSwgdmFsdWUpOwot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlm
IChsb2dMZW5ndGggPD0gMSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJy
YXlQdHI8Y2hhcj4gbG9nID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAg
ICBpZiAoIWxvZykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJu
ZWRMb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBs
b2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9n
TGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0g
U3RyaW5nOjpmcm9tVVRGOChsb2cuZ2V0KCksIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBHTGludCBsb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRl
cml2KHNoYWRlciwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlm
IChsb2dMZW5ndGggPD0gMSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJy
YXlQdHI8Y2hhcj4gbG9nID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAg
ICBpZiAoIWxvZykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJu
ZWRMb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRlclNvdXJjZShzaGFkZXIsIGxv
Z0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cuZ2V0KCkpOwotICAgIEFTU0VSVChsb2dM
ZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLQotICAgIFN0cmluZyByZXN1bHQgPSBT
dHJpbmc6OmZyb21VVEY4KGxvZy5nZXQoKSwgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFN0cmlu
ZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9hcGktPmdsR2V0U3RyaW5n
KG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRUZXhQYXJh
bWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRUZXhQ
YXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFVuaWZv
cm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19
Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBh
cmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWZXJ0ZXhBdHRyaWJpdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRWZXJ0ZXhBdHRyaWJpdihp
bmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcGFyYW1OYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZvaWQqIHBv
aW50ZXIgPSAwOwotICAgIG1fYXBpLT5nbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBw
YXJhbU5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHQzNEc2l6
ZWlwdHI+KHBvaW50ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVm
ZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJ
c0J1ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBm
cmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9h
cGktPmdsSXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNQcm9n
cmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc1JlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1f
YXBpLT5nbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xMaW5rUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xQaXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0
IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IG1fYXBpLT5nbEZsdXNoKCk7Ci0gICAgbV9hcGktPmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0
YXJnZXQsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Ri
b29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBj
b25zdCBjaGFyKiBzdHIgPSBzdHJpbmcudXRmOCgpLmRhdGEoKTsKLSAgICBpbnQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgIG1fYXBpLT5nbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZz
dHIsICZsZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNp
bEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxGdW5j
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0Rl
bnVtIHpGYWlsLCBHQzNEZW51bSB6UGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xTdGVuY2lsT3AoZmFpbCwgekZhaWwsIHpQYXNzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpGYWlsLCBHQzNEZW51bSB6UGFzcykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNl
LCBmYWlsLCB6RmFpbCwgelBhc3MpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
YXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZz
ZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMWYobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVu
aWZvcm0xaShsb2NhdGlvbiwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0y
Zihsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0y
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMmkobG9j
YXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9y
bTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTJpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHopCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5p
Zm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rm
bG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEaW50IHopCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGYobG9jYXRpb24sIHgsIHks
IHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGZ2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlm
b3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVu
aWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBH
QzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDNmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2Fw
aS0+Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMWYo
aW5kZXgsIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0
cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVl
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIyZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHgsIHks
IHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliM2Z2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0
IHcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0
cmliNGYoaW5kZXgsIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWI0
ZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVt
IHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRw
dHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fYm91
bmRBcnJheUJ1ZmZlciA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FwaS0+Z2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyID0gMDsKLSAgICBtX2FwaS0+Z2xHZW5CdWZmZXJzKDEsICZidWZmZXIp
OwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIgPSAwOwotICAgIG1fYXBpLT5nbEdl
bkZyYW1lYnVmZmVycygxLCAmYnVmZmVyKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUHJvZ3JhbSgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENyZWF0ZVBy
b2dyYW0oKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBidWZmZXI7Ci0gICAgbV9hcGktPmdsR2VuUmVuZGVyYnVmZmVycygx
LCAmYnVmZmVyKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHNoYWRlclR5cGUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENyZWF0
ZVNoYWRlcihzaGFkZXJUeXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZTsKLSAgICBtX2FwaS0+Z2xHZW5UZXh0dXJl
cygxLCAmdGV4dHVyZSk7Ci0gICAgcmV0dXJuIHRleHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlQnVmZmVycygx
LCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZUZy
YW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fYm91bmRGQk8pIHsKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBm
b3IgZHJhd2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4K
LSAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgbV9h
cGktPmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVQ
cm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
JnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxl
dGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVU
ZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOwotfQotCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQorI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBV
U0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDEyOTg1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMTUgKzIyLDI2IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogCi0jaW5jbHVkZSA8RXZhc19HTC5oPgorI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKKyNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KKyNl
bmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTCAgICAg
ICAgICAgICAgIEV2YXNfR0w7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlICAgICAg
IEV2YXNfR0xfU3VyZmFjZTsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgICAgICAg
RXZhc19HTF9Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29uZmlnICAgICAgICBF
dmFzX0dMX0NvbmZpZzsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0FQSSAgICAgICAgICAgRXZh
c19HTF9BUEk7CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgICAgIDogcHVibGljIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCisjZW5kaWYKK3sKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0V2YXNHTE9iamVjdCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAg
ICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCiAgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CkBAIC0zOCwxODYgKzQ5
LDIyIEBAIHB1YmxpYzoKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCi0KKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKTsKKyNlbmRpZgog
ICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KICAgICBib29sIGlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKTsK
LSAgICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGJp
bmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJp
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZv
aWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICB2b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdD
M0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9u
KEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVt
IG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVu
dW0gc3JjRmFjdG9yLCBHQzNEZW51bSBkc3RGYWN0b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhh
LCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKTsKLSAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwg
R0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhKTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRm
aWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFt
cGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBj
bGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0Rp
bnQgY2xlYXJWYWx1ZSk7Ci0gICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNE
Ym9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpOwotICAg
IHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgY29weVRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9m
ZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCk7Ci0gICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGRlcHRo
RnVuYyhHQzNEZW51bSBmdW5jKTsKLSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFn
KTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFy
KTsKLSAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdD
M0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCk7Ci0gICAgdm9pZCBk
cmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBHQzNEaW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwot
ICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpOwotICAgIHZv
aWQgZmluaXNoKCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBy
ZW5kZXJidWZmZXJUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQg
ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVu
dW0gdGFyZ2V0KTsKLQotICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICBib29sIGdldEFjdGl2
ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2Jq
ZWN0KiBzaGFkZXJzKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRCdWZmZXJQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7Ci0gICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICB2b2lkIGdldEZsb2F0dihHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldElu
dGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0
UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3QpOwotICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpOwotICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpOwotCi0g
ICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBTdHJpbmcg
Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpOwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAg
IHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZv
aWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCogdmFsdWUpOwotICAgIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRy
aWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0
cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpOwotCi0gICAgdm9p
ZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4g
aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdD
M0RlbnVtIGNhcCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
R0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJv
b2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0
dXJlKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCBsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIHBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCBwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHJl
YWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKTsKLQot
ICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZv
aWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsK
LSAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBH
QzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0
ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3MpOwot
ICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gekZhaWwsIEdDM0RlbnVtIHpQYXNzKTsKLQotICAgIGJvb2wgdGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCB0
ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxv
YXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlP
ZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0gICAgdm9pZCB1bmlmb3Jt
MWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdW5pZm9ybTFmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlm
b3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KTsKLSAgICB2b2lkIHVuaWZvcm0xaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lkIHVuaWZv
cm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCB1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAg
ICB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7
Ci0gICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGlu
dCogdik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0zaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KTsKLSAgICB2
b2lkIHVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsK
LSAgICB2b2lkIHVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZs
b2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZv
cm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBH
QzNEaW50IHcpOwotICAgIHZvaWQgdW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIEdDM0RpbnQqIHYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7
Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIHVuaWZv
cm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QpOwotICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwot
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Ri
b29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVByb2dyYW0o
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlU2hhZGVyKEdDM0RlbnVtKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
dm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlUmVu
ZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsK
LQotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpOwotCi0gICAgRXh0
ZW5zaW9uczNEKiBnZXRFeHRlbnNpb25zKCk7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKLQogICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCBy
ZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9ib3VuZEZC
TzsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYm91bmRUZXh0dXJlOwotICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9ib3VuZEFycmF5QnVmZmVyOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CisgICAgSG9zdFdpbmRvdyogbV9ob3N0V2luZG93OwogCiAgICAgTGlzdEhhc2hTZXQ8R0Mz
RGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogCisgICAgT3duUHRyPEVjb3JlX0V2YXM+IG1fZWNv
cmVFdmFzOwogICAgIEV2YXNfR0wqIG1fZXZhc0dMOwotICAgIEV2YXNfR0xfQ29udGV4dCogbV9j
b250ZXh0OworICAgIEV2YXNfR0xfQ29udGV4dCogbV9ldmFzR0xDb250ZXh0OwogICAgIEV2YXNf
R0xfU3VyZmFjZSogbV9zdXJmYWNlOwogICAgIEV2YXNfR0xfQVBJKiBtX2FwaTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167522</attachid>
            <date>2012-10-08 04:01:23 -0700</date>
            <delta_ts>2012-10-08 19:13:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96627-20121008200037.patch</filename>
            <type>text/plain</type>
            <size>79978</size>
            <attacher name="Regina Chung">heejin.r.chung</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDYzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTEwLTA4ICBSZWdpbmEg
Q2h1bmcgIDxoZWVqaW4uci5jaHVuZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2Ug
dGhlIHNoYXJlYWJsZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCogaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYyNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgRUZM
IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNEKEdDM0QpIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTCouCisgICAgICAgIEl0IHdhcyBpbml0aWFsbHkgaW1wbGVtZW50ZWQg
aW4gYSBkaWZmZXJlbnQgd2F5LCBkdWUgdG8gY2hhcmFjdGVyaXN0aWNzIG9mIEV2YXMsCisgICAg
ICAgIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBjb21tb24gaW1wbGVtZW50YXRp
b24gYW5kIGZpbmQgYW5vdGhlciB3YXkKKyAgICAgICAgdG8gZGVhbCB3aXRoIEV2YXMsIGVzcGVj
aWFsbHkgYmVjYXVzZSBhbGwgdGhlIGR1cGxpY2F0ZWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmVkIGNhaXJvIGltcGxlbWVudGF0aW9uIG9mIEdDM0QgYW5kIGFkZGVkIGVmbCBm
aWxlcyB0byBXZWJDb3JlX1NPVVJDRVMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDogTW9kaWZpZWQgY29kZSBzbyBHQzNET3BlbkdMKiBj
YW4gYmUgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVz
c2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDogUmVtb3ZlZCBmdW5j
dGlvbnMgaW1wbGVtZW50ZWQgaW4gR0MzRE9wZW5HTCoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29tcGxp
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaDogUmVtb3ZlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gR0Mz
RE9wZW5HTCoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisKIDIwMTItMTAt
MDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzA2MTkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQkocmV2aXNpb24gMTMwNjMxKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw5ICsyODksOCBAQCBJRiAoV1RGX1VTRV8zRF9H
UkFQSElDUykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2lu
Z0J1ZmZlckNhaXJvLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNE
RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCShyZXZpc2lvbiAxMzA2MzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOCwzMyArMTgsMTMzIEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lmIFVTRSgzRF9HUkFQSElD
UykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaWYgVVNFKE9QRU5HTF9FU18y
KQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmgiCi0KICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxHTC9nbHguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKLSAgICBib29sIHJlbmRlckRpcmVjdGx5
VG9FdmFzR0xPYmplY3QgPSAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOwotCi0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gaW50ZXJuYWwgPSBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVy
RGlyZWN0bHlUb0V2YXNHTE9iamVjdCk7Ci0gICAgaWYgKCFpbnRlcm5hbCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7
Ci0gICAgY29udGV4dC0+bV9wcml2YXRlID0gaW50ZXJuYWwucmVsZWFzZSgpOwotICAgIHJldHVy
biBjb250ZXh0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29u
dGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCiBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250
ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAg
ICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKLXsKKyAgICAs
IG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNM
X09VVFBVVCkKKyAgICAsIG1fYXR0cnMoYXR0cnMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAs
IG1fY29tcG9zaXRvclRleHR1cmUoMCkKKyAgICAsIG1fZmJvKDApCisjaWYgVVNFKE9QRU5HTF9F
U18yKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCisj
ZW5kaWYKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX2xheWVyQ29tcG9z
aXRlZChmYWxzZSkKKyAgICAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCgwKQorICAgICwgbV9ib3Vu
ZEZCTygwKQorICAgICwgbV9hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKQorICAgICwgbV9ib3Vu
ZFRleHR1cmUwKDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIo
MCkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
KHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkpCit7CisgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7CisKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZWRTaGltcyA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nl
c3MgPSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWRTaGltcykgeworICAgICAgICBzdWNjZXNz
ID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7CisgICAgICAgIGluaXRpYWxpemVkU2hpbXMgPSB0
cnVlOworICAgIH0KKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgbV9wcml2YXRlID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBS
ZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpIHsKKyAgICAgICAgLy8gRXZhcyBkb2Vzbid0IGFsbG93
IGluY2x1ZGluZyBnbCBoZWFkZXJzIGFuZCBFdmFzX0dMIGhlYWRlcnMgYXQgdGhlIHNhbWUgdGlt
ZSwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBxdWVyeSB0aGUgY3VycmVudCBnbCBjb250ZXh0
L3N1cmZhY2UgaGVyZSBpbnN0ZWFkIG9mIGluIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS4KKyAg
ICAgICAgdm9pZCogY3VycmVudENvbnRleHQgPSAodm9pZCopZ2xYR2V0Q3VycmVudENvbnRleHQo
KTsKKyAgICAgICAgdm9pZCogY3VycmVudFN1cmZhY2UgPSAodm9pZCopZ2xYR2V0Q3VycmVudERy
YXdhYmxlKCk7CisgICAgICAgIG1fcHJpdmF0ZS0+c2V0Q3VycmVudEdMQ29udGV4dChjdXJyZW50
Q29udGV4dCwgY3VycmVudFN1cmZhY2UpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyU3R5
bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKSB7CisgICAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0
aGUgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwg
Jm1fZmJvKTsKKworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgor
ICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgICAgICBnbEJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgICAgICBn
bFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwor
ICAgICAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYSBt
dWx0aXNhbXBsZSBGQk8uCisgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAg
ICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJP
OworICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KQorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCaW5k
IGNhbnZhcyBGQk8uCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fYm91bmRGQk8gPSBtX2Zi
bzsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
KyAgICAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwor
ICAgICAgICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAg
ICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQorICAgICAgICAg
ICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWls
dEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMo
JkFOR0xFUmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291
cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFO
R0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291
cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgIGdsRW5h
YmxlKEdMX1BPSU5UX1NQUklURSk7CisgICAgZ2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9J
TlRfU0laRSk7CisjZW5kaWYKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCkBAIC01OSw3OTUgKzE1OSw3OCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdy
YXBoaWNzQ29udGV4CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1M
YXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogeworI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworI2Vsc2UK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAjZW5kaWYK
IAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+aXNHTEVTMkNvbXBsaWFudCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjph
Y3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17Ci0gICAgbV9wcml2YXRlLT5hY3RpdmVU
ZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFk
ZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsK
LSAgICBtX3ByaXZhdGUtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fcHJp
dmF0ZS0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+
YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
cmVuZGVyYnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQs
IHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJl
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1fcHJp
dmF0ZS0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0Mz
RGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+YmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5k
RXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRp
b25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAg
bV9wcml2YXRlLT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNyY0ZhY3Rvciwg
R0MzRGVudW0gZHN0RmFjdG9yKQotewotICAgIG1fcHJpdmF0ZS0+YmxlbmRGdW5jKHNyY0ZhY3Rv
ciwgZHN0RmFjdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhh
LCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kRnVuY1NlcGFyYXRl
KHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUs
IEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1fcHJpdmF0ZS0+YnVmZmVyRGF0YSh0YXJnZXQsIHNp
emUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNE
ZW51bSB1c2FnZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBk
YXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbV9wcml2YXRlLT5idWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIHJldHVybiBtX3By
aXZhdGUtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbV9wcml2YXRlLT5j
bGVhcihtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNE
Y2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBm
IGFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+Y2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1w
ZiBkZXB0aCkKLXsKLSAgICBtX3ByaXZhdGUtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBjbGVhclZhbHVlKQotewot
ICAgIG1fcHJpdmF0ZS0+Y2xlYXJTdGVuY2lsKGNsZWFyVmFsdWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVl
biwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbV9wcml2YXRl
LT5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAg
IG1fcHJpdmF0ZS0+Y29tcGlsZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtX3ByaXZhdGUt
PmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNl
dCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+Y29weVRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeE9mZnNldCwgeU9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0g
ICAgbV9wcml2YXRlLT5jdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgbV9wcml2YXRlLT5kZXB0aEZ1bmMo
ZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVh
biBmbGFnKQotewotICAgIG1fcHJpdmF0ZS0+ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikKLXsKLSAgICBtX3ByaXZhdGUtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX3ByaXZhdGUtPmRldGFjaFNo
YWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtX3ByaXZhdGUtPmRpc2FibGUoY2FwKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50
IGluZGV4KQotewotICAgIG1fcHJpdmF0ZS0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbV9wcml2YXRlLT5kcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1fcHJpdmF0ZS0+ZHJhd0VsZW1lbnRzKG1v
ZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpl
bmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1fcHJpdmF0ZS0+ZW5hYmxlKGNhcCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50
IGluZGV4KQotewotICAgIG1fcHJpdmF0ZS0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1fcHJpdmF0
ZS0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAg
ICBtX3ByaXZhdGUtPmZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsK
LSAgICBtX3ByaXZhdGUtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcmVuZGVyYnVmZmVyVGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNE
aW50IGxldmVsKQotewotICAgIG1fcHJpdmF0ZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXhUYXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2YXRl
LT5mcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRl
TWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtX3ByaXZhdGUtPmdlbmVyYXRlTWlwbWFw
KHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZv
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRl
eCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGlu
ZGV4LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFk
ZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6
ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQotewotICAgIG1fcHJpdmF0ZS0+
Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Ci19
Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGJvb2xlYW4qIHZh
bHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3By
aXZhdGUtPmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19
Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRD
b250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkK
LXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRFcnJvcigpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KQotewotICAgIG1fcHJpdmF0ZS0+Z2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBhcmFtTmFtZSwgdmFsdWUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcnYocGFyYW1O
YW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFBy
b2dyYW1JbmZvTG9nKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFNoYWRlcml2KHNo
YWRlciwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Ci19Ci0KLVN0cmluZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFNoYWRlclNvdXJjZShzaGFkZXIpOwotfQotCi1TdHJp
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhuYW1lKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRUZXhQYXJhbWV0ZXJm
dih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJn
ZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRV
bmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1p
dihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2
YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlv
bihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRl
LT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VmVy
dGV4QXR0cmliaXYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1sb25nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVt
IHBhcmFtTmFtZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQoaW5kZXgsIHBhcmFtTmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJpdmF0ZS0+aGludCh0
YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNCdWZm
ZXIob2JqKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNFbmFibGVkKGNhcCk7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRnJhbWVidWZmZXIob2Jq
KTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1Byb2dyYW0ob2JqKTsK
LX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUmVuZGVyYnVmZmVy
KG9iaik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0
Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1NoYWRlcihvYmop
OwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzVGV4dHVyZShvYmopOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQot
ewotICAgIG1fcHJpdmF0ZS0+bGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1f
cHJpdmF0ZS0+bGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAg
ICBtX3ByaXZhdGUtPnBpeGVsU3RvcmVpKHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9h
dCB1bml0cykKLXsKLSAgICBtX3ByaXZhdGUtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIG1fcHJpdmF0ZS0+cmVhZFBpeGVs
cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
LXsKLSAgICBtX3ByaXZhdGUtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBs
ZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBt
X3ByaXZhdGUtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5zY2lzc29yKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBt
X3ByaXZhdGUtPnNoYWRlclNvdXJjZShwcm9ncmFtLCBzdHJpbmcpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFz
ayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17
Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFz
ayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1h
c2spCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWlu
dCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNr
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWws
IEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5j
aWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQgcGFyYW0pCi17Ci0gICAgbV9wcml2
YXRlLT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbV9wcml2YXRlLT50ZXhQYXJhbWV0
ZXJpKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhPZmZzZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
LXsKLSAgICBtX3ByaXZhdGUtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeE9mZnNldCwg
eU9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
IHgpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMWYobG9jYXRpb24sIHgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdHQzNEc2l6
ZWkgc2l6ZSwgQzNEZmxvYXQqIHYpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMWZ2KGxvY2F0
aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0xaShs
b2NhdGlvbiwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYoR0Mz
RGludCBsb2NhdGlvbiwgR0dDM0RzaXplaSBzaXplLCBDM0RpbnQqIHYpCi17Ci0gICAgbV9wcml2
YXRlLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5
KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTJmdihsb2Nh
dGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKLXsKLSAgICBtX3ByaXZhdGUt
PnVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIHYp
Ci17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbV9wcml2YXRlLT51bmlm
b3JtM2YobG9jYXRpb24sIHgsIHksIHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYp
Ci17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHopCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtM2ko
bG9jYXRpb24sIHgsIHksIHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiB2KQotewotICAg
IG1fcHJpdmF0ZS0+dW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykKLXsKLSAgICBtX3ByaXZhdGUt
PnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rm
bG9hdCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIHYp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KQotewotICAgIG1f
cHJpdmF0ZS0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgR0MzRGludCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm00aXYobG9jYXRpb24sIHNp
emUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+
dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1
ZSkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRy
YW5zcG9zZSwgdmFsdWUpOwotfQorICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtKQotewotICAgIG1fcHJpdmF0ZS0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSkKLXsKLSAgICBtX3ByaXZhdGUtPnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliMWYoaW5kZXgs
IHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0
cmliMWZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQotewot
ICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHgsIHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1
ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikKLXsKLSAgICBt
X3ByaXZhdGUtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IHZhbHVlcykKLXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdmFsdWVz
KTsKLX0KKyAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQp
CisgICAgICAgIHJldHVybiB0cnVlOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWI0ZihpbmRl
eCwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9wcml2YXRl
LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwg
R0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwg
R0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWJQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIG9mZnNldCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJD
b21wb3NpdGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciosIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3Vs
dHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMy
Q29tcGxpYW50KCkgY29uc3QKIHsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCi1QbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVybiBtX3By
aXZhdGUtPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3Jl
YXRlRnJhbWVidWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlUHJvZ3Jh
bSgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5k
ZXJidWZmZXIoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
OwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIo
R0MzRGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVTaGFkZXIodHlw
ZSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1
cmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNz
T3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNy
ZWF0ZVRleHR1cmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pCiB7Ci0g
ICAgbV9wcml2YXRlLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlt
YWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lk
dGgsIGludCBjYW52YXNIZWlnaHQsIFBsYXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQogewot
ICAgIG1fcHJpdmF0ZS0+ZGVsZXRlRnJhbWVidWZmZXIoYnVmZmVyKTsKLX0KKyAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlV2lkdGggPD0gMCB8fCBpbWFnZUhlaWdodCA8PSAwIHx8IGNhbnZh
c1dpZHRoIDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9IDAgfHwgIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9wcml2YXRlLT5kZWxldGVQcm9ncmFtKHByb2dyYW0p
OwotfQorICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+Y3IoKTsKKyAgICBjb250ZXh0LT5zYXZl
KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihi
dWZmZXIpOwotfQorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAorICAgICAgICBjb25z
dF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZVBpeGVscyksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoICogNCkpOwogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgbV9wcml2YXRlLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KKyAgICAvLyBPcGVuR0wga2Vl
cHMgdGhlIHBpeGVscyBzdG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGlt
YWdlIGhlcmUuCisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCAwLCBpbWFnZUhlaWdodCk7CisgICAg
Y2Fpcm9fc2NhbGUoY3IsIDEsIC0xKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbV9wcml2YXRlLT5kZWxl
dGVUZXh0dXJlKHRleHR1cmUpOwotfQorICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9f
T1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIGltYWdl
U3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBjYW52
YXNXaWR0aCwgLWNhbnZhc0hlaWdodCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRo
ZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIG1fcHJpdmF0ZS0+c3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IpOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9u
cygpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RXh0ZW5zaW9ucygpOwotfQotCi1JbnRT
aXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50U2l6ZSgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8
Q29udGV4dExvc3RDYWxsYmFjaz4pCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8
dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhl
bHNTaXplKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZO
ZWNlc3NhcnkoY29uc3QgSW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAkocmV2aXNpb24gMTMwNjMx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDkzICsyMCw4NiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCiAjaWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0KICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKIAor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRFZmwuaCIKLQor
I2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzX0dMLmg+CiAjaW5jbHVkZSA8
d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KQotewotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+
IGludGVybmFsID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpKTsKLQot
ICAgIGlmICghaW50ZXJuYWwtPmluaXRpYWxpemUoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBpbnRlcm5hbC5yZWxlYXNlKCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKLSAgICA6IG1fYm91bmRGQk8oMCkKLSAgICAs
IG1fYm91bmRUZXh0dXJlKDApCi0gICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKK0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAs
IG1faG9zdFdpbmRvdyhob3N0V2luZG93KQogICAgICwgbV9ldmFzR0woMCkKLSAgICAsIG1fY29u
dGV4dCgwKQotICAgICwgbV9zdXJmYWNlKDApCisgICAgLCBtX2V2YXNHTENvbnRleHQoMCkKKyAg
ICAsIG1fZXZhc0dMU3VyZmFjZSgwKQorICAgICwgbV9nbENvbnRleHQoMCkKKyAgICAsIG1fZ2xT
dXJmYWNlKDApCiAgICAgLCBtX2FwaSgwKQorICAgICwgbV9yZW5kZXJTdHlsZShyZW5kZXJTdHls
ZSkKIHsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKCkKLXsKLSAgICBpZiAoIW1fZXZhc0dMKQorICAgIGlmIChyZW5kZXJTdHlsZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBldmFzX2dsX3N1cmZhY2VfZGVzdHJv
eShtX2V2YXNHTCwgbV9zdXJmYWNlKTsKLQotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIGV2
YXNfZ2xfY29udGV4dF9kZXN0cm95KG1fZXZhc0dMLCBtX2NvbnRleHQpOwotCi0gICAgZXZhc19n
bF9mcmVlKG1fZXZhc0dMKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omlu
aXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKLXsKLSAg
ICBQYWdlQ2xpZW50RWZsKiBwYWdlQ2xpZW50ID0gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudEVmbCo+
KGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAgICBFdmFzKiBldmFzID0gMDsK
KyAgICBpZiAobV9ob3N0V2luZG93ICYmIG1faG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdlQ2xpZW50
KCkpIHsKKyAgICAgICAgLy8gV2ViS2l0MSBjb2RlIHBhdGguCisgICAgICAgIC8vIEZJWE1FOiBS
ZXRyaWV2ZSBldmFzIG9iamVjdCBmcm9tIHBsYXRmb3JtUGFnZUNsaWVudC0+dmlldygpLgorICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNf
Z2V0KHBhZ2VDbGllbnQtPnZpZXcoKSk7CisgICAgLy8gRm9yIFdlYktpdDIsIHdlIG5lZWQgdG8g
Y3JlYXRlIGEgZHVtbXkgZWNvcmVFdmFzIG9iamVjdCBmb3IgdGhlIFdlYlByb2Nlc3MgaW4gb3Jk
ZXIgdG8gdXNlIEV2YXNHTCBBUElzLgorICAgIGVjb3JlX2V2YXNfaW5pdCgpOworICAgIEVjb3Jl
X0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZ2xfeDExX25ldygwLCAwLCAwLCAwLCAxLCAx
KTsKKyAgICBpZiAoIWVjb3JlRXZhcykKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChlY29yZUV2YXMpOworICAgIGlmICghZXZhcykKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNfR0wgb2JqZWN0IGZvciBnbCByZW5kZXJpbmcgb24g
ZWZsLgogICAgIG1fZXZhc0dMID0gZXZhc19nbF9uZXcoZXZhcyk7CiAgICAgaWYgKCFtX2V2YXNH
TCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAKICAgICAvLyBHZXQg
dGhlIEFQSSBmb3IgcmVuZGVyaW5nIHVzaW5nIE9wZW5HTC4KICAgICAvLyBUaGlzIHJldHVybnMg
YSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhbGwgdGhlIE9wZW5HTCBmdW5jdGlvbnMgd2UgY2Fu
IHVzZSB0byByZW5kZXIgaW4gRXZhcwogICAgIG1fYXBpID0gZXZhc19nbF9hcGlfZ2V0KG1fZXZh
c0dMKTsKICAgICBpZiAoIW1fYXBpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFdmFz
X0dMX0NvbnRleHQqIHNoYXJlQ29udGV4dCA9IDA7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgLy8gR0MzRCB3aXRoIFJlbmRlck9mZnNjcmVlbiBzdHlsZSBmb3IgV2Vi
R0wgaGFzIHRvIGJlIHNoYXJlZCB3aXRoIEFDJ3MgY29udGV4dCB3aGVuIEFDIGlzIGVuYWJsZWQu
Ci0gICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IHBhZ2VDbGllbnQtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgc2hhcmVDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8RXZhc19HTF9Db250ZXh0Kj4oY29udGV4dC0+cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpKTsKLSAgICB9Ci0jZW5kaWYKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
Q3JlYXRlIGEgY29udGV4dAotICAgIG1fY29udGV4dCA9IGV2YXNfZ2xfY29udGV4dF9jcmVhdGUo
bV9ldmFzR0wsIHNoYXJlQ29udGV4dCk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBtX2V2YXNHTENvbnRleHQgPSBldmFzX2dsX2NvbnRleHRfY3JlYXRl
KG1fZXZhc0dMLCAwKTsKKyAgICBpZiAoIW1fZXZhc0dMQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gQ3JlYXRlIGEgc3VyZmFjZQotICAgIGlmICghY3JlYXRlU3VyZmFjZShwYWdl
Q2xpZW50LCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWNyZWF0ZVN1cmZhY2UoMCwgcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCit7CisgICAgaWYgKCFtX2V2YXNHTCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fZXZhc0dMU3VyZmFjZSkKKyAgICAgICAgZXZhc19nbF9z
dXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFjZSk7CiAKLSAgICByZXR1cm4g
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZXZhc0dMQ29udGV4dCkKKyAgICAgICAg
ZXZhc19nbF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fZXZhc0dMQ29udGV4dCk7CisKKyAg
ICBldmFzX2dsX2ZyZWUobV9ldmFzR0wpOwogfQogCisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjcmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRFZmwqIHBhZ2VDbGllbnQsIGJvb2wgcmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiB7CiAgICAgLy8gSWYgUmVuZGVyU3R5bGUgaXMgUmVu
ZGVyT2Zmc2NyZWVuLCB3ZSB3aWxsIGJlIHJlbmRlcmluZyB0byBhIEZCTywKQEAgLTExNyw4ICsx
MTAsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cgogICAgIGlu
dCBoZWlnaHQgPSAxOwogCiAgICAgLy8gQnV0LCBpbiBjYXNlIG9mIFJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93LCB3ZSBoYXZlIHRvIHJlbmRlciB0byBhIHJlbmRlciB0YXJnZXQgc3VyZmFjZSB3
aXRoIHRoZSBzYW1lIHNpemUgYXMgb3VyIHdlYlZpZXcuCi0gICAgaWYgKHJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KQotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQocGFnZUNsaWVu
dC0+dmlldygpLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgaWYgKHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSB7CisgICAgICAgIGlmICghcGFnZUNsaWVudCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IEdldCBnZW9tZXRyeSBvZiB3ZWJWaWV3
IGFuZCBzZXQgc2l6ZSBvZiB0YXJnZXQgc3VyZmFjZS4KKyAgICB9CiAKICAgICBFdmFzX0dMX0Nv
bmZpZyBjb25maWcgPSB7CiAgICAgICAgIEVWQVNfR0xfUkdCQV84ODg4LApAQCAtMTI4LDEwMDIg
KzEyNCw0OCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyCiAgICAg
fTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBFdmFzX0dMX1N1cmZhY2Ugb2JqZWN0Ci0gICAgbV9z
dXJmYWNlID0gZXZhc19nbF9zdXJmYWNlX2NyZWF0ZShtX2V2YXNHTCwgJmNvbmZpZywgd2lkdGgs
IGhlaWdodCk7Ci0gICAgaWYgKCFtX3N1cmZhY2UpCisgICAgbV9ldmFzR0xTdXJmYWNlID0gZXZh
c19nbF9zdXJmYWNlX2NyZWF0ZShtX2V2YXNHTCwgJmNvbmZpZywgd2lkdGgsIGhlaWdodCk7Cisg
ICAgaWYgKCFtX2V2YXNHTFN1cmZhY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAocmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cpIHsKICAgICAgICAgRXZhc19OYXRpdmVfU3VyZmFjZSBuYXRpdmVTdXJmYWNlOwogICAg
ICAgICAvLyBGaWxsIGluIHRoZSBOYXRpdmUgU3VyZmFjZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBn
aXZlbiBFdmFzIEdMIHN1cmZhY2UuCi0gICAgICAgIGV2YXNfZ2xfbmF0aXZlX3N1cmZhY2VfZ2V0
KG1fZXZhc0dMLCBtX3N1cmZhY2UsICZuYXRpdmVTdXJmYWNlKTsKKyAgICAgICAgZXZhc19nbF9u
YXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFjZSwgJm5hdGl2ZVN1cmZh
Y2UpOwogCi0gICAgICAgIC8vIENyZWF0ZSBhbmQgc3BlY2lhbGx5IHNldCB1cCBhIGV2YXNfb2Jq
ZWN0IHdoaWNoIGFjdCBhcyB0aGUgcmVuZGVyIHRhcmdlciBzdXJmYWNlLgotICAgICAgICBpZiAo
IXBhZ2VDbGllbnQtPmNyZWF0ZUV2YXNPYmplY3RGb3JBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCZu
YXRpdmVTdXJmYWNlLCBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhbmQgc3BlY2lhbGx5IHNl
dCB1cCBhIGV2YXNfb2JqZWN0IHdoaWNoIGFjdCBhcyB0aGUgcmVuZGVyIHRhcmdlciBzdXJmYWNl
LgogICAgIH0KICNlbmRpZgotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dDsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgcmV0dXJuIGV2
YXNfZ2xfbWFrZV9jdXJyZW50KG1fZXZhc0dMLCBtX3N1cmZhY2UsIG1fY29udGV4dCk7Ci19CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QK
LXsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJpbmRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLQotICAgIGlmICh0YXJnZXQgPT0gR0xfQVJS
QVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZmZXI7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyICE9IG1fYm91bmRGQk8pIHsKLSAgICAgICAg
bV9hcGktPmdsQmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZnJhbWVidWZmZXIpOwotICAgICAgICBt
X2JvdW5kRkJPID0gZnJhbWVidWZmZXI7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5n
bEJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLSAgICBtX2JvdW5kVGV4dHVyZSA9IHRleHR1
cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGVuZENvbG9yKEdDM0Rj
bGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYg
YWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51
bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBo
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGVuZEZ1bmMoR0MzRGVu
dW0gc3JjRmFjdG9yLCBHQzNEZW51bSBkc3RGYWN0b3IpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsQmxlbmRGdW5jKHNyY0ZhY3RvciwgZHN0RmFjdG9yKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmxl
bmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJ1ZmZlckRhdGEodGFy
Z2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdD
M0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUs
IGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhcihHQzNEYml0ZmllbGQg
bWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDbGVhciht
YXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNsZWFyQ29sb3IoR0Mz
RGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1w
ZiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDbGVh
ckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDbGVhckRlcHRoZihkZXB0aCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhclN0ZW5jaWwoR0MzRGludCBjbGVhclZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENsZWFyU3Rl
bmNpbChjbGVhclZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNv
bG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBi
bHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDb21w
aWxlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
b3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeE9mZnNldCwgeU9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEN1bGxGYWNlKG1vZGUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVwdGhGdW5jKGZ1
bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVwdGhNYXNrKEdDM0Ri
b29sZWFuIGZsYWcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
RGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVw
dGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVwdGhSYW5nZWYoek5lYXIsIHpGYXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGV0YWNoU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkaXNhYmxlKEdDM0RlbnVt
IGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEaXNhYmxl
KGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZW5hYmxl
KEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmZpbmlzaCgpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRmluaXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpmbHVzaCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJl
bmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlclRh
cmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQg
bGV2ZWwpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXhUYXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmZyb250RmFjZShHQzNE
ZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEZy
b250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdlbmVy
YXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6c2V0Q3VycmVudEdMQ29udGV4dCh2b2lkKiBjb250ZXh0LCB2b2lkKiBzdXJm
YWNlKQogewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IDA7Ci0gICAg
bV9hcGktPmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xF
TkdUSCwgJm1heE5hbWVMZW5ndGgpOwotICAgIGlmICghbWF4TmFtZUxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZSA9IGFkb3B0QXJyYXlQ
dHIobmV3IGNoYXJbbWF4TmFtZUxlbmd0aF0pOwotICAgIGlmICghbmFtZSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIEdMc2l6ZWkgbGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgbV9hcGktPmdsR2V0QWN0aXZlQXR0cmliKHByb2dy
YW0sIGluZGV4LCBtYXhOYW1lTGVuZ3RoLCAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZ2V0
KCkpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbmZv
Lm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUuZ2V0KCksIGxlbmd0aCk7Ci0gICAgaW5mby50
eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOworICAg
IG1fZ2xDb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2dsU3VyZmFjZSA9IHN1cmZhY2U7CiB9CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBtYXhO
YW1lTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNU
SVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heE5hbWVMZW5ndGgpOwotICAgIGlmICghbWF4TmFt
ZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4g
bmFtZSA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbWF4TmFtZUxlbmd0aF0pOwotICAgIGlmICgh
bmFtZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAobV9yZW5kZXJTdHlsZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQorICAgICAgICByZXR1cm4g
bV9nbENvbnRleHQ7CiAKLSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9
IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIG1fYXBpLT5nbEdldEFjdGl2ZVVuaWZvcm0o
cHJvZ3JhbSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFt
ZS5nZXQoKSk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGluZm8ubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgobmFtZS5nZXQoKSwgbGVuZ3RoKTsKLSAgICBp
bmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIG1fZXZhc0dMQ29udGV4dDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hh
ZGVycykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQo
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworICAgIHJldHVybiBl
dmFzX2dsX21ha2VfY3VycmVudChtX2V2YXNHTCwgbV9ldmFzR0xTdXJmYWNlLCBtX2V2YXNHTENv
bnRleHQpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFp
bnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1
cmUqIG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBp
LT5nbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdl
dEJvb2xlYW52KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldEJvb2xlYW52KHBhcmFtTmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QnVmZmVy
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldEJ1
ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtX2F0dHJpYnV0ZXM7Ci19Ci0KLUdDM0RlbnVt
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50
aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9zeW50
aGV0aWNFcnJvcnMuZmlyc3QoKTsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKG1f
c3ludGhldGljRXJyb3JzLmJlZ2luKCkpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbEdldEVycm9y
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRGbG9hdHYoR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEdldEZsb2F0dihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRJbnRlZ2Vydihw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdl
dFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBs
b2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGlj
c0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAoIWxvZ0xl
bmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJyYXlQdHI8Y2hhcj4g
bG9nID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAgICBpZiAoIWxvZykK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJuZWRMb2dMZW5ndGgg
PSAwOwotICAgIG1fYXBpLT5nbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxvZ0xlbmd0aCwg
JnJldHVybmVkTG9nTGVuZ3RoLCBsb2cuZ2V0KCkpOwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0g
cmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLQotICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmZy
b21VVEY4KGxvZy5nZXQoKSwgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFNoYWRlcml2KHNoYWRlciwgcGFyYW1OYW1l
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFNoYWRl
ckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBHTGludCBsb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRl
cml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0
aCk7Ci0gICAgaWYgKGxvZ0xlbmd0aCA8PSAxKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBPd25BcnJheVB0cjxjaGFyPiBsb2cgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2xvZ0xl
bmd0aF0pOwotICAgIGlmICghbG9nKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBH
TGludCByZXR1cm5lZExvZ0xlbmd0aCA9IDA7Ci0gICAgbV9hcGktPmdsR2V0U2hhZGVySW5mb0xv
ZyhzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cuZ2V0KCkpOwotICAg
IEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLQotICAgIFN0cmlu
ZyByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGxvZy5nZXQoKSwgcmV0dXJuZWRMb2dMZW5ndGgp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7Ci0gICAgbV9hcGkt
PmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCwgJmxvZ0xlbmd0
aCk7Ci0gICAgaWYgKGxvZ0xlbmd0aCA8PSAxKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBPd25BcnJheVB0cjxjaGFyPiBsb2cgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2xvZ0xl
bmd0aF0pOwotICAgIGlmICghbG9nKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBH
TGludCByZXR1cm5lZExvZ0xlbmd0aCA9IDA7Ci0gICAgbV9hcGktPmdsR2V0U2hhZGVyU291cmNl
KHNoYWRlciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZy5nZXQoKSk7Ci0gICAg
QVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOwotCi0gICAgU3RyaW5n
IHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgobG9nLmdldCgpLCByZXR1cm5lZExvZ0xlbmd0aCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2FwaS0+
Z2xHZXRTdHJpbmcobmFtZSkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdl
dFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlKTsKLX0KLQotR0MzRGludCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFVuaWZv
cm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsR2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwg
R0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFZlcnRl
eEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFZlcnRl
eEF0dHJpYml2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotR0MzRHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgbV9hcGktPmdsR2V0VmVydGV4QXR0cmliUG9pbnRl
cnYoaW5kZXgsIHBhcmFtTmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEdDM0RzaXplaXB0cj4ocG9pbnRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0K
LUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNCdWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IG1fYXBpLT5nbElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBtX2FwaS0+Z2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2Fw
aS0+Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzUmVu
ZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzU2hhZGVyKHNoYWRlcik7
Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICByZXR1cm4gbV9hcGktPmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xMaW5lV2lkdGgod2lkdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbExp
bmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cGl4ZWxTdG9yZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFBpeGVsU3RvcmVpKHBhcmFtTmFtZSwg
cGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cG9seWdvbk9mZnNl
dChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgbV9hcGktPmdsRmx1c2goKTsKLSAgICBtX2FwaS0+Z2xSZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xSZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2
YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGNvbnN0IGNoYXIqIHN0ciA9IHN0cmluZy51dGY4KCkuZGF0YSgpOwotICAgIGlu
dCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgbV9hcGktPmdsU2hhZGVyU291cmNlKHNo
YWRlciwgMSwgJnN0ciwgJmxlbmd0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
aykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50
IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNr
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0ZW5jaWxNYXNr
KG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzdGVuY2lsT3AoR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gekZhaWwsIEdDM0RlbnVtIHpQYXNzKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0ZW5jaWxPcChmYWlsLCB6RmFpbCwgelBhc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gekZhaWwsIEdDM0RlbnVtIHpQYXNz
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0ZW5jaWxPcFNl
cGFyYXRlKGZhY2UsIGZhaWwsIHpGYWlsLCB6UGFzcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5n
bFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5h
bWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnRleFBhcmFt
ZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0p
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeE9mZnNldCwgeU9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0xZihsb2NhdGlvbiwgeCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xaShHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50IHgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdD
M0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVu
aWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50
KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlm
b3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xVbmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm00Zihsb2Nh
dGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1
bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm00
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRGludCB6LCBHQzNEaW50IHcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3Jt
TWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtTWF0
cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVzZVByb2dyYW0ocHJv
Z3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2YWxpZGF0ZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgeCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0
ZXhBdHRyaWIxZihpbmRleCwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjFmdihp
bmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRl
eEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMmYoaW5k
ZXgsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0
cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHZhbHVl
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIzZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIzZihp
bmRleCwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0
ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjNmdihpbmRleCwg
dmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJp
YjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6
LCBHQzNEZmxvYXQgdykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZl
cnRleEF0dHJpYjRmdihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6
ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlk
ZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBpZiAobV9ib3VuZEFycmF5QnVmZmVyIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
YXBpLT5nbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQs
IHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
b2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmlld3BvcnQo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWaWV3cG9ydCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIgPSAwOwotICAgIG1fYXBpLT5nbEdlbkJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlciA9IDA7Ci0gICAg
bV9hcGktPmdsR2VuRnJhbWVidWZmZXJzKDEsICZidWZmZXIpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVQ
cm9ncmFtKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGkt
PmdsQ3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcjsKLSAgICBtX2FwaS0+Z2xHZW5SZW5k
ZXJidWZmZXJzKDEsICZidWZmZXIpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
c2hhZGVyVHlwZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9h
cGktPmdsQ3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlOwotICAgIG1fYXBpLT5n
bEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxl
dGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9ib3VuZEZC
TykgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0
byBiZSB1c2VkIGZvciBkcmF3aW5nCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0
cyBkZWxldGVkLgotICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOwotICAg
IH0KLSAgICBtX2FwaS0+Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlUmVuZGVy
YnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIG1f
c3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLUV4dGVuc2lvbnMzRCogR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAkocmV2aXNpb24gMTMwNjMxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxNSArMjIsMjYgQEAKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpbmNsdWRlIDxFdmFzX0dMLmg+CisjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oPgorI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK3R5cGVkZWYgc3RydWN0IF9F
dmFzX0dMICAgICAgICAgICAgICAgRXZhc19HTDsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1
cmZhY2UgICAgICAgRXZhc19HTF9TdXJmYWNlOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29u
dGV4dCAgICAgICBFdmFzX0dMX0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9Db25m
aWcgICAgICAgIEV2YXNfR0xfQ29uZmlnOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQVBJICAg
ICAgICAgICBFdmFzX0dMX0FQSTsKIAogY2xhc3MgUGFnZUNsaWVudEVmbDsKIAotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZQorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAgICAg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gY3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgYm9vbCByZW5k
ZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
R3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKICAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKQEAg
LTM4LDE4OCArNDksMjcgQEAgcHVibGljOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKLQor
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2sp
OworI2VuZGlmCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQogICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0OwotCi0gICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmUpOwotICAgIHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpOwotICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOwot
ICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCk7Ci0gICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCk7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsKLSAgICB2b2lkIGJs
ZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKTsKLSAgICB2b2lkIGJsZW5k
RnVuYyhHQzNEZW51bSBzcmNGYWN0b3IsIEdDM0RlbnVtIGRzdEZhY3Rvcik7Ci0gICAgdm9pZCBi
bGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVu
dW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0g
dXNhZ2UpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRw
dHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEpOwotCi0gICAgR0MzRGVu
dW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xl
YXIoR0MzRGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEY2xhbXBmIHJl
ZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsK
LSAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCk7Ci0gICAgdm9pZCBjbGVhclN0
ZW5jaWwoR0MzRGludCBjbGVhclZhbHVlKTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVh
biByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBh
bHBoYSk7Ci0gICAgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAg
dm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeE9mZnNldCwg
R0MzRGludCB5T2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAg
IHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Ri
b29sZWFuIGZsYWcpOwotICAgIHZvaWQgZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNE
Y2xhbXBmIHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBs
YXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOwotICAgIHZv
aWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KTsKLSAgICB2b2lkIGRy
YXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KTsK
LSAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgZW5hYmxlKEdDM0Rl
bnVtIGNhcCk7Ci0gICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRl
eCk7Ci0gICAgdm9pZCBmaW5pc2goKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHJlbmRlcmJ1ZmZlclRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9p
ZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHRleFRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBsZXZlbCk7
Ci0gICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1p
cG1hcChHQzNEZW51bSB0YXJnZXQpOwotCi0gICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIGJv
b2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBs
YXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpOwotICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGdldEJvb2xl
YW52KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKTsKLSAgICB2b2lkIGdl
dEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKTsKLSAgICBHQzNEZW51bSBnZXRFcnJvcigpOwotICAgIHZvaWQgZ2V0
RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAg
IHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0g
ICAgdm9pZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAg
IHZvaWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9i
amVjdCk7Ci0KLSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSk7Ci0gICAgdm9pZCBnZXRUZXhQYXJh
bWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSk7Ci0gICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1
ZSk7Ci0gICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgR0MzRGludCBnZXRVbmlmb3JtTG9j
YXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGdl
dFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIEdDM0RzaXplaXB0ciBn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSk7
Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKLSAgICBH
QzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBp
c0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9v
bGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBsaW5lV2lkdGgoR0Mz
RGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZv
aWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICB2
b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKTsKLQot
ICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQq
IGRhdGEpOwotCi0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7Ci0gICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShQbGF0
Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdD
M0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzayk7Ci0gICAg
dm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwot
ICAgIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpGYWlsLCBHQzNEZW51
bSB6UGFzcyk7Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
ZW51bSBmYWlsLCBHQzNEZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3MpOwotCi0gICAgYm9vbCB0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsK
LSAgICB2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQs
IEdDM0RpbnQgeU9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0KLSAgICB2
b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB1
bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAg
ICB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpOwotICAgIHZvaWQg
dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOwotICAg
IHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5KTsK
LSAgICB2b2lkIHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxv
YXQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwg
R0MzRGludCB5KTsKLSAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKLSAgICB2b2lkIHVuaWZvcm0z
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQg
dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50
IHopOwotICAgIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdD
M0RpbnQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHVu
aWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAg
IHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEaW50IHosIEdDM0RpbnQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSwgR0MzRGludCogdik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHZhbHVlKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOwotICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0KLSAgICB2b2lkIHVzZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCk7Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgeCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0g
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVz
KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0g
dHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpOwotCi0gICAgdm9pZCB2aWV3
cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCk7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3Jl
YXRlUHJvZ3JhbSgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCk7
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0pOwotICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgpOwotCi0gICAgdm9pZCBkZWxldGVCdWZmZXIoUGxh
dGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9p
ZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVT
aGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3Jt
M0RPYmplY3QpOwotCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcik7
Ci0KLSAgICBFeHRlbnNpb25zM0QqIGdldEV4dGVuc2lvbnMoKTsKLQotcHJpdmF0ZToKLSAgICBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKLQotICAgIGJvb2wgaW5pdGlhbGl6ZShHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpOwotCiAgICAgYm9vbCBjcmVhdGVTdXJmYWNlKFBhZ2VDbGllbnRF
ZmwqLCBib29sIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpOworICAgIHZvaWQgc2V0Q3Vy
cmVudEdMQ29udGV4dCh2b2lkKiwgdm9pZCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2JvdW5kRkJP
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9ib3VuZFRleHR1cmU7Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKKyAgICBIb3N0V2luZG93KiBtX2hvc3RXaW5kb3c7CiAKICAgICBMaXN0SGFzaFNldDxHQzNE
ZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CiAKICAgICBFdmFzX0dMKiBtX2V2YXNHTDsKLSAgICBF
dmFzX0dMX0NvbnRleHQqIG1fY29udGV4dDsKLSAgICBFdmFzX0dMX1N1cmZhY2UqIG1fc3VyZmFj
ZTsKKyAgICBFdmFzX0dMX0NvbnRleHQqIG1fZXZhc0dMQ29udGV4dDsKKyAgICBFdmFzX0dMX1N1
cmZhY2UqIG1fZXZhc0dMU3VyZmFjZTsKKyAgICB2b2lkKiBtX2dsQ29udGV4dDsKKyAgICB2b2lk
KiBtX2dsU3VyZmFjZTsKICAgICBFdmFzX0dMX0FQSSogbV9hcGk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIG1fcmVuZGVyU3R5bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167671</attachid>
            <date>2012-10-08 19:14:02 -0700</date>
            <delta_ts>2012-10-09 00:01:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96627-20121009111316.patch</filename>
            <type>text/plain</type>
            <size>79967</size>
            <attacher name="Regina Chung">heejin.r.chung</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTEwLTA4ICBSZWdpbmEg
Q2h1bmcgIDxoZWVqaW4uci5jaHVuZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2Ug
dGhlIHNoYXJlYWJsZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCogaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYyNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgRUZM
IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNEKEdDM0QpIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTCouCisgICAgICAgIEl0IHdhcyBpbml0aWFsbHkgaW1wbGVtZW50ZWQg
aW4gYSBkaWZmZXJlbnQgd2F5LCBkdWUgdG8gY2hhcmFjdGVyaXN0aWNzIG9mIEV2YXMsCisgICAg
ICAgIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBjb21tb24gaW1wbGVtZW50YXRp
b24gYW5kIGZpbmQgYW5vdGhlciB3YXkKKyAgICAgICAgdG8gZGVhbCB3aXRoIEV2YXMsIGVzcGVj
aWFsbHkgYmVjYXVzZSBhbGwgdGhlIGR1cGxpY2F0ZWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmVkIGNhaXJvIGltcGxlbWVudGF0aW9uIG9mIEdDM0QgYW5kIGFkZGVkIGVmbCBm
aWxlcyB0byBXZWJDb3JlX1NPVVJDRVMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDogTW9kaWZpZWQgY29kZSBzbyBHQzNET3BlbkdMKiBj
YW4gYmUgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVz
c2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDogUmVtb3ZlZCBmdW5j
dGlvbnMgaW1wbGVtZW50ZWQgaW4gR0MzRE9wZW5HTCoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29tcGxp
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaDogUmVtb3ZlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gR0Mz
RE9wZW5HTCoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisKIDIwMTItMTAt
MDggIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBpbWFnZSBub3Qg
ZGlzcGxheWVkIGluIGZsZXhib3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZp
c2lvbiAxMzA3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMjg5LDkgKzI4OSw4IEBAIElGIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICBM
SVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xT
aGltcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9EcmF3aW5nQnVmZmVyQ2Fpcm8u
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzREVmbC5jcHAJKHJldmlzaW9uIDEzMDcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4LDMzICsxOCwxMzQgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaWYgVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCIKLQogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRD
YWlyby5oIgorI2luY2x1ZGUgPEdML2dseC5oPgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTC5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgUmVuZGVy
U3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgYm9vbCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2Jq
ZWN0ID0gKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKLQotICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IGludGVybmFsID0gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGUoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9F
dmFzR0xPYmplY3QpOwotICAgIGlmICghaW50ZXJuYWwpCi0gICAgICAgIHJldHVybiAwOwotCiAg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBo
aWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwotICAgIGNvbnRl
eHQtPm1fcHJpdmF0ZSA9IGludGVybmFsLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gY29udGV4dC5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFz
ZSgpIDogMDsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJl
bnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi17CisgICAgLCBtX2NvbXBpbGVy
KGlzR0xFUzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9PVVRQVVQpCisg
ICAgLCBtX2F0dHJzKGF0dHJzKQorICAgICwgbV90ZXh0dXJlKDApCisgICAgLCBtX2NvbXBvc2l0
b3JUZXh0dXJlKDApCisgICAgLCBtX2ZibygwKQorI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAs
IG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQorI2VuZGlmCisgICAg
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9sYXllckNvbXBvc2l0ZWQoZmFsc2Up
CisgICAgLCBtX2ludGVybmFsQ29sb3JGb3JtYXQoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAg
ICAsIG1fYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkKKyAgICAsIG1fYm91bmRUZXh0dXJlMCgw
KQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBt
X3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0
V2luZG93LCByZW5kZXJTdHlsZSkpKQoreworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisg
ICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkU2hpbXMgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsK
KyAgICBpZiAoIWluaXRpYWxpemVkU2hpbXMpIHsKKyAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxp
emVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXplZFNoaW1zID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIG1fcHJpdmF0ZSA9IG51bGxwdHI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJy
ZW50R0xDb250ZXh0KSB7CisgICAgICAgIC8vIEV2YXMgZG9lc24ndCBhbGxvdyBpbmNsdWRpbmcg
Z2wgaGVhZGVycyBhbmQgRXZhc19HTCBoZWFkZXJzIGF0IHRoZSBzYW1lIHRpbWUsCisgICAgICAg
IC8vIHNvIHdlIG5lZWQgdG8gcXVlcnkgdGhlIGN1cnJlbnQgZ2wgY29udGV4dC9zdXJmYWNlIGhl
cmUgaW5zdGVhZCBvZiBpbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuCisgICAgICAgIHZvaWQq
IGN1cnJlbnRDb250ZXh0ID0gKHZvaWQqKWdsWEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgICAg
IHZvaWQqIGN1cnJlbnRTdXJmYWNlID0gKHZvaWQqKWdsWEdldEN1cnJlbnREcmF3YWJsZSgpOwor
ICAgICAgICBtX3ByaXZhdGUtPnNldEN1cnJlbnRHTENvbnRleHQoY3VycmVudENvbnRleHQsIGN1
cnJlbnRTdXJmYWNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRl
ck9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZhcyBG
Qk8uCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7CisK
KyAgICAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KKyAgICAgICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUg
RkJPLgorICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsR2Vu
RnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAg
ICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAg
ICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQmluZCBjYW52YXMgRkJP
LgorICAgICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX2Zibyk7CisgICAgICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87CisjaWYgVVNF
KE9QRU5HTF9FU18yKQorICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAg
ICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgICAg
IGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbEdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFNoQnVpbHRJblJlc291cmNl
cyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291
cmNlcyk7CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9B
VFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFy
eWluZ1ZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMp
OworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CisK
KyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVS
ZXNvdXJjZXMpOworCisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICBnbEVuYWJsZShHTF9QT0lO
VF9TUFJJVEUpOworICAgIGdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwor
I2VuZGlmCiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQpAQCAt
NTksNzk1ICsxNjAsNzggQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRl
eAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKKyNlbHNlCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogI2VuZGlmCiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzR0xF
UzJDb21wbGlhbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVy
ZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1fcHJpdmF0ZS0+YWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9wcml2
YXRlLT5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRGcmFtZWJ1
ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRS
ZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZl
cikKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZm
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRU
ZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJs
ZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1
ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVx
dWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEVxdWF0aW9uKG1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+
YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhHQzNEZW51bSBzcmNGYWN0b3IsIEdDM0RlbnVtIGRz
dEZhY3RvcikKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kRnVuYyhzcmNGYWN0b3IsIGRzdEZhY3Rv
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRz
dFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1
c2FnZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2Fn
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2Up
Ci17Ci0gICAgbV9wcml2YXRlLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhKQotewotICAgIG1fcHJpdmF0ZS0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6
ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+Y2xlYXIobWFzayk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQs
IEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsK
LSAgICBtX3ByaXZhdGUtPmNsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17
Ci0gICAgbV9wcml2YXRlLT5jbGVhckRlcHRoKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgY2xlYXJWYWx1ZSkKLXsKLSAgICBtX3ByaXZh
dGUtPmNsZWFyU3RlbmNpbChjbGVhclZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29s
ZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX3ByaXZhdGUt
PmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgbV9wcml2YXRlLT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQg
eU9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkKLXsKLSAgICBtX3ByaXZhdGUtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJpdmF0
ZS0+Y3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVu
YyhHQzNEZW51bSBmdW5jKQotewotICAgIG1fcHJpdmF0ZS0+ZGVwdGhGdW5jKGZ1bmMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsK
LSAgICBtX3ByaXZhdGUtPmRlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0g
ICAgbV9wcml2YXRlLT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9wcml2YXRlLT5kZXRhY2hTaGFkZXIocHJvZ3Jh
bSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51
bSBjYXApCi17Ci0gICAgbV9wcml2YXRlLT5kaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsK
LSAgICBtX3ByaXZhdGUtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1fcHJpdmF0ZS0+ZHJhd0FycmF5cyhtb2Rl
LCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVu
dHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
cHRyIG9mZnNldCkKLXsKLSAgICBtX3ByaXZhdGUtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwg
dHlwZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0Rl
bnVtIGNhcCkKLXsKLSAgICBtX3ByaXZhdGUtPmVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsK
LSAgICBtX3ByaXZhdGUtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtX3ByaXZhdGUtPmZpbmlzaCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCi17Ci0gICAgbV9wcml2YXRl
LT5mbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJl
bmRlcmJ1ZmZlclRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9wcml2
YXRlLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlclRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNE
ZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkK
LXsKLSAgICBtX3ByaXZhdGUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4VGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJpdmF0ZS0+ZnJvbnRGYWNl
KG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNE
ZW51bSB0YXJnZXQpCi17Ci0gICAgbV9wcml2YXRlLT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIGluZm8pOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwg
UGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBtX3ByaXZhdGUtPmdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1pbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEF0dHJp
YkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRCb29sZWFudihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAg
ICBtX3ByaXZhdGUtPmdldEJvb2xlYW52KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRC
dWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7
Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Z2V0RXJyb3IoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBt
X3ByaXZhdGUtPmdldEZsb2F0dihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50
KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldEludGVnZXJ2KHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1fcHJpdmF0ZS0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBhcmFtTmFtZSwgdmFsdWUpOwotfQot
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRQcm9ncmFtSW5mb0xv
Zyhwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFy
Z2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFt
TmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcklu
Zm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5nZXRTdHJpbmcobmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRl
eFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1
ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtX3ByaXZhdGUtPmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQot
Ci1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0g
cGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VmVydGV4
QXR0cmliZnYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1O
YW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFZlcnRleEF0dHJpYml2
KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUp
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBw
YXJhbU5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX3ByaXZhdGUtPmhpbnQodGFyZ2V0LCBtb2Rl
KTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQnVmZmVyKG9iaik7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2Fw
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9i
aikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0ZyYW1lYnVmZmVyKG9iaik7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBv
YmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNQcm9ncmFtKG9iaik7Ci19Ci0KLUdDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1JlbmRlcmJ1ZmZlcihvYmopOwotfQot
Ci1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNTaGFkZXIob2JqKTsKLX0KLQotR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IG9i
aikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1RleHR1cmUob2JqKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBtX3By
aXZhdGUtPmxpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omxp
bmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX3ByaXZhdGUtPmxp
bmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0
b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbV9wcml2YXRl
LT5waXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17
Ci0gICAgbV9wcml2YXRlLT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICBtX3ByaXZhdGUtPnJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9w
cml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShH
QzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgbV9wcml2YXRlLT5z
YW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9wcml2YXRlLT5z
aGFkZXJTb3VyY2UocHJvZ3JhbSwgc3RyaW5nKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2sp
Ci17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1fcHJp
dmF0ZS0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQotewotICAg
IG1fcHJpdmF0ZS0+c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsK
LSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsT3AoZmFpbCwg
emZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0Rl
bnVtIHpwYXNzKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFp
bCwgemZhaWwsIHpwYXNzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+dGV4UGFy
YW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1l
LCBHQzNEaW50IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+dGV4UGFyYW1ldGVyaSh0YXJnZXQs
IHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBH
QzNEaW50IHlPZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbV9w
cml2YXRlLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KQotewotICAg
IG1fcHJpdmF0ZS0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHR0MzRHNpemVpIHNpemUsIEMz
RGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0
aW9uLCBHQzNEaW50IHgpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMWkobG9jYXRpb24sIHgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRp
b24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEaW50KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9y
bTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBt
X3ByaXZhdGUtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdD
M0RmbG9hdCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUs
IHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMmko
bG9jYXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiB2KQotewotICAgIG1f
cHJpdmF0ZS0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNmKGxvY2F0
aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiB2KQotewotICAgIG1f
cHJpdmF0ZS0+dW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRGludCB6KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNpKGxvY2F0aW9uLCB4
LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogdikKLXsKLSAgICBtX3ByaXZhdGUt
PnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGYo
bG9jYXRpb24sIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCi17
Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykKLXsKLSAgICBtX3ByaXZhdGUtPnVu
aWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQq
IHYpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1N
YXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bV9wcml2YXRlLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZh
bHVlKTsKLX0KKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBtX3ByaXZhdGUtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgbV9wcml2YXRlLT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgeCkKLXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB4KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjFmdihpbmRl
eCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkKLXsKLSAgICBtX3ByaXZh
dGUtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgdmFsdWVzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbV9wcml2YXRlLT52
ZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17
Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7Ci19CisgICAg
aWYgKG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0Rm
bG9hdCB3KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHgsIHksIHos
IHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0
cmliNGZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5
cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIg
b2Zmc2V0KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+dmlld3BvcnQoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqLCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2lu
Z0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXIqKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0CiB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UK
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVh
dGVCdWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlRnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZUZyYW1lYnVm
ZmVyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVBy
b2dyYW0oKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVByb2dyYW0oKTsKLX0KLQot
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkK
LXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKLX0KLQotUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5
cGUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotfQotCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVUZXh0dXJl
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KQogewotICAgIG1fcHJpdmF0
ZS0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywg
aW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2Fu
dmFzSGVpZ2h0LCBQbGF0Zm9ybUNvbnRleHRDYWlybyogY29udGV4dCkKIHsKLSAgICBtX3ByaXZh
dGUtPmRlbGV0ZUZyYW1lYnVmZmVyKGJ1ZmZlcik7Ci19CisgICAgaWYgKCFpbWFnZVBpeGVscyB8
fCBpbWFnZVdpZHRoIDw9IDAgfHwgaW1hZ2VIZWlnaHQgPD0gMCB8fCBjYW52YXNXaWR0aCA8PSAw
IHx8IGNhbnZhc0hlaWdodCA8PSAwIHx8ICFjb250ZXh0KQorICAgICAgICByZXR1cm47CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KKyAgICBj
YWlyb190KiBjciA9IGNvbnRleHQtPmNyKCk7CisgICAgY29udGV4dC0+c2F2ZSgpOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCi17Ci0gICAgbV9wcml2YXRlLT5kZWxldGVSZW5kZXJidWZmZXIoYnVmZmVyKTsKLX0K
KyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgY29uc3RfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oaW1hZ2VQaXhlbHMpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBpbWFnZVdpZHRo
LCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCAqIDQpKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1fcHJpdmF0
ZS0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19CisgICAgLy8gT3BlbkdMIGtlZXBzIHRoZSBwaXhl
bHMgc3RvcmVkIGJvdHRvbSB1cCwgc28gd2UgbmVlZCB0byBmbGlwIHRoZSBpbWFnZSBoZXJlLgor
ICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgMCwgaW1hZ2VIZWlnaHQpOworICAgIGNhaXJvX3NjYWxl
KGNyLCAxLCAtMSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRlVGV4dHVyZSh0
ZXh0dXJlKTsKLX0KKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NP
VVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBpbWFnZVN1cmZhY2UuZ2V0
KCksIDAsIDApOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgY2FudmFzV2lkdGgsIC1j
YW52YXNIZWlnaHQpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJv
cihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3ByaXZhdGUtPnN5bnRoZXNpemVHTEVycm9yKGVy
cm9yKTsKKyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAK
LUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAg
IHJldHVybiBtX3ByaXZhdGUtPmdldEV4dGVuc2lvbnMoKTsKLX0KLQotSW50U2l6ZSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0
Q2FsbGJhY2s+KQorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBv
dXRwdXRWZWN0b3IpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciogcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlRkJPcyhjb25zdCBJbnRTaXplJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNv
bnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDEzMDcxNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5MyArMjAsODYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKIAogI2lmIFVTRSgzRF9HUkFQSElDUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50RWZsLmgiCi0KKyNpbmNsdWRlIDxF
Y29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhc19HTC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKLXsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBpbnRlcm5hbCA9
IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKSk7Ci0KLSAgICBpZiAoIWlu
dGVybmFsLT5pbml0aWFsaXplKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gaW50
ZXJuYWwucmVsZWFzZSgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSgpCi0gICAgOiBtX2JvdW5kRkJPKDApCi0gICAgLCBtX2JvdW5kVGV4
dHVyZSgwKQotICAgICwgbV9ib3VuZEFycmF5QnVmZmVyKDApCitHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxl
IHJlbmRlclN0eWxlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2hvc3RXaW5k
b3coaG9zdFdpbmRvdykKICAgICAsIG1fZXZhc0dMKDApCi0gICAgLCBtX2NvbnRleHQoMCkKLSAg
ICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9ldmFzR0xDb250ZXh0KDApCisgICAgLCBtX2V2YXNH
TFN1cmZhY2UoMCkKKyAgICAsIG1fZ2xDb250ZXh0KDApCisgICAgLCBtX2dsU3VyZmFjZSgwKQog
ICAgICwgbV9hcGkoMCkKKyAgICAsIG1fcmVuZGVyU3R5bGUocmVuZGVyU3R5bGUpCiB7Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCi17
Ci0gICAgaWYgKCFtX2V2YXNHTCkKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fc3VyZmFjZSkKLSAgICAgICAgZXZhc19nbF9zdXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0ws
IG1fc3VyZmFjZSk7Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBldmFzX2dsX2NvbnRl
eHRfZGVzdHJveShtX2V2YXNHTCwgbV9jb250ZXh0KTsKLQotICAgIGV2YXNfZ2xfZnJlZShtX2V2
YXNHTCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi17Ci0gICAgUGFnZUNsaWVu
dEVmbCogcGFnZUNsaWVudCA9IHN0YXRpY19jYXN0PFBhZ2VDbGllbnRFZmwqPihob3N0V2luZG93
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7CisgICAgRXZhcyogZXZhcyA9IDA7CisgICAgaWYgKG1f
aG9zdFdpbmRvdyAmJiBtX2hvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKSB7CisgICAg
ICAgIC8vIFdlYktpdDEgY29kZSBwYXRoLgorICAgICAgICAvLyBGSVhNRTogUmV0cmlldmUgZXZh
cyBvYmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGllbnQtPnZpZXcoKS4KKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwYWdlQ2xp
ZW50LT52aWV3KCkpOworICAgIC8vIEZvciBXZWJLaXQyLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGR1
bW15IGVjb3JlRXZhcyBvYmplY3QgZm9yIHRoZSBXZWJQcm9jZXNzIGluIG9yZGVyIHRvIHVzZSBF
dmFzR0wgQVBJcy4KKyAgICBlY29yZV9ldmFzX2luaXQoKTsKKyAgICBFY29yZV9FdmFzKiBlY29y
ZUV2YXMgPSBlY29yZV9ldmFzX2dsX3gxMV9uZXcoMCwgMCwgMCwgMCwgMSwgMSk7CisgICAgaWYg
KCFlY29yZUV2YXMpCisgICAgICAgIHJldHVybjsKKyAgICBldmFzID0gZWNvcmVfZXZhc19nZXQo
ZWNvcmVFdmFzKTsKKyAgICBpZiAoIWV2YXMpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIENy
ZWF0ZSBhIG5ldyBFdmFzX0dMIG9iamVjdCBmb3IgZ2wgcmVuZGVyaW5nIG9uIGVmbC4KICAgICBt
X2V2YXNHTCA9IGV2YXNfZ2xfbmV3KGV2YXMpOwogICAgIGlmICghbV9ldmFzR0wpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBBUEkgZm9y
IHJlbmRlcmluZyB1c2luZyBPcGVuR0wuCiAgICAgLy8gVGhpcyByZXR1cm5zIGEgc3RydWN0dXJl
IHRoYXQgY29udGFpbnMgYWxsIHRoZSBPcGVuR0wgZnVuY3Rpb25zIHdlIGNhbiB1c2UgdG8gcmVu
ZGVyIGluIEV2YXMKICAgICBtX2FwaSA9IGV2YXNfZ2xfYXBpX2dldChtX2V2YXNHTCk7CiAgICAg
aWYgKCFtX2FwaSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRXZhc19HTF9Db250ZXh0
KiBzaGFyZUNvbnRleHQgPSAwOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIC8vIEdDM0Qgd2l0aCBSZW5kZXJPZmZzY3JlZW4gc3R5bGUgZm9yIFdlYkdMIGhhcyB0byBi
ZSBzaGFyZWQgd2l0aCBBQydzIGNvbnRleHQgd2hlbiBBQyBpcyBlbmFibGVkLgotICAgIGlmICgh
cmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBwYWdlQ2xpZW50LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpOwot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIHNoYXJlQ29udGV4dCA9IHN0YXRpY19j
YXN0PEV2YXNfR0xfQ29udGV4dCo+KGNvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KSk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIGNv
bnRleHQKLSAgICBtX2NvbnRleHQgPSBldmFzX2dsX2NvbnRleHRfY3JlYXRlKG1fZXZhc0dMLCBz
aGFyZUNvbnRleHQpOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9ldmFzR0xDb250ZXh0ID0gZXZhc19nbF9jb250ZXh0X2NyZWF0ZShtX2V2YXNHTCwg
MCk7CisgICAgaWYgKCFtX2V2YXNHTENvbnRleHQpCisgICAgICAgIHJldHVybjsKIAogICAgIC8v
IENyZWF0ZSBhIHN1cmZhY2UKLSAgICBpZiAoIWNyZWF0ZVN1cmZhY2UocGFnZUNsaWVudCwgcmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFjcmVhdGVTdXJmYWNlKDAsIHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworfQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoKQoreworICAgIGlmICghbV9ldmFzR0wpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2V2YXNHTFN1cmZhY2UpCisgICAgICAgIGV2YXNfZ2xfc3VyZmFjZV9kZXN0
cm95KG1fZXZhc0dMLCBtX2V2YXNHTFN1cmZhY2UpOwogCi0gICAgcmV0dXJuIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmIChtX2V2YXNHTENvbnRleHQpCisgICAgICAgIGV2YXNfZ2xfY29u
dGV4dF9kZXN0cm95KG1fZXZhc0dMLCBtX2V2YXNHTENvbnRleHQpOworCisgICAgZXZhc19nbF9m
cmVlKG1fZXZhc0dMKTsKIH0KIAorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiBwYWdlQ2xpZW50LCBib29sIHJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KQogewogICAgIC8vIElmIFJlbmRlclN0eWxlIGlzIFJlbmRlck9mZnNjcmVl
biwgd2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSBGQk8sCkBAIC0xMTcsOCArMTEwLDExIEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVTdXIKICAgICBpbnQgaGVpZ2h0ID0g
MTsKIAogICAgIC8vIEJ1dCwgaW4gY2FzZSBvZiBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywg
d2UgaGF2ZSB0byByZW5kZXIgdG8gYSByZW5kZXIgdGFyZ2V0IHN1cmZhY2Ugd2l0aCB0aGUgc2Ft
ZSBzaXplIGFzIG91ciB3ZWJWaWV3LgotICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykKLSAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHBhZ2VDbGllbnQtPnZpZXcoKSwg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGlmIChyZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykgeworICAgICAgICBpZiAoIXBhZ2VDbGllbnQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIEZJWE1FOiBHZXQgZ2VvbWV0cnkgb2Ygd2ViVmlldyBhbmQgc2V0IHNp
emUgb2YgdGFyZ2V0IHN1cmZhY2UuCisgICAgfQogCiAgICAgRXZhc19HTF9Db25maWcgY29uZmln
ID0gewogICAgICAgICBFVkFTX0dMX1JHQkFfODg4OCwKQEAgLTEyOCwxMDAyICsxMjQsNDggQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cgogICAgIH07CiAKICAgICAv
LyBDcmVhdGUgYSBuZXcgRXZhc19HTF9TdXJmYWNlIG9iamVjdAotICAgIG1fc3VyZmFjZSA9IGV2
YXNfZ2xfc3VyZmFjZV9jcmVhdGUobV9ldmFzR0wsICZjb25maWcsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIGlmICghbV9zdXJmYWNlKQorICAgIG1fZXZhc0dMU3VyZmFjZSA9IGV2YXNfZ2xfc3VyZmFj
ZV9jcmVhdGUobV9ldmFzR0wsICZjb25maWcsIHdpZHRoLCBoZWlnaHQpOworICAgIGlmICghbV9l
dmFzR0xTdXJmYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSB7CiAg
ICAgICAgIEV2YXNfTmF0aXZlX1N1cmZhY2UgbmF0aXZlU3VyZmFjZTsKICAgICAgICAgLy8gRmls
bCBpbiB0aGUgTmF0aXZlIFN1cmZhY2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXZhcyBH
TCBzdXJmYWNlLgotICAgICAgICBldmFzX2dsX25hdGl2ZV9zdXJmYWNlX2dldChtX2V2YXNHTCwg
bV9zdXJmYWNlLCAmbmF0aXZlU3VyZmFjZSk7CisgICAgICAgIGV2YXNfZ2xfbmF0aXZlX3N1cmZh
Y2VfZ2V0KG1fZXZhc0dMLCBtX2V2YXNHTFN1cmZhY2UsICZuYXRpdmVTdXJmYWNlKTsKIAotICAg
ICAgICAvLyBDcmVhdGUgYW5kIHNwZWNpYWxseSBzZXQgdXAgYSBldmFzX29iamVjdCB3aGljaCBh
Y3QgYXMgdGhlIHJlbmRlciB0YXJnZXIgc3VyZmFjZS4KLSAgICAgICAgaWYgKCFwYWdlQ2xpZW50
LT5jcmVhdGVFdmFzT2JqZWN0Rm9yQWNjZWxlcmF0ZWRDb21wb3NpdGluZygmbmF0aXZlU3VyZmFj
ZSwgSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYW5kIHNwZWNpYWxseSBzZXQgdXAgYSBldmFz
X29iamVjdCB3aGljaCBhY3QgYXMgdGhlIHJlbmRlciB0YXJnZXIgc3VyZmFjZS4KICAgICB9CiAj
ZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NvbnRleHQ7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIHJldHVybiBldmFzX2dsX21ha2Vf
Y3VycmVudChtX2V2YXNHTCwgbV9zdXJmYWNlLCBtX2NvbnRleHQpOwotfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphY3RpdmVUZXh0
dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
aW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQmluZEJ1ZmZl
cih0YXJnZXQsIGJ1ZmZlcik7Ci0KLSAgICBpZiAodGFyZ2V0ID09IEdMX0FSUkFZX0JVRkZFUikK
LSAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIGlmIChmcmFtZWJ1ZmZlciAhPSBtX2JvdW5kRkJPKSB7Ci0gICAgICAgIG1fYXBpLT5nbEJp
bmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9
IGZyYW1lYnVmZmVyOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZl
cikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCaW5kUmVuZGVy
YnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJpbmRUZXh0dXJl
KHRhcmdldCwgdGV4dHVyZSk7Ci0gICAgbV9ib3VuZFRleHR1cmUgPSB0ZXh0dXJlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwg
R0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbEJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwg
R0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxlbmRGdW5jKEdDM0RlbnVtIHNyY0ZhY3Rv
ciwgR0MzRGVudW0gZHN0RmFjdG9yKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IG1fYXBpLT5nbEJsZW5kRnVuYyhzcmNGYWN0b3IsIGRzdEZhY3Rvcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0Is
IEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEJsZW5kRnVuY1NlcGFy
YXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXpl
aXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVy
U3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIg
c2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0K
LQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gbV9hcGktPmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ2xlYXIobWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVk
LCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ2xlYXJDb2xvcihyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgY2xlYXJWYWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDbGVhclN0ZW5jaWwoY2xlYXJW
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb2xvck1hc2soR0Mz
RGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJv
b2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQ29tcGlsZVNoYWRlcihz
aGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZz
ZXQsIHlPZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlcHRoRnVuYyhmdW5jKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFn
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlcHRoTWFzayhm
bGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlcHRoUmFuZ2UoR0Mz
RGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGlzYWJsZShjYXApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3Qs
IEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2Fw
aS0+Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmVuYWJsZShHQzNEZW51bSBj
YXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRW5hYmxlKGNh
cCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpmaW5pc2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Zmx1c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHJlbmRlcmJ1ZmZlclRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJUYXJnZXQsIHJlbmRl
cmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHRleFRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4VGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xGcm9udEZhY2UobW9k
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZW5lcmF0ZU1pcG1hcChH
QzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnNldEN1cnJlbnRHTENvbnRleHQodm9pZCogY29udGV4dCwgdm9pZCogc3VyZmFjZSkKIHsKLSAg
ICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhO
YW1lTGVuZ3RoKTsKLSAgICBpZiAoIW1heE5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFy
W21heE5hbWVMZW5ndGhdKTsKLSAgICBpZiAoIW5hbWUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBHTHNpemVpIGxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVt
IHR5cGUgPSAwOwotICAgIG1fYXBpLT5nbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwg
bWF4TmFtZUxlbmd0aCwgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmdldCgpKTsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5uYW1lID0gU3Ry
aW5nOjpmcm9tVVRGOChuYW1lLmdldCgpLCBsZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7
Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2dsQ29udGV4
dCA9IGNvbnRleHQ7CisgICAgbV9nbFN1cmZhY2UgPSBzdXJmYWNlOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSBjb25zdAogewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9
IDA7Ci0gICAgbV9hcGktPmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKLSAgICBpZiAoIW1heE5hbWVMZW5ndGgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWUgPSBhZG9w
dEFycmF5UHRyKG5ldyBjaGFyW21heE5hbWVMZW5ndGhdKTsKLSAgICBpZiAoIW5hbWUpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKG1fcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1fZ2xDb250ZXh0
OwogCi0gICAgR0xzaXplaSBsZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdM
ZW51bSB0eXBlID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGlu
ZGV4LCBtYXhOYW1lTGVuZ3RoLCAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZ2V0KCkpOwot
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbmZvLm5hbWUg
PSBTdHJpbmc6OmZyb21VVEY4KG5hbWUuZ2V0KCksIGxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0g
dHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBtX2V2YXNHTENvbnRleHQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4
Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCitib29s
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKKyAgICByZXR1cm4gZXZhc19nbF9tYWtl
X2N1cnJlbnQobV9ldmFzR0wsIG1fZXZhc0dMU3VyZmFjZSwgbV9ldmFzR0xDb250ZXh0KTsKIH0K
IAotaW50IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRCb29sZWFudihH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRCb29sZWFudihwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEJ1ZmZlclBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldENvbnRleHRBdHRyaWJ1dGVz
KCkKLXsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3Jz
LmlzRW1wdHkoKSkgewotICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fc3ludGhldGljRXJyb3Jz
LmZpcnN0KCk7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShtX3N5bnRoZXRpY0Vy
cm9ycy5iZWdpbigpKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xHZXRFcnJvcigpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xHZXRGbG9hdHYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBw
YXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Omdl
dEludGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRQcm9ncmFtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFByb2dy
YW1pdihwcm9ncmFtLCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbG9nTGVuZ3RoID0g
MDsKLSAgICBtX2FwaS0+Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6
OklORk9fTE9HX0xFTkdUSCwgJmxvZ0xlbmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0
QXJyYXlQdHIobmV3IGNoYXJbbG9nTGVuZ3RoXSk7Ci0gICAgaWYgKCFsb2cpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIEdMaW50IHJldHVybmVkTG9nTGVuZ3RoID0gMDsKLSAgICBt
X2FwaS0+Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZyZXR1cm5lZExv
Z0xlbmd0aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9n
TGVuZ3RoICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChsb2cu
Z2V0KCksIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFtZSwgdmFsdWUpOwot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlm
IChsb2dMZW5ndGggPD0gMSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJy
YXlQdHI8Y2hhcj4gbG9nID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAg
ICBpZiAoIWxvZykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJu
ZWRMb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBs
b2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9n
TGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0g
U3RyaW5nOjpmcm9tVVRGOChsb2cuZ2V0KCksIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBHTGludCBsb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRl
cml2KHNoYWRlciwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlm
IChsb2dMZW5ndGggPD0gMSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgT3duQXJy
YXlQdHI8Y2hhcj4gbG9nID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltsb2dMZW5ndGhdKTsKLSAg
ICBpZiAoIWxvZykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgR0xpbnQgcmV0dXJu
ZWRMb2dMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFNoYWRlclNvdXJjZShzaGFkZXIsIGxv
Z0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cuZ2V0KCkpOwotICAgIEFTU0VSVChsb2dM
ZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLQotICAgIFN0cmluZyByZXN1bHQgPSBT
dHJpbmc6OmZyb21VVEY4KGxvZy5nZXQoKSwgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFN0cmlu
ZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9hcGktPmdsR2V0U3RyaW5n
KG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRUZXhQYXJh
bWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRUZXhQ
YXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFVuaWZv
cm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19
Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRVbmlmb3JtTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBh
cmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWZXJ0ZXhBdHRyaWJpdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRWZXJ0ZXhBdHRyaWJpdihp
bmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcGFyYW1OYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZvaWQqIHBv
aW50ZXIgPSAwOwotICAgIG1fYXBpLT5nbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBw
YXJhbU5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHQzNEc2l6
ZWlwdHI+KHBvaW50ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVm
ZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJ
c0J1ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBm
cmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9h
cGktPmdsSXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNQcm9n
cmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc1JlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1f
YXBpLT5nbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xMaW5rUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xQaXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0
IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IG1fYXBpLT5nbEZsdXNoKCk7Ci0gICAgbV9hcGktPmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0
YXJnZXQsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Ri
b29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBj
b25zdCBjaGFyKiBzdHIgPSBzdHJpbmcudXRmOCgpLmRhdGEoKTsKLSAgICBpbnQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgIG1fYXBpLT5nbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZz
dHIsICZsZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNp
bEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxGdW5j
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0Rl
bnVtIHpGYWlsLCBHQzNEZW51bSB6UGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xTdGVuY2lsT3AoZmFpbCwgekZhaWwsIHpQYXNzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpGYWlsLCBHQzNEZW51bSB6UGFzcykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNl
LCBmYWlsLCB6RmFpbCwgelBhc3MpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
YXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZz
ZXQsIEdDM0RpbnQgeU9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0xZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMWYobG9jYXRpb24sIHgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVu
aWZvcm0xaShsb2NhdGlvbiwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0y
Zihsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0y
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMmkobG9j
YXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9y
bTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTJpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHopCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5p
Zm9ybTNmKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rm
bG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEaW50IHopCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGYobG9jYXRpb24sIHgsIHks
IHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGZ2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlm
b3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVu
aWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBH
QzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDNmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2Fw
aS0+Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMWYo
aW5kZXgsIHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0
cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVl
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIyZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHgsIHks
IHopOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliM2Z2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0
IHcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0
cmliNGYoaW5kZXgsIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xWZXJ0ZXhBdHRyaWI0
ZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVt
IHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRw
dHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fYm91
bmRBcnJheUJ1ZmZlciA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FwaS0+Z2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyID0gMDsKLSAgICBtX2FwaS0+Z2xHZW5CdWZmZXJzKDEsICZidWZmZXIp
OwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIgPSAwOwotICAgIG1fYXBpLT5nbEdl
bkZyYW1lYnVmZmVycygxLCAmYnVmZmVyKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUHJvZ3JhbSgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENyZWF0ZVBy
b2dyYW0oKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBidWZmZXI7Ci0gICAgbV9hcGktPmdsR2VuUmVuZGVyYnVmZmVycygx
LCAmYnVmZmVyKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHNoYWRlclR5cGUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENyZWF0
ZVNoYWRlcihzaGFkZXJUeXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZTsKLSAgICBtX2FwaS0+Z2xHZW5UZXh0dXJl
cygxLCAmdGV4dHVyZSk7Ci0gICAgcmV0dXJuIHRleHR1cmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlQnVmZmVycygx
LCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZUZy
YW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fYm91bmRGQk8pIHsKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBm
b3IgZHJhd2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4K
LSAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgbV9h
cGktPmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVQ
cm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
JnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxl
dGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZWxldGVU
ZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOwotfQotCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQorI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBV
U0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDEzMDcxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMTUgKzIyLDI2IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogCi0jaW5jbHVkZSA8RXZhc19HTC5oPgorI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKKyNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KKyNl
bmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTCAgICAg
ICAgICAgICAgIEV2YXNfR0w7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlICAgICAg
IEV2YXNfR0xfU3VyZmFjZTsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0NvbnRleHQgICAgICAg
RXZhc19HTF9Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfQ29uZmlnICAgICAgICBF
dmFzX0dMX0NvbmZpZzsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX0dMX0FQSSAgICAgICAgICAgRXZh
c19HTF9BUEk7CiAKIGNsYXNzIFBhZ2VDbGllbnRFZmw7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgICAgIDogcHVibGljIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyCisjZW5kaWYKK3sKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0V2YXNHTE9iamVjdCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAg
ICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCiAgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CkBAIC0zOCwxODggKzQ5
LDI3IEBAIHB1YmxpYzoKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCi0KKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKTsKKyNlbmRpZgog
ICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KICAgICBib29sIGlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKTsK
LSAgICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGJp
bmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJp
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZv
aWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICB2b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdD
M0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9u
KEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVt
IG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVu
dW0gc3JjRmFjdG9yLCBHQzNEZW51bSBkc3RGYWN0b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhh
LCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKTsKLSAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwg
R0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhKTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRm
aWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFt
cGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSk7Ci0gICAgdm9pZCBj
bGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0Rp
bnQgY2xlYXJWYWx1ZSk7Ci0gICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNE
Ym9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpOwotICAg
IHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgY29weVRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9m
ZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCk7Ci0gICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGRlcHRo
RnVuYyhHQzNEZW51bSBmdW5jKTsKLSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFn
KTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFy
KTsKLSAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdD
M0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCk7Ci0gICAgdm9pZCBk
cmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBHQzNEaW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwot
ICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpOwotICAgIHZv
aWQgZmluaXNoKCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBy
ZW5kZXJidWZmZXJUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQg
ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVu
dW0gdGFyZ2V0KTsKLQotICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICBib29sIGdldEFjdGl2
ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2Jq
ZWN0KiBzaGFkZXJzKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRCdWZmZXJQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7Ci0gICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICB2b2lkIGdldEZsb2F0dihHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldElu
dGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0
UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3QpOwotICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpOwotICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpOwotCi0g
ICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBTdHJpbmcg
Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpOwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAg
IHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZv
aWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCogdmFsdWUpOwotICAgIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRy
aWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0
cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpOwotCi0gICAgdm9p
ZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4g
aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdD
M0RlbnVtIGNhcCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
R0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJv
b2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0
dXJlKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCBsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIHBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCBwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHJl
YWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKTsKLQot
ICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZv
aWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsK
LSAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBH
QzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0
ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3MpOwot
ICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gekZhaWwsIEdDM0RlbnVtIHpQYXNzKTsKLQotICAgIGJvb2wgdGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCB0
ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxv
YXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlP
ZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0gICAgdm9pZCB1bmlmb3Jt
MWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdW5pZm9ybTFmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlm
b3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KTsKLSAgICB2b2lkIHVuaWZvcm0xaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lkIHVuaWZv
cm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCB1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAg
ICB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7
Ci0gICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGlu
dCogdik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0zaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KTsKLSAgICB2
b2lkIHVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsK
LSAgICB2b2lkIHVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZs
b2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZv
cm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBH
QzNEaW50IHcpOwotICAgIHZvaWQgdW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIEdDM0RpbnQqIHYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7
Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIHVuaWZv
cm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QpOwotICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwot
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Ri
b29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVByb2dyYW0o
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlU2hhZGVyKEdDM0RlbnVtKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
dm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlUmVu
ZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsK
LQotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpOwotCi0gICAgRXh0
ZW5zaW9uczNEKiBnZXRFeHRlbnNpb25zKCk7Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKLQogICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCBy
ZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKKyAgICB2b2lkIHNldEN1cnJlbnRHTENvbnRl
eHQodm9pZCosIHZvaWQqKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1f
YXR0cmlidXRlczsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9ib3VuZEZCTzsKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IG1fYm91bmRUZXh0dXJlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9ib3Vu
ZEFycmF5QnVmZmVyOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgSG9z
dFdpbmRvdyogbV9ob3N0V2luZG93OwogCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3lu
dGhldGljRXJyb3JzOwogCiAgICAgRXZhc19HTCogbV9ldmFzR0w7Ci0gICAgRXZhc19HTF9Db250
ZXh0KiBtX2NvbnRleHQ7Ci0gICAgRXZhc19HTF9TdXJmYWNlKiBtX3N1cmZhY2U7CisgICAgRXZh
c19HTF9Db250ZXh0KiBtX2V2YXNHTENvbnRleHQ7CisgICAgRXZhc19HTF9TdXJmYWNlKiBtX2V2
YXNHTFN1cmZhY2U7CisgICAgdm9pZCogbV9nbENvbnRleHQ7CisgICAgdm9pZCogbV9nbFN1cmZh
Y2U7CiAgICAgRXZhc19HTF9BUEkqIG1fYXBpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJTdHlsZSBtX3JlbmRlclN0eWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167700</attachid>
            <date>2012-10-09 00:01:57 -0700</date>
            <delta_ts>2012-10-10 15:07:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96627-20121009160112.patch</filename>
            <type>text/plain</type>
            <size>79636</size>
            <attacher name="Regina Chung">heejin.r.chung</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDcyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTEwLTA4ICBSZWdpbmEg
Q2h1bmcgIDxoZWVqaW4uci5jaHVuZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2Ug
dGhlIHNoYXJlYWJsZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCogaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYyNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgRUZM
IGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNEKEdDM0QpIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTCouCisgICAgICAgIEl0IHdhcyBpbml0aWFsbHkgaW1wbGVtZW50ZWQg
aW4gYSBkaWZmZXJlbnQgd2F5LCBkdWUgdG8gY2hhcmFjdGVyaXN0aWNzIG9mIEV2YXMsCisgICAg
ICAgIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBjb21tb24gaW1wbGVtZW50YXRp
b24gYW5kIGZpbmQgYW5vdGhlciB3YXkKKyAgICAgICAgdG8gZGVhbCB3aXRoIEV2YXMsIGVzcGVj
aWFsbHkgYmVjYXVzZSBhbGwgdGhlIGR1cGxpY2F0ZWQgY29kZS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmVkIGNhaXJvIGltcGxlbWVudGF0aW9uIG9mIEdDM0QgYW5kIGFkZGVkIGVmbCBm
aWxlcyB0byBXZWJDb3JlX1NPVVJDRVMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDogTW9kaWZpZWQgY29kZSBzbyBHQzNET3BlbkdMKiBj
YW4gYmUgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVz
c2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDogUmVtb3ZlZCBmdW5j
dGlvbnMgaW1wbGVtZW50ZWQgaW4gR0MzRE9wZW5HTCoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29tcGxp
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRU
b1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaDogUmVtb3ZlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gR0Mz
RE9wZW5HTCoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisKIDIwMTItMTAt
MDggIEtpcmFuIE11cHBhbGEgIDxjbXVwcGFsYUBhcHBsZS5jb20+CiAKICAgICAgICAgVGhyb3R0
bGUgRE9NIHRpbWVycyBvbiBoaWRkZW4gcGFnZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQkocmV2aXNpb24gMTMwNzIxKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw5ICsyODksOCBAQCBJRiAoV1RGX1VTRV8zRF9HUkFQ
SElDUykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1
ZmZlckNhaXJvLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCShyZXZpc2lvbiAxMzA3MjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOCwzMyArMTgsMTI2IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lmIFVTRSgzRF9HUkFQSElDUykg
fHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgiCi0KICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxHTC9nbHguaD4KKworI2lmIFVTRShPUEVOR0xf
RVNfMikKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgorI2Vsc2UKKyNpbmNsdWRl
ICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0V2YXNHTE9iamVjdCA9IChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7Ci0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBpbnRlcm5hbCA9IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJE
aXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKLSAgICBpZiAoIWludGVybmFsKQotICAgICAgICByZXR1
cm4gMDsKLQogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVm
KG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsK
LSAgICBjb250ZXh0LT5tX3ByaXZhdGUgPSBpbnRlcm5hbC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IGNvbnRleHQucmVsZWFzZSgpOworICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250
ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAg
IDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQoteworICAgICwg
bV9jb21waWxlcihpc0dMRVMyQ29tcGxpYW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xf
T1VUUFVUKQorICAgICwgbV9hdHRycyhhdHRycykKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwg
bV9jb21wb3NpdG9yVGV4dHVyZSgwKQorICAgICwgbV9mYm8oMCkKKyNpZiBVU0UoT1BFTkdMX0VT
XzIpCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKKyNl
bmRpZgorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbGF5ZXJDb21wb3Np
dGVkKGZhbHNlKQorICAgICwgbV9pbnRlcm5hbENvbG9yRm9ybWF0KDApCisgICAgLCBtX2JvdW5k
RkJPKDApCisgICAgLCBtX2FjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApCisgICAgLCBtX2JvdW5k
VGV4dHVyZTAoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigw
KQorICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
dGhpcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKSkKK3sKKyAgICB2YWxpZGF0ZUF0dHJpYnV0
ZXMoKTsKKworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZFNoaW1zID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VjY2Vz
cyA9IHRydWU7CisgICAgaWYgKCFpbml0aWFsaXplZFNoaW1zKSB7CisgICAgICAgIHN1Y2Nlc3Mg
PSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyAgICAgICAgaW5pdGlhbGl6ZWRTaGltcyA9IHRy
dWU7CisgICAgfQorICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBtX3ByaXZhdGUgPSBudWxs
cHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHJlbmRlclN0eWxlID09IFJl
bmRlck9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZh
cyBGQk8uCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7
CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KKyAgICAgICAg
Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsK
KyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1w
bGUgRkJPLgorICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIGdsQmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAg
ICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
KyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAg
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQmluZCBjYW52YXMg
RkJPLgorICAgICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87CisjaWYg
VVNFKE9QRU5HTF9FU18yKQorICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbEdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBn
bEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFNoQnVpbHRJblJlc291
cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJl
c291cmNlcyk7CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VmFyeWluZ1ZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9D
T01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5p
dHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7
CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5H
TEVSZXNvdXJjZXMpOworCisjaWYgIVVTRShPUEVOR0xfRVNfMikKKyAgICBnbEVuYWJsZShHTF9Q
T0lOVF9TUFJJVEUpOworICAgIGdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUp
OworI2VuZGlmCiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQpA
QCAtNTksNzk1ICsxNTIsODAgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0Nv
bnRleAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKKyNlbHNlCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogI2VuZGlmCiAKIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlz
R0xFUzJDb21wbGlhbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4
dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1fcHJpdmF0ZS0+YWN0aXZlVGV4dHVyZSh0
ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9w
cml2YXRlLT5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJp
bmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1
ZmZlcikKLXsKLSAgICBtX3ByaXZhdGUtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJi
dWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJp
bmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYg
Ymx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kQ29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVu
ZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEVxdWF0aW9u
KG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1fcHJpdmF0
ZS0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhHQzNEZW51bSBzcmNGYWN0b3IsIEdDM0RlbnVt
IGRzdEZhY3RvcikKLXsKLSAgICBtX3ByaXZhdGUtPmJsZW5kRnVuYyhzcmNGYWN0b3IsIGRzdEZh
Y3Rvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdD
M0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVu
dW0gZHN0QWxwaGEpCi17Ci0gICAgbV9wcml2YXRlLT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51
bSB1c2FnZSkKLXsKLSAgICBtX3ByaXZhdGUtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1
c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNh
Z2UpCi17Ci0gICAgbV9wcml2YXRlLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNh
Z2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lk
KiBkYXRhKQotewotICAgIG1fcHJpdmF0ZS0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwg
c2l6ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1fcHJpdmF0ZS0+Y2xlYXIobWFz
ayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiBy
ZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkK
LXsKLSAgICBtX3ByaXZhdGUtPmNsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgp
Ci17Ci0gICAgbV9wcml2YXRlLT5jbGVhckRlcHRoKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgY2xlYXJWYWx1ZSkKLXsKLSAgICBtX3By
aXZhdGUtPmNsZWFyU3RlbmNpbChjbGVhclZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1fcHJpdmF0ZS0+Y29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtX3ByaXZh
dGUtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgbV9wcml2YXRlLT5jb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0Rp
bnQgeU9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKLXsKLSAgICBtX3ByaXZhdGUtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJp
dmF0ZS0+Y3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
RnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1fcHJpdmF0ZS0+ZGVwdGhGdW5jKGZ1bmMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykK
LXsKLSAgICBtX3ByaXZhdGUtPmRlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17
Ci0gICAgbV9wcml2YXRlLT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbV9wcml2YXRlLT5kZXRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNE
ZW51bSBjYXApCi17Ci0gICAgbV9wcml2YXRlLT5kaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkK
LXsKLSAgICBtX3ByaXZhdGUtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGlu
dCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1fcHJpdmF0ZS0+ZHJhd0FycmF5cyht
b2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkKLXsKLSAgICBtX3ByaXZhdGUtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBtX3ByaXZhdGUtPmVuYWJsZShjYXApOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkK
LXsKLSAgICBtX3ByaXZhdGUtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtX3ByaXZhdGUtPmZpbmlz
aCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCi17Ci0gICAgbV9wcml2
YXRlLT5mbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHJlbmRlcmJ1ZmZlclRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9w
cml2YXRlLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRl
cmJ1ZmZlclRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZl
bCkKLXsKLSAgICBtX3ByaXZhdGUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4VGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1fcHJpdmF0ZS0+ZnJvbnRG
YWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChH
QzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbV9wcml2YXRlLT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQp
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIGluZm8p
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5m
byk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3Vu
dCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBtX3ByaXZhdGUtPmdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1pbnQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRCb29sZWFudihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsK
LSAgICBtX3ByaXZhdGUtPmdldEJvb2xlYW52KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5n
ZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RXJyb3IoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAg
ICBtX3ByaXZhdGUtPmdldEZsb2F0dihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNE
aW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldEludGVnZXJ2KHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewot
ICAgIG1fcHJpdmF0ZS0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBhcmFtTmFtZSwgdmFsdWUpOwot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRQcm9ncmFtSW5m
b0xvZyhwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBhcmFtTmFtZSwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5nZXRTaGFkZXJpdihzaGFkZXIsIHBh
cmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
ckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5nZXRTdHJpbmcobmFtZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0
LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJh
bU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtX3ByaXZhdGUtPmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwot
fQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0VmVy
dGV4QXR0cmliZnYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPmdldFZlcnRleEF0dHJp
Yml2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotbG9uZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5h
bWUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4
LCBwYXJhbU5hbWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtX3ByaXZhdGUtPmhpbnQodGFyZ2V0LCBt
b2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRm
b3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQnVmZmVyKG9iaik7
Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0g
Y2FwKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRW5hYmxlZChjYXApOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0ZyYW1lYnVmZmVyKG9iaik7Ci19Ci0K
LUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNQcm9ncmFtKG9iaik7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1JlbmRlcmJ1ZmZlcihvYmopOwot
fQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBvYmopCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNTaGFkZXIob2JqKTsKLX0KLQot
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
IG9iaikKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1RleHR1cmUob2JqKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBt
X3ByaXZhdGUtPmxpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtX3ByaXZhdGUt
PmxpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhl
bFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbV9wcml2
YXRlLT5waXhlbFN0b3JlaShwYXJhbU5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMp
Ci17Ci0gICAgbV9wcml2YXRlLT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICBtX3ByaXZhdGUtPnJlYWRQaXhlbHMoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAg
bV9wcml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFn
ZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgbV9wcml2YXRl
LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9wcml2YXRl
LT5zaGFkZXJTb3VyY2UocHJvZ3JhbSwgc3RyaW5nKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1h
c2spCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZh
Y2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1f
cHJpdmF0ZS0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQotewot
ICAgIG1fcHJpdmF0ZS0+c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykK
LXsKLSAgICBtX3ByaXZhdGUtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51
bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbV9wcml2YXRlLT5zdGVuY2lsT3AoZmFp
bCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9w
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKQotewotICAgIG1fcHJpdmF0ZS0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwg
ZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+dGV4
UGFyYW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1O
YW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1fcHJpdmF0ZS0+dGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0
LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAg
bV9wcml2YXRlLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhPZmZzZXQsIHlPZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KQotewot
ICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHR0MzRHNpemVpIHNpemUs
IEMzRGZsb2F0KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6
ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50IHgpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtMWkobG9jYXRpb24s
IHgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9j
YXRpb24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEaW50KiB2KQotewotICAgIG1fcHJpdmF0ZS0+dW5p
Zm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAg
ICBtX3ByaXZhdGUtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0RmbG9hdCogdikKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNp
emUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3Jt
MmkobG9jYXRpb24sIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
Mml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiB2KQotewotICAg
IG1fcHJpdmF0ZS0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNmKGxv
Y2F0aW9uLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiB2KQotewotICAg
IG1fcHJpdmF0ZS0+dW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRGludCB6KQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybTNpKGxvY2F0aW9u
LCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogdikKLXsKLSAgICBtX3ByaXZh
dGUtPnVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3Jt
NGYobG9jYXRpb24sIHgsIHksIHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYp
Ci17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykKLXsKLSAgICBtX3ByaXZhdGUt
PnVuaWZvcm00aShsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rp
bnQqIHYpCi17Ci0gICAgbV9wcml2YXRlLT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPnVuaWZvcm1N
YXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0g
ICAgbV9wcml2YXRlLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2Us
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9wcml2YXRlLT51c2VQcm9ncmFtKHByb2dyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtKQotewotICAgIG1fcHJpdmF0ZS0+dmFsaWRhdGVQcm9ncmFtKHByb2dy
YW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHgpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIxZihp
bmRleCwgeCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0
ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVlcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkp
Ci17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbV9wcml2YXRlLT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgs
IHZhbHVlcyk7Ci19CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCi17Ci0gICAgbV9wcml2YXRl
LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeik7Ci19CisgICAgaWYgKG1fcmVuZGVyU3R5
bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHZhbHVlcykKLXsKLSAgICBtX3ByaXZhdGUtPnZlcnRleEF0dHJpYjNmdihpbmRl
eCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHgsIHks
IHosIHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4
QXR0cmliNGZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVt
IHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRw
dHIgb2Zmc2V0KQotewotICAgIG1fcHJpdmF0ZS0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwg
c2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+dmlld3BvcnQoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRl
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21w
b3NpdGVkKCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisjaWYgVVNFKE9QRU5HTF9FU18yKQor
ICAgIHJldHVybiB0cnVlOworI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1h
Z2VCdWZmZXIqLCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2Fs
bGJhY2s+KSAKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdl
RGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
ZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQYXNzT3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPikg
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVy
KikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQg
Y2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsIGludCBj
YW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIGNvbnRl
eHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1h
Z2VXaWR0aCA8PSAwIHx8IGltYWdlSGVpZ2h0IDw9IDAgfHwgY2FudmFzV2lkdGggPD0gMCB8fCBj
YW52YXNIZWlnaHQgPD0gMCB8fCAhY29udGV4dCkKKyAgICAgICAgcmV0dXJuOwogCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPmNyZWF0ZUJ1ZmZlcigpOwotfQorICAgIGNhaXJvX3QqIGNyID0gY29udGV4
dC0+Y3IoKTsKKyAgICBjb250ZXh0LT5zYXZlKCk7IAogCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLX0KKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBp
bWFnZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YSgKKyAgICAgICAgY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhlbHMpLCBDQUlS
T19GT1JNQVRfQVJHQjMyLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCAqIDQp
KTsKIAotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgp
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAg
IHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKLXsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPmNyZWF0ZVRleHR1cmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0
ZS0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fcHJpdmF0
ZS0+ZGVsZXRlRnJhbWVidWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbV9wcml2
YXRlLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbV9w
cml2YXRlLT5kZWxldGVSZW5kZXJidWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1f
cHJpdmF0ZS0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1fcHJp
dmF0ZS0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KKyAgICAvLyBPcGVuR0wga2VlcHMgdGhl
IHBpeGVscyBzdG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGltYWdlIGhl
cmUuCisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCAwLCBpbWFnZUhlaWdodCk7CisgICAgY2Fpcm9f
c2NhbGUoY3IsIDEsIC0xKTsgCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVH
TEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIG1fcHJpdmF0ZS0+c3ludGhlc2l6ZUdMRXJy
b3IoZXJyb3IpOwotfQotCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRl
bnNpb25zKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRFeHRlbnNpb25zKCk7Ci19Cisg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNh
aXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgaW1hZ2VTdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAg
ICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1dpZHRoLCAtY2FudmFzSGVpZ2h0KTsK
IAotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsK
KyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlmCiAKIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50
OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgaW50IHBpeGVsc1Np
emUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeShjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCShyZXZpc2lvbiAxMzA3MjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsOTMgKzIwLDkwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudEVmbC5oIgotCisjaW5j
bHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXNfR0wuaD4KICNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCi17Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gaW50
ZXJuYWwgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkpOwotCi0gICAg
aWYgKCFpbnRlcm5hbC0+aW5pdGlhbGl6ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0
dXJuIGludGVybmFsLnJlbGVhc2UoKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQotICAgIDogbV9ib3VuZEZCTygwKQotICAgICwgbV9i
b3VuZFRleHR1cmUoMCkKLSAgICAsIG1fYm91bmRBcnJheUJ1ZmZlcigwKQorR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJTdHlsZSByZW5kZXJTdHlsZSkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9o
b3N0V2luZG93KGhvc3RXaW5kb3cpCiAgICAgLCBtX2V2YXNHTCgwKQotICAgICwgbV9jb250ZXh0
KDApCi0gICAgLCBtX3N1cmZhY2UoMCkKKyAgICAsIG1fZXZhc0dMQ29udGV4dCgwKQorICAgICwg
bV9ldmFzR0xTdXJmYWNlKDApCisgICAgLCBtX2dsQ29udGV4dCgwKQorICAgICwgbV9nbFN1cmZh
Y2UoMCkKICAgICAsIG1fYXBpKDApCisgICAgLCBtX3JlbmRlclN0eWxlKHJlbmRlclN0eWxlKQog
ewotfQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUoKQotewotICAgIGlmICghbV9ldmFzR0wpCisgICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGV2YXNfZ2xfc3VyZmFjZV9kZXN0cm95KG1f
ZXZhc0dMLCBtX3N1cmZhY2UpOwotCi0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgZXZhc19n
bF9jb250ZXh0X2Rlc3Ryb3kobV9ldmFzR0wsIG1fY29udGV4dCk7Ci0KLSAgICBldmFzX2dsX2Zy
ZWUobV9ldmFzR0wpOwotfQorICAgIGlmIChtX2hvc3RXaW5kb3cgJiYgbV9ob3N0V2luZG93LT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
Y29kZSBwYXRoIGZvciBXZWJLaXQxLgorICAgICAgICAvLyBHZXQgRXZhcyBvYmplY3QgZnJvbSBw
bGF0Zm9ybVBhZ2VDbGllbnQgYW5kIHNldCBFdmFzR0wgcmVsYXRlZCBtZW1iZXJzLgorICAgICAg
ICByZXR1cm47CisgICAgfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlh
bGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotewotICAgIFBh
Z2VDbGllbnRFZmwqIHBhZ2VDbGllbnQgPSBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50RWZsKj4oaG9z
dFdpbmRvdy0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOworICAgIC8vIEZvciBXZWJLaXQyLCB3ZSBu
ZWVkIHRvIGNyZWF0ZSBhIGR1bW15IGVjb3JlRXZhcyBvYmplY3QgZm9yIHRoZSBXZWJQcm9jZXNz
IGluIG9yZGVyIHRvIHVzZSBFdmFzR0wgQVBJcy4KKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyAgICBl
Y29yZV9ldmFzX2luaXQoKTsKKyAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNf
Z2xfeDExX25ldygwLCAwLCAwLCAwLCAxLCAxKSk7CisgICAgaWYgKCFtX2Vjb3JlRXZhcykKKyAg
ICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICByZXR1cm47CisjZW5kaWYKIAotICAgIEV2YXMqIGV2
YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwYWdlQ2xpZW50LT52aWV3KCkpOworICAgIEV2YXMq
IGV2YXMgPSBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7CisgICAgaWYgKCFldmFz
KQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgRXZhc19HTCBvYmplY3Qg
Zm9yIGdsIHJlbmRlcmluZyBvbiBlZmwuCiAgICAgbV9ldmFzR0wgPSBldmFzX2dsX25ldyhldmFz
KTsKICAgICBpZiAoIW1fZXZhc0dMKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEdldCB0aGUgQVBJIGZvciByZW5kZXJpbmcgdXNpbmcgT3BlbkdMLgog
ICAgIC8vIFRoaXMgcmV0dXJucyBhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgT3Bl
bkdMIGZ1bmN0aW9ucyB3ZSBjYW4gdXNlIHRvIHJlbmRlciBpbiBFdmFzCiAgICAgbV9hcGkgPSBl
dmFzX2dsX2FwaV9nZXQobV9ldmFzR0wpOwogICAgIGlmICghbV9hcGkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEV2YXNfR0xfQ29udGV4dCogc2hhcmVDb250ZXh0ID0gMDsKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAvLyBHQzNEIHdpdGggUmVuZGVyT2Zm
c2NyZWVuIHN0eWxlIGZvciBXZWJHTCBoYXMgdG8gYmUgc2hhcmVkIHdpdGggQUMncyBjb250ZXh0
IHdoZW4gQUMgaXMgZW5hYmxlZC4KLSAgICBpZiAoIXJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gcGFnZUNsaWVudC0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKTsKLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgICAgICBzaGFyZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxFdmFzX0dMX0NvbnRleHQqPihjb250
ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIH0KLSNlbmRpZgorICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgYSBjb250ZXh0Ci0gICAgbV9jb250ZXh0ID0gZXZh
c19nbF9jb250ZXh0X2NyZWF0ZShtX2V2YXNHTCwgc2hhcmVDb250ZXh0KTsKLSAgICBpZiAoIW1f
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZXZhc0dMQ29udGV4dCA9IGV2
YXNfZ2xfY29udGV4dF9jcmVhdGUobV9ldmFzR0wsIDApOworICAgIGlmICghbV9ldmFzR0xDb250
ZXh0KQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgYSBzdXJmYWNlCi0gICAgaWYg
KCFjcmVhdGVTdXJmYWNlKHBhZ2VDbGllbnQsIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY3JlYXRlU3VyZmFjZSgwLCByZW5kZXJT
dHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKK3sKKyAgICBp
ZiAoIW1fZXZhc0dMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9ldmFzR0xTdXJmYWNl
KQorICAgICAgICBldmFzX2dsX3N1cmZhY2VfZGVzdHJveShtX2V2YXNHTCwgbV9ldmFzR0xTdXJm
YWNlKTsKIAotICAgIHJldHVybiBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9ldmFz
R0xDb250ZXh0KQorICAgICAgICBldmFzX2dsX2NvbnRleHRfZGVzdHJveShtX2V2YXNHTCwgbV9l
dmFzR0xDb250ZXh0KTsKKworICAgIGV2YXNfZ2xfZnJlZShtX2V2YXNHTCk7CiB9CiAKKwogYm9v
bCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCog
cGFnZUNsaWVudCwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKIHsKICAgICAvLyBJ
ZiBSZW5kZXJTdHlsZSBpcyBSZW5kZXJPZmZzY3JlZW4sIHdlIHdpbGwgYmUgcmVuZGVyaW5nIHRv
IGEgRkJPLApAQCAtMTE3LDggKzExNCwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlU3VyCiAgICAgaW50IGhlaWdodCA9IDE7CiAKICAgICAvLyBCdXQsIGluIGNhc2Ug
b2YgUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIHdlIGhhdmUgdG8gcmVuZGVyIHRvIGEgcmVu
ZGVyIHRhcmdldCBzdXJmYWNlIHdpdGggdGhlIHNhbWUgc2l6ZSBhcyBvdXIgd2ViVmlldy4KLSAg
ICBpZiAocmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0gICAgICAgIGV2YXNfb2JqZWN0X2dl
b21ldHJ5X2dldChwYWdlQ2xpZW50LT52aWV3KCksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICBpZiAocmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKKyAgICAgICAgaWYgKCFwYWdl
Q2xpZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGSVhNRTogR2V0
IGdlb21ldHJ5IG9mIHdlYlZpZXcgYW5kIHNldCBzaXplIG9mIHRhcmdldCBzdXJmYWNlLgorICAg
IH0KIAogICAgIEV2YXNfR0xfQ29uZmlnIGNvbmZpZyA9IHsKICAgICAgICAgRVZBU19HTF9SR0JB
Xzg4ODgsCkBAIC0xMjgsMTAwMiArMTI4LDQ4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVTdXIKICAgICB9OwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IEV2YXNfR0xfU3Vy
ZmFjZSBvYmplY3QKLSAgICBtX3N1cmZhY2UgPSBldmFzX2dsX3N1cmZhY2VfY3JlYXRlKG1fZXZh
c0dMLCAmY29uZmlnLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICBt
X2V2YXNHTFN1cmZhY2UgPSBldmFzX2dsX3N1cmZhY2VfY3JlYXRlKG1fZXZhc0dMLCAmY29uZmln
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoIW1fZXZhc0dMU3VyZmFjZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChy
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewogICAgICAgICBFdmFzX05hdGl2ZV9TdXJmYWNl
IG5hdGl2ZVN1cmZhY2U7CiAgICAgICAgIC8vIEZpbGwgaW4gdGhlIE5hdGl2ZSBTdXJmYWNlIGlu
Zm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIEV2YXMgR0wgc3VyZmFjZS4KLSAgICAgICAgZXZhc19n
bF9uYXRpdmVfc3VyZmFjZV9nZXQobV9ldmFzR0wsIG1fc3VyZmFjZSwgJm5hdGl2ZVN1cmZhY2Up
OworICAgICAgICBldmFzX2dsX25hdGl2ZV9zdXJmYWNlX2dldChtX2V2YXNHTCwgbV9ldmFzR0xT
dXJmYWNlLCAmbmF0aXZlU3VyZmFjZSk7CiAKLSAgICAgICAgLy8gQ3JlYXRlIGFuZCBzcGVjaWFs
bHkgc2V0IHVwIGEgZXZhc19vYmplY3Qgd2hpY2ggYWN0IGFzIHRoZSByZW5kZXIgdGFyZ2VyIHN1
cmZhY2UuCi0gICAgICAgIGlmICghcGFnZUNsaWVudC0+Y3JlYXRlRXZhc09iamVjdEZvckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoJm5hdGl2ZVN1cmZhY2UsIEludFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGSVhNRTogQ3Jl
YXRlIGFuZCBzcGVjaWFsbHkgc2V0IHVwIGEgZXZhc19vYmplY3Qgd2hpY2ggYWN0IGFzIHRoZSBy
ZW5kZXIgdGFyZ2VyIHN1cmZhY2UuCiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50
KCkKLXsKLSAgICByZXR1cm4gZXZhc19nbF9tYWtlX2N1cnJlbnQobV9ldmFzR0wsIG1fc3VyZmFj
ZSwgbV9jb250ZXh0KTsKLX0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzR0xF
UzJDb21wbGlhbnQoKSBjb25zdAotewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEFjdGl2ZVRleHR1cmUodGV4
dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphdHRhY2hTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xBdHRhY2hTaGFkZXIocHJvZ3Jh
bSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRBdHRy
aWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotCi0gICAg
aWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRBcnJheUJ1ZmZl
ciA9IGJ1ZmZlcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIgIT0gbV9i
b3VuZEZCTykgewotICAgICAgICBtX2FwaS0+Z2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBmcmFt
ZWJ1ZmZlcik7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBmcmFtZWJ1ZmZlcjsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsQmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotICAgIG1f
Ym91bmRUZXh0dXJlID0gdGV4dHVyZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFt
cGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZEVxdWF0
aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZEVxdWF0aW9uU2VwYXJh
dGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmJsZW5kRnVuYyhHQzNEZW51bSBzcmNGYWN0b3IsIEdDM0RlbnVtIGRzdEZhY3RvcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xCbGVuZEZ1bmMoc3JjRmFj
dG9yLCBkc3RGYWN0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Ymxl
bmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVt
IHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2FwaS0+Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsQnVmZmVyU3ViRGF0YSh0
YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXModGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbENsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNs
YW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRl
cHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENsZWFyRGVw
dGhmKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNsZWFyU3Rl
bmNpbChHQzNEaW50IGNsZWFyVmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsQ2xlYXJTdGVuY2lsKGNsZWFyVmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4g
Z3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb21waWxlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbENvcHlUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQsIEdDM0RpbnQgeU9m
ZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xDb3B5VGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmN1bGxGYWNlKEdD
M0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
Q3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZXB0
aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBtX2FwaS0+Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZXB0aFJh
bmdlZih6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpk
ZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEZXRhY2hT
aGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmRpc2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZHJhd0FycmF5
cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRHJhd0FycmF5cyhtb2RlLCBmaXJz
dCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
RHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Zmlu
aXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xGaW5pc2go
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmZsdXNoKCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xGbHVzaCgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJUYXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fYXBpLT5nbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNo
bWVudCwgcmVuZGVyYnVmZmVyVGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FwaS0+Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRl
eFRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBY3RpdmVBdHRyaWIoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDdXJyZW50R0xDb250ZXh0KHZvaWQq
IGNvbnRleHQsIHZvaWQqIHN1cmZhY2UpCiB7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBtYXhO
YW1lTGVuZ3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNU
SVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0aCk7Ci0gICAgaWYgKCFtYXhO
YW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBPd25BcnJheVB0cjxjaGFy
PiBuYW1lID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhOYW1lTGVuZ3RoXSk7Ci0gICAgaWYg
KCFuYW1lKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0xzaXplaSBsZW5ndGggPSAwOwot
ICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBtX2FwaS0+Z2xH
ZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heE5hbWVMZW5ndGgsICZsZW5ndGgsICZz
aXplLCAmdHlwZSwgbmFtZS5nZXQoKSk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGluZm8ubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgobmFtZS5nZXQoKSwg
bGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgbV9nbENvbnRleHQgPSBjb250ZXh0OworICAgIG1fZ2xTdXJm
YWNlID0gc3VyZmFjZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFj
dGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0
aXZlSW5mbyYgaW5mbykKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICBpZiAo
IXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIEdMaW50IG1heE5hbWVMZW5ndGggPSAwOwotICAgIG1fYXBpLT5nbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TmFtZUxlbmd0
aCk7Ci0gICAgaWYgKCFtYXhOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBPd25BcnJheVB0cjxjaGFyPiBuYW1lID0gYWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhOYW1l
TGVuZ3RoXSk7Ci0gICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmICht
X3JlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRl
eHQpCisgICAgICAgIHJldHVybiBtX2dsQ29udGV4dDsKIAotICAgIEdMc2l6ZWkgbGVuZ3RoID0g
MDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgbV9hcGkt
PmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4TmFtZUxlbmd0aCwgJmxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lLmdldCgpKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lLmdl
dCgpLCBsZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9ldmFzR0xDb250ZXh0OwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQ
bGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hh
ZGVycyk7CisgICAgcmV0dXJuIGV2YXNfZ2xfbWFrZV9jdXJyZW50KG1fZXZhc0dMLCBtX2V2YXNH
TFN1cmZhY2UsIG1fZXZhc0dMQ29udGV4dCk7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICByZXR1cm4gbV9hcGktPmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9v
bGVhbiogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmds
R2V0Qm9vbGVhbnYocGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9hcGktPmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZh
bHVlKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1fYXR0cmli
dXRlczsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRFcnJvcigp
Ci17Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgR0Mz
RGVudW0gZXJyb3IgPSBtX3N5bnRoZXRpY0Vycm9ycy5maXJzdCgpOwotICAgICAgICBtX3N5bnRo
ZXRpY0Vycm9ycy5yZW1vdmUobV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKSk7Ci0gICAgICAgIHJl
dHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1
cm4gbV9hcGktPmdsR2V0RXJyb3IoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0RmxvYXR2KHBhcmFtTmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbEdldEludGVnZXJ2KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFByb2dyYW1J
bmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7Ci0gICAgbV9hcGktPmdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsb2dMZW5n
dGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICBPd25BcnJheVB0cjxjaGFyPiBsb2cgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2xvZ0xlbmd0
aF0pOwotICAgIGlmICghbG9nKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHTGlu
dCByZXR1cm5lZExvZ0xlbmd0aCA9IDA7Ci0gICAgbV9hcGktPmdsR2V0UHJvZ3JhbUluZm9Mb2co
cHJvZ3JhbSwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZy5nZXQoKSk7Ci0gICAg
QVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOwotCi0gICAgU3RyaW5n
IHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgobG9nLmdldCgpLCByZXR1cm5lZExvZ0xlbmd0aCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX2FwaS0+Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVyaXYo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0U2hhZGVy
aXYoc2hhZGVyLCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7Ci0g
ICAgbV9hcGktPmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19M
T0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0QXJy
YXlQdHIobmV3IGNoYXJbbG9nTGVuZ3RoXSk7Ci0gICAgaWYgKCFsb2cpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIEdMaW50IHJldHVybmVkTG9nTGVuZ3RoID0gMDsKLSAgICBtX2Fw
aS0+Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5n
dGgsIGxvZy5nZXQoKSk7Ci0gICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0
aCArIDEpOwotCi0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgobG9nLmdldCgp
LCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbG9nTGVu
Z3RoID0gMDsKLSAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VS
Q0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIE93bkFycmF5UHRyPGNoYXI+IGxvZyA9IGFkb3B0QXJy
YXlQdHIobmV3IGNoYXJbbG9nTGVuZ3RoXSk7Ci0gICAgaWYgKCFsb2cpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIEdMaW50IHJldHVybmVkTG9nTGVuZ3RoID0gMDsKLSAgICBtX2Fw
aS0+Z2xHZXRTaGFkZXJTb3VyY2Uoc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0
aCwgbG9nLmdldCgpKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3Ro
ICsgMSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChsb2cuZ2V0KCks
IHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KG1fYXBpLT5nbEdldFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwYXJhbU5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFRleFBh
cmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRUZXhQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFVuaWZvcm1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBtX2FwaS0+Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFZlcnRleEF0dHJp
YmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsR2V0VmVydGV4QXR0
cmliZnYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBh
cmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwot
fQotCi1HQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICB2b2lkKiBwb2ludGVyID0gMDsKLSAgICBtX2FwaS0+Z2xH
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcGFyYW1OYW1lLCAmcG9pbnRlcik7Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0MzRHNpemVpcHRyPihwb2ludGVyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbEhpbnQo
dGFyZ2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGktPmdsSXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0VuYWJsZWQoR0MzRGVudW0gY2Fw
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc0Vu
YWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpp
c0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzRnJhbWVidWZmZXIoZnJhbWVi
dWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIG1fYXBpLT5nbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gbV9hcGktPmdsSXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9hcGkt
PmdsSXNTaGFkZXIoc2hhZGVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xJc1RleHR1cmUodGV4dHVyZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpsaW5lV2lkdGgoR0MzRGZsb2F0
IHdpZHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbExpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpsaW5rUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQgcGFyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsUGl4
ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xQb2x5Z29uT2Zmc2V0
KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVh
ZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBtX2FwaS0+Z2xGbHVzaCgpOwotICAgIG1f
YXBpLT5nbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IG1fYXBpLT5nbFJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzYW1wbGVD
b3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGlu
dmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzY2lzc29yKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgY29uc3QgY2hhciogc3RyID0gc3RyaW5nLnV0
ZjgoKS5kYXRhKCk7Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBtX2Fw
aS0+Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc3RyLCAmbGVuZ3RoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IG1fYXBpLT5nbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVu
YywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN0ZW5j
aWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsU3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2sp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6RmFpbCwgR0MzRGVudW0gelBhc3Mp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsU3RlbmNpbE9wKGZh
aWwsIHpGYWlsLCB6UGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpz
dGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
RmFpbCwgR0MzRGVudW0gelBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9hcGktPmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgekZhaWwsIHpQYXNzKTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hcGktPmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp0ZXhQYXJh
bWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQgcGFy
YW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVGV4UGFyYW1l
dGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFt
TmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
IHgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTFm
KGxvY2F0aW9uLCB4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZv
cm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogYXJyYXkp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTFmdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMWkobG9jYXRpb24sIHgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJmKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMmkoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2Z2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0zaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFVuaWZvcm0zaShsb2NhdGlvbiwg
eCwgeSwgeik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2l2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtM2l2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlm
b3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IHNpemUsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9hcGktPmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+Z2xVbmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHos
IHcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1h
dHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fYXBpLT5nbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJp
eDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IG1fYXBpLT5nbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDRm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dXNlUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9h
cGktPmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmFsaWRhdGVQcm9ncmFtKHByb2dy
YW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliMWYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjFmKGluZGV4LCB4KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGkt
PmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FwaS0+
Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFs
dWVzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0
dHJpYjJmdihpbmRleCwgdmFsdWVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBp
LT5nbFZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hcGktPmdsVmVy
dGV4QXR0cmliM2Z2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjRmKGluZGV4LCB4LCB5LCB6LCB3KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnZlcnRleEF0dHJpYjRmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCB2YWx1ZXMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWlu
dCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxp
emVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIgPD0gMCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9hcGktPmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
YXBpLT5nbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1QbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlciA9IDA7Ci0gICAg
bV9hcGktPmdsR2VuQnVmZmVycygxLCAmYnVmZmVyKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQot
Ci1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlRnJhbWVi
dWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgYnVmZmVyID0gMDsKLSAgICBtX2FwaS0+Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmJ1ZmZlcik7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiBtX2FwaS0+Z2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyOwot
ICAgIG1fYXBpLT5nbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci0gICAgcmV0dXJuIGJ1
ZmZlcjsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZVNoYWRlcihHQzNEZW51bSBzaGFkZXJUeXBlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiBtX2FwaS0+Z2xDcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVUZXh0dXJl
KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmU7Ci0gICAgbV9hcGktPmdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAgIHJldHVy
biB0ZXh0dXJlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVsZXRlQnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYXBpLT5nbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChmcmFt
ZWJ1ZmZlciA9PSBtX2JvdW5kRkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVi
dWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8gb3Bl
cmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihG
UkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotICAgIG1fYXBpLT5nbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVs
ZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBt
X2FwaS0+Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYXBpLT5nbERlbGV0
ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGVs
ZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9hcGktPmdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVu
dW0gZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLX0KLQotRXh0
ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEV4dGVuc2lvbnMoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KKyNlbmRpZgogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKSB8fCBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
CShyZXZpc2lvbiAxMzA3MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE1ICsy
MiwyNiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAotI2luY2x1ZGUgPEV2
YXNfR0wuaD4KKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaW5jbHVkZSA8dGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CisjZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUg
ewordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0wgICAgICAgICAgICAgICBFdmFzX0dMOwordHlwZWRl
ZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSAgICAgICBFdmFzX0dMX1N1cmZhY2U7Cit0eXBlZGVm
IHN0cnVjdCBfRXZhc19HTF9Db250ZXh0ICAgICAgIEV2YXNfR0xfQ29udGV4dDsKK3R5cGVkZWYg
c3RydWN0IF9FdmFzX0dMX0NvbmZpZyAgICAgICAgRXZhc19HTF9Db25maWc7Cit0eXBlZGVmIHN0
cnVjdCBfRXZhc19HTF9BUEkgICAgICAgICAgIEV2YXNfR0xfQVBJOwogCiBjbGFzcyBQYWdlQ2xp
ZW50RWZsOwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgeworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlCisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQorICAgICAgICA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcgor
I2VuZGlmCit7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhv
c3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpOworICAgIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOwogICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUoKTsKIAogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpIGNvbnN0OwpAQCAtMzgsMTg4ICs0OSwyNyBAQCBwdWJsaWM6CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdDsKICNlbmRpZgotCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZpcnR1
YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwg
Qml0bWFwVGV4dHVyZSogbWFzayk7CisjZW5kaWYKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFj
dGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSk7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcik7Ci0gICAgdm9p
ZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBibGVuZENvbG9yKEdDM0Rj
bGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYg
YWxwaGEpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lk
IGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxw
aGEpOwotICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNyY0ZhY3RvciwgR0MzRGVudW0gZHN0
RmFjdG9yKTsKLSAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwotCi0g
ICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyLCBjb25zdCB2
b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCog
ZGF0YSk7Ci0KLSAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRh
cmdldCk7Ci0gICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7Ci0gICAgdm9pZCBjbGVh
ckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUs
IEdDM0RjbGFtcGYgYWxwaGEpOwotICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRo
KTsKLSAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50IGNsZWFyVmFsdWUpOwotICAgIHZvaWQg
Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFu
IGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCk7Ci0KLSAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsK
LSAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgY3VsbEZhY2Uo
R0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYyk7Ci0gICAg
dm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZyk7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdD
M0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcik7Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkaXNhYmxlKEdD
M0RlbnVtIGNhcCk7Ci0gICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQg
aW5kZXgpOwotICAgIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0
LCBHQzNEc2l6ZWkgY291bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOwotCi0g
ICAgdm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KEdDM0R1aW50IGluZGV4KTsKLSAgICB2b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1
c2goKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0KTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEaW50IGxldmVsKTsKLSAgICB2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsK
LSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCk7Ci0KLSAgICBib29sIGdl
dEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBB
Y3RpdmVJbmZvJik7Ci0gICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICB2b2lkIGdldEF0dGFj
aGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwg
R0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycyk7Ci0gICAgR0MzRGlu
dCBnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUp
OwotICAgIHZvaWQgZ2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVhbiog
dmFsdWUpOwotICAgIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVy
cm9yKCk7Ci0gICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQq
IHZhbHVlKTsKLSAgICB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRJbnRlZ2VydihHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIFN0cmlu
ZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhHQzNEZW51bSBuYW1lKTsK
LSAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAg
dm9pZCBnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIGdldFVuaWZvcm1pdihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBH
QzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRy
aWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSk7
Ci0gICAgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwg
R0MzRGVudW0gcGFyYW1OYW1lKTsKLQotICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIG1vZGUpOwotICAgIEdDM0Rib29sZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qp
OwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApOwotICAgIEdDM0Rib29s
ZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNQ
cm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KTsKLSAg
ICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwotICAgIHZvaWQgbGlua1Byb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCk7Ci0gICAgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0RpbnQgcGFyYW0pOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBH
QzNEZmxvYXQgdW5pdHMpOwotCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7Ci0KLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFt
cGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAgdm9pZCBzY2lzc29yKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZv
aWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2sp
OwotICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBm
dW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhH
QzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gekZhaWwsIEdDM0RlbnVtIHpQYXNzKTsKLSAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpGYWlsLCBHQzNEZW51bSB6
UGFzcyk7Ci0KLSAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHBhcmFtKTsKLSAgICB2b2lkIHRleFBh
cmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFy
YW0pOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeE9mZnNldCwgR0MzRGludCB5T2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKTsKLQotICAgIHZvaWQgdW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCB4KTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
LCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQgeCk7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSwgR0MzRGludCogdik7Ci0gICAgdm9pZCB1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgdW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlmb3JtMmkoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpOwotICAgIHZvaWQgdW5pZm9ybTJpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTNm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHop
OwotICAgIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rm
bG9hdCogdik7Ci0gICAgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RpbnQgeik7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgR0MzRGludCogdik7Ci0gICAgdm9pZCB1bmlmb3JtNGYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcpOwotICAgIHZvaWQgdW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IEdDM0RmbG9hdCogdik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KTsKLSAgICB2b2lkIHVuaWZv
cm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lk
IHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsK
LQotICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIHZhbGlk
YXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIHZvaWQgdmVydGV4QXR0cmliMWYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
MmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3
KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNl
dCk7Ci0KLSAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVC
dWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVNoYWRlcihH
QzNEZW51bSk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVUZXh0dXJlKCk7Ci0KLSAgICB2
b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
KTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRl
bGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVy
cm9yKEdDM0RlbnVtIGVycm9yKTsKLQotICAgIEV4dGVuc2lvbnMzRCogZ2V0RXh0ZW5zaW9ucygp
OwotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwotCi0gICAgYm9v
bCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2lu
ZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0KICAgICBib29sIGNyZWF0
ZVN1cmZhY2UoUGFnZUNsaWVudEVmbCosIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVj
dCk7CisgICAgdm9pZCBzZXRDdXJyZW50R0xDb250ZXh0KHZvaWQqLCB2b2lkKik7CiAKICAgICBH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0KLSAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fYm91bmRGQk87Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2JvdW5kVGV4dHVy
ZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIEhvc3RXaW5kb3cqIG1faG9zdFdpbmRvdzsKIAog
ICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIAorICAgIE93blB0
cjxFY29yZV9FdmFzPiBtX2Vjb3JlRXZhczsKICAgICBFdmFzX0dMKiBtX2V2YXNHTDsKLSAgICBF
dmFzX0dMX0NvbnRleHQqIG1fY29udGV4dDsKLSAgICBFdmFzX0dMX1N1cmZhY2UqIG1fc3VyZmFj
ZTsKKyAgICBFdmFzX0dMX0NvbnRleHQqIG1fZXZhc0dMQ29udGV4dDsKKyAgICBFdmFzX0dMX1N1
cmZhY2UqIG1fZXZhc0dMU3VyZmFjZTsKKyAgICB2b2lkKiBtX2dsQ29udGV4dDsKKyAgICB2b2lk
KiBtX2dsU3VyZmFjZTsKICAgICBFdmFzX0dMX0FQSSogbV9hcGk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIG1fcmVuZGVyU3R5bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>