<?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>113359</bug_id>
          
          <creation_ts>2013-03-26 18:06:01 -0700</creation_ts>
          <short_desc>[EFL][EGL] Add support for creating offscreen surface.</short_desc>
          <delta_ts>2013-03-29 09:05:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105286</blocked>
    
    <blocked>105659</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864162</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-26 18:06:01 -0700</bug_when>
    <thetext>Add support for using EGLPixmapSurface as an offscreensurface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864300</commentid>
    <comment_count>1</comment_count>
      <attachid>195244</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-27 01:44:35 -0700</bug_when>
    <thetext>Created attachment 195244
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864801</commentid>
    <comment_count>2</comment_count>
      <attachid>195381</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-27 13:08:14 -0700</bug_when>
    <thetext>Created attachment 195381
patchv2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864878</commentid>
    <comment_count>3</comment_count>
      <attachid>195381</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-03-27 14:47:37 -0700</bug_when>
    <thetext>Comment on attachment 195381
patchv2

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

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:66
&gt;          configAttributeList[11] = m_attributes &amp; GLPlatformSurface::SupportAlpha ? 8 : 0;
&gt;          configAttributeList[13] = EGL_PIXMAP_BIT;

I know this code was there before, but this is extremely bug prone. I&apos;d prefer if instead of using a static array and changing it here with a magic index you&apos;d just generate the array here on the fly.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:77
&gt;          configAttributeList[11] = m_attributes &amp; GLPlatformSurface::SupportAlpha ? 8 : 0;
&gt;          configAttributeList[13] = EGL_WINDOW_BIT;

ditto

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:112
&gt; +    EGLint numConfigs, i;

Two lines

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:119
&gt; +        return config;

return 0;

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:122
&gt; +    configs = static_cast&lt;EGLConfig*&gt;(malloc(numConfigs * sizeof(EGLConfig)));

configs = new EGLConfig[numConfigs];
C++ please :)

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:163
&gt; +        if (alpha != configAttributeList[11])
&gt; +            continue;
&gt; +
&gt; +        eglGetConfigAttrib(m_sharedDisplay, tempConfig, EGL_RED_SIZE, &amp;red);
&gt; +
&gt; +        if (red != configAttributeList[3])
&gt; +            continue;
&gt; +
&gt; +        eglGetConfigAttrib(m_sharedDisplay, tempConfig, EGL_GREEN_SIZE, &amp;green);
&gt; +
&gt; +        if (green != configAttributeList[5])
&gt; +            continue;
&gt; +
&gt; +        eglGetConfigAttrib(m_sharedDisplay, tempConfig, EGL_BLUE_SIZE, &amp;blue);
&gt; +
&gt; +        if (blue != configAttributeList[7])
&gt; +            continue;
&gt; +
&gt; +        eglGetConfigAttrib(m_sharedDisplay, tempConfig, EGL_SURFACE_TYPE, &amp;surfaces);
&gt; +
&gt; +        if (surfaces &amp; configAttributeList[13]) {

Please no magic indices.
You should have something like expectedAlpha, expectedGreen etc. and put them dynamically into the array.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:172
&gt; +    if ((m_attributes &amp; GLPlatformSurface::SupportAlpha) &amp;&amp; !config) {
&gt; +        m_attributes &amp;= ~GLPlatformSurface::SupportAlpha;
&gt; +        config = configs[0];
&gt; +    }

I don&apos;t quite get what the logic here is.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLHelper.h:31
&gt; +#include &lt;glx/X11Helper.h&gt;

EGLHelper includes something from GLX?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLHelper.h:36
&gt; +typedef X11Helper NativeWrapper;

Seems like this should be guarded with X11

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLHelper.h:41
&gt; +

No need for new line

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:179
&gt; +    m_drawable = eglCreatePixmapSurface(m_sharedDisplay, config, (EGLNativePixmapType)m_bufferHandle, 0);

No C casting please

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h:62
&gt; +

Unnecessary line

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h:64
&gt; +    EGLPixmapSurface(SurfaceAttributes);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865095</commentid>
    <comment_count>4</comment_count>
      <attachid>195459</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-27 19:09:21 -0700</bug_when>
    <thetext>Created attachment 195459
patchv3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865098</commentid>
    <comment_count>5</comment_count>
      <attachid>195459</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-27 19:11:20 -0700</bug_when>
    <thetext>Comment on attachment 195459
patchv3

removing request for review, will update another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865139</commentid>
    <comment_count>6</comment_count>
      <attachid>195474</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-27 20:36:03 -0700</bug_when>
    <thetext>Created attachment 195474
patchv4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865145</commentid>
    <comment_count>7</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-27 20:48:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 195381 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195381&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:66
&gt; &gt;          configAttributeList[11] = m_attributes &amp; GLPlatformSurface::SupportAlpha ? 8 : 0;
&gt; &gt;          configAttributeList[13] = EGL_PIXMAP_BIT;
&gt; 
&gt; I know this code was there before, but this is extremely bug prone. I&apos;d prefer if instead of using a static array and changing it here with a magic index you&apos;d just generate the array here on the fly.

Done, removed the usage of array.

&gt; &gt; +        if (surfaces &amp; configAttributeList[13]) {
&gt; 
&gt; Please no magic indices.
&gt; You should have something like expectedAlpha, expectedGreen etc. and put them dynamically into the array.

done.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:172
&gt; &gt; +    if ((m_attributes &amp; GLPlatformSurface::SupportAlpha) &amp;&amp; !config) {
&gt; &gt; +        m_attributes &amp;= ~GLPlatformSurface::SupportAlpha;
&gt; &gt; +        config = configs[0];
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t quite get what the logic here is.

We fallback to find a a configuration with no support for alpha channel in case we fail to find a configuration supporting alpha(when requested).  

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLHelper.h:31
&gt; &gt; +#include &lt;glx/X11Helper.h&gt;
 
&gt; EGLHelper includes something from GLX?

We uses nativeDisplay function from X11Helper.h class(which happens to be in glx folder) when eglNativeDisplay is called. No dependencies on GLX.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLHelper.h:36
&gt; &gt; +typedef X11Helper NativeWrapper;
&gt; 
&gt; Seems like this should be guarded with X11

k, I can add PLATFORM(X11) guards here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865769</commentid>
    <comment_count>8</comment_count>
      <attachid>195636</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-28 13:59:48 -0700</bug_when>
    <thetext>Created attachment 195636
patchv5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865782</commentid>
    <comment_count>9</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-28 14:14:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 195381 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195381&amp;action=review
&gt; &gt; 
&gt; &gt; Seems like this should be guarded with X11
&gt; 
&gt; k, I can add PLATFORM(X11) guards here

Done, separated all X11 dependencies and added X11 platform guards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866017</commentid>
    <comment_count>10</comment_count>
      <attachid>195636</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-03-29 00:31:50 -0700</bug_when>
    <thetext>Comment on attachment 195636
patchv5

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

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:100
&gt; +    configs = new EGLConfig[numConfigs];

Nit: this can be EGLConfig configs[numConfigs]; and then you don&apos;t need to explicitly call delete.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.h:49
&gt; +    EGLConfig createConfig(EGLint);

EGLint expectedSurfaceType

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLHelper.cpp:53
&gt; +        if (success != EGL_TRUE) {
&gt; +            LOG_ERROR(&quot;EGLInitialization failed.&quot;);
&gt; +            m_eglDisplay = EGL_NO_DISPLAY;
&gt; +        }

Shouldn&apos;t you return early here?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:80
&gt; +    if (!eglBindAPI(eglAPIVersion)) {
&gt; +        LOG_ERROR(&quot;Failed to set EGL API(%d).&quot;, eglGetError());

Why would you need to set the API version on destruction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866124</commentid>
    <comment_count>11</comment_count>
      <attachid>195735</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-29 06:35:00 -0700</bug_when>
    <thetext>Created attachment 195735
patchv6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866128</commentid>
    <comment_count>12</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-29 06:40:55 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 195636 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195636&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigSelector.cpp:100
&gt; &gt; +    configs = new EGLConfig[numConfigs];
&gt; 
&gt; Nit: this can be EGLConfig configs[numConfigs]; and then you don&apos;t need to explicitly call delete.
 :) changed it to be allocated on stack.

           LOG_ERROR(&quot;EGLInitialization failed.&quot;);
&gt; &gt; +            m_eglDisplay = EGL_NO_DISPLAY;
&gt; &gt; +        }
&gt; 
&gt; Shouldn&apos;t you return early here?

fixed.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:80
&gt; &gt; +    if (!eglBindAPI(eglAPIVersion)) {
&gt; &gt; +        LOG_ERROR(&quot;Failed to set EGL API(%d).&quot;, eglGetError());
&gt; 
&gt; Why would you need to set the API version on destruction?

removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866151</commentid>
    <comment_count>13</comment_count>
      <attachid>195735</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-29 07:35:02 -0700</bug_when>
    <thetext>Comment on attachment 195735
patchv6

removing request for cq, will update a new patch with changelog fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866182</commentid>
    <comment_count>14</comment_count>
      <attachid>195752</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-29 08:22:27 -0700</bug_when>
    <thetext>Created attachment 195752
patchv7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866196</commentid>
    <comment_count>15</comment_count>
      <attachid>195752</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 09:05:34 -0700</bug_when>
    <thetext>Comment on attachment 195752
patchv7

Clearing flags on attachment: 195752

Committed r147222: &lt;http://trac.webkit.org/changeset/147222&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866198</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 09:05:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195244</attachid>
            <date>2013-03-27 01:44:35 -0700</date>
            <delta_ts>2013-03-27 13:08:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>surfacepixmap.patch</filename>
            <type>text/plain</type>
            <size>26036</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2MjZjYTUuLmYwZGQwZTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEz
LTAzLTI2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtFR0xdIEFkZCBzdXBwb3J0IGZvciBjcmVhdGluZyBvZmZzY3JlZW4g
c3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMzM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIGVuYWJsaW5nIEVHTCBhbmQgR0xFUzIKKyAgICAg
ICAgc3VwcG9ydCBmb3IgRUZMIHBvcnQuIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB1c2lu
ZworICAgICAgICBFR0xQaXhtYXBTdXJmYWNlIGFzIGFuIG9mZnNjcmVlbnN1cmZhY2UuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rv
cjo6RUdMQ29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnU2VsZWN0
b3I6OnBpeG1hcENvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnU2Vs
ZWN0b3I6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZp
Z1NlbGVjdG9yOjpuYXRpdmVWaXN1YWxJZCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdT
ZWxlY3Rvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnU2VsZWN0b3I6OmNy
ZWF0ZUNvbmZpZyk6CisKKyAgICAgICAgIEFkZGVkIGxvZ2ljIHRvIHNlbGVjdCBFR0xDb25maWcg
c3VwcG9ydGluZyBhbHBoYSBhbmQKKyAgICAgICAgIG9wYXF1ZSBhcyBuZWVkZWQuIE1vdmVkIENv
ZGUgcmVsYXRlZCB0byBkaXNwbGF5IHRvCisgICAgICAgICBFR0xIZWxwZXIgY2xhc3MuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3Iu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMQ29uZmlnU2VsZWN0b3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMRGlzcGxheUNvbm5lY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5lY3Rpb246OkVHTERpc3BsYXlDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlDb25uZWN0aW9uOjp+RUdMRGlzcGxh
eUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5lY3Rpb246OmRp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RUdMSGVscGVyOjplZ2xEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTEhlbHBlcjo6ZWdsTmF0aXZlRGlzcGxheSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChFR0xIZWxwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6RUdMUGl4bWFwU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6On5FR0xQaXhtYXBTdXJm
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdM
UGl4bWFwU3VyZmFjZTo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRUdMUGl4bWFwU3VyZmFjZSk6CisKKyAgICAgICAgRUdMUGl4bWFwU3VyZmFjZSBpbXBsZW1l
bnRhdGlvbi4KKwogMjAxMy0wMy0yNiAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFw
YWxseUBpbnRlbC5jb20+CiAKICAgICAgICAgW0Nvb3JkR2Z4XSBTdXBwb3J0IHRvIHNoYXJlIEdy
YXBoaWNzU3VyZmFjZSBmbGFncyB3aXRoIGNsaWVudC4KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCBmNjdkOWE4Li4xNTNlYzQ0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zMjksNiArMzI5
LDcgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TENvbmZpZ1NlbGVjdG9yLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTENvbnRleHQuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMSGVscGVyLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCiAgICAgICAgICkKICAgICBlbHNlICgpCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJm
YWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9y
bVN1cmZhY2UuY3BwCmluZGV4IDkxNzhmZWUuLjk5Njc0YzMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2Uu
Y3BwCkBAIC00NCwxNSArNDQsMTYgQEAgc3RhdGljIEdMUGxhdGZvcm1TdXJmYWNlKiBtX2N1cnJl
bnREcmF3YWJsZSA9IDA7CiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZv
cm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCiB7CisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlOwogI2lmIFVT
RShHTFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIo
bmV3IEdMWE9mZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcykpOwotCi0gICAgaWYgKHN1cmZhY2Ut
PmRyYXdhYmxlKCkpCi0gICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKyAgICBzdXJm
YWNlID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcykpOwogI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oYXR0cmlidXRlcyk7CisgICAgc3VyZmFjZSA9IGFkb3B0UHRy
KG5ldyBFR0xPZmZTY3JlZW5QaXhtYXBTdXJmYWNlKGF0dHJpYnV0ZXMpKTsKICNlbmRpZgogCisg
ICAgaWYgKHN1cmZhY2UgJiYgc3VyZmFjZS0+ZHJhd2FibGUoKSkKKyAgICAgICAgcmV0dXJuIHN1
cmZhY2UucmVsZWFzZSgpOworCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRT
dXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwv
R0xUcmFuc3BvcnRTdXJmYWNlLmNwcAppbmRleCAwNzE4MzMzLi43YzI2ZDM3IDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0
U3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCkBAIC01MCw3ICs1MCw3IEBAIFBhc3NPd25QdHI8
R0xUcmFuc3BvcnRTdXJmYWNlPiBHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1
cmZhY2UoY29uc3QKICNpZiBVU0UoR0xYKQogICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+
IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1
dGVzKSk7CiAjZWxpZiBVU0UoRUdMKQotICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1
cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShhdHRyaWJ1dGVz
KSk7CisgICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5l
dyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMpKTsKICNlbmRpZgog
CiAgICAgaWYgKHN1cmZhY2UgJiYgc3VyZmFjZS0+aGFuZGxlKCkgJiYgc3VyZmFjZS0+ZHJhd2Fi
bGUoKSkKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAKaW5kZXggOWI5YzJlMC4uYzM4
NmVmYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAKQEAgLTI4LDkgKzI4LDkg
QEAKIAogI2lmIFVTRShFR0wpCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpbmNsdWRlICJFR0xI
ZWxwZXIuaCIKIAotU2hhcmVkRUdMRGlzcGxheSogU2hhcmVkRUdMRGlzcGxheTo6bV9zdGF0aWNT
aGFyZWRFR0xEaXNwbGF5ID0gMDsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEVHTGlu
dCBjb25maWdBdHRyaWJ1dGVMaXN0W10gPSB7CiAjaWYgVVNFKE9QRU5HTF9FU18yKQpAQCAtNDEs
OTUgKzQxLDMzIEBAIHN0YXRpYyBFR0xpbnQgY29uZmlnQXR0cmlidXRlTGlzdFtdID0gewogICAg
IEVHTF9SRURfU0laRSwgOCwKICAgICBFR0xfR1JFRU5fU0laRSwgOCwKICAgICBFR0xfQkxVRV9T
SVpFLCA4LAotICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDgsCisgICAgRUdMX1NURU5DSUxfU0laRSwg
MCwKICAgICBFR0xfQUxQSEFfU0laRSwgMCwKICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfTk9O
RSwKICAgICBFR0xfTk9ORQogfTsKIAotdm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpkZXJlZigpCi17
Ci0gICAgaWYgKGRlcmVmQmFzZSgpKSB7Ci0gICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxh
eSA9IDA7Ci0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIH0KLX0KLQotRUdMRGlzcGxheSBTaGFy
ZWRFR0xEaXNwbGF5OjpzaGFyZWRFR0xEaXNwbGF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9l
Z2xEaXNwbGF5OwotfQotCi1TaGFyZWRFR0xEaXNwbGF5OjpTaGFyZWRFR0xEaXNwbGF5KE5hdGl2
ZVNoYXJlZERpc3BsYXkqIGRpc3BsYXkpCi0gICAgOiBtX2VnbERpc3BsYXkoRUdMX05PX0RJU1BM
QVkpCi17Ci0gICAgaWYgKGRpc3BsYXkpCi0gICAgICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERp
c3BsYXkocmVpbnRlcnByZXRfY2FzdDxFR0xOYXRpdmVEaXNwbGF5VHlwZT4oZGlzcGxheSkpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVM
VF9ESVNQTEFZKTsKLQotICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEVHTEJvb2xlYW4gc3VjY2VzczsKLSAgICBz
dWNjZXNzID0gZWdsSW5pdGlhbGl6ZShtX2VnbERpc3BsYXksIDAsIDApOwotCi0gICAgaWYgKHN1
Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFR0xJbml0aWFsaXphdGlv
biBmYWlsZWQuIik7Ci0gICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwotICAg
IH0KLQotICAgIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOwotCi0gICAgaWYg
KHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0
IEVHTCBBUEkoJWQpLiIsIGVnbEdldEVycm9yKCkpOwotICAgICAgICBtX2VnbERpc3BsYXkgPSBF
R0xfTk9fRElTUExBWTsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhcmVkRUdMRGlzcGxheTo6Y2xlYW51
cCgpCi17Ci0gICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZWdsTWFrZUN1cnJlbnQobV9lZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFD
RSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICBlZ2xUZXJtaW5hdGUobV9l
Z2xEaXNwbGF5KTsKLSAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLX0KLQotU2hh
cmVkRUdMRGlzcGxheTo6flNoYXJlZEVHTERpc3BsYXkoKQotewotICAgIGNsZWFudXAoKTsKLX0K
LQotRUdMQ29uZmlnU2VsZWN0b3I6OkVHTENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNl
OjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNw
bGF5KQotICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKK0VHTENvbmZpZ1NlbGVjdG9yOjpFR0xD
b25maWdTZWxlY3RvcihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKKyAgICA6IG1fcGl4bWFwRkJDb25maWcoMCkKICAgICAsIG1fc3VyZmFjZUNvbnRleHRG
QkNvbmZpZygwKQogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7Ci0gICAgbV9zaGFy
ZWREaXNwbGF5ID0gU2hhcmVkRUdMRGlzcGxheTo6Y3JlYXRlKGRpc3BsYXkpOworICAgIG1fc2hh
cmVkRGlzcGxheSA9IEVHTEhlbHBlcjo6ZWdsTmF0aXZlRGlzcGxheSgpOwogfQogCiBFR0xDb25m
aWdTZWxlY3Rvcjo6fkVHTENvbmZpZ1NlbGVjdG9yKCkKIHsKIH0KIAotUGxhdGZvcm1EaXNwbGF5
IEVHTENvbmZpZ1NlbGVjdG9yOjpkaXNwbGF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaGFy
ZWREaXNwbGF5LT5zaGFyZWRFR0xEaXNwbGF5KCk7Ci19Ci0KLUVHTENvbmZpZyBFR0xDb25maWdT
ZWxlY3Rvcjo6cEJ1ZmZlckNvbnRleHRDb25maWcoKQorRUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVj
dG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKCkKIHsKLSAgICBpZiAoIW1fcGJ1ZmZlckZCQ29uZmln
KSB7CisgICAgaWYgKCFtX3BpeG1hcEZCQ29uZmlnKSB7CiAgICAgICAgIGNvbmZpZ0F0dHJpYnV0
ZUxpc3RbMTFdID0gbV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBo
YSA/IDggOiAwOwogICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9QSVhNQVBf
QklUOwotICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhjb25maWdBdHRy
aWJ1dGVMaXN0KTsKKyAgICAgICAgbV9waXhtYXBGQkNvbmZpZyA9IGNyZWF0ZUNvbmZpZygpOwog
ICAgIH0KIAotICAgIHJldHVybiBtX3BidWZmZXJGQkNvbmZpZzsKKyAgICByZXR1cm4gbV9waXht
YXBGQkNvbmZpZzsKIH0KIAogRUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpzdXJmYWNlQ29u
dGV4dENvbmZpZygpCkBAIC0xMzcsNyArNzUsNyBAQCBFR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0
b3I6OnN1cmZhY2VDb250ZXh0Q29uZmlnKCkKICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNv
bmZpZykgewogICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzExXSA9IG1fYXR0cmlidXRlcyAm
IEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsKICAgICAgICAgY29uZmln
QXR0cmlidXRlTGlzdFsxM10gPSBFR0xfV0lORE9XX0JJVDsKLSAgICAgICAgbV9zdXJmYWNlQ29u
dGV4dEZCQ29uZmlnID0gY3JlYXRlQ29uZmlnKGNvbmZpZ0F0dHJpYnV0ZUxpc3QpOworICAgICAg
ICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOwpAQCAtMTQ1LDExICs4MywxMSBAQCBF
R0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OnN1cmZhY2VDb250ZXh0Q29uZmlnKCkKIAogRUdM
aW50IEVHTENvbmZpZ1NlbGVjdG9yOjpuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmIGNv
bmZpZykgY29uc3QKIHsKLSAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZKQorICAg
IGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybiAt
MTsKIAogICAgIEVHTGludCBlZ2xWYWx1ZSA9IDA7Ci0gICAgZWdsR2V0Q29uZmlnQXR0cmliKGRp
c3BsYXkoKSwgY29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZhbHVlKTsKKyAgICBl
Z2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCBjb25maWcsIEVHTF9OQVRJVkVfVklT
VUFMX0lELCAmZWdsVmFsdWUpOwogCiAgICAgcmV0dXJuIGVnbFZhbHVlOwogfQpAQCAtMTYyLDI1
ICsxMDAsNzkgQEAgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIEVHTENvbmZp
Z1NlbGVjdG9yOjphdHRyaWJ1dGVzKCkgY29uc3QKIHZvaWQgRUdMQ29uZmlnU2VsZWN0b3I6OnJl
c2V0KCkKIHsKICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSAwOwotICAgIG1fcGJ1ZmZl
ckZCQ29uZmlnID0gMDsKKyAgICBtX3BpeG1hcEZCQ29uZmlnID0gMDsKIH0KIAotRUdMQ29uZmln
IEVHTENvbmZpZ1NlbGVjdG9yOjpjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkK
K0VHTENvbmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6Y3JlYXRlQ29uZmlnKCkKIHsKLSAgICBpZiAo
ZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZKQorICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0g
RUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IG51bUNvbmZpZ3M7
CisgICAgRUdMQ29uZmlnKiBjb25maWdzOworICAgIEVHTGludCBudW1Db25maWdzLCBpOwogICAg
IEVHTENvbmZpZyBjb25maWcgPSAwOwogCi0gICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZGlzcGxh
eSgpLCBhdHRyaWJ1dGVzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncykpCi0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlvbnMuIik7CisgICAgZWds
R2V0Q29uZmlncyhtX3NoYXJlZERpc3BsYXksIDAsIDAsICZudW1Db25maWdzKTsKKworICAgIGlm
ICghbnVtQ29uZmlncykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBh
bnkgRUdMIGNvbmZpZ3MuIik7CisgICAgICAgIHJldHVybiBjb25maWc7CisgICAgfQorCisgICAg
Y29uZmlncyA9IHN0YXRpY19jYXN0PEVHTENvbmZpZyo+KG1hbGxvYyhudW1Db25maWdzICogc2l6
ZW9mKEVHTENvbmZpZykpKTsKIAotICAgIGlmIChudW1Db25maWdzICE9IDEpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJFR0xDaG9vc2VDb25maWcgZGlkbid0IHJldHVybiBleGFjdGx5IG9uZSBjb25m
aWcgYnV0ICglZCkuIiwgbnVtQ29uZmlncyk7Ci0gICAgICAgIGNvbmZpZyA9IDA7CisgICAgaWYg
KCFjb25maWdzKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkuIik7CisgICAgICAgIHJldHVybiBjb25maWc7CiAgICAgfQogCisgICAgZWdsR2V0
Q29uZmlncyhtX3NoYXJlZERpc3BsYXksIGNvbmZpZ3MsIG51bUNvbmZpZ3MsICZudW1Db25maWdz
KTsKKworICAgIGlmICghbnVtQ29uZmlncykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byByZXRyaWV2ZSBhbnkgRUdMIGNvbmZpZ3MuIik7CisgICAgICAgIGZyZWUoY29uZmlncyk7Cisg
ICAgICAgIHJldHVybiBjb25maWc7CisgICAgfQorCisgICAgRUdMaW50IGFscGhhLCBzdXJmYWNl
cywgcmVkLCBncmVlbiwgYmx1ZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db25maWdzOyBp
KyspIHsKKyAgICAgICAgRUdMQ29uZmlnIHRlbXBDb25maWcgPSBjb25maWdzW2ldOworICAgICAg
ICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfQUxQ
SEFfU0laRSwgJmFscGhhKTsKKworICAgICAgICBpZiAoYWxwaGEgIT0gY29uZmlnQXR0cmlidXRl
TGlzdFsxMV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdB
dHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfUkVEX1NJWkUsICZyZWQpOwor
CisgICAgICAgIGlmIChyZWQgIT0gY29uZmlnQXR0cmlidXRlTGlzdFszXSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXks
IHRlbXBDb25maWcsIEVHTF9HUkVFTl9TSVpFLCAmZ3JlZW4pOworCisgICAgICAgIGlmIChncmVl
biAhPSBjb25maWdBdHRyaWJ1dGVMaXN0WzVdKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdM
X0JMVUVfU0laRSwgJmJsdWUpOworCisgICAgICAgIGlmIChibHVlICE9IGNvbmZpZ0F0dHJpYnV0
ZUxpc3RbN10pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdB
dHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfU1VSRkFDRV9UWVBFLCAmc3Vy
ZmFjZXMpOworCisgICAgICAgIGlmIChzdXJmYWNlcyAmIGNvbmZpZ0F0dHJpYnV0ZUxpc3RbMTNd
KSB7CisgICAgICAgICAgICBjb25maWcgPSBjb25maWdzW2ldOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1T
dXJmYWNlOjpTdXBwb3J0QWxwaGEpICYmICFjb25maWcpIHsKKyAgICAgICAgbV9hdHRyaWJ1dGVz
ICY9IH5HTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhOworICAgICAgICBjb25maWcgPSBj
b25maWdzWzBdOworICAgIH0KKworICAgIGZyZWUoY29uZmlncyk7CisKICAgICByZXR1cm4gY29u
ZmlnOwogfQogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggODg1NjQyOS4uOTIy
YjM5NCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaApAQCAtMzEsNjEgKzMxLDMwIEBA
CiAjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgogI2luY2x1ZGUgPG9wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBEaXNwbGF5IE5hdGl2
ZVNoYXJlZERpc3BsYXk7Ci0KLWNsYXNzIFNoYXJlZEVHTERpc3BsYXkgOiBwdWJsaWMgV1RGOjpS
ZWZDb3VudGVkQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkRUdMRGlzcGxh
eSk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRFR0xEaXNwbGF5PiBj
cmVhdGUoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xE
aXNwbGF5ID0gbmV3IFNoYXJlZEVHTERpc3BsYXkoZGlzcGxheSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheS0+cmVmKCk7Ci0KLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBkZXJlZigpOwotICAgIEVHTERpc3BsYXkgc2hhcmVkRUdMRGlzcGxheSgpIGNvbnN0OwotCi1w
cm90ZWN0ZWQ6Ci0gICAgU2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFyZWREaXNwbGF5Kik7Ci0g
ICAgdm9pZCBjbGVhbnVwKCk7Ci0gICAgdmlydHVhbCB+U2hhcmVkRUdMRGlzcGxheSgpOwotCi0g
ICAgc3RhdGljIFNoYXJlZEVHTERpc3BsYXkqIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheTsKLSAg
ICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKLX07Cit0eXBlZGVmIFZpc3VhbElEIE5hdGl2ZVZp
c3VhbElkOwogCiBjbGFzcyBFR0xDb25maWdTZWxlY3RvciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRUdMQ29uZmlnU2VsZWN0b3IpOwogCiBwdWJsaWM6Ci0gICAgRUdMQ29uZmlnU2VsZWN0
b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzLCBOYXRpdmVTaGFyZWREaXNw
bGF5KiA9IDApOworICAgIEVHTENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJm
YWNlQXR0cmlidXRlcyk7CiAgICAgdmlydHVhbCB+RUdMQ29uZmlnU2VsZWN0b3IoKTsKLSAgICBQ
bGF0Zm9ybURpc3BsYXkgZGlzcGxheSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBC
dWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgcGl4bWFwQ29udGV4
dENvbmZpZygpOwogICAgIHZpcnR1YWwgRUdMQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7
CiAgICAgRUdMaW50IG5hdGl2ZVZpc3VhbElkKGNvbnN0IEVHTENvbmZpZyYpIGNvbnN0OwogICAg
IEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKCkgY29uc3Q7
CiAgICAgdm9pZCByZXNldCgpOwogCiBwcml2YXRlOgotICAgIEVHTENvbmZpZyBjcmVhdGVDb25m
aWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSk7CisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZygp
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgRUdMQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIEVH
TENvbmZpZyBtX3BpeG1hcEZCQ29uZmlnOwogICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250ZXh0
RkJDb25maWc7Ci0gICAgUmVmUHRyPFNoYXJlZEVHTERpc3BsYXk+IG1fc2hhcmVkRGlzcGxheTsK
ICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXMgOiAzOworICAgIFBsYXRmb3JtRGlzcGxheSBtX3No
YXJlZERpc3BsYXk7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzRkYTU4NwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcApAQCAtMCwwICsx
LDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRUdMSGVscGVyLmgiCisKKyNpZiBVU0UoRUdMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBFR0xEaXNwbGF5Q29ubmVjdGlvbiB7CisKKyAgICBFR0xEaXNwbGF5Q29ubmVjdGlv
bihOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChk
aXNwbGF5KQorICAgICAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVy
cHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElT
UExBWSk7CisKKyAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEVHTEJvb2xlYW4g
c3VjY2VzczsKKyAgICAgICAgc3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAw
LCAwKTsKKworICAgICAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJFR0xJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICBtX2Vn
bERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAgfQorCisgICAgICAgIHN1Y2Nlc3Mg
PSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOworCisgICAgICAgIGlmIChzdWNjZXNzICE9IEVH
TF9UUlVFKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSgl
ZCkuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9f
RElTUExBWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5FR0xEaXNwbGF5Q29ubmVjdGlvbigp
CisgICAgeworICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOwor
ICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9CisKKyAgICBFR0xE
aXNwbGF5IGRpc3BsYXkoKSB7IHJldHVybiBtX2VnbERpc3BsYXk7IH0KKworcHJpdmF0ZToKKyAg
ICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKK307CisKK1BsYXRmb3JtRGlzcGxheSBFR0xIZWxw
ZXI6OmVnbERpc3BsYXkoKQoreworICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkg
YmUgYnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24uCisgICAgc3RhdGljIEVHTERpc3BsYXlDb25u
ZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uOworICAgIHJldHVybiBkaXNwbGF5Q29ubmVjdGlvbi5k
aXNwbGF5KCk7Cit9CisKK1BsYXRmb3JtRGlzcGxheSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3Bs
YXkoKQoreworICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0
IHByb2dyYW0gc2h1dGRvd24uCisgICAgc3RhdGljIEVHTERpc3BsYXlDb25uZWN0aW9uIGRpc3Bs
YXlDb25uZWN0aW9uKE5hdGl2ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSk7CisgICAgcmV0dXJu
IGRpc3BsYXlDb25uZWN0aW9uLmRpc3BsYXkoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVy
LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDQwOTgKLS0tIC9kZXYv
bnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TEhlbHBlci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RUdMSGVscGVyX2gKKyNkZWZpbmUgRUdMSGVscGVyX2gKKworI2lmIFVTRShFR0wpCisKKyNpbmNs
dWRlIDxnbHgvWDExSGVscGVyLmg+CisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7Cit0eXBl
ZGVmIERpc3BsYXkgTmF0aXZlU2hhcmVkRGlzcGxheTsKKworY2xhc3MgRUdMSGVscGVyIHsKK3B1
YmxpYzoKKworICAgIHN0YXRpYyBQbGF0Zm9ybURpc3BsYXkgZWdsRGlzcGxheSgpOworICAgIHN0
YXRpYyBQbGF0Zm9ybURpc3BsYXkgZWdsTmF0aXZlRGlzcGxheSgpOworfTsKKworfQorCisjZW5k
aWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAppbmRleCBkYTFkMTdjLi41ZWMxYmJmIDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TFN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHAKQEAgLTI4LDEzICsyOCwxNiBAQAogCiAjaWYgVVNFKEVHTCkg
JiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAKKyNpbmNsdWRlICJFR0xDb25maWdTZWxlY3Rvci5o
IgorI2luY2x1ZGUgIkVHTEhlbHBlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEVHTFdp
bmRvd1RyYW5zcG9ydFN1cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IEdMVHJhbnNw
b3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVzKQogewotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBh
ZG9wdFB0cihuZXcgRUdMQ29uZmlnU2VsZWN0b3IoYXR0cmlidXRlcywgTmF0aXZlV3JhcHBlcjo6
bmF0aXZlRGlzcGxheSgpKSk7Ci0gICAgbV9zaGFyZWREaXNwbGF5ID0gbV9jb25maWdTZWxlY3Rv
ci0+ZGlzcGxheSgpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29u
ZmlnU2VsZWN0b3IoYXR0cmlidXRlcykpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IEVHTEhlbHBl
cjo6ZWdsTmF0aXZlRGlzcGxheSgpOwogCiAgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xf
Tk9fRElTUExBWSkgewogICAgICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKQEAgLTU1
LDcgKzU4LDcgQEAgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWMKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJI
YW5kbGUsIChhdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSksIHZp
c3VhbElkKTsKKyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVm
ZmVySGFuZGxlLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQ
bGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSwgc2l6ZSk7CiAKICAgICBpZiAoIW1fYnVmZmVy
SGFuZGxlKSB7CiAgICAgICAgIGRlc3Ryb3koKTsKQEAgLTg2LDMwICs4OSwyMyBAQCBQbGF0Zm9y
bVN1cmZhY2VDb25maWcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigp
CiAKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQogewotICAg
IGlmICghbV9kcmF3YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRUdMQm9vbGVhbiBzdWNj
ZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKLQotICAgIGlmIChzdWNjZXNzICE9IEVH
TF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS4i
LCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgZGVzdHJveSgpOwotICAgIH0KLQotICAgIHN1Y2Nl
c3MgPSBlZ2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworICAgIEVH
TEJvb2xlYW4gc3VjY2VzcyA9IGVnbFN3YXBCdWZmZXJzKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3
YWJsZSk7CiAKLSAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgIGlmIChzdWNjZXNz
ICE9IEVHTF9UUlVFKQogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBTd2FwQnVmZmVycygl
ZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICB9CiB9CiAKIHZv
aWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpCiB7CiAgICAgR0xUcmFuc3Bv
cnRTdXJmYWNlOjpkZXN0cm95KCk7Ci0gICAgTmF0aXZlV3JhcHBlcjo6ZGVzdHJveVdpbmRvdyht
X2J1ZmZlckhhbmRsZSk7CiAgICAgZnJlZUVHTFJlc291cmNlcygpOwotICAgIG1fYnVmZmVySGFu
ZGxlID0gMDsKKworICAgIGlmIChtX2J1ZmZlckhhbmRsZSkgeworICAgICAgICBOYXRpdmVXcmFw
cGVyOjpkZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICAgICAgbV9idWZmZXJIYW5k
bGUgPSAwOworICAgIH0KKworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCiB2
b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMoKQpAQCAtMTI0
LDggKzEyMCwxMSBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNv
dXJjZXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZWdsRGVzdHJveVN1cmZhY2Uo
bV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKLSAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NV
UkZBQ0U7CisgICAgaWYgKG1fZHJhd2FibGUpIHsKKyAgICAgICAgZWdsRGVzdHJveVN1cmZhY2Uo
bV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IEVHTF9O
T19TVVJGQUNFOworICAgICAgICBlZ2xXYWl0R0woKTsKKyAgICB9CiB9CiAKIHZvaWQgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkK
QEAgLTEzNCw2ICsxMzMsOTggQEAgdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzZXRH
ZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogICAgIE5hdGl2ZVdyYXBwZXI6OnJlc2l6
ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CiB9CiAKK0VHTFBpeG1hcFN1cmZhY2U6
OkVHTFBpeG1hcFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgc3VyZmFjZUF0dHJpYnV0ZXMpCisg
ICAgOiBHTFBsYXRmb3JtU3VyZmFjZShzdXJmYWNlQXR0cmlidXRlcykKK3sKKyAgICBpbml0aWFs
aXplKHN1cmZhY2VBdHRyaWJ1dGVzKTsKK30KKworRUdMUGl4bWFwU3VyZmFjZTo6fkVHTFBpeG1h
cFN1cmZhY2UoKQoreworfQorCitHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMg
RUdMUGl4bWFwU3VyZmFjZTo6YXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
ZmlnU2VsZWN0b3ItPmF0dHJpYnV0ZXMoKTsKK30KKwordm9pZCBFR0xQaXhtYXBTdXJmYWNlOjpp
bml0aWFsaXplKFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7CisgICAgbV9jb25maWdT
ZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihhdHRyaWJ1dGVzKSk7Cisg
ICAgbV9zaGFyZWREaXNwbGF5ID0gRUdMSGVscGVyOjplZ2xOYXRpdmVEaXNwbGF5KCk7CisKKyAg
ICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdM
Q29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKTsK
KworICAgIGlmICghY29uZmlnKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEVHTGludCB2aXN1YWxJZCA9IG1fY29uZmlnU2VsZWN0b3ItPm5hdGl2
ZVZpc3VhbElkKGNvbmZpZyk7CisKKyAgICBpZiAodmlzdWFsSWQgPT0gLTEpIHsKKyAgICAgICAg
ZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTmF0aXZlUGl4bWFwIHBp
eG1hcDsKKyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVQaXhtYXAoJnBpeG1hcCwgdmlzdWFsSWQs
IG1fY29uZmlnU2VsZWN0b3ItPmF0dHJpYnV0ZXMoKSAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBw
b3J0QWxwaGEpOworICAgIG1fYnVmZmVySGFuZGxlID0gcGl4bWFwOworCisgICAgaWYgKCFtX2J1
ZmZlckhhbmRsZSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2RyYXdhYmxlID0gZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShtX3NoYXJlZERpc3Bs
YXksIGNvbmZpZywgKEVHTE5hdGl2ZVBpeG1hcFR5cGUpbV9idWZmZXJIYW5kbGUsIDApOworCisg
ICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNlKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAg
ICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFBp
eG1hcFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQoreworICAgIHJldHVybiBtX2NvbmZpZ1NlbGVj
dG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCk7Cit9CisKK3ZvaWQgRUdMUGl4bWFwU3VyZmFjZTo6
ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNlcygpOworfQorCit2b2lkIEVHTFBpeG1hcFN1
cmZhY2U6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdM
X05PX0RJU1BMQVkgfHwgbV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNp
b24pOworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9kcmF3YWJsZSkgeworICAgICAgICBlZ2xEZXN0
cm95U3VyZmFjZShtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworICAgICAgICBtX2RyYXdh
YmxlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIGVnbFdhaXRHTCgpOworICAgIH0KKworICAg
IGlmIChtX2J1ZmZlckhhbmRsZSkgeworICAgICAgICBOYXRpdmVXcmFwcGVyOjpkZXN0cm95UGl4
bWFwKG1fYnVmZmVySGFuZGxlKTsKKyAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOworICAgIH0K
KworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOworfQorCiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xT
dXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TFN1cmZhY2UuaAppbmRleCAwNWU4YWU2Li5iMjZlNDllIDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaApAQCAt
MjgsNyArMjgsNiBAQAogCiAjaWYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAK
LSNpbmNsdWRlICJFR0xDb25maWdTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdMVHJhbnNwb3J0U3Vy
ZmFjZS5oIgogCiAjaW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgpAQCAtMzgsNiArMzcsOSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIFgxMUhlbHBlciBOYXRpdmVXcmFwcGVyOwor
dHlwZWRlZiBQaXhtYXAgTmF0aXZlUGl4bWFwOworCitjbGFzcyBFR0xDb25maWdTZWxlY3RvcjsK
IAogLy8gQ29udGVudHMgb2YgdGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBuYXRpdmUgd2luZG93
LgogY2xhc3MgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFRyYW5zcG9ydFN1
cmZhY2UgewpAQCAtNTYsNiArNTgsMjEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8RUdMQ29uZmln
U2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCitjbGFzcyBFR0xQaXhtYXBTdXJmYWNl
IDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKKworcHVibGljOgorICAgIEVHTFBpeG1hcFN1
cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgfkVHTFBpeG1hcFN1cmZhY2Uo
KTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKCkgY29uc3Qg
T1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKFN1cmZhY2VBdHRyaWJ1
dGVzKTsKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBPd25QdHI8RUdMQ29uZmlnU2Vs
ZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7Cit9OworCiB9CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195381</attachid>
            <date>2013-03-27 13:08:14 -0700</date>
            <delta_ts>2013-03-27 19:09:21 -0700</delta_ts>
            <desc>patchv2</desc>
            <filename>eglsurface2.patch</filename>
            <type>text/plain</type>
            <size>26184</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2MjZjYTUuLmYwZGQwZTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEz
LTAzLTI2ICBLb25kYXBhbGx5S2FseWFuICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW0VHTF0gQWRkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIG9mZnNjcmVlbiBz
dXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzMzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgZW5hYmxpbmcgRUdMIGFuZCBHTEVTMgorICAgICAg
ICBzdXBwb3J0IGZvciBFRkwgcG9ydC4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHVzaW5n
CisgICAgICAgIEVHTFBpeG1hcFN1cmZhY2UgYXMgYW4gb2Zmc2NyZWVuc3VyZmFjZS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9y
OjpFR0xDb25maWdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rv
cjo6cGl4bWFwQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxl
Y3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmln
U2VsZWN0b3I6Om5hdGl2ZVZpc3VhbElkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1Nl
bGVjdG9yOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rvcjo6Y3Jl
YXRlQ29uZmlnKToKKworICAgICAgICAgQWRkZWQgbG9naWMgdG8gc2VsZWN0IEVHTENvbmZpZyBz
dXBwb3J0aW5nIGFscGhhIGFuZAorICAgICAgICAgb3BhcXVlIGFzIG5lZWRlZC4gTW92ZWQgQ29k
ZSByZWxhdGVkIHRvIGRpc3BsYXkgdG8KKyAgICAgICAgIEVHTEhlbHBlciBjbGFzcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDb25maWdTZWxlY3Rvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xEaXNwbGF5Q29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6RUdMRGlzcGxheUNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5lY3Rpb246On5FR0xEaXNwbGF5
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6ZGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xIZWxwZXI6OmVnbERpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMSGVscGVyOjplZ2xOYXRpdmVEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTEhlbHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xQaXhtYXBTdXJmYWNlOjpFR0xQaXhtYXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6fkVHTFBpeG1hcFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6YXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xQ
aXhtYXBTdXJmYWNlOjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChFR0xQaXhtYXBTdXJmYWNlKToKKworICAgICAgICBFR0xQaXhtYXBTdXJmYWNlIGltcGxlbWVu
dGF0aW9uLgorCiAyMDEzLTAzLTI2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBh
bGx5QGludGVsLmNvbT4KIAogICAgICAgICBbQ29vcmRHZnhdIFN1cHBvcnQgdG8gc2hhcmUgR3Jh
cGhpY3NTdXJmYWNlIGZsYWdzIHdpdGggY2xpZW50LgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGY2N2Q5YTguLjE1M2VjNDQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTMyOSw2ICszMjks
NyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29uZmlnU2VsZWN0b3IuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xIZWxwZXIuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKICAgICAgICAgKQogICAgIGVsc2UgKCkKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5jcHAKaW5kZXggOTE3OGZlZS4uOTk2NzRjMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5j
cHAKQEAgLTQ0LDE1ICs0NCwxNiBAQCBzdGF0aWMgR0xQbGF0Zm9ybVN1cmZhY2UqIG1fY3VycmVu
dERyYXdhYmxlID0gMDsKIAogUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKIHsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2U7CiAjaWYgVVNF
KEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihu
ZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7Ci0KLSAgICBpZiAoc3VyZmFjZS0+
ZHJhd2FibGUoKSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworICAgIHN1cmZh
Y2UgPSBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShhdHRyaWJ1dGVzKTsKKyAgICBzdXJmYWNlID0gYWRvcHRQdHIo
bmV3IEVHTE9mZlNjcmVlblBpeG1hcFN1cmZhY2UoYXR0cmlidXRlcykpOwogI2VuZGlmCiAKKyAg
ICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQorICAgICAgICByZXR1cm4gc3Vy
ZmFjZS5yZWxlYXNlKCk7CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1
cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9H
TFRyYW5zcG9ydFN1cmZhY2UuY3BwCmluZGV4IDA3MTgzMzMuLjdjMjZkMzcgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRT
dXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUGFzc093blB0cjxH
TFRyYW5zcG9ydFN1cmZhY2U+IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3Vy
ZmFjZShjb25zdAogI2lmIFVTRShHTFgpCiAgICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4g
c3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0
ZXMpKTsKICNlbGlmIFVTRShFR0wpCi0gICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gc3Vy
ZmFjZSA9IGFkb3B0UHRyKG5ldyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGF0dHJpYnV0ZXMp
KTsKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOwogI2VuZGlmCiAK
ICAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJs
ZSgpKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAppbmRleCA5YjljMmUwLi5jMzg2
ZWZhIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcApAQCAtMjgsOSArMjgsOSBA
QAogCiAjaWYgVVNFKEVHTCkKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkVHTEhl
bHBlci5oIgogCi1TaGFyZWRFR0xEaXNwbGF5KiBTaGFyZWRFR0xEaXNwbGF5OjptX3N0YXRpY1No
YXJlZEVHTERpc3BsYXkgPSAwOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgRUdMaW50
IGNvbmZpZ0F0dHJpYnV0ZUxpc3RbXSA9IHsKICNpZiBVU0UoT1BFTkdMX0VTXzIpCkBAIC00MSw5
NSArNDEsMzMgQEAgc3RhdGljIEVHTGludCBjb25maWdBdHRyaWJ1dGVMaXN0W10gPSB7CiAgICAg
RUdMX1JFRF9TSVpFLCA4LAogICAgIEVHTF9HUkVFTl9TSVpFLCA4LAogICAgIEVHTF9CTFVFX1NJ
WkUsIDgsCi0gICAgRUdMX1NURU5DSUxfU0laRSwgOCwKKyAgICBFR0xfU1RFTkNJTF9TSVpFLCAw
LAogICAgIEVHTF9BTFBIQV9TSVpFLCAwLAogICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9OT05F
LAogICAgIEVHTF9OT05FCiB9OwogCi12b2lkIFNoYXJlZEVHTERpc3BsYXk6OmRlcmVmKCkKLXsK
LSAgICBpZiAoZGVyZWZCYXNlKCkpIHsKLSAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5
ID0gMDsKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotfQotCi1FR0xEaXNwbGF5IFNoYXJl
ZEVHTERpc3BsYXk6OnNoYXJlZEVHTERpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Vn
bERpc3BsYXk7Ci19Ci0KLVNoYXJlZEVHTERpc3BsYXk6OlNoYXJlZEVHTERpc3BsYXkoTmF0aXZl
U2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICA6IG1fZWdsRGlzcGxheShFR0xfTk9fRElTUExB
WSkKLXsKLSAgICBpZiAoZGlzcGxheSkKLSAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlz
cGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxU
X0RJU1BMQVkpOwotCi0gICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewot
ICAgICAgICBMT0dfRVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRUdMQm9vbGVhbiBzdWNjZXNzOwotICAgIHN1
Y2Nlc3MgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCk7Ci0KLSAgICBpZiAoc3Vj
Y2VzcyAhPSBFR0xfVFJVRSkgewotICAgICAgICBMT0dfRVJST1IoIkVHTEluaXRpYWxpemF0aW9u
IGZhaWxlZC4iKTsKLSAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAg
fQotCi0gICAgc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7Ci0KLSAgICBpZiAo
c3VjY2VzcyAhPSBFR0xfVFJVRSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQg
RUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAgICAgIG1fZWdsRGlzcGxheSA9IEVH
TF9OT19ESVNQTEFZOwotICAgIH0KLX0KLQotdm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpjbGVhbnVw
KCkKLXsKLSAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBlZ2xNYWtlQ3VycmVudChtX2VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNF
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgIGVnbFRlcm1pbmF0ZShtX2Vn
bERpc3BsYXkpOwotICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwotfQotCi1TaGFy
ZWRFR0xEaXNwbGF5Ojp+U2hhcmVkRUdMRGlzcGxheSgpCi17Ci0gICAgY2xlYW51cCgpOwotfQot
Ci1FR0xDb25maWdTZWxlY3Rvcjo6RUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6
OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRpc3Bs
YXkpCi0gICAgOiBtX3BidWZmZXJGQkNvbmZpZygwKQorRUdMQ29uZmlnU2VsZWN0b3I6OkVHTENv
bmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQorICAgIDogbV9waXhtYXBGQkNvbmZpZygwKQogICAgICwgbV9zdXJmYWNlQ29udGV4dEZC
Q29uZmlnKDApCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKIHsKLSAgICBtX3NoYXJl
ZERpc3BsYXkgPSBTaGFyZWRFR0xEaXNwbGF5OjpjcmVhdGUoZGlzcGxheSk7CisgICAgbV9zaGFy
ZWREaXNwbGF5ID0gRUdMSGVscGVyOjplZ2xOYXRpdmVEaXNwbGF5KCk7CiB9CiAKIEVHTENvbmZp
Z1NlbGVjdG9yOjp+RUdMQ29uZmlnU2VsZWN0b3IoKQogewogfQogCi1QbGF0Zm9ybURpc3BsYXkg
RUdMQ29uZmlnU2VsZWN0b3I6OmRpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJl
ZERpc3BsYXktPnNoYXJlZEVHTERpc3BsYXkoKTsKLX0KLQotRUdMQ29uZmlnIEVHTENvbmZpZ1Nl
bGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZygpCitFR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0
b3I6OnBpeG1hcENvbnRleHRDb25maWcoKQogewotICAgIGlmICghbV9wYnVmZmVyRkJDb25maWcp
IHsKKyAgICBpZiAoIW1fcGl4bWFwRkJDb25maWcpIHsKICAgICAgICAgY29uZmlnQXR0cmlidXRl
TGlzdFsxMV0gPSBtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
ID8gOCA6IDA7CiAgICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3RbMTNdID0gRUdMX1BJWE1BUF9C
SVQ7Ci0gICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gY3JlYXRlQ29uZmlnKGNvbmZpZ0F0dHJp
YnV0ZUxpc3QpOworICAgICAgICBtX3BpeG1hcEZCQ29uZmlnID0gY3JlYXRlQ29uZmlnKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIHJldHVybiBtX3BpeG1h
cEZCQ29uZmlnOwogfQogCiBFR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OnN1cmZhY2VDb250
ZXh0Q29uZmlnKCkKQEAgLTEzNyw3ICs3NSw3IEBAIEVHTENvbmZpZyBFR0xDb25maWdTZWxlY3Rv
cjo6c3VyZmFjZUNvbnRleHRDb25maWcoKQogICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29u
ZmlnKSB7CiAgICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3RbMTFdID0gbV9hdHRyaWJ1dGVzICYg
R0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSA/IDggOiAwOwogICAgICAgICBjb25maWdB
dHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOwotICAgICAgICBtX3N1cmZhY2VDb250
ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0cmlidXRlTGlzdCk7CisgICAgICAg
IG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IGNyZWF0ZUNvbmZpZygpOwogICAgIH0KIAogICAg
IHJldHVybiBtX3N1cmZhY2VDb250ZXh0RkJDb25maWc7CkBAIC0xNDUsMTEgKzgzLDExIEBAIEVH
TENvbmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcoKQogCiBFR0xp
bnQgRUdMQ29uZmlnU2VsZWN0b3I6Om5hdGl2ZVZpc3VhbElkKGNvbnN0IEVHTENvbmZpZyYgY29u
ZmlnKSBjb25zdAogewotICAgIGlmIChkaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAg
aWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKICAgICAgICAgcmV0dXJuIC0x
OwogCiAgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKLSAgICBlZ2xHZXRDb25maWdBdHRyaWIoZGlz
cGxheSgpLCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lELCAmZWdsVmFsdWUpOworICAgIGVn
bEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIGNvbmZpZywgRUdMX05BVElWRV9WSVNV
QUxfSUQsICZlZ2xWYWx1ZSk7CiAKICAgICByZXR1cm4gZWdsVmFsdWU7CiB9CkBAIC0xNjIsMjUg
KzEwMCw3OSBAQCBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMQ29uZmln
U2VsZWN0b3I6OmF0dHJpYnV0ZXMoKSBjb25zdAogdm9pZCBFR0xDb25maWdTZWxlY3Rvcjo6cmVz
ZXQoKQogewogICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgbV9wYnVmZmVy
RkJDb25maWcgPSAwOworICAgIG1fcGl4bWFwRkJDb25maWcgPSAwOwogfQogCi1FR0xDb25maWcg
RUdMQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQor
RUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpjcmVhdGVDb25maWcoKQogewotICAgIGlmIChk
aXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBF
R0xfTk9fRElTUExBWSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgbnVtQ29uZmlnczsK
KyAgICBFR0xDb25maWcqIGNvbmZpZ3M7CisgICAgRUdMaW50IG51bUNvbmZpZ3MsIGk7CiAgICAg
RUdMQ29uZmlnIGNvbmZpZyA9IDA7CiAKLSAgICBpZiAoIWVnbENob29zZUNvbmZpZyhkaXNwbGF5
KCksIGF0dHJpYnV0ZXMsICZjb25maWcsIDEsICZudW1Db25maWdzKSkKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gZ2V0IHN1cHBvcnRlZCBjb25maWdpcmF0aW9ucy4iKTsKKyAgICBlZ2xH
ZXRDb25maWdzKG1fc2hhcmVkRGlzcGxheSwgMCwgMCwgJm51bUNvbmZpZ3MpOworCisgICAgaWYg
KCFudW1Db25maWdzKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGFu
eSBFR0wgY29uZmlncy4iKTsKKyAgICAgICAgcmV0dXJuIGNvbmZpZzsKKyAgICB9CisKKyAgICBj
b25maWdzID0gc3RhdGljX2Nhc3Q8RUdMQ29uZmlnKj4obWFsbG9jKG51bUNvbmZpZ3MgKiBzaXpl
b2YoRUdMQ29uZmlnKSkpOwogCi0gICAgaWYgKG51bUNvbmZpZ3MgIT0gMSkgewotICAgICAgICBM
T0dfRVJST1IoIkVHTENob29zZUNvbmZpZyBkaWRuJ3QgcmV0dXJuIGV4YWN0bHkgb25lIGNvbmZp
ZyBidXQgKCVkKS4iLCBudW1Db25maWdzKTsKLSAgICAgICAgY29uZmlnID0gMDsKKyAgICBpZiAo
IWNvbmZpZ3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeS4iKTsKKyAgICAgICAgcmV0dXJuIGNvbmZpZzsKICAgICB9CiAKKyAgICBlZ2xHZXRD
b25maWdzKG1fc2hhcmVkRGlzcGxheSwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3Mp
OworCisgICAgaWYgKCFudW1Db25maWdzKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJldHJpZXZlIGFueSBFR0wgY29uZmlncy4iKTsKKyAgICAgICAgZnJlZShjb25maWdzKTsKKyAg
ICAgICAgcmV0dXJuIGNvbmZpZzsKKyAgICB9CisKKyAgICBFR0xpbnQgYWxwaGEsIHN1cmZhY2Vz
LCByZWQsIGdyZWVuLCBibHVlOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkr
KykgeworICAgICAgICBFR0xDb25maWcgdGVtcENvbmZpZyA9IGNvbmZpZ3NbaV07CisgICAgICAg
IGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9BTFBI
QV9TSVpFLCAmYWxwaGEpOworCisgICAgICAgIGlmIChhbHBoYSAhPSBjb25maWdBdHRyaWJ1dGVM
aXN0WzExXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0
dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9SRURfU0laRSwgJnJlZCk7CisK
KyAgICAgICAgaWYgKHJlZCAhPSBjb25maWdBdHRyaWJ1dGVMaXN0WzNdKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwg
dGVtcENvbmZpZywgRUdMX0dSRUVOX1NJWkUsICZncmVlbik7CisKKyAgICAgICAgaWYgKGdyZWVu
ICE9IGNvbmZpZ0F0dHJpYnV0ZUxpc3RbNV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xf
QkxVRV9TSVpFLCAmYmx1ZSk7CisKKyAgICAgICAgaWYgKGJsdWUgIT0gY29uZmlnQXR0cmlidXRl
TGlzdFs3XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0
dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9TVVJGQUNFX1RZUEUsICZzdXJm
YWNlcyk7CisKKyAgICAgICAgaWYgKHN1cmZhY2VzICYgY29uZmlnQXR0cmlidXRlTGlzdFsxM10p
IHsKKyAgICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZ3NbaV07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgobV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1
cmZhY2U6OlN1cHBvcnRBbHBoYSkgJiYgIWNvbmZpZykgeworICAgICAgICBtX2F0dHJpYnV0ZXMg
Jj0gfkdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGE7CisgICAgICAgIGNvbmZpZyA9IGNv
bmZpZ3NbMF07CisgICAgfQorCisgICAgZnJlZShjb25maWdzKTsKKwogICAgIHJldHVybiBjb25m
aWc7CiB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaAppbmRleCA4ODU2NDI5Li45MjJi
Mzk0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oCkBAIC0zMSw2MSArMzEsMzAgQEAK
ICNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CiAjaW5jbHVkZSA8b3BlbmdsL0dMUGxhdGZvcm1T
dXJmYWNlLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIERpc3BsYXkgTmF0aXZl
U2hhcmVkRGlzcGxheTsKLQotY2xhc3MgU2hhcmVkRUdMRGlzcGxheSA6IHB1YmxpYyBXVEY6OlJl
ZkNvdW50ZWRCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRFR0xEaXNwbGF5
KTsKLQotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEVHTERpc3BsYXk+IGNy
ZWF0ZShOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQotICAgIHsKLSAgICAgICAgaWYgKCFt
X3N0YXRpY1NoYXJlZEVHTERpc3BsYXkpCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERp
c3BsYXkgPSBuZXcgU2hhcmVkRUdMRGlzcGxheShkaXNwbGF5KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5LT5yZWYoKTsKLQotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KTsKLSAgICB9Ci0KLSAgICB2b2lk
IGRlcmVmKCk7Ci0gICAgRUdMRGlzcGxheSBzaGFyZWRFR0xEaXNwbGF5KCkgY29uc3Q7Ci0KLXBy
b3RlY3RlZDoKLSAgICBTaGFyZWRFR0xEaXNwbGF5KE5hdGl2ZVNoYXJlZERpc3BsYXkqKTsKLSAg
ICB2b2lkIGNsZWFudXAoKTsKLSAgICB2aXJ0dWFsIH5TaGFyZWRFR0xEaXNwbGF5KCk7Ci0KLSAg
ICBzdGF0aWMgU2hhcmVkRUdMRGlzcGxheSogbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5OwotICAg
IEVHTERpc3BsYXkgbV9lZ2xEaXNwbGF5OwotfTsKK3R5cGVkZWYgVmlzdWFsSUQgTmF0aXZlVmlz
dWFsSWQ7CiAKIGNsYXNzIEVHTENvbmZpZ1NlbGVjdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShFR0xDb25maWdTZWxlY3Rvcik7CiAKIHB1YmxpYzoKLSAgICBFR0xDb25maWdTZWxlY3Rv
cihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMsIE5hdGl2ZVNoYXJlZERpc3Bs
YXkqID0gMCk7CisgICAgRUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZh
Y2VBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5FR0xDb25maWdTZWxlY3RvcigpOwotICAgIFBs
YXRmb3JtRGlzcGxheSBkaXNwbGF5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBFR0xDb25maWcgcEJ1
ZmZlckNvbnRleHRDb25maWcoKTsKKyAgICB2aXJ0dWFsIEVHTENvbmZpZyBwaXhtYXBDb250ZXh0
Q29uZmlnKCk7CiAgICAgdmlydHVhbCBFR0xDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKTsK
ICAgICBFR0xpbnQgbmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJikgY29uc3Q7CiAgICAg
R0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdDsK
ICAgICB2b2lkIHJlc2V0KCk7CiAKIHByaXZhdGU6Ci0gICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZp
Zyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKTsKKyAgICBFR0xDb25maWcgY3JlYXRlQ29uZmlnKCk7
CiAKIHByb3RlY3RlZDoKLSAgICBFR0xDb25maWcgbV9wYnVmZmVyRkJDb25maWc7CisgICAgRUdM
Q29uZmlnIG1fcGl4bWFwRkJDb25maWc7CiAgICAgRUdMQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRG
QkNvbmZpZzsKLSAgICBSZWZQdHI8U2hhcmVkRUdMRGlzcGxheT4gbV9zaGFyZWREaXNwbGF5Owog
ICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlcyA6IDM7CisgICAgUGxhdGZvcm1EaXNwbGF5IG1fc2hh
cmVkRGlzcGxheTsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zNGRhNTg3Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIuY3BwCkBAIC0wLDAgKzEs
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJFR0xIZWxwZXIuaCIKKworI2lmIFVTRShFR0wpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RydWN0IEVHTERpc3BsYXlDb25uZWN0aW9uIHsKKworICAgIEVHTERpc3BsYXlDb25uZWN0aW9u
KE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRpc3BsYXkgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGRp
c3BsYXkpCisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KHJlaW50ZXJw
cmV0X2Nhc3Q8RUdMTmF0aXZlRGlzcGxheVR5cGU+KGRpc3BsYXkpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQ
TEFZKTsKKworICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRUdMQm9vbGVhbiBz
dWNjZXNzOworICAgICAgICBzdWNjZXNzID0gZWdsSW5pdGlhbGl6ZShtX2VnbERpc3BsYXksIDAs
IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAgICAgICBM
T0dfRVJST1IoIkVHTEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIG1fZWds
RGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgICAgICB9CisKKyAgICAgICAgc3VjY2VzcyA9
IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgIT0gRUdM
X1RSVUUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVk
KS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19E
SVNQTEFZOworICAgICAgICB9CisgICAgfQorCisgICAgfkVHTERpc3BsYXlDb25uZWN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgZWdsVGVybWluYXRlKG1fZWdsRGlzcGxheSk7Cisg
ICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgIH0KKworICAgIEVHTERp
c3BsYXkgZGlzcGxheSgpIHsgcmV0dXJuIG1fZWdsRGlzcGxheTsgfQorCitwcml2YXRlOgorICAg
IEVHTERpc3BsYXkgbV9lZ2xEaXNwbGF5OworfTsKKworUGxhdGZvcm1EaXNwbGF5IEVHTEhlbHBl
cjo6ZWdsRGlzcGxheSgpCit7CisgICAgLy8gRGlzcGxheSBjb25uZWN0aW9uIHdpbGwgb25seSBi
ZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4KKyAgICBzdGF0aWMgRUdMRGlzcGxheUNvbm5l
Y3Rpb24gZGlzcGxheUNvbm5lY3Rpb247CisgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9uLmRp
c3BsYXkoKTsKK30KKworUGxhdGZvcm1EaXNwbGF5IEVHTEhlbHBlcjo6ZWdsTmF0aXZlRGlzcGxh
eSgpCit7CisgICAgLy8gRGlzcGxheSBjb25uZWN0aW9uIHdpbGwgb25seSBiZSBicm9rZW4gYXQg
cHJvZ3JhbSBzaHV0ZG93bi4KKyAgICBzdGF0aWMgRUdMRGlzcGxheUNvbm5lY3Rpb24gZGlzcGxh
eUNvbm5lY3Rpb24oTmF0aXZlV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpKTsKKyAgICByZXR1cm4g
ZGlzcGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIu
aCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkNDA5OAotLS0gL2Rldi9u
dWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
SGVscGVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBF
R0xIZWxwZXJfaAorI2RlZmluZSBFR0xIZWxwZXJfaAorCisjaWYgVVNFKEVHTCkKKworI2luY2x1
ZGUgPGdseC9YMTFIZWxwZXIuaD4KKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsKK3R5cGVk
ZWYgRGlzcGxheSBOYXRpdmVTaGFyZWREaXNwbGF5OworCitjbGFzcyBFR0xIZWxwZXIgeworcHVi
bGljOgorCisgICAgc3RhdGljIFBsYXRmb3JtRGlzcGxheSBlZ2xEaXNwbGF5KCk7CisgICAgc3Rh
dGljIFBsYXRmb3JtRGlzcGxheSBlZ2xOYXRpdmVEaXNwbGF5KCk7Cit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCmluZGV4IGRhMWQxN2MuLmYwNjQyNzUgMTAw
NjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
U3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xTdXJmYWNlLmNwcApAQCAtMjgsMTMgKzI4LDE2IEBACiAKICNpZiBVU0UoRUdMKSAm
JiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKIAorI2luY2x1ZGUgIkVHTENvbmZpZ1NlbGVjdG9yLmgi
CisjaW5jbHVkZSAiRUdMSGVscGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRT
aXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogR0xUcmFuc3Bv
cnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMpCiB7Ci0gICAgbV9jb25maWdTZWxlY3RvciA9IGFk
b3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihhdHRyaWJ1dGVzLCBOYXRpdmVXcmFwcGVyOjpu
YXRpdmVEaXNwbGF5KCkpKTsKLSAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2NvbmZpZ1NlbGVjdG9y
LT5kaXNwbGF5KCk7CisgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25m
aWdTZWxlY3RvcihhdHRyaWJ1dGVzKSk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gRUdMSGVscGVy
OjplZ2xOYXRpdmVEaXNwbGF5KCk7CiAKICAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9O
T19ESVNQTEFZKSB7CiAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwpAQCAtNTUs
NyArNTgsNyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRT
dXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgTmF0aXZlV3JhcHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhh
bmRsZSwgKGF0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhKSwgdmlz
dWFsSWQpOworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZm
ZXJIYW5kbGUsIHZpc3VhbElkLCBtX2NvbmZpZ1NlbGVjdG9yLT5hdHRyaWJ1dGVzKCkgJiBHTFBs
YXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhLCBzaXplKTsKIAogICAgIGlmICghbV9idWZmZXJI
YW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpAQCAtODYsMzAgKzg5LDIxIEBAIFBsYXRmb3Jt
U3VyZmFjZUNvbmZpZyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkK
IAogdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiB7Ci0gICAg
aWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFR0xCb29sZWFuIHN1Y2Nl
c3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOwotCi0gICAgaWYgKHN1Y2Nlc3MgIT0gRUdM
X1RSVUUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLiIs
IGVnbEdldEVycm9yKCkpOwotICAgICAgICBkZXN0cm95KCk7Ci0gICAgfQotCi0gICAgc3VjY2Vz
cyA9IGVnbFN3YXBCdWZmZXJzKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0KLSAgICBp
ZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgIGlmICghZWdsU3dhcEJ1ZmZlcnMobV9zaGFy
ZWREaXNwbGF5LCBtX2RyYXdhYmxlKSkKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gU3dh
cEJ1ZmZlcnMoJWQpLiIsIGVnbEdldEVycm9yKCkpOwotICAgICAgICBkZXN0cm95KCk7Ci0gICAg
fQogfQogCiB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQogewogICAg
IEdMVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpOwotICAgIE5hdGl2ZVdyYXBwZXI6OmRlc3Ry
b3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwogICAgIGZyZWVFR0xSZXNvdXJjZXMoKTsKLSAgICBt
X2J1ZmZlckhhbmRsZSA9IDA7CisKKyAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAg
TmF0aXZlV3JhcHBlcjo6ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIG1f
YnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0
cjsKIH0KIAogdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2Vz
KCkKQEAgLTExNywxNSArMTExLDE1IEBAIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6
ZnJlZUVHTFJlc291cmNlcygpCiAgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0Ug
fHwgbV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQogICAgICAgICByZXR1cm47CiAK
LSAgICBFR0xCb29sZWFuIGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7Ci0K
LSAgICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgaWYgKCFlZ2xCaW5kQVBJKGVn
bEFQSVZlcnNpb24pKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJ
KCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVn
bERlc3Ryb3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0gICAgbV9kcmF3
YWJsZSA9IEVHTF9OT19TVVJGQUNFOworICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIGVn
bERlc3Ryb3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1f
ZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CiB9CiAKIHZvaWQgRUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKQEAgLTEz
NCw2ICsxMjgsOTUgQEAgdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRy
eShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogICAgIE5hdGl2ZVdyYXBwZXI6OnJlc2l6ZVdpbmRv
dyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CiB9CiAKK0VHTFBpeG1hcFN1cmZhY2U6OkVHTFBp
eG1hcFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgc3VyZmFjZUF0dHJpYnV0ZXMpCisgICAgOiBH
TFBsYXRmb3JtU3VyZmFjZShzdXJmYWNlQXR0cmlidXRlcykKK3sKKyAgICBpbml0aWFsaXplKHN1
cmZhY2VBdHRyaWJ1dGVzKTsKK30KKworRUdMUGl4bWFwU3VyZmFjZTo6fkVHTFBpeG1hcFN1cmZh
Y2UoKQoreworfQorCitHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMUGl4
bWFwU3VyZmFjZTo6YXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZmlnU2Vs
ZWN0b3ItPmF0dHJpYnV0ZXMoKTsKK30KKwordm9pZCBFR0xQaXhtYXBTdXJmYWNlOjppbml0aWFs
aXplKFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7CisgICAgbV9jb25maWdTZWxlY3Rv
ciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihhdHRyaWJ1dGVzKSk7CisgICAgbV9z
aGFyZWREaXNwbGF5ID0gRUdMSGVscGVyOjplZ2xOYXRpdmVEaXNwbGF5KCk7CisKKyAgICBpZiAo
bV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAgIG1fY29uZmlnU2Vs
ZWN0b3IgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKTsKKworICAg
IGlmICghY29uZmlnKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEVHTGludCB2aXN1YWxJZCA9IG1fY29uZmlnU2VsZWN0b3ItPm5hdGl2ZVZpc3Vh
bElkKGNvbmZpZyk7CisKKyAgICBpZiAodmlzdWFsSWQgPT0gLTEpIHsKKyAgICAgICAgZGVzdHJv
eSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTmF0aXZlUGl4bWFwIHBpeG1hcDsK
KyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVQaXhtYXAoJnBpeG1hcCwgdmlzdWFsSWQsIG1fY29u
ZmlnU2VsZWN0b3ItPmF0dHJpYnV0ZXMoKSAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxw
aGEpOworICAgIG1fYnVmZmVySGFuZGxlID0gcGl4bWFwOworCisgICAgaWYgKCFtX2J1ZmZlckhh
bmRsZSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2RyYXdhYmxlID0gZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShtX3NoYXJlZERpc3BsYXksIGNv
bmZpZywgKEVHTE5hdGl2ZVBpeG1hcFR5cGUpbV9idWZmZXJIYW5kbGUsIDApOworCisgICAgaWYg
KG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNlKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAg
ZGVzdHJveSgpOworICAgIH0KK30KKworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFBpeG1hcFN1
cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQoreworICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5w
aXhtYXBDb250ZXh0Q29uZmlnKCk7Cit9CisKK3ZvaWQgRUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJv
eSgpCit7CisgICAgZnJlZVJlc291cmNlcygpOworfQorCit2b2lkIEVHTFBpeG1hcFN1cmZhY2U6
OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJ
U1BMQVkgfHwgbV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2RyYXdhYmxlKSB7CisgICAgICAgIGVnbERlc3Ry
b3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2Fi
bGUgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CisKKyAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsK
KyAgICAgICAgTmF0aXZlV3JhcHBlcjo6ZGVzdHJveVBpeG1hcChtX2J1ZmZlckhhbmRsZSk7Cisg
ICAgICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBtX2NvbmZpZ1NlbGVjdG9y
ID0gbnVsbHB0cjsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKaW5kZXggMDVlOGFl
Ni4uYjI2ZTQ5ZSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIFVT
RShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQogCi0jaW5jbHVkZSAiRUdMQ29uZmlnU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJHTFRyYW5zcG9ydFN1cmZhY2UuaCIKIAogI2luY2x1ZGUgPGds
eC9YMTFIZWxwZXIuaD4KQEAgLTM4LDYgKzM3LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsKK3R5cGVkZWYgUGl4bWFwIE5hdGl2ZVBp
eG1hcDsKKworY2xhc3MgRUdMQ29uZmlnU2VsZWN0b3I7CiAKIC8vIENvbnRlbnRzIG9mIHRoZSBz
dXJmYWNlIGFyZSBiYWNrZWQgYnkgbmF0aXZlIHdpbmRvdy4KIGNsYXNzIEVHTFdpbmRvd1RyYW5z
cG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJmYWNlIHsKQEAgLTU2LDYgKzU4LDIx
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVj
dG9yOwogfTsKIAorY2xhc3MgRUdMUGl4bWFwU3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3Vy
ZmFjZSB7CisKK3B1YmxpYzoKKyAgICBFR0xQaXhtYXBTdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVz
KTsKKyAgICB2aXJ0dWFsIH5FR0xQaXhtYXBTdXJmYWNlKCk7CisgICAgdmlydHVhbCBQbGF0Zm9y
bVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBHTFBsYXRmb3JtU3VyZmFjZTo6U3Vy
ZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcygpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgor
ICAgIHZvaWQgaW5pdGlhbGl6ZShTdXJmYWNlQXR0cmlidXRlcyk7CisgICAgdm9pZCBmcmVlUmVz
b3VyY2VzKCk7CisgICAgT3duUHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9y
OworfTsKKwogfQogCiAjZW5kaWYK
</data>
<flag name="review"
          id="217258"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195459</attachid>
            <date>2013-03-27 19:09:21 -0700</date>
            <delta_ts>2013-03-27 20:36:03 -0700</delta_ts>
            <desc>patchv3</desc>
            <filename>surfacereview.patch</filename>
            <type>text/plain</type>
            <size>27316</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2MjZjYTUuLmYwZGQwZTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEz
LTAzLTI2ICBLb25kYXBhbGx5S2FseWFuICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW0VHTF0gQWRkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIG9mZnNjcmVlbiBz
dXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzMzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgZW5hYmxpbmcgRUdMIGFuZCBHTEVTMgorICAgICAg
ICBzdXBwb3J0IGZvciBFRkwgcG9ydC4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHVzaW5n
CisgICAgICAgIEVHTFBpeG1hcFN1cmZhY2UgYXMgYW4gb2Zmc2NyZWVuc3VyZmFjZS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9y
OjpFR0xDb25maWdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rv
cjo6cGl4bWFwQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxl
Y3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmln
U2VsZWN0b3I6Om5hdGl2ZVZpc3VhbElkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1Nl
bGVjdG9yOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rvcjo6Y3Jl
YXRlQ29uZmlnKToKKworICAgICAgICAgQWRkZWQgbG9naWMgdG8gc2VsZWN0IEVHTENvbmZpZyBz
dXBwb3J0aW5nIGFscGhhIGFuZAorICAgICAgICAgb3BhcXVlIGFzIG5lZWRlZC4gTW92ZWQgQ29k
ZSByZWxhdGVkIHRvIGRpc3BsYXkgdG8KKyAgICAgICAgIEVHTEhlbHBlciBjbGFzcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDb25maWdTZWxlY3Rvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xEaXNwbGF5Q29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6RUdMRGlzcGxheUNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5lY3Rpb246On5FR0xEaXNwbGF5
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6ZGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xIZWxwZXI6OmVnbERpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMSGVscGVyOjplZ2xOYXRpdmVEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTEhlbHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xQaXhtYXBTdXJmYWNlOjpFR0xQaXhtYXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6fkVHTFBpeG1hcFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6YXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xQ
aXhtYXBTdXJmYWNlOjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChFR0xQaXhtYXBTdXJmYWNlKToKKworICAgICAgICBFR0xQaXhtYXBTdXJmYWNlIGltcGxlbWVu
dGF0aW9uLgorCiAyMDEzLTAzLTI2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBh
bGx5QGludGVsLmNvbT4KIAogICAgICAgICBbQ29vcmRHZnhdIFN1cHBvcnQgdG8gc2hhcmUgR3Jh
cGhpY3NTdXJmYWNlIGZsYWdzIHdpdGggY2xpZW50LgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGY2N2Q5YTguLjE1M2VjNDQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTMyOSw2ICszMjks
NyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29uZmlnU2VsZWN0b3IuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xIZWxwZXIuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKICAgICAgICAgKQogICAgIGVsc2UgKCkKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5jcHAKaW5kZXggOTE3OGZlZS4uOTk2NzRjMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5j
cHAKQEAgLTQ0LDE1ICs0NCwxNiBAQCBzdGF0aWMgR0xQbGF0Zm9ybVN1cmZhY2UqIG1fY3VycmVu
dERyYXdhYmxlID0gMDsKIAogUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKIHsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2U7CiAjaWYgVVNF
KEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihu
ZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7Ci0KLSAgICBpZiAoc3VyZmFjZS0+
ZHJhd2FibGUoKSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworICAgIHN1cmZh
Y2UgPSBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShhdHRyaWJ1dGVzKTsKKyAgICBzdXJmYWNlID0gYWRvcHRQdHIo
bmV3IEVHTE9mZlNjcmVlblBpeG1hcFN1cmZhY2UoYXR0cmlidXRlcykpOwogI2VuZGlmCiAKKyAg
ICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQorICAgICAgICByZXR1cm4gc3Vy
ZmFjZS5yZWxlYXNlKCk7CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1
cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9H
TFRyYW5zcG9ydFN1cmZhY2UuY3BwCmluZGV4IDA3MTgzMzMuLjdjMjZkMzcgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRT
dXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUGFzc093blB0cjxH
TFRyYW5zcG9ydFN1cmZhY2U+IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3Vy
ZmFjZShjb25zdAogI2lmIFVTRShHTFgpCiAgICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4g
c3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0
ZXMpKTsKICNlbGlmIFVTRShFR0wpCi0gICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gc3Vy
ZmFjZSA9IGFkb3B0UHRyKG5ldyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGF0dHJpYnV0ZXMp
KTsKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOwogI2VuZGlmCiAK
ICAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJs
ZSgpKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAppbmRleCA5YjljMmUwLi44MTc5
YjA5IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcApAQCAtMjgsMTI4ICsyOCw0
NSBAQAogCiAjaWYgVVNFKEVHTCkKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaGFyZWRFR0xE
aXNwbGF5KiBTaGFyZWRFR0xEaXNwbGF5OjptX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkgPSAwOwot
Ci1zdGF0aWMgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZUxpc3RbXSA9IHsKLSNpZiBVU0UoT1BFTkdM
X0VTXzIpCi0gICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotI2Vs
c2UKLSAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0JJVCwKLSNlbmRpZgotICAg
IEVHTF9SRURfU0laRSwgOCwKLSAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0xfQkxVRV9T
SVpFLCA4LAotICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDgsCi0gICAgRUdMX0FMUEhBX1NJWkUsIDAs
Ci0gICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX05PTkUsCi0gICAgRUdMX05PTkUKLX07Ci0KLXZv
aWQgU2hhcmVkRUdMRGlzcGxheTo6ZGVyZWYoKQotewotICAgIGlmIChkZXJlZkJhc2UoKSkgewot
ICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkgPSAwOwotICAgICAgICBkZWxldGUgdGhp
czsKLSAgICB9Ci19Ci0KLUVHTERpc3BsYXkgU2hhcmVkRUdMRGlzcGxheTo6c2hhcmVkRUdMRGlz
cGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWdsRGlzcGxheTsKLX0KLQotU2hhcmVkRUdM
RGlzcGxheTo6U2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQot
ICAgIDogbV9lZ2xEaXNwbGF5KEVHTF9OT19ESVNQTEFZKQotewotICAgIGlmIChkaXNwbGF5KQot
ICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KHJlaW50ZXJwcmV0X2Nhc3Q8RUdM
TmF0aXZlRGlzcGxheVR5cGU+KGRpc3BsYXkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZWdsRGlz
cGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0KLSAgICBpZiAobV9l
Z2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMRGlz
cGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBFR0xCb29sZWFuIHN1Y2Nlc3M7Ci0gICAgc3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9l
Z2xEaXNwbGF5LCAwLCAwKTsKKyNpbmNsdWRlICJFR0xIZWxwZXIuaCIKIAotICAgIGlmIChzdWNj
ZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOwotICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICB9
Ci0KLSAgICBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKLQotICAgIGlmIChz
dWNjZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBF
R0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7Ci0gICAgfQotfQotCi12b2lkIFNoYXJlZEVHTERpc3BsYXk6OmNsZWFudXAo
KQotewotICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGVnbE1ha2VDdXJyZW50KG1fZWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0Us
IEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgZWdsVGVybWluYXRlKG1fZWds
RGlzcGxheSk7Ci0gICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci19Ci0KLVNoYXJl
ZEVHTERpc3BsYXk6On5TaGFyZWRFR0xEaXNwbGF5KCkKLXsKLSAgICBjbGVhbnVwKCk7Ci19Citu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVHTENvbmZpZ1NlbGVjdG9yOjpFR0xDb25maWdTZWxlY3Rv
cihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcywgTmF0aXZl
U2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDApCitFR0xD
b25maWdTZWxlY3Rvcjo6RUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZh
Y2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX3BpeG1hcEZCQ29uZmlnKDApCiAgICAg
LCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQogewotICAgIG1fc2hhcmVkRGlzcGxheSA9IFNoYXJlZEVHTERpc3BsYXk6OmNyZWF0ZShk
aXNwbGF5KTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3Bs
YXkoKTsKIH0KIAogRUdMQ29uZmlnU2VsZWN0b3I6On5FR0xDb25maWdTZWxlY3RvcigpCiB7CiB9
CiAKLVBsYXRmb3JtRGlzcGxheSBFR0xDb25maWdTZWxlY3Rvcjo6ZGlzcGxheSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdMRGlzcGxheSgpOwotfQotCi1F
R0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OnBCdWZmZXJDb250ZXh0Q29uZmlnKCkKK0VHTENv
bmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6cGl4bWFwQ29udGV4dENvbmZpZygpCiB7Ci0gICAgaWYg
KCFtX3BidWZmZXJGQkNvbmZpZykgewotICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzExXSA9
IG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsK
LSAgICAgICAgY29uZmlnQXR0cmlidXRlTGlzdFsxM10gPSBFR0xfUElYTUFQX0JJVDsKLSAgICAg
ICAgbV9wYnVmZmVyRkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0cmlidXRlTGlzdCk7
Ci0gICAgfQorICAgIGlmICghbV9waXhtYXBGQkNvbmZpZykKKyAgICAgICAgbV9waXhtYXBGQkNv
bmZpZyA9IGNyZWF0ZUNvbmZpZyhFR0xfUElYTUFQX0JJVCk7CiAKLSAgICByZXR1cm4gbV9wYnVm
ZmVyRkJDb25maWc7CisgICAgcmV0dXJuIG1fcGl4bWFwRkJDb25maWc7CiB9CiAKIEVHTENvbmZp
ZyBFR0xDb25maWdTZWxlY3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcoKQogewotICAgIGlmICgh
bV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKSB7Ci0gICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3Rb
MTFdID0gbV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSA/IDgg
OiAwOwotICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOwot
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0
cmlidXRlTGlzdCk7Ci0gICAgfQorICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQor
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoRUdMX1dJTkRP
V19CSVQpOwogCiAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKIH0KIAogRUdM
aW50IEVHTENvbmZpZ1NlbGVjdG9yOjpuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmIGNv
bmZpZykgY29uc3QKIHsKLSAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZKQorICAg
IGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybiAt
MTsKIAogICAgIEVHTGludCBlZ2xWYWx1ZSA9IDA7Ci0gICAgZWdsR2V0Q29uZmlnQXR0cmliKGRp
c3BsYXkoKSwgY29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZhbHVlKTsKKyAgICBl
Z2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCBjb25maWcsIEVHTF9OQVRJVkVfVklT
VUFMX0lELCAmZWdsVmFsdWUpOwogCiAgICAgcmV0dXJuIGVnbFZhbHVlOwogfQpAQCAtMTYyLDI1
ICs3OSw5NyBAQCBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMQ29uZmln
U2VsZWN0b3I6OmF0dHJpYnV0ZXMoKSBjb25zdAogdm9pZCBFR0xDb25maWdTZWxlY3Rvcjo6cmVz
ZXQoKQogewogICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgbV9wYnVmZmVy
RkJDb25maWcgPSAwOworICAgIG1fcGl4bWFwRkJDb25maWcgPSAwOwogfQogCi1FR0xDb25maWcg
RUdMQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQor
RUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpjcmVhdGVDb25maWcoRUdMaW50IGV4cGVjdGVk
U3VyZmFjZVR5cGUpCiB7Ci0gICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAg
ICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEVHTENvbmZpZyogY29uZmlnczsKKyAgICBFR0xpbnQgbnVtQ29uZmlnczsKKwor
ICAgIGVnbEdldENvbmZpZ3MobV9zaGFyZWREaXNwbGF5LCAwLCAwLCAmbnVtQ29uZmlncyk7CisK
KyAgICBpZiAoIW51bUNvbmZpZ3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgYW55IEVHTCBjb25maWdzLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBjb25maWdzID0gbmV3IEVHTENvbmZpZ1tudW1Db25maWdzXTsKKworICAgIGlmICghY29uZmln
cykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
LiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlZ2xHZXRDb25maWdzKG1fc2hh
cmVkRGlzcGxheSwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3MpOworCisgICAgaWYg
KCFudW1Db25maWdzKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGFu
eSBFR0wgY29uZmlncy4iKTsKKyAgICAgICAgZGVsZXRlIGNvbmZpZ3M7CiAgICAgICAgIHJldHVy
biAwOworICAgIH0KIAotICAgIGludCBudW1Db25maWdzOwogICAgIEVHTENvbmZpZyBjb25maWcg
PSAwOworICAgIEVHTGludCBhbHBoYSwgc3VyZmFjZSwgcmVkLCBncmVlbiwgYmx1ZSwgcmVuZGVy
VHlwZTsKKyAgICBFR0xpbnQgZXhwZWN0ZWRBbHBoYSA9IG1fYXR0cmlidXRlcyAmIEdMUGxhdGZv
cm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsKKyAgICBFR0xpbnQgZXhwZWN0ZWRSZWQg
PSA4OworICAgIEVHTGludCBleHBlY3RlZEJsdWUgPSA4OworICAgIEVHTGludCBleHBlY3RlZEdy
ZWVuID0gODsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgRUdMaW50IGV4cGVjdGVkUmVuZGVy
VHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKKyNlbHNlCisgICAgRUdMaW50IGV4cGVjdGVkUmVu
ZGVyVHlwZSA9IEVHTF9PUEVOR0xfQklULAorI2VuZGlmCisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUNvbmZpZ3M7IGkrKykgeworICAgICAgICBFR0xDb25maWcgdGVtcENvbmZpZyA9IGNv
bmZpZ3NbaV07CisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRl
bXBDb25maWcsIEVHTF9SRU5ERVJBQkxFX1RZUEUsICZyZW5kZXJUeXBlKTsKKworICAgICAgICBp
ZiAoIShyZW5kZXJUeXBlICYgZXhwZWN0ZWRSZW5kZXJUeXBlKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBD
b25maWcsIEVHTF9BTFBIQV9TSVpFLCAmYWxwaGEpOworCisgICAgICAgIGlmIChhbHBoYSAhPSBl
eHBlY3RlZEFscGhhKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZWdsR2V0Q29u
ZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX1JFRF9TSVpFLCAmcmVk
KTsKKworICAgICAgICBpZiAocmVkICE9IGV4cGVjdGVkUmVkKQorICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICBpZiAoIWVnbENob29zZUNvbmZpZyhkaXNwbGF5KCksIGF0dHJpYnV0ZXMsICZj
b25maWcsIDEsICZudW1Db25maWdzKSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0
IHN1cHBvcnRlZCBjb25maWdpcmF0aW9ucy4iKTsKKyAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmli
KG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX0dSRUVOX1NJWkUsICZncmVlbik7CiAK
LSAgICBpZiAobnVtQ29uZmlncyAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMQ2hvb3Nl
Q29uZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmlnIGJ1dCAoJWQpLiIsIG51bUNv
bmZpZ3MpOwotICAgICAgICBjb25maWcgPSAwOworICAgICAgICBpZiAoZ3JlZW4gIT0gZXhwZWN0
ZWRHcmVlbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0
dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9CTFVFX1NJWkUsICZibHVlKTsK
KworICAgICAgICBpZiAoYmx1ZSAhPSBleHBlY3RlZEJsdWUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29u
ZmlnLCBFR0xfU1VSRkFDRV9UWVBFLCAmc3VyZmFjZSk7CisKKyAgICAgICAgaWYgKHN1cmZhY2Ug
JiBleHBlY3RlZFN1cmZhY2VUeXBlKSB7CisgICAgICAgICAgICBjb25maWcgPSBjb25maWdzW2ld
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoKG1fYXR0
cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEpICYmICFjb25maWcpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgRUdMIGNvbmZpZ2lyYXRpb24g
d2l0aCBhbHBoYS4gVHJ5aW5nIHRvIGZpbmQgb25lIHdpdGhvdXQgYWxwaGEgc3VwcG9ydC4iKTsK
KyAgICAgICAgbV9hdHRyaWJ1dGVzICY9IH5HTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
OworICAgICAgICBjb25maWcgPSBjcmVhdGVDb25maWcoZXhwZWN0ZWRTdXJmYWNlVHlwZSk7Cisg
ICAgfQorCisgICAgaWYgKCFjb25maWcpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZp
bmQgYSB2YWxpZCBFR0wgY29uZmlnaXJhdGlvbi4iKTsKKworICAgIGRlbGV0ZSBjb25maWdzOwor
CiAgICAgcmV0dXJuIGNvbmZpZzsKIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oCmlu
ZGV4IDg4NTY0MjkuLjg2NmNjYWQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKQEAg
LTMxLDYxICszMSwyOCBAQAogI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KICNpbmNsdWRlIDxv
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVk
ZWYgRGlzcGxheSBOYXRpdmVTaGFyZWREaXNwbGF5OwotCi1jbGFzcyBTaGFyZWRFR0xEaXNwbGF5
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNoYXJlZEVHTERpc3BsYXkpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkRUdMRGlzcGxheT4gY3JlYXRlKE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRpc3BsYXkpCi0gICAg
ewotICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSkKLSAgICAgICAgICAgIG1f
c3RhdGljU2hhcmVkRUdMRGlzcGxheSA9IG5ldyBTaGFyZWRFR0xEaXNwbGF5KGRpc3BsYXkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXktPnJlZigp
OwotCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkpOwot
ICAgIH0KLQotICAgIHZvaWQgZGVyZWYoKTsKLSAgICBFR0xEaXNwbGF5IHNoYXJlZEVHTERpc3Bs
YXkoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIFNoYXJlZEVHTERpc3BsYXkoTmF0aXZlU2hh
cmVkRGlzcGxheSopOwotICAgIHZvaWQgY2xlYW51cCgpOwotICAgIHZpcnR1YWwgflNoYXJlZEVH
TERpc3BsYXkoKTsKLQotICAgIHN0YXRpYyBTaGFyZWRFR0xEaXNwbGF5KiBtX3N0YXRpY1NoYXJl
ZEVHTERpc3BsYXk7Ci0gICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Ci19OwotCiBjbGFzcyBF
R0xDb25maWdTZWxlY3RvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmlnU2Vs
ZWN0b3IpOwotCiBwdWJsaWM6Ci0gICAgRUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZh
Y2U6OlN1cmZhY2VBdHRyaWJ1dGVzLCBOYXRpdmVTaGFyZWREaXNwbGF5KiA9IDApOworICAgIEVH
TENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyk7CiAg
ICAgdmlydHVhbCB+RUdMQ29uZmlnU2VsZWN0b3IoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXkgZGlz
cGxheSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmln
KCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgcGl4bWFwQ29udGV4dENvbmZpZygpOwogICAgIHZp
cnR1YWwgRUdMQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CiAgICAgRUdMaW50IG5hdGl2
ZVZpc3VhbElkKGNvbnN0IEVHTENvbmZpZyYpIGNvbnN0OwogICAgIEdMUGxhdGZvcm1TdXJmYWNl
OjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldCgp
OwogCiBwcml2YXRlOgotICAgIEVHTENvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJp
YnV0ZXNbXSk7CisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZygpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgRUdMQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIEVHTENvbmZpZyBtX3BpeG1hcEZC
Q29uZmlnOwogICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250ZXh0RkJDb25maWc7Ci0gICAgUmVm
UHRyPFNoYXJlZEVHTERpc3BsYXk+IG1fc2hhcmVkRGlzcGxheTsKICAgICB1bnNpZ25lZCBtX2F0
dHJpYnV0ZXMgOiAzOworICAgIFBsYXRmb3JtRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7CiB9Owog
CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTEhlbHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzRkYTU4NwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMSGVscGVyLmgiCisK
KyNpZiBVU0UoRUdMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBFR0xEaXNwbGF5
Q29ubmVjdGlvbiB7CisKKyAgICBFR0xEaXNwbGF5Q29ubmVjdGlvbihOYXRpdmVTaGFyZWREaXNw
bGF5KiBkaXNwbGF5ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChkaXNwbGF5KQorICAgICAgICAg
ICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2
ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZWds
RGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisKKyAgICAgICAg
aWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEVHTEJvb2xlYW4gc3VjY2VzczsKKyAgICAgICAg
c3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKKworICAgICAgICBp
ZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9f
RElTUExBWTsKKyAgICAgICAgfQorCisgICAgICAgIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQ
SVZlcnNpb24pOworCisgICAgICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3Io
KSk7CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIH5FR0xEaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAgICBp
ZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgICAgICBtX2VnbERpc3Bs
YXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9CisKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkoKSB7
IHJldHVybiBtX2VnbERpc3BsYXk7IH0KKworcHJpdmF0ZToKKyAgICBFR0xEaXNwbGF5IG1fZWds
RGlzcGxheTsKK307CisKK1BsYXRmb3JtRGlzcGxheSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKQor
eworICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dy
YW0gc2h1dGRvd24uCisgICAgc3RhdGljIEVHTERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25u
ZWN0aW9uOworICAgIHJldHVybiBkaXNwbGF5Q29ubmVjdGlvbi5kaXNwbGF5KCk7Cit9CisKK1Bs
YXRmb3JtRGlzcGxheSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3BsYXkoKQoreworICAgIC8vIERp
c3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24u
CisgICAgc3RhdGljIEVHTERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uKE5hdGl2
ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSk7CisgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9u
LmRpc3BsYXkoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmggU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMzA1ODcKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMSGVscGVyX2gKKyNkZWZp
bmUgRUdMSGVscGVyX2gKKworI2lmIFVTRShFR0wpCisKKyNpbmNsdWRlIDxnbHgvWDExSGVscGVy
Lmg+CisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7Cit0eXBlZGVmIERpc3BsYXkgTmF0aXZl
U2hhcmVkRGlzcGxheTsKKworY2xhc3MgRUdMSGVscGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGxhdGZvcm1EaXNwbGF5IGVnbERpc3BsYXkoKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1EaXNwbGF5
IGVnbE5hdGl2ZURpc3BsYXkoKTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
U3VyZmFjZS5jcHAKaW5kZXggZGExZDE3Yy4uYTY4Nzc4ZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
CkBAIC0yOCwxMyArMjgsMTYgQEAKIAogI2lmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJG
QUNFKQogCisjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJFR0xIZWxw
ZXIuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
OjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0
cmlidXRlcykKIHsKLSAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZp
Z1NlbGVjdG9yKGF0dHJpYnV0ZXMsIE5hdGl2ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSkpOwot
ICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29uZmlnU2VsZWN0b3ItPmRpc3BsYXkoKTsKKyAgICBt
X2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0dHJpYnV0
ZXMpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3BsYXko
KTsKIAogICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKICAgICAg
ICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC01NSwxNCArNTgsMTQgQEAgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRT
aXplJiBzaXplLCBTdXJmYWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5hdGl2ZVdy
YXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIChhdHRyaWJ1dGVz
ICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSksIHZpc3VhbElkKTsKKyAgICBOYXRp
dmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCB2aXN1YWxJ
ZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1
cHBvcnRBbHBoYSwgc2l6ZSk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAg
IGRlc3Ryb3koKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZHJhd2FibGUgPSBl
Z2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9jb25maWdTZWxlY3Rvci0+
c3VyZmFjZUNvbnRleHRDb25maWcoKSwgKEVHTE5hdGl2ZVdpbmRvd1R5cGUpbV9idWZmZXJIYW5k
bGUsIDApOworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVk
RGlzcGxheSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgc3RhdGlj
X2Nhc3Q8RUdMTmF0aXZlV2luZG93VHlwZT4obV9idWZmZXJIYW5kbGUpLCAwKTsKIAogICAgIGlm
IChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CkBAIC04Niwz
MCArODksMjEgQEAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmNvbmZpZ3VyYXRpb24oKQogCiB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3
YXBCdWZmZXJzKCkKIHsKLSAgICBpZiAoIW1fZHJhd2FibGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEVHTEJvb2xlYW4gc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7Ci0KLSAg
ICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAgICAgIGRlc3Ryb3koKTsK
LSAgICB9Ci0KLSAgICBzdWNjZXNzID0gZWdsU3dhcEJ1ZmZlcnMobV9zaGFyZWREaXNwbGF5LCBt
X2RyYXdhYmxlKTsKLQotICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgaWYgKCFl
Z2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpKQogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBTd2FwQnVmZmVycyglZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAg
ICAgIGRlc3Ryb3koKTsKLSAgICB9CiB9CiAKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6ZGVzdHJveSgpCiB7CiAgICAgR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCk7Ci0gICAg
TmF0aXZlV3JhcHBlcjo6ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CiAgICAgZnJlZUVH
TFJlc291cmNlcygpOwotICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKworICAgIGlmIChtX2J1ZmZl
ckhhbmRsZSkgeworICAgICAgICBOYXRpdmVXcmFwcGVyOjpkZXN0cm95V2luZG93KG1fYnVmZmVy
SGFuZGxlKTsKKyAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCiB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmZyZWVFR0xSZXNvdXJjZXMoKQpAQCAtMTE3LDE1ICsxMTEsMTUgQEAgdm9pZCBFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2VzKCkKICAgICBpZiAobV9kcmF3YWJs
ZSA9PSBFR0xfTk9fU1VSRkFDRSB8fCBtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEVHTEJvb2xlYW4gZWdsUmVzdWx0ID0gZWdsQmluZEFQ
SShlZ2xBUElWZXJzaW9uKTsKLQotICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAg
ICBpZiAoIWVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLiIsIGVnbEdldEVycm9yKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2Ry
YXdhYmxlKTsKLSAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgaWYgKG1fZHJh
d2FibGUpIHsKKyAgICAgICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2Ry
YXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IEVHTF9OT19TVVJGQUNFOworICAgIH0KIH0K
IAogdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiBuZXdSZWN0KQpAQCAtMTM0LDYgKzEyOCw5NSBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9y
dFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAgTmF0aXZl
V3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0KIAorRUdM
UGl4bWFwU3VyZmFjZTo6RUdMUGl4bWFwU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBzdXJmYWNl
QXR0cmlidXRlcykKKyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKHN1cmZhY2VBdHRyaWJ1dGVzKQor
eworICAgIGluaXRpYWxpemUoc3VyZmFjZUF0dHJpYnV0ZXMpOworfQorCitFR0xQaXhtYXBTdXJm
YWNlOjp+RUdMUGl4bWFwU3VyZmFjZSgpCit7Cit9CisKK0dMUGxhdGZvcm1TdXJmYWNlOjpTdXJm
YWNlQXR0cmlidXRlcyBFR0xQaXhtYXBTdXJmYWNlOjphdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpOworfQorCit2b2lkIEVHTFBp
eG1hcFN1cmZhY2U6OmluaXRpYWxpemUoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK3sK
KyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0
dHJpYnV0ZXMpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURp
c3BsYXkoKTsKKworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsK
KyAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBFR0xDb25maWcgY29uZmlnID0gbV9jb25maWdTZWxlY3Rvci0+cGl4bWFwQ29u
dGV4dENvbmZpZygpOworCisgICAgaWYgKCFjb25maWcpIHsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMaW50IHZpc3VhbElkID0gbV9jb25maWdT
ZWxlY3Rvci0+bmF0aXZlVmlzdWFsSWQoY29uZmlnKTsKKworICAgIGlmICh2aXN1YWxJZCA9PSAt
MSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBO
YXRpdmVQaXhtYXAgcGl4bWFwOworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZVBpeG1hcCgmcGl4
bWFwLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cHBvcnRBbHBoYSk7CisgICAgbV9idWZmZXJIYW5kbGUgPSBwaXhtYXA7CisK
KyAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNl
KG1fc2hhcmVkRGlzcGxheSwgY29uZmlnLCBzdGF0aWNfY2FzdDxFR0xOYXRpdmVQaXhtYXBUeXBl
PihtX2J1ZmZlckhhbmRsZSksIDApOworCisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NV
UkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNl
KCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKwor
UGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFBpeG1hcFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQor
eworICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCk7Cit9
CisKK3ZvaWQgRUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNl
cygpOworfQorCit2b2lkIEVHTFBpeG1hcFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMoKQoreworICAg
IGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkgfHwgbV9kcmF3YWJsZSA9PSBF
R0xfTk9fU1VSRkFDRSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlZ2xCaW5kQVBJKGVn
bEFQSVZlcnNpb24pKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJ
KCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX2RyYXdhYmxlKSB7CisgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxh
eSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKKyAg
ICB9CisKKyAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgTmF0aXZlV3JhcHBlcjo6
ZGVzdHJveVBpeG1hcChtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIG1fYnVmZmVySGFuZGxlID0g
MDsKKyAgICB9CisKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xTdXJmYWNlLmgKaW5kZXggMDVlOGFlNi4uMTIwNGRlZiAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogCi0jaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNpbmNsdWRlICJHTFRy
YW5zcG9ydFN1cmZhY2UuaCIKIAogI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KQEAgLTM4LDEw
ICszNywxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIFgxMUhlbHBlciBOYXRp
dmVXcmFwcGVyOwordHlwZWRlZiBQaXhtYXAgTmF0aXZlUGl4bWFwOworCitjbGFzcyBFR0xDb25m
aWdTZWxlY3RvcjsKIAogLy8gQ29udGVudHMgb2YgdGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBu
YXRpdmUgd2luZG93LgogY2xhc3MgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBH
TFRyYW5zcG9ydFN1cmZhY2UgewotCiBwdWJsaWM6CiAgICAgRUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMpOwogICAgIHZpcnR1YWwgfkVH
TFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKTsKQEAgLTU2LDYgKzU3LDIwIEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwogfTsKIAorY2xh
c3MgRUdMUGl4bWFwU3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgRUdMUGl4bWFwU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7CisgICAg
dmlydHVhbCB+RUdMUGl4bWFwU3VyZmFjZSgpOworICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNl
Q29uZmlnIGNvbmZpZ3VyYXRpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGluaXRpYWxpemUoU3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIHZvaWQgZnJlZVJlc291cmNlcygp
OworICAgIE93blB0cjxFR0xDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKK307CisK
IH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195474</attachid>
            <date>2013-03-27 20:36:03 -0700</date>
            <delta_ts>2013-03-28 13:59:48 -0700</delta_ts>
            <desc>patchv4</desc>
            <filename>surfacereview.patch</filename>
            <type>text/plain</type>
            <size>27316</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2MjZjYTUuLmYwZGQwZTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEz
LTAzLTI2ICBLb25kYXBhbGx5S2FseWFuICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW0VHTF0gQWRkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIG9mZnNjcmVlbiBz
dXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzMzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgZW5hYmxpbmcgRUdMIGFuZCBHTEVTMgorICAgICAg
ICBzdXBwb3J0IGZvciBFRkwgcG9ydC4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHVzaW5n
CisgICAgICAgIEVHTFBpeG1hcFN1cmZhY2UgYXMgYW4gb2Zmc2NyZWVuc3VyZmFjZS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9y
OjpFR0xDb25maWdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rv
cjo6cGl4bWFwQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxl
Y3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmln
U2VsZWN0b3I6Om5hdGl2ZVZpc3VhbElkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1Nl
bGVjdG9yOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rvcjo6Y3Jl
YXRlQ29uZmlnKToKKworICAgICAgICAgQWRkZWQgbG9naWMgdG8gc2VsZWN0IEVHTENvbmZpZyBz
dXBwb3J0aW5nIGFscGhhIGFuZAorICAgICAgICAgb3BhcXVlIGFzIG5lZWRlZC4gTW92ZWQgQ29k
ZSByZWxhdGVkIHRvIGRpc3BsYXkgdG8KKyAgICAgICAgIEVHTEhlbHBlciBjbGFzcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDb25maWdTZWxlY3Rvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xEaXNwbGF5Q29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6RUdMRGlzcGxheUNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5lY3Rpb246On5FR0xEaXNwbGF5
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6ZGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xIZWxwZXI6OmVnbERpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMSGVscGVyOjplZ2xOYXRpdmVEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTEhlbHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xQaXhtYXBTdXJmYWNlOjpFR0xQaXhtYXBTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6fkVHTFBpeG1hcFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6YXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xQ
aXhtYXBTdXJmYWNlOjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChFR0xQaXhtYXBTdXJmYWNlKToKKworICAgICAgICBFR0xQaXhtYXBTdXJmYWNlIGltcGxlbWVu
dGF0aW9uLgorCiAyMDEzLTAzLTI2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBh
bGx5QGludGVsLmNvbT4KIAogICAgICAgICBbQ29vcmRHZnhdIFN1cHBvcnQgdG8gc2hhcmUgR3Jh
cGhpY3NTdXJmYWNlIGZsYWdzIHdpdGggY2xpZW50LgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGY2N2Q5YTguLjE1M2VjNDQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTMyOSw2ICszMjks
NyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29uZmlnU2VsZWN0b3IuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xIZWxwZXIuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKICAgICAgICAgKQogICAgIGVsc2UgKCkKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5jcHAKaW5kZXggOTE3OGZlZS4uOTk2NzRjMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5j
cHAKQEAgLTQ0LDE1ICs0NCwxNiBAQCBzdGF0aWMgR0xQbGF0Zm9ybVN1cmZhY2UqIG1fY3VycmVu
dERyYXdhYmxlID0gMDsKIAogUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKIHsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2U7CiAjaWYgVVNF
KEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihu
ZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7Ci0KLSAgICBpZiAoc3VyZmFjZS0+
ZHJhd2FibGUoKSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworICAgIHN1cmZh
Y2UgPSBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShhdHRyaWJ1dGVzKTsKKyAgICBzdXJmYWNlID0gYWRvcHRQdHIo
bmV3IEVHTE9mZlNjcmVlblBpeG1hcFN1cmZhY2UoYXR0cmlidXRlcykpOwogI2VuZGlmCiAKKyAg
ICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQorICAgICAgICByZXR1cm4gc3Vy
ZmFjZS5yZWxlYXNlKCk7CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1
cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9H
TFRyYW5zcG9ydFN1cmZhY2UuY3BwCmluZGV4IDA3MTgzMzMuLjdjMjZkMzcgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRT
dXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUGFzc093blB0cjxH
TFRyYW5zcG9ydFN1cmZhY2U+IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3Vy
ZmFjZShjb25zdAogI2lmIFVTRShHTFgpCiAgICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4g
c3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0
ZXMpKTsKICNlbGlmIFVTRShFR0wpCi0gICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gc3Vy
ZmFjZSA9IGFkb3B0UHRyKG5ldyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGF0dHJpYnV0ZXMp
KTsKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOwogI2VuZGlmCiAK
ICAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJs
ZSgpKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAppbmRleCA5YjljMmUwLi44OGIz
ODM4IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcApAQCAtMjgsMTI4ICsyOCw0
NSBAQAogCiAjaWYgVVNFKEVHTCkKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaGFyZWRFR0xE
aXNwbGF5KiBTaGFyZWRFR0xEaXNwbGF5OjptX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkgPSAwOwot
Ci1zdGF0aWMgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZUxpc3RbXSA9IHsKLSNpZiBVU0UoT1BFTkdM
X0VTXzIpCi0gICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotI2Vs
c2UKLSAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0JJVCwKLSNlbmRpZgotICAg
IEVHTF9SRURfU0laRSwgOCwKLSAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0xfQkxVRV9T
SVpFLCA4LAotICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDgsCi0gICAgRUdMX0FMUEhBX1NJWkUsIDAs
Ci0gICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX05PTkUsCi0gICAgRUdMX05PTkUKLX07Ci0KLXZv
aWQgU2hhcmVkRUdMRGlzcGxheTo6ZGVyZWYoKQotewotICAgIGlmIChkZXJlZkJhc2UoKSkgewot
ICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkgPSAwOwotICAgICAgICBkZWxldGUgdGhp
czsKLSAgICB9Ci19Ci0KLUVHTERpc3BsYXkgU2hhcmVkRUdMRGlzcGxheTo6c2hhcmVkRUdMRGlz
cGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWdsRGlzcGxheTsKLX0KLQotU2hhcmVkRUdM
RGlzcGxheTo6U2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQot
ICAgIDogbV9lZ2xEaXNwbGF5KEVHTF9OT19ESVNQTEFZKQotewotICAgIGlmIChkaXNwbGF5KQot
ICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KHJlaW50ZXJwcmV0X2Nhc3Q8RUdM
TmF0aXZlRGlzcGxheVR5cGU+KGRpc3BsYXkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZWdsRGlz
cGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0KLSAgICBpZiAobV9l
Z2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMRGlz
cGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBFR0xCb29sZWFuIHN1Y2Nlc3M7Ci0gICAgc3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9l
Z2xEaXNwbGF5LCAwLCAwKTsKKyNpbmNsdWRlICJFR0xIZWxwZXIuaCIKIAotICAgIGlmIChzdWNj
ZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOwotICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICB9
Ci0KLSAgICBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKLQotICAgIGlmIChz
dWNjZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBF
R0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7Ci0gICAgfQotfQotCi12b2lkIFNoYXJlZEVHTERpc3BsYXk6OmNsZWFudXAo
KQotewotICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGVnbE1ha2VDdXJyZW50KG1fZWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0Us
IEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgZWdsVGVybWluYXRlKG1fZWds
RGlzcGxheSk7Ci0gICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci19Ci0KLVNoYXJl
ZEVHTERpc3BsYXk6On5TaGFyZWRFR0xEaXNwbGF5KCkKLXsKLSAgICBjbGVhbnVwKCk7Ci19Citu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVHTENvbmZpZ1NlbGVjdG9yOjpFR0xDb25maWdTZWxlY3Rv
cihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcywgTmF0aXZl
U2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDApCitFR0xD
b25maWdTZWxlY3Rvcjo6RUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZh
Y2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX3BpeG1hcEZCQ29uZmlnKDApCiAgICAg
LCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQogewotICAgIG1fc2hhcmVkRGlzcGxheSA9IFNoYXJlZEVHTERpc3BsYXk6OmNyZWF0ZShk
aXNwbGF5KTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3Bs
YXkoKTsKIH0KIAogRUdMQ29uZmlnU2VsZWN0b3I6On5FR0xDb25maWdTZWxlY3RvcigpCiB7CiB9
CiAKLVBsYXRmb3JtRGlzcGxheSBFR0xDb25maWdTZWxlY3Rvcjo6ZGlzcGxheSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdMRGlzcGxheSgpOwotfQotCi1F
R0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OnBCdWZmZXJDb250ZXh0Q29uZmlnKCkKK0VHTENv
bmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6cGl4bWFwQ29udGV4dENvbmZpZygpCiB7Ci0gICAgaWYg
KCFtX3BidWZmZXJGQkNvbmZpZykgewotICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzExXSA9
IG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsK
LSAgICAgICAgY29uZmlnQXR0cmlidXRlTGlzdFsxM10gPSBFR0xfUElYTUFQX0JJVDsKLSAgICAg
ICAgbV9wYnVmZmVyRkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0cmlidXRlTGlzdCk7
Ci0gICAgfQorICAgIGlmICghbV9waXhtYXBGQkNvbmZpZykKKyAgICAgICAgbV9waXhtYXBGQkNv
bmZpZyA9IGNyZWF0ZUNvbmZpZyhFR0xfUElYTUFQX0JJVCk7CiAKLSAgICByZXR1cm4gbV9wYnVm
ZmVyRkJDb25maWc7CisgICAgcmV0dXJuIG1fcGl4bWFwRkJDb25maWc7CiB9CiAKIEVHTENvbmZp
ZyBFR0xDb25maWdTZWxlY3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcoKQogewotICAgIGlmICgh
bV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKSB7Ci0gICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3Rb
MTFdID0gbV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSA/IDgg
OiAwOwotICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOwot
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0
cmlidXRlTGlzdCk7Ci0gICAgfQorICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQor
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoRUdMX1dJTkRP
V19CSVQpOwogCiAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKIH0KIAogRUdM
aW50IEVHTENvbmZpZ1NlbGVjdG9yOjpuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmIGNv
bmZpZykgY29uc3QKIHsKLSAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZKQorICAg
IGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybiAt
MTsKIAogICAgIEVHTGludCBlZ2xWYWx1ZSA9IDA7Ci0gICAgZWdsR2V0Q29uZmlnQXR0cmliKGRp
c3BsYXkoKSwgY29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZhbHVlKTsKKyAgICBl
Z2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCBjb25maWcsIEVHTF9OQVRJVkVfVklT
VUFMX0lELCAmZWdsVmFsdWUpOwogCiAgICAgcmV0dXJuIGVnbFZhbHVlOwogfQpAQCAtMTYyLDI1
ICs3OSw5NyBAQCBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMQ29uZmln
U2VsZWN0b3I6OmF0dHJpYnV0ZXMoKSBjb25zdAogdm9pZCBFR0xDb25maWdTZWxlY3Rvcjo6cmVz
ZXQoKQogewogICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgbV9wYnVmZmVy
RkJDb25maWcgPSAwOworICAgIG1fcGl4bWFwRkJDb25maWcgPSAwOwogfQogCi1FR0xDb25maWcg
RUdMQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQor
RUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpjcmVhdGVDb25maWcoRUdMaW50IGV4cGVjdGVk
U3VyZmFjZVR5cGUpCiB7Ci0gICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAg
ICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEVHTENvbmZpZyogY29uZmlnczsKKyAgICBFR0xpbnQgbnVtQ29uZmlnczsKKwor
ICAgIGVnbEdldENvbmZpZ3MobV9zaGFyZWREaXNwbGF5LCAwLCAwLCAmbnVtQ29uZmlncyk7CisK
KyAgICBpZiAoIW51bUNvbmZpZ3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgYW55IEVHTCBjb25maWdzLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBjb25maWdzID0gbmV3IEVHTENvbmZpZ1tudW1Db25maWdzXTsKKworICAgIGlmICghY29uZmln
cykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
LiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlZ2xHZXRDb25maWdzKG1fc2hh
cmVkRGlzcGxheSwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3MpOworCisgICAgaWYg
KCFudW1Db25maWdzKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGFu
eSBFR0wgY29uZmlncy4iKTsKKyAgICAgICAgZGVsZXRlIGNvbmZpZ3M7CiAgICAgICAgIHJldHVy
biAwOworICAgIH0KIAotICAgIGludCBudW1Db25maWdzOwogICAgIEVHTENvbmZpZyBjb25maWcg
PSAwOworICAgIEVHTGludCBhbHBoYSwgc3VyZmFjZSwgcmVkLCBncmVlbiwgYmx1ZSwgcmVuZGVy
VHlwZTsKKyAgICBFR0xpbnQgZXhwZWN0ZWRBbHBoYSA9IG1fYXR0cmlidXRlcyAmIEdMUGxhdGZv
cm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsKKyAgICBFR0xpbnQgZXhwZWN0ZWRSZWQg
PSA4OworICAgIEVHTGludCBleHBlY3RlZEJsdWUgPSA4OworICAgIEVHTGludCBleHBlY3RlZEdy
ZWVuID0gODsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgRUdMaW50IGV4cGVjdGVkUmVuZGVy
VHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKKyNlbHNlCisgICAgRUdMaW50IGV4cGVjdGVkUmVu
ZGVyVHlwZSA9IEVHTF9PUEVOR0xfQklULAorI2VuZGlmCisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUNvbmZpZ3M7IGkrKykgeworICAgICAgICBFR0xDb25maWcgdGVtcENvbmZpZyA9IGNv
bmZpZ3NbaV07CisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRl
bXBDb25maWcsIEVHTF9SRU5ERVJBQkxFX1RZUEUsICZyZW5kZXJUeXBlKTsKKworICAgICAgICBp
ZiAoIShyZW5kZXJUeXBlICYgZXhwZWN0ZWRSZW5kZXJUeXBlKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBD
b25maWcsIEVHTF9BTFBIQV9TSVpFLCAmYWxwaGEpOworCisgICAgICAgIGlmIChhbHBoYSAhPSBl
eHBlY3RlZEFscGhhKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZWdsR2V0Q29u
ZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX1JFRF9TSVpFLCAmcmVk
KTsKKworICAgICAgICBpZiAocmVkICE9IGV4cGVjdGVkUmVkKQorICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICBpZiAoIWVnbENob29zZUNvbmZpZyhkaXNwbGF5KCksIGF0dHJpYnV0ZXMsICZj
b25maWcsIDEsICZudW1Db25maWdzKSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0
IHN1cHBvcnRlZCBjb25maWdpcmF0aW9ucy4iKTsKKyAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmli
KG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX0dSRUVOX1NJWkUsICZncmVlbik7CiAK
LSAgICBpZiAobnVtQ29uZmlncyAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMQ2hvb3Nl
Q29uZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmlnIGJ1dCAoJWQpLiIsIG51bUNv
bmZpZ3MpOwotICAgICAgICBjb25maWcgPSAwOworICAgICAgICBpZiAoZ3JlZW4gIT0gZXhwZWN0
ZWRHcmVlbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0
dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9CTFVFX1NJWkUsICZibHVlKTsK
KworICAgICAgICBpZiAoYmx1ZSAhPSBleHBlY3RlZEJsdWUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29u
ZmlnLCBFR0xfU1VSRkFDRV9UWVBFLCAmc3VyZmFjZSk7CisKKyAgICAgICAgaWYgKHN1cmZhY2Ug
JiBleHBlY3RlZFN1cmZhY2VUeXBlKSB7CisgICAgICAgICAgICBjb25maWcgPSBjb25maWdzW2ld
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoKG1fYXR0
cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEpICYmICFjb25maWcpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgRUdMIENvbmZpZ3VyYXRpb24g
d2l0aCBhbHBoYS4gVHJ5aW5nIHRvIGZpbmQgb25lIHdpdGhvdXQgYWxwaGEgc3VwcG9ydC4iKTsK
KyAgICAgICAgbV9hdHRyaWJ1dGVzICY9IH5HTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
OworICAgICAgICBjb25maWcgPSBjcmVhdGVDb25maWcoZXhwZWN0ZWRTdXJmYWNlVHlwZSk7Cisg
ICAgfQorCisgICAgaWYgKCFjb25maWcpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZp
bmQgYSB2YWxpZCBFR0wgQ29uZmlndXJhdGlvbi4iKTsKKworICAgIGRlbGV0ZSBjb25maWdzOwor
CiAgICAgcmV0dXJuIGNvbmZpZzsKIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oCmlu
ZGV4IDg4NTY0MjkuLjg2NmNjYWQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKQEAg
LTMxLDYxICszMSwyOCBAQAogI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KICNpbmNsdWRlIDxv
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVk
ZWYgRGlzcGxheSBOYXRpdmVTaGFyZWREaXNwbGF5OwotCi1jbGFzcyBTaGFyZWRFR0xEaXNwbGF5
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNoYXJlZEVHTERpc3BsYXkpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkRUdMRGlzcGxheT4gY3JlYXRlKE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRpc3BsYXkpCi0gICAg
ewotICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSkKLSAgICAgICAgICAgIG1f
c3RhdGljU2hhcmVkRUdMRGlzcGxheSA9IG5ldyBTaGFyZWRFR0xEaXNwbGF5KGRpc3BsYXkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXktPnJlZigp
OwotCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkpOwot
ICAgIH0KLQotICAgIHZvaWQgZGVyZWYoKTsKLSAgICBFR0xEaXNwbGF5IHNoYXJlZEVHTERpc3Bs
YXkoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIFNoYXJlZEVHTERpc3BsYXkoTmF0aXZlU2hh
cmVkRGlzcGxheSopOwotICAgIHZvaWQgY2xlYW51cCgpOwotICAgIHZpcnR1YWwgflNoYXJlZEVH
TERpc3BsYXkoKTsKLQotICAgIHN0YXRpYyBTaGFyZWRFR0xEaXNwbGF5KiBtX3N0YXRpY1NoYXJl
ZEVHTERpc3BsYXk7Ci0gICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Ci19OwotCiBjbGFzcyBF
R0xDb25maWdTZWxlY3RvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmlnU2Vs
ZWN0b3IpOwotCiBwdWJsaWM6Ci0gICAgRUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZh
Y2U6OlN1cmZhY2VBdHRyaWJ1dGVzLCBOYXRpdmVTaGFyZWREaXNwbGF5KiA9IDApOworICAgIEVH
TENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyk7CiAg
ICAgdmlydHVhbCB+RUdMQ29uZmlnU2VsZWN0b3IoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXkgZGlz
cGxheSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmln
KCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgcGl4bWFwQ29udGV4dENvbmZpZygpOwogICAgIHZp
cnR1YWwgRUdMQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CiAgICAgRUdMaW50IG5hdGl2
ZVZpc3VhbElkKGNvbnN0IEVHTENvbmZpZyYpIGNvbnN0OwogICAgIEdMUGxhdGZvcm1TdXJmYWNl
OjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldCgp
OwogCiBwcml2YXRlOgotICAgIEVHTENvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJp
YnV0ZXNbXSk7CisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZygpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgRUdMQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIEVHTENvbmZpZyBtX3BpeG1hcEZC
Q29uZmlnOwogICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250ZXh0RkJDb25maWc7Ci0gICAgUmVm
UHRyPFNoYXJlZEVHTERpc3BsYXk+IG1fc2hhcmVkRGlzcGxheTsKICAgICB1bnNpZ25lZCBtX2F0
dHJpYnV0ZXMgOiAzOworICAgIFBsYXRmb3JtRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7CiB9Owog
CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTEhlbHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzRkYTU4NwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMSGVscGVyLmgiCisK
KyNpZiBVU0UoRUdMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBFR0xEaXNwbGF5
Q29ubmVjdGlvbiB7CisKKyAgICBFR0xEaXNwbGF5Q29ubmVjdGlvbihOYXRpdmVTaGFyZWREaXNw
bGF5KiBkaXNwbGF5ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChkaXNwbGF5KQorICAgICAgICAg
ICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2
ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZWds
RGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisKKyAgICAgICAg
aWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEVHTEJvb2xlYW4gc3VjY2VzczsKKyAgICAgICAg
c3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKKworICAgICAgICBp
ZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9f
RElTUExBWTsKKyAgICAgICAgfQorCisgICAgICAgIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQ
SVZlcnNpb24pOworCisgICAgICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3Io
KSk7CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIH5FR0xEaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAgICBp
ZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgICAgICBtX2VnbERpc3Bs
YXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9CisKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkoKSB7
IHJldHVybiBtX2VnbERpc3BsYXk7IH0KKworcHJpdmF0ZToKKyAgICBFR0xEaXNwbGF5IG1fZWds
RGlzcGxheTsKK307CisKK1BsYXRmb3JtRGlzcGxheSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKQor
eworICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dy
YW0gc2h1dGRvd24uCisgICAgc3RhdGljIEVHTERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25u
ZWN0aW9uOworICAgIHJldHVybiBkaXNwbGF5Q29ubmVjdGlvbi5kaXNwbGF5KCk7Cit9CisKK1Bs
YXRmb3JtRGlzcGxheSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3BsYXkoKQoreworICAgIC8vIERp
c3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24u
CisgICAgc3RhdGljIEVHTERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uKE5hdGl2
ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSk7CisgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9u
LmRpc3BsYXkoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmggU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMzA1ODcKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMSGVscGVyX2gKKyNkZWZp
bmUgRUdMSGVscGVyX2gKKworI2lmIFVTRShFR0wpCisKKyNpbmNsdWRlIDxnbHgvWDExSGVscGVy
Lmg+CisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7Cit0eXBlZGVmIERpc3BsYXkgTmF0aXZl
U2hhcmVkRGlzcGxheTsKKworY2xhc3MgRUdMSGVscGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGxhdGZvcm1EaXNwbGF5IGVnbERpc3BsYXkoKTsKKyAgICBzdGF0aWMgUGxhdGZvcm1EaXNwbGF5
IGVnbE5hdGl2ZURpc3BsYXkoKTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
U3VyZmFjZS5jcHAKaW5kZXggZGExZDE3Yy4uYTY4Nzc4ZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
CkBAIC0yOCwxMyArMjgsMTYgQEAKIAogI2lmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJG
QUNFKQogCisjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJFR0xIZWxw
ZXIuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
OjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0
cmlidXRlcykKIHsKLSAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZp
Z1NlbGVjdG9yKGF0dHJpYnV0ZXMsIE5hdGl2ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSkpOwot
ICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29uZmlnU2VsZWN0b3ItPmRpc3BsYXkoKTsKKyAgICBt
X2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0dHJpYnV0
ZXMpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURpc3BsYXko
KTsKIAogICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKICAgICAg
ICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC01NSwxNCArNTgsMTQgQEAgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRT
aXplJiBzaXplLCBTdXJmYWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5hdGl2ZVdy
YXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIChhdHRyaWJ1dGVz
ICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSksIHZpc3VhbElkKTsKKyAgICBOYXRp
dmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCB2aXN1YWxJ
ZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1
cHBvcnRBbHBoYSwgc2l6ZSk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAg
IGRlc3Ryb3koKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZHJhd2FibGUgPSBl
Z2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9jb25maWdTZWxlY3Rvci0+
c3VyZmFjZUNvbnRleHRDb25maWcoKSwgKEVHTE5hdGl2ZVdpbmRvd1R5cGUpbV9idWZmZXJIYW5k
bGUsIDApOworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVk
RGlzcGxheSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgc3RhdGlj
X2Nhc3Q8RUdMTmF0aXZlV2luZG93VHlwZT4obV9idWZmZXJIYW5kbGUpLCAwKTsKIAogICAgIGlm
IChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CkBAIC04Niwz
MCArODksMjEgQEAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmNvbmZpZ3VyYXRpb24oKQogCiB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3
YXBCdWZmZXJzKCkKIHsKLSAgICBpZiAoIW1fZHJhd2FibGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEVHTEJvb2xlYW4gc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7Ci0KLSAg
ICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAgICAgIGRlc3Ryb3koKTsK
LSAgICB9Ci0KLSAgICBzdWNjZXNzID0gZWdsU3dhcEJ1ZmZlcnMobV9zaGFyZWREaXNwbGF5LCBt
X2RyYXdhYmxlKTsKLQotICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgaWYgKCFl
Z2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpKQogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBTd2FwQnVmZmVycyglZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAg
ICAgIGRlc3Ryb3koKTsKLSAgICB9CiB9CiAKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6ZGVzdHJveSgpCiB7CiAgICAgR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCk7Ci0gICAg
TmF0aXZlV3JhcHBlcjo6ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CiAgICAgZnJlZUVH
TFJlc291cmNlcygpOwotICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKworICAgIGlmIChtX2J1ZmZl
ckhhbmRsZSkgeworICAgICAgICBOYXRpdmVXcmFwcGVyOjpkZXN0cm95V2luZG93KG1fYnVmZmVy
SGFuZGxlKTsKKyAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCiB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmZyZWVFR0xSZXNvdXJjZXMoKQpAQCAtMTE3LDE1ICsxMTEsMTUgQEAgdm9pZCBFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2VzKCkKICAgICBpZiAobV9kcmF3YWJs
ZSA9PSBFR0xfTk9fU1VSRkFDRSB8fCBtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEVHTEJvb2xlYW4gZWdsUmVzdWx0ID0gZWdsQmluZEFQ
SShlZ2xBUElWZXJzaW9uKTsKLQotICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAg
ICBpZiAoIWVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLiIsIGVnbEdldEVycm9yKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2Ry
YXdhYmxlKTsKLSAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgaWYgKG1fZHJh
d2FibGUpIHsKKyAgICAgICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2Ry
YXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IEVHTF9OT19TVVJGQUNFOworICAgIH0KIH0K
IAogdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiBuZXdSZWN0KQpAQCAtMTM0LDYgKzEyOCw5NSBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9y
dFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAgTmF0aXZl
V3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0KIAorRUdM
UGl4bWFwU3VyZmFjZTo6RUdMUGl4bWFwU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBzdXJmYWNl
QXR0cmlidXRlcykKKyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKHN1cmZhY2VBdHRyaWJ1dGVzKQor
eworICAgIGluaXRpYWxpemUoc3VyZmFjZUF0dHJpYnV0ZXMpOworfQorCitFR0xQaXhtYXBTdXJm
YWNlOjp+RUdMUGl4bWFwU3VyZmFjZSgpCit7Cit9CisKK0dMUGxhdGZvcm1TdXJmYWNlOjpTdXJm
YWNlQXR0cmlidXRlcyBFR0xQaXhtYXBTdXJmYWNlOjphdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpOworfQorCit2b2lkIEVHTFBp
eG1hcFN1cmZhY2U6OmluaXRpYWxpemUoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK3sK
KyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0
dHJpYnV0ZXMpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbE5hdGl2ZURp
c3BsYXkoKTsKKworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsK
KyAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBFR0xDb25maWcgY29uZmlnID0gbV9jb25maWdTZWxlY3Rvci0+cGl4bWFwQ29u
dGV4dENvbmZpZygpOworCisgICAgaWYgKCFjb25maWcpIHsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMaW50IHZpc3VhbElkID0gbV9jb25maWdT
ZWxlY3Rvci0+bmF0aXZlVmlzdWFsSWQoY29uZmlnKTsKKworICAgIGlmICh2aXN1YWxJZCA9PSAt
MSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBO
YXRpdmVQaXhtYXAgcGl4bWFwOworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZVBpeG1hcCgmcGl4
bWFwLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cHBvcnRBbHBoYSk7CisgICAgbV9idWZmZXJIYW5kbGUgPSBwaXhtYXA7CisK
KyAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNl
KG1fc2hhcmVkRGlzcGxheSwgY29uZmlnLCBzdGF0aWNfY2FzdDxFR0xOYXRpdmVQaXhtYXBUeXBl
PihtX2J1ZmZlckhhbmRsZSksIDApOworCisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NV
UkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNl
KCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKwor
UGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFBpeG1hcFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQor
eworICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCk7Cit9
CisKK3ZvaWQgRUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgZnJlZVJlc291cmNl
cygpOworfQorCit2b2lkIEVHTFBpeG1hcFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMoKQoreworICAg
IGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkgfHwgbV9kcmF3YWJsZSA9PSBF
R0xfTk9fU1VSRkFDRSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFlZ2xCaW5kQVBJKGVn
bEFQSVZlcnNpb24pKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJ
KCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX2RyYXdhYmxlKSB7CisgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxh
eSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKKyAg
ICB9CisKKyAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgTmF0aXZlV3JhcHBlcjo6
ZGVzdHJveVBpeG1hcChtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIG1fYnVmZmVySGFuZGxlID0g
MDsKKyAgICB9CisKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xTdXJmYWNlLmgKaW5kZXggMDVlOGFlNi4uMTIwNGRlZiAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogCi0jaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNpbmNsdWRlICJHTFRy
YW5zcG9ydFN1cmZhY2UuaCIKIAogI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KQEAgLTM4LDEw
ICszNywxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIFgxMUhlbHBlciBOYXRp
dmVXcmFwcGVyOwordHlwZWRlZiBQaXhtYXAgTmF0aXZlUGl4bWFwOworCitjbGFzcyBFR0xDb25m
aWdTZWxlY3RvcjsKIAogLy8gQ29udGVudHMgb2YgdGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBu
YXRpdmUgd2luZG93LgogY2xhc3MgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBH
TFRyYW5zcG9ydFN1cmZhY2UgewotCiBwdWJsaWM6CiAgICAgRUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMpOwogICAgIHZpcnR1YWwgfkVH
TFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKTsKQEAgLTU2LDYgKzU3LDIwIEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwogfTsKIAorY2xh
c3MgRUdMUGl4bWFwU3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgRUdMUGl4bWFwU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7CisgICAg
dmlydHVhbCB+RUdMUGl4bWFwU3VyZmFjZSgpOworICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNl
Q29uZmlnIGNvbmZpZ3VyYXRpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGluaXRpYWxpemUoU3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIHZvaWQgZnJlZVJlc291cmNlcygp
OworICAgIE93blB0cjxFR0xDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKK307CisK
IH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195636</attachid>
            <date>2013-03-28 13:59:48 -0700</date>
            <delta_ts>2013-03-29 06:35:00 -0700</delta_ts>
            <desc>patchv5</desc>
            <filename>eglsurface.patch</filename>
            <type>text/plain</type>
            <size>36768</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNjI2Y2E1Li44OTAzMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMg
QEAKKzIwMTMtMDMtMjYgIEtvbmRhcGFsbHlLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRl
bC5jb20+CisKKyAgICAgICAgW0VGTF1bRUdMXSBBZGQgc3VwcG9ydCBmb3IgY3JlYXRpbmcgb2Zm
c2NyZWVuIHN1cmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTMzNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBlbmFibGluZyBFR0wgYW5kIEdMRVMy
CisgICAgICAgIHN1cHBvcnQgZm9yIEVGTCBwb3J0LiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBm
b3IgdXNpbmcKKyAgICAgICAgRUdMUGl4bWFwU3VyZmFjZSBhcyBhbiBvZmZzY3JlZW5zdXJmYWNl
LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmln
U2VsZWN0b3I6OkVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZp
Z1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENv
bmZpZ1NlbGVjdG9yOjpzdXJmYWNlQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpF
R0xDb25maWdTZWxlY3Rvcjo6bmF0aXZlVmlzdWFsSWQpOgorICAgICAgICAoV2ViQ29yZTo6RUdM
Q29uZmlnU2VsZWN0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVj
dG9yOjpjcmVhdGVDb25maWcpOgorCisgICAgICAgICBBZGRlZCBsb2dpYyB0byBzZWxlY3QgRUdM
Q29uZmlnIHN1cHBvcnRpbmcgYWxwaGEgYW5kCisgICAgICAgICBvcGFxdWUgYXMgbmVlZGVkLiBN
b3ZlZCBDb2RlIHJlbGF0ZWQgdG8gZGlzcGxheSB0bworICAgICAgICAgRUdMSGVscGVyIGNsYXNz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1Nl
bGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVHTENvbmZpZ1NlbGVjdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVHTERpc3BsYXlDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlDb25uZWN0aW9uOjpFR0xEaXNwbGF5
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6fkVH
TERpc3BsYXlDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTERpc3BsYXlDb25uZWN0
aW9uOjpkaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEhlbHBlcjo6ZWdsRGlzcGxheSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xIZWxwZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpFR0xU
cmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6
OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6fkVH
TFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFj
ZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlblN1cmZhY2U6OmNyZWF0
ZU9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuU3VyZmFj
ZTo6RUdMT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5T
dXJmYWNlOjp+RUdMT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZT
Y3JlZW5TdXJmYWNlOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
blN1cmZhY2U6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVu
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNl
Q2xpZW50OjpFR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6On5FR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmRlc3Ryb3kpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6cHJlcGFyZVRleHR1cmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAg
ICAgICAoRUdMT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRv
d1RyYW5zcG9ydFN1cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6RUdMUGl4bWFwU3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6On5FR0xQaXhtYXBT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMUGl4bWFwU3VyZmFjZTo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEVHTFBpeG1hcFN1cmZhY2UpOgorCisgICAgICAgIEVHTFBpeG1hcFN1cmZhY2UgaW1w
bGVtZW50YXRpb24uCisKIDIwMTMtMDMtMjYgIEtvbmRhcGFsbHkgS2FseWFuICA8a2FseWFuLmtv
bmRhcGFsbHlAaW50ZWwuY29tPgogCiAgICAgICAgIFtDb29yZEdmeF0gU3VwcG9ydCB0byBzaGFy
ZSBHcmFwaGljc1N1cmZhY2UgZmxhZ3Mgd2l0aCBjbGllbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IGY2N2Q5YTguLjk2NDJhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0zMjksNyArMzI5LDkgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2UuY3BwCiAgICAgICAgICkKICAgICBl
bHNlICgpCiAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5jcHAKaW5kZXggOTE3OGZlZS4uZjY1NWFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuY3BwCkBAIC00NCwxNSArNDQsMTYgQEAgc3RhdGljIEdMUGxhdGZvcm1TdXJmYWNlKiBtX2N1
cnJlbnREcmF3YWJsZSA9IDA7CiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxh
dGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCiB7CisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlOwogI2lm
IFVTRShHTFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQ
dHIobmV3IEdMWE9mZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcykpOwotCi0gICAgaWYgKHN1cmZh
Y2UtPmRyYXdhYmxlKCkpCi0gICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKyAgICBz
dXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcykpOwog
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXR0cmlidXRlcyk7CisgICAgc3VyZmFjZSA9IEVHTE9m
ZlNjcmVlblN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcyk7CiAjZW5k
aWYKIAorICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCisgICAgICAgIHJl
dHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKwogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xU
cmFuc3BvcnRTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCmluZGV4IDA3MTgzMzMuLjZkMDdjYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vm
bC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCkBAIC00NywxMCArNDcs
MTEgQEAgc3RhdGljIGJvb2wgdmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQgPSBmYWxzZTsKIAog
UGFzc093blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRl
VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBh
dHRyaWJ1dGVzKQogeworICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZhY2U7CiAj
aWYgVVNFKEdMWCkKLSAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRv
cHRQdHIobmV3IEdMWFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOworICAgIHN1
cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVz
KSk7CiAjZWxpZiBVU0UoRUdMKQotICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZh
Y2UgPSBhZG9wdFB0cihuZXcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShhdHRyaWJ1dGVzKSk7
CisgICAgc3VyZmFjZSA9IEVHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZh
Y2Uoc2l6ZSwgYXR0cmlidXRlcyk7CiAjZW5kaWYKIAogICAgIGlmIChzdXJmYWNlICYmIHN1cmZh
Y2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENv
bmZpZ1NlbGVjdG9yLmNwcAppbmRleCA5YjljMmUwLi40YmRlMDI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xDb25maWdTZWxlY3Rvci5jcHAKQEAgLTI4LDEyOCArMjgsNDUgQEAKIAogI2lmIFVTRShF
R0wpCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2hhcmVkRUdMRGlzcGxheSogU2hhcmVkRUdM
RGlzcGxheTo6bV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsKLQotc3RhdGljIEVHTGludCBj
b25maWdBdHRyaWJ1dGVMaXN0W10gPSB7Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQotICAgIEVHTF9S
RU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSNlbHNlCi0gICAgRUdMX1JFTkRF
UkFCTEVfVFlQRSwgRUdMX09QRU5HTF9CSVQsCi0jZW5kaWYKLSAgICBFR0xfUkVEX1NJWkUsIDgs
Ci0gICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMX0JMVUVfU0laRSwgOCwKLSAgICBFR0xf
U1RFTkNJTF9TSVpFLCA4LAotICAgIEVHTF9BTFBIQV9TSVpFLCAwLAotICAgIEVHTF9TVVJGQUNF
X1RZUEUsIEVHTF9OT05FLAotICAgIEVHTF9OT05FCi19OwotCi12b2lkIFNoYXJlZEVHTERpc3Bs
YXk6OmRlcmVmKCkKLXsKLSAgICBpZiAoZGVyZWZCYXNlKCkpIHsKLSAgICAgICAgbV9zdGF0aWNT
aGFyZWRFR0xEaXNwbGF5ID0gMDsKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotfQotCi1F
R0xEaXNwbGF5IFNoYXJlZEVHTERpc3BsYXk6OnNoYXJlZEVHTERpc3BsYXkoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2VnbERpc3BsYXk7Ci19Ci0KLVNoYXJlZEVHTERpc3BsYXk6OlNoYXJlZEVH
TERpc3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICA6IG1fZWdsRGlzcGxh
eShFR0xfTk9fRElTUExBWSkKLXsKLSAgICBpZiAoZGlzcGxheSkKLSAgICAgICAgbV9lZ2xEaXNw
bGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBl
PihkaXNwbGF5KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNw
bGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotCi0gICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xf
Tk9fRElTUExBWSkgewotICAgICAgICBMT0dfRVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRp
b24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRUdMQm9vbGVhbiBz
dWNjZXNzOwotICAgIHN1Y2Nlc3MgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCk7
CisjaW5jbHVkZSAiRUdMSGVscGVyLmgiCiAKLSAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkg
ewotICAgICAgICBMT0dfRVJST1IoIkVHTEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAg
ICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9
IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7Ci0KLSAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJV
RSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWds
R2V0RXJyb3IoKSk7Ci0gICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwotICAg
IH0KLX0KLQotdm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpjbGVhbnVwKCkKLXsKLSAgICBpZiAobV9l
Z2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlZ2xN
YWtlQ3VycmVudChtX2VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
RUdMX05PX0NPTlRFWFQpOwotICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOwotICAgIG1f
ZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwotfQotCi1TaGFyZWRFR0xEaXNwbGF5Ojp+U2hh
cmVkRUdMRGlzcGxheSgpCi17Ci0gICAgY2xlYW51cCgpOwotfQorbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1FR0xDb25maWdTZWxlY3Rvcjo6RUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZh
Y2U6OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRp
c3BsYXkpCi0gICAgOiBtX3BidWZmZXJGQkNvbmZpZygwKQorRUdMQ29uZmlnU2VsZWN0b3I6OkVH
TENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQorICAgIDogbV9waXhtYXBGQkNvbmZpZygwKQogICAgICwgbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnKDApCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKIHsKLSAgICBtX3No
YXJlZERpc3BsYXkgPSBTaGFyZWRFR0xEaXNwbGF5OjpjcmVhdGUoZGlzcGxheSk7CisgICAgbV9z
aGFyZWREaXNwbGF5ID0gRUdMSGVscGVyOjplZ2xEaXNwbGF5KCk7CiB9CiAKIEVHTENvbmZpZ1Nl
bGVjdG9yOjp+RUdMQ29uZmlnU2VsZWN0b3IoKQogewogfQogCi1QbGF0Zm9ybURpc3BsYXkgRUdM
Q29uZmlnU2VsZWN0b3I6OmRpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJlZERp
c3BsYXktPnNoYXJlZEVHTERpc3BsYXkoKTsKLX0KLQotRUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVj
dG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZygpCitFR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6
OnBpeG1hcENvbnRleHRDb25maWcoKQogewotICAgIGlmICghbV9wYnVmZmVyRkJDb25maWcpIHsK
LSAgICAgICAgY29uZmlnQXR0cmlidXRlTGlzdFsxMV0gPSBtX2F0dHJpYnV0ZXMgJiBHTFBsYXRm
b3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhID8gOCA6IDA7Ci0gICAgICAgIGNvbmZpZ0F0dHJpYnV0
ZUxpc3RbMTNdID0gRUdMX1BJWE1BUF9CSVQ7Ci0gICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0g
Y3JlYXRlQ29uZmlnKGNvbmZpZ0F0dHJpYnV0ZUxpc3QpOwotICAgIH0KKyAgICBpZiAoIW1fcGl4
bWFwRkJDb25maWcpCisgICAgICAgIG1fcGl4bWFwRkJDb25maWcgPSBjcmVhdGVDb25maWcoRUdM
X1BJWE1BUF9CSVQpOwogCi0gICAgcmV0dXJuIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIHJldHVy
biBtX3BpeG1hcEZCQ29uZmlnOwogfQogCiBFR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OnN1
cmZhY2VDb250ZXh0Q29uZmlnKCkKIHsKLSAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZp
ZykgewotICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzExXSA9IG1fYXR0cmlidXRlcyAmIEdM
UGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsKLSAgICAgICAgY29uZmlnQXR0
cmlidXRlTGlzdFsxM10gPSBFR0xfV0lORE9XX0JJVDsKLSAgICAgICAgbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnID0gY3JlYXRlQ29uZmlnKGNvbmZpZ0F0dHJpYnV0ZUxpc3QpOwotICAgIH0KKyAg
ICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykKKyAgICAgICAgbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnID0gY3JlYXRlQ29uZmlnKEVHTF9XSU5ET1dfQklUKTsKIAogICAgIHJldHVybiBt
X3N1cmZhY2VDb250ZXh0RkJDb25maWc7CiB9CiAKIEVHTGludCBFR0xDb25maWdTZWxlY3Rvcjo6
bmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJiBjb25maWcpIGNvbnN0CiB7Ci0gICAgaWYg
KGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09
IEVHTF9OT19ESVNQTEFZKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBFR0xpbnQgZWdsVmFs
dWUgPSAwOwotICAgIGVnbEdldENvbmZpZ0F0dHJpYihkaXNwbGF5KCksIGNvbmZpZywgRUdMX05B
VElWRV9WSVNVQUxfSUQsICZlZ2xWYWx1ZSk7CisgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hh
cmVkRGlzcGxheSwgY29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZhbHVlKTsKIAog
ICAgIHJldHVybiBlZ2xWYWx1ZTsKIH0KQEAgLTE2MiwyNSArNzksOTcgQEAgR0xQbGF0Zm9ybVN1
cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIEVHTENvbmZpZ1NlbGVjdG9yOjphdHRyaWJ1dGVzKCkg
Y29uc3QKIHZvaWQgRUdMQ29uZmlnU2VsZWN0b3I6OnJlc2V0KCkKIHsKICAgICBtX3N1cmZhY2VD
b250ZXh0RkJDb25maWcgPSAwOwotICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gMDsKKyAgICBtX3Bp
eG1hcEZCQ29uZmlnID0gMDsKIH0KIAotRUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpjcmVh
dGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKK0VHTENvbmZpZyBFR0xDb25maWdTZWxl
Y3Rvcjo6Y3JlYXRlQ29uZmlnKEVHTGludCBleHBlY3RlZFN1cmZhY2VUeXBlKQogewotICAgIGlm
IChkaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9
PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFR0xDb25maWcqIGNv
bmZpZ3M7CisgICAgRUdMaW50IG51bUNvbmZpZ3M7CisKKyAgICBlZ2xHZXRDb25maWdzKG1fc2hh
cmVkRGlzcGxheSwgMCwgMCwgJm51bUNvbmZpZ3MpOworCisgICAgaWYgKCFudW1Db25maWdzKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGFueSBFR0wgY29uZmlncy4i
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY29uZmlncyA9IG5ldyBFR0xDb25m
aWdbbnVtQ29uZmlnc107CisKKyAgICBpZiAoIWNvbmZpZ3MpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeS4iKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgZWdsR2V0Q29uZmlncyhtX3NoYXJlZERpc3BsYXksIGNvbmZpZ3MsIG51
bUNvbmZpZ3MsICZudW1Db25maWdzKTsKKworICAgIGlmICghbnVtQ29uZmlncykgeworICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBhbnkgRUdMIGNvbmZpZ3MuIik7CisgICAg
ICAgIGRlbGV0ZSBjb25maWdzOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICBpbnQg
bnVtQ29uZmlnczsKICAgICBFR0xDb25maWcgY29uZmlnID0gMDsKKyAgICBFR0xpbnQgYWxwaGEs
IHN1cmZhY2UsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlbmRlclR5cGU7CisgICAgRUdMaW50IGV4cGVj
dGVkQWxwaGEgPSBtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
ID8gOCA6IDA7CisgICAgRUdMaW50IGV4cGVjdGVkUmVkID0gODsKKyAgICBFR0xpbnQgZXhwZWN0
ZWRCbHVlID0gODsKKyAgICBFR0xpbnQgZXhwZWN0ZWRHcmVlbiA9IDg7CisjaWYgVVNFKE9QRU5H
TF9FU18yKQorICAgIEVHTGludCBleHBlY3RlZFJlbmRlclR5cGUgPSBFR0xfT1BFTkdMX0VTMl9C
SVQ7CisjZWxzZQorICAgIEVHTGludCBleHBlY3RlZFJlbmRlclR5cGUgPSBFR0xfT1BFTkdMX0JJ
VCwKKyNlbmRpZgorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db25maWdzOyBpKyspIHsK
KyAgICAgICAgRUdMQ29uZmlnIHRlbXBDb25maWcgPSBjb25maWdzW2ldOworICAgICAgICBlZ2xH
ZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfUkVOREVSQUJM
RV9UWVBFLCAmcmVuZGVyVHlwZSk7CisKKyAgICAgICAgaWYgKCEocmVuZGVyVHlwZSAmIGV4cGVj
dGVkUmVuZGVyVHlwZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlZ2xHZXRD
b25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfQUxQSEFfU0laRSwg
JmFscGhhKTsKKworICAgICAgICBpZiAoYWxwaGEgIT0gZXhwZWN0ZWRBbHBoYSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3Bs
YXksIHRlbXBDb25maWcsIEVHTF9SRURfU0laRSwgJnJlZCk7CisKKyAgICAgICAgaWYgKHJlZCAh
PSBleHBlY3RlZFJlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgaWYgKCFlZ2xDaG9v
c2VDb25maWcoZGlzcGxheSgpLCBhdHRyaWJ1dGVzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncykp
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlv
bnMuIik7CisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBD
b25maWcsIEVHTF9HUkVFTl9TSVpFLCAmZ3JlZW4pOwogCi0gICAgaWYgKG51bUNvbmZpZ3MgIT0g
MSkgewotICAgICAgICBMT0dfRVJST1IoIkVHTENob29zZUNvbmZpZyBkaWRuJ3QgcmV0dXJuIGV4
YWN0bHkgb25lIGNvbmZpZyBidXQgKCVkKS4iLCBudW1Db25maWdzKTsKLSAgICAgICAgY29uZmln
ID0gMDsKKyAgICAgICAgaWYgKGdyZWVuICE9IGV4cGVjdGVkR3JlZW4pCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0
ZW1wQ29uZmlnLCBFR0xfQkxVRV9TSVpFLCAmYmx1ZSk7CisKKyAgICAgICAgaWYgKGJsdWUgIT0g
ZXhwZWN0ZWRCbHVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZWdsR2V0Q29u
ZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX1NVUkZBQ0VfVFlQRSwg
JnN1cmZhY2UpOworCisgICAgICAgIGlmIChzdXJmYWNlICYgZXhwZWN0ZWRTdXJmYWNlVHlwZSkg
eworICAgICAgICAgICAgY29uZmlnID0gY29uZmlnc1tpXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKChtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3Vy
ZmFjZTo6U3VwcG9ydEFscGhhKSAmJiAhY29uZmlnKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHJldHJpZXZlIEVHTCBDb25maWd1cmF0aW9uIHdpdGggYWxwaGEuIFRyeWluZyB0byBm
aW5kIG9uZSB3aXRob3V0IGFscGhhIHN1cHBvcnQuIik7CisgICAgICAgIG1fYXR0cmlidXRlcyAm
PSB+R0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYTsKKyAgICAgICAgY29uZmlnID0gY3Jl
YXRlQ29uZmlnKGV4cGVjdGVkU3VyZmFjZVR5cGUpOworICAgIH0KKworICAgIGlmICghY29uZmln
KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIGEgdmFsaWQgRUdMIENvbmZpZ3Vy
YXRpb24uIik7CisKKyAgICBkZWxldGUgY29uZmlnczsKKwogICAgIHJldHVybiBjb25maWc7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggODg1NjQyOS4uOWE5NWJj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKQEAgLTMxLDYxICszMSwyOCBA
QAogI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KICNpbmNsdWRlIDxvcGVuZ2wvR0xQbGF0Zm9y
bVN1cmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgRGlzcGxheSBOYXRp
dmVTaGFyZWREaXNwbGF5OwotCi1jbGFzcyBTaGFyZWRFR0xEaXNwbGF5IDogcHVibGljIFdURjo6
UmVmQ291bnRlZEJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZEVHTERpc3Bs
YXkpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkRUdMRGlzcGxheT4g
Y3JlYXRlKE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRpc3BsYXkpCi0gICAgewotICAgICAgICBpZiAo
IW1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSkKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdM
RGlzcGxheSA9IG5ldyBTaGFyZWRFR0xEaXNwbGF5KGRpc3BsYXkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXktPnJlZigpOwotCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkpOwotICAgIH0KLQotICAgIHZv
aWQgZGVyZWYoKTsKLSAgICBFR0xEaXNwbGF5IHNoYXJlZEVHTERpc3BsYXkoKSBjb25zdDsKLQot
cHJvdGVjdGVkOgotICAgIFNoYXJlZEVHTERpc3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxheSopOwot
ICAgIHZvaWQgY2xlYW51cCgpOwotICAgIHZpcnR1YWwgflNoYXJlZEVHTERpc3BsYXkoKTsKLQot
ICAgIHN0YXRpYyBTaGFyZWRFR0xEaXNwbGF5KiBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXk7Ci0g
ICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Ci19OwotCiBjbGFzcyBFR0xDb25maWdTZWxlY3Rv
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmlnU2VsZWN0b3IpOwotCiBwdWJs
aWM6Ci0gICAgRUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRy
aWJ1dGVzLCBOYXRpdmVTaGFyZWREaXNwbGF5KiA9IDApOworICAgIEVHTENvbmZpZ1NlbGVjdG9y
KEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyk7CiAgICAgdmlydHVhbCB+RUdM
Q29uZmlnU2VsZWN0b3IoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXkgZGlzcGxheSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAgdmlydHVh
bCBFR0xDb25maWcgcGl4bWFwQ29udGV4dENvbmZpZygpOwogICAgIHZpcnR1YWwgRUdMQ29uZmln
IHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CiAgICAgRUdMaW50IG5hdGl2ZVZpc3VhbElkKGNvbnN0
IEVHTENvbmZpZyYpIGNvbnN0OwogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldCgpOwogCiBwcml2YXRlOgot
ICAgIEVHTENvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSk7CisgICAg
RUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhFR0xpbnQpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgRUdMQ29u
ZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIEVHTENvbmZpZyBtX3BpeG1hcEZCQ29uZmlnOwog
ICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250ZXh0RkJDb25maWc7Ci0gICAgUmVmUHRyPFNoYXJl
ZEVHTERpc3BsYXk+IG1fc2hhcmVkRGlzcGxheTsKICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXMg
OiAzOworICAgIFBsYXRmb3JtRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
SGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOGE5
ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMSGVscGVyLmgiCisKKyNp
ZiBVU0UoRUdMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBFR0xEaXNwbGF5Q29u
bmVjdGlvbiB7CisKKyAgICBFR0xEaXNwbGF5Q29ubmVjdGlvbihOYXRpdmVTaGFyZWREaXNwbGF5
KiBkaXNwbGF5ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChkaXNwbGF5KQorICAgICAgICAgICAg
bV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2ZURp
c3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZWdsRGlz
cGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisKKyAgICAgICAgaWYg
KG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIEVHTEJvb2xlYW4gc3VjY2VzczsKKyAgICAgICAgc3Vj
Y2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKKworICAgICAgICBpZiAo
c3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xJbml0aWFs
aXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElT
UExBWTsKKyAgICAgICAgfQorCisgICAgICAgIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZl
cnNpb24pOworCisgICAgICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7
CisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIH5FR0xEaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAgICBpZiAo
bV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgICAgICBtX2VnbERpc3BsYXkg
PSBFR0xfTk9fRElTUExBWTsKKyAgICB9CisKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkoKSB7IHJl
dHVybiBtX2VnbERpc3BsYXk7IH0KKworcHJpdmF0ZToKKyAgICBFR0xEaXNwbGF5IG1fZWdsRGlz
cGxheTsKK307CisKK1BsYXRmb3JtRGlzcGxheSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKQorewor
ICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dyYW0g
c2h1dGRvd24uCisjaWYgUExBVEZPUk0oWDExKQorICAgIHN0YXRpYyBFR0xEaXNwbGF5Q29ubmVj
dGlvbiBkaXNwbGF5Q29ubmVjdGlvbihOYXRpdmVXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpOwor
I2Vsc2UKKyAgICBzdGF0aWMgRUdMRGlzcGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb247
CisjZW5kaWYKKyAgICByZXR1cm4gZGlzcGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ1NzA4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xIZWxwZXJfaAorI2RlZmluZSBFR0xIZWxwZXJf
aAorCisjaWYgVVNFKEVHTCkKKworI2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlIDxnbHgvWDEx
SGVscGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oWDExKQordHlwZWRlZiBYMTFIZWxwZXIgTmF0
aXZlV3JhcHBlcjsKK3R5cGVkZWYgRGlzcGxheSBOYXRpdmVTaGFyZWREaXNwbGF5OworI2Vsc2UK
K3R5cGVkZWYgdm9pZCBOYXRpdmVTaGFyZWREaXNwbGF5OworI2VuZGlmCisKK2NsYXNzIEVHTEhl
bHBlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBsYXRmb3JtRGlzcGxheSBlZ2xEaXNwbGF5KCk7
Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAppbmRl
eCBkYTFkMTdjLi5iMDBmYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0yOCwxMTAg
KzI4LDEyOCBAQAogCiAjaWYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAKKyNp
bmNsdWRlICJFR0xDb25maWdTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkVHTEhlbHBlci5oIgorI2lu
Y2x1ZGUgIkdMUGxhdGZvcm1Db250ZXh0LmgiCisKKyNpZiBQTEFURk9STShYMTEpCisjaW5jbHVk
ZSAiRUdMWFN1cmZhY2UuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVHTFdp
bmRvd1RyYW5zcG9ydFN1cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK1Bhc3NPd25QdHI8R0xU
cmFuc3BvcnRTdXJmYWNlPiBFR0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJm
YWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7
CisgICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gc3VyZmFjZTsKKyNpZiBQTEFURk9STShY
MTEpCisgICAgc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
KHNpemUsIGF0dHJpYnV0ZXMpKTsKKyNlbmRpZgorCisgICAgaWYgKHN1cmZhY2UpCisgICAgICAg
IHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitF
R0xUcmFuc3BvcnRTdXJmYWNlOjpFR0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNp
emUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBHTFRyYW5zcG9ydFN1cmZh
Y2Uoc2l6ZSwgYXR0cmlidXRlcykKIHsKLSAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIo
bmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0dHJpYnV0ZXMsIE5hdGl2ZVdyYXBwZXI6Om5hdGl2ZURp
c3BsYXkoKSkpOwotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29uZmlnU2VsZWN0b3ItPmRpc3Bs
YXkoKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKTsKIAot
ICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKLSAgICAgICAgbV9j
b25maWdTZWxlY3RvciA9IG51bGxwdHI7CisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xf
Tk9fRElTUExBWSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEVHTENvbmZpZyBjb25m
aWcgPSBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29uZmlnU2VsZWN0b3IoYXR0cmlidXRlcykp
OworfQogCi0gICAgaWYgKCFjb25maWcpIHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIEVHTFRy
YW5zcG9ydFN1cmZhY2U6OmF0dHJpYnV0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmZp
Z1NlbGVjdG9yLT5hdHRyaWJ1dGVzKCk7Cit9CiAKLSAgICBFR0xpbnQgdmlzdWFsSWQgPSBtX2Nv
bmZpZ1NlbGVjdG9yLT5uYXRpdmVWaXN1YWxJZChjb25maWcpOworRUdMVHJhbnNwb3J0U3VyZmFj
ZTo6fkVHTFRyYW5zcG9ydFN1cmZhY2UoKQoreworfQogCi0gICAgaWYgKHZpc3VhbElkID09IC0x
KSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKK3ZvaWQgRUdMVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJv
eSgpCit7CisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UgfHwgbV9zaGFyZWRE
aXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAg
TmF0aXZlV3JhcHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKGF0
dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhKSwgdmlzdWFsSWQpOwot
Ci0gICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewotICAgICAgICBkZXN0cm95KCk7CisgICAgaWYg
KCFlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCBFR0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVk
RGlzcGxheSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgKEVHTE5h
dGl2ZVdpbmRvd1R5cGUpbV9idWZmZXJIYW5kbGUsIDApOworICAgIEdMVHJhbnNwb3J0U3VyZmFj
ZTo6ZGVzdHJveSgpOwogCi0gICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNlKCVkKS4iLCBl
Z2xHZXRFcnJvcigpKTsKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmIChtX2RyYXdhYmxlKSB7
CisgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7
CisgICAgICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKICAgICB9Ci19CiAKLUdMUGxh
dGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
OjphdHRyaWJ1dGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+YXR0
cmlidXRlcygpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCi1FR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpCitQbGF0Zm9y
bVN1cmZhY2VDb25maWcgRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB7Cisg
ICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CiB9CiAK
LVBsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1
cmF0aW9uKCkKK1Bhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEVHTE9mZlNjcmVlblN1cmZh
Y2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykK
IHsKLSAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsK
KyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2U7CisjaWYgUExBVEZPUk0oWDEx
KQorICAgIHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMUGl4bWFwU3VyZmFjZShhdHRyaWJ1dGVz
KSk7CisjZW5kaWYKKworICAgIGlmIChzdXJmYWNlKQorICAgICAgICByZXR1cm4gc3VyZmFjZS5y
ZWxlYXNlKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCitFR0xPZmZTY3JlZW5TdXJmYWNlOjpFR0xPZmZT
Y3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzIHN1cmZhY2VBdHRyaWJ1dGVzKQorICAgIDog
R0xQbGF0Zm9ybVN1cmZhY2Uoc3VyZmFjZUF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKCFtX2RyYXdh
YmxlKQotICAgICAgICByZXR1cm47CisgICAgbV9zaGFyZWREaXNwbGF5ID0gRUdMSGVscGVyOjpl
Z2xEaXNwbGF5KCk7CiAKLSAgICBFR0xCb29sZWFuIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQ
SVZlcnNpb24pOworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsK
LSAgICAgICAgZGVzdHJveSgpOwotICAgIH0KKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQ
dHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKHN1cmZhY2VBdHRyaWJ1dGVzKSk7Cit9CiAKLSAgICBz
dWNjZXNzID0gZWdsU3dhcEJ1ZmZlcnMobV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKK0VH
TE9mZlNjcmVlblN1cmZhY2U6On5FR0xPZmZTY3JlZW5TdXJmYWNlKCkKK3sKK30KIAotICAgIGlm
IChzdWNjZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIFN3
YXBCdWZmZXJzKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgZGVzdHJveSgpOwotICAg
IH0KK0dMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBFR0xPZmZTY3JlZW5TdXJm
YWNlOjphdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+
YXR0cmlidXRlcygpOwogfQogCi12b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ry
b3koKQorUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTE9mZlNjcmVlblN1cmZhY2U6OmNvbmZpZ3Vy
YXRpb24oKQogewotICAgIEdMVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpOwotICAgIE5hdGl2
ZVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwotICAgIGZyZWVFR0xSZXNv
dXJjZXMoKTsKLSAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CisgICAgcmV0dXJuIG1fY29uZmlnU2Vs
ZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKTsKIH0KIAotdm9pZCBFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2VzKCkKK3ZvaWQgRUdMT2ZmU2NyZWVuU3VyZmFjZTo6
ZGVzdHJveSgpCiB7Ci0gICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UgfHwgbV9z
aGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgIGlmIChtX3NoYXJlZERpc3BsYXkg
PT0gRUdMX05PX0RJU1BMQVkgfHwgbV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFQ
SVZlcnNpb24pOwotCi0gICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgIGlmICgh
ZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBlZ2xEZXN0cm95U3VyZmFjZShtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUp
OwotICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKLX0KKyAgICBpZiAobV9kcmF3YWJs
ZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShtX3NoYXJlZERpc3BsYXksIG1fZHJhd2Fi
bGUpOworICAgICAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgfQogCi12b2lk
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5l
d1JlY3QpCi17Ci0gICAgR0xUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsK
LSAgICBOYXRpdmVXcmFwcGVyOjpyZXNpemVXaW5kb3cobmV3UmVjdCwgbV9idWZmZXJIYW5kbGUp
OworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZh
Y2UuaAppbmRleCAwNWU4YWU2Li40NjRmMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKQEAgLTI4
LDMxICsyOCwzOCBAQAogCiAjaWYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAK
LSNpbmNsdWRlICJFR0xDb25maWdTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdMVHJhbnNwb3J0U3Vy
ZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsKK2NsYXNzIEVHTENvbmZp
Z1NlbGVjdG9yOwogCi0vLyBDb250ZW50cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFja2VkIGJ5IG5h
dGl2ZSB3aW5kb3cuCi1jbGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdM
VHJhbnNwb3J0U3VyZmFjZSB7CitjbGFzcyBFR0xUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdM
VHJhbnNwb3J0U3VyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xUcmFu
c3BvcnRTdXJmYWNlPiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmLCBTdXJm
YWNlQXR0cmlidXRlcyk7CisgICAgdmlydHVhbCB+RUdMVHJhbnNwb3J0U3VyZmFjZSgpOworICAg
IHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR0xQbGF0
Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCBPVkVSUklE
RTsKKworcHJvdGVjdGVkOgorICAgIEVHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYs
IFN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICBPd25QdHI8RUdMQ29uZmlnU2VsZWN0b3I+IG1fY29u
ZmlnU2VsZWN0b3I7Cit9OwogCitjbGFzcyBFR0xPZmZTY3JlZW5TdXJmYWNlIDogcHVibGljIEdM
UGxhdGZvcm1TdXJmYWNlIHsKIHB1YmxpYzoKLSAgICBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
KGNvbnN0IEludFNpemUmLCBTdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAgdmlydHVhbCB+RUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1T
dXJmYWNlPiBjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICB2
aXJ0dWFsIH5FR0xPZmZTY3JlZW5TdXJmYWNlKCk7CiAgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZh
Y2VDb25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRH
ZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3dhcEJ1ZmZlcnMoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMoKSBjb25zdCBPVkVSUklERTsKIAotcHJpdmF0ZToKLSAgICB2b2lkIGZyZWVF
R0xSZXNvdXJjZXMoKTsKK3Byb3RlY3RlZDoKKyAgICBFR0xPZmZTY3JlZW5TdXJmYWNlKFN1cmZh
Y2VBdHRyaWJ1dGVzKTsKICAgICBPd25QdHI8RUdMQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2Vs
ZWN0b3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xYjJhZWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcApAQCAtMCww
ICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkVHTFhTdXJmYWNlLmgiCisKKyNpZiBQTEFURk9STShYMTEpICYmIFVTRShFR0wpICYm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIEdMUGxhdGZvcm1TdXJm
YWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogRUdMVHJhbnNwb3J0U3Vy
ZmFjZShzaXplLCBhdHRyaWJ1dGVzKQoreworICAgIGlmICghbV9jb25maWdTZWxlY3RvcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4
dENvbmZpZygpKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEVHTGludCB2aXN1YWxJZCA9IG1fY29uZmlnU2VsZWN0b3ItPm5hdGl2ZVZpc3VhbElk
KG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCkpOworCisgICAgaWYgKHZp
c3VhbElkID09IC0xKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJI
YW5kbGUsIHZpc3VhbElkLCBtX2NvbmZpZ1NlbGVjdG9yLT5hdHRyaWJ1dGVzKCkgJiBHTFBsYXRm
b3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhLCBzaXplKTsKKworICAgIGlmICghbV9idWZmZXJIYW5k
bGUpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9kcmF3YWJsZSA9IGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2Nv
bmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpLCBzdGF0aWNfY2FzdDxFR0xOYXRp
dmVXaW5kb3dUeXBlPihtX2J1ZmZlckhhbmRsZSksIDApOworCisgICAgaWYgKG1fZHJhd2FibGUg
PT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRl
IEVHTCBzdXJmYWNlKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgIH0KK30KKworRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6fkVHTFdpbmRvd1RyYW5zcG9y
dFN1cmZhY2UoKQoreworfQorCit2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3YXBC
dWZmZXJzKCkKK3sKKyAgICBpZiAoIWVnbFN3YXBCdWZmZXJzKG1fc2hhcmVkRGlzcGxheSwgbV9k
cmF3YWJsZSkpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIFN3YXBCdWZmZXJzKCVkKS4i
LCBlZ2xHZXRFcnJvcigpKTsKK30KKwordm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpk
ZXN0cm95KCkKK3sKKyAgICBFR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCk7CisKKyAgICBp
ZiAobV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgTmF0aXZlV3JhcHBlcjo6ZGVzdHJveVdpbmRv
dyhtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKyAgICB9Cit9
CisKK0VHTFBpeG1hcFN1cmZhY2U6OkVHTFBpeG1hcFN1cmZhY2UoR0xQbGF0Zm9ybVN1cmZhY2U6
OlN1cmZhY2VBdHRyaWJ1dGVzIHN1cmZhY2VBdHRyaWJ1dGVzKQorICAgIDogRUdMT2ZmU2NyZWVu
U3VyZmFjZShzdXJmYWNlQXR0cmlidXRlcykKK3sKKyAgICBpZiAoIW1fY29uZmlnU2VsZWN0b3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIEVHTENvbmZpZyBjb25maWcgPSBtX2NvbmZpZ1NlbGVj
dG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCk7CisKKyAgICBpZiAoIWNvbmZpZykgeworICAgICAg
ICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFR0xpbnQgdmlzdWFs
SWQgPSBtX2NvbmZpZ1NlbGVjdG9yLT5uYXRpdmVWaXN1YWxJZChjb25maWcpOworCisgICAgaWYg
KHZpc3VhbElkID09IC0xKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIE5hdGl2ZVBpeG1hcCBwaXhtYXA7CisgICAgTmF0aXZlV3JhcHBlcjo6Y3Jl
YXRlUGl4bWFwKCZwaXhtYXAsIHZpc3VhbElkLCBtX2NvbmZpZ1NlbGVjdG9yLT5hdHRyaWJ1dGVz
KCkgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhKTsKKyAgICBtX2J1ZmZlckhhbmRs
ZSA9IHBpeG1hcDsKKworICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgZGVzdHJv
eSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kcmF3YWJsZSA9IGVnbENyZWF0
ZVBpeG1hcFN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBjb25maWcsIHN0YXRpY19jYXN0PEVHTE5h
dGl2ZVBpeG1hcFR5cGU+KG1fYnVmZmVySGFuZGxlKSwgMCk7CisKKyAgICBpZiAobV9kcmF3YWJs
ZSA9PSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgRUdMIHN1cmZhY2UoJWQpLiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0cm95KCk7
CisgICAgfQorfQorCitFR0xQaXhtYXBTdXJmYWNlOjp+RUdMUGl4bWFwU3VyZmFjZSgpCit7Cit9
CisKK3ZvaWQgRUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgRUdMT2ZmU2NyZWVu
U3VyZmFjZTo6ZGVzdHJveSgpOworCisgICAgaWYgKG1fYnVmZmVySGFuZGxlKSB7CisgICAgICAg
IE5hdGl2ZVdyYXBwZXI6OmRlc3Ryb3lQaXhtYXAobV9idWZmZXJIYW5kbGUpOworICAgICAgICBt
X2J1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1
cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjJjNDI3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFhTdXJmYWNlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBFR0xYU3VyZmFjZV9oCisjZGVmaW5lIEVHTFhTdXJmYWNlX2gKKworI2lmIFBMQVRG
T1JNKFgxMSkgJiYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpbmNsdWRl
ICJFR0xTdXJmYWNlLmgiCisjaW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7Cit0eXBlZGVmIFBp
eG1hcCBOYXRpdmVQaXhtYXA7CisKKy8vIENvbnRlbnRzIG9mIHRoZSBzdXJmYWNlIGFyZSBiYWNr
ZWQgYnkgbmF0aXZlIHdpbmRvdy4KK2NsYXNzIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UgOiBw
dWJsaWMgRUdMVHJhbnNwb3J0U3VyZmFjZSB7CitwdWJsaWM6CisgICAgRUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRy
aWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAg
dmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKSBPVkVSUklERTsKK307CisKK2NsYXNzIEVHTFBpeG1hcFN1cmZhY2UgOiBwdWJsaWMg
RUdMT2ZmU2NyZWVuU3VyZmFjZSB7CitwdWJsaWM6CisgICAgRUdMUGl4bWFwU3VyZmFjZShHTFBs
YXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgfkVHTFBpeG1h
cFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOworfTsKKwor
fQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0Vm
bC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IGE5NWNjZWQuLmZm
MTAwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC0xMTQsNiArMTE0LDcgQEAgaWYgKEVOQUJM
RV9FQ09SRV9YKQogCiAgICAgbGlzdChBUFBFTkQgRUNPUkVfQURESVRJT05BTF9DT01QT05FTlRT
IFgpCiAgICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9FQ09SRV9YKQorICAgIGFkZF9kZWZpbml0
aW9ucygtRFdURl9QTEFURk9STV9YMTE9MSkKIGVuZGlmICgpCiAKICMgQWxsb3cgYnVpbGRpbmcg
dGhlIEVGTCBwb3J0IHVzaW5nIEVGTCB2ZXJzaW9uIDEuNisgdG8gYnVpbGQgb24gVGl6ZW4gdHJ1
bmsK
</data>
<flag name="review"
          id="217554"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195735</attachid>
            <date>2013-03-29 06:35:00 -0700</date>
            <delta_ts>2013-03-29 08:22:27 -0700</delta_ts>
            <desc>patchv6</desc>
            <filename>eglsurface.patch</filename>
            <type>text/plain</type>
            <size>36467</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2MjZjYTUuLjI3NDlhMWIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEz
LTAzLTI2ICBLb25kYXBhbGx5S2FseWFuICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW0VHTF0gQWRkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIG9mZnNjcmVlbiBz
dXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzMzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTm9hbSBSb3NlbnRoYWwuCisKKyAgICAgICAg
VGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgZW5hYmxpbmcgRUdMIGFuZCBHTEVTMgorICAgICAg
ICBzdXBwb3J0IGZvciBFRkwgcG9ydC4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHVzaW5n
CisgICAgICAgIEVHTFBpeG1hcFN1cmZhY2UgYXMgYW4gb2Zmc2NyZWVuc3VyZmFjZS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9y
OjpFR0xDb25maWdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rv
cjo6cGl4bWFwQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxl
Y3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmln
U2VsZWN0b3I6Om5hdGl2ZVZpc3VhbElkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1Nl
bGVjdG9yOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rvcjo6Y3Jl
YXRlQ29uZmlnKToKKworICAgICAgICAgQWRkZWQgbG9naWMgdG8gc2VsZWN0IEVHTENvbmZpZyBz
dXBwb3J0aW5nIGFscGhhIGFuZAorICAgICAgICAgb3BhcXVlIGFzIG5lZWRlZC4gTW92ZWQgQ29k
ZSByZWxhdGVkIHRvIGRpc3BsYXkgdG8KKyAgICAgICAgIEVHTEhlbHBlciBjbGFzcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDb25maWdTZWxlY3Rvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xEaXNwbGF5Q29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6RUdMRGlzcGxheUNvbm5lY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5lY3Rpb246On5FR0xEaXNwbGF5
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6ZGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xIZWxwZXI6OmVnbERpc3BsYXkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRUdMSGVscGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6RUdMVHJhbnNwb3J0
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjphdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6On5FR0xUcmFuc3Bv
cnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5TdXJmYWNlOjpjcmVhdGVPZmZTY3Jl
ZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlblN1cmZhY2U6OkVHTE9m
ZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuU3VyZmFjZTo6
fkVHTE9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuU3Vy
ZmFjZTo6YXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5TdXJmYWNl
Ojpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlblN1cmZhY2U6
OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6
RUdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3Bv
cnRTdXJmYWNlQ2xpZW50Ojp+RUdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpkZXN0cm95KToKKyAgICAgICAgKFdl
YkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OnByZXBhcmVUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEVH
TE9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xYU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFBpeG1hcFN1cmZhY2U6OkVHTFBpeG1hcFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjp+RUdMUGl4bWFwU3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjphdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTFBpeG1hcFN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xQaXhtYXBTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFBpeG1h
cFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xYU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChF
R0xQaXhtYXBTdXJmYWNlKToKKworICAgICAgICBFR0xQaXhtYXBTdXJmYWNlIGltcGxlbWVudGF0
aW9uLgorCiAyMDEzLTAzLTI2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5
QGludGVsLmNvbT4KIAogICAgICAgICBbQ29vcmRHZnhdIFN1cHBvcnQgdG8gc2hhcmUgR3JhcGhp
Y3NTdXJmYWNlIGZsYWdzIHdpdGggY2xpZW50LgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGY2
N2Q5YTguLjk2NDJhYTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTMyOSw3ICszMjksOSBA
QCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29u
ZmlnU2VsZWN0b3IuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xIZWxwZXIuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xYU3VyZmFjZS5jcHAKICAgICAgICAgKQogICAgIGVsc2UgKCkKICAgICAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDkx
NzhmZWUuLmY2NTVhYmIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC00NCwxNSArNDQsMTYg
QEAgc3RhdGljIEdMUGxhdGZvcm1TdXJmYWNlKiBtX2N1cnJlbnREcmF3YWJsZSA9IDA7CiAKIFBh
c3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZT
Y3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiB7CisgICAgT3duUHRy
PEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlOwogI2lmIFVTRShHTFgpCi0gICAgT3duUHRyPEdM
UGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlblN1cmZh
Y2UoYXR0cmlidXRlcykpOwotCi0gICAgaWYgKHN1cmZhY2UtPmRyYXdhYmxlKCkpCi0gICAgICAg
IHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKyAgICBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdM
WE9mZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcykpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
YXR0cmlidXRlcyk7CisgICAgc3VyZmFjZSA9IEVHTE9mZlNjcmVlblN1cmZhY2U6OmNyZWF0ZU9m
ZlNjcmVlblN1cmZhY2UoYXR0cmlidXRlcyk7CiAjZW5kaWYKIAorICAgIGlmIChzdXJmYWNlICYm
IHN1cmZhY2UtPmRyYXdhYmxlKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsK
KwogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFj
ZS5jcHAKaW5kZXggMDcxODMzMy4uNmQwN2NhNSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRT
dXJmYWNlLmNwcApAQCAtNDcsMTAgKzQ3LDExIEBAIHN0YXRpYyBib29sIHZlcnRleEFycmF5T2Jq
ZWN0U3VwcG9ydGVkID0gZmFsc2U7CiAKIFBhc3NPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBH
TFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsKKyAgICBPd25QdHI8R0xUcmFu
c3BvcnRTdXJmYWNlPiBzdXJmYWNlOwogI2lmIFVTRShHTFgpCi0gICAgT3duUHRyPEdMVHJhbnNw
b3J0U3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKHNp
emUsIGF0dHJpYnV0ZXMpKTsKKyAgICBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWFRyYW5zcG9y
dFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOwogI2VsaWYgVVNFKEVHTCkKLSAgICBPd25QdHI8
R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFdpbmRvd1RyYW5z
cG9ydFN1cmZhY2UoYXR0cmlidXRlcykpOworICAgIHN1cmZhY2UgPSBFR0xUcmFuc3BvcnRTdXJm
YWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMpOwogI2VuZGlmCiAK
ICAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJs
ZSgpKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAppbmRleCA5YjljMmUwLi5iNzY1
OGUzIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcApAQCAtMjgsMTI4ICsyOCw0
NSBAQAogCiAjaWYgVVNFKEVHTCkKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaGFyZWRFR0xE
aXNwbGF5KiBTaGFyZWRFR0xEaXNwbGF5OjptX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkgPSAwOwot
Ci1zdGF0aWMgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZUxpc3RbXSA9IHsKLSNpZiBVU0UoT1BFTkdM
X0VTXzIpCi0gICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotI2Vs
c2UKLSAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0JJVCwKLSNlbmRpZgotICAg
IEVHTF9SRURfU0laRSwgOCwKLSAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0xfQkxVRV9T
SVpFLCA4LAotICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDgsCi0gICAgRUdMX0FMUEhBX1NJWkUsIDAs
Ci0gICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX05PTkUsCi0gICAgRUdMX05PTkUKLX07Ci0KLXZv
aWQgU2hhcmVkRUdMRGlzcGxheTo6ZGVyZWYoKQotewotICAgIGlmIChkZXJlZkJhc2UoKSkgewot
ICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkgPSAwOwotICAgICAgICBkZWxldGUgdGhp
czsKLSAgICB9Ci19Ci0KLUVHTERpc3BsYXkgU2hhcmVkRUdMRGlzcGxheTo6c2hhcmVkRUdMRGlz
cGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWdsRGlzcGxheTsKLX0KLQotU2hhcmVkRUdM
RGlzcGxheTo6U2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQot
ICAgIDogbV9lZ2xEaXNwbGF5KEVHTF9OT19ESVNQTEFZKQotewotICAgIGlmIChkaXNwbGF5KQot
ICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KHJlaW50ZXJwcmV0X2Nhc3Q8RUdM
TmF0aXZlRGlzcGxheVR5cGU+KGRpc3BsYXkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZWdsRGlz
cGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0KLSAgICBpZiAobV9l
Z2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMRGlz
cGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisj
aW5jbHVkZSAiRUdMSGVscGVyLmgiCiAKLSAgICBFR0xCb29sZWFuIHN1Y2Nlc3M7Ci0gICAgc3Vj
Y2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKLQotICAgIGlmIChzdWNj
ZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRUdMSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOwotICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICB9
Ci0KLSAgICBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKLQotICAgIGlmIChz
dWNjZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBF
R0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7Ci0gICAgfQotfQotCi12b2lkIFNoYXJlZEVHTERpc3BsYXk6OmNsZWFudXAo
KQotewotICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGVnbE1ha2VDdXJyZW50KG1fZWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0Us
IEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgZWdsVGVybWluYXRlKG1fZWds
RGlzcGxheSk7Ci0gICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci19Ci0KLVNoYXJl
ZEVHTERpc3BsYXk6On5TaGFyZWRFR0xEaXNwbGF5KCkKLXsKLSAgICBjbGVhbnVwKCk7Ci19Citu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVHTENvbmZpZ1NlbGVjdG9yOjpFR0xDb25maWdTZWxlY3Rv
cihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcywgTmF0aXZl
U2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDApCitFR0xD
b25maWdTZWxlY3Rvcjo6RUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZh
Y2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX3BpeG1hcEZCQ29uZmlnKDApCiAgICAg
LCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQogewotICAgIG1fc2hhcmVkRGlzcGxheSA9IFNoYXJlZEVHTERpc3BsYXk6OmNyZWF0ZShk
aXNwbGF5KTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKTsK
IH0KIAogRUdMQ29uZmlnU2VsZWN0b3I6On5FR0xDb25maWdTZWxlY3RvcigpCiB7CiB9CiAKLVBs
YXRmb3JtRGlzcGxheSBFR0xDb25maWdTZWxlY3Rvcjo6ZGlzcGxheSgpIGNvbnN0CitFR0xDb25m
aWcgRUdMQ29uZmlnU2VsZWN0b3I6OnBpeG1hcENvbnRleHRDb25maWcoKQogewotICAgIHJldHVy
biBtX3NoYXJlZERpc3BsYXktPnNoYXJlZEVHTERpc3BsYXkoKTsKLX0KKyAgICBpZiAoIW1fcGl4
bWFwRkJDb25maWcpCisgICAgICAgIG1fcGl4bWFwRkJDb25maWcgPSBjcmVhdGVDb25maWcoRUdM
X1BJWE1BUF9CSVQpOwogCi1FR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OnBCdWZmZXJDb250
ZXh0Q29uZmlnKCkKLXsKLSAgICBpZiAoIW1fcGJ1ZmZlckZCQ29uZmlnKSB7Ci0gICAgICAgIGNv
bmZpZ0F0dHJpYnV0ZUxpc3RbMTFdID0gbV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6
OlN1cHBvcnRBbHBoYSA/IDggOiAwOwotICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9
IEVHTF9QSVhNQVBfQklUOwotICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGNyZWF0ZUNvbmZp
Zyhjb25maWdBdHRyaWJ1dGVMaXN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wYnVmZmVyRkJD
b25maWc7CisgICAgcmV0dXJuIG1fcGl4bWFwRkJDb25maWc7CiB9CiAKIEVHTENvbmZpZyBFR0xD
b25maWdTZWxlY3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcoKQogewotICAgIGlmICghbV9zdXJm
YWNlQ29udGV4dEZCQ29uZmlnKSB7Ci0gICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3RbMTFdID0g
bV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSA/IDggOiAwOwot
ICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOwotICAgICAg
ICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0cmlidXRl
TGlzdCk7Ci0gICAgfQorICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQorICAgICAg
ICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoRUdMX1dJTkRPV19CSVQp
OwogCiAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKIH0KIAogRUdMaW50IEVH
TENvbmZpZ1NlbGVjdG9yOjpuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmIGNvbmZpZykg
Y29uc3QKIHsKLSAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZKQorICAgIGlmICht
X3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybiAtMTsKIAog
ICAgIEVHTGludCBlZ2xWYWx1ZSA9IDA7Ci0gICAgZWdsR2V0Q29uZmlnQXR0cmliKGRpc3BsYXko
KSwgY29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZhbHVlKTsKKyAgICBlZ2xHZXRD
b25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lE
LCAmZWdsVmFsdWUpOwogCiAgICAgcmV0dXJuIGVnbFZhbHVlOwogfQpAQCAtMTYyLDI1ICs3OSw4
NyBAQCBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMQ29uZmlnU2VsZWN0
b3I6OmF0dHJpYnV0ZXMoKSBjb25zdAogdm9pZCBFR0xDb25maWdTZWxlY3Rvcjo6cmVzZXQoKQog
ewogICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgbV9wYnVmZmVyRkJDb25m
aWcgPSAwOworICAgIG1fcGl4bWFwRkJDb25maWcgPSAwOwogfQogCi1FR0xDb25maWcgRUdMQ29u
ZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQorRUdMQ29u
ZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpjcmVhdGVDb25maWcoRUdMaW50IGV4cGVjdGVkU3VyZmFj
ZVR5cGUpCiB7Ci0gICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICBpZiAo
bV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGludCBudW1Db25maWdzOworICAgIEVHTGludCBudW1Db25maWdzOworCisgICAgZWdsR2V0
Q29uZmlncyhtX3NoYXJlZERpc3BsYXksIDAsIDAsICZudW1Db25maWdzKTsKKworICAgIGlmICgh
bnVtQ29uZmlncykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBudW1i
ZXIgb2YgRUdMIGNvbmZpZ3MuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEVH
TENvbmZpZyBjb25maWdzW251bUNvbmZpZ3NdOworICAgIGVnbEdldENvbmZpZ3MobV9zaGFyZWRE
aXNwbGF5LCBjb25maWdzLCBudW1Db25maWdzLCAmbnVtQ29uZmlncyk7CisKKyAgICBpZiAoIW51
bUNvbmZpZ3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgYW55IEVH
TCBjb25maWdzLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBFR0xDb25maWcg
Y29uZmlnID0gMDsKKyAgICBFR0xpbnQgYWxwaGEsIHN1cmZhY2UsIHJlZCwgZ3JlZW4sIGJsdWUs
IHJlbmRlclR5cGU7CisgICAgRUdMaW50IGV4cGVjdGVkQWxwaGEgPSBtX2F0dHJpYnV0ZXMgJiBH
TFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhID8gOCA6IDA7CisgICAgRUdMaW50IGV4cGVj
dGVkUmVkID0gODsKKyAgICBFR0xpbnQgZXhwZWN0ZWRCbHVlID0gODsKKyAgICBFR0xpbnQgZXhw
ZWN0ZWRHcmVlbiA9IDg7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTGludCBleHBlY3Rl
ZFJlbmRlclR5cGUgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7CisjZWxzZQorICAgIEVHTGludCBleHBl
Y3RlZFJlbmRlclR5cGUgPSBFR0xfT1BFTkdMX0JJVCwKKyNlbmRpZgorCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1Db25maWdzOyBpKyspIHsKKyAgICAgICAgRUdMQ29uZmlnIHRlbXBDb25m
aWcgPSBjb25maWdzW2ldOworICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNw
bGF5LCB0ZW1wQ29uZmlnLCBFR0xfUkVOREVSQUJMRV9UWVBFLCAmcmVuZGVyVHlwZSk7CisKKyAg
ICAgICAgaWYgKCEocmVuZGVyVHlwZSAmIGV4cGVjdGVkUmVuZGVyVHlwZSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5
LCB0ZW1wQ29uZmlnLCBFR0xfQUxQSEFfU0laRSwgJmFscGhhKTsKKworICAgICAgICBpZiAoYWxw
aGEgIT0gZXhwZWN0ZWRBbHBoYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVn
bEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9SRURfU0la
RSwgJnJlZCk7CisKKyAgICAgICAgaWYgKHJlZCAhPSBleHBlY3RlZFJlZCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZGlzcGxheSgpLCBhdHRyaWJ1
dGVzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncykpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlvbnMuIik7CisgICAgICAgIGVnbEdldENvbmZp
Z0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9HUkVFTl9TSVpFLCAmZ3Jl
ZW4pOwogCi0gICAgaWYgKG51bUNvbmZpZ3MgIT0gMSkgewotICAgICAgICBMT0dfRVJST1IoIkVH
TENob29zZUNvbmZpZyBkaWRuJ3QgcmV0dXJuIGV4YWN0bHkgb25lIGNvbmZpZyBidXQgKCVkKS4i
LCBudW1Db25maWdzKTsKLSAgICAgICAgY29uZmlnID0gMDsKKyAgICAgICAgaWYgKGdyZWVuICE9
IGV4cGVjdGVkR3JlZW4pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlZ2xHZXRD
b25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfQkxVRV9TSVpFLCAm
Ymx1ZSk7CisKKyAgICAgICAgaWYgKGJsdWUgIT0gZXhwZWN0ZWRCbHVlKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwg
dGVtcENvbmZpZywgRUdMX1NVUkZBQ0VfVFlQRSwgJnN1cmZhY2UpOworCisgICAgICAgIGlmIChz
dXJmYWNlICYgZXhwZWN0ZWRTdXJmYWNlVHlwZSkgeworICAgICAgICAgICAgY29uZmlnID0gY29u
Zmlnc1tpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCisgICAgaWYg
KChtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhKSAmJiAhY29u
ZmlnKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIEVHTCBDb25maWd1
cmF0aW9uIHdpdGggYWxwaGEuIFRyeWluZyB0byBmaW5kIG9uZSB3aXRob3V0IGFscGhhIHN1cHBv
cnQuIik7CisgICAgICAgIG1fYXR0cmlidXRlcyAmPSB+R0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBv
cnRBbHBoYTsKKyAgICAgICAgY29uZmlnID0gY3JlYXRlQ29uZmlnKGV4cGVjdGVkU3VyZmFjZVR5
cGUpOworICAgIH0KKworICAgIGlmICghY29uZmlnKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBmaW5kIGEgdmFsaWQgRUdMIENvbmZpZ3VyYXRpb24uIik7CisKICAgICByZXR1cm4gY29u
ZmlnOwogfQogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggODg1NjQyOS4uNTI4
OTdlNCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaApAQCAtMzEsNjEgKzMxLDI4IEBA
CiAjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgogI2luY2x1ZGUgPG9wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBEaXNwbGF5IE5hdGl2
ZVNoYXJlZERpc3BsYXk7Ci0KLWNsYXNzIFNoYXJlZEVHTERpc3BsYXkgOiBwdWJsaWMgV1RGOjpS
ZWZDb3VudGVkQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkRUdMRGlzcGxh
eSk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRFR0xEaXNwbGF5PiBj
cmVhdGUoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xE
aXNwbGF5ID0gbmV3IFNoYXJlZEVHTERpc3BsYXkoZGlzcGxheSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheS0+cmVmKCk7Ci0KLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBkZXJlZigpOwotICAgIEVHTERpc3BsYXkgc2hhcmVkRUdMRGlzcGxheSgpIGNvbnN0OwotCi1w
cm90ZWN0ZWQ6Ci0gICAgU2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFyZWREaXNwbGF5Kik7Ci0g
ICAgdm9pZCBjbGVhbnVwKCk7Ci0gICAgdmlydHVhbCB+U2hhcmVkRUdMRGlzcGxheSgpOwotCi0g
ICAgc3RhdGljIFNoYXJlZEVHTERpc3BsYXkqIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheTsKLSAg
ICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKLX07Ci0KIGNsYXNzIEVHTENvbmZpZ1NlbGVjdG9y
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xDb25maWdTZWxlY3Rvcik7Ci0KIHB1Ymxp
YzoKLSAgICBFR0xDb25maWdTZWxlY3RvcihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJp
YnV0ZXMsIE5hdGl2ZVNoYXJlZERpc3BsYXkqID0gMCk7CisgICAgRUdMQ29uZmlnU2VsZWN0b3Io
R0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5FR0xD
b25maWdTZWxlY3RvcigpOwotICAgIFBsYXRmb3JtRGlzcGxheSBkaXNwbGF5KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBFR0xDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKTsKKyAgICB2aXJ0dWFs
IEVHTENvbmZpZyBwaXhtYXBDb250ZXh0Q29uZmlnKCk7CiAgICAgdmlydHVhbCBFR0xDb25maWcg
c3VyZmFjZUNvbnRleHRDb25maWcoKTsKICAgICBFR0xpbnQgbmF0aXZlVmlzdWFsSWQoY29uc3Qg
RUdMQ29uZmlnJikgY29uc3Q7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMoKSBjb25zdDsKICAgICB2b2lkIHJlc2V0KCk7CiAKIHByaXZhdGU6Ci0g
ICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKTsKKyAgICBF
R0xDb25maWcgY3JlYXRlQ29uZmlnKEVHTGludCBleHBlY3RlZFN1cmZhY2VUeXBlKTsKIAogcHJv
dGVjdGVkOgotICAgIEVHTENvbmZpZyBtX3BidWZmZXJGQkNvbmZpZzsKKyAgICBFR0xDb25maWcg
bV9waXhtYXBGQkNvbmZpZzsKICAgICBFR0xDb25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmln
OwotICAgIFJlZlB0cjxTaGFyZWRFR0xEaXNwbGF5PiBtX3NoYXJlZERpc3BsYXk7CiAgICAgdW5z
aWduZWQgbV9hdHRyaWJ1dGVzIDogMzsKKyAgICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNw
bGF5OwogfTsKIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjY1Y2ZkZjQKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHAKQEAgLTAsMCArMSw5OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVHTEhl
bHBlci5oIgorCisjaWYgVVNFKEVHTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3Qg
RUdMRGlzcGxheUNvbm5lY3Rpb24geworCisgICAgRUdMRGlzcGxheUNvbm5lY3Rpb24oTmF0aXZl
U2hhcmVkRGlzcGxheSogZGlzcGxheSA9IDApCisgICAgeworICAgICAgICBpZiAoZGlzcGxheSkK
KyAgICAgICAgICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERpc3BsYXkocmVpbnRlcnByZXRfY2Fz
dDxFR0xOYXRpdmVEaXNwbGF5VHlwZT4oZGlzcGxheSkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwor
CisgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBFR0xCb29sZWFuIHN1Y2Nlc3M7
CisgICAgICAgIHN1Y2Nlc3MgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCk7CisK
KyAgICAgICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiRUdMSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICAgICAgdGVybWluYXRlKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzdWNjZXNzID0gZWds
QmluZEFQSShlZ2xBUElWZXJzaW9uKTsKKworICAgICAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJV
RSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLiIs
IGVnbEdldEVycm9yKCkpOworICAgICAgICAgICAgdGVybWluYXRlKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+RUdMRGlzcGxheUNvbm5lY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGVybWluYXRlKCk7CisgICAgfQorCisgICAgRUdMRGlzcGxheSBkaXNw
bGF5KCkgeyByZXR1cm4gbV9lZ2xEaXNwbGF5OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB0ZXJt
aW5hdGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExB
WSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlZ2xUZXJtaW5hdGUobV9lZ2xEaXNw
bGF5KTsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7CisgICAgfQorCisg
ICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Cit9OworCitQbGF0Zm9ybURpc3BsYXkgRUdMSGVs
cGVyOjplZ2xEaXNwbGF5KCkKK3sKKyAgICAvLyBEaXNwbGF5IGNvbm5lY3Rpb24gd2lsbCBvbmx5
IGJlIGJyb2tlbiBhdCBwcm9ncmFtIHNodXRkb3duLgorI2lmIFBMQVRGT1JNKFgxMSkKKyAgICBz
dGF0aWMgRUdMRGlzcGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb24oTmF0aXZlV3JhcHBl
cjo6bmF0aXZlRGlzcGxheSgpKTsKKyNlbHNlCisgICAgc3RhdGljIEVHTERpc3BsYXlDb25uZWN0
aW9uIGRpc3BsYXlDb25uZWN0aW9uOworI2VuZGlmCisgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0
aW9uLmRpc3BsYXkoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmggU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzA4YTcKLS0tIC9kZXYvbnVsbAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMSGVscGVyX2gKKyNk
ZWZpbmUgRUdMSGVscGVyX2gKKworI2lmIFVTRShFR0wpCisKKyNpZiBQTEFURk9STShYMTEpCisj
aW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVuZ2wvR0xE
ZWZzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKFgxMSkKK3R5cGVk
ZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7Cit0eXBlZGVmIERpc3BsYXkgTmF0aXZlU2hhcmVk
RGlzcGxheTsKKyNlbHNlCit0eXBlZGVmIHZvaWQgTmF0aXZlU2hhcmVkRGlzcGxheTsKKyNlbmRp
ZgorCitjbGFzcyBFR0xIZWxwZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQbGF0Zm9ybURpc3Bs
YXkgZWdsRGlzcGxheSgpOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
Y3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmNwcAppbmRleCBkYTFkMTdjLi5jNGY3ZmNmIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKQEAg
LTI4LDExMCArMjgsMTE4IEBACiAKICNpZiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKIAorI2luY2x1ZGUgIkVHTENvbmZpZ1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiRUdMSGVscGVy
LmgiCisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKworI2lmIFBMQVRGT1JNKFgxMSkK
KyNpbmNsdWRlICJFR0xYU3VyZmFjZS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShj
b25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotICAgIDog
R0xUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMpCitQYXNzT3duUHRyPEdMVHJhbnNw
b3J0U3VyZmFjZT4gRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZShj
b25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogewotICAg
IG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29uZmlnU2VsZWN0b3IoYXR0cmli
dXRlcywgTmF0aXZlV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpKSk7Ci0gICAgbV9zaGFyZWREaXNw
bGF5ID0gbV9jb25maWdTZWxlY3Rvci0+ZGlzcGxheSgpOworICAgIE93blB0cjxHTFRyYW5zcG9y
dFN1cmZhY2U+IHN1cmZhY2U7CisjaWYgUExBVEZPUk0oWDExKQorICAgIHN1cmZhY2UgPSBhZG9w
dFB0cihuZXcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVzKSk7Cisj
ZW5kaWYKIAotICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKLSAg
ICAgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKHN1cmZhY2UpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKwor
ICAgIHJldHVybiBudWxscHRyOworfQogCi0gICAgRUdMQ29uZmlnIGNvbmZpZyA9IG1fY29uZmln
U2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CitFR0xUcmFuc3BvcnRTdXJmYWNlOjpF
R0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMpCisgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykK
K3sKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKTsKIAotICAg
IGlmICghY29uZmlnKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKKyAgICBpZiAobV9zaGFyZWREaXNw
bGF5ID09IEVHTF9OT19ESVNQTEFZKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgRUdM
aW50IHZpc3VhbElkID0gbV9jb25maWdTZWxlY3Rvci0+bmF0aXZlVmlzdWFsSWQoY29uZmlnKTsK
KyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0
dHJpYnV0ZXMpKTsKK30KIAotICAgIGlmICh2aXN1YWxJZCA9PSAtMSkgewotICAgICAgICBkZXN0
cm95KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CitHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFj
ZUF0dHJpYnV0ZXMgRUdMVHJhbnNwb3J0U3VyZmFjZTo6YXR0cmlidXRlcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPmF0dHJpYnV0ZXMoKTsKK30KIAotICAgIE5hdGl2
ZVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIChhdHRyaWJ1
dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSksIHZpc3VhbElkKTsKK0VHTFRy
YW5zcG9ydFN1cmZhY2U6On5FR0xUcmFuc3BvcnRTdXJmYWNlKCkKK3sKK30KIAotICAgIGlmICgh
bV9idWZmZXJIYW5kbGUpIHsKLSAgICAgICAgZGVzdHJveSgpOwordm9pZCBFR0xUcmFuc3BvcnRT
dXJmYWNlOjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFD
RSB8fCBtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAKLSAgICBtX2RyYXdhYmxlID0gZWdsQ3JlYXRlV2luZG93U3VyZmFjZShtX3NoYXJl
ZERpc3BsYXksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIChFR0xO
YXRpdmVXaW5kb3dUeXBlKW1fYnVmZmVySGFuZGxlLCAwKTsKKyAgICBHTFRyYW5zcG9ydFN1cmZh
Y2U6OmRlc3Ryb3koKTsKIAotICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuIiwg
ZWdsR2V0RXJyb3IoKSk7Ci0gICAgICAgIGRlc3Ryb3koKTsKKyAgICBpZiAobV9kcmF3YWJsZSkg
eworICAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUp
OworICAgICAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7CiAgICAgfQotfQogCi1HTFBs
YXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6YXR0cmlidXRlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPmF0
dHJpYnV0ZXMoKTsKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKIH0KIAotRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6fkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQorUGxhdGZv
cm1TdXJmYWNlQ29uZmlnIEVHTFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQogewor
ICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwogfQog
Ci1QbGF0Zm9ybVN1cmZhY2VDb25maWcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6Y29uZmln
dXJhdGlvbigpCitQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBFR0xPZmZTY3JlZW5TdXJm
YWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMp
CiB7Ci0gICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7
CisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlOworI2lmIFBMQVRGT1JNKFgx
MSkKKyAgICBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFBpeG1hcFN1cmZhY2UoYXR0cmlidXRl
cykpOworI2VuZGlmCisKKyAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2Uu
cmVsZWFzZSgpOworCisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgRUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQorRUdMT2ZmU2NyZWVuU3VyZmFjZTo6RUdMT2Zm
U2NyZWVuU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBzdXJmYWNlQXR0cmlidXRlcykKKyAgICA6
IEdMUGxhdGZvcm1TdXJmYWNlKHN1cmZhY2VBdHRyaWJ1dGVzKQogewotICAgIGlmICghbV9kcmF3
YWJsZSkKLSAgICAgICAgcmV0dXJuOworICAgIG1fc2hhcmVkRGlzcGxheSA9IEVHTEhlbHBlcjo6
ZWdsRGlzcGxheSgpOwogCi0gICAgRUdMQm9vbGVhbiBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xB
UElWZXJzaW9uKTsKKyAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgewotICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7
Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICB9CisgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0
UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihzdXJmYWNlQXR0cmlidXRlcykpOworfQogCi0gICAg
c3VjY2VzcyA9IGVnbFN3YXBCdWZmZXJzKG1fc2hhcmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7CitF
R0xPZmZTY3JlZW5TdXJmYWNlOjp+RUdMT2ZmU2NyZWVuU3VyZmFjZSgpCit7Cit9CiAKLSAgICBp
ZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBT
d2FwQnVmZmVycyglZCkuIiwgZWdsR2V0RXJyb3IoKSk7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAg
ICB9CitHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgRUdMT2ZmU2NyZWVuU3Vy
ZmFjZTo6YXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3It
PmF0dHJpYnV0ZXMoKTsKIH0KIAotdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpkZXN0
cm95KCkKK1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xPZmZTY3JlZW5TdXJmYWNlOjpjb25maWd1
cmF0aW9uKCkKIHsKLSAgICBHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKTsKLSAgICBOYXRp
dmVXcmFwcGVyOjpkZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKLSAgICBmcmVlRUdMUmVz
b3VyY2VzKCk7Ci0gICAgbV9idWZmZXJIYW5kbGUgPSAwOworICAgIHJldHVybiBtX2NvbmZpZ1Nl
bGVjdG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCk7CiB9CiAKLXZvaWQgRUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygpCit2b2lkIEVHTE9mZlNjcmVlblN1cmZhY2U6
OmRlc3Ryb3koKQogewotICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFIHx8IG1f
c2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICBpZiAobV9zaGFyZWREaXNwbGF5
ID09IEVHTF9OT19ESVNQTEFZIHx8IG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEVHTEJvb2xlYW4gZWdsUmVzdWx0ID0gZWdsQmluZEFQSShlZ2xB
UElWZXJzaW9uKTsKLQotICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLiIsIGVnbEdldEVycm9yKCkpOwot
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fZHJhd2FibGUpIHsKKyAgICAgICAgZWdsRGVzdHJv
eVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJs
ZSA9IEVHTF9OT19TVVJGQUNFOwogICAgIH0KIAotICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fc2hh
cmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0gICAgbV9kcmF3YWJsZSA9IEVHTF9OT19TVVJGQUNF
OwotfQotCi12b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0
IEludFJlY3QmIG5ld1JlY3QpCi17Ci0gICAgR0xUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRy
eShuZXdSZWN0KTsKLSAgICBOYXRpdmVXcmFwcGVyOjpyZXNpemVXaW5kb3cobmV3UmVjdCwgbV9i
dWZmZXJIYW5kbGUpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCiB9CmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5oCmluZGV4IDA1ZThhZTYuLjQ2NGYxYmYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCkBA
IC0yOCwzMSArMjgsMzggQEAKIAogI2lmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNF
KQogCi0jaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNpbmNsdWRlICJHTFRyYW5zcG9y
dFN1cmZhY2UuaCIKIAotI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXR5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7CitjbGFzcyBFR0xD
b25maWdTZWxlY3RvcjsKIAotLy8gQ29udGVudHMgb2YgdGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBi
eSBuYXRpdmUgd2luZG93LgotY2xhc3MgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSA6IHB1Ymxp
YyBHTFRyYW5zcG9ydFN1cmZhY2UgeworY2xhc3MgRUdMVHJhbnNwb3J0U3VyZmFjZSA6IHB1Ymxp
YyBHTFRyYW5zcG9ydFN1cmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdM
VHJhbnNwb3J0U3VyZmFjZT4gY3JlYXRlVHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiwg
U3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgfkVHTFRyYW5zcG9ydFN1cmZhY2UoKTsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEdM
UGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKCkgY29uc3QgT1ZF
UlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBFR0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNp
emUmLCBTdXJmYWNlQXR0cmlidXRlcyk7CisgICAgT3duUHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBt
X2NvbmZpZ1NlbGVjdG9yOworfTsKIAorY2xhc3MgRUdMT2ZmU2NyZWVuU3VyZmFjZSA6IHB1Ymxp
YyBHTFBsYXRmb3JtU3VyZmFjZSB7CiBwdWJsaWM6Ci0gICAgRUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIHZpcnR1YWwgfkVH
TFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFBsYXRm
b3JtU3VyZmFjZT4gY3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7Cisg
ICAgdmlydHVhbCB+RUdMT2ZmU2NyZWVuU3VyZmFjZSgpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1T
dXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHN3YXBCdWZmZXJzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3ko
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKCkgY29uc3QgT1ZFUlJJREU7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBm
cmVlRUdMUmVzb3VyY2VzKCk7Citwcm90ZWN0ZWQ6CisgICAgRUdMT2ZmU2NyZWVuU3VyZmFjZShT
dXJmYWNlQXR0cmlidXRlcyk7CiAgICAgT3duUHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZp
Z1NlbGVjdG9yOwogfTsKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xYjJhZWVlCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xYU3VyZmFjZS5jcHAKQEAgLTAsMCAr
MSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJFR0xYU3VyZmFjZS5oIgorCisjaWYgUExBVEZPUk0oWDExKSAmJiBVU0UoRUdMKSAmJiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKworI2luY2x1ZGUgIkVHTENvbmZpZ1NlbGVjdG9yLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBHTFBsYXRmb3JtU3VyZmFj
ZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IEVHTFRyYW5zcG9ydFN1cmZh
Y2Uoc2l6ZSwgYXR0cmlidXRlcykKK3sKKyAgICBpZiAoIW1fY29uZmlnU2VsZWN0b3IpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRD
b25maWcoKSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBFR0xpbnQgdmlzdWFsSWQgPSBtX2NvbmZpZ1NlbGVjdG9yLT5uYXRpdmVWaXN1YWxJZCht
X2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpKTsKKworICAgIGlmICh2aXN1
YWxJZCA9PSAtMSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFu
ZGxlLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cHBvcnRBbHBoYSwgc2l6ZSk7CisKKyAgICBpZiAoIW1fYnVmZmVySGFuZGxl
KSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
ZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9jb25m
aWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgc3RhdGljX2Nhc3Q8RUdMTmF0aXZl
V2luZG93VHlwZT4obV9idWZmZXJIYW5kbGUpLCAwKTsKKworICAgIGlmIChtX2RyYXdhYmxlID09
IEVHTF9OT19TVVJGQUNFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBF
R0wgc3VyZmFjZSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIGRlc3Ryb3koKTsKKyAg
ICB9Cit9CisKK0VHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6On5FR0xXaW5kb3dUcmFuc3BvcnRT
dXJmYWNlKCkKK3sKK30KKwordm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVm
ZmVycygpCit7CisgICAgaWYgKCFlZ2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXksIG1fZHJh
d2FibGUpKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBTd2FwQnVmZmVycyglZCkuIiwg
ZWdsR2V0RXJyb3IoKSk7Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVz
dHJveSgpCit7CisgICAgRUdMVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpOworCisgICAgaWYg
KG1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIE5hdGl2ZVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3co
bV9idWZmZXJIYW5kbGUpOworICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorfQor
CitFR0xQaXhtYXBTdXJmYWNlOjpFR0xQaXhtYXBTdXJmYWNlKEdMUGxhdGZvcm1TdXJmYWNlOjpT
dXJmYWNlQXR0cmlidXRlcyBzdXJmYWNlQXR0cmlidXRlcykKKyAgICA6IEVHTE9mZlNjcmVlblN1
cmZhY2Uoc3VyZmFjZUF0dHJpYnV0ZXMpCit7CisgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yKQor
ICAgICAgICByZXR1cm47CisKKyAgICBFR0xDb25maWcgY29uZmlnID0gbV9jb25maWdTZWxlY3Rv
ci0+cGl4bWFwQ29udGV4dENvbmZpZygpOworCisgICAgaWYgKCFjb25maWcpIHsKKyAgICAgICAg
ZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMaW50IHZpc3VhbElk
ID0gbV9jb25maWdTZWxlY3Rvci0+bmF0aXZlVmlzdWFsSWQoY29uZmlnKTsKKworICAgIGlmICh2
aXN1YWxJZCA9PSAtMSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBOYXRpdmVQaXhtYXAgcGl4bWFwOworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0
ZVBpeG1hcCgmcGl4bWFwLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygp
ICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSk7CisgICAgbV9idWZmZXJIYW5kbGUg
PSBwaXhtYXA7CisKKyAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIGRlc3Ryb3ko
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVQ
aXhtYXBTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgY29uZmlnLCBzdGF0aWNfY2FzdDxFR0xOYXRp
dmVQaXhtYXBUeXBlPihtX2J1ZmZlckhhbmRsZSksIDApOworCisgICAgaWYgKG1fZHJhd2FibGUg
PT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRl
IEVHTCBzdXJmYWNlKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgIH0KK30KKworRUdMUGl4bWFwU3VyZmFjZTo6fkVHTFBpeG1hcFN1cmZhY2UoKQoreworfQor
Cit2b2lkIEVHTFBpeG1hcFN1cmZhY2U6OmRlc3Ryb3koKQoreworICAgIEVHTE9mZlNjcmVlblN1
cmZhY2U6OmRlc3Ryb3koKTsKKworICAgIGlmIChtX2J1ZmZlckhhbmRsZSkgeworICAgICAgICBO
YXRpdmVXcmFwcGVyOjpkZXN0cm95UGl4bWFwKG1fYnVmZmVySGFuZGxlKTsKKyAgICAgICAgbV9i
dWZmZXJIYW5kbGUgPSAwOworICAgIH0KK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2UuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjJjNDI3Ci0tLSAvZGV2L251
bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xY
U3VyZmFjZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RUdMWFN1cmZhY2VfaAorI2RlZmluZSBFR0xYU3VyZmFjZV9oCisKKyNpZiBQTEFURk9STShYMTEp
ICYmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiRUdMU3Vy
ZmFjZS5oIgorI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit0eXBlZGVmIFgxMUhlbHBlciBOYXRpdmVXcmFwcGVyOwordHlwZWRlZiBQaXhtYXAgTmF0
aXZlUGl4bWFwOworCisvLyBDb250ZW50cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFja2VkIGJ5IG5h
dGl2ZSB3aW5kb3cuCitjbGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEVH
TFRyYW5zcG9ydFN1cmZhY2UgeworcHVibGljOgorICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2UoY29uc3QgSW50U2l6ZSYsIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyk7
CisgICAgdmlydHVhbCB+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHZpcnR1YWwg
dm9pZCBzd2FwQnVmZmVycygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkg
T1ZFUlJJREU7Cit9OworCitjbGFzcyBFR0xQaXhtYXBTdXJmYWNlIDogcHVibGljIEVHTE9mZlNj
cmVlblN1cmZhY2UgeworcHVibGljOgorICAgIEVHTFBpeG1hcFN1cmZhY2UoR0xQbGF0Zm9ybVN1
cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5FR0xQaXhtYXBTdXJmYWNl
KCk7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKK307CisKK30KKworI2Vu
ZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIFNv
dXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IGE5NWNjZWQuLmZmMTAwMGUgMTAwNjQ0
Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgU291cmNlL2NtYWtlL09wdGlv
bnNFZmwuY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBpZiAoRU5BQkxFX0VDT1JFX1gpCiAKICAg
ICBsaXN0KEFQUEVORCBFQ09SRV9BRERJVElPTkFMX0NPTVBPTkVOVFMgWCkKICAgICBhZGRfZGVm
aW5pdGlvbnMoLURIQVZFX0VDT1JFX1gpCisgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1BMQVRG
T1JNX1gxMT0xKQogZW5kaWYgKCkKIAogIyBBbGxvdyBidWlsZGluZyB0aGUgRUZMIHBvcnQgdXNp
bmcgRUZMIHZlcnNpb24gMS42KyB0byBidWlsZCBvbiBUaXplbiB0cnVuawo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195752</attachid>
            <date>2013-03-29 08:22:27 -0700</date>
            <delta_ts>2013-03-29 09:05:34 -0700</delta_ts>
            <desc>patchv7</desc>
            <filename>eglsurfacerebased.patch</filename>
            <type>text/plain</type>
            <size>36421</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGFlYjdkZDIuLjI3ZDVhZDYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEz
LTAzLTI5ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtFR0xdIEFkZCBzdXBwb3J0IGZvciBjcmVhdGluZyBvZmZzY3JlZW4g
c3VyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMzM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5vYW0gUm9zZW50aGFsLgorCisgICAgICAg
IFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIGVuYWJsaW5nIEVHTCBhbmQgR0xFUzIKKyAgICAg
ICAgc3VwcG9ydCBmb3IgRUZMIHBvcnQuIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB1c2lu
ZworICAgICAgICBFR0xQaXhtYXBTdXJmYWNlIGFzIGFuIG9mZnNjcmVlbnN1cmZhY2UuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnU2VsZWN0b3I6OkVHTENvbmZpZ1NlbGVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9yOjpzdXJmYWNlQ29udGV4
dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdTZWxlY3Rvcjo6bmF0aXZlVmlz
dWFsSWQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnU2VsZWN0b3I6OnJlc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9yOjpjcmVhdGVDb25maWcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oOgor
ICAgICAgICAoRUdMQ29uZmlnU2VsZWN0b3IpOgorCisgICAgICAgICBBZGRlZCBsb2dpYyB0byBz
ZWxlY3QgRUdMQ29uZmlnIHN1cHBvcnRpbmcgYWxwaGEgYW5kCisgICAgICAgICBvcGFxdWUgYXMg
bmVlZGVkLiBNb3ZlZCBDb2RlIHJlbGF0ZWQgdG8gZGlzcGxheSB0bworICAgICAgICAgRUdMSGVs
cGVyIGNsYXNzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TEhlbHBlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xEaXNw
bGF5Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29ubmVjdGlvbjo6
RUdMRGlzcGxheUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RUdMRGlzcGxheUNvbm5l
Y3Rpb246On5FR0xEaXNwbGF5Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNw
bGF5Q29ubmVjdGlvbjo6ZGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xEaXNwbGF5Q29u
bmVjdGlvbjo6dGVybWluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEhlbHBlcjo6ZWdsRGlz
cGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xIZWxw
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5z
cG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6RUdM
VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNl
OjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6On5F
R0xUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZh
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29u
ZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5TdXJmYWNlOjpjcmVh
dGVPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlblN1cmZh
Y2U6OkVHTE9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVu
U3VyZmFjZTo6fkVHTE9mZlNjcmVlblN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2Zm
U2NyZWVuU3VyZmFjZTo6YXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3Jl
ZW5TdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
blN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVHTFRyYW5z
cG9ydFN1cmZhY2UpOgorICAgICAgICAoRUdMT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZh
Y2UuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dU
cmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6On5FR0xXaW5kb3dUcmFuc3BvcnRTdXJm
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3YXBC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMUGl4bWFwU3VyZmFjZTo6RUdMUGl4bWFwU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjp+RUdMUGl4bWFwU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xQaXhtYXBTdXJmYWNlOjpkZXN0cm95KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2UuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TFN1cmZhY2UuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChFR0xQaXhtYXBTdXJmYWNlKToKKworICAgICAgICBFR0xQ
aXhtYXBTdXJmYWNlIGltcGxlbWVudGF0aW9uLgorCiAyMDEzLTAzLTI5ICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBGbGFt
ZSBDaGFydC4gRGV2ZWxvcGVycyB3aWxsIGhhdmUgbW9yZSBjbHVlCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggY2YxNjcyMi4uZDY2NjNiMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMzI4
LDcgKzMyOCw5IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdTZWxlY3Rvci5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcAogICAgICAgICApCiAgICAgZWxzZSAo
KQogICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5j
cHAKaW5kZXggOTE3OGZlZS4uZjY1NWFiYiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKQEAgLTQ0
LDE1ICs0NCwxNiBAQCBzdGF0aWMgR0xQbGF0Zm9ybVN1cmZhY2UqIG1fY3VycmVudERyYXdhYmxl
ID0gMDsKIAogUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6
OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsK
KyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2U7CiAjaWYgVVNFKEdMWCkKLSAg
ICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYT2Zm
U2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7Ci0KLSAgICBpZiAoc3VyZmFjZS0+ZHJhd2FibGUo
KSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOworICAgIHN1cmZhY2UgPSBhZG9w
dFB0cihuZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKSk7CiAjZWxzZQotICAgIFVO
VVNFRF9QQVJBTShhdHRyaWJ1dGVzKTsKKyAgICBzdXJmYWNlID0gRUdMT2ZmU2NyZWVuU3VyZmFj
ZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKTsKICNlbmRpZgogCisgICAgaWYg
KHN1cmZhY2UgJiYgc3VyZmFjZS0+ZHJhd2FibGUoKSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2Uu
cmVsZWFzZSgpOworCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNl
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFu
c3BvcnRTdXJmYWNlLmNwcAppbmRleCAwNzE4MzMzLi42ZDA3Y2E1IDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFj
ZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9H
TFRyYW5zcG9ydFN1cmZhY2UuY3BwCkBAIC00NywxMCArNDcsMTEgQEAgc3RhdGljIGJvb2wgdmVy
dGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQgPSBmYWxzZTsKIAogUGFzc093blB0cjxHTFRyYW5zcG9y
dFN1cmZhY2U+IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZShjb25z
dCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogeworICAgIE93
blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZhY2U7CiAjaWYgVVNFKEdMWCkKLSAgICBPd25Q
dHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWFRyYW5zcG9y
dFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOworICAgIHN1cmZhY2UgPSBhZG9wdFB0cihuZXcg
R0xYVHJhbnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVzKSk7CiAjZWxpZiBVU0UoRUdMKQot
ICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdM
V2luZG93VHJhbnNwb3J0U3VyZmFjZShhdHRyaWJ1dGVzKSk7CisgICAgc3VyZmFjZSA9IEVHTFRy
YW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcyk7
CiAjZW5kaWYKIAogICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZh
Y2UtPmRyYXdhYmxlKCkpCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3BwCmluZGV4IDli
OWMyZTAuLmI3NjU4ZTMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3BwCkBAIC0y
OCwxMjggKzI4LDQ1IEBACiAKICNpZiBVU0UoRUdMKQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVNoYXJlZEVHTERpc3BsYXkqIFNoYXJlZEVHTERpc3BsYXk6Om1fc3RhdGljU2hhcmVkRUdMRGlz
cGxheSA9IDA7Ci0KLXN0YXRpYyBFR0xpbnQgY29uZmlnQXR0cmlidXRlTGlzdFtdID0gewotI2lm
IFVTRShPUEVOR0xfRVNfMikKLSAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VT
Ml9CSVQsCi0jZWxzZQotICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfQklULAot
I2VuZGlmCi0gICAgRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTF9HUkVFTl9TSVpFLCA4LAotICAg
IEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMX1NURU5DSUxfU0laRSwgOCwKLSAgICBFR0xfQUxQ
SEFfU0laRSwgMCwKLSAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfTk9ORSwKLSAgICBFR0xfTk9O
RQotfTsKLQotdm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpkZXJlZigpCi17Ci0gICAgaWYgKGRlcmVm
QmFzZSgpKSB7Ci0gICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSA9IDA7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzOwotICAgIH0KLX0KLQotRUdMRGlzcGxheSBTaGFyZWRFR0xEaXNwbGF5Ojpz
aGFyZWRFR0xEaXNwbGF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lZ2xEaXNwbGF5OwotfQot
Ci1TaGFyZWRFR0xEaXNwbGF5OjpTaGFyZWRFR0xEaXNwbGF5KE5hdGl2ZVNoYXJlZERpc3BsYXkq
IGRpc3BsYXkpCi0gICAgOiBtX2VnbERpc3BsYXkoRUdMX05PX0RJU1BMQVkpCi17Ci0gICAgaWYg
KGRpc3BsYXkpCi0gICAgICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERpc3BsYXkocmVpbnRlcnBy
ZXRfY2FzdDxFR0xOYXRpdmVEaXNwbGF5VHlwZT4oZGlzcGxheSkpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKLQot
ICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyNpbmNsdWRlICJFR0xIZWxwZXIuaCIKIAotICAgIEVHTEJvb2xlYW4gc3VjY2Vz
czsKLSAgICBzdWNjZXNzID0gZWdsSW5pdGlhbGl6ZShtX2VnbERpc3BsYXksIDAsIDApOwotCi0g
ICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFR0xJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQ
TEFZOwotICAgIH0KLQotICAgIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOwot
Ci0gICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gc2V0IEVHTCBBUEkoJWQpLiIsIGVnbEdldEVycm9yKCkpOwotICAgICAgICBtX2VnbERp
c3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhcmVkRUdMRGlzcGxh
eTo6Y2xlYW51cCgpCi17Ci0gICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZWdsTWFrZUN1cnJlbnQobV9lZ2xEaXNwbGF5LCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICBlZ2xUZXJt
aW5hdGUobV9lZ2xEaXNwbGF5KTsKLSAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsK
LX0KLQotU2hhcmVkRUdMRGlzcGxheTo6flNoYXJlZEVHTERpc3BsYXkoKQotewotICAgIGNsZWFu
dXAoKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotRUdMQ29uZmlnU2VsZWN0b3I6OkVHTENv
bmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1
dGVzLCBOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQotICAgIDogbV9wYnVmZmVyRkJDb25m
aWcoMCkKK0VHTENvbmZpZ1NlbGVjdG9yOjpFR0xDb25maWdTZWxlY3RvcihHTFBsYXRmb3JtU3Vy
ZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IG1fcGl4bWFwRkJDb25m
aWcoMCkKICAgICAsIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQogICAgICwgbV9hdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpCiB7Ci0gICAgbV9zaGFyZWREaXNwbGF5ID0gU2hhcmVkRUdMRGlzcGxh
eTo6Y3JlYXRlKGRpc3BsYXkpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IEVHTEhlbHBlcjo6ZWds
RGlzcGxheSgpOwogfQogCiBFR0xDb25maWdTZWxlY3Rvcjo6fkVHTENvbmZpZ1NlbGVjdG9yKCkK
IHsKIH0KIAotUGxhdGZvcm1EaXNwbGF5IEVHTENvbmZpZ1NlbGVjdG9yOjpkaXNwbGF5KCkgY29u
c3QKK0VHTENvbmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6cGl4bWFwQ29udGV4dENvbmZpZygpCiB7
Ci0gICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdMRGlzcGxheSgpOwotfQorICAg
IGlmICghbV9waXhtYXBGQkNvbmZpZykKKyAgICAgICAgbV9waXhtYXBGQkNvbmZpZyA9IGNyZWF0
ZUNvbmZpZyhFR0xfUElYTUFQX0JJVCk7CiAKLUVHTENvbmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6
cEJ1ZmZlckNvbnRleHRDb25maWcoKQotewotICAgIGlmICghbV9wYnVmZmVyRkJDb25maWcpIHsK
LSAgICAgICAgY29uZmlnQXR0cmlidXRlTGlzdFsxMV0gPSBtX2F0dHJpYnV0ZXMgJiBHTFBsYXRm
b3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhID8gOCA6IDA7Ci0gICAgICAgIGNvbmZpZ0F0dHJpYnV0
ZUxpc3RbMTNdID0gRUdMX1BJWE1BUF9CSVQ7Ci0gICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0g
Y3JlYXRlQ29uZmlnKGNvbmZpZ0F0dHJpYnV0ZUxpc3QpOwotICAgIH0KLQotICAgIHJldHVybiBt
X3BidWZmZXJGQkNvbmZpZzsKKyAgICByZXR1cm4gbV9waXhtYXBGQkNvbmZpZzsKIH0KIAogRUdM
Q29uZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpzdXJmYWNlQ29udGV4dENvbmZpZygpCiB7Ci0gICAg
aWYgKCFtX3N1cmZhY2VDb250ZXh0RkJDb25maWcpIHsKLSAgICAgICAgY29uZmlnQXR0cmlidXRl
TGlzdFsxMV0gPSBtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
ID8gOCA6IDA7Ci0gICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3RbMTNdID0gRUdMX1dJTkRPV19C
SVQ7Ci0gICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhjb25m
aWdBdHRyaWJ1dGVMaXN0KTsKLSAgICB9CisgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0RkJDb25m
aWcpCisgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhFR0xf
V0lORE9XX0JJVCk7CiAKICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOwogfQog
CiBFR0xpbnQgRUdMQ29uZmlnU2VsZWN0b3I6Om5hdGl2ZVZpc3VhbElkKGNvbnN0IEVHTENvbmZp
ZyYgY29uZmlnKSBjb25zdAogewotICAgIGlmIChkaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkp
CisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKICAgICAgICAgcmV0
dXJuIC0xOwogCiAgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKLSAgICBlZ2xHZXRDb25maWdBdHRy
aWIoZGlzcGxheSgpLCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lELCAmZWdsVmFsdWUpOwor
ICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIGNvbmZpZywgRUdMX05BVElW
RV9WSVNVQUxfSUQsICZlZ2xWYWx1ZSk7CiAKICAgICByZXR1cm4gZWdsVmFsdWU7CiB9CkBAIC0x
NjIsMjUgKzc5LDg3IEBAIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBFR0xD
b25maWdTZWxlY3Rvcjo6YXR0cmlidXRlcygpIGNvbnN0CiB2b2lkIEVHTENvbmZpZ1NlbGVjdG9y
OjpyZXNldCgpCiB7CiAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gMDsKLSAgICBtX3Bi
dWZmZXJGQkNvbmZpZyA9IDA7CisgICAgbV9waXhtYXBGQkNvbmZpZyA9IDA7CiB9CiAKLUVHTENv
bmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6Y3JlYXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVz
W10pCitFR0xDb25maWcgRUdMQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyhFR0xpbnQgZXhw
ZWN0ZWRTdXJmYWNlVHlwZSkKIHsKLSAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZ
KQorICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgaW50IG51bUNvbmZpZ3M7CisgICAgRUdMaW50IG51bUNvbmZpZ3M7CisK
KyAgICBlZ2xHZXRDb25maWdzKG1fc2hhcmVkRGlzcGxheSwgMCwgMCwgJm51bUNvbmZpZ3MpOwor
CisgICAgaWYgKCFudW1Db25maWdzKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJl
dHJpZXZlIG51bWJlciBvZiBFR0wgY29uZmlncy4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgRUdMQ29uZmlnIGNvbmZpZ3NbbnVtQ29uZmlnc107CisgICAgZWdsR2V0Q29uZmln
cyhtX3NoYXJlZERpc3BsYXksIGNvbmZpZ3MsIG51bUNvbmZpZ3MsICZudW1Db25maWdzKTsKKwor
ICAgIGlmICghbnVtQ29uZmlncykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRy
aWV2ZSBhbnkgRUdMIGNvbmZpZ3MuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAg
IEVHTENvbmZpZyBjb25maWcgPSAwOworICAgIEVHTGludCBhbHBoYSwgc3VyZmFjZSwgcmVkLCBn
cmVlbiwgYmx1ZSwgcmVuZGVyVHlwZTsKKyAgICBFR0xpbnQgZXhwZWN0ZWRBbHBoYSA9IG1fYXR0
cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsKKyAgICBF
R0xpbnQgZXhwZWN0ZWRSZWQgPSA4OworICAgIEVHTGludCBleHBlY3RlZEJsdWUgPSA4OworICAg
IEVHTGludCBleHBlY3RlZEdyZWVuID0gODsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgRUdM
aW50IGV4cGVjdGVkUmVuZGVyVHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKKyNlbHNlCisgICAg
RUdMaW50IGV4cGVjdGVkUmVuZGVyVHlwZSA9IEVHTF9PUEVOR0xfQklULAorI2VuZGlmCisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkrKykgeworICAgICAgICBFR0xDb25m
aWcgdGVtcENvbmZpZyA9IGNvbmZpZ3NbaV07CisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYiht
X3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9SRU5ERVJBQkxFX1RZUEUsICZyZW5kZXJU
eXBlKTsKKworICAgICAgICBpZiAoIShyZW5kZXJUeXBlICYgZXhwZWN0ZWRSZW5kZXJUeXBlKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3No
YXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9BTFBIQV9TSVpFLCAmYWxwaGEpOworCisgICAg
ICAgIGlmIChhbHBoYSAhPSBleHBlY3RlZEFscGhhKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywg
RUdMX1JFRF9TSVpFLCAmcmVkKTsKKworICAgICAgICBpZiAocmVkICE9IGV4cGVjdGVkUmVkKQor
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBpZiAoIWVnbENob29zZUNvbmZpZyhkaXNwbGF5
KCksIGF0dHJpYnV0ZXMsICZjb25maWcsIDEsICZudW1Db25maWdzKSkKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gZ2V0IHN1cHBvcnRlZCBjb25maWdpcmF0aW9ucy4iKTsKKyAgICAgICAg
ZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX0dSRUVO
X1NJWkUsICZncmVlbik7CiAKLSAgICBpZiAobnVtQ29uZmlncyAhPSAxKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRUdMQ2hvb3NlQ29uZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmln
IGJ1dCAoJWQpLiIsIG51bUNvbmZpZ3MpOwotICAgICAgICBjb25maWcgPSAwOworICAgICAgICBp
ZiAoZ3JlZW4gIT0gZXhwZWN0ZWRHcmVlbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9C
TFVFX1NJWkUsICZibHVlKTsKKworICAgICAgICBpZiAoYmx1ZSAhPSBleHBlY3RlZEJsdWUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFy
ZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfU1VSRkFDRV9UWVBFLCAmc3VyZmFjZSk7CisKKyAg
ICAgICAgaWYgKHN1cmZhY2UgJiBleHBlY3RlZFN1cmZhY2VUeXBlKSB7CisgICAgICAgICAgICBj
b25maWcgPSBjb25maWdzW2ldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9
CiAKKyAgICBpZiAoKG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxw
aGEpICYmICFjb25maWcpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUg
RUdMIENvbmZpZ3VyYXRpb24gd2l0aCBhbHBoYS4gVHJ5aW5nIHRvIGZpbmQgb25lIHdpdGhvdXQg
YWxwaGEgc3VwcG9ydC4iKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzICY9IH5HTFBsYXRmb3JtU3Vy
ZmFjZTo6U3VwcG9ydEFscGhhOworICAgICAgICBjb25maWcgPSBjcmVhdGVDb25maWcoZXhwZWN0
ZWRTdXJmYWNlVHlwZSk7CisgICAgfQorCisgICAgaWYgKCFjb25maWcpCisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGZpbmQgYSB2YWxpZCBFR0wgQ29uZmlndXJhdGlvbi4iKTsKKwogICAg
IHJldHVybiBjb25maWc7CiB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaAppbmRleCA4
ODU2NDI5Li41Mjg5N2U0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5oCkBAIC0zMSw2
MSArMzEsMjggQEAKICNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CiAjaW5jbHVkZSA8b3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIERp
c3BsYXkgTmF0aXZlU2hhcmVkRGlzcGxheTsKLQotY2xhc3MgU2hhcmVkRUdMRGlzcGxheSA6IHB1
YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFy
ZWRFR0xEaXNwbGF5KTsKLQotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEVH
TERpc3BsYXk+IGNyZWF0ZShOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQotICAgIHsKLSAg
ICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXkpCi0gICAgICAgICAgICBtX3N0YXRp
Y1NoYXJlZEVHTERpc3BsYXkgPSBuZXcgU2hhcmVkRUdMRGlzcGxheShkaXNwbGF5KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5LT5yZWYoKTsKLQot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRlcmVmKCk7Ci0gICAgRUdMRGlzcGxheSBzaGFyZWRFR0xEaXNwbGF5KCkg
Y29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBTaGFyZWRFR0xEaXNwbGF5KE5hdGl2ZVNoYXJlZERp
c3BsYXkqKTsKLSAgICB2b2lkIGNsZWFudXAoKTsKLSAgICB2aXJ0dWFsIH5TaGFyZWRFR0xEaXNw
bGF5KCk7Ci0KLSAgICBzdGF0aWMgU2hhcmVkRUdMRGlzcGxheSogbV9zdGF0aWNTaGFyZWRFR0xE
aXNwbGF5OwotICAgIEVHTERpc3BsYXkgbV9lZ2xEaXNwbGF5OwotfTsKLQogY2xhc3MgRUdMQ29u
ZmlnU2VsZWN0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVHTENvbmZpZ1NlbGVjdG9y
KTsKLQogcHVibGljOgotICAgIEVHTENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpT
dXJmYWNlQXR0cmlidXRlcywgTmF0aXZlU2hhcmVkRGlzcGxheSogPSAwKTsKKyAgICBFR0xDb25m
aWdTZWxlY3RvcihHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMpOwogICAgIHZp
cnR1YWwgfkVHTENvbmZpZ1NlbGVjdG9yKCk7Ci0gICAgUGxhdGZvcm1EaXNwbGF5IGRpc3BsYXko
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEVHTENvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpOwor
ICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBpeG1hcENvbnRleHRDb25maWcoKTsKICAgICB2aXJ0dWFs
IEVHTENvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpOwogICAgIEVHTGludCBuYXRpdmVWaXN1
YWxJZChjb25zdCBFR0xDb25maWcmKSBjb25zdDsKICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6U3Vy
ZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcygpIGNvbnN0OwogICAgIHZvaWQgcmVzZXQoKTsKIAog
cHJpdmF0ZToKLSAgICBFR0xDb25maWcgY3JlYXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVz
W10pOworICAgIEVHTENvbmZpZyBjcmVhdGVDb25maWcoRUdMaW50IGV4cGVjdGVkU3VyZmFjZVR5
cGUpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgRUdMQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOworICAg
IEVHTENvbmZpZyBtX3BpeG1hcEZCQ29uZmlnOwogICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250
ZXh0RkJDb25maWc7Ci0gICAgUmVmUHRyPFNoYXJlZEVHTERpc3BsYXk+IG1fc2hhcmVkRGlzcGxh
eTsKICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXMgOiAzOworICAgIFBsYXRmb3JtRGlzcGxheSBt
X3NoYXJlZERpc3BsYXk7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjZmRmNAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcApAQCAtMCww
ICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRUdMSGVscGVyLmgiCisKKyNpZiBVU0UoRUdMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBFR0xEaXNwbGF5Q29ubmVjdGlvbiB7CisKKyAgICBFR0xEaXNwbGF5Q29ubmVj
dGlvbihOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5ID0gMCkKKyAgICB7CisgICAgICAgIGlm
IChkaXNwbGF5KQorICAgICAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWlu
dGVycHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRf
RElTUExBWSk7CisKKyAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxl
ZC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEVHTEJvb2xl
YW4gc3VjY2VzczsKKyAgICAgICAgc3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5
LCAwLCAwKTsKKworICAgICAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJFR0xJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICB0
ZXJtaW5hdGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN1
Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOworCisgICAgICAgIGlmIChzdWNjZXNz
ICE9IEVHTF9UUlVFKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdM
IEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgICAgICB0ZXJtaW5hdGUoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5FR0xEaXNwbGF5Q29u
bmVjdGlvbigpCisgICAgeworICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICB9CisKKyAgICBFR0xE
aXNwbGF5IGRpc3BsYXkoKSB7IHJldHVybiBtX2VnbERpc3BsYXk7IH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIHRlcm1pbmF0ZSgpCisgICAgeworICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVH
TF9OT19ESVNQTEFZKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVnbFRlcm1pbmF0
ZShtX2VnbERpc3BsYXkpOworICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsK
KyAgICB9CisKKyAgICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKK307CisKK1BsYXRmb3JtRGlz
cGxheSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKQoreworICAgIC8vIERpc3BsYXkgY29ubmVjdGlv
biB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24uCisjaWYgUExBVEZPUk0o
WDExKQorICAgIHN0YXRpYyBFR0xEaXNwbGF5Q29ubmVjdGlvbiBkaXNwbGF5Q29ubmVjdGlvbihO
YXRpdmVXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpOworI2Vsc2UKKyAgICBzdGF0aWMgRUdMRGlz
cGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb247CisjZW5kaWYKKyAgICByZXR1cm4gZGlz
cGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3MDhhNwotLS0gL2Rldi9udWxs
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVs
cGVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xI
ZWxwZXJfaAorI2RlZmluZSBFR0xIZWxwZXJfaAorCisjaWYgVVNFKEVHTCkKKworI2lmIFBMQVRG
T1JNKFgxMSkKKyNpbmNsdWRlIDxnbHgvWDExSGVscGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUg
PG9wZW5nbC9HTERlZnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0o
WDExKQordHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsKK3R5cGVkZWYgRGlzcGxheSBO
YXRpdmVTaGFyZWREaXNwbGF5OworI2Vsc2UKK3R5cGVkZWYgdm9pZCBOYXRpdmVTaGFyZWREaXNw
bGF5OworI2VuZGlmCisKK2NsYXNzIEVHTEhlbHBlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBs
YXRmb3JtRGlzcGxheSBlZ2xEaXNwbGF5KCk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYK
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuY3BwCmluZGV4IGRhMWQxN2MuLmM0ZjdmY2YgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmNwcApAQCAtMjgsMTEwICsyOCwxMTggQEAKIAogI2lmIFVTRShFR0wpICYmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQogCisjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKKyNpbmNsdWRl
ICJFR0xIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgorCisjaWYgUExB
VEZPUk0oWDExKQorI2luY2x1ZGUgIkVHTFhTdXJmYWNlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMpCi0gICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykKK1Bhc3NPd25Q
dHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBFR0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3Bv
cnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMpCiB7Ci0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxl
Y3RvcihhdHRyaWJ1dGVzLCBOYXRpdmVXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpKTsKLSAgICBt
X3NoYXJlZERpc3BsYXkgPSBtX2NvbmZpZ1NlbGVjdG9yLT5kaXNwbGF5KCk7CisgICAgT3duUHRy
PEdMVHJhbnNwb3J0U3VyZmFjZT4gc3VyZmFjZTsKKyNpZiBQTEFURk9STShYMTEpCisgICAgc3Vy
ZmFjZSA9IGFkb3B0UHRyKG5ldyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJp
YnV0ZXMpKTsKKyNlbmRpZgogCi0gICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElT
UExBWSkgewotICAgICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2UucmVs
ZWFzZSgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAgICBFR0xDb25maWcgY29uZmln
ID0gbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKK0VHTFRyYW5zcG9y
dFN1cmZhY2U6OkVHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgU3VyZmFj
ZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IEdMVHJhbnNwb3J0U3VyZmFjZShzaXplLCBh
dHRyaWJ1dGVzKQoreworICAgIG1fc2hhcmVkRGlzcGxheSA9IEVHTEhlbHBlcjo6ZWdsRGlzcGxh
eSgpOwogCi0gICAgaWYgKCFjb25maWcpIHsKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmICht
X3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAKLSAgICBFR0xpbnQgdmlzdWFsSWQgPSBtX2NvbmZpZ1NlbGVjdG9yLT5uYXRpdmVWaXN1YWxJ
ZChjb25maWcpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29uZmln
U2VsZWN0b3IoYXR0cmlidXRlcykpOworfQogCi0gICAgaWYgKHZpc3VhbElkID09IC0xKSB7Ci0g
ICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK0dMUGxhdGZvcm1TdXJm
YWNlOjpTdXJmYWNlQXR0cmlidXRlcyBFR0xUcmFuc3BvcnRTdXJmYWNlOjphdHRyaWJ1dGVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpOworfQog
Ci0gICAgTmF0aXZlV3JhcHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRs
ZSwgKGF0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhKSwgdmlzdWFs
SWQpOworRUdMVHJhbnNwb3J0U3VyZmFjZTo6fkVHTFRyYW5zcG9ydFN1cmZhY2UoKQoreworfQog
Ci0gICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewotICAgICAgICBkZXN0cm95KCk7Cit2b2lkIEVH
TFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQoreworICAgIGlmIChtX2RyYXdhYmxlID09IEVH
TF9OT19TVVJGQUNFIHx8IG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJm
YWNlKG1fc2hhcmVkRGlzcGxheSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25m
aWcoKSwgKEVHTE5hdGl2ZVdpbmRvd1R5cGUpbV9idWZmZXJIYW5kbGUsIDApOworICAgIEdMVHJh
bnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpOwogCi0gICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05P
X1NVUkZBQ0UpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJm
YWNlKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmICht
X2RyYXdhYmxlKSB7CisgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwg
bV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKICAgICB9
Ci19CiAKLUdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlOjphdHRyaWJ1dGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb25maWdT
ZWxlY3Rvci0+YXR0cmlidXRlcygpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwog
fQogCi1FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZSgpCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJh
dGlvbigpCiB7CisgICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29u
ZmlnKCk7CiB9CiAKLVBsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJm
YWNlOjpjb25maWd1cmF0aW9uKCkKK1Bhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEVHTE9m
ZlNjcmVlblN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMg
YXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRl
eHRDb25maWcoKTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2U7CisjaWYg
UExBVEZPUk0oWDExKQorICAgIHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMUGl4bWFwU3VyZmFj
ZShhdHRyaWJ1dGVzKSk7CisjZW5kaWYKKworICAgIGlmIChzdXJmYWNlKQorICAgICAgICByZXR1
cm4gc3VyZmFjZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBF
R0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCitFR0xPZmZTY3JlZW5TdXJm
YWNlOjpFR0xPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzIHN1cmZhY2VBdHRyaWJ1
dGVzKQorICAgIDogR0xQbGF0Zm9ybVN1cmZhY2Uoc3VyZmFjZUF0dHJpYnV0ZXMpCiB7Ci0gICAg
aWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47CisgICAgbV9zaGFyZWREaXNwbGF5ID0g
RUdMSGVscGVyOjplZ2xEaXNwbGF5KCk7CiAKLSAgICBFR0xCb29sZWFuIHN1Y2Nlc3MgPSBlZ2xC
aW5kQVBJKGVnbEFQSVZlcnNpb24pOworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05P
X0RJU1BMQVkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVF
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS4iLCBlZ2xH
ZXRFcnJvcigpKTsKLSAgICAgICAgZGVzdHJveSgpOwotICAgIH0KKyAgICBtX2NvbmZpZ1NlbGVj
dG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKHN1cmZhY2VBdHRyaWJ1dGVzKSk7
Cit9CiAKLSAgICBzdWNjZXNzID0gZWdsU3dhcEJ1ZmZlcnMobV9zaGFyZWREaXNwbGF5LCBtX2Ry
YXdhYmxlKTsKK0VHTE9mZlNjcmVlblN1cmZhY2U6On5FR0xPZmZTY3JlZW5TdXJmYWNlKCkKK3sK
K30KIAotICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIFN3YXBCdWZmZXJzKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLSAgICAgICAgZGVz
dHJveSgpOwotICAgIH0KK0dMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBFR0xP
ZmZTY3JlZW5TdXJmYWNlOjphdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25m
aWdTZWxlY3Rvci0+YXR0cmlidXRlcygpOwogfQogCi12b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1
cmZhY2U6OmRlc3Ryb3koKQorUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTE9mZlNjcmVlblN1cmZh
Y2U6OmNvbmZpZ3VyYXRpb24oKQogewotICAgIEdMVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgp
OwotICAgIE5hdGl2ZVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwotICAg
IGZyZWVFR0xSZXNvdXJjZXMoKTsKLSAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CisgICAgcmV0dXJu
IG1fY29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKTsKIH0KIAotdm9pZCBFR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2VzKCkKK3ZvaWQgRUdMT2ZmU2Ny
ZWVuU3VyZmFjZTo6ZGVzdHJveSgpCiB7Ci0gICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NV
UkZBQ0UgfHwgbV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgIGlmIChtX3No
YXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkgfHwgbV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VS
RkFDRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xC
aW5kQVBJKGVnbEFQSVZlcnNpb24pOwotCi0gICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkg
ewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0
RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kcmF3YWJsZSkgeworICAgICAg
ICBlZ2xEZXN0cm95U3VyZmFjZShtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworICAgICAg
ICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7CiAgICAgfQogCi0gICAgZWdsRGVzdHJveVN1
cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKLSAgICBtX2RyYXdhYmxlID0gRUdM
X05PX1NVUkZBQ0U7Ci19Ci0KLXZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2Vv
bWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKLXsKLSAgICBHTFRyYW5zcG9ydFN1cmZhY2U6
OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIE5hdGl2ZVdyYXBwZXI6OnJlc2l6ZVdpbmRvdyhu
ZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CisgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7
CiB9CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKaW5kZXggMDVlOGFlNi4uNDY0ZjFiZiAxMDA2NDQKLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xT
dXJmYWNlLmgKQEAgLTI4LDMxICsyOCwzOCBAQAogCiAjaWYgVVNFKEVHTCkgJiYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCiAKLSNpbmNsdWRlICJFR0xDb25maWdTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkdMVHJhbnNwb3J0U3VyZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsK
K2NsYXNzIEVHTENvbmZpZ1NlbGVjdG9yOwogCi0vLyBDb250ZW50cyBvZiB0aGUgc3VyZmFjZSBh
cmUgYmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cuCi1jbGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJm
YWNlIDogcHVibGljIEdMVHJhbnNwb3J0U3VyZmFjZSB7CitjbGFzcyBFR0xUcmFuc3BvcnRTdXJm
YWNlIDogcHVibGljIEdMVHJhbnNwb3J0U3VyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKGNvbnN0
IEludFNpemUmLCBTdXJmYWNlQXR0cmlidXRlcyk7CisgICAgdmlydHVhbCB+RUdMVHJhbnNwb3J0
U3VyZmFjZSgpOworICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRp
b24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMo
KSBjb25zdCBPVkVSUklERTsKKworcHJvdGVjdGVkOgorICAgIEVHTFRyYW5zcG9ydFN1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICBPd25QdHI8RUdMQ29uZmln
U2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7Cit9OwogCitjbGFzcyBFR0xPZmZTY3JlZW5TdXJm
YWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKIHB1YmxpYzoKLSAgICBFR0xXaW5kb3dU
cmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmLCBTdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAg
dmlydHVhbCB+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRy
aWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5FR0xPZmZTY3JlZW5TdXJmYWNlKCk7CiAgICAgdmlydHVh
bCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZlcnMoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1
cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCBPVkVSUklERTsKIAotcHJpdmF0ZToK
LSAgICB2b2lkIGZyZWVFR0xSZXNvdXJjZXMoKTsKK3Byb3RlY3RlZDoKKyAgICBFR0xPZmZTY3Jl
ZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzKTsKICAgICBPd25QdHI8RUdMQ29uZmlnU2VsZWN0
b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmFlZWUKLS0tIC9kZXYvbnVsbAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNw
cApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkVHTFhTdXJmYWNlLmgiCisKKyNpZiBQTEFURk9STShYMTEpICYmIFVT
RShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiRUdMQ29uZmlnU2Vs
ZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFR0xXaW5kb3dUcmFuc3BvcnRTdXJm
YWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIEdMUGxh
dGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogRUdMVHJh
bnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVzKQoreworICAgIGlmICghbV9jb25maWdTZWxl
Y3RvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yLT5zdXJm
YWNlQ29udGV4dENvbmZpZygpKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEVHTGludCB2aXN1YWxJZCA9IG1fY29uZmlnU2VsZWN0b3ItPm5hdGl2
ZVZpc3VhbElkKG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCkpOworCisg
ICAgaWYgKHZpc3VhbElkID09IC0xKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygm
bV9idWZmZXJIYW5kbGUsIHZpc3VhbElkLCBtX2NvbmZpZ1NlbGVjdG9yLT5hdHRyaWJ1dGVzKCkg
JiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhLCBzaXplKTsKKworICAgIGlmICghbV9i
dWZmZXJIYW5kbGUpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9kcmF3YWJsZSA9IGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UobV9zaGFyZWREaXNw
bGF5LCBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpLCBzdGF0aWNfY2Fz
dDxFR0xOYXRpdmVXaW5kb3dUeXBlPihtX2J1ZmZlckhhbmRsZSksIDApOworCisgICAgaWYgKG1f
ZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIEVHTCBzdXJmYWNlKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVz
dHJveSgpOworICAgIH0KK30KKworRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6fkVHTFdpbmRv
d1RyYW5zcG9ydFN1cmZhY2UoKQoreworfQorCit2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAoIWVnbFN3YXBCdWZmZXJzKG1fc2hhcmVkRGlz
cGxheSwgbV9kcmF3YWJsZSkpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIFN3YXBCdWZm
ZXJzKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKK30KKwordm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRT
dXJmYWNlOjpkZXN0cm95KCkKK3sKKyAgICBFR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCk7
CisKKyAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgTmF0aXZlV3JhcHBlcjo6ZGVz
dHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIG1fYnVmZmVySGFuZGxlID0gMDsK
KyAgICB9Cit9CisKK0VHTFBpeG1hcFN1cmZhY2U6OkVHTFBpeG1hcFN1cmZhY2UoR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIHN1cmZhY2VBdHRyaWJ1dGVzKQorICAgIDogRUdM
T2ZmU2NyZWVuU3VyZmFjZShzdXJmYWNlQXR0cmlidXRlcykKK3sKKyAgICBpZiAoIW1fY29uZmln
U2VsZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIEVHTENvbmZpZyBjb25maWcgPSBtX2Nv
bmZpZ1NlbGVjdG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCk7CisKKyAgICBpZiAoIWNvbmZpZykg
eworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFR0xp
bnQgdmlzdWFsSWQgPSBtX2NvbmZpZ1NlbGVjdG9yLT5uYXRpdmVWaXN1YWxJZChjb25maWcpOwor
CisgICAgaWYgKHZpc3VhbElkID09IC0xKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIE5hdGl2ZVBpeG1hcCBwaXhtYXA7CisgICAgTmF0aXZlV3Jh
cHBlcjo6Y3JlYXRlUGl4bWFwKCZwaXhtYXAsIHZpc3VhbElkLCBtX2NvbmZpZ1NlbGVjdG9yLT5h
dHRyaWJ1dGVzKCkgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhKTsKKyAgICBtX2J1
ZmZlckhhbmRsZSA9IHBpeG1hcDsKKworICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKKyAgICAg
ICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kcmF3YWJsZSA9
IGVnbENyZWF0ZVBpeG1hcFN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBjb25maWcsIHN0YXRpY19j
YXN0PEVHTE5hdGl2ZVBpeG1hcFR5cGU+KG1fYnVmZmVySGFuZGxlKSwgMCk7CisKKyAgICBpZiAo
bV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBjcmVhdGUgRUdMIHN1cmZhY2UoJWQpLiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBk
ZXN0cm95KCk7CisgICAgfQorfQorCitFR0xQaXhtYXBTdXJmYWNlOjp+RUdMUGl4bWFwU3VyZmFj
ZSgpCit7Cit9CisKK3ZvaWQgRUdMUGl4bWFwU3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgRUdM
T2ZmU2NyZWVuU3VyZmFjZTo6ZGVzdHJveSgpOworCisgICAgaWYgKG1fYnVmZmVySGFuZGxlKSB7
CisgICAgICAgIE5hdGl2ZVdyYXBwZXI6OmRlc3Ryb3lQaXhtYXAobV9idWZmZXJIYW5kbGUpOwor
ICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xY
U3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9F
R0xYU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMmM0MjcK
LS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFhTdXJmYWNlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBFR0xYU3VyZmFjZV9oCisjZGVmaW5lIEVHTFhTdXJmYWNlX2gKKworI2lmIFBM
QVRGT1JNKFgxMSkgJiYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpbmNs
dWRlICJFR0xTdXJmYWNlLmgiCisjaW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7Cit0eXBlZGVm
IFBpeG1hcCBOYXRpdmVQaXhtYXA7CisKKy8vIENvbnRlbnRzIG9mIHRoZSBzdXJmYWNlIGFyZSBi
YWNrZWQgYnkgbmF0aXZlIHdpbmRvdy4KK2NsYXNzIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2Ug
OiBwdWJsaWMgRUdMVHJhbnNwb3J0U3VyZmFjZSB7CitwdWJsaWM6CisgICAgRUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiwgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VB
dHRyaWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKSBPVkVSUklERTsKK307CisKK2NsYXNzIEVHTFBpeG1hcFN1cmZhY2UgOiBwdWJs
aWMgRUdMT2ZmU2NyZWVuU3VyZmFjZSB7CitwdWJsaWM6CisgICAgRUdMUGl4bWFwU3VyZmFjZShH
TFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgfkVHTFBp
eG1hcFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2UgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggYTk1Y2NlZC4uZmYx
MDAwZSAxMDA2NDQKLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBTb3VyY2Uv
Y21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtMTE0LDYgKzExNCw3IEBAIGlmIChFTkFCTEVfRUNP
UkVfWCkKIAogICAgIGxpc3QoQVBQRU5EIEVDT1JFX0FERElUSU9OQUxfQ09NUE9ORU5UUyBYKQog
ICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfRUNPUkVfWCkKKyAgICBhZGRfZGVmaW5pdGlvbnMo
LURXVEZfUExBVEZPUk1fWDExPTEpCiBlbmRpZiAoKQogCiAjIEFsbG93IGJ1aWxkaW5nIHRoZSBF
RkwgcG9ydCB1c2luZyBFRkwgdmVyc2lvbiAxLjYrIHRvIGJ1aWxkIG9uIFRpemVuIHRydW5rCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>