<?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>78720</bug_id>
          
          <creation_ts>2012-02-15 09:25:27 -0800</creation_ts>
          <short_desc>[Qt] Use GraphicsContext3DOpenGLES.cpp when using OpenGL ES</short_desc>
          <delta_ts>2012-06-05 20:04:55 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Roland Takacs">rtakacs</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>557318</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-15 09:25:27 -0800</bug_when>
    <thetext>Currently the WebGL enabled build is broken against platforms that have OpenGL ES instead of desktop GL.

On these platforms we should try to use the new GraphicsContext3DOpenGLES.cpp that was introduced with bug #75462.

* WebCore/Target.pri needs to be changed to compile GraphicsContext3DQt.cpp, *OpenGLCommon and *OpenGLES.cpp when contains(QT_CONFIG, opengles2).

* The functions declared in GraphicsContext3DQt.cpp that are surrounded by #if defined(QT_OPENGL_ES_2) should be removed (their replacement should be in *OpenGLCommon.cpp and *OpenGLES.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586289</commentid>
    <comment_count>1</comment_count>
      <attachid>133473</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-03-23 06:39:19 -0700</bug_when>
    <thetext>Created attachment 133473
Patch

From now, GraphicsContext3DOpenGLES.cpp will be used on OpenGL ES supported platform.
Functions are removed from GraphicsContext3DQt that already implemented in GraphicsContext3DCommon.

&quot;EXT&quot; has been deleted from function and macro names ending with &quot;EXT&quot;.
It was needed because OpenGLES does not support these (and functions and macros without &quot;EXT&quot; do the same things as the
ones ending with &quot;EXT&quot;).

Extensions3DQt is removed beceause it has never been used.

The &quot;m_depthStencilBuffer&quot; member is added to Qt port because it uses &quot;m_depthStencilBuffer&quot; like the other platforms.

Furthermore some syntax errors have been fixed.

Unfortunately I could not test perfectly because the webgl does not work.
I get Segmentation Fault when I try to open a webgl example within QtTestbrowser. (On desktop)
I don&apos;t get segfault on my N9 but my device draws nothing, and says that this browser does not support webgl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586305</commentid>
    <comment_count>2</comment_count>
      <attachid>133473</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-23 07:07:52 -0700</bug_when>
    <thetext>Comment on attachment 133473
Patch

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

Good work, see comments.

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests, just a buildfix.
&gt; +

I wouldn&apos;t call this a build fix. I&apos;d say instead that it&apos;s tested by existing WebGL tests.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:947
&gt; +#if defined(QT_OPENGL_ES_2) || USE(OPENGL_ES_2)

I e should add
#if defined(QT_OPENGL_ES_2)
#define WTF_USE_OPENGL_ES_2 1
#endif

to Platform.h instead.
Then we don&apos;t need to use ||.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:173
&gt; +    ::glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);

Wouldn&apos;t this break some existing desktop stuff, where EXT is needed?
I&apos;d rather this be moved to a bindFramebuffer that&apos;s implemented differently in ES and desktop.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:212
&gt; +#if defined(QT_OPENGL_ES_2) || USE(OPENGL_ES_2)

I&apos;d rather we move all the ES specific functionality into the ES/desktop files, rather than have #ifdefs inside common. This applies to a lot of the following changes :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586372</commentid>
    <comment_count>3</comment_count>
      <attachid>133473</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-23 08:58:56 -0700</bug_when>
    <thetext>Comment on attachment 133473
Patch

I&apos;ve been hoping to see this change for a long time!

I agree with No&apos;am comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589901</commentid>
    <comment_count>4</comment_count>
      <attachid>134278</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-03-28 06:12:37 -0700</bug_when>
    <thetext>Created attachment 134278
patch

The changes are implemented based on Noam advices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589911</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-28 06:33:28 -0700</bug_when>
    <thetext>was this tested (In reply to comment #4)
&gt; Created an attachment (id=134278) [details]
&gt; patch
&gt; 
&gt; The changes are implemented based on Noam advices.

Was this tested on actual ES hardware (e.g. N9)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589932</commentid>
    <comment_count>6</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-03-28 07:17:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; was this tested (In reply to comment #4)
&gt; &gt; Created an attachment (id=134278) [details] [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; The changes are implemented based on Noam advices.
&gt; 
&gt; Was this tested on actual ES hardware (e.g. N9)?

Of course, I sent the compiled webkit to my N9, but unfortunatelly it did not work. I wrote at my first comment why I could not to test.

The working is similar to Deskto on my N9.

My next task will fix this segfault error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589987</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-28 08:35:28 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; was this tested (In reply to comment #4)
&gt; &gt; &gt; Created an attachment (id=134278) [details] [details] [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; The changes are implemented based on Noam advices.
&gt; &gt; 
&gt; &gt; Was this tested on actual ES hardware (e.g. N9)?
&gt; 
&gt; Of course, I sent the compiled webkit to my N9, but unfortunatelly it did not work. I wrote at my first comment why I could not to test.
&gt; 
&gt; The working is similar to Deskto on my N9.
&gt; 
&gt; My next task will fix this segfault error.

OK, let&apos;s wait with this until it works then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596562</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-05 07:50:33 -0700</bug_when>
    <thetext>
&gt; &gt; My next task will fix this segfault error.
&gt; 
&gt; OK, let&apos;s wait with this until it works then.

btw - you&apos;re aware that this is only testable with WebKit-1 (QtTestBrowser) right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606167</commentid>
    <comment_count>9</comment_count>
      <attachid>134278</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-19 16:47:58 -0700</bug_when>
    <thetext>Comment on attachment 134278
patch

Clearing flags for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619430</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-09 06:10:59 -0700</bug_when>
    <thetext>Any progress on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632698</commentid>
    <comment_count>11</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-05-24 06:06:21 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Any progress on this?

Sorry, I had a day-off then.

The patch is ready, but it does not work on N9 (since --3d-canvas have been replaces with --webgl).

When I run QtTestBrowser with these switches:

-graphicsbased -gl-viewport -tiled-backing-store -viewport-update-mode BoundingRect -webgl http://jsbin.com/ulazel

I get an error saying: &quot;Your web browser does not support WebGL!&quot;

Is it possible that a switch is missing (it used to work when --3d-canvas was active)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632722</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-24 06:32:28 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Any progress on this?
&gt; 
&gt; Sorry, I had a day-off then.
&gt; 
&gt; The patch is ready, but it does not work on N9 (since --3d-canvas have been replaces with --webgl).
&gt; 
&gt; When I run QtTestBrowser with these switches:
&gt; 
&gt; -graphicsbased -gl-viewport -tiled-backing-store -viewport-update-mode BoundingRect -webgl http://jsbin.com/ulazel
&gt; 
&gt; I get an error saying: &quot;Your web browser does not support WebGL!&quot;
&gt; 
&gt; Is it possible that a switch is missing (it used to work when --3d-canvas was active)?

I think the --3d-canvas switch for build-webkit has been replaced with --webgl.
Are you sure the code is getting built?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640533</commentid>
    <comment_count>13</comment_count>
      <attachid>145574</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-06-04 06:17:51 -0700</bug_when>
    <thetext>Created attachment 145574
patch

WebGL works on N9 with this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640549</commentid>
    <comment_count>14</comment_count>
      <attachid>145574</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-04 06:57:37 -0700</bug_when>
    <thetext>Comment on attachment 145574
patch

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

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:252
&gt; +        GraphicsContext3D::clearDepth(1);

I don&apos;t think you need GraphicsContext3D::

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:274
&gt; +        GraphicsContext3D::clearDepth(clearDepth);

ditto.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:93
&gt; -            ::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_STENCIL_OES, width, height, 0, GL_DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES, 0);
&gt; +            ::glTexImage2D(GL_TEXTURE_2D, 0, m_internalColorFormat, width, height, 0, colorFormat, pixelDataType, 0);

This seems wrong. m_internalColorFormat is equivalent to GL_DEPTH_STENCIL_OES?
I suggest we simply not allow this code-path if GL_DEPTH_STENCIL_OES is not defined, or something to that effect.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:236
&gt; +#if !defined (QT_OPENGL_ES_2)

Let&apos;s switch to USE(OPENGL_ES_2) in this file while we&apos;re at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641346</commentid>
    <comment_count>15</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-06-05 02:29:13 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 145574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145574&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:252
&gt; &gt; +        GraphicsContext3D::clearDepth(1);
&gt; 
&gt; I don&apos;t think you need GraphicsContext3D::
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:274
&gt; &gt; +        GraphicsContext3D::clearDepth(clearDepth);
&gt; 
&gt; ditto.

It is necessary to write &apos;GraphicsContext3D::&apos; because there is a variable that name is &apos;clearDepth&apos;. With &apos;GraphicsContext3D::&apos; you can say to the compiler that it is a function and not the variable. 
 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:93
&gt; &gt; -            ::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_STENCIL_OES, width, height, 0, GL_DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES, 0);
&gt; &gt; +            ::glTexImage2D(GL_TEXTURE_2D, 0, m_internalColorFormat, width, height, 0, colorFormat, pixelDataType, 0);
&gt; 
&gt; This seems wrong. m_internalColorFormat is equivalent to GL_DEPTH_STENCIL_OES?
&gt; I suggest we simply not allow this code-path if GL_DEPTH_STENCIL_OES is not defined, or something to that effect.

You are right. I found the appropriate of GL_DEPTH_STENCIL_OES in GC3D.h that is GraphicsContext3D::DEPTH_STENCIL.
But the GL_UNSIGNED_INT_24_8_OES has not an appropriate type in GC3D.h that&apos;s why I inserted a new type into GC3D&apos;s macros. It is UNSIGNED_INT_24_8.

I hope it is a right way.

&gt; &gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:236
&gt; &gt; +#if !defined (QT_OPENGL_ES_2)
&gt; 
&gt; Let&apos;s switch to USE(OPENGL_ES_2) in this file while we&apos;re at it.

fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641347</commentid>
    <comment_count>16</comment_count>
      <attachid>145737</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-06-05 02:29:56 -0700</bug_when>
    <thetext>Created attachment 145737
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641492</commentid>
    <comment_count>17</comment_count>
      <attachid>145737</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-05 06:40:09 -0700</bug_when>
    <thetext>Comment on attachment 145737
patch

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

Great! One nitpick.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:240
&gt; +#if !USE(OPENGL_ES_2)
&gt;      glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, m_context-&gt;m_multisampleFBO);
&gt;      glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, m_context-&gt;m_fbo);
&gt; +#endif
&gt;      glBlitFramebuffer(0, 0, m_context-&gt;m_currentWidth, m_context-&gt;m_currentHeight, 0, 0, m_context-&gt;m_currentWidth, m_context-&gt;m_currentHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);

The #endif should encompass the blit as well, we can&apos;t blit if we don&apos;t bind READ/DRAW fbos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641548</commentid>
    <comment_count>18</comment_count>
      <attachid>145796</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-06-05 07:56:46 -0700</bug_when>
    <thetext>Created attachment 145796
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642113</commentid>
    <comment_count>19</comment_count>
      <attachid>145796</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 20:04:47 -0700</bug_when>
    <thetext>Comment on attachment 145796
patch

Clearing flags on attachment: 145796

Committed r119552: &lt;http://trac.webkit.org/changeset/119552&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642115</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 20:04:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133473</attachid>
            <date>2012-03-23 06:39:19 -0700</date>
            <delta_ts>2012-03-28 06:12:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>OPENGL_ES_N9.diff</filename>
            <type>text/plain</type>
            <size>58348</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMGMzZTIxLi4yZGY1ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTItMDMtMjMgIFJvbGFuZCBUYWthY3MgIDx0YWthY3Mucm9sYW5kQHN0dWQudS1zemVn
ZWQuaHU+CisKKyAgICAgICAgW1F0XSBVc2UgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAg
d2hlbiB1c2luZyBPcGVuR0wgRVMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4NzIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgYnVpbGRmaXguCisKKyAgICAgICAgRnJv
bSBub3csIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIHdpbGwgYmUgdXNlZCBvbiBPcGVu
R0wgRVMgc3VwcG9ydGVkCisgICAgICAgIHBsYXRmb3JtLgorICAgICAgICBGdW5jdGlvbnMgYXJl
IHJlbW92ZWQgZnJvbSBHcmFwaGljc0NvbnRleHQzRFF0IHRoYXQgYWxyZWFkeSBpbXBsZW1lbnRl
ZAorICAgICAgICBpbiBHcmFwaGljc0NvbnRleHQzRENvbW1vbi4gIkVYVCIgaGFzIGJlZW4gZGVs
ZXRlZCBmcm9tIGZ1bmN0aW9uIGFuZCBtYWNybworICAgICAgICBuYW1lcyBlbmRpbmcgd2l0aCAi
RVhUIi4gSXQgd2FzIG5lZWRlZCBiZWNhdXNlIE9wZW5HTEVTIGRvZXMgbm90IHN1cHBvcnQKKyAg
ICAgICAgdGhlc2UgKGFuZCBmdW5jdGlvbnMgYW5kIG1hY3JvcyB3aXRob3V0ICJFWFQiIGRvIHRo
ZSBzYW1lIHRoaW5ncyBhcyB0aGUKKyAgICAgICAgb25lcyBlbmRpbmcgd2l0aCAiRVhUIikuCisg
ICAgICAgIEV4dGVuc2lvbnMzRFF0IGlzIHJlbW92ZWQgYmVjZWF1c2UgaXQgaGFzIG5ldmVyIGJl
ZW4gdXNlZC4KKyAgICAgICAgVGhlICJtX2RlcHRoU3RlbmNpbEJ1ZmZlciIgbWVtYmVyIGlzIGFk
ZGVkIHRvIFF0IHBvcnQgYmVjYXVzZSBpdCB1c2VzCisgICAgICAgICJtX2RlcHRoU3RlbmNpbEJ1
ZmZlciIgbGlrZSB0aGUgb3RoZXIgcGxhdGZvcm1zLgorICAgICAgICBGdXJ0aGVybW9yZSBzb21l
IHN5bnRheCBlcnJvcnMgaGF2ZSBiZWVuIGZpeGVkLgorCisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
ckRlcHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVT
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKwogMjAxMi0wMy0y
MyAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBUaGUg
SlNDIGNvZGUgZ2VuZXJhdG9yIGNhbid0IGhhbmRsZSBib29sZWFuIGFyZ3VtZW50cyBmb3IgQ2Fs
bGJhY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCAzNTE0YjdiLi40OTU4YzYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTM3NjYsNyArMzc2Niw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmggXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9F
eHRlbnNpb25zM0RRdC5oCiAKICAgICB2OCB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApAQCAtMzgw
NywxOSArMzgwNiwyMiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgXAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcCBcCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCiAKICAgICBJTkNMVURFUEFUSCArPSAkJFBX
RC9wbGF0Zm9ybS9ncmFwaGljcy9ncHUKIAotICAgICFjb250YWlucyhRVF9DT05GSUcsIG9wZW5n
bGVzMikgewotICAgICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAorICAgIGNvbnRhaW5zKFFUX0NPTkZJRywg
b3BlbmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CisgICAgICAgICFjb250
YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgeworICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAgICAgICB9CisKKyAgICAgICAgSEVB
REVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKIAog
ICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAotICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcCBcCiAKICAgICAgICAgQU5HTEVfRElSID0gJCRyZXBsYWNlKFBXRCwgIldlYkNv
cmUiLCAiVGhpcmRQYXJ0eS9BTkdMRSIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDNiYjg1ZjguLjVjZTFhMTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaApAQCAtOTMyLDI5ICs5MzIsMjQgQEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAg
ICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKLSNpZiBQTEFURk9STShRVCkgJiYgZGVm
aW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7Ci0g
ICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7Ci0jZWxzZQorCiAgICAgZnJp
ZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3Bl
bkdMPiBtX2V4dGVuc2lvbnM7Ci0jZW5kaWYKIAogICAgIEF0dHJpYnV0ZXMgbV9hdHRyczsKICAg
ICBWZWN0b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7CiAKICAgICBHQzNEdWludCBt
X3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7CiAgICAgR0MzRHVpbnQgbV9mYm87Ci0jaWYg
UExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgR0MzRHVpbnQgbV9k
ZXB0aEJ1ZmZlcjsKLSAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7Ci0jZWxzZQotI2lmIFVT
RShPUEVOR0xfRVNfMikKKworICAgIC8vIGlmIHNvbWVvbmUgd291bGQgbGlrZSB0byB1c2UgRVMg
b3V0IG9mIFF0IHBsYXRmb3JtLAorICAgIC8vIG11c3QgZGVmaW5lIE9QRU5HTF9FU18yCisjaWYg
ZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgfHwgVVNFKE9QRU5HTF9FU18yKQogICAgIEdDM0R1aW50
IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCiAg
ICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7Ci0jZW5kaWYKKwogICAgIGJvb2wgbV9s
YXllckNvbXBvc2l0ZWQ7CiAgICAgR0MzRHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCA3YzQ3Nzc4Li5hNDExYjll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTIwOCw2ICsyMDgs
MTggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xh
bXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFu
Z2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRo
KEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bENsZWFyRGVwdGgoZGVwdGgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA5MTIz
ZWQwLi44ZDc0MzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKQEAgLTE3MCwxMyArMTcwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBy
ZXBhcmVUZXh0dXJlKCkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCiAgICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKIAotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUw
KTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CiAgICAgOjpnbENvcHlUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxD
b2xvckZvcm1hdCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCk7CiAg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fYm91bmRUZXh0dXJlMCk7CiAgICAg
OjpnbEFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlKTsKLSAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7CiAgICAgOjpnbEZpbmlzaCgpOwog
ICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKIH0KQEAgLTE5MiwxMiArMTkyLDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIg
KnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwog
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fZmJvKTsKICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CiAgICAgICAgICAgICBtdXN0
UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDksNyAr
MjA5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVu
c2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAgICAgIG11c3RSZXN0b3JlUGFj
a0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogCisjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikg
fHwgVVNFKE9QRU5HTF9FU18yKQorICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7
CisjZWxzZQogICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsK
KyNlbmRpZgorCiAgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKICAgICAgICAgICAgIHN0ZDo6c3dhcChw
aXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCkBAIC0yMTksNyAr
MjI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5z
aWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2kKICAgICAgICAgOjpnbFBpeGVsU3RvcmVp
KEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAogICAgIGlmIChtdXN0UmVzdG9y
ZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fYm91bmRGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2JvdW5kRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCkBAIC0yNTIsNyArMjU3LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIDo6Z2xDb2xvck1hc2so
R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAgaWYgKG1fYXR0cnMuZGVw
dGgpIHsKICAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOworCisjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgfHwgVVNFKE9QRU5HTF9FU18y
KQorICAgICAgICA6OmdsQ2xlYXJEZXB0aGYoMSk7CisjZWxzZQogICAgICAgICA6OmdsQ2xlYXJE
ZXB0aCgxKTsKKyNlbmRpZgogICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVN
QVNLLCAmZGVwdGhNYXNrKTsKICAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKICAgICAg
ICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CkBAIC0yNzQsNyArMjg0LDEyIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQog
ICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29s
b3JbMl0sIGNsZWFyQ29sb3JbM10pOwogICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBj
b2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKICAgICBpZiAobV9hdHRy
cy5kZXB0aCkgewotICAgICAgICA6OmdsQ2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKworI2lmIGRl
ZmluZWQoUVRfT1BFTkdMX0VTXzIpIHx8IFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAgOjpnbENs
ZWFyRGVwdGhmKDEpOworI2Vsc2UKKyAgICAgICAgOjpnbENsZWFyRGVwdGgoMSk7CisjZW5kaWYK
ICAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOwogICAgIH0KICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKSB7CkBAIC0yOTEsNyArMzA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJ
VEhFUik7CiAKICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7CiAKICAgICA6OmdsRmx1
c2goKTsKIH0KQEAgLTMzOCw3ICszNTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
RnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcgogICAg
IGVsc2UKICAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZC
TyA6IG1fZmJvKTsKICAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8pIHsKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBmYm8pOwogICAgICAgICBtX2JvdW5kRkJPID0gZmJvOwogICAgIH0KIH0KQEAg
LTM0Niw3ICszNjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcgogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgcmVuZGVyYnVmZmVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKyAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CiB9CiAKIApAQCAtNDEwLDcgKzQyNSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpCiBHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRh
cmdldCk7CisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNE
Y2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQpAQCAtNDI1LDEyICs0NDAsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKICAgICA6
OmdsQ2xlYXIobWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgo
R0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
Q2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3Rl
bmNpbChHQzNEaW50IHMpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC01MDAsMTEg
KzUwOSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykgewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgfQogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
KTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQpAQCAtNTEyLDExICs1MjEsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CiAgICAg
ICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fZmJvKTsKICAgICB9CiAgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNh
bXBsZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVt
IG1vZGUpCkBAIC01MzcsMTIgKzU0Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
TWFzayhHQzNEYm9vbGVhbiBmbGFnKQogICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNs
YW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aFJh
bmdlKHpOZWFyLCB6RmFyKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtNjAyLDEzICs2MDUsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Zmx1c2goKQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKKyAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0
YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
dGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhU
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgOjpn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNE
ZW51bSBtb2RlKQpAQCAtNjIwLDcgKzYyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZy
b250RmFjZShHQzNEZW51bSBtb2RlKQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVN
aXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQpOworICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0
YXJnZXQpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykK
QEAgLTc0MSw3ICs3NDQsNyBAQCBHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzRnJh
bWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOworICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcik7CiB9CiAKIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQpAQCAtNzU5LDcgKzc2Miw3IEBAIEdDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJl
bmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIp
OworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAogR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQpAQCAtODEzLDEyICs4MTYsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBp
eGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICA6
OmdsRmx1c2goKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgOjpnbEZsdXNoKCk7CiAg
ICAgfQogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgZGF0YSk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKQEAgLTExMjEsNyArMTEyNCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYg
KGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQogICAgICAgICBhdHRhY2ht
ZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIg
d29ya3MuCi0gICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKKyAgICA6OmdsR2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCkBAIC0xMTUwLDcgKzEx
NTMsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSkKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CisgICAgOjpnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKQEAgLTEzMTMsNyArMTMxNiw3IEBAIFBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZvKTsKICAgICBy
ZXR1cm4gbzsKIH0KIApAQCAtMTMyNyw3ICsxMzMwLDcgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEs
ICZvKTsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwogfQog
CkBAIC0xMzU0LDcgKzEzNTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1
ZmZlcik7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCkBAIC0xMzY2LDcgKzEzNjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsK
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJnJlbmRlcmJ1ZmZlcik7CisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJi
dWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5j
cHAKaW5kZXggNGZhYTY2My4uMGM3MWJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcApAQCAtMzAsMTEgKzMwLDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
Ci0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiAj
aW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgogCkBAIC02MywxMiArNjQsMTIgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAg
ICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CiAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9m
Ym8pIHsKICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgfQogCiAgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CiAgICAgOjpnbFRleEltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCAwLCBjb2xvckZvcm1hdCwgcGl4ZWxEYXRhVHlwZSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVy
VGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhU
LCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZSwgMCk7CiAKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9jb21wb3NpdG9yVGV4dHVyZSk7CiAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgMCk7CkBAIC04MCwyOCArODEsMjggQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKICAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRl
cHRoIGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCiAgICAgICAgIGlmIChzdXBwb3J0
UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAgICAgICAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmcik7Ci0gICAgICAgICAgICA6OmdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9ERVBUSF9TVEVOQ0lMX09FUywgd2lkdGgsIGhl
aWdodCwgMCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywg
MCk7CisgICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwg
cGl4ZWxEYXRhVHlwZSwgMCk7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQogICAg
ICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
U1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwg
MCk7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKICAgICAgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQs
IEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKICAgICAgICAgICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkgewotICAgICAgICAgICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fc3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVG
RkVSX0VYVCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAg
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fc3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgICAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIp
OworICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZF
UiwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRB
Q0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgICAgICAgICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZl
cik7Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAg
ICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRo
QnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsK
KyAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIs
IEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFD
SE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAw
KTsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChH
TF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAg
IGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCiAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgfQpAQCAtMTA5LDcgKzExMCw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IHN1cHBvcnQgYW50aWFsaWFzaW5nIHlldC4KICAgICBu
b3RJbXBsZW1lbnRlZCgpOwpAQCAtMTE4LDcgKzExOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCYgcmVjdCkKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlRVhUKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIDo6Z2xS
ZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCkBAIC0xMzgsNCArMTM5LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
cHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwor
fQorCit9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRl
eCBmOGY5MDUyLi5mNWU3MmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMjAsMTMgKzIw
LDkgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgogI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRFF0LmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9w
ZW5HTC5oIgotI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC0xODMsOCAr
MTc5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNhbXBsZUZy
YW1lYnVmZmVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxp
YXMpCiAgICAgICAgIHJldHVybjsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1F
QlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPKTsKLSAgICBnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX2Zibyk7CisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRl
eHQtPm1fbXVsdGlzYW1wbGVGQk8pOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX2Zibyk7CiAgICAgZ2xCbGl0RnJhbWVi
dWZmZXIoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRIZWlnaHQsIDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9j
dXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgIGdsQmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5t
X2JvdW5kRkJPKTsKIH0KQEAgLTI1NCw5ICsyNTAsOCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCiAg
ICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKLSNlbHNlCi0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cigwKQogI2VuZGlmCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9sYXll
ckNvbXBvc2l0ZWQoZmFsc2UpCiAgICAgLCBtX2ludGVybmFsQ29sb3JGb3JtYXQoMCkKICAgICAs
IG1fYm91bmRGQk8oMCkKQEAgLTQwMiwxMTU5ICszOTcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQg
aW1hZwogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotI2lmIGRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKQotewotICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGZvciBwcm9wZXIgbm9uLXByZW11bHRpcGxp
ZWQtYWxwaGEKLSAgICAvLyBzdXBwb3J0LgotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAo
KHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpIHx8
ICghbV9wcml2YXRlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3
aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIC8vIENyZWF0ZSBjb2xvciBidWZmZXIKLSAgICBnbEJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGlmIChtX2F0
dHJzLmFscGhhKQotICAgICAgICBnbFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIC8qIGxldmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVp
Z2h0LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCAvKiBkYXRhICovIDApOwotICAgIGVsc2UKLSAgICAgICAg
Z2xUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAvKiBsZXZlbCAqLyAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IC8qIGRhdGEgKi8gMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVycy4K
LSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7Ci0g
ICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05F
TlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCkgewotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9y
YWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0jZWxzZQotICAg
IGlmIChtX2F0dHJzLmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBnbEJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCAmJiBtX2F0dHJzLnN0ZW5jaWwp
Ci0gICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgR0xfREVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
IGVsc2UgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGVsc2UgaWYgKG1fYXR0cnMu
c3RlbmNpbCkKLSAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIENvbnN0cnVjdCBj
YW52YXMgRkJPLgotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotI2lmIGRlZmlu
ZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgIGdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAg
ICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0jZWxzZQotICAgIGlmIChtX2F0
dHJzLmRlcHRoICYmIG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICBlbHNlIGlmIChtX2F0dHJzLmRlcHRoKQot
ICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICBlbHNlIGlm
IChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9B
VFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7Ci0jZW5kaWYKLQotICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVz
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICBM
T0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNEOiBDYW52YXMgRkJPIGluaXRpYWxpemF0aW9uIGZh
aWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjbGVhckZsYWdzID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKG1fYXR0cnMuZGVw
dGgpCi0gICAgICAgIGNsZWFyRmxhZ3MgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQ7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgY2xlYXJGbGFncyB8PSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotCi0gICAgZ2xDbGVhcihjbGVh
ckZsYWdzKTsKLSAgICBnbEZsdXNoKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6
ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFT
U0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQXR0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0
dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3Vu
dCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBp
ZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYm91bmRGQk8gPSBi
dWZmZXIgPyBidWZmZXIgOiBtX2ZibzsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1f
Ym91bmRGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVu
ZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0Mz
RGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xh
bXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51
bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmxlbmRFcXVhdGlv
bihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2Rl
QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0g
c2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVu
dW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRz
dFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1
c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJ1ZmZlckRhdGEodGFy
Z2V0LCBzaXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zm
c2V0LCBzaXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIsIEdDM0Rj
bGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbENsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBnbENsZWFyRGVwdGhmKGRl
cHRoKTsKLSNlbHNlCi0gICAgZ2xDbGVhckRlcHRoKGRlcHRoKTsKLSNlbmRpZgotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVl
biwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBk
YXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQ29tcHJlc3NlZFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgaW1hZ2VTaXplLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Vs
bEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEN1bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMo
R0MzRGVudW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlcHRo
RnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Ri
b29sZWFuIGZsYWcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZXB0aE1h
c2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNs
YW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgZ2xEZXB0aFJhbmdlZih6TmVhciwg
ekZhcik7Ci0jZWxzZQotICAgIGdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci0jZW5kaWYKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0p
OwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
RGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRpc2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
bHVzaCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xGbHVzaCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZl
bCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBp
ZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIEdMaW50IG1heExlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExl
bmd0aCk7Ci0KLSAgICBHTGNoYXIqIG5hbWUgPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhtYXhMZW5n
dGgpOwotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0g
ICAgR0xlbnVtIHR5cGUgPSAwOwotCi0gICAgZ2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5k
ZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0KLSAgICBp
ZiAoIW5hbWVMZW5ndGgpIHsKLSAgICAgICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0
aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotCi0gICAg
ZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBt
YXhMZW5ndGggPSAwOwotICAgIGdsR2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4
TGVuZ3RoKTsKLQotICAgIEdMY2hhciogbmFtZSA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKG1heExl
bmd0aCk7Ci0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0KLSAgICBnbEdldEFjdGl2ZVVuaWZvcm0oc3RhdGljX2Nh
c3Q8R0x1aW50Pihwcm9ncmFtKSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXpl
LCAmdHlwZSwgbmFtZSk7Ci0KLSAgICBpZiAoIW5hbWVMZW5ndGgpIHsKLSAgICAgICAgZmFzdEZy
ZWUobmFtZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmZvLm5hbWUg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBp
bmZvLnNpemUgPSBzaXplOwotCi0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFt
KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9hdHRyczsKLX0KLQotR0Mz
RGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9zeW50aGV0
aWNFcnJvcnMuc2l6ZSgpID4gMCkgewotICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAgICBHQzNEZW51
bSBlcnIgPSAqaXRlcjsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwot
ICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiBnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1v
ZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xIaW50KHRhcmdldCwgbW9k
ZSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElz
QnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0Vu
YWJsZWQoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBnbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQz
RDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlm
ICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4g
R0xfRkFMU0U7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGds
SXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYg
KCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAgIHJldHVybiBH
TF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJ
c1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNU
ZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gZ2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xMaW5lV2lkdGgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsUGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJh
bSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0
IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQq
IGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCi0gICAgaWYgKHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICFkZWZpbmVkKFFUX09QRU5HTF9FU18yKQot
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICBjYXNlIERFUFRIX1NURU5DSUw6Ci0g
ICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMODsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQg
PSBERVBUSF9DT01QT05FTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdCQTQ6Ci0gICAg
Y2FzZSBSR0I1X0ExOgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IFJHQkE7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUkdCNTY1OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IFJHQjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKHRh
cmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBp
bnZlcnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTYW1wbGVDb3ZlcmFn
ZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU3RyaW5nIHByZWZp
eGVkU291cmNlOwotCi0jaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpCi0gICAgcHJlZml4ZWRT
b3VyY2UuYXBwZW5kKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIpOwotI2VuZGlmCi0KLSAg
ICBwcmVmaXhlZFNvdXJjZS5hcHBlbmQoc291cmNlKTsKLQotICAgIENTdHJpbmcgc291cmNlQ1Mg
PSBwcmVmaXhlZFNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogZGF0YSA9IHNvdXJjZUNT
LmRhdGEoKTsKLSAgICBpbnQgbGVuZ3RoID0gcHJlZml4ZWRTb3VyY2UubGVuZ3RoKCk7Ci0gICAg
Z2xTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLCAvKiBjb3VudCAqLyAxLCAmZGF0YSwgJmxl
bmd0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVt
IGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBt
YXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQg
bWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxNYXNrKG1h
c2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU3RlbmNp
bE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0x
Zihsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEZmxvYXQqIGFycmF5KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIHNpemUsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2
MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xaShsb2NhdGlv
biwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQg
bG9jYXRpb24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rp
bnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTJp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGlu
dCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zaShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MiwgR0MzRGludCB2
MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aShsb2NhdGlv
biwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJh
eSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZhbGlk
YXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0
dHJpYjFmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwg
djAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
djAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhB
dHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBH
QzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0
dHJpYjRmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5
cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIg
b2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmli
UG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJl
dF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVh
biogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRCb29sZWFu
dihwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0QnVmZmVy
UGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEZsb2F0dihwYXJhbU5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFy
Z2V0LCBhdHRhY2htZW50LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEludGVnZXJ2KHBhcmFtTmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFt
aXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
Ci0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotCi0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciop
IGZhc3RNYWxsb2MobGVuZ3RoKTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsK
LQotICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7
Ci0KLSAgICBTdHJpbmcgcmVzdWx0KGluZm8pOwotICAgIGZhc3RGcmVlKGluZm8pOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIHBh
cmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
ckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIEdM
c2l6ZWkgc2l6ZSA9IDA7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2Mo
bGVuZ3RoKTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGdsR2V0
U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgU3RyaW5n
IHJlc3VsdChpbmZvKTsKLSAgICBmYXN0RnJlZShpbmZvKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xp
bnQgbGVuZ3RoID0gMDsKLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIEdMc2l6ZWkgc2l6ZSA9
IDA7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKLSAg
ICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGdsR2V0U2hhZGVyU291cmNl
KHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0KGluZm8p
OwotICAgIGZhc3RGcmVlKGluZm8pOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFt
TmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VW5pZm9ybWZ2KHBy
b2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0VW5p
Zm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRWZXJ0
ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJh
bU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi1HQzNE
c2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWlu
dCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIAotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJQ
b2ludGVydihpbmRleCwgcGFyYW1OYW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEdMdWludCBoYW5kbGUgPSAwOwotICAgIGdsR2VuQnVmZmVycygvKiBjb3VudCAqLyAxLCAmaGFu
ZGxlKTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291
bnQgKi8gMSwgJmhhbmRsZSk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotUGxhdGZvcm0zRE9i
amVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBoYW5kbGUgPSAwOwotICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygvKiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKLSAgICByZXR1cm4gaGFuZGxl
OwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIo
R0MzRGVudW0gdHlwZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
Z2xDcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEdMdWludCBoYW5kbGUgPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJmhhbmRsZSk7Ci0gICAg
cmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAm
ZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
JnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3Ip
Ci17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0
ZWQgPSB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5n
ZWQoKQotewotICAgIC8vIEZJWE1FOiBBbnkgYWNjZWxlcmF0ZWQgY29tcG9zaXRvciBuZWVkcyB0
byBiZSB0b2xkIHRvIHJlLXJlYWQgZnJvbSBoZXJlLgotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0g
ZmFsc2U7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi1FeHRlbnNpb25zM0Qq
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5z
aW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRFF0
KTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotI2VuZGlmCi0KIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCg==
</data>
<flag name="review"
          id="137478"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="137479"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134278</attachid>
            <date>2012-03-28 06:12:37 -0700</date>
            <delta_ts>2012-06-04 06:17:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Nokia_N9.diff</filename>
            <type>text/plain</type>
            <size>69072</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzNiMThlMC4uZmQwZDRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0yOCAg
Um9sYW5kIFRha2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdlZC5odT4KKworICAgICAg
ICBbUXRdIFVzZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3aGVuIHVzaW5nIE9wZW5H
TCBFUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3
MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZWZp
bmVkIGEgZ2xvYmFsIE9wZW5nbCBFUyBtYWNybyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkCisgICAg
ICAgIG9uIGV2ZXJ5IHBsYXRmb3JtcyB3aGlsZSBjaGVja2luZyBPcGVuR0wgRVMuCisKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMi0wMy0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBTZXQgZW9sLXN0eWxlOiBuYXRpdmUgb24gV1RGLnNsbiBw
ZXIgUnlhbiBTbGVldmkncyByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggNTU2YzY4YS4uYzZiMjcw
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCkBAIC0xMjA1LDQgKzEyMDUsMTIgQEAKICNkZWZpbmUgV1RGX1VTRV9a
TElCIDEKICNlbmRpZgogCisvKiBEZWZpbmUgYSBnbG9iYWwgT3BlbmdsIEVTIG1hY3JvICovCisj
aWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorI2lmIGRlZmluZWQoUVRfT1BF
TkdMX0VTXzIpICYmICFkZWZpbmVkKFdURl9VU0VfT1BFTkdMX0VTXzIpCisjZGVmaW5lIFdURl9V
U0VfT1BFTkdMX0VTXzIgMQorI2VuZGlmCisjZW5kaWYKKwogI2VuZGlmIC8qIFdURl9QbGF0Zm9y
bV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMmM4OTk3Zi4uODEwYzllOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDgxIEBACisyMDEyLTAzLTI4ICBSb2xhbmQgVGFrYWNzICA8dGFrYWNzLnJvbGFuZEBzdHVk
LnUtc3plZ2VkLmh1PgorCisgICAgICAgIFtRdF0gVXNlIEdyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwIHdoZW4gdXNpbmcgT3BlbkdMIEVTCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAg
ICAgICBGcm9tIG5vdywgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgd2lsbCBiZSB1c2Vk
IG9uIE9wZW5HTCBFUyBzdXBwb3J0ZWQKKyAgICAgICAgcGxhdGZvcm0uCisgICAgICAgIEZ1bmN0
aW9ucyBhcmUgcmVtb3ZlZCBmcm9tIEdyYXBoaWNzQ29udGV4dDNEUXQgdGhhdCBhbHJlYWR5IGlt
cGxlbWVudGVkCisgICAgICAgIGluIEdyYXBoaWNzQ29udGV4dDNEQ29tbW9uLiAiRVhUIiBoYXMg
YmVlbiBkZWxldGVkIGZyb20gZnVuY3Rpb24gYW5kIG1hY3JvCisgICAgICAgIG5hbWVzIGVuZGlu
ZyB3aXRoICJFWFQiIGluIHRoZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLiBJdCB3YXMgbmVl
ZGVkCisgICAgICAgIGJlY2F1c2UgT3BlbkdMRVMgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSAoYW5k
IGZ1bmN0aW9ucyBhbmQgbWFjcm9zIHdpdGhvdXQKKyAgICAgICAgIkVYVCIgZG8gdGhlIHNhbWUg
dGhpbmdzIGFzIHRoZSBvbmVzIGVuZGluZyB3aXRoICJFWFQiKS4KKyAgICAgICAgRXh0ZW5zaW9u
czNEUXQgaXMgcmVtb3ZlZCBiZWNlYXVzZSBpdCBoYXMgbmV2ZXIgYmVlbiB1c2VkLgorICAgICAg
ICBTb21lIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW92ZWQgZnJvbiBHcmFwaGljc0NvbnRleHQzRENv
bW1vbiB0byAqT3BlbkdMCisgICAgICAgIGFuZCAqT3BlbkdMRVMgdG8gcHJvdmlkZSBzcGVjaWFs
aXphdGlvbi4gCisgICAgICAgIFRoZSAibV9kZXB0aFN0ZW5jaWxCdWZmZXIiIG1lbWJlciBpcyBh
ZGRlZCB0byBRdCBwb3J0IGJlY2F1c2UgaXQgdXNlcworICAgICAgICAibV9kZXB0aFN0ZW5jaWxC
dWZmZXIiIGxpa2UgdGhlIG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgICAgRnVydGhlcm1vcmUgc29t
ZSBzeW50YXggZXJyb3JzIGhhdmUgYmVlbiBmaXhlZC4KKworICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFt
ZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0
aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRo
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxpdE11bHRp
c2FtcGxlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp+R3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEyLTAzLTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTEyMTk5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMmNmMzZmYi4uZDk4Y2Y0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CkBAIC0zNzcwLDcgKzM3NzAsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkg
ewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRXh0ZW5zaW9uczNEUXQuaAogCiAgICAgdjggewogICAgICAgICBTT1VSQ0VTICs9IFwKQEAg
LTM4MTEsMTkgKzM4MTAsMjIgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L3F0L0RyYXdpbmdCdWZmZXJRdC5jcHAgXAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAogCiAgICAgSU5DTFVERVBBVEggKz0g
JCRQV0QvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1CiAKLSAgICAhY29udGFpbnMoUVRfQ09ORklHLCBv
cGVuZ2xlczIpIHsKLSAgICAgICAgSEVBREVSUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKyAgICBjb250YWlucyhRVF9DT05G
SUcsIG9wZW5nbCkgfCBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgeworICAgICAgICAh
Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpIHsKKyAgICAgICAgICAgIFNPVVJDRVMgKz0g
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgfQorCisgICAgICAg
IEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5o
CiAKICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKLSAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTENvbW1vbi5jcHAgXAogCiAgICAgICAgIEFOR0xFX0RJUiA9ICQkcmVwbGFjZShQV0QsICJX
ZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAzYmI4NWY4Li4yNTMz
MzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKQEAgLTczNyw2ICs3MzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwaXhl
bFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7CiAgICAgdm9pZCBwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7CiAKKyAgICB2b2lkIHJl
YWRQaXhlbHModW5zaWduZWQgY2hhciAqZGF0YSk7CiAgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7CiAKICAgICB2b2lkIHJlbGVh
c2VTaGFkZXJDb21waWxlcigpOwpAQCAtOTMyLDI5ICs5MzMsMjIgQEAgcHVibGljOgogICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNl
TWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKLSNpZiBQTEFURk9STShR
VCkgJiYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9u
czNEUXQ7Ci0gICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7Ci0jZWxzZQor
CiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAgICBPd25QdHI8RXh0ZW5z
aW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7Ci0jZW5kaWYKIAogICAgIEF0dHJpYnV0ZXMgbV9h
dHRyczsKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7CiAKICAgICBH
QzNEdWludCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7CiAgICAgR0MzRHVpbnQgbV9m
Ym87Ci0jaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgR0Mz
RHVpbnQgbV9kZXB0aEJ1ZmZlcjsKLSAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7Ci0jZWxz
ZQorCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAg
ICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCiAgICAgR0MzRHVpbnQgbV9kZXB0
aFN0ZW5jaWxCdWZmZXI7Ci0jZW5kaWYKKwogICAgIGJvb2wgbV9sYXllckNvbXBvc2l0ZWQ7CiAg
ICAgR0MzRHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAppbmRleCA3YzQ3Nzc4Li42MDU5MTYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTIwOCw2ICsyMDgsMTI4IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVm
ZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87CisgICAg
aWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJv
ID0gKG1fYXR0cnMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBp
ZiAoZmJvICE9IG1fYm91bmRGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0
YXJnZXQsIGZibyk7CisgICAgICAgIG1fYm91bmRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKHVuc2lnbmVkIGNoYXIgKmRhdGEp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwg
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5U
XzhfOF84XzhfUkVWLCBkYXRhKTsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJn
ZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0
YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
LCBHQzNEaW50IGxldmVsKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xG
cmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZSwgbGV2ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1h
cChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7Cisg
ICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1l
YnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVm
ZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChh
dHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKKyAgICAgICAgYXR0YWNobWVu
dCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdv
cmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJn
ZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVm
ZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7Cisg
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblJl
bmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVy
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
RVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRl
cmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNs
YW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKK30KKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKaW5kZXggOTEyM2VkMC4uYjk3NGJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKQogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CiAKLSAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIGJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAg
ICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwogICAgIDo6Z2xDb3B5VGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIDAsIDAsIG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOwogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYWN0aXZl
VGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fYm91bmRGQk8pOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fYm91bmRGQk8pOwogICAgIDo6Z2xGaW5pc2goKTsKICAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IHRydWU7CiB9CkBAIC0xOTIsMTIgKzE5MiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBw
aXhlbHNTaQogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgp
OwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgICAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7CiAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgewogICAgICAgICAgICAgbXVzdFJl
c3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAgICAgIG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMo
MCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdO
RURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOworICAgIHJlYWRQaXhlbHMocGl4ZWxzKTsKKwog
ICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCiAgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBw
aXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgpAQCAtMjE5LDcgKzIyMCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIg
KnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FM
SUdOTUVOVCwgcGFja0FsaWdubWVudCk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJP
KTsKKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9ib3VuZEZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtMjUyLDcgKzI1Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIDo6Z2xDb2xvck1hc2so
R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAgaWYgKG1fYXR0cnMuZGVw
dGgpIHsKICAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOwotICAgICAgICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyRGVwdGgoMSk7CiAgICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9X
UklURU1BU0ssICZkZXB0aE1hc2spOwogICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwog
ICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKQEAgLTI3NCw3ICsyNzUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKICAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVh
ckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKICAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1sw
XSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CiAgICAgaWYgKG1f
YXR0cnMuZGVwdGgpIHsKLSAgICAgICAgOjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKDEpOwogICAgICAgICA6OmdsRGVwdGhN
YXNrKGRlcHRoTWFzayk7CiAgICAgfQogICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKQEAgLTI5
MSw3ICsyOTIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCkKICAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKIAogICAgIGlmICht
dXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAgICAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2JvdW5kRkJPKTsKIAogICAgIDo6Z2xGbHVzaCgpOwog
fQpAQCAtMzI5LDI3ICszMzAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiAgICAgOjpnbEJpbmRC
dWZmZXIodGFyZ2V0LCBidWZmZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
RnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgZmJvOwotICAgIGlmIChidWZm
ZXIpCi0gICAgICAgIGZibyA9IGJ1ZmZlcjsKLSAgICBlbHNlCi0gICAgICAgIGZibyA9IChtX2F0
dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7Ci0gICAgaWYgKGZibyAh
PSBtX2JvdW5kRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBm
Ym8pOwotICAgICAgICBtX2JvdW5kRkJPID0gZmJvOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgdGV4dHVyZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTQwNywx
MiArMzg3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2kKICAgICA6OmdsQnVmZmVyU3ViRGF0
YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7CiB9CiAKLUdDM0RlbnVtIEdyYXBoaWNzQ29u
dGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXNFWFQodGFyZ2V0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihH
QzNEY2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCiB7
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC00MjUsMTIgKzM5OSw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQogICAgIDo6Z2xDbGVhciht
YXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBm
IGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckRlcHRo
KGRlcHRoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0Rp
bnQgcykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTUwMCwxMSArNDY4LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7
CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICB9CiAgICAgOjpnbENvcHlUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCkBAIC01MTIsMTEgKzQ4
MCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pIHsKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0KICAgICA6OmdsQ29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBiaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKQEAgLTUzNywxMiAr
NTA1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZs
YWcpCiAgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CkBAIC01OTksMzAgKzU2MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgp
CiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0Mz
RGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwg
dGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
bmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKLX0KLQogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CkBA
IC03MzUsMTUgKzY3OSw2IEBAIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJs
ZWQoR0MzRGVudW0gY2FwKQogICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7CiB9CiAKLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJ
c0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0KLQogR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCiB7CiAgICAgaWYg
KCFwcm9ncmFtKQpAQCAtNzUzLDE1ICs2ODgsNiBAQCBHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKICAgICByZXR1cm4gOjpn
bElzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlm
ICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1
ZmZlcik7Ci19Ci0KIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKICAgICBpZiAoIXNoYWRlcikKQEAgLTgxMywxMiArNzM5
LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpCiAgICAgOjpnbEZsdXNoKCk7CiAgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewog
ICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgICAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgICAgIDo6Z2xGbHVzaCgpOwogICAgIH0KICAg
ICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCkBAIC0xMTE2LDE0ICsxMDQyLDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKQogICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGF0dGFj
aG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0g
REVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3Mu
Ci0gICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwg
YXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTE0NywxMiAr
MTA2NSw2IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQogICAgIHJldHVybiBTdHJpbmcoaW5mby5nZXQoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVY
VCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CkBAIC0xMzA5LDI4ICsxMjIxLDEyIEBA
IFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCiAgICAg
cmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwot
fQotCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFt
KCk7CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAw
OwotICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0K
IFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51
bSB0eXBlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTM1MSwyNCArMTI0Nywx
MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCiAgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1l
YnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJhbWVi
dWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVu
ZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3Bw
CmluZGV4IDRmYWE2NjMuLjU4NTJkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAKQEAgLTMwLDExICszMCwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAot
I2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQogI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIApAQCAtNjMsMTIgKzY0LDEyIEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAg
Ym9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJv
KSB7CiAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0KIAogICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAgIDo6Z2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwg
Y29sb3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUsIDApOwogCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9z
aXRvclRleHR1cmUpOwogICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50
ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOwpAQCAtODAsMjggKzgxLDI4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKSB7CiAgICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZm
ZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgogICAgICAgICBpZiAoc3VwcG9ydFBhY2tlZERl
cHRoU3RlbmNpbEJ1ZmZlcikgewotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZnIpOwotICAgICAgICAgICAgOjpnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsIHdpZHRoLCBoZWlnaHQsIDAs
IEdMX0RFUFRIX1NURU5DSUxfT0VTLCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsIDApOworICAg
ICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50
ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIHBpeGVsRGF0
YVR5cGUsIDApOwogICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKICAgICAgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxf
QVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIsIDApOwogICAg
ICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCiAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9URVhU
VVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7CiAgICAgICAgICAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAg
ICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIpOwor
ICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICAgICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1NU
RU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwg
R0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAg
ICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAg
ICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9E
RVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7
CisgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkgeworICAgICAgICAgICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBU
SF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBH
TF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAg
ICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOwogICAgICAg
ICB9CiAgICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVC
VUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICBpZiAoZ2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURSkgewogICAgICAgICAvLyBGSVhNRTogY2xlYW51cAogICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIH0KQEAgLTEwOSw3ICsxMTAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIHJldHVybiBtdXN0UmVzdG9y
ZUZCTzsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2
ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8v
IEZJWE1FOiBXZSBkb24ndCBzdXBwb3J0IGFudGlhbGlhc2luZyB5ZXQuCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKQEAgLTExOCw3ICsxMTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QmIHJlY3QpCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0
YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICA6OmdsUmVuZGVyYnVm
ZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQpAQCAtMTM4LDQgKzEzOSwxMjcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVmZmVyKQor
ICAgICAgICBmYm8gPSBidWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAobV9hdHRycy5h
bnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworICAgIGlmIChmYm8gIT0gbV9i
b3VuZEZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZmJvKTsKKyAg
ICAgICAgbV9ib3VuZEZCTyA9IGZibzsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJl
bmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlYWRQaXhlbHModW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBkYXRhKTsKK30KKworR0Mz
RGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0g
dGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1l
bnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Cit9CisKK0dDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJh
bWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1l
YnVmZmVyKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlm
ICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZl
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKKyAgICAgICAg
YXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwg
ZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1l
YnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7
CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRl
cmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVh
ciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOworfQorCit9CiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBmOGY5MDUyLi4wNGZjZTUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcApAQCAtMjAsMTMgKzIwLDkgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNs
dWRlICJXZWJHTE9iamVjdC5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIK
LSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRFF0Lmgi
Ci0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgotI2VuZGlmCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNp
bmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC0xODMsOCArMTc5LDEzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKQogICAgICAgICByZXR1cm47Cisj
aWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpCisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9j
b250ZXh0LT5tX2Zibyk7CisjZWxzZQogICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJB
TUVCVUZGRVJfRVhULCBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8pOwogICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2NvbnRleHQtPm1fZmJvKTsKKyNl
bmRpZgogICAgIGdsQmxpdEZyYW1lYnVmZmVyKDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVu
dFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwg
R0xfTElORUFSKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fY29udGV4dC0+bV9ib3VuZEZCTyk7CiB9CkBAIC0yNTEsMTIgKzI1MiwxMSBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2Nv
bXBvc2l0b3JUZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotI2lmIGRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCisjaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpCiAgICAgLCBtX2RlcHRoQnVmZmVy
KDApCiAgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKLSNlbHNlCi0gICAgLCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlcigwKQogI2VuZGlmCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwg
bV9sYXllckNvbXBvc2l0ZWQoZmFsc2UpCiAgICAgLCBtX2ludGVybmFsQ29sb3JGb3JtYXQoMCkK
ICAgICAsIG1fYm91bmRGQk8oMCkKQEAgLTI2Nyw5ICsyNjcsNyBAQCBHcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiAgICAgLCBtX3ByaXZh
dGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93
KSkpCiB7Ci0jaWYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCiAgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7Ci0jZW5kaWYKIAogICAgIGlmICghbV9wcml2YXRlLT5tX3N1cmZhY2UpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJHcmFwaGljc0NvbnRleHQzRDogUUdMV2lkZ2V0IGluaXRpYWxpemF0aW9u
IGZhaWxlZC4iKTsKQEAgLTMxMSw3ICszMDksNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQog
ICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAgICBtX2JvdW5kRkJP
ID0gbV9mYm87Ci0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyNpZiBkZWZpbmVkIChRVF9P
UEVOR0xfRVNfMikKICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCiAgICAgICAgICAgICBnbEdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwogICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsKQpAQCAtMzIyLDcgKzMyMCw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAjZW5k
aWYKICAgICB9CiAKLSNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyNpZiAhZGVmaW5lZCAo
UVRfT1BFTkdMX0VTXzIpCiAgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCiAgICAgU2hCdWls
dEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwogICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMo
JkFOR0xFUmVzb3VyY2VzKTsKQEAgLTM1Nyw3ICszNTUsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6
fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0
dHJzLmRlcHRoKQogICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICB9IGVsc2UgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyNpZiBk
ZWZpbmVkIChRVF9PUEVOR0xfRVNfMikKICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCiAgICAg
ICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwogICAgICAg
ICBpZiAobV9hdHRycy5zdGVuY2lsKQpAQCAtNDAyLDExNTkgKzQwMCw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhl
bHMsIGludCBpbWFnCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi0jaWYgZGVmaW5lZChR
VF9PUEVOR0xfRVNfMikKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopCi17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIHByb3BlciBub24tcHJl
bXVsdGlwbGllZC1hbHBoYQotICAgIC8vIHN1cHBvcnQuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewot
ICAgIGlmICgod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhl
aWdodCkgfHwgKCFtX3ByaXZhdGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2N1cnJlbnRX
aWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gQ3JlYXRlIGNvbG9yIGJ1ZmZlcgotICAgIGdsQmlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAg
aWYgKG1fYXR0cnMuYWxwaGEpCi0gICAgICAgIGdsVGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgLyogbGV2ZWwgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHdp
ZHRoLCBoZWlnaHQsIC8qIGJvcmRlciAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIC8qIGRhdGEgKi8gMCk7Ci0gICAgZWxzZQot
ICAgICAgICBnbFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIC8qIGxl
dmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IsIHdpZHRoLCBoZWlnaHQsIC8qIGJvcmRl
ciAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgLyogZGF0YSAqLyAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwKTsKLQotICAgIC8vIENyZWF0ZSBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXJzLgotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgaWYgKG1fYXR0cnMuZGVw
dGgpIHsKLSAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgIH0KLSAgICBpZiAobV9h
dHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZ2xCaW5kUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgIH0KLSNl
bHNlCi0gICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAg
IGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLmRlcHRoICYmIG1fYXR0cnMu
c3RlbmNpbCkKLSAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgZWxzZSBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIGdsUmVuZGVyYnVm
ZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZWxzZSBpZiAo
bV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lO
REVYLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gQ29u
c3RydWN0IGNhbnZhcyBGQk8uCi0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0j
aWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICBpZiAobV9hdHRycy5zdGVuY2ls
KQotICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSNlbHNlCi0gICAg
aWYgKG1fYXR0cnMuZGVwdGggJiYgbV9hdHRycy5zdGVuY2lsKQotICAgICAgICBnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIGVsc2UgaWYgKG1fYXR0cnMu
ZGVwdGgpCi0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
IGVsc2UgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotCi0gICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpOwotICAgIGlm
IChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiR3JhcGhpY3NDb250ZXh0M0Q6IENhbnZhcyBGQk8gaW5pdGlhbGl6
YXRpb24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGNsZWFy
RmxhZ3MgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKLSAgICBpZiAobV9h
dHRycy5kZXB0aCkKLSAgICAgICAgY2xlYXJGbGFncyB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVDsKLSAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICBjbGVhckZs
YWdzIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0KLSAgICBnbENs
ZWFyKGNsZWFyRmxhZ3MpOwotICAgIGdsRmx1c2goKTsKLX0KLQotSW50U2l6ZSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7
Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xB
dHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVp
IG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQot
ewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwg
c2hhZGVycyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9ib3Vu
ZEZCTyA9IGJ1ZmZlciA/IGJ1ZmZlciA6IG1fZmJvOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKHRh
cmdldCwgbV9ib3VuZEZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJpbmRSZW5kZXJidWZmZXIodGFy
Z2V0LCByZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4
dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQs
IEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9u
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCbGVu
ZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0
aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVS
R0IsIG1vZGVBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhH
QzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdC
LCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJsZW5kRnVuY1NlcGFyYXRlKHNy
Y1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdD
M0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQnVmZmVy
RGF0YSh0YXJnZXQsIHNpemUsIC8qIGRhdGEgKi8gMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJ1ZmZlclN1YkRhdGEodGFy
Z2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQz
RDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJn
ZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYg
ciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQ2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIGdsQ2xlYXJE
ZXB0aGYoZGVwdGgpOwotI2Vsc2UKLSAgICBnbENsZWFyRGVwdGgoZGVwdGgpOwotI2VuZGlmCi19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29s
ZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDb21wcmVz
c2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbENvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
cHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bERlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5n
ZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBnbERlcHRoUmFuZ2Vm
KHpOZWFyLCB6RmFyKTsKLSNlbHNlCi0gICAgZ2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLSNl
bmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnBy
ZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsRW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsRmluaXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEZsdXNo
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNE
aW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRnJhbWVidWZm
ZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xGcm9udEZhY2UobW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdl
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdlbmVyYXRlTWlwbWFwKHRh
cmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQot
ewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbWF4TGVuZ3RoID0gMDsKLSAgICBnbEdldFByb2dyYW1p
dihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RI
LCAmbWF4TGVuZ3RoKTsKLQotICAgIEdMY2hhciogbmFtZSA9IChHTGNoYXIqKSBmYXN0TWFsbG9j
KG1heExlbmd0aCk7Ci0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXpl
ID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0KLSAgICBnbEdldEFjdGl2ZUF0dHJpYihwcm9n
cmFtLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsK
LQotICAgIGlmICghbmFtZUxlbmd0aCkgewotICAgICAgICBmYXN0RnJlZShuYW1lKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBu
YW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7
Ci0KLSAgICBmYXN0RnJlZShuYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dy
YW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IEdMaW50IG1heExlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1
aW50Pihwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNX01BWF9MRU5H
VEgsICZtYXhMZW5ndGgpOwotCi0gICAgR0xjaGFyKiBuYW1lID0gKEdMY2hhciopIGZhc3RNYWxs
b2MobWF4TGVuZ3RoKTsKLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNp
emUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLQotICAgIGdsR2V0QWN0aXZlVW5pZm9ybShz
dGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0pLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLQotICAgIGlmICghbmFtZUxlbmd0aCkgewotICAgICAg
ICBmYXN0RnJlZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlu
Zm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBl
OwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0KLSAgICBmYXN0RnJlZShuYW1lKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtX2F0dHJzOwot
fQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIGlmICht
X3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PEdDM0Rl
bnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7Ci0gICAgICAg
IEdDM0RlbnVtIGVyciA9ICppdGVyOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUo
aXRlcik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgZ2xHZXRTdHJpbmcobmFtZSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEhpbnQodGFy
Z2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsSXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17
Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzRnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAg
IHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gZ2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzUmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRl
cihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghdGV4
dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBnbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbExpbmVXaWR0aChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0p
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xQaXhlbFN0b3JlaShwYXJhbU5h
bWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChH
QzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAKLSAgICBp
ZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSB8fCBmb3JtYXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgIWRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCi0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgREVQVEhfU1RF
TkNJTDoKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIERFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICBpbnRlcm5h
bGZvcm1hdCA9IERFUFRIX0NPTVBPTkVOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0JB
NDoKLSAgICBjYXNlIFJHQjVfQTE6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gUkdCQTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0I1NjU6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0g
UkdCOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLSAgICBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Ri
b29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFNhbXBs
ZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
Y2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTY2lzc29yKHgsIHks
IHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3Vy
Y2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTdHJp
bmcgcHJlZml4ZWRTb3VyY2U7Ci0KLSNpZiBkZWZpbmVkIChRVF9PUEVOR0xfRVNfMikKLSAgICBw
cmVmaXhlZFNvdXJjZS5hcHBlbmQoInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIik7Ci0jZW5k
aWYKLQotICAgIHByZWZpeGVkU291cmNlLmFwcGVuZChzb3VyY2UpOwotCi0gICAgQ1N0cmluZyBz
b3VyY2VDUyA9IHByZWZpeGVkU291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBkYXRhID0g
c291cmNlQ1MuZGF0YSgpOwotICAgIGludCBsZW5ndGggPSBwcmVmaXhlZFNvdXJjZS5sZW5ndGgo
KTsKLSAgICBnbFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFkZXIsIC8qIGNvdW50ICovIDEsICZk
YXRhLCAmbGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZh
Y2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhH
QzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU3RlbmNp
bE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHZhbHVlKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0dDM0RzaXplaSBzaXplLCBDM0RmbG9hdCogYXJy
YXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMWZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2
Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFp
KGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYo
R0MzRGludCBsb2NhdGlvbiwgR0dDM0RzaXplaSBzaXplLCBDM0RpbnQqIGFycmF5KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgR0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xV
bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYx
LCBHQzNEaW50IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9y
bTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJy
YXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtM2l2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBH
QzNEaW50IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTRpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0g
ICAgQVNTRVJUKHByb2dyYW0pOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjJm
KGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0Mz
RGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0Mz
RGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwYXJhbU5hbWUsIEdD
M0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdl
dEJvb2xlYW52KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xH
ZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0RmxvYXR2
KHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0SW50ZWdlcnYo
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGlu
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRQcm9ncmFt
aXYocHJvZ3JhbSwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAgICBnbEdl
dFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0KLSAgICBHTGNoYXIqIGluZm8gPSAo
R0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0
dXJuICIiOwotCi0gICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXpl
LCBpbmZvKTsKLQotICAgIFN0cmluZyByZXN1bHQoaW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5mbyk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFNoYWRlcml2KHNo
YWRlciwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgZ2xHZXRTaGFkZXJp
dihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwot
Ci0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFz
dE1hbGxvYyhsZW5ndGgpOwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuICIiOwotCi0g
ICAgZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAg
ICBTdHJpbmcgcmVzdWx0KGluZm8pOwotICAgIGZhc3RGcmVlKGluZm8pOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGlj
c0NvbnRleHQzRDo6U0hBREVSX1NPVVJDRV9MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgR0xzaXpl
aSBzaXplID0gMDsKLSAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5n
dGgpOwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgZ2xHZXRTaGFk
ZXJTb3VyY2Uoc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKLQotICAgIFN0cmluZyByZXN1
bHQoaW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5mbyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1OYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRVbmlm
b3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGludCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICAK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19
Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAgICBnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2lu
dGVyKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKC8qIGNvdW50ICov
IDEsICZoYW5kbGUpOwotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgaGFuZGxlID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVy
cygvKiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1QbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0g
ICAgZ2xHZW5SZW5kZXJidWZmZXJzKC8qIGNvdW50ICovIDEsICZoYW5kbGUpOwotICAgIHJldHVy
biBoYW5kbGU7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBnbENyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmaGFuZGxl
KTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVm
ZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVm
ZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVm
ZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51
bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xheWVy
Q29tcG9zaXRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250
ZXh0Q2hhbmdlZCgpCi17Ci0gICAgLy8gRklYTUU6IEFueSBhY2NlbGVyYXRlZCBjb21wb3NpdG9y
IG5lZWRzIHRvIGJlIHRvbGQgdG8gcmUtcmVhZCBmcm9tIGhlcmUuCi0gICAgbV9sYXllckNvbXBv
c2l0ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3Np
dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLUV4dGVu
c2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICgh
bV9leHRlbnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5z
aW9uczNEUXQpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19Ci0jZW5kaWYKLQog
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145574</attachid>
            <date>2012-06-04 06:17:51 -0700</date>
            <delta_ts>2012-06-05 02:29:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>N9_webGL.diff</filename>
            <type>text/plain</type>
            <size>53685</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZDZmODEyOS4uZDIwZmIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNCAg
Um9sYW5kIFRha2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdlZC5odT4KKworICAgICAg
ICBbUXRdIFVzZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3aGVuIHVzaW5nIE9wZW5H
TCBFUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3
MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZWZp
bmVkIGEgZ2xvYmFsIE9wZW5nbCBFUyBtYWNybyB0byBjaGVjayBPcGVuR0wgRVMgb24gZXZlcnkg
cGxhdGZvcm1zLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTItMDYtMDEgIFhp
YW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUg
ZGVwZW5kZW5jeSBmcm9tIEltYWdlRGlmZiB0byBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDM4MjZhMzku
LjBkMWNkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTExNyw0ICsxMTE3LDExIEBACiAjZGVmaW5lIFdU
Rl9VU0VfWkxJQiAxCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPHFnbG9i
YWwuaD4KKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKSAmJiAhZGVmaW5lZChXVEZfVVNFX09Q
RU5HTF9FU18yKQorI2RlZmluZSBXVEZfVVNFX09QRU5HTF9FU18yIDEKKyNlbmRpZgorI2VuZGlm
CisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk5OTkwY2IuLmU2
OTY1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMi0wNi0wNCAgUm9sYW5kIFRh
a2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdlZC5odT4KKworICAgICAgICBbUXRdIFVz
ZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3aGVuIHVzaW5nIE9wZW5HTCBFUworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3MjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGdW5jdGlvbnMgYXJl
IHJlbW92ZWQgZnJvbSBHcmFwaGljc0NvbnRleHQzRFF0IHRoYXQgYWxyZWFkeSBpbXBsZW1lbnRl
ZAorICAgICAgICBpbiBHcmFwaGljc0NvbnRleHQzRENvbW1vbi4gTWFjcm9zIHRoYXQgbm90IHN1
cHBvcnRlZCBhdCBHTEVTIGhhdmUgYmVlbgorICAgICAgICBjaGFuZ2VkIHRvIHRoZWlyIGFwcHJv
cHJpYXRlIHBhaXIgdGhhdCBmb3VuZCBpbiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICAoZS5n
LiBHTF9GUkFNRUJVRkZFUl9FWFQgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKS4K
KyAgICAgICAgSXQgd2FzIG5lZWRlZCBiZWNhdXNlIE9wZW5HTEVTIGRvZXMgbm90IHN1cHBvcnQg
dGhlc2UgbWFjcm9zLgorICAgICAgICBFeHRlbnNpb25zM0RRdCBpcyByZW1vdmVkIGJlY2VhdXNl
IGl0IGhhcyBuZXZlciBiZWVuIHVzZWQuCisgICAgICAgIFNvbWUgZnVuY3Rpb25zIGhhdmUgYmVl
biBtb3ZlZCBmcm9uIEdyYXBoaWNzQ29udGV4dDNEQ29tbW9uIHRvICpPcGVuR0wKKyAgICAgICAg
YW5kICpPcGVuR0xFUyB0byBwcm92aWRlIHNwZWNpYWxpemF0aW9uLgorICAgICAgICBUaGUgIm1f
ZGVwdGhTdGVuY2lsQnVmZmVyIiBtZW1iZXIgaXMgYWRkZWQgdG8gUXQgcG9ydCBiZWNhdXNlIGl0
IHVzZXMKKyAgICAgICAgIm1fZGVwdGhTdGVuY2lsQnVmZmVyIiBsaWtlIHRoZSBvdGhlciBwbGF0
Zm9ybXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxpdE11bHRpc2FtcGxl
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDYtMDQgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogYWRkIHVua25vd24gc2l6ZSB0byB0aGUgbWVtb3J5IHBpZS1jaGFydCBsZWdlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCmluZGV4IGJjMDExN2IuLmQ3ZDcyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzkxMCwxOCArMzkx
MCwyMSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0V4dGVuc2lvbnMzRFF0LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCiAKICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUKIAotICAgICFjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewot
ICAgICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuaAorICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB8
IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CisgICAgICAgICFjb250YWlucyhRVF9D
T05GSUcsIG9wZW5nbGVzMikgeworICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAgICAgICB9CisKKyAgICAgICAgSEVBREVSUyArPSBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKIAogICAgICAgICBT
T1VSQ0VTICs9IFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0wuY3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFO
R0xFX0RJUiA9ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKaW5kZXggMTgwMDAxNi4uNzRkOGZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC05MzIsMjkgKzkzMiwy
MSBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VF
bnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CiAKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBp
bGVyOwotI2lmIFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIGZy
aWVuZCBjbGFzcyBFeHRlbnNpb25zM0RRdDsKLSAgICBPd25QdHI8RXh0ZW5zaW9uczNEUXQ+IG1f
ZXh0ZW5zaW9uczsKLSNlbHNlCisKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdM
OwogICAgIE93blB0cjxFeHRlbnNpb25zM0RPcGVuR0w+IG1fZXh0ZW5zaW9uczsKLSNlbmRpZgog
CiAgICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92
ZXJ0ZXhBcnJheTsKIAogICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVy
ZTsKICAgICBHQzNEdWludCBtX2ZibzsKLSNpZiBQTEFURk9STShRVCkgJiYgZGVmaW5lZChRVF9P
UEVOR0xfRVNfMikKLSAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVyOwotICAgIEdDM0R1aW50IG1f
c3RlbmNpbEJ1ZmZlcjsKLSNlbHNlCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogICAgIEdDM0R1aW50
IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCiAg
ICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7Ci0jZW5kaWYKKwogICAgIGJvb2wgbV9s
YXllckNvbXBvc2l0ZWQ7CiAgICAgR0MzRHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCBlODUxOWQ1Li4zZjQ3YjZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTI0NCw2ICsyNDQs
MTggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xh
bXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFu
Z2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRo
KEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bENsZWFyRGVwdGgoZGVwdGgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA4YzFl
N2U1Li40MjlmYzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKQEAgLTE2NywxMyArMTY3LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBy
ZXBhcmVUZXh0dXJlKCkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCiAgICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKIAotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICA6OmdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOwogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsIDApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2Jv
dW5kVGV4dHVyZTApOwogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7Ci0g
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8p
OworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX2JvdW5kRkJPKTsKICAgICA6OmdsRmluaXNoKCk7CiAgICAgbV9sYXllckNvbXBvc2l0
ZWQgPSB0cnVlOwogfQpAQCAtMTg4LDEyICsxODgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxz
U2kKICAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CiAgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKTsKICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CiAgICAgICAgICAgICBtdXN0
UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAg
ICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CiAK
ICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
QEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkKICAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdM
X1RSVUUsIEdMX1RSVUUpOwogICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7CiAgICAgICAgIDo6Z2xH
ZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgOjpn
bENsZWFyRGVwdGgoMSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKDEp
OwogICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNr
KTsKICAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKICAgICAgICAgY2xlYXJNYXNrIHw9
IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgOjpnbENsZWFyQ29s
b3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xv
clszXSk7CiAgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29s
b3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwogICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7Ci0gICAg
ICAgIDo6Z2xDbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKICAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1h
c2spOwogICAgIH0KICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CkBAIC0yODgsNyArMjg4LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7CiAKICAgICBpZiAobXVzdFJlc3RvcmVG
Qk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2JvdW5kRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOwogCiAgICAgOjpnbEZsdXNoKCk7CiB9CkBA
IC00MjIsMTIgKzQyMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRm
aWVsZCBtYXNrKQogICAgIDo6Z2xDbGVhcihtYXNrKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKLX0KLQogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKQEAgLTQ5NywxMSArNDkxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CiAgICAgfQogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKQEAgLTUwOSwxMSArNTAzLDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGluCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewogICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0KICAgICA6OmdsQ29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCkBAIC01MzQsMTIgKzUy
OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFn
KQogICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwpAQCAtODEwLDEyICs3OTgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICA6Omds
Rmx1c2goKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nhcnko
SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgICAg
IDo6Z2xGbHVzaCgpOwogICAgIH0KICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4
IGI1NjU3YWQuLjk5OWJiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKIAotI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIApAQCAt
NzIsMTIgKzcyLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0
IEludFNpemUmIHNpemUpCiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlm
IChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CiAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKICAgICB9CiAKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlKTsKICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBt
X2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBwaXhl
bERhdGFUeXBlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSwgMCk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwogCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwogICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29s
b3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwpAQCAtOTAsNyArOTAsNyBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAg
ICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4K
ICAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKICAgICAgICAg
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9ERVBUSF9T
VEVOQ0lMX09FUywgd2lkdGgsIGhlaWdodCwgMCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsIEdMX1VO
U0lHTkVEX0lOVF8yNF84X09FUywgMCk7CisgICAgICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNv
bG9yRm9ybWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwpCiAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyLCAwKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQpAQCAtOTgsMTkg
Kzk4LDE5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0g
ICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVG
RkVSX0VYVCwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZm
ZXIpOworICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRB
Q0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAg
ICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAg
ICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCAwKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCiAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQpAQCAtMTU2LDYgKzE1NiwxOCBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhSYW5nZWYoek5lYXIsIHpG
YXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYg
ZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyRGVwdGhm
KGRlcHRoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBhMDMzZmQ5Li40OTc4MzYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcApAQCAtMjIsMTEgKzIyLDcgQEAKIAogI2luY2x1ZGUgIldlYkdM
T2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2lmIGRlZmlu
ZWQoUVRfT1BFTkdMX0VTXzIpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEUXQuaCIKLSNlbHNlCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCi0jZW5kaWYKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKICNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgpAQCAtMjM3LDggKzIzMywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIoKSBjb25zdAogewogICAgIGlm
ICghbV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlhcykKICAgICAgICAgcmV0dXJuOworI2lmICFk
ZWZpbmVkIChRVF9PUEVOR0xfRVNfMikKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZS
QU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPKTsKICAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX2Zibyk7Cisj
ZW5kaWYKICAgICBnbEJsaXRGcmFtZWJ1ZmZlcigwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdp
ZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQs
IEdMX0xJTkVBUik7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fYm91bmRGQk8pOwogfQpAQCAtMzIxLDkgKzMxOSw4IEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKICAg
ICAsIG1fZGVwdGhCdWZmZXIoMCkKICAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQotI2Vsc2UKLSAg
ICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCiAjZW5kaWYKKyAgICAsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKDApCiAgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKICAgICAsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCgwKQogICAgICwgbV9ib3VuZEZCTygwKQpAQCAtMzM0LDkgKzMzMSw3IEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIo
MCkKICAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
KHRoaXMsIGhvc3RXaW5kb3cpKSkKIHsKLSNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKICAg
ICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSNlbmRpZgogCiAgICAgaWYgKCFtX3ByaXZhdGUtPm1f
c3VyZmFjZSkgewogICAgICAgICBMT0dfRVJST1IoIkdyYXBoaWNzQ29udGV4dDNEOiBRR0xXaWRn
ZXQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwpAQCAtMzgzLDEwICszNzgsOSBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKICAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbHNlCisjZW5kaWYKICAg
ICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAgICAgICAg
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKICAg
ICB9CiAKICAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KQEAgLTQzMiw5ICs0MjYsOCBAQCBH
cmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICAgICAgICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CiAgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwpCiAgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNp
bEJ1ZmZlcik7Ci0jZWxzZQotICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKICNlbmRpZgorICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTQ4MSwxMTkyICs0NzQs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0
IEludFNpemUmIHNpemUpCiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIp
Ci1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKQotewotICAgIC8vIEZJWE1FOiBUaGlz
IG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGZvciBwcm9wZXIgbm9uLXByZW11bHRpcGxpZWQtYWxw
aGEKLSAgICAvLyBzdXBwb3J0LgotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAoKHdpZHRo
ID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpIHx8ICghbV9w
cml2YXRlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsK
LSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIC8vIENyZWF0ZSBjb2xvciBidWZmZXIKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGlmIChtX2F0dHJzLmFs
cGhhKQotICAgICAgICBnbFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IC8qIGxldmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAv
KiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCAvKiBkYXRhICovIDApOwotICAgIGVsc2UKLSAgICAgICAgZ2xUZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAvKiBsZXZlbCAqLyAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIC8qIGRh
dGEgKi8gMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVycy4KLSNpZiBk
ZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAg
IGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2Rl
cHRoQnVmZmVyKTsKLSAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkg
ewotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0lOREVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0jZWxzZQotICAgIGlmICht
X2F0dHJzLmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBnbEJpbmRSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCAmJiBtX2F0dHJzLnN0ZW5jaWwpCi0gICAg
ICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgR0xfREVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGVsc2Ug
aWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGVsc2UgaWYgKG1fYXR0cnMuc3RlbmNp
bCkKLSAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCAwKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIENvbnN0cnVjdCBjYW52YXMg
RkJPLgotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotI2lmIGRlZmluZWQoUVRf
T1BFTkdMX0VTXzIpCi0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgIGdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0jZWxzZQotICAgIGlmIChtX2F0dHJzLmRl
cHRoICYmIG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICBlbHNlIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAg
ICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICBlbHNlIGlmIChtX2F0
dHJzLnN0ZW5jaWwpCi0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0jZW5kaWYKLQotICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICBMT0dfRVJS
T1IoIkdyYXBoaWNzQ29udGV4dDNEOiBDYW52YXMgRkJPIGluaXRpYWxpemF0aW9uIGZhaWxlZC4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjbGVhckZsYWdzID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0g
ICAgICAgIGNsZWFyRmxhZ3MgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7
Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgY2xlYXJGbGFncyB8PSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotCi0gICAgZ2xDbGVhcihjbGVhckZsYWdz
KTsKLSAgICBnbEZsdXNoKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChz
aGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQXR0YWNoU2hhZGVyKHBy
b2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVk
U2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0Mz
RHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAoIXBy
b2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYm91bmRGQk8gPSBidWZmZXIg
PyBidWZmZXIgOiBtX2ZibzsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1fYm91bmRG
Qk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVm
ZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdy
ZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmxlbmRFcXVhdGlvbihtb2Rl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rv
ciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0
UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBz
aXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lk
KiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRy
IG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBz
aXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIsIEdDM0RjbGFtcGYg
ZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbENsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsK
LSNlbHNlCi0gICAgZ2xDbGVhckRlcHRoKGRlcHRoKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0Mz
RGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1h
Z2VTaXplLCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IGltYWdlU2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2Uo
R0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEN1bGxG
YWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVu
dW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlcHRoRnVuYyhm
dW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFu
IGZsYWcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZXB0aE1hc2soZmxh
Zyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6
TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lm
IGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgZ2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7
Ci0jZWxzZQotICAgIGdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGV0YWNo
U2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRp
c2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
RGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERyYXdB
cnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xGbHVzaCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKHRh
cmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXBy
b2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIEdMaW50IG1heExlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7
Ci0KLSAgICBHTGNoYXIqIG5hbWUgPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhtYXhMZW5ndGgpOwot
ICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xl
bnVtIHR5cGUgPSAwOwotCi0gICAgZ2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1h
eExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0KLSAgICBpZiAoIW5h
bWVMZW5ndGgpIHsKLSAgICAgICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0g
ICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotCi0gICAgZmFzdEZy
ZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBtYXhMZW5n
dGggPSAwOwotICAgIGdsR2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbSks
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TGVuZ3Ro
KTsKLQotICAgIEdMY2hhciogbmFtZSA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKG1heExlbmd0aCk7
Ci0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBH
TGVudW0gdHlwZSA9IDA7Ci0KLSAgICBnbEdldEFjdGl2ZVVuaWZvcm0oc3RhdGljX2Nhc3Q8R0x1
aW50Pihwcm9ncmFtKSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlw
ZSwgbmFtZSk7Ci0KLSAgICBpZiAoIW5hbWVMZW5ndGgpIHsKLSAgICAgICAgZmFzdEZyZWUobmFt
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmZvLm5hbWUgPSBTdHJp
bmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNp
emUgPSBzaXplOwotCi0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0K
LQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENv
bnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9hdHRyczsKLX0KLQotR0MzRGVudW0g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9zeW50aGV0aWNFcnJv
cnMuc2l6ZSgpID4gMCkgewotICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAgICBHQzNEZW51bSBlcnIg
PSAqaXRlcjsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwotICAgICAg
ICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3Ry
aW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIFN0cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzQnVmZmVy
KGJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBn
bElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNG
cmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZnJh
bWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0K
LQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNQcm9n
cmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5k
ZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5k
ZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwot
fQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1NoYWRl
cihzaGFkZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAg
IHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gZ2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xMaW5lV2lkdGgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4
ZWxTdG9yZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsUGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCi0gICAgaWYgKHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGdsUmVhZFBpeGVscyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotI2lmICFkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIHN3
aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICBjYXNlIERFUFRIX1NURU5DSUw6Ci0gICAgICAg
IGludGVybmFsZm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMODsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBERVBU
SF9DT01QT05FTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdCQTQ6Ci0gICAgY2FzZSBS
R0I1X0ExOgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IFJHQkE7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUkdCNTY1OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IFJHQjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTYW1wbGVDb3ZlcmFnZSh2YWx1
ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU3RyaW5nIHByZWZpeGVkU291
cmNlOwotCi0jaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpCi0gICAgcHJlZml4ZWRTb3VyY2Uu
YXBwZW5kKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIpOwotI2VuZGlmCi0KLSAgICBwcmVm
aXhlZFNvdXJjZS5hcHBlbmQoc291cmNlKTsKLQotICAgIENTdHJpbmcgc291cmNlQ1MgPSBwcmVm
aXhlZFNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogZGF0YSA9IHNvdXJjZUNTLmRhdGEo
KTsKLSAgICBpbnQgbGVuZ3RoID0gcHJlZml4ZWRTb3VyY2UubGVuZ3RoKCk7Ci0gICAgZ2xTaGFk
ZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLCAvKiBjb3VudCAqLyAxLCAmZGF0YSwgJmxlbmd0aCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMs
IEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBm
dW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxNYXNrKG1hc2spOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVt
IGZhY2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVt
IHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBH
QzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5j
aWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJh
bU5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xZihsb2Nh
dGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZv
cm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
LCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjAp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRp
b24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgdjAsIEdDM0RpbnQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xV
bmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTJpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zaShsb2NhdGlvbiwg
djAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MiwgR0MzRGludCB2MykKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNE
ZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9n
cmFtKTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZhbGlkYXRlUHJv
Z3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjFm
dihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYx
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCog
YXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxv
YXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0
PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVhbiogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRCb29sZWFudihwYXJh
bU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEZsb2F0dihwYXJhbU5hbWUsIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBh
dHRhY2htZW50LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEludGVnZXJ2KHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBh
cmFtTmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJv
Z3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAg
ICBHTHNpemVpIHNpemUgPSAwOwotCi0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RN
YWxsb2MobGVuZ3RoKTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAg
IGdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAg
ICBTdHJpbmcgcmVzdWx0KGluZm8pOwotICAgIGZhc3RGcmVlKGluZm8pOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFt
ZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9M
b2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFw
aGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIEdMc2l6ZWkg
c2l6ZSA9IDA7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3Ro
KTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGdsR2V0U2hhZGVy
SW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgU3RyaW5nIHJlc3Vs
dChpbmZvKTsKLSAgICBmYXN0RnJlZShpbmZvKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51
bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0Mz
RGludCogcHJlY2lzaW9uKQotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZXRhcmdl
dGVkIGF0IHRoZSByZWFsIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgpCi0gICAgLy8gY2FsbCBv
biB0cnVlIEVTIDIuMCBoYXJkd2FyZS4KLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7Ci0g
ICAgQVNTRVJUKHJhbmdlKTsKLSAgICBBU1NFUlQocHJlY2lzaW9uKTsKLQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
RURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgotICAgICAg
ICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBhIDMyLWJpdCB0d29zLWNvbXBsZW1lbnQgaW50ZWdl
ciBmb3JtYXQuCi0gICAgICAgIHJhbmdlWzBdID0gMzE7Ci0gICAgICAgIHJhbmdlWzFdID0gMzA7
Ci0gICAgICAgIHByZWNpc2lvblswXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
RURJVU1fRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKLSAg
ICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYW4gSUVFRSBzaW5nbGUtcHJlY2lzaW9uIGZs
b2F0aW5nLXBvaW50IGZvcm1hdC4KLSAgICAgICAgcmFuZ2VbMF0gPSAxMjc7Ci0gICAgICAgIHJh
bmdlWzFdID0gMTI3OwotICAgICAgICBwcmVjaXNpb25bMF0gPSAyMzsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3Vy
Y2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFw
aGljc0NvbnRleHQzRDo6U0hBREVSX1NPVVJDRV9MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgR0xz
aXplaSBzaXplID0gMDsKLSAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhs
ZW5ndGgpOwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgZ2xHZXRT
aGFkZXJTb3VyY2Uoc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKLQotICAgIFN0cmluZyBy
ZXN1bHQoaW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5mbyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1O
YW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcml2KHRh
cmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRV
bmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGlu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAg
ICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFt
TmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7
Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAgICBnbEdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihw
b2ludGVyKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2Zm
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKC8qIGNvdW50
ICovIDEsICZoYW5kbGUpOwotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgaGFuZGxlID0gMDsKLSAgICBnbEdlbkZyYW1lYnVm
ZmVycygvKiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19
Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7
Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzKC8qIGNvdW50ICovIDEsICZoYW5kbGUpOwotICAgIHJl
dHVybiBoYW5kbGU7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmaGFu
ZGxlKTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1l
YnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJhbWVi
dWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVy
YnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVy
YnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1
cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNE
ZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xh
eWVyQ29tcG9zaXRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtD
b250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgLy8gRklYTUU6IEFueSBhY2NlbGVyYXRlZCBjb21wb3Np
dG9yIG5lZWRzIHRvIGJlIHRvbGQgdG8gcmUtcmVhZCBmcm9tIGhlcmUuCi0gICAgbV9sYXllckNv
bXBvc2l0ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21w
b3NpdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLUV4
dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlm
ICghbV9leHRlbnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0
ZW5zaW9uczNEUXQpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19Ci0jZW5kaWYK
LQogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwK
</data>
<flag name="review"
          id="152708"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="152709"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145737</attachid>
            <date>2012-06-05 02:29:56 -0700</date>
            <delta_ts>2012-06-05 07:56:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>2012_06_05_N9_WEbGL.diff</filename>
            <type>text/plain</type>
            <size>55161</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMzFlOTEzNi4uNDVkOTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNSAg
Um9sYW5kIFRha2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdlZC5odT4KKworICAgICAg
ICBbUXRdIFVzZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3aGVuIHVzaW5nIE9wZW5H
TCBFUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3
MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZWZp
bmVkIGEgZ2xvYmFsIE9wZW5nbCBFUyBtYWNybyB0byBjaGVjayBPcGVuR0wgRVMgb24gZXZlcnkg
cGxhdGZvcm1zLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTItMDYtMDQgIFRh
a2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJT
b2NrZXRdIFNlbmQgcmVxdWlyZXMgc3VwZXIgbGluZWFyIHRpbWUgYWdhaW5zdCBkYXRhIHNpemUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCmluZGV4IDM4MjZhMzkuLjBkMWNkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTExNyw0
ICsxMTE3LDExIEBACiAjZGVmaW5lIFdURl9VU0VfWkxJQiAxCiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18y
KSAmJiAhZGVmaW5lZChXVEZfVVNFX09QRU5HTF9FU18yKQorI2RlZmluZSBXVEZfVVNFX09QRU5H
TF9FU18yIDEKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGMyZDczMGEuLjAwNDQxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBA
QAorMjAxMi0wNi0wNSAgUm9sYW5kIFRha2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdl
ZC5odT4KKworICAgICAgICBbUXRdIFVzZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3
aGVuIHVzaW5nIE9wZW5HTCBFUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGdW5jdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSBHcmFwaGljc0NvbnRleHQzRFF0
IHRoYXQgYWxyZWFkeSBpbXBsZW1lbnRlZAorICAgICAgICBpbiBHcmFwaGljc0NvbnRleHQzRENv
bW1vbi4gTWFjcm9zIHRoYXQgbm90IHN1cHBvcnRlZCBhdCBHTEVTIGhhdmUgYmVlbgorICAgICAg
ICBjaGFuZ2VkIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHBhaXIgdGhhdCBmb3VuZCBpbiBHcmFwaGlj
c0NvbnRleHQzRAorICAgICAgICAoZS5nLiBHTF9GUkFNRUJVRkZFUl9FWFQgdG8gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSKS4KKyAgICAgICAgSXQgd2FzIG5lZWRlZCBiZWNhdXNlIE9w
ZW5HTEVTIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgbWFjcm9zLgorICAgICAgICBFeHRlbnNpb25z
M0RRdCBpcyByZW1vdmVkIGJlY2VhdXNlIGl0IGhhcyBuZXZlciBiZWVuIHVzZWQuCisgICAgICAg
IFNvbWUgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb3ZlZCBmcm9uIEdyYXBoaWNzQ29udGV4dDNEQ29t
bW9uIHRvICpPcGVuR0wKKyAgICAgICAgYW5kICpPcGVuR0xFUyB0byBwcm92aWRlIHNwZWNpYWxp
emF0aW9uLgorICAgICAgICBUaGUgIm1fZGVwdGhTdGVuY2lsQnVmZmVyIiBtZW1iZXIgaXMgYWRk
ZWQgdG8gUXQgcG9ydCBiZWNhdXNlIGl0IHVzZXMKKyAgICAgICAgIm1fZGVwdGhTdGVuY2lsQnVm
ZmVyIiBsaWtlIHRoZSBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRl
eFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQ
aXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlRkJPcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZSk6CisKIDIwMTItMDYtMDUgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gSW1wbGVtZW50IGZvbnQgc2hhcGluZyB3aXRoIGZvbnQt
ZmVhdHVyZS1zZXR0aW5ncyBvbiBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGJjMDExN2IuLmQ3ZDcyNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQpAQCAtMzkxMCwxOCArMzkxMCwyMSBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfV0VCR0w9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1ZmZlclF0LmNw
cCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCiAKICAg
ICBJTkNMVURFUEFUSCArPSAkJFBXRC9wbGF0Zm9ybS9ncmFwaGljcy9ncHUKIAotICAgICFjb250
YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICBIRUFERVJTICs9IFwKLSAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAorICAg
IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3Blbmds
ZXMyKSB7CisgICAgICAgICFjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgeworICAgICAg
ICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTT1VSQ0VTICs9IHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICB9CisKKyAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKLSAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
XAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9ICQkcmVwbGFjZShQV0QsICJX
ZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMTgwMDAxNi4uN2JiOGFh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC0zOTQsNiArMzk0LDcgQEAgcHVibGljOgogICAgICAgICBTVEVOQ0lM
X0lOREVYID0gMHgxOTAxLAogICAgICAgICBTVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OCwKICAgICAg
ICAgREVQVEhfU1RFTkNJTCA9IDB4ODRGOSwKKyAgICAgICAgVU5TSUdORURfSU5UXzI0XzggPSAw
eDg0RkEsCiAgICAgICAgIFJFTkRFUkJVRkZFUl9XSURUSCA9IDB4OEQ0MiwKICAgICAgICAgUkVO
REVSQlVGRkVSX0hFSUdIVCA9IDB4OEQ0MywKICAgICAgICAgUkVOREVSQlVGRkVSX0lOVEVSTkFM
X0ZPUk1BVCA9IDB4OEQ0NCwKQEAgLTkzMiwyOSArOTMzLDIxIEBAIHB1YmxpYzoKICAgICBIYXNo
TWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1h
cDsKIAogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7Ci0jaWYgUExBVEZPUk0oUVQp
ICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMz
RFF0OwotICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25zOwotI2Vsc2UKKwog
ICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAgICAgT3duUHRyPEV4dGVuc2lv
bnMzRE9wZW5HTD4gbV9leHRlbnNpb25zOwotI2VuZGlmCiAKICAgICBBdHRyaWJ1dGVzIG1fYXR0
cnM7CiAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCiAgICAgR0Mz
RHVpbnQgbV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlOwogICAgIEdDM0R1aW50IG1fZmJv
OwotI2lmIFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIEdDM0R1
aW50IG1fZGVwdGhCdWZmZXI7Ci0gICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwotI2Vsc2UK
ICNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAgR0MzRHVpbnQgbV9kZXB0aEJ1ZmZlcjsKICAgICBH
QzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7CiAjZW5kaWYKICAgICBHQzNEdWludCBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcjsKLSNlbmRpZgorCiAgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZDsKICAgICBH
QzNEdWludCBtX2ludGVybmFsQ29sb3JGb3JtYXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCmluZGV4IGU4NTE5ZDUuLjNmNDdiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcApAQCAtMjQ0LDYgKzI0NCwxOCBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Cit9
CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDhjMWU3ZTUuLjQyOWZjNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTY3LDEzICsx
NjcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeSgpOwogCi0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsK
ICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7
CiAgICAgOjpnbENvcHlUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCk7CiAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fYm91bmRUZXh0dXJlMCk7CiAgICAgOjpn
bEFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlKTsKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOwogICAg
IDo6Z2xGaW5pc2goKTsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CiB9CkBAIC0xODgs
MTIgKzE4OCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0
cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaQogICAgIGJvb2wgbXVzdFJlc3Rv
cmVGQk8gPSBmYWxzZTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKICAgICAgICAgcmVz
b2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fYm91
bmRGQk8gIT0gbV9mYm8pIHsKICAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAg
ICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zi
byk7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTEsNyArMjEx
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWdu
ZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2kKICAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdM
X1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAogICAgIGlmIChtdXN0UmVzdG9yZUZC
TykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1f
Ym91bmRGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAg
aWYgKG1fYXR0cnMuZGVwdGgpIHsKICAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVB
Ul9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoMSk7CiAgICAgICAgIDo6Z2xHZXRCb29s
ZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwogICAgICAgICA6OmdsRGVwdGhN
YXNrKEdMX1RSVUUpOwogICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsK
QEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkKICAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVh
ckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKICAgICA6OmdsQ29sb3JN
YXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1sz
XSk7CiAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgOjpnbENsZWFyRGVwdGgoY2xl
YXJEZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKGNsZWFyRGVw
dGgpOwogICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7CiAgICAgfQogICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpIHsKQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgOjpnbERpc2FibGUo
R0xfRElUSEVSKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9i
b3VuZEZCTyk7CiAKICAgICA6OmdsRmx1c2goKTsKIH0KQEAgLTQyMiwxMiArNDIyLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiAgICAgOjpnbENs
ZWFyKG1hc2spOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0Rj
bGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFy
RGVwdGgoZGVwdGgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwo
R0MzRGludCBzKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtNDk3LDExICs0OTEs
MTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pIHsKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICB9CiAgICAgOjpnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQpAQCAtNTA5LDExICs1MDMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CiAgICAgfQogICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Vs
bEZhY2UoR0MzRGVudW0gbW9kZSkKQEAgLTUzNCwxMiArNTI4LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCiAgICAgOjpnbERlcHRoTWFzayhm
bGFnKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBm
IHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CkBAIC04MTAsMTIgKzc5OCwxMiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaQogICAgIDo6Z2xGbHVzaCgpOwogICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgOjpnbEZsdXNoKCk7CiAgICAgfQog
ICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0
YSk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggYjU2NTdhZC4uYjFiZDFkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtMzUsNyArMzUsNyBA
QAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCi0j
aWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgogCkBAIC03MiwxMiArNzIsMTIgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBi
b29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CiAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8p
IHsKICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAg
IH0KIAogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAg
IDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDApOwotICAgIDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsRnJh
bWVidWZmZXJUZXh0dXJlMkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CiAKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9y
VGV4dHVyZSk7CiAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5h
bENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgMCk7CkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hh
cGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0
aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgogICAgICAgICBpZiAoc3VwcG9ydFBh
Y2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikgewogICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VTLCB3aWR0aCwgaGVp
Z2h0LCAwLCBHTF9ERVBUSF9TVEVOQ0lMX09FUywgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTLCAw
KTsKKyAgICAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84
LCAwKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCiAgICAgICAgICAgICAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFD
SE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKICAgICAgICAg
ICAgIGlmIChtX2F0dHJzLmRlcHRoKQpAQCAtOTgsMTkgKzk4LDE5IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgICAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9zdGVuY2lsQnVmZmVyKTsKLSAg
ICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAg
OjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9zdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIDo6
Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAg
ICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBH
TF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgOjpn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhf
QVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAg
ICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJi
dWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRI
X0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IDApOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsK
KyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgfQpAQCAtMTU2LDYgKzE1NiwxOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIHJl
dHVybiB0cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0Rj
bGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRGVwdGhSYW5nZWYoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcAppbmRleCBhMDMzZmQ5Li5iYjJlMzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAt
MjIsMTEgKzIyLDcgQEAKIAogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0jaW5j
bHVkZSAiRXh0ZW5zaW9uczNEUXQuaCIKLSNlbHNlCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMLmgiCi0jZW5kaWYKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJH
cmFwaGljc1N1cmZhY2UuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgpAQCAtOTQs
NyArOTAsNyBAQCBwdWJsaWM6CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21w
bGlhbnQoKSBjb25zdAogewotI2lmIGRlZmluZWQgKFFUX09QRU5HTF9FU18yKQorI2lmIFVTRShP
UEVOR0xfRVNfMikKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjM3LDggKzIzMywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxpdE11
bHRpc2FtcGxlRnJhbWVidWZmZXIoKSBjb25zdAogewogICAgIGlmICghbV9jb250ZXh0LT5tX2F0
dHJzLmFudGlhbGlhcykKICAgICAgICAgcmV0dXJuOworI2lmICFVU0UoT1BFTkdMX0VTXzIpCiAg
ICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fY29udGV4dC0+
bV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJV
RkZFUl9FWFQsIG1fY29udGV4dC0+bV9mYm8pOworI2VuZGlmCiAgICAgZ2xCbGl0RnJhbWVidWZm
ZXIoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRI
ZWlnaHQsIDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJy
ZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX2Jv
dW5kRkJPKTsKIH0KQEAgLTMxOCwxMiArMzE2LDExIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdp
CiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKICAgICAs
IG1fZmJvKDApCi0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyNpZiBVU0UoT1BFTkdMX0VT
XzIpCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCiAgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKLSNl
bHNlCi0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogI2VuZGlmCisgICAgLCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9sYXllckNvbXBvc2l0ZWQoZmFsc2UpCiAgICAgLCBt
X2ludGVybmFsQ29sb3JGb3JtYXQoMCkKICAgICAsIG1fYm91bmRGQk8oMCkKQEAgLTMzNCw5ICsz
MzEsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKDApCiAgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZSh0aGlzLCBob3N0V2luZG93KSkpCiB7Ci0jaWYgIWRlZmluZWQoUVRfT1BFTkdMX0VT
XzIpCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0jZW5kaWYKIAogICAgIGlmICghbV9wcml2
YXRlLT5tX3N1cmZhY2UpIHsKICAgICAgICAgTE9HX0VSUk9SKCJHcmFwaGljc0NvbnRleHQzRDog
UUdMV2lkZ2V0IGluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKQEAgLTM3OCwxNSArMzczLDE0IEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KICAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CiAgICAgICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKLSNpZiBkZWZpbmVkKFFUX09QRU5H
TF9FU18yKQorI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgp
CiAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwogICAg
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQogICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2Vsc2UKKyNlbmRpZgogICAgICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCiAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgogICAgIH0KIAogICAgIC8vIEFO
R0xFIGluaXRpYWxpemF0aW9uLgpAQCAtNDA1LDcgKzM5OSw3IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywg
SG9zdFdpCiAgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKIAotI2lmICFkZWZpbmVkKFFUX09Q
RU5HTF9FU18yKQorI2lmICFVU0UoT1BFTkdMX0VTXzIpCiAgICAgZ2xFbmFibGUoR0xfUE9JTlRf
U1BSSVRFKTsKICAgICBnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICNl
bmRpZgpAQCAtNDI3LDE0ICs0MjEsMTMgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCgpCiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkK
ICAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcik7CiAgICAgfSBlbHNlIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgewotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisjaWYgVVNFKE9QRU5HTF9F
U18yKQogICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKICAgICAgICAgICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwpCiAgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZl
cik7Ci0jZWxzZQotICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKICNlbmRpZgorICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTQ4MSwxMTkyICs0NzQsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNp
emUmIHNpemUpCiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi1QYXNz
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKQotewotICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRz
IHRvIGJlIGltcGxlbWVudGVkIGZvciBwcm9wZXIgbm9uLXByZW11bHRpcGxpZWQtYWxwaGEKLSAg
ICAvLyBzdXBwb3J0LgotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAoKHdpZHRoID09IG1f
Y3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpIHx8ICghbV9wcml2YXRl
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBt
X2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIC8vIENyZWF0ZSBjb2xvciBidWZmZXIKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGlmIChtX2F0dHJzLmFscGhhKQot
ICAgICAgICBnbFRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIC8qIGxl
dmVsICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3Jk
ZXIgKi8gMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCAvKiBkYXRhICovIDApOwotICAgIGVsc2UKLSAgICAgICAgZ2xUZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAvKiBsZXZlbCAqLyAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCLCB3aWR0aCwgaGVpZ2h0LCAvKiBib3JkZXIgKi8gMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIC8qIGRhdGEgKi8g
MCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7
Ci0KLSAgICAvLyBDcmVhdGUgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVycy4KLSNpZiBkZWZpbmVk
KFFUX09QRU5HTF9FU18yKQotICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAgIGdsQmlu
ZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVm
ZmVyKTsKLSAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAg
ICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
bV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVY
OCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Ci0jZWxzZQotICAgIGlmIChtX2F0dHJz
LmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICBpZiAobV9hdHRycy5kZXB0aCAmJiBtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAg
ICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
R0xfREVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGVsc2UgaWYgKG1f
YXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGVsc2UgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAg
ICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCAwKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIENvbnN0cnVjdCBjYW52YXMgRkJPLgot
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotI2lmIGRlZmluZWQoUVRfT1BFTkdM
X0VTXzIpCi0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9k
ZXB0aEJ1ZmZlcik7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0jZWxzZQotICAgIGlmIChtX2F0dHJzLmRlcHRoICYm
IG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKLSAgICBlbHNlIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICBlbHNlIGlmIChtX2F0dHJzLnN0
ZW5jaWwpCi0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0j
ZW5kaWYKLQotICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICBMT0dfRVJST1IoIkdy
YXBoaWNzQ29udGV4dDNEOiBDYW52YXMgRkJPIGluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjbGVhckZsYWdzID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAg
IGNsZWFyRmxhZ3MgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgY2xlYXJGbGFncyB8PSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotCi0gICAgZ2xDbGVhcihjbGVhckZsYWdzKTsKLSAg
ICBnbEZsdXNoKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0
aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW0s
IHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVy
cyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVp
KiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0p
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJpbmRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmluZEJ1
ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYm91bmRGQk8gPSBidWZmZXIgPyBidWZm
ZXIgOiBtX2ZibzsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG1fYm91bmRGQk8pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBH
QzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVt
IG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0Mz
RGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJsZW5k
RnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBH
QzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAv
KiBkYXRhICovIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
LCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJ1
ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBk
YXRhKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0Mz
RGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbENsZWFyKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRl
cHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYg
ZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBnbENsZWFyRGVwdGhmKGRlcHRoKTsKLSNlbHNl
Ci0gICAgZ2xDbGVhckRlcHRoKGRlcHRoKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xl
YW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQot
ewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
Q29tcGlsZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21w
cmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXpl
LCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdl
U2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQ29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xDb3B5
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVu
dW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEN1bGxGYWNlKG1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVu
YykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlcHRoRnVuYyhmdW5jKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZXB0aE1hc2soZmxhZyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwg
R0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmIGRlZmlu
ZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgZ2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7Ci0jZWxz
ZQotICAgIGdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGV0YWNoU2hhZGVy
KHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUo
R0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGlzYWJs
ZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERyYXdBcnJheXMo
bW9kZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEcmF3
RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0p
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdM
aW50IG1heExlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7Ci0KLSAg
ICBHTGNoYXIqIG5hbWUgPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhtYXhMZW5ndGgpOwotICAgIEdM
c2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5
cGUgPSAwOwotCi0gICAgZ2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heExlbmd0
aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0KLSAgICBpZiAoIW5hbWVMZW5n
dGgpIHsKLSAgICAgICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5m
by50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotCi0gICAgZmFzdEZyZWUobmFt
ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBtYXhMZW5ndGggPSAw
OwotICAgIGdsR2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbSksIEdyYXBo
aWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4TGVuZ3RoKTsKLQot
ICAgIEdMY2hhciogbmFtZSA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKG1heExlbmd0aCk7Ci0gICAg
R0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0g
dHlwZSA9IDA7Ci0KLSAgICBnbEdldEFjdGl2ZVVuaWZvcm0oc3RhdGljX2Nhc3Q8R0x1aW50Pihw
cm9ncmFtKSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFt
ZSk7Ci0KLSAgICBpZiAoIW5hbWVMZW5ndGgpIHsKLSAgICAgICAgZmFzdEZyZWUobmFtZSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFt
ZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBz
aXplOwotCi0gICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGds
R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRB
dHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9hdHRyczsKLX0KLQotR0MzRGVudW0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6
ZSgpID4gMCkgewotICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAgICBHQzNEZW51bSBlcnIgPSAqaXRl
cjsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwotICAgICAgICByZXR1
cm4gZXJyOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBn
bEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdD
M0RlbnVtIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIFN0
cmluZygoY29uc3QgY2hhciopIGdsR2V0U3RyaW5nKG5hbWUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAg
IAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzQnVmZmVyKGJ1ZmZl
cik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVu
dW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElzRW5h
YmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZm
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gZ2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0g
ICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNQcm9ncmFtKHBy
b2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZm
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gZ2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi1H
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAg
ICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1NoYWRlcihzaGFk
ZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVX
aWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xMaW5lV2lkdGgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAg
ICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xMaW5r
UHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9y
ZWkoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsUGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0Mz
RGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsUG9seWdv
bk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVh
ZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCi0gICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotI2lmICFkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIHN3aXRjaCAo
aW50ZXJuYWxmb3JtYXQpIHsKLSAgICBjYXNlIERFUFRIX1NURU5DSUw6Ci0gICAgICAgIGludGVy
bmFsZm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMODsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBERVBUSF9DT01Q
T05FTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdCQTQ6Ci0gICAgY2FzZSBSR0I1X0Ex
OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IFJHQkE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUkdCNTY1OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IFJHQjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotI2VuZGlmCi0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
YW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU3RyaW5nIHByZWZpeGVkU291cmNlOwot
Ci0jaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpCi0gICAgcHJlZml4ZWRTb3VyY2UuYXBwZW5k
KCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIpOwotI2VuZGlmCi0KLSAgICBwcmVmaXhlZFNv
dXJjZS5hcHBlbmQoc291cmNlKTsKLQotICAgIENTdHJpbmcgc291cmNlQ1MgPSBwcmVmaXhlZFNv
dXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogZGF0YSA9IHNvdXJjZUNTLmRhdGEoKTsKLSAg
ICBpbnQgbGVuZ3RoID0gcHJlZml4ZWRTb3VyY2UubGVuZ3RoKCk7Ci0gICAgZ2xTaGFkZXJTb3Vy
Y2UoKEdMdWludCkgc2hhZGVyLCAvKiBjb3VudCAqLyAxLCAmZGF0YSwgJmxlbmd0aCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBH
QzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTdGVu
Y2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU3RlbmNpbE9wKGZhaWwsIHpm
YWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxPcFNl
cGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RmbG9hdCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFt
TmFtZSwgR0MzRGludCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xZihsb2NhdGlvbiwg
djApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdHQzNEc2l6ZWkgc2l6ZSwgQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdD
M0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2
MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5p
Zm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0
KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zZnYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNE
ZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdH
QzNEc2l6ZWkgc2l6ZSwgQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAs
IEdDM0RpbnQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3Jt
MmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYx
LCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MiwgR0MzRGludCB2MykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2
MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNp
emUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVc2VQ
cm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsK
LSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZhbGlkYXRlUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjFmdihpbmRl
eCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
VmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIzZnYoaW5k
ZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIs
IEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRl
eEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYjRmdihpbmRl
eCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xW
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRCb29sZWFudihwYXJhbU5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RmxvYXR2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEZsb2F0dihwYXJhbU5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2ht
ZW50LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW50ZWdlcnYoR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEludGVnZXJ2KHBhcmFtTmFtZSwgdmFsdWUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBhcmFtTmFt
ZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZv
TG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
R3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICBHTHNp
emVpIHNpemUgPSAwOwotCi0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2Mo
bGVuZ3RoKTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGdsR2V0
UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAgICBTdHJp
bmcgcmVzdWx0KGluZm8pOwotICAgIGZhc3RGcmVlKGluZm8pOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBhcmFt
TmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0Nv
bnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIEdMc2l6ZWkgc2l6ZSA9
IDA7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKLSAg
ICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGdsR2V0U2hhZGVySW5mb0xv
ZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgU3RyaW5nIHJlc3VsdChpbmZv
KTsKLSAgICBmYXN0RnJlZShpbmZvKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFk
ZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCog
cHJlY2lzaW9uKQotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZXRhcmdldGVkIGF0
IHRoZSByZWFsIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgpCi0gICAgLy8gY2FsbCBvbiB0cnVl
IEVTIDIuMCBoYXJkd2FyZS4KLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7Ci0gICAgQVNT
RVJUKHJhbmdlKTsKLSAgICBBU1NFUlQocHJlY2lzaW9uKTsKLQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1f
SU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgotICAgICAgICAvLyBU
aGVzZSB2YWx1ZXMgYXJlIGZvciBhIDMyLWJpdCB0d29zLWNvbXBsZW1lbnQgaW50ZWdlciBmb3Jt
YXQuCi0gICAgICAgIHJhbmdlWzBdID0gMzE7Ci0gICAgICAgIHJhbmdlWzFdID0gMzA7Ci0gICAg
ICAgIHByZWNpc2lvblswXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxPV19GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1f
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKLSAgICAgICAg
Ly8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYW4gSUVFRSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5n
LXBvaW50IGZvcm1hdC4KLSAgICAgICAgcmFuZ2VbMF0gPSAxMjc7Ci0gICAgICAgIHJhbmdlWzFd
ID0gMTI3OwotICAgICAgICBwcmVjaXNpb25bMF0gPSAyMzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0Nv
bnRleHQzRDo6U0hBREVSX1NPVVJDRV9MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgR0xzaXplaSBz
aXplID0gMDsKLSAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgp
OwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgZ2xHZXRTaGFkZXJT
b3VyY2Uoc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKLQotICAgIFN0cmluZyByZXN1bHQo
aW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5mbyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1OYW1lLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZv
cm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRVbmlmb3Jt
ZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xH
ZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICAKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xHZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBhcmFtTmFtZSwg
R0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdl
dFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVt
IHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0K
LUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdD
M0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAgICBnbEdldFZlcnRleEF0
dHJpYlBvaW50ZXJ2KGluZGV4LCBwYXJhbU5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVy
KSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKC8qIGNvdW50ICovIDEs
ICZoYW5kbGUpOwotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBHTHVpbnQgaGFuZGxlID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVycygv
KiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBs
YXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAg
Z2xHZW5SZW5kZXJidWZmZXJzKC8qIGNvdW50ICovIDEsICZoYW5kbGUpOwotICAgIHJldHVybiBo
YW5kbGU7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNo
YWRlcihHQzNEZW51bSB0eXBlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiBnbENyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmaGFuZGxlKTsK
LSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVC
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
KDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBl
cnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0
Q2hhbmdlZCgpCi17Ci0gICAgLy8gRklYTUU6IEFueSBhY2NlbGVyYXRlZCBjb21wb3NpdG9yIG5l
ZWRzIHRvIGJlIHRvbGQgdG8gcmUtcmVhZCBmcm9tIGhlcmUuCi0gICAgbV9sYXllckNvbXBvc2l0
ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLUV4dGVuc2lv
bnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9l
eHRlbnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9u
czNEUXQpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19Ci0jZW5kaWYKLQogYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwK
</data>
<flag name="review"
          id="152912"
          type_id="1"
          status="+"
          setter="noam"
    />
    <flag name="commit-queue"
          id="152913"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145796</attachid>
            <date>2012-06-05 07:56:46 -0700</date>
            <delta_ts>2012-06-05 20:04:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>N9N.diff</filename>
            <type>text/plain</type>
            <size>55171</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMzFlOTEzNi4uNDVkOTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNSAg
Um9sYW5kIFRha2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdlZC5odT4KKworICAgICAg
ICBbUXRdIFVzZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3aGVuIHVzaW5nIE9wZW5H
TCBFUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3
MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEZWZp
bmVkIGEgZ2xvYmFsIE9wZW5nbCBFUyBtYWNybyB0byBjaGVjayBPcGVuR0wgRVMgb24gZXZlcnkg
cGxhdGZvcm1zLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTItMDYtMDQgIFRh
a2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJT
b2NrZXRdIFNlbmQgcmVxdWlyZXMgc3VwZXIgbGluZWFyIHRpbWUgYWdhaW5zdCBkYXRhIHNpemUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCmluZGV4IDM4MjZhMzkuLjBkMWNkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTExNyw0
ICsxMTE3LDExIEBACiAjZGVmaW5lIFdURl9VU0VfWkxJQiAxCiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKFFUKQorI2luY2x1ZGUgPHFnbG9iYWwuaD4KKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18y
KSAmJiAhZGVmaW5lZChXVEZfVVNFX09QRU5HTF9FU18yKQorI2RlZmluZSBXVEZfVVNFX09QRU5H
TF9FU18yIDEKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDg2ZGFlYjYuLjUyNmQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBA
QAorMjAxMi0wNi0wNSAgUm9sYW5kIFRha2FjcyAgPHRha2Fjcy5yb2xhbmRAc3R1ZC51LXN6ZWdl
ZC5odT4KKworICAgICAgICBbUXRdIFVzZSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCB3
aGVuIHVzaW5nIE9wZW5HTCBFUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGdW5jdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSBHcmFwaGljc0NvbnRleHQzRFF0
IHRoYXQgYWxyZWFkeSBpbXBsZW1lbnRlZAorICAgICAgICBpbiBHcmFwaGljc0NvbnRleHQzRENv
bW1vbi4gTWFjcm9zIHRoYXQgbm90IHN1cHBvcnRlZCBhdCBHTEVTIGhhdmUgYmVlbgorICAgICAg
ICBjaGFuZ2VkIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHBhaXIgdGhhdCBmb3VuZCBpbiBHcmFwaGlj
c0NvbnRleHQzRAorICAgICAgICAoZS5nLiBHTF9GUkFNRUJVRkZFUl9FWFQgdG8gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSKS4KKyAgICAgICAgSXQgd2FzIG5lZWRlZCBiZWNhdXNlIE9w
ZW5HTEVTIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgbWFjcm9zLgorICAgICAgICBFeHRlbnNpb25z
M0RRdCBpcyByZW1vdmVkIGJlY2VhdXNlIGl0IGhhcyBuZXZlciBiZWVuIHVzZWQuCisgICAgICAg
IFNvbWUgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb3ZlZCBmcm9uIEdyYXBoaWNzQ29udGV4dDNEQ29t
bW9uIHRvICpPcGVuR0wKKyAgICAgICAgYW5kICpPcGVuR0xFUyB0byBwcm92aWRlIHNwZWNpYWxp
emF0aW9uLgorICAgICAgICBUaGUgIm1fZGVwdGhTdGVuY2lsQnVmZmVyIiBtZW1iZXIgaXMgYWRk
ZWQgdG8gUXQgcG9ydCBiZWNhdXNlIGl0IHVzZXMKKyAgICAgICAgIm1fZGVwdGhTdGVuY2lsQnVm
ZmVyIiBsaWtlIHRoZSBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRl
eFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQ
aXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlRkJPcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZSk6CisKIDIwMTItMDYtMDUgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2JpbGUu
Y29tLmNuPgogCiAgICAgICAgIEpTQzpuZWVkIHRvIGltcGxlbWVudCBEaWN0aW9uYXJ5OjpnZXRX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2sgZm9yIElEQgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggYmMwMTE3Yi4u
ZDdkNzI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTEwLDE4ICszOTEwLDIxIEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9xdC9EcmF3aW5nQnVm
ZmVyUXQuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAKIAogICAgIElOQ0xVREVQQVRIICs9ICQkUFdEL3BsYXRmb3JtL2dyYXBoaWNzL2dwdQogCi0g
ICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7Ci0gICAgICAgIEhFQURFUlMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5oCisgICAgY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHwgY29udGFpbnMoUVRfQ09ORklH
LCBvcGVuZ2xlczIpIHsKKyAgICAgICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7
CisgICAgICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNPVVJD
RVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwCisgICAgICAgIH0KKworICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0gXAogICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAot
ICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCiAKICAgICAgICAgQU5HTEVfRElSID0gJCRyZXBsYWNl
KFBXRCwgIldlYkNvcmUiLCAiVGhpcmRQYXJ0eS9BTkdMRSIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAxODAwMDE2
Li43YmI4YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTM5NCw2ICszOTQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFNURU5DSUxfSU5ERVggPSAweDE5MDEsCiAgICAgICAgIFNURU5DSUxfSU5ERVg4ID0gMHg4RDQ4
LAogICAgICAgICBERVBUSF9TVEVOQ0lMID0gMHg4NEY5LAorICAgICAgICBVTlNJR05FRF9JTlRf
MjRfOCA9IDB4ODRGQSwKICAgICAgICAgUkVOREVSQlVGRkVSX1dJRFRIID0gMHg4RDQyLAogICAg
ICAgICBSRU5ERVJCVUZGRVJfSEVJR0hUID0gMHg4RDQzLAogICAgICAgICBSRU5ERVJCVUZGRVJf
SU5URVJOQUxfRk9STUFUID0gMHg4RDQ0LApAQCAtOTMyLDI5ICs5MzMsMjEgQEAgcHVibGljOgog
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVy
U291cmNlTWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKLSNpZiBQTEFU
Rk9STShRVCkgJiYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBmcmllbmQgY2xhc3MgRXh0
ZW5zaW9uczNEUXQ7Ci0gICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7Ci0j
ZWxzZQorCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAgICBPd25QdHI8
RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7Ci0jZW5kaWYKIAogICAgIEF0dHJpYnV0
ZXMgbV9hdHRyczsKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7CiAK
ICAgICBHQzNEdWludCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7CiAgICAgR0MzRHVp
bnQgbV9mYm87Ci0jaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0g
ICAgR0MzRHVpbnQgbV9kZXB0aEJ1ZmZlcjsKLSAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7
Ci0jZWxzZQogI2lmIFVTRShPUEVOR0xfRVNfMikKICAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVy
OwogICAgIEdDM0R1aW50IG1fc3RlbmNpbEJ1ZmZlcjsKICNlbmRpZgogICAgIEdDM0R1aW50IG1f
ZGVwdGhTdGVuY2lsQnVmZmVyOwotI2VuZGlmCisKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVk
OwogICAgIEdDM0R1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggZTg1MTlkNS4uM2Y0N2I2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yNDQsNiArMjQ0LDE4IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRl
cHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoKGRl
cHRoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggOGMxZTdlNS4uNDI5ZmM1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0x
NjcsMTMgKzE2NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgp
CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KCk7CiAKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKICAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRl
cm5hbENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAw
KTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1cmUwKTsK
ICAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9ib3VuZEZC
Tyk7CiAgICAgOjpnbEZpbmlzaCgpOwogICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKIH0K
QEAgLTE4OCwxMiArMTg4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJp
bmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAgYm9vbCBt
dXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewogICAg
ICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CiAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgewogICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0
cnVlOwotICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIx
MSw3ICsyMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0
cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaQogICAgICAgICA6OmdsUGl4ZWxT
dG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwogCiAgICAgaWYgKG11c3RS
ZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9ib3VuZEZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2JvdW5kRkJPKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
KTsKICAgICBpZiAobV9hdHRycy5kZXB0aCkgewogICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RF
UFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIDo6Z2xDbGVhckRlcHRoKDEp
OworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCgxKTsKICAgICAgICAgOjpn
bEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CiAgICAgICAgIDo6
Z2xEZXB0aE1hc2soR0xfVFJVRSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZG
RVJfQklUOwpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3Jb
MF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwogICAgIDo6
Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29s
b3JNYXNrWzNdKTsKICAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsQ2xlYXJE
ZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgo
Y2xlYXJEZXB0aCk7CiAgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKICAgICB9CiAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewpAQCAtMjg4LDcgKzI4OCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICA6Omds
RGlzYWJsZShHTF9ESVRIRVIpOwogCiAgICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX2JvdW5kRkJPKTsKIAogICAgIDo6Z2xGbHVzaCgpOwogfQpAQCAtNDIyLDEyICs0MjIs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKICAg
ICA6OmdsQ2xlYXIobWFzayk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVw
dGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsQ2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
U3RlbmNpbChHQzNEaW50IHMpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC00OTcs
MTEgKzQ5MSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0
aXNhbXBsZUZCTykgewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KElu
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0KICAg
ICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpCkBAIC01MDksMTEgKzUwMywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAm
JiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAgICAgcmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKICAgICB9CiAgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQpAQCAtNTM0LDEyICs1MjgsNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKICAgICA6OmdsRGVw
dGhNYXNrKGZsYWcpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdD
M0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19Ci0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKQEAgLTgxMCwxMiAr
Nzk4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpCiAgICAgOjpnbEZsdXNoKCk7CiAgICAg
aWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykg
ewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAgICA6OmdsRmx1c2goKTsK
ICAgICB9CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCBiNTY1N2FkLi5iMWJk
MWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShR
VCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKQEAgLTcyLDEyICs3MiwxMiBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAobV9ib3VuZEZCTyAh
PSBtX2ZibykgewogICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CiAgICAgfQogCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSk7CiAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgcGl4ZWxEYXRhVHlwZSwgMCk7
Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAg
IDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKIAogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBt
X2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCAwKTsKQEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgLy8gVXNlIGEgMjQg
Yml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCiAgICAgICAgIGlmIChz
dXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7CiAgICAgICAgICAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsIHdp
ZHRoLCBoZWlnaHQsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VTLCBHTF9VTlNJR05FRF9JTlRfMjRf
OF9PRVMsIDApOworICAgICAgICAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UXzI0XzgsIDApOwogICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKICAgICAgICAg
ICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5D
SUxfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIsIDApOwog
ICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCkBAIC05OCwxOSArOTgsMTkgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAg
ICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgICAgICAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5j
aWxCdWZmZXIpOworICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAg
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICAgICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBH
TF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZl
cik7CisgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
R0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAg
ICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
X0VYVCkgeworICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKICAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICB9CkBAIC0xNTYsNiArMTU2LDE4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFu
Z2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCmluZGV4IGEwMzNmZDkuLjJmNTI2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwCkBAIC0yMiwxMSArMjIsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNf
MikKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RRdC5oIgotI2Vsc2UKICNpbmNsdWRlICJFeHRlbnNp
b25zM0RPcGVuR0wuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CkBAIC05NCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0CiB7Ci0jaWYgZGVmaW5lZCAoUVRfT1BFTkdMX0VTXzIpCisj
aWYgVVNFKE9QRU5HTF9FU18yKQogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yMzcsOSArMjMzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NvbnRl
eHQtPm1fYXR0cnMuYW50aWFsaWFzKQogICAgICAgICByZXR1cm47CisjaWYgIVVTRShPUEVOR0xf
RVNfMikKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9j
b250ZXh0LT5tX211bHRpc2FtcGxlRkJPKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFX
X0ZSQU1FQlVGRkVSX0VYVCwgbV9jb250ZXh0LT5tX2Zibyk7CiAgICAgZ2xCbGl0RnJhbWVidWZm
ZXIoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRI
ZWlnaHQsIDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJy
ZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworI2VuZGlmCiAgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRl
eHQtPm1fYm91bmRGQk8pOwogfQogCkBAIC0zMTgsMTIgKzMxNiwxMSBAQCBHcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJl
KDApCiAgICAgLCBtX2ZibygwKQotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisjaWYgVVNF
KE9QRU5HTF9FU18yKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQogICAgICwgbV9zdGVuY2lsQnVm
ZmVyKDApCi0jZWxzZQotICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICNlbmRpZgorICAg
ICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNl
KQogICAgICwgbV9pbnRlcm5hbENvbG9yRm9ybWF0KDApCiAgICAgLCBtX2JvdW5kRkJPKDApCkBA
IC0zMzQsOSArMzMxLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQogewotI2lmICFkZWZpbmVkKFFU
X09QRU5HTF9FU18yKQogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotI2VuZGlmCiAKICAgICBp
ZiAoIW1fcHJpdmF0ZS0+bV9zdXJmYWNlKSB7CiAgICAgICAgIExPR19FUlJPUigiR3JhcGhpY3ND
b250ZXh0M0Q6IFFHTFdpZGdldCBpbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CkBAIC0zNzgsMTUg
KzM3MywxNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICAvLyBCaW5kIGNhbnZh
cyBGQk8uCiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOwogICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0jaWYgZGVmaW5l
ZChRVF9PUEVOR0xfRVNfMikKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCiAgICAgICAgIGlmIChtX2F0
dHJzLmRlcHRoKQogICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVm
ZmVyKTsKICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKICAgICAgICAgICAgIGdsR2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbHNlCisjZW5kaWYKICAgICAgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAgICAgICAgZ2xHZW5S
ZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKICAgICB9CiAK
ICAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KQEAgLTQwNSw3ICszOTksNyBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaQogICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsK
ICAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CiAKLSNpZiAhZGVm
aW5lZChRVF9PUEVOR0xfRVNfMikKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQogICAgIGdsRW5hYmxl
KEdMX1BPSU5UX1NQUklURSk7CiAgICAgZ2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRf
U0laRSk7CiAjZW5kaWYKQEAgLTQyNywxNCArNDIxLDEzIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+
R3JhcGhpY3NDb250ZXh0M0QoKQogICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpCiAgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgIH0gZWxzZSBpZiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpIHsKLSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQorI2lmIFVT
RShPUEVOR0xfRVNfMikKICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCiAgICAgICAgICAgICBn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwogICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsKQogICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0
ZW5jaWxCdWZmZXIpOwotI2Vsc2UKLSAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7CiAjZW5kaWYKKyAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC00ODEsMTE5MiAr
NDc0LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhj
b25zdCBJbnRTaXplJiBzaXplKQogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFFUX09QRU5HTF9F
U18yKQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKikKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgcHJvcGVyIG5vbi1wcmVtdWx0aXBsaWVk
LWFscGhhCi0gICAgLy8gc3VwcG9ydC4KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCh3
aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KSB8fCAo
IW1fcHJpdmF0ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lk
dGg7Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgY29sb3IgYnVmZmVyCi0gICAgZ2xCaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBpZiAobV9hdHRy
cy5hbHBoYSkKLSAgICAgICAgZ2xUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAvKiBsZXZlbCAqLyAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgd2lkdGgsIGhlaWdo
dCwgLyogYm9yZGVyICovIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgLyogZGF0YSAqLyAwKTsKLSAgICBlbHNlCi0gICAgICAgIGds
VGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgLyogbGV2ZWwgKi8gMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQiwgd2lkdGgsIGhlaWdodCwgLyogYm9yZGVyICovIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAv
KiBkYXRhICovIDApOwotICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMuCi0j
aWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAg
ICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
bV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5U
MTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwpIHsKLSAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQotI2Vsc2UKLSAgICBp
ZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgZ2xCaW5kUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGggJiYgbV9hdHRycy5zdGVuY2lsKQot
ICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIEdMX0RFUFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBl
bHNlIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBlbHNlIGlmIChtX2F0dHJzLnN0
ZW5jaWwpCi0gICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVgsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBDb25zdHJ1Y3QgY2Fu
dmFzIEZCTy4KLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLSNpZiBkZWZpbmVk
KFFUX09QRU5HTF9FU18yKQotICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICBnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAg
IGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotI2Vsc2UKLSAgICBpZiAobV9hdHRy
cy5kZXB0aCAmJiBtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgZWxzZSBpZiAobV9hdHRycy5kZXB0aCkKLSAg
ICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgZWxzZSBpZiAo
bV9hdHRycy5zdGVuY2lsKQotICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOwotI2VuZGlmCi0KLSAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7Ci0gICAgaWYgKHN0YXR1cyAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJHcmFwaGljc0NvbnRleHQzRDogQ2FudmFzIEZCTyBpbml0aWFsaXphdGlvbiBmYWls
ZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgY2xlYXJGbGFncyA9IEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChtX2F0dHJzLmRlcHRo
KQotICAgICAgICBjbGVhckZsYWdzIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJf
QklUOwotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgIGNsZWFyRmxhZ3MgfD0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLQotICAgIGdsQ2xlYXIoY2xlYXJG
bGFncyk7Ci0gICAgZ2xGbHVzaCgpOwotfQotCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUo
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NF
UlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEF0dGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRh
Y2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQs
IEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYg
KCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xC
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2JvdW5kRkJPID0gYnVm
ZmVyID8gYnVmZmVyIDogbV9mYm87Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBtX2Jv
dW5kRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRl
cmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0g
bW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEJsZW5kRXF1YXRpb24o
bW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFs
cGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNm
YWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19ICAgICAgIAotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVt
IGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCdWZmZXJEYXRhKHRhcmdl
dCwgc2l6ZSwgLyogZGF0YSAqLyAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNl
dCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xh
bXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xDbGVhcihtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCi0gICAgZ2xDbGVhckRlcHRoZihkZXB0
aCk7Ci0jZWxzZQotICAgIGdsQ2xlYXJEZXB0aChkZXB0aCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbENsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4s
IEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRh
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQ29tcHJlc3NlZFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxG
YWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xD
dWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKEdD
M0RlbnVtIGZ1bmMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZXB0aEZ1
bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9v
bGVhbiBmbGFnKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVwdGhNYXNr
KGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFt
cGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQotICAgIGdsRGVwdGhSYW5nZWYoek5lYXIsIHpG
YXIpOwotI2Vsc2UKLSAgICBnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotI2VuZGlmCi19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERl
dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0
LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xE
cmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xFbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1
c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRmx1c2goKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJi
dWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0Mz
RGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUy
RCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYg
KCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICBHTGludCBtYXhMZW5ndGggPSAwOwotICAgIGdsR2V0UHJvZ3JhbWl2KHByb2dyYW0s
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhMZW5n
dGgpOwotCi0gICAgR0xjaGFyKiBuYW1lID0gKEdMY2hhciopIGZhc3RNYWxsb2MobWF4TGVuZ3Ro
KTsKLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAg
IEdMZW51bSB0eXBlID0gMDsKLQotICAgIGdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4
LCBtYXhMZW5ndGgsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwotCi0gICAgaWYg
KCFuYW1lTGVuZ3RoKSB7Ci0gICAgICAgIGZhc3RGcmVlKG5hbWUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgp
OwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLQotICAgIGZh
c3RGcmVlKG5hbWUpOwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0xpbnQgbWF4
TGVuZ3RoID0gMDsKLSAgICBnbEdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dy
YW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExl
bmd0aCk7Ci0KLSAgICBHTGNoYXIqIG5hbWUgPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhtYXhMZW5n
dGgpOwotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0g
ICAgR0xlbnVtIHR5cGUgPSAwOwotCi0gICAgZ2xHZXRBY3RpdmVVbmlmb3JtKHN0YXRpY19jYXN0
PEdMdWludD4ocHJvZ3JhbSksIGluZGV4LCBtYXhMZW5ndGgsICZuYW1lTGVuZ3RoLCAmc2l6ZSwg
JnR5cGUsIG5hbWUpOwotCi0gICAgaWYgKCFuYW1lTGVuZ3RoKSB7Ci0gICAgICAgIGZhc3RGcmVl
KG5hbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5mby5uYW1lID0g
U3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5m
by5zaXplID0gc2l6ZTsKLQotICAgIGZhc3RGcmVlKG5hbWUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuIC0xOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1fYXR0cnM7Ci19Ci0KLUdDM0Rl
bnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1fc3ludGhldGlj
RXJyb3JzLnNpemUoKSA+IDApIHsKLSAgICAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+OjppdGVy
YXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKLSAgICAgICAgR0MzRGVudW0g
ZXJyID0gKml0ZXI7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShpdGVyKTsKLSAg
ICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICByZXR1cm4gZ2xHZXRFcnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBTdHJpbmcoKGNvbnN0IGNoYXIqKSBnbEdldFN0cmluZyhuYW1lKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2Rl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsSGludCh0YXJnZXQsIG1vZGUp
OwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc0J1
ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFi
bGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1
cm4gZ2xJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAo
IWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7
Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbElz
UHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICgh
cmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xf
RkFMU0U7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsSXNT
aGFkZXIoc2hhZGVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4
dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIGdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsTGluZVdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFBpeGVsU3RvcmVpKHBhcmFtTmFtZSwgcGFyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBm
YWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBk
YXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAotICAgIGlmICh0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8IGZvcm1hdCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBnbFJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKLSAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBERVBUSF9TVEVOQ0lMOgotICAg
ICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDg7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0g
REVQVEhfQ09NUE9ORU5UOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJHQkE0OgotICAgIGNh
c2UgUkdCNV9BMToKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBSR0JBOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFJHQjU2NToKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBSR0I7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJn
ZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52
ZXJ0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsU2FtcGxlQ292ZXJhZ2Uo
dmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgQVNTRVJUKHNo
YWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIFN0cmluZyBwcmVmaXhl
ZFNvdXJjZTsKLQotI2lmIGRlZmluZWQgKFFUX09QRU5HTF9FU18yKQotICAgIHByZWZpeGVkU291
cmNlLmFwcGVuZCgicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iKTsKLSNlbmRpZgotCi0gICAg
cHJlZml4ZWRTb3VyY2UuYXBwZW5kKHNvdXJjZSk7Ci0KLSAgICBDU3RyaW5nIHNvdXJjZUNTID0g
cHJlZml4ZWRTb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzb3VyY2VDUy5k
YXRhKCk7Ci0gICAgaW50IGxlbmd0aCA9IHByZWZpeGVkU291cmNlLmxlbmd0aCgpOwotICAgIGds
U2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlciwgLyogY291bnQgKi8gMSwgJmRhdGEsICZsZW5n
dGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBm
dW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVu
dW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFz
ayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1h
c2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xTdGVuY2lsTWFzayhtYXNr
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFN0ZW5jaWxP
cChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xT
dGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cGFyYW1OYW1lLCBHQzNEZmxvYXQgdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMWYo
bG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihH
QzNEaW50IGxvY2F0aW9uLCBHR0MzRHNpemVpIHNpemUsIEMzRGZsb2F0KiBhcnJheSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xV
bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2xVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMWkobG9jYXRpb24s
IHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxv
Y2F0aW9uLCBHR0MzRHNpemVpIHNpemUsIEMzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50IHYwLCBHQzNEaW50IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50
KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0yaXYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQg
djIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtM2kobG9jYXRp
b24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEaW50KiBhcnJheSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtNGkobG9jYXRpb24s
IHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogYXJyYXkpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXkp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xVbmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJh
bnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWYWxpZGF0
ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRy
aWIxZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYw
LCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVmVydGV4QXR0
cmliM2Z2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0Mz
RGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xWZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBl
LCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbFZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGJvb2xlYW4q
IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0Qm9vbGVhbnYo
cGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZl
clBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50
KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRGbG9hdHYocGFyYW1OYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdl
dCwgYXR0YWNobWVudCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRJbnRlZ2VydihwYXJhbU5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFByb2dyYW1pdihwcm9ncmFt
LCBwYXJhbU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQ
cm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwot
Ci0gICAgR0xzaXplaSBzaXplID0gMDsKLQotICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBm
YXN0TWFsbG9jKGxlbmd0aCk7Ci0gICAgaWYgKCFpbmZvKQotICAgICAgICByZXR1cm4gIiI7Ci0K
LSAgICBnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8pOwot
Ci0gICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKLSAgICBmYXN0RnJlZShpbmZvKTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50
KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbEdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNE
ZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIEFTU0VSVChzaGFkZXIpOwot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwYXJh
bU5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJ
bmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwg
R3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICBHTHNp
emVpIHNpemUgPSAwOwotICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxl
bmd0aCk7Ci0gICAgaWYgKCFpbmZvKQotICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICBnbEdldFNo
YWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKLQotICAgIFN0cmluZyBy
ZXN1bHQoaW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5mbyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0Mz
RGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2Us
IEdDM0RpbnQqIHByZWNpc2lvbikKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmV0
YXJnZXRlZCBhdCB0aGUgcmVhbCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoKQotICAgIC8vIGNh
bGwgb24gdHJ1ZSBFUyAyLjAgaGFyZHdhcmUuCi0gICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5cGUp
OwotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKHByZWNpc2lvbik7Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0lOVDoKLSAg
ICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdvcy1jb21wbGVtZW50IGlu
dGVnZXIgZm9ybWF0LgotICAgICAgICByYW5nZVswXSA9IDMxOwotICAgICAgICByYW5nZVsxXSA9
IDMwOwotICAgICAgICBwcmVjaXNpb25bMF0gPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
Ci0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUgc2luZ2xlLXByZWNpc2lv
biBmbG9hdGluZy1wb2ludCBmb3JtYXQuCi0gICAgICAgIHJhbmdlWzBdID0gMTI3OwotICAgICAg
ICByYW5nZVsxXSA9IDEyNzsKLSAgICAgICAgcHJlY2lzaW9uWzBdID0gMjM7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAg
IEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxs
b2MobGVuZ3RoKTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGds
R2V0U2hhZGVyU291cmNlKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAgICBTdHJp
bmcgcmVzdWx0KGluZm8pOwotICAgIGZhc3RGcmVlKGluZm8pOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBh
cmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJp
dih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
R2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdD
M0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7
Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
YXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcGFyYW1OYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBhcmFtTmFtZSwgdmFs
dWUpOwotfQotCi1HQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
Yk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIAotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgZ2xH
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcGFyYW1OYW1lLCAmcG9pbnRlcik7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlcikpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQg
eW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi1QbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEdMdWludCBoYW5kbGUgPSAwOwotICAgIGdsR2VuQnVmZmVycygvKiBj
b3VudCAqLyAxLCAmaGFuZGxlKTsKLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGhhbmRsZSA9IDA7Ci0gICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJmhhbmRsZSk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0K
LQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgp
OwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBoYW5kbGUg
PSAwOwotICAgIGdsR2VuUmVuZGVyYnVmZmVycygvKiBjb3VudCAqLyAxLCAmaGFuZGxlKTsKLSAg
ICByZXR1cm4gaGFuZGxlOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEdMdWludCBoYW5kbGUgPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwg
JmhhbmRsZSk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBm
cmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJl
bmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0
ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3Io
R0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17Ci0gICAg
bV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpt
YXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIC8vIEZJWE1FOiBBbnkgYWNjZWxlcmF0ZWQgY29t
cG9zaXRvciBuZWVkcyB0byBiZSB0b2xkIHRvIHJlLXJlYWQgZnJvbSBoZXJlLgotICAgIG1fbGF5
ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVy
Q29tcG9zaXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQot
Ci1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAg
ICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3
IEV4dGVuc2lvbnMzRFF0KTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotI2Vu
ZGlmCi0KIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>