<?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>111759</bug_id>
          
          <creation_ts>2013-03-07 11:48:44 -0800</creation_ts>
          <short_desc>[EFL][WebGL] Implement a common GraphicsSurface Implementation.</short_desc>
          <delta_ts>2013-03-21 06:18:33 -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>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>hugo.lima</cc>
    
    <cc>kenneth</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>850338</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-07 11:48:44 -0800</bug_when>
    <thetext>Implement common GraphicsSurface implementation which can be used by both GLX and GLES. This should handle the core logic and leave any platform specific bits to be handled separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851860</commentid>
    <comment_count>1</comment_count>
      <attachid>192365</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-09 19:08:36 -0800</bug_when>
    <thetext>Created attachment 192365
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851869</commentid>
    <comment_count>2</comment_count>
      <attachid>192368</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-09 20:30:39 -0800</bug_when>
    <thetext>Created attachment 192368
patchv2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857054</commentid>
    <comment_count>3</comment_count>
      <attachid>192368</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-18 06:23:17 -0700</bug_when>
    <thetext>Comment on attachment 192368
patchv2

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

&gt; Source/WebCore/ChangeLog:25
&gt; +        * platform/graphics/efl/GraphicsContext3DPrivate.h:
&gt; +        (GraphicsContext3DPrivate):
&gt; +        TransportSurface related code is moved to GraphicsSurfaceCommon.

I personally prefer a newline before the comment... makes it easier to read on bugzilla

&gt; Source/WebCore/ChangeLog:57
&gt; +        (WebCore::GLTransportSurfaceClient::texture):
&gt; +        (WebCore::GLTransportSurfaceClient::hasAlpha):
&gt; +        Moved TransportSurface to EFL folder. Added a base class
&gt; +        for TransportSurfaceClient.

Reasoning is always welcome!

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:196
&gt; +    // Dont release current graphics surface until we have

Don&apos;t or Do not

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:198
&gt; +    // prepared surface with requested size. This is to
&gt; +    // avoid flashing during resize.

Lines are allowed to be longer, like 80-100 chars depending on current indent

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:207
&gt; +    m_targetRect = IntRect(0, 0, m_size.width(), m_size.height());

Why not IntRect(IntPoint(), m_size)

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:211
&gt; +
&gt; +    if (m_size.isEmpty()) {
&gt; +
&gt; +        if (m_graphicsSurface) {

unneeded newline

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.h:63
&gt; +    enum PendingOpeartion {

Spelling! OPERATION

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.h:64
&gt; +        Default = 0x00, // No Pending Operation.

None = 0x00

&gt; Source/WebCore/platform/graphics/surfaces/efl/GLTransportSurface.cpp:66
&gt; +    m_rect = IntRect(0, 0, size.width(), size.height());

IntRect(IntPoint(), size)

&gt; Source/WebCore/platform/graphics/surfaces/efl/GLTransportSurface.h:43
&gt; +    // Creates a GL surface whose results can be transported
&gt; +    // to the UI process for display.
&gt; +    static PassOwnPtr&lt;GLTransportSurface&gt; createTransportSurface(const IntSize&amp;, SurfaceAttributes = GLPlatformSurface::Default);

The third line is long, so no need to wrap that comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857146</commentid>
    <comment_count>4</comment_count>
      <attachid>193571</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-18 08:40:51 -0700</bug_when>
    <thetext>Created attachment 193571
patchv3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857150</commentid>
    <comment_count>5</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-18 08:43:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 192368 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192368&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/surfaces/efl/GLTransportSurface.h:43
&gt; &gt; +    // Creates a GL surface whose results can be transported
&gt; &gt; +    // to the UI process for display.
&gt; &gt; +    static PassOwnPtr&lt;GLTransportSurface&gt; createTransportSurface(const IntSize&amp;, SurfaceAttributes = GLPlatformSurface::Default);
&gt; 
&gt; The third line is long, so no need to wrap that comment

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860250</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-21 05:49:45 -0700</bug_when>
    <thetext>Are you not a committer? then you can set cq+ and you should add yourself to committers.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860259</commentid>
    <comment_count>7</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-03-21 05:58:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Are you not a committer? then you can set cq+ and you should add yourself to committers.py

Not yet. Still waiting to finish some of the formalities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860268</commentid>
    <comment_count>8</comment_count>
      <attachid>193571</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 06:18:27 -0700</bug_when>
    <thetext>Comment on attachment 193571
patchv3

Clearing flags on attachment: 193571

Committed r146458: &lt;http://trac.webkit.org/changeset/146458&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860269</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 06:18:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192365</attachid>
            <date>2013-03-09 19:08:36 -0800</date>
            <delta_ts>2013-03-09 20:30:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>graphicssurfacecommon.patch</filename>
            <type>text/plain</type>
            <size>53871</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGJmNmVkNDUuLmIxZTBhMTUgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAx
My0wMy0wOSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBhIGNvbW1vbiBHcmFwaGljc1N1cmZh
Y2UgSW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTE3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFdlYkdMIHRlc3RzLgorCisgICAgICAgIFRo
aXMgaXMgaW4gcHJlcGFyYXRpb24gdG8gYWRkIHRyYW5zcG9ydCBzdXJmYWNlIHN1cHBvcnQgZm9y
IEdMRVMyLgorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IGVhc3kgdG8gc2hhcmUgdGhlIGNv
cmUgbG9naWMgb2YgdXNpbmcKKyAgICAgICAgVHJhbnNwb3J0IFN1cmZhY2UgYW5kIGNsaWVudCBv
biBHTFggYW5kIEdMRVMyIGJhY2tlbmRzIHdpdGhvdXQKKyAgICAgICAgYW55IGNvZGUgZHVwbGlj
YXRpb24uCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
ZGlkUmVzaXplQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAgIChHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUpOgorICAgICAgICBUcmFuc3BvcnRTdXJmYWNlIHJlbGF0ZWQgY29kZSBpcyBt
b3ZlZCB0byBHcmFwaGljc1N1cmZhY2VDb21tb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xQ
bGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3Bv
cnRTdXJmYWNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xU
cmFuc3BvcnRTdXJmYWNlOjpHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R0xUcmFuc3BvcnRTdXJmYWNlOjp+R0xUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMVHJhbnNwb3J0U3VyZmFjZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3Bv
cnRTdXJmYWNlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3VyZmFjZTo6
YmluZEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3VyZmFjZTo6
dXBkYXRlVHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3Bv
cnRTdXJmYWNlOjppbml0aWFsaXplU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2VDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpHTFRyYW5zcG9ydFN1
cmZhY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50
Ojp+R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNw
b3J0U3VyZmFjZUNsaWVudDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQ6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJh
bnNwb3J0U3VyZmFjZUNsaWVudDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJm
YWNlLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdMVHJhbnNwb3J0U3VyZmFjZSk6
CisgICAgICAgIChHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50Ojp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6aGFzQWxwaGEpOgorICAgICAgICBNb3ZlZCBUcmFuc3Bv
cnRTdXJmYWNlIHRvIEVGTCBmb2xkZXIuIEFkZGVkIGEgYmFzZSBjbGFzcyBmb3IgVHJhbnNwb3J0
U3VyZmFjZUNsaWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vm
bC9HcmFwaGljc1N1cmZhY2VDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2VQcml2YXRlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmRlc3Ryb3kpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6aW5pdGlhbGl6ZVRyYW5zcG9y
dFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6bWFr
ZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZh
dGU6OmNvcHlGcm9tVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQ
cml2YXRlOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZTo6dXBkYXRlQ2xpZW50QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OmZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZh
dGU6OnJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjp0ZXh0dXJlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6aW5pdGlhbGl6ZUNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dM
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29w
eUZyb21UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1QYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlUmVhZE9ubHlJbWFnZSk6
CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZSBpbXBsZW1lbnRhdGlvbiB0byBiZSBzaGFyZWQgYnkg
Ym90aCBHTFggYW5kIEdMRVMyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKEVHTFdpbmRv
d1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6cmVzb2x2ZUdMTWV0aG9kcyk6CisgICAgICAgIChXZWJDb3JlOjppc01lc2FHTFgpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpHTFhUcmFuc3Bv
cnRTdXJmYWNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQ6On5HTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R0xY
VHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmg6CisgICAgICAgIChHTFhUcmFu
c3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisKIDIwMTMtMDMtMDkgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHBsYXRmb3JtIGNvZGUgdG8gaW1wbGVtZW50
IHRleHQgdHJhY2sgbWVudQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDUzNWZiZmUuLmY2N2Q5
YTggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI5Nyw2ICsyOTcsNyBAQCBpZiAoV1RGX1VT
RV8zRF9HUkFQSElDUykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAg
ICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIgorICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsIgogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4IgogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgogICAgICkKQEAgLTMx
Niw4ICszMTcsOSBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HcmFwaGljc1N1cmZhY2VDb21t
b24uY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbS5jcHAKQEAgLTMzMyw3ICszMzUsNiBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAg
ICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAotICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAgICAg
KQogICAgIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAppbmRleCBlYTcy
NjliLi40NzA1ZDZmIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC02OCwzNyAr
NjgsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemUoKQogICAg
ICAgICBpZiAoIW1fb2ZmU2NyZWVuQ29udGV4dC0+aW5pdGlhbGl6ZShtX29mZlNjcmVlblN1cmZh
Y2UuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCiAgICAgICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9jb250ZXh0LT52YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKLSAgICAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIHNoYXJlZFN1
cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQ7Ci0gICAgICAgIGlm
IChtX2NvbnRleHQtPm1fYXR0cnMuYWxwaGEpCi0gICAgICAgICAgICBzaGFyZWRTdXJmYWNlQXR0
cmlidXRlcyA9IEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGE7Ci0KLSAgICAgICAgbV9v
ZmZTY3JlZW5Db250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwotICAgICAgICBtX3NoYXJlZFN1cmZh
Y2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZShzaGFyZWRTdXJm
YWNlQXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghbV9zaGFyZWRTdXJmYWNlKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fc2hhcmVkQ29udGV4dCA9IEdMUGxhdGZvcm1D
b250ZXh0OjpjcmVhdGVDb250ZXh0KG1fY29udGV4dC0+bV9yZW5kZXJTdHlsZSk7Ci0gICAgICAg
IGlmICghbV9zaGFyZWRDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGlmICghbV9zaGFyZWRDb250ZXh0LT5pbml0aWFsaXplKG1fc2hhcmVkU3VyZmFjZS5nZXQo
KSwgbV9vZmZTY3JlZW5Db250ZXh0LT5oYW5kbGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCFtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX3N1cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1
cmZhY2VUb2tlbihtX3NoYXJlZFN1cmZhY2UtPmhhbmRsZSgpKTsKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICAgICAgbV9zdXJmYWNlT3BlcmF0aW9uID0gQ3JlYXRlU3VyZmFjZTsKICNl
bmRpZgogICAgIH0KIAotICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTQsMTYgKzkwLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZWxlYXNlUmVzb3VyY2VzKCkKIAogICAg
IC8vIFJlbGVhc2UgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2FibGUgb25seSBhZnRlciBk
ZXN0cm95aW5nIGFueSBhc3NvY2lhdGVkIGdsIHJlc291cmNlcy4KICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKLSAgICBpZiAobV9zaGFyZWRDb250ZXh0ICYmIG1fc2hhcmVkQ29udGV4dC0+aGFu
ZGxlKCkgJiYgbV9zaGFyZWRTdXJmYWNlKQotICAgICAgICBtYWtlU2hhcmVkQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAobV9wcmV2aW91c0dyYXBoaWNzU3VyZmFjZSkKKyAgICAgICAgbV9wcmV2
aW91c0dyYXBoaWNzU3VyZmFjZSA9IG51bGxwdHI7CiAKLSAgICBpZiAobV9zaGFyZWRTdXJmYWNl
KQotICAgICAgICBtX3NoYXJlZFN1cmZhY2UtPmRlc3Ryb3koKTsKKyAgICBpZiAobV9ncmFwaGlj
c1N1cmZhY2UpCisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gbnVsbHB0cjsKIAotICAgIGlm
IChtX3NoYXJlZENvbnRleHQpIHsKLSAgICAgICAgbV9zaGFyZWRDb250ZXh0LT5kZXN0cm95KCk7
Ci0gICAgICAgIG1fc2hhcmVkQ29udGV4dC0+cmVsZWFzZUN1cnJlbnQoKTsKLSAgICB9CisgICAg
bV9zdXJmYWNlSGFuZGxlID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKICNlbmRpZgogICAgIGlm
IChtX29mZlNjcmVlblN1cmZhY2UpCiAgICAgICAgIG1fb2ZmU2NyZWVuU3VyZmFjZS0+ZGVzdHJv
eSgpOwpAQCAtMTkxLDYgKzE2NCw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpw
cmVwYXJlQnVmZmVyKCkgY29uc3QKIAogICAgICAgICBpZiAoZW5hYmxlU2Npc3NvclRlc3QpCiAg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKKworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9jb250
ZXh0LT5tX3N0YXRlLmJvdW5kRkJPKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIw
NCwzNyArMTc5LDc5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSCiAjZW5kaWYKIAogI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VT
aGFyZWRDb250ZXh0Q3VycmVudCgpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgYm9v
bCBzdWNjZXNzID0gbV9zaGFyZWRDb250ZXh0LT5tYWtlQ3VycmVudChtX3NoYXJlZFN1cmZhY2Uu
Z2V0KCkpOworICAgIHN0YXRpYyBQZW5kaW5nU3VyZmFjZU9wZXJhdGlvbiBwZW5kaW5nT3BlcmF0
aW9uID0gRGVsZXRlUHJldmlvdXNTdXJmYWNlIHwgUmVzaXplIHwgQ3JlYXRlU3VyZmFjZTsKKyAg
ICBpZiAoIShtX3N1cmZhY2VPcGVyYXRpb24gJiBwZW5kaW5nT3BlcmF0aW9uKSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFtX3NoYXJlZENvbnRleHQtPmlzVmFsaWQoKSkgewotICAgICAg
ICAvLyBGSVhNRTogUmVzdG9yZSBjb250ZXh0Ci0gICAgICAgIGlmIChtX2NvbnRleHRMb3N0Q2Fs
bGJhY2spCi0gICAgICAgICAgICBtX2NvbnRleHRMb3N0Q2FsbGJhY2stPm9uQ29udGV4dExvc3Qo
KTsKKyAgICBpZiAobV9zdXJmYWNlT3BlcmF0aW9uICYgRGVsZXRlUHJldmlvdXNTdXJmYWNlKSB7
CisgICAgICAgIG1fcHJldmlvdXNHcmFwaGljc1N1cmZhY2UgPSBudWxscHRyOworICAgICAgICBt
X3N1cmZhY2VPcGVyYXRpb24gJj0gfkRlbGV0ZVByZXZpb3VzU3VyZmFjZTsKKyAgICB9CiAKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghKG1fc3VyZmFjZU9wZXJhdGlvbiAmIHBlbmRp
bmdPcGVyYXRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEb250IHJlbGVhc2UgY3Vy
cmVudCBncmFwaGljcyBzdXJmYWNlIHVudGlsIHdlIGhhdmUKKyAgICAvLyBwcmVwYXJlZCBzdXJm
YWNlIHdpdGggcmVxdWVzdGVkIHNpemUuIFRoaXMgaXMgdG8KKyAgICAvLyBhdm9pZCBmbGFzaGlu
ZyBkdXJpbmcgcmVzaXplLgorICAgIGlmIChtX3N1cmZhY2VPcGVyYXRpb24gJiBSZXNpemUpIHsK
KyAgICAgICAgbV9wcmV2aW91c0dyYXBoaWNzU3VyZmFjZSA9IG1fZ3JhcGhpY3NTdXJmYWNlOwor
ICAgICAgICBtX3N1cmZhY2VPcGVyYXRpb24gJj0gflJlc2l6ZTsKKyAgICAgICAgbV9zdXJmYWNl
T3BlcmF0aW9uIHw9IERlbGV0ZVByZXZpb3VzU3VyZmFjZTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bV9zdXJmYWNlT3BlcmF0aW9uICY9IH5DcmVhdGVTdXJmYWNlOworCisgICAgbV9zaXplID0gc2l6
ZS5pc0VtcHR5KCkgPyBJbnRTaXplKG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4
dC0+bV9jdXJyZW50SGVpZ2h0KSA6IHNpemU7CisgICAgbV90YXJnZXRSZWN0ID0gSW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKworICAgIGlmIChtX3NpemUu
aXNFbXB0eSgpKSB7CisKKyAgICAgICAgaWYgKG1fZ3JhcGhpY3NTdXJmYWNlKSB7CisgICAgICAg
ICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3N1cmZhY2VI
YW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgICAgICAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgbV9vZmZTY3JlZW5Db250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwor
ICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgZmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBv
cnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworCisg
ICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5hbHBoYSkKKyAgICAgICAgZmxhZ3MgfD0gR3JhcGhp
Y3NTdXJmYWNlOjpTdXBwb3J0c0FscGhhOworCisgICAgbV9ncmFwaGljc1N1cmZhY2UgPSBHcmFw
aGljc1N1cmZhY2U6OmNyZWF0ZShtX3NpemUsIGZsYWdzLCBtX29mZlNjcmVlbkNvbnRleHQtPmhh
bmRsZSgpKTsKKworICAgIGlmICghbV9ncmFwaGljc1N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFj
ZUhhbmRsZSA9IEdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgZWxzZQorICAgICAgICBtX3N1
cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbihtX2dyYXBoaWNzU3VyZmFjZS0+ZXhw
b3J0VG9rZW4oKSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmRpZFJlc2l6ZUNhbnZhcyhjb25zdCBJbnRTaXplJiBzaXpl
KQogewotICAgIG1fc2l6ZSA9IHNpemU7CisgICAgaWYgKG1fc3VyZmFjZU9wZXJhdGlvbiAmIENy
ZWF0ZVN1cmZhY2UpIHsKKyAgICAgICAgY3JlYXRlR3JhcGhpY3NTdXJmYWNlKHNpemUpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKG1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgp
KQotICAgICAgICBtX3NoYXJlZFN1cmZhY2UtPnNldEdlb21ldHJ5KEludFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgIG1fc3VyZmFjZU9wZXJhdGlvbiB8
PSBSZXNpemU7CiB9CiAKIHVpbnQzMl90IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRv
R3JhcGhpY3NTdXJmYWNlKCkKIHsKLSAgICBpZiAobV9jb250ZXh0LT5tX2xheWVyQ29tcG9zaXRl
ZCB8fCAhcHJlcGFyZUJ1ZmZlcigpIHx8ICFtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICBjcmVhdGVHcmFwaGljc1N1cmZhY2UoKTsKKworICAgIGlmICghbV9ncmFwaGljc1N1cmZhY2Ug
fHwgbV9jb250ZXh0LT5tX2xheWVyQ29tcG9zaXRlZCB8fCAhcHJlcGFyZUJ1ZmZlcigpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIG1fc2hhcmVkU3VyZmFjZS0+dXBkYXRlQ29udGVudHMobV9j
b250ZXh0LT5tX3RleHR1cmUpOworICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5RnJvbVRleHR1
cmUobV9jb250ZXh0LT5tX3RleHR1cmUsIG1fdGFyZ2V0UmVjdCk7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsICBtX2NvbnRl
eHQtPm1fc3RhdGUuYm91bmRGQk8pOwogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaAppbmRleCA4ZjBlYjNjLi45MzIzZjU3IDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgKQEAgLTU5LDI1ICs1OSwzNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKSBjb25zdDsKIAogcHJpdmF0ZToKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAg
ICBlbnVtIFBlbmRpbmdPcGVhcnRpb24geworICAgICAgICBEZWZhdWx0ID0gMHgwMCwgLy8gTm8g
UGVuZGluZyBPcGVyYXRpb24uCisgICAgICAgIENyZWF0ZVN1cmZhY2UgPSAweDAxLAorICAgICAg
ICBSZXNpemUgPSAweDAyLAorICAgICAgICBEZWxldGVQcmV2aW91c1N1cmZhY2UgPSAweDA0Cisg
ICAgfTsKKworICAgIHR5cGVkZWYgdW5zaWduZWQgUGVuZGluZ1N1cmZhY2VPcGVyYXRpb247Cisj
ZW5kaWYKKwogICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCos
IEhvc3RXaW5kb3cqKTsKICAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIGNyZWF0ZUdy
YXBoaWNzU3VyZmFjZShjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSk7CiAgICAgYm9vbCBwcmVw
YXJlQnVmZmVyKCkgY29uc3Q7CiAgICAgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgYm9vbCBtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKSBj
b25zdDsKLSNlbmRpZgorCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBI
b3N0V2luZG93KiBtX2hvc3RXaW5kb3c7CiAgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBt
X29mZlNjcmVlbkNvbnRleHQ7CiAgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBtX29mZlNj
cmVlblN1cmZhY2U7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgT3duUHRyPEdMUGxh
dGZvcm1Db250ZXh0PiBtX3NoYXJlZENvbnRleHQ7Ci0gICAgT3duUHRyPEdMUGxhdGZvcm1TdXJm
YWNlPiBtX3NoYXJlZFN1cmZhY2U7CiAgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gbV9zdXJmYWNl
SGFuZGxlOworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOwor
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fcHJldmlvdXNHcmFwaGljc1N1cmZhY2U7Cisg
ICAgUGVuZGluZ1N1cmZhY2VPcGVyYXRpb24gbV9zdXJmYWNlT3BlcmF0aW9uIDogMzsKICNlbmRp
ZgogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9j
b250ZXh0TG9zdENhbGxiYWNrOwogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRp
Y0Vycm9yczsKICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fdGFyZ2V0UmVjdDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTg1LDQgKzk3LDMgQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCBiNTAzMjIxLi4w
ZGI4MGUwIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcApAQCAtNTQsMjAgKzU0LDYgQEAgUGFzc093
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVl
blN1cmZhY2UoU3VyZmFjZUEKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUGFzc093blB0cjxH
TFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZh
Y2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLXsKLSNpZiBVU0UoR0xYKQotICAgIE93
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3Bv
cnRTdXJmYWNlKGF0dHJpYnV0ZXMpKTsKLSNlbGlmIFVTRShFR0wpCi0gICAgT3duUHRyPEdMUGxh
dGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFdpbmRvd1RyYW5zcG9ydFN1
cmZhY2UoYXR0cmlidXRlcykpOwotI2VuZGlmCi0KLSAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNl
LT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQotICAgICAgICByZXR1cm4gc3VyZmFj
ZS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogR0xQbGF0Zm9ybVN1cmZh
Y2U6OkdMUGxhdGZvcm1TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzKQogICAgIDogbV9zaGFyZWRE
aXNwbGF5KDApCiAgICAgLCBtX2RyYXdhYmxlKDApCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmggU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKaW5kZXggNWQ0
MGM1Mi4uNTQzYjY3NSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApAQCAtNDMsMTcgKzQzLDEzIEBAIHB1
YmxpYzoKICAgICBlbnVtIEF0dHJpYnV0ZXMgewogICAgICAgICBEZWZhdWx0ID0gMHgwMCwgLy8g
Tm8gQWxwaGEgY2hhbm5lbC4gT25seSBSLEcsQiB2YWx1ZXMgc2V0LgogICAgICAgICBTdXBwb3J0
QWxwaGEgPSAweDAxLAotICAgICAgICBEb3VibGVCdWZmZXJlZCA9IDB4MDQKKyAgICAgICAgRG91
YmxlQnVmZmVyZWQgPSAweDAyCiAgICAgfTsKIAotICAgIHR5cGVkZWYgaW50IFN1cmZhY2VBdHRy
aWJ1dGVzOworICAgIHR5cGVkZWYgdW5zaWduZWQgU3VyZmFjZUF0dHJpYnV0ZXM7CiAgICAgLy8g
Q3JlYXRlcyBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4KICAgICBz
dGF0aWMgUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gY3JlYXRlT2ZmU2NyZWVuU3VyZmFj
ZShTdXJmYWNlQXR0cmlidXRlcyA9IEdMUGxhdGZvcm1TdXJmYWNlOjpEZWZhdWx0KTsKIAotICAg
IC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHVzZWQgZm9yIG9mZnNjcmVlbiByZW5kZXJpbmcuIFRo
ZSByZXN1bHRzIGNhbiBiZSB0cmFuc3BvcnRlZAotICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZv
ciBkaXNwbGF5LgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVh
dGVUcmFuc3BvcnRTdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6
OkRlZmF1bHQpOwotCiAgICAgdmlydHVhbCB+R0xQbGF0Zm9ybVN1cmZhY2UoKTsKIAogICAgIGNv
bnN0IEludFJlY3QmIGdlb21ldHJ5KCkgY29uc3Q7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjM4YTliLi4wMDAwMDAwCi0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2Uu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHTFRyYW5zcG9ydFN1cmZhY2UuaCIKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgY29uc3QgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAw
LCAxIH07Ci1zdGF0aWMgYm9vbCB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IGZhbHNlOwot
Ci1HTFRyYW5zcG9ydFN1cmZhY2U6OkdMVHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoYXR0cmlidXRlcykKLSAgICAs
IG1fdmJvKDApCi0gICAgLCBtX3ZlcnRleEhhbmRsZSgwKQotewotfQotCi1HTFRyYW5zcG9ydFN1
cmZhY2U6On5HTFRyYW5zcG9ydFN1cmZhY2UoKQotewotfQotCi12b2lkIEdMVHJhbnNwb3J0U3Vy
ZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSkKLXsKLSAgICBpZiAo
IW1fc2hhZGVyUHJvZ3JhbSkKLSAgICAgICAgaW5pdGlhbGl6ZVNoYWRlclByb2dyYW0oKTsKLQot
ICAgIGRyYXcodGV4dHVyZSk7Ci0gICAgc3dhcEJ1ZmZlcnMoKTsKLX0KLQotdm9pZCBHTFRyYW5z
cG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCi17Ci0gICAg
bV9yZWN0ID0gbmV3UmVjdDsKLQotICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotfQotCi12b2lkIEdM
VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpCi17Ci0gICAgbV9yZWN0ID0gSW50UmVjdCgpOwot
Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgaWYgKCFtX3NoYWRlclByb2dyYW0g
fHwgIW1fY29udGV4dDNEKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZEJ1ZmZlcihH
TF9BUlJBWV9CVUZGRVIsIDApOwotCi0gICAgaWYgKG1fdmJvKQotICAgICAgICA6OmdsRGVsZXRl
QnVmZmVycygxLCAmbV92Ym8pOwotCi0gICAgaWYgKG1fdmVydGV4SGFuZGxlKSB7Ci0gICAgICAg
IG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUygwKTsKLSAg
ICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+ZGVsZXRlVmVydGV4QXJyYXlPRVMo
bV92ZXJ0ZXhIYW5kbGUpOwotICAgIH0gZWxzZSBpZiAobV9zaGFkZXJQcm9ncmFtKQotICAgICAg
ICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9j
YXRpb24oKSk7Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbSgwKTsKLQotICAgIG1fc2hhZGVyUHJvZ3Jh
bSA9IG51bGxwdHI7Ci0gICAgbV9jb250ZXh0M0QgPSBudWxscHRyOwotfQotCi12b2lkIEdMVHJh
bnNwb3J0U3VyZmFjZTo6ZHJhdyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlKQotewotICAgIGlmICgh
bV92ZXJ0ZXhIYW5kbGUpCi0gICAgICAgIGJpbmRBcnJheUJ1ZmZlcigpOwotCi0gICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOwotICAgIDo6Z2xEcmF3QXJyYXlzKEdM
X1RSSUFOR0xFX0ZBTiwgMCwgNCk7Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpiaW5k
QXJyYXlCdWZmZXIoKSBjb25zdAotewotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSht
X3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIDo6Z2xCaW5kQnVmZmVyKEdM
X0FSUkFZX0JVRkZFUiwgbV92Ym8pOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fc2hh
ZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
LCBmYWxzZSwgMCwgMCk7Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpCi17Ci0gICAgaWYgKCFtX3NoYWRlclByb2dyYW0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIDo6Z2xWaWV3cG9ydChtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBtX3Jl
Y3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpKTsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0
ID0gRmxvYXRSZWN0KG1fcmVjdCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25N
YXRyaXgoaWRlbnRpdHlNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0
VG9SZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOwotICAgIG1fc2hhZGVy
UHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+bW9kZWxWaWV3TWF0cml4TG9jYXRp
b24oKSwgbWF0cml4KTsKLQotICAgIC8vIFRha2VuIGZyb20gVGV4dHVyZU1hcHBlckdMLgotICAg
IGNvbnN0IGZsb2F0IG5lYXJWYWx1ZSA9IDk5OTk5OTk7Ci0gICAgY29uc3QgZmxvYXQgZmFyVmFs
dWUgPSAtOTk5OTk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoMi4wIC8gZmxvYXQobV9yZWN0LndpZHRoKCkpLCAwLCAw
LCAwLAotICAgICAgICAwLCAoLTIuMCkgLyBmbG9hdChtX3JlY3QuaGVpZ2h0KCkpLCAwLCAwLAot
ICAgICAgICAwLCAwLCAtMi5mIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMCwKLSAgICAgICAg
LTEsIDEsIC0oZmFyVmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwg
MSk7Ci0KLSAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclByb2dyYW0tPnBy
b2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCBwcm9qZWN0aW9uTWF0cml4KTsKLX0KLQotdm9pZCBH
TFRyYW5zcG9ydFN1cmZhY2U6OmluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCkKLXsKLSAgICBpZiAo
IW1fY29udGV4dDNEKQotICAgICAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVGb3JDdXJyZW50R0xDb250ZXh0KCk7Ci0KLSAgICB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBv
cnRlZCA9IG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVy
dGV4X2FycmF5X29iamVjdCIpOwotCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9w
dGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlOwotICAg
IG1fc2hhZGVyUHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9j
b250ZXh0M0QsIG9wdGlvbnMpOwotCi0gICAgOjpnbFVzZVByb2dyYW0obV9zaGFkZXJQcm9ncmFt
LT5wcm9ncmFtSUQoKSk7Ci0gICAgOjpnbFVuaWZvcm0xaShtX3NoYWRlclByb2dyYW0tPnNhbXBs
ZXJMb2NhdGlvbigpLCAwKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGZsaXBUcmFuc2Zvcm07Ci0gICAgZmxpcFRyYW5zZm9ybS5mbGlwWSgpOwotICAgIGZsaXBU
cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC0xKTsKLSAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJp
eChtX3NoYWRlclByb2dyYW0tPnRleHR1cmVTcGFjZU1hdHJpeExvY2F0aW9uKCksIGZsaXBUcmFu
c2Zvcm0pOwotCi0gICAgOjpnbFVuaWZvcm0xZihtX3NoYWRlclByb2dyYW0tPm9wYWNpdHlMb2Nh
dGlvbigpLCAxLjApOwotCi0gICAgaWYgKCFtX3ZibykgewotICAgICAgICA6OmdsR2VuQnVmZmVy
cygxLCAmbV92Ym8pOwotICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1f
dmJvKTsKLSAgICAgICAgOjpnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YoR0Mz
RGZsb2F0KSAqIDgsIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7Ci0gICAgfQotCi0gICAgLy8g
Q3JlYXRlIGFuZCBzZXQtdXAgdmVydGV4IGFycmF5IG9iamVjdC4KLSAgICBpZiAodmVydGV4QXJy
YXlPYmplY3RTdXBwb3J0ZWQpIHsKLSAgICAgICAgbV92ZXJ0ZXhIYW5kbGUgPSBtX2NvbnRleHQz
RC0+Z2V0RXh0ZW5zaW9ucygpLT5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwotCi0gICAgICAgIGlm
IChtX3ZlcnRleEhhbmRsZSkgewotICAgICAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lv
bnMoKS0+YmluZFZlcnRleEFycmF5T0VTKG1fdmVydGV4SGFuZGxlKTsKLSAgICAgICAgICAgIGJp
bmRBcnJheUJ1ZmZlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKTsKLQotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IDApOwotfQotCi19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmggU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYjlkMTAuLjAwMDAwMDAKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3VyZmFjZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHTFRy
YW5zcG9ydFN1cmZhY2VfaAotI2RlZmluZSBHTFRyYW5zcG9ydFN1cmZhY2VfaAotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2Uu
aCIKLSNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdM
VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7Ci0KLXB1YmxpYzoK
LSAgICBHTFRyYW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIHZpcnR1YWwg
fkdMVHJhbnNwb3J0U3VyZmFjZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhj
b25zdCB1aW50MzJfdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJS
SURFOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
OwotICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0aWFsaXpl
U2hhZGVyUHJvZ3JhbSgpOwotICAgIHZvaWQgZHJhdyhjb25zdCB1aW50MzJfdCk7Ci0KLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwotICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gbV9zaGFkZXJQcm9ncmFtOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV92Ym87Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleEhhbmRsZTsKLX07Ci0KLX0K
LQotI2VuZGlmCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5MTIyNgotLS0gL2Rldi9udWxs
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFu
c3BvcnRTdXJmYWNlLmNwcApAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdMVHJhbnNwb3J0U3VyZmFjZS5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaWYgVVNFKEdMWCkKKyNpbmNsdWRl
ICJHTFhTdXJmYWNlLmgiCisjZW5kaWYKKworI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMU3Vy
ZmFjZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgR0xmbG9hdCB2
ZXJ0aWNlc1tdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CitzdGF0aWMgYm9vbCB2ZXJ0
ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IGZhbHNlOworCitQYXNzT3duUHRyPEdMVHJhbnNwb3J0
U3VyZmFjZT4gR0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKGNvbnN0
IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7CisjaWYgVVNF
KEdMWCkKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIo
bmV3IEdMWFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOworI2VsaWYgVVNFKEVH
TCkKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoYXR0cmlidXRlcykpOworI2VuZGlmCisKKyAgICBp
ZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQor
ICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworR0xUcmFuc3BvcnRTdXJmYWNlOjpHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IEdMUGxhdGZvcm1T
dXJmYWNlKGF0dHJpYnV0ZXMpCisgICAgLCBtX3ZibygwKQorICAgICwgbV92ZXJ0ZXhIYW5kbGUo
MCkKKyAgICAsIG1fYm91bmRUZXh0dXJlKDApCit7CisgICAgbV9yZWN0ID0gSW50UmVjdCgwLCAw
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitHTFRyYW5zcG9ydFN1cmZhY2U6
On5HTFRyYW5zcG9ydFN1cmZhY2UoKQoreworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6
dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1fc2hh
ZGVyUHJvZ3JhbSkKKyAgICAgICAgaW5pdGlhbGl6ZVNoYWRlclByb2dyYW0oKTsKKworICAgIGRy
YXcodGV4dHVyZSk7CisgICAgc3dhcEJ1ZmZlcnMoKTsKK30KKwordm9pZCBHTFRyYW5zcG9ydFN1
cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgbV9yZWN0
ID0gbmV3UmVjdDsKKworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAgICByZXR1cm47
CisKKyAgICB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCit2b2lkIEdMVHJhbnNw
b3J0U3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgbV9yZWN0ID0gSW50UmVjdCgpOworCisgICAg
aWYgKCFtX3NoYWRlclByb2dyYW0gfHwgIW1fY29udGV4dDNEKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgOjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlf
QlVGRkVSLCAwKTsKKworICAgIGlmIChtX3ZibykKKyAgICAgICAgOjpnbERlbGV0ZUJ1ZmZlcnMo
MSwgJm1fdmJvKTsKKworICAgIGlmIChtX3ZlcnRleEhhbmRsZSkgeworICAgICAgICBtX2NvbnRl
eHQzRC0+Z2V0RXh0ZW5zaW9ucygpLT5iaW5kVmVydGV4QXJyYXlPRVMoMCk7CisgICAgICAgIG1f
Y29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmRlbGV0ZVZlcnRleEFycmF5T0VTKG1fdmVydGV4
SGFuZGxlKTsKKyAgICB9IGVsc2UgaWYgKG1fc2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgOjpnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkp
OworCisgICAgOjpnbFVzZVByb2dyYW0oMCk7CisKKyAgICBtX3NoYWRlclByb2dyYW0gPSBudWxs
cHRyOworICAgIG1fY29udGV4dDNEID0gbnVsbHB0cjsKKyAgICBtX2JvdW5kVGV4dHVyZSA9IDA7
Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpkcmF3KGNvbnN0IHVpbnQzMl90IHRleHR1
cmUpCit7CisgICAgaWYgKCFtX3ZlcnRleEhhbmRsZSkKKyAgICAgICAgYmluZEFycmF5QnVmZmVy
KCk7CisKKyAgICBpZiAobV9ib3VuZFRleHR1cmUgIT0gdGV4dHVyZSkgeworICAgICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIG1fYm91bmRUZXh0
dXJlID0gdGV4dHVyZTsKKyAgICB9CisKKyAgICA6OmdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpOworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6YmluZEFycmF5QnVmZmVy
KCkgY29uc3QKK3sKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9zaGFkZXJQcm9n
cmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZG
RVIsIG1fdmJvKTsKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihtX3NoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IDApOworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6dXBkYXRlVHJhbnNmb3JtYXRpb25N
YXRyaXgoKQoreworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVmlld3BvcnQobV9yZWN0LngoKSwgbV9yZWN0LnkoKSwgbV9yZWN0LndpZHRoKCks
IG1fcmVjdC5oZWlnaHQoKSk7CisgICAgbV9ib3VuZFRleHR1cmUgPSAwOworCisgICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3QgPSBGbG9hdFJlY3QobV9yZWN0KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChpZGVudGl0eU1hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7
CisgICAgbV9zaGFkZXJQcm9ncmFtLT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT5tb2RlbFZp
ZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgpOworCisgICAgLy8gVGFrZW4gZnJvbSBUZXh0dXJl
TWFwcGVyR0wuCisgICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gOTk5OTk5OTsKKyAgICBjb25z
dCBmbG9hdCBmYXJWYWx1ZSA9IC05OTk5OTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBy
b2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChtX3JlY3Qu
d2lkdGgoKSksIDAsIDAsIDAsCisgICAgICAgIDAsICgtMi4wKSAvIGZsb2F0KG1fcmVjdC5oZWln
aHQoKSksIDAsIDAsCisgICAgICAgIDAsIDAsIC0yLmYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUp
LCAwLAorICAgICAgICAtMSwgMSwgLShmYXJWYWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUg
LSBuZWFyVmFsdWUpLCAxKTsKKworICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hh
ZGVyUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCksIHByb2plY3Rpb25NYXRyaXgp
OworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6ZVNoYWRlclByb2dyYW0o
KQoreworICAgIGlmICghbV9jb250ZXh0M0QpCisgICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENvbnRleHQoKTsKKworICAgIHZlcnRleEFy
cmF5T2JqZWN0U3VwcG9ydGVkID0gbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9y
dHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlRleHR1cmU7CisgICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZShtX2NvbnRleHQzRCwgb3B0aW9ucyk7CisKKyAgICA6OmdsVXNlUHJvZ3JhbSht
X3NoYWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICA6OmdsVW5pZm9ybTFpKG1fc2hhZGVy
UHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9O
RUFSRVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggZmxpcFRyYW5zZm9ybTsKKyAgICBmbGlwVHJhbnNmb3JtLmZsaXBZ
KCk7CisgICAgZmxpcFRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLTEpOworICAgIG1fc2hhZGVyUHJv
Z3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+dGV4dHVyZVNwYWNlTWF0cml4TG9jYXRp
b24oKSwgZmxpcFRyYW5zZm9ybSk7CisKKyAgICA6OmdsVW5pZm9ybTFmKG1fc2hhZGVyUHJvZ3Jh
bS0+b3BhY2l0eUxvY2F0aW9uKCksIDEuMCk7CisKKyAgICBpZiAoIW1fdmJvKSB7CisgICAgICAg
IDo6Z2xHZW5CdWZmZXJzKDEsICZtX3Zibyk7CisgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV92Ym8pOworICAgICAgICA6OmdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKKyAg
ICB9CisKKyAgICAvLyBDcmVhdGUgYW5kIHNldC11cCB2ZXJ0ZXggYXJyYXkgb2JqZWN0LgorICAg
IGlmICh2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCkgeworICAgICAgICBtX3ZlcnRleEhhbmRs
ZSA9IG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7
CisKKyAgICAgICAgaWYgKG1fdmVydGV4SGFuZGxlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQz
RC0+Z2V0RXh0ZW5zaW9ucygpLT5iaW5kVmVydGV4QXJyYXlPRVMobV92ZXJ0ZXhIYW5kbGUpOwor
ICAgICAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1
cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCitQYXNzT3duUHRyPEdMVHJhbnNwb3J0
U3VyZmFjZUNsaWVudD4gR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpjcmVhdGVUcmFuc3BvcnRT
dXJmYWNlQ2xpZW50KGNvbnN0IFBsYXRmb3JtQnVmZmVySGFuZGxlIGhhbmRsZSkKK3sKKyNpZiBV
U0UoR0xYKQorICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+IGNsaWVudCA9IGFk
b3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGhhbmRsZSkpOworCisgICAgaWYg
KCFjbGllbnQtPnRleHR1cmUoKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBDcmVh
dGUgVHJhbnNwb3J0IFN1cmZhY2UgY2xpZW50LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICByZXR1cm4gY2xpZW50LnJlbGVhc2UoKTsKKworI2Vsc2UKKyAgICByZXR1
cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCisKK0dMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6R0xU
cmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0IFBsYXRmb3JtQnVmZmVySGFuZGxlKQorICAgIDog
bV90ZXh0dXJlKDApCisgICAgLCBtX2hhc0FscGhhKHRydWUpCit7Cit9CisKK0dMVHJhbnNwb3J0
U3VyZmFjZUNsaWVudDo6fkdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCgpCit7Cit9CisKK3ZvaWQg
R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV90ZXh0dXJl
KSB7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIG1fdGV4dHVyZSA9IDA7Cisg
ICAgfQorfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6cHJlcGFyZVRleHR1cmUo
KQoreworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6Y3JlYXRlVGV4dHVyZSgp
Cit7CisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9O
RUFSRVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmNjNmQxNgotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmgKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFRyYW5zcG9ydFN1
cmZhY2VfaAorI2RlZmluZSBHTFRyYW5zcG9ydFN1cmZhY2VfaAorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOworCitjbGFzcyBHTFRyYW5zcG9ydFN1cmZhY2UgOiBw
dWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgeworCitwdWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhIEdM
IHN1cmZhY2Ugd2hvc2UgcmVzdWx0cyBjYW4gYmUgdHJhbnNwb3J0ZWQKKyAgICAvLyB0byB0aGUg
VUkgcHJvY2VzcyBmb3IgZGlzcGxheS4KKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFRyYW5zcG9y
dFN1cmZhY2U+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZhY2VB
dHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQpOworICAgIHZpcnR1YWwgfkdM
VHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25z
dCB1aW50MzJfdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0
IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURF
OworCitwcm90ZWN0ZWQ6CisgICAgR0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmLCBT
dXJmYWNlQXR0cmlidXRlcyk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
OworICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKCkgY29uc3Q7CisgICAgdm9pZCBpbml0aWFsaXpl
U2hhZGVyUHJvZ3JhbSgpOworICAgIHZvaWQgZHJhdyhjb25zdCB1aW50MzJfdCk7CisKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gbV9zaGFkZXJQcm9ncmFtOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV92Ym87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleEhhbmRsZTsKKyAgICBHTHVp
bnQgbV9ib3VuZFRleHR1cmU7Cit9OworCitjbGFzcyBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQg
eworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlQ2xp
ZW50PiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0IFBsYXRmb3JtQnVmZmVySGFu
ZGxlKTsKKyAgICB2aXJ0dWFsIH5HTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwor
ICAgIEdMdWludCB0ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlOyB9CisgICAgYm9v
bCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KKworcHJvdGVjdGVkOgor
ICAgIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25zdCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSk7
CisgICAgdm9pZCBjcmVhdGVUZXh0dXJlKCk7CisgICAgR0x1aW50IG1fdGV4dHVyZTsKKyAgICBi
b29sIG1faGFzQWxwaGE7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR3JhcGhpY3NTdXJm
YWNlQ29tbW9uLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
ZmwvR3JhcGhpY3NTdXJmYWNlQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kNzE1MDU0Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HcmFwaGljc1N1cmZhY2VDb21tb24uY3BwCkBAIC0wLDAg
KzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKwor
I2luY2x1ZGUgIkdMUGxhdGZvcm1Db250ZXh0LmgiCisjaW5jbHVkZSAiR0xUcmFuc3BvcnRTdXJm
YWNlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyR0wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNl
UHJpdmF0ZSB7CisKKyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKCkKKyAgICB7CisgICAgfQor
CisgICAgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZShQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5JZCwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpGbGFncykKKyAgICAgICAgOiBt
X3JlY3QoRmxvYXRQb2ludDo6emVybygpLCBzaXplKQorICAgICAgICAsIG1fc2l6ZShzaXplKQor
ICAgICAgICAsIG1fc2hhcmVkSGFuZGxlKHdpbklkKQorICAgIHsKKyAgICB9CisKKyAgICB+R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZSgpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZGVzdHJveSgp
CisgICAgeworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGVz
dHJveSgpOworCisgICAgICAgIGlmIChtX3NoYXJlZENvbnRleHQgJiYgbV9zaGFyZWRDb250ZXh0
LT5oYW5kbGUoKSAmJiBtX3NoYXJlZFN1cmZhY2UpCisgICAgICAgICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgICAgICBpZiAobV9zaGFyZWRTdXJmYWNlKQorICAgICAgICAgICAgbV9z
aGFyZWRTdXJmYWNlLT5kZXN0cm95KCk7CisKKyAgICAgICAgaWYgKG1fc2hhcmVkQ29udGV4dCkg
eworICAgICAgICAgICAgbV9zaGFyZWRDb250ZXh0LT5kZXN0cm95KCk7CisgICAgICAgICAgICBt
X3NoYXJlZENvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGluaXRpYWxpemVUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIEdy
YXBoaWNzU3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0Qgc2hhcmVDb250ZXh0KQorICAgIHsKKyAgICAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZh
Y2VBdHRyaWJ1dGVzIHNoYXJlZFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6
OkRlZmF1bHQ7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisKKyAgICAgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c0FscGhhKQorICAgICAgICAgICAgc2hhcmVkU3VyZmFj
ZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhOworCisgICAgICAg
IG1fc2hhcmVkU3VyZmFjZSA9IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3Vy
ZmFjZShzaXplLCBzaGFyZWRTdXJmYWNlQXR0cmlidXRlcyk7CisgICAgICAgIGlmICghbV9zaGFy
ZWRTdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fc2hhcmVk
Q29udGV4dCA9IEdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJPZmZzY3JlZW4pOworICAgICAgICBpZiAoIW1fc2hhcmVkQ29udGV4dCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIW1fc2hhcmVkQ29udGV4dC0+
aW5pdGlhbGl6ZShtX3NoYXJlZFN1cmZhY2UuZ2V0KCksIHN0YXRpY19jYXN0PFBsYXRmb3JtQ29u
dGV4dD4oc2hhcmVDb250ZXh0KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zaGFyZWRDb250ZXh0LT5tYWtl
Q3VycmVudChtX3NoYXJlZFN1cmZhY2UuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgY29weUZy
b21UZXh0dXJlKEdMdWludCB0ZXh0dXJlSWQpCisgICAgeworICAgICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc2hhcmVkU3Vy
ZmFjZS0+dXBkYXRlQ29udGVudHModGV4dHVyZUlkKTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUJ1
ZmZlckhhbmRsZSBoYW5kbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2hhcmVk
U3VyZmFjZS0+aGFuZGxlKCk7CisgICAgfQorCisgICAgLy8gQ2xpZW50CisgICAgdm9pZCB1cGRh
dGVDbGllbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX2NsaWVudC0+cHJlcGFyZVRleHR1cmUoKTsKKyAgICB9
CisKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9m
bGFnczsgfQorCisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorCisgICAgR0x1aW50IHRleHR1cmVJZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
Y2xpZW50KQorICAgICAgICAgICAgY29uc3RfY2FzdDxHcmFwaGljc1N1cmZhY2VQcml2YXRlKj4o
dGhpcyktPmluaXRpYWxpemVDbGllbnQoKTsKKworICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+dGV4dHVyZSgpIDogMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0
aWFsaXplQ2xpZW50KCkKKyAgICB7CisgICAgICAgIG1fY2xpZW50ID0gR0xUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50OjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KG1fc2hhcmVkSGFuZGxlKTsK
KworICAgICAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBwYXNzZWQgZnJvbSBHcmFwaGlj
c1N1cmZhY2UuCisgICAgICAgIGlmIChtX2NsaWVudC0+aGFzQWxwaGEoKSkKKyAgICAgICAgICAg
IG1fZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsKKyAgICB9CisKKyAgICBU
ZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAg
ICBJbnRTaXplIG1fc2l6ZTsKKyAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBtX3NoYXJlZEhhbmRs
ZTsKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50PiBtX2NsaWVudDsKKyAgICBP
d25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IG1fc2hhcmVkQ29udGV4dDsKKyAgICBPd25QdHI8R0xU
cmFuc3BvcnRTdXJmYWNlPiBtX3NoYXJlZFN1cmZhY2U7Cit9OworCitHcmFwaGljc1N1cmZhY2VU
b2tlbiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KCkKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5oYW5kbGUoKTsKK30KKwordWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUdldFRleHR1cmVJRCgpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dHVyZUlkKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSh1aW50MzJf
dCAvKnRhcmdldCovLCB1aW50MzJfdCAvKmlkKi8sIGNvbnN0IEludFJlY3QmIC8qdGFyZ2V0UmVj
dCovLCBjb25zdCBJbnRQb2ludCYgLypvZmZzZXQqLykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbVRleHR1cmUodWlu
dDMyX3QgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcml2YXRlLT5jb3B5RnJvbVRleHR1cmUodGV4dHVy
ZUlkKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFj
aXR5KQoreworICAgIHVpbnQzMl90IHRleHR1cmUgPSBwbGF0Zm9ybUdldFRleHR1cmVJRCgpOwor
ICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgYWRqdXN0ZWRUcmFuc2Zv
cm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QobV9wcml2YXRlLT5y
ZWN0KCksIHRhcmdldFJlY3QpKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0
ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmUodGV4dHVyZSwgbV9wcml2YXRlLT5mbGFncygpLCBt
X3ByaXZhdGUtPnNpemUoKSwgbV9wcml2YXRlLT5yZWN0KCksIGFkanVzdGVkVHJhbnNmb3JtLCBv
cGFjaXR5KTsKK30KKwordWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVm
ZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordWludDMyX3QgR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKCkKK3sKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUNsaWVu
dEJ1ZmZlcigpOworICAgIHJldHVybiAwOworfQorCitJbnRTaXplIEdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zaXplKCk7Cit9
CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
Q3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBjb25zdCBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCkKK3sKKyAgICAvLyBHcmFwaGljc1N1cmZhY2Ug
ZG9lc24ndCB5ZXQgaGF2ZSBzdXBwb3J0IGZvciBjb3B5VG9UZXh0dXJlIG9yIHNpbmdsZWJ1ZmZl
cmVkIHN1cmZhY2UuCisgICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZs
YWdzICYgU3VwcG9ydHNTaW5nbGVCdWZmZXJlZCkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPigpOworCisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFj
ZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKKyAgICBzdXJm
YWNlLT5tX3ByaXZhdGUgPSBuZXcgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpOworCisgICAgaWYg
KHN1cmZhY2UtPm1fcHJpdmF0ZS0+aW5pdGlhbGl6ZVRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgZmxh
Z3MsIHNoYXJlQ29udGV4dCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlOworCisgICAgcmV0dXJu
IFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBz
aXplLCBGbGFncyBmbGFncywgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQorewor
ICAgIC8vIEdyYXBoaWNzU3VyZmFjZSBkb2Vzbid0IHlldCBoYXZlIHN1cHBvcnQgZm9yIGNvcHlU
b1RleHR1cmUgb3Igc2luZ2xlYnVmZmVyZWQgc3VyZmFjZS4KKyAgICBpZiAoZmxhZ3MgJiBTdXBw
b3J0c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQorICAg
ICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICBSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShz
aXplLCBmbGFncykpOworICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZh
Y2VQcml2YXRlKHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBzaXplLCBmbGFncyk7CisgICAgcmV0
dXJuIHN1cmZhY2U7Cit9CisKK2NoYXIqIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKGNv
bnN0IEludFJlY3QmLCBpbnQqIC8qb3V0cHV0U3RyaWRlKi8sIExvY2tPcHRpb25zKQoreworICAg
IC8vIEdyYXBoaWNzU3VyZmFjZSBpcyBjdXJyZW50bHkgb25seSBiZWluZyB1c2VkIGZvciBXZWJH
TCwgd2hpY2ggZG9lcyBub3QgcmVxdWlyZSB0aGlzIGxvY2tpbmcgbWVjaGFuaXNtLgorICAgIHJl
dHVybiAwOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2soKQorewor
ICAgIC8vIEdyYXBoaWNzU3VyZmFjZSBpcyBjdXJyZW50bHkgb25seSBiZWluZyB1c2VkIGZvciBX
ZWJHTCwgd2hpY2ggZG9lcyBub3QgcmVxdWlyZSB0aGlzIGxvY2tpbmcgbWVjaGFuaXNtLgorfQor
Cit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBpZiAoIW1f
cHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcml2YXRlLT5kZXN0cm95KCk7CisK
KyAgICBkZWxldGUgbV9wcml2YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7Cit9CisKK1Bhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQmVnaW5QYWludChj
b25zdCBJbnRTaXplJiwgY2hhciosIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBHcmFwaGljc1N1cmZhY2U6
OmNyZWF0ZVJlYWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
CmluZGV4IDg5YmY1MTYuLmRhMWQxN2MgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApAQCAtMzAsOCAr
MzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKLSAgICA6IEdMVHJhbnNwb3J0U3VyZmFjZShhdHRyaWJ1dGVzKQorRUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXpl
LCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogR0xUcmFuc3BvcnRTdXJmYWNl
KHNpemUsIGF0dHJpYnV0ZXMpCiB7CiAgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5l
dyBFR0xDb25maWdTZWxlY3RvcihhdHRyaWJ1dGVzLCBOYXRpdmVXcmFwcGVyOjpuYXRpdmVEaXNw
bGF5KCkpKTsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2NvbmZpZ1NlbGVjdG9yLT5kaXNwbGF5
KCk7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5oCmluZGV4IDU0YmQyNGMuLjA1ZThhZTYgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFj
ZS5oCkBAIC00Myw3ICs0Myw3IEBAIHR5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7CiBj
bGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMVHJhbnNwb3J0U3VyZmFj
ZSB7CiAKIHB1YmxpYzoKLSAgICBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKFN1cmZhY2VBdHRy
aWJ1dGVzKTsKKyAgICBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmLCBT
dXJmYWNlQXR0cmlidXRlcyk7CiAgICAgdmlydHVhbCB+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZSgpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3
UmVjdCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAppbmRleCBjMGU1NjM2Li5mZmRhMWZh
IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTMwLDEwICszMCwzOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xY
X1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdIVCwgMSwgMCB9Oworc3RhdGljIFBG
TkdMWEJJTkRURVhJTUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IDA7CitzdGF0aWMg
UEZOR0xYUkVMRUFTRVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleEltYWdlRVhUID0gMDsK
IAotR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQotICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlKGF0dHJpYnV0ZXMpCitz
dGF0aWMgYm9vbCByZXNvbHZlR0xNZXRob2RzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCByZXNvbHZl
ZCA9IGZhbHNlOworICAgIGlmIChyZXNvbHZlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBwR2xYQmluZFRleEltYWdlRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhCSU5EVEVYSU1B
R0VFWFRQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5
dGUqPigiZ2xYQmluZFRleEltYWdlRVhUIikpKTsKKyAgICBwR2xYUmVsZWFzZVRleEltYWdlRVhU
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DPihnbFhHZXRQ
cm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYUmVsZWFzZVRl
eEltYWdlRVhUIikpKTsKKworICAgIHJlc29sdmVkID0gcEdsWEJpbmRUZXhJbWFnZUVYVCAmJiBw
R2xYUmVsZWFzZVRleEltYWdlRVhUOworCisgICAgcmV0dXJuIHJlc29sdmVkOworfQorCitzdGF0
aWMgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKKyAgICBHTFhfVEVYVFVSRV9GT1JNQVRfRVhULAor
ICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JBX0VYVCwKKyAgICBHTFhfVEVYVFVSRV9UQVJHRVRf
RVhULAorICAgIEdMWF9URVhUVVJFXzJEX0VYVCwKKyAgICAwCit9OworCitzdGF0aWMgYm9vbCBp
c01lc2FHTFgoKQoreworICAgIHN0YXRpYyBib29sIGlzTWVzYSA9ICEhc3Ryc3RyKGdsWEdldENs
aWVudFN0cmluZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgR0xYX1ZFTkRPUiksICJNZXNh
Iik7CisgICAgcmV0dXJuIGlzTWVzYTsKK30KKworR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJh
bnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQorICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMpCiB7CiAg
ICAgbV9zaGFyZWREaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7CiAgICAgYXR0
cmlidXRlcyB8PSBHTFBsYXRmb3JtU3VyZmFjZTo6RG91YmxlQnVmZmVyZWQ7CkBAIC00NSw3ICs3
NCw3IEBAIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0
dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFgxMUhl
bHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKnZpc0luZm8uZ2V0
KCkpOworICAgIFgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRs
ZSwgKnZpc0luZm8uZ2V0KCksIHNpemUpOwogCiAgICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewog
ICAgICAgICBkZXN0cm95KCk7CkBAIC0xNjYsNiArMTk1LDkyIEBAIHZvaWQgR0xYT2ZmU2NyZWVu
U3VyZmFjZTo6ZnJlZVJlc291cmNlcygpCiAgICAgbV9kcmF3YWJsZSA9IDA7CiB9CiAKK0dMWFRy
YW5zcG9ydFN1cmZhY2VDbGllbnQ6OkdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoY29uc3QgUGxh
dGZvcm1CdWZmZXJIYW5kbGUgaGFuZGxlKQorICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50
KGhhbmRsZSkKK3sKKyAgICBpZiAoIXJlc29sdmVHTE1ldGhvZHMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
WDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRl
cyhkaXNwbGF5LCBoYW5kbGUsICZhdHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIHdpbmRvdyBpcyBtYXBwZWQuCisgICAgaWYgKGF0dHIubWFwX3N0YXRlID09
IElzVW5tYXBwZWQgfHwgYXR0ci5tYXBfc3RhdGUgPT0gSXNVbnZpZXdhYmxlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgaGFuZGxlcjsK
KworICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1h
dChkaXNwbGF5LCBhdHRyLnZpc3VhbCk7CisgICAgYm9vbCBoYXNBbHBoYSA9IChmb3JtYXQtPnR5
cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKTsKKyAgICBt
X3hQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChkaXNwbGF5LCBoYW5kbGUpOwor
CisgICAgaWYgKCFtX3hQaXhtYXApCisgICAgICAgIHJldHVybjsKKworICAgIGdseEF0dHJpYnV0
ZXNbMV0gPSAoZm9ybWF0LT5kZXB0aCA9PSAzMiAmJiBoYXNBbHBoYSkgPyBHTFhfVEVYVFVSRV9G
T1JNQVRfUkdCQV9FWFQgOiBHTFhfVEVYVFVSRV9GT1JNQVRfUkdCX0VYVDsKKworICAgIEdMUGxh
dGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBzaGFyZWRTdXJmYWNlQXR0cmlidXRlcyA9
IEdMUGxhdGZvcm1TdXJmYWNlOjpEZWZhdWx0OworCisgICAgaWYgKGhhc0FscGhhKSB7CisgICAg
ICAgIHNoYXJlZFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRB
bHBoYTsKKyAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CisgICAgfQorCisgICAgR0xYQ29uZmln
U2VsZWN0b3IgY29uZmlnU2VsZWN0b3Ioc2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMpOworCisgICAg
bV9nbHhQaXhtYXAgPSBnbFhDcmVhdGVQaXhtYXAoZGlzcGxheSwgY29uZmlnU2VsZWN0b3Iuc3Vy
ZmFjZUNsaWVudENvbmZpZyhmb3JtYXQtPmRlcHRoLCBYVmlzdWFsSURGcm9tVmlzdWFsKGF0dHIu
dmlzdWFsKSksIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7CisKKyAgICBpZiAoIW1fZ2x4UGl4
bWFwIHx8ICFoYW5kbGVyLmlzVmFsaWRPcGVyYXRpb24oKSkgeworICAgICAgICBkZXN0cm95KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjcmVhdGVUZXh0dXJlKCk7CisgICAgZ2xY
V2FpdFgoKTsKKyAgICBwR2xYQmluZFRleEltYWdlRVhUKGRpc3BsYXksIG1fZ2x4UGl4bWFwLCBH
TFhfRlJPTlRfRVhULCAwKTsKK30KKworR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6fkdMWFRy
YW5zcG9ydFN1cmZhY2VDbGllbnQoKQoreworfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQ6OmRlc3Ryb3koKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYMTFIZWxwZXI6Om5h
dGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3RleHR1cmUpIHsKKyAgICAgICAgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVChkaXNwbGF5
LCBtX2dseFBpeG1hcCwgR0xYX0ZST05UX0VYVCk7CisgICAgICAgIEdMVHJhbnNwb3J0U3VyZmFj
ZUNsaWVudDo6ZGVzdHJveSgpOworICAgIH0KKworICAgIGlmIChtX2dseFBpeG1hcCkgeworICAg
ICAgICBnbFhEZXN0cm95UGl4bWFwKGRpc3BsYXksIG1fZ2x4UGl4bWFwKTsKKyAgICAgICAgbV9n
bHhQaXhtYXAgPSAwOworICAgICAgICBnbFhXYWl0R0woKTsKKyAgICB9CisKKyAgICBpZiAobV94
UGl4bWFwKSB7CisgICAgICAgIFgxMUhlbHBlcjo6ZGVzdHJveVBpeG1hcChtX3hQaXhtYXApOwor
ICAgICAgICBtX3hQaXhtYXAgPSAwOworICAgIH0KK30KKwordm9pZCBHTFhUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50OjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKGlzTWVzYUdMWCgpICYmIG1f
dGV4dHVyZSkgeworICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVE
aXNwbGF5KCk7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
KTsKKyAgICAgICAgLy8gTWVzYSBkb2Vzbid0IHJlLWJpbmQgdGV4dHVyZSB0byB0aGUgZnJvbnQg
YnVmZmVyIG9uIGdsWFN3YXBCdWZlcgorICAgICAgICAvLyBNYW51YWxseSByZWxlYXNlIHByZXZp
b3VzIGxvY2sgYW5kIHJlYmluZCB0ZXh0dXJlIHRvIHN1cmZhY2UgdG8gZW5zdXJlIGZyYW1lIHVw
ZGF0ZXMuCisgICAgICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQoZGlzcGxheSwgbV9nbHhQaXht
YXAsIEdMWF9GUk9OVF9FWFQpOworICAgICAgICBwR2xYQmluZFRleEltYWdlRVhUKGRpc3BsYXks
IG1fZ2x4UGl4bWFwLCBHTFhfRlJPTlRfRVhULCAwKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5oCmluZGV4IGU4NjE4OTEuLjVlNGVmY2EgMTAwNjQ0Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5o
CkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdMWFRyYW5zcG9y
dFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJmYWNlIHsKIAogcHVibGljOgotICAgIEdM
WFRyYW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMpOworICAgIEdMWFRyYW5zcG9ydFN1
cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5H
TFhUcmFuc3BvcnRTdXJmYWNlKCk7CiAgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcg
Y29uZmlndXJhdGlvbigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygp
IE9WRVJSSURFOwpAQCAtNDYsNyArNDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKSBPVkVSUklERTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemUoKTsKICAg
ICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCkBAIC02
Niw2ICs2NSwxOSBAQCBwcml2YXRlOgogICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKIH07CiAK
K2NsYXNzIEdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50IHsKKworcHVibGljOgorICAgIEdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoY29u
c3QgUGxhdGZvcm1CdWZmZXJIYW5kbGUpOworICAgIHZpcnR1YWwgfkdMWFRyYW5zcG9ydFN1cmZh
Y2VDbGllbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRleHR1cmUoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFBp
eG1hcCBtX3hQaXhtYXA7CisgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOworfTsKKwogfQogCiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192368</attachid>
            <date>2013-03-09 20:30:39 -0800</date>
            <delta_ts>2013-03-18 08:40:51 -0700</delta_ts>
            <desc>patchv2</desc>
            <filename>graphicssurfacecommon2.patch</filename>
            <type>text/plain</type>
            <size>54038</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGJmNmVkNDUuLjlhNDYxOTMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAx
My0wMy0wOSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBhIGNvbW1vbiBHcmFwaGljc1N1cmZh
Y2UgSW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTE3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFdlYkdMIHRlc3RzLgorCisgICAgICAgIFRo
aXMgaXMgaW4gcHJlcGFyYXRpb24gdG8gYWRkIHRyYW5zcG9ydCBzdXJmYWNlIHN1cHBvcnQgZm9y
IEdMRVMyLgorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IGVhc3kgdG8gc2hhcmUgdGhlIGNv
cmUgbG9naWMgb2YgdXNpbmcKKyAgICAgICAgVHJhbnNwb3J0IFN1cmZhY2UgYW5kIGNsaWVudCBv
biBHTFggYW5kIEdMRVMyIGJhY2tlbmRzIHdpdGhvdXQKKyAgICAgICAgYW55IGNvZGUgZHVwbGlj
YXRpb24uCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
ZGlkUmVzaXplQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAgIChHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUpOgorICAgICAgICBUcmFuc3BvcnRTdXJmYWNlIHJlbGF0ZWQgY29kZSBpcyBt
b3ZlZCB0byBHcmFwaGljc1N1cmZhY2VDb21tb24uCisgICAgICAgIEFzIEdyYXBoaWNzU3VyZmFj
ZSBpcyBkZWxldGVkIG9uIHJlc2l6ZSwgYWRkZWQgbG9naWMgdG8gZW5zdXJlIHRoYXQKKyAgICAg
ICAgY3VycmVudCBidWZmZXIgaXMgbm90IGRlbGV0ZWQgYmVmb3JlIGhhdmluZyB0aGUgc2hhcmVk
IGJ1ZmZlcgorICAgICAgICB3aXRoIGNvcnJlY3Qgc2l6ZS4gVGhpcyB3b3VsZCBhdm9pZCBhbnkg
Zmxhc2hpbmcgZHVyaW5nIHJlc2l6ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZh
Y2UuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9y
dFN1cmZhY2U6OkdMVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5z
cG9ydFN1cmZhY2U6On5HTFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xU
cmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHTFRy
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNw
b3J0U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1cmZh
Y2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRTdXJmYWNlOjpiaW5kQXJy
YXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVU
cmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1cmZh
Y2U6OmluaXRpYWxpemVTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNw
b3J0U3VyZmFjZUNsaWVudDo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OkdMVHJhbnNwb3J0U3VyZmFjZUNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6On5HTFRy
YW5zcG9ydFN1cmZhY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50OjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3VyZmFj
ZUNsaWVudDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRT
dXJmYWNlQ2xpZW50OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuaC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR0xUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAg
ICAgKEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5z
cG9ydFN1cmZhY2VDbGllbnQ6OnRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3Bv
cnRTdXJmYWNlQ2xpZW50OjpoYXNBbHBoYSk6CisgICAgICAgIE1vdmVkIFRyYW5zcG9ydFN1cmZh
Y2UgdG8gRUZMIGZvbGRlci4gQWRkZWQgYSBiYXNlIGNsYXNzCisgICAgICAgIGZvciBUcmFuc3Bv
cnRTdXJmYWNlQ2xpZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWZsL0dyYXBoaWNzU3VyZmFjZUNvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6fkdyYXBoaWNzU3VyZmFjZVByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjppbml0aWFsaXplVHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpt
YWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJp
dmF0ZTo6Y29weUZyb21UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OmhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2
YXRlOjp1cGRhdGVDbGllbnRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZTo6ZmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJp
dmF0ZTo6cmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnRleHR1cmVJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjppbml0aWFsaXpl
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRleHR1
cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRv
R0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1D
b3B5RnJvbVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybVBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
OjpwbGF0Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Vbmxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3kp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUJlZ2luUGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpjcmVhdGVSZWFkT25seUltYWdl
KToKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlIGltcGxlbWVudGF0aW9uIHRvIGJlIHNoYXJlZCBi
eSBib3RoIEdMWCBhbmQgR0xFUzIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAgICAoRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpyZXNvbHZlR0xNZXRob2RzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTWVzYUdMWCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OkdMWFRyYW5z
cG9ydFN1cmZhY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFj
ZUNsaWVudDo6fkdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDoKKyAgICAgICAgKEdMWFRy
YW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKwogMjAxMy0wMy0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgcGxhdGZvcm0gY29kZSB0byBpbXBsZW1l
bnQgdGV4dCB0cmFjayBtZW51CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTM1ZmJmZS4uZjY3
ZDlhOCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMjk3LDYgKzI5Nyw3IEBAIGlmIChXVEZf
VVNFXzNEX0dSQVBISUNTKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgog
ICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMiCisgICAg
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwiCiAgICAg
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgiCiAgICAg
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAgICAgKQpAQCAt
MzE2LDggKzMxNyw5IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dyYXBoaWNzU3VyZmFjZUNv
bW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBl
ci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtLmNwcApAQCAtMzMzLDcgKzMzNSw2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQog
ICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAogICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCi0gICAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAogICAgICAg
ICApCiAgICAgZW5kaWYgKCkKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IGVh
NzI2OWIuLmEzNjI1ZDYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKQEAgLTY4LDM3
ICs2OCwxMyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSgpCiAg
ICAgICAgIGlmICghbV9vZmZTY3JlZW5Db250ZXh0LT5pbml0aWFsaXplKG1fb2ZmU2NyZWVuU3Vy
ZmFjZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKICAgICAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRleHQtPnZhbGlkYXRlQXR0cmlidXRl
cygpOwotICAgICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgc2hhcmVk
U3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6RGVmYXVsdDsKLSAgICAgICAg
aWYgKG1fY29udGV4dC0+bV9hdHRycy5hbHBoYSkKLSAgICAgICAgICAgIHNoYXJlZFN1cmZhY2VB
dHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYTsKLQotICAgICAgICBt
X29mZlNjcmVlbkNvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7Ci0gICAgICAgIG1fc2hhcmVkU3Vy
ZmFjZSA9IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKHNoYXJlZFN1
cmZhY2VBdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFtX3NoYXJlZFN1cmZhY2UpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9zaGFyZWRDb250ZXh0ID0gR0xQbGF0Zm9y
bUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlKTsKLSAgICAg
ICAgaWYgKCFtX3NoYXJlZENvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKCFtX3NoYXJlZENvbnRleHQtPmluaXRpYWxpemUobV9zaGFyZWRTdXJmYWNlLmdl
dCgpLCBtX29mZlNjcmVlbkNvbnRleHQtPmhhbmRsZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoIW1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fc3VyZmFjZUhhbmRsZSA9IEdyYXBoaWNz
U3VyZmFjZVRva2VuKG1fc2hhcmVkU3VyZmFjZS0+aGFuZGxlKCkpOworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgICAgICBtX3N1cmZhY2VPcGVyYXRpb24gPSBDcmVhdGVTdXJmYWNlOwog
I2VuZGlmCiAgICAgfQogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNCwxNiArOTAsMTMg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMoKQogCiAg
ICAgLy8gUmVsZWFzZSB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBkcmF3YWJsZSBvbmx5IGFmdGVy
IGRlc3Ryb3lpbmcgYW55IGFzc29jaWF0ZWQgZ2wgcmVzb3VyY2VzLgogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotICAgIGlmIChtX3NoYXJlZENvbnRleHQgJiYgbV9zaGFyZWRDb250ZXh0LT5o
YW5kbGUoKSAmJiBtX3NoYXJlZFN1cmZhY2UpCi0gICAgICAgIG1ha2VTaGFyZWRDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmIChtX3ByZXZpb3VzR3JhcGhpY3NTdXJmYWNlKQorICAgICAgICBtX3By
ZXZpb3VzR3JhcGhpY3NTdXJmYWNlID0gbnVsbHB0cjsKIAotICAgIGlmIChtX3NoYXJlZFN1cmZh
Y2UpCi0gICAgICAgIG1fc2hhcmVkU3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX2dyYXBo
aWNzU3VyZmFjZSkKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UgPSBudWxscHRyOwogCi0gICAg
aWYgKG1fc2hhcmVkQ29udGV4dCkgewotICAgICAgICBtX3NoYXJlZENvbnRleHQtPmRlc3Ryb3ko
KTsKLSAgICAgICAgbV9zaGFyZWRDb250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwotICAgIH0KKyAg
ICBtX3N1cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbigpOwogI2VuZGlmCiAgICAg
aWYgKG1fb2ZmU2NyZWVuU3VyZmFjZSkKICAgICAgICAgbV9vZmZTY3JlZW5TdXJmYWNlLT5kZXN0
cm95KCk7CkBAIC0xOTEsNiArMTY0LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnByZXBhcmVCdWZmZXIoKSBjb25zdAogCiAgICAgICAgIGlmIChlbmFibGVTY2lzc29yVGVzdCkK
ICAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpOworCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Nv
bnRleHQtPm1fc3RhdGUuYm91bmRGQk8pOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MjA0LDM3ICsxNzksODAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFIKICNlbmRpZgogCiAjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFr
ZVNoYXJlZENvbnRleHRDdXJyZW50KCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2UoKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fc2hh
cmVkQ29udGV4dC0+bWFrZUN1cnJlbnQobV9zaGFyZWRTdXJmYWNlLmdldCgpKTsKKyAgICBzdGF0
aWMgUGVuZGluZ1N1cmZhY2VPcGVyYXRpb24gcGVuZGluZ09wZXJhdGlvbiA9IERlbGV0ZVByZXZp
b3VzU3VyZmFjZSB8IFJlc2l6ZSB8IENyZWF0ZVN1cmZhY2U7CisgICAgaWYgKCEobV9zdXJmYWNl
T3BlcmF0aW9uICYgcGVuZGluZ09wZXJhdGlvbikpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9zaGFyZWRDb250ZXh0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFJlc3Rv
cmUgY29udGV4dAotICAgICAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrKQotICAgICAgICAg
ICAgbV9jb250ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisgICAgaWYgKG1fc3Vy
ZmFjZU9wZXJhdGlvbiAmIERlbGV0ZVByZXZpb3VzU3VyZmFjZSkgeworICAgICAgICBtX3ByZXZp
b3VzR3JhcGhpY3NTdXJmYWNlID0gbnVsbHB0cjsKKyAgICAgICAgbV9zdXJmYWNlT3BlcmF0aW9u
ICY9IH5EZWxldGVQcmV2aW91c1N1cmZhY2U7CisgICAgfQogCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIShtX3N1cmZhY2VPcGVyYXRpb24gJiBwZW5kaW5nT3BlcmF0aW9uKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRG9udCByZWxlYXNlIGN1cnJlbnQgZ3JhcGhpY3Mgc3Vy
ZmFjZSB1bnRpbCB3ZSBoYXZlCisgICAgLy8gcHJlcGFyZWQgc3VyZmFjZSB3aXRoIHJlcXVlc3Rl
ZCBzaXplLiBUaGlzIGlzIHRvCisgICAgLy8gYXZvaWQgZmxhc2hpbmcgZHVyaW5nIHJlc2l6ZS4K
KyAgICBpZiAobV9zdXJmYWNlT3BlcmF0aW9uICYgUmVzaXplKSB7CisgICAgICAgIG1fcHJldmlv
dXNHcmFwaGljc1N1cmZhY2UgPSBtX2dyYXBoaWNzU3VyZmFjZTsKKyAgICAgICAgbV9zdXJmYWNl
T3BlcmF0aW9uICY9IH5SZXNpemU7CisgICAgICAgIG1fc3VyZmFjZU9wZXJhdGlvbiB8PSBEZWxl
dGVQcmV2aW91c1N1cmZhY2U7CisgICAgICAgIG1fc2l6ZSA9IEludFNpemUobV9jb250ZXh0LT5t
X2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQpOworICAgIH0gZWxzZQor
ICAgICAgICBtX3N1cmZhY2VPcGVyYXRpb24gJj0gfkNyZWF0ZVN1cmZhY2U7CisKKyAgICBtX3Rh
cmdldFJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkp
OworCisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpIHsKKworICAgICAgICBpZiAobV9ncmFwaGlj
c1N1cmZhY2UpIHsKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIG1fc3VyZmFjZUhhbmRsZSA9IEdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAg
ICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICByZXR1cm4gc3VjY2VzczsKKyAgICBtX29mZlNjcmVlbkNvbnRleHQt
PnJlbGVhc2VDdXJyZW50KCk7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBmbGFncyA9IEdy
YXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpT
dXBwb3J0c1NoYXJpbmc7CisKKyAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFscGhhKQorICAg
ICAgICBmbGFncyB8PSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQWxwaGE7CisKKyAgICBtX2dy
YXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKG1fc2l6ZSwgZmxhZ3MsIG1f
b2ZmU2NyZWVuQ29udGV4dC0+aGFuZGxlKCkpOworCisgICAgaWYgKCFtX2dyYXBoaWNzU3VyZmFj
ZSkKKyAgICAgICAgbV9zdXJmYWNlSGFuZGxlID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fc3VyZmFjZUhhbmRsZSA9IEdyYXBoaWNzU3VyZmFjZVRva2VuKG1f
Z3JhcGhpY3NTdXJmYWNlLT5leHBvcnRUb2tlbigpKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZGlkUmVzaXplQ2FudmFz
KGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgbV9zaXplID0gc2l6ZTsKKyAgICBpZiAobV9z
dXJmYWNlT3BlcmF0aW9uICYgQ3JlYXRlU3VyZmFjZSkgeworICAgICAgICBtX3NpemUgPSBzaXpl
OworICAgICAgICBjcmVhdGVHcmFwaGljc1N1cmZhY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmIChtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgbV9zaGFy
ZWRTdXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpKTsKKyAgICBtX3N1cmZhY2VPcGVyYXRpb24gfD0gUmVzaXplOwogfQogCiB1
aW50MzJfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgp
CiB7Ci0gICAgaWYgKG1fY29udGV4dC0+bV9sYXllckNvbXBvc2l0ZWQgfHwgIXByZXBhcmVCdWZm
ZXIoKSB8fCAhbWFrZVNoYXJlZENvbnRleHRDdXJyZW50KCkpCisgICAgY3JlYXRlR3JhcGhpY3NT
dXJmYWNlKCk7CisKKyAgICBpZiAoIW1fZ3JhcGhpY3NTdXJmYWNlIHx8IG1fY29udGV4dC0+bV9s
YXllckNvbXBvc2l0ZWQgfHwgIXByZXBhcmVCdWZmZXIoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBtX3NoYXJlZFN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJl
KTsKKyAgICBtX2dyYXBoaWNzU3VyZmFjZS0+Y29weUZyb21UZXh0dXJlKG1fY29udGV4dC0+bV90
ZXh0dXJlLCBtX3RhcmdldFJlY3QpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAgbV9jb250ZXh0LT5tX3N0YXRlLmJvdW5k
RkJPKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXgg
OGYwZWIzYy4uMmNiMjM5MCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC01OSwyNSAr
NTksMzcgQEAgcHVibGljOgogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgY29uc3Q7CiAK
IHByaXZhdGU6CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgZW51bSBQZW5kaW5nT3Bl
YXJ0aW9uIHsKKyAgICAgICAgRGVmYXVsdCA9IDB4MDAsIC8vIE5vIFBlbmRpbmcgT3BlcmF0aW9u
LgorICAgICAgICBDcmVhdGVTdXJmYWNlID0gMHgwMSwKKyAgICAgICAgUmVzaXplID0gMHgwMiwK
KyAgICAgICAgRGVsZXRlUHJldmlvdXNTdXJmYWNlID0gMHgwNAorICAgIH07CisKKyAgICB0eXBl
ZGVmIHVuc2lnbmVkIFBlbmRpbmdTdXJmYWNlT3BlcmF0aW9uOworI2VuZGlmCisKICAgICBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7CiAg
ICAgYm9vbCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBjcmVhdGVHcmFwaGljc1N1cmZhY2UoKTsK
ICAgICBib29sIHByZXBhcmVCdWZmZXIoKSBjb25zdDsKICAgICB2b2lkIHJlbGVhc2VSZXNvdXJj
ZXMoKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBib29sIG1ha2VTaGFyZWRDb250
ZXh0Q3VycmVudCgpIGNvbnN0OwotI2VuZGlmCisKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9j
b250ZXh0OwogICAgIEhvc3RXaW5kb3cqIG1faG9zdFdpbmRvdzsKICAgICBPd25QdHI8R0xQbGF0
Zm9ybUNvbnRleHQ+IG1fb2ZmU2NyZWVuQ29udGV4dDsKICAgICBPd25QdHI8R0xQbGF0Zm9ybVN1
cmZhY2U+IG1fb2ZmU2NyZWVuU3VyZmFjZTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IG1fc2hhcmVkQ29udGV4dDsKLSAgICBPd25QdHI8
R0xQbGF0Zm9ybVN1cmZhY2U+IG1fc2hhcmVkU3VyZmFjZTsKICAgICBHcmFwaGljc1N1cmZhY2VU
b2tlbiBtX3N1cmZhY2VIYW5kbGU7CisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFw
aGljc1N1cmZhY2U7CisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9wcmV2aW91c0dyYXBo
aWNzU3VyZmFjZTsKKyAgICBQZW5kaW5nU3VyZmFjZU9wZXJhdGlvbiBtX3N1cmZhY2VPcGVyYXRp
b24gOiAzOwogI2VuZGlmCiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9z
dENhbGxiYWNrPiBtX2NvbnRleHRMb3N0Q2FsbGJhY2s7CiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVu
dW0+IG1fc3ludGhldGljRXJyb3JzOwogICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3Qg
bV90YXJnZXRSZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtODUsNCArOTcs
MyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNlbmRpZgotCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmlu
ZGV4IGI1MDMyMjEuLjBkYjgwZTAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC01NCwyMCAr
NTQsNiBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6
Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShTdXJmYWNlQQogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1QYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRl
VHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotewotI2lmIFVT
RShHTFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIo
bmV3IEdMWFRyYW5zcG9ydFN1cmZhY2UoYXR0cmlidXRlcykpOwotI2VsaWYgVVNFKEVHTCkKLSAg
ICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZShhdHRyaWJ1dGVzKSk7Ci0jZW5kaWYKLQotICAgIGlmIChzdXJm
YWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCi0gICAgICAg
IHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCiBH
TFBsYXRmb3JtU3VyZmFjZTo6R0xQbGF0Zm9ybVN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMpCiAg
ICAgOiBtX3NoYXJlZERpc3BsYXkoMCkKICAgICAsIG1fZHJhd2FibGUoMCkKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2Uu
aCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuaAppbmRleCA1ZDQwYzUyLi41NDNiNjc1IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCkBAIC00Mywx
NyArNDMsMTMgQEAgcHVibGljOgogICAgIGVudW0gQXR0cmlidXRlcyB7CiAgICAgICAgIERlZmF1
bHQgPSAweDAwLCAvLyBObyBBbHBoYSBjaGFubmVsLiBPbmx5IFIsRyxCIHZhbHVlcyBzZXQuCiAg
ICAgICAgIFN1cHBvcnRBbHBoYSA9IDB4MDEsCi0gICAgICAgIERvdWJsZUJ1ZmZlcmVkID0gMHgw
NAorICAgICAgICBEb3VibGVCdWZmZXJlZCA9IDB4MDIKICAgICB9OwogCi0gICAgdHlwZWRlZiBp
bnQgU3VyZmFjZUF0dHJpYnV0ZXM7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBTdXJmYWNlQXR0cmli
dXRlczsKICAgICAvLyBDcmVhdGVzIGEgR0wgc3VyZmFjZSB1c2VkIGZvciBvZmZzY3JlZW4gcmVu
ZGVyaW5nLgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVhdGVP
ZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRl
ZmF1bHQpOwogCi0gICAgLy8gQ3JlYXRlcyBhIEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVu
IHJlbmRlcmluZy4gVGhlIHJlc3VsdHMgY2FuIGJlIHRyYW5zcG9ydGVkCi0gICAgLy8gdG8gdGhl
IFVJIHByb2Nlc3MgZm9yIGRpc3BsYXkuCi0gICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9y
bVN1cmZhY2U+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBs
YXRmb3JtU3VyZmFjZTo6RGVmYXVsdCk7Ci0KICAgICB2aXJ0dWFsIH5HTFBsYXRmb3JtU3VyZmFj
ZSgpOwogCiAgICAgY29uc3QgSW50UmVjdCYgZ2VvbWV0cnkoKSBjb25zdDsKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZh
Y2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNw
b3J0U3VyZmFjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzhhOWIuLjAw
MDAwMDAKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJh
bnNwb3J0U3VyZmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdMVHJhbnNwb3J0
U3VyZmFjZS5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IDAsIDAs
IDEsIDAsIDEsIDEsIDAsIDEgfTsKLXN0YXRpYyBib29sIHZlcnRleEFycmF5T2JqZWN0U3VwcG9y
dGVkID0gZmFsc2U7Ci0KLUdMVHJhbnNwb3J0U3VyZmFjZTo6R0xUcmFuc3BvcnRTdXJmYWNlKFN1
cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHTFBsYXRmb3JtU3VyZmFjZShhdHRy
aWJ1dGVzKQotICAgICwgbV92Ym8oMCkKLSAgICAsIG1fdmVydGV4SGFuZGxlKDApCi17Ci19Ci0K
LUdMVHJhbnNwb3J0U3VyZmFjZTo6fkdMVHJhbnNwb3J0U3VyZmFjZSgpCi17Ci19Ci0KLXZvaWQg
R0xUcmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJl
KQotewotICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQotICAgICAgICBpbml0aWFsaXplU2hhZGVy
UHJvZ3JhbSgpOwotCi0gICAgZHJhdyh0ZXh0dXJlKTsKLSAgICBzd2FwQnVmZmVycygpOwotfQot
Ci12b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3
UmVjdCkKLXsKLSAgICBtX3JlY3QgPSBuZXdSZWN0OwotCi0gICAgaWYgKCFtX3NoYWRlclByb2dy
YW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCk7
Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKLXsKLSAgICBtX3JlY3Qg
PSBJbnRSZWN0KCk7Ci0KLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAw
KTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICBpZiAoIW1f
c2hhZGVyUHJvZ3JhbSB8fCAhbV9jb250ZXh0M0QpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6
Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7Ci0KLSAgICBpZiAobV92Ym8pCi0gICAg
ICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZtX3Zibyk7Ci0KLSAgICBpZiAobV92ZXJ0ZXhIYW5k
bGUpIHsKLSAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+YmluZFZlcnRleEFy
cmF5T0VTKDApOwotICAgICAgICBtX2NvbnRleHQzRC0+Z2V0RXh0ZW5zaW9ucygpLT5kZWxldGVW
ZXJ0ZXhBcnJheU9FUyhtX3ZlcnRleEhhbmRsZSk7Ci0gICAgfSBlbHNlIGlmIChtX3NoYWRlclBy
b2dyYW0pCi0gICAgICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobV9zaGFkZXJQcm9n
cmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKLQotICAgIDo6Z2xVc2VQcm9ncmFtKDApOwotCi0gICAg
bV9zaGFkZXJQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2NvbnRleHQzRCA9IG51bGxwdHI7Ci19
Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpkcmF3KGNvbnN0IHVpbnQzMl90IHRleHR1cmUp
Ci17Ci0gICAgaWYgKCFtX3ZlcnRleEhhbmRsZSkKLSAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7
Ci0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7Ci0gICAgOjpn
bERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKLX0KLQotdm9pZCBHTFRyYW5zcG9y
dFN1cmZhY2U6OmJpbmRBcnJheUJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgOjpnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Ci0gICAgOjpn
bEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Zibyk7Ci0gICAgOjpnbFZlcnRleEF0dHJp
YlBvaW50ZXIobV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLX0KLQotdm9pZCBHTFRyYW5zcG9ydFN1cmZh
Y2U6OnVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLXsKLSAgICBpZiAoIW1fc2hhZGVyUHJv
Z3JhbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZpZXdwb3J0KG1fcmVjdC54KCksIG1f
cmVjdC55KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkpOwotCi0gICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3QgPSBGbG9hdFJlY3QobV9yZWN0KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChpZGVudGl0eU1hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7
Ci0gICAgbV9zaGFkZXJQcm9ncmFtLT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT5tb2RlbFZp
ZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgpOwotCi0gICAgLy8gVGFrZW4gZnJvbSBUZXh0dXJl
TWFwcGVyR0wuCi0gICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gOTk5OTk5OTsKLSAgICBjb25z
dCBmbG9hdCBmYXJWYWx1ZSA9IC05OTk5OTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBy
b2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChtX3JlY3Qu
d2lkdGgoKSksIDAsIDAsIDAsCi0gICAgICAgIDAsICgtMi4wKSAvIGZsb2F0KG1fcmVjdC5oZWln
aHQoKSksIDAsIDAsCi0gICAgICAgIDAsIDAsIC0yLmYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUp
LCAwLAotICAgICAgICAtMSwgMSwgLShmYXJWYWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUg
LSBuZWFyVmFsdWUpLCAxKTsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hh
ZGVyUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCksIHByb2plY3Rpb25NYXRyaXgp
OwotfQotCi12b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6ZVNoYWRlclByb2dyYW0o
KQotewotICAgIGlmICghbV9jb250ZXh0M0QpCi0gICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENvbnRleHQoKTsKLQotICAgIHZlcnRleEFy
cmF5T2JqZWN0U3VwcG9ydGVkID0gbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9y
dHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0KLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlRleHR1cmU7Ci0gICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZShtX2NvbnRleHQzRCwgb3B0aW9ucyk7Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbSht
X3NoYWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKLSAgICA6OmdsVW5pZm9ybTFpKG1fc2hhZGVy
UHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9O
RUFSRVNUKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggZmxpcFRyYW5zZm9ybTsKLSAgICBmbGlwVHJhbnNmb3JtLmZsaXBZ
KCk7Ci0gICAgZmxpcFRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLTEpOwotICAgIG1fc2hhZGVyUHJv
Z3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+dGV4dHVyZVNwYWNlTWF0cml4TG9jYXRp
b24oKSwgZmxpcFRyYW5zZm9ybSk7Ci0KLSAgICA6OmdsVW5pZm9ybTFmKG1fc2hhZGVyUHJvZ3Jh
bS0+b3BhY2l0eUxvY2F0aW9uKCksIDEuMCk7Ci0KLSAgICBpZiAoIW1fdmJvKSB7Ci0gICAgICAg
IDo6Z2xHZW5CdWZmZXJzKDEsICZtX3Zibyk7Ci0gICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV92Ym8pOwotICAgICAgICA6OmdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKLSAg
ICB9Ci0KLSAgICAvLyBDcmVhdGUgYW5kIHNldC11cCB2ZXJ0ZXggYXJyYXkgb2JqZWN0LgotICAg
IGlmICh2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCkgewotICAgICAgICBtX3ZlcnRleEhhbmRs
ZSA9IG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7
Ci0KLSAgICAgICAgaWYgKG1fdmVydGV4SGFuZGxlKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQz
RC0+Z2V0RXh0ZW5zaW9ucygpLT5iaW5kVmVydGV4QXJyYXlPRVMobV92ZXJ0ZXhIYW5kbGUpOwot
ICAgICAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1
cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotCi0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgMCk7Ci19Ci0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZh
Y2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNiOWQxMC4uMDAwMDAwMAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJm
YWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEdMVHJhbnNwb3J0U3VyZmFjZV9oCi0jZGVmaW5lIEdMVHJhbnNwb3J0U3VyZmFj
ZV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJHTFBs
YXRmb3JtU3VyZmFjZS5oIgotI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR0xUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNl
IHsKLQotcHVibGljOgotICAgIEdMVHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7
Ci0gICAgdmlydHVhbCB+R0xUcmFuc3BvcnRTdXJmYWNlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCkgT1ZFUlJJREU7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHVwZGF0ZVRyYW5zZm9y
bWF0aW9uTWF0cml4KCk7Ci0gICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoKSBjb25zdDsKLSAgICB2
b2lkIGluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCk7Ci0gICAgdm9pZCBkcmF3KGNvbnN0IHVpbnQz
Ml90KTsKLQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7Ci0gICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBtX3NoYWRlclByb2dyYW07Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBtX3ZibzsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4SGFu
ZGxlOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmNw
cCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3Bv
cnRTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkxMjI2
Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0xUcmFuc3BvcnRT
dXJmYWNlLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpZiBVU0Uo
R0xYKQorI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKKyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyNp
bmNsdWRlICJFR0xTdXJmYWNlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBj
b25zdCBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEgfTsKK3N0
YXRpYyBib29sIHZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkID0gZmFsc2U7CisKK1Bhc3NPd25Q
dHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9y
dFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKK3sKKyNpZiBVU0UoR0xYKQorICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZh
Y2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVzKSk7
CisjZWxpZiBVU0UoRUdMKQorICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZhY2Ug
PSBhZG9wdFB0cihuZXcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShhdHRyaWJ1dGVzKSk7Cisj
ZW5kaWYKKworICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2Ut
PmRyYXdhYmxlKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKworICAgIHJl
dHVybiBudWxscHRyOworfQorCitHTFRyYW5zcG9ydFN1cmZhY2U6OkdMVHJhbnNwb3J0U3VyZmFj
ZShjb25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAg
IDogR0xQbGF0Zm9ybVN1cmZhY2UoYXR0cmlidXRlcykKKyAgICAsIG1fdmJvKDApCisgICAgLCBt
X3ZlcnRleEhhbmRsZSgwKQorICAgICwgbV9ib3VuZFRleHR1cmUoMCkKK3sKKyAgICBtX3JlY3Qg
PSBJbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK0dMVHJh
bnNwb3J0U3VyZmFjZTo6fkdMVHJhbnNwb3J0U3VyZmFjZSgpCit7Cit9CisKK3ZvaWQgR0xUcmFu
c3BvcnRTdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlKQorewor
ICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAgICBpbml0aWFsaXplU2hhZGVyUHJvZ3Jh
bSgpOworCisgICAgZHJhdyh0ZXh0dXJlKTsKKyAgICBzd2FwQnVmZmVycygpOworfQorCit2b2lk
IEdMVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkK
K3sKKyAgICBtX3JlY3QgPSBuZXdSZWN0OworCisgICAgaWYgKCFtX3NoYWRlclByb2dyYW0pCisg
ICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Cit9CisK
K3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKK3sKKyAgICBtX3JlY3QgPSBJbnRS
ZWN0KCk7CisKKyAgICBpZiAoIW1fc2hhZGVyUHJvZ3JhbSB8fCAhbV9jb250ZXh0M0QpCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDAp
OworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICA6OmdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApOworCisgICAgaWYgKG1fdmJvKQorICAgICAgICA6Omds
RGVsZXRlQnVmZmVycygxLCAmbV92Ym8pOworCisgICAgaWYgKG1fdmVydGV4SGFuZGxlKSB7Cisg
ICAgICAgIG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUygw
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+ZGVsZXRlVmVydGV4QXJy
YXlPRVMobV92ZXJ0ZXhIYW5kbGUpOworICAgIH0gZWxzZSBpZiAobV9zaGFkZXJQcm9ncmFtKQor
ICAgICAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7CisKKyAgICA6OmdsVXNlUHJvZ3JhbSgwKTsKKworICAgIG1fc2hhZGVy
UHJvZ3JhbSA9IG51bGxwdHI7CisgICAgbV9jb250ZXh0M0QgPSBudWxscHRyOworICAgIG1fYm91
bmRUZXh0dXJlID0gMDsKK30KKwordm9pZCBHTFRyYW5zcG9ydFN1cmZhY2U6OmRyYXcoY29uc3Qg
dWludDMyX3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1fdmVydGV4SGFuZGxlKQorICAgICAgICBi
aW5kQXJyYXlCdWZmZXIoKTsKKworICAgIGlmIChtX2JvdW5kVGV4dHVyZSAhPSB0ZXh0dXJlKSB7
CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAg
ICAgbV9ib3VuZFRleHR1cmUgPSB0ZXh0dXJlOworICAgIH0KKworICAgIDo6Z2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpi
aW5kQXJyYXlCdWZmZXIoKSBjb25zdAoreworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOworICAgIDo6Z2xCaW5kQnVmZmVy
KEdMX0FSUkFZX0JVRkZFUiwgbV92Ym8pOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1f
c2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FULCBmYWxzZSwgMCwgMCk7Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpCit7CisgICAgaWYgKCFtX3NoYWRlclByb2dyYW0pCisgICAg
ICAgIHJldHVybjsKKworICAgIDo6Z2xWaWV3cG9ydChtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBt
X3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpKTsKKyAgICBtX2JvdW5kVGV4dHVyZSA9IDA7
CisKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IEZsb2F0UmVjdChtX3JlY3QpOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGlkZW50aXR5TWF0cml4KS5tdWx0aXBs
eShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoMCwgMCwgMSwgMSks
IHRhcmdldFJlY3QpKTsKKyAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclBy
b2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CisKKyAgICAvLyBUYWtl
biBmcm9tIFRleHR1cmVNYXBwZXJHTC4KKyAgICBjb25zdCBmbG9hdCBuZWFyVmFsdWUgPSA5OTk5
OTk5OworICAgIGNvbnN0IGZsb2F0IGZhclZhbHVlID0gLTk5OTk5OworCisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KDIuMCAv
IGZsb2F0KG1fcmVjdC53aWR0aCgpKSwgMCwgMCwgMCwKKyAgICAgICAgMCwgKC0yLjApIC8gZmxv
YXQobV9yZWN0LmhlaWdodCgpKSwgMCwgMCwKKyAgICAgICAgMCwgMCwgLTIuZiAvIChmYXJWYWx1
ZSAtIG5lYXJWYWx1ZSksIDAsCisgICAgICAgIC0xLCAxLCAtKGZhclZhbHVlICsgbmVhclZhbHVl
KSAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSksIDEpOworCisgICAgbV9zaGFkZXJQcm9ncmFtLT5z
ZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgcHJv
amVjdGlvbk1hdHJpeCk7Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjppbml0aWFsaXpl
U2hhZGVyUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX2NvbnRleHQzRCkKKyAgICAgICAgbV9jb250
ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpOwor
CisgICAgdmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQgPSBtX2NvbnRleHQzRC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKworICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6VGV4dHVyZTsKKyAgICBtX3NoYWRlclByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dDNELCBvcHRpb25zKTsKKworICAgIDo6
Z2xVc2VQcm9ncmFtKG1fc2hhZGVyUHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworICAgIDo6Z2xVbmlm
b3JtMWkobV9zaGFkZXJQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFS
RVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX05FQVJFU1QpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmbGlwVHJhbnNmb3JtOworICAgIGZsaXBU
cmFuc2Zvcm0uZmxpcFkoKTsKKyAgICBmbGlwVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLCAtMSk7Cisg
ICAgbV9zaGFkZXJQcm9ncmFtLT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT50ZXh0dXJlU3Bh
Y2VNYXRyaXhMb2NhdGlvbigpLCBmbGlwVHJhbnNmb3JtKTsKKworICAgIDo6Z2xVbmlmb3JtMWYo
bV9zaGFkZXJQcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgMS4wKTsKKworICAgIGlmICghbV92
Ym8pIHsKKyAgICAgICAgOjpnbEdlbkJ1ZmZlcnMoMSwgJm1fdmJvKTsKKyAgICAgICAgOjpnbEJp
bmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Zibyk7CisgICAgICAgIDo6Z2xCdWZmZXJEYXRh
KEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKEdDM0RmbG9hdCkgKiA4LCB2ZXJ0aWNlcywgR0xfU1RB
VElDX0RSQVcpOworICAgIH0KKworICAgIC8vIENyZWF0ZSBhbmQgc2V0LXVwIHZlcnRleCBhcnJh
eSBvYmplY3QuCisgICAgaWYgKHZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKSB7CisgICAgICAg
IG1fdmVydGV4SGFuZGxlID0gbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+Y3JlYXRlVmVy
dGV4QXJyYXlPRVMoKTsKKworICAgICAgICBpZiAobV92ZXJ0ZXhIYW5kbGUpIHsKKyAgICAgICAg
ICAgIG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUyhtX3Zl
cnRleEhhbmRsZSk7CisgICAgICAgICAgICBiaW5kQXJyYXlCdWZmZXIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Cit9CisKK1Bhc3NPd25Q
dHI8R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50PiBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmNy
ZWF0ZVRyYW5zcG9ydFN1cmZhY2VDbGllbnQoY29uc3QgUGxhdGZvcm1CdWZmZXJIYW5kbGUgaGFu
ZGxlKQoreworI2lmIFVTRShHTFgpCisgICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVu
dD4gY2xpZW50ID0gYWRvcHRQdHIobmV3IEdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoaGFuZGxl
KSk7CisKKyAgICBpZiAoIWNsaWVudC0+dGV4dHVyZSgpKSB7CisgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIENyZWF0ZSBUcmFuc3BvcnQgU3VyZmFjZSBjbGllbnQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBjbGllbnQucmVsZWFzZSgpOworCisj
ZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKKworR0xUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50OjpHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoY29uc3QgUGxhdGZvcm1CdWZmZXJI
YW5kbGUpCisgICAgOiBtX3RleHR1cmUoMCkKKyAgICAsIG1faGFzQWxwaGEodHJ1ZSkKK3sKK30K
KworR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50Ojp+R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KCkK
K3sKK30KKwordm9pZCBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmRlc3Ryb3koKQoreworICAg
IGlmIChtX3RleHR1cmUpIHsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgbV90
ZXh0dXJlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50Ojpw
cmVwYXJlVGV4dHVyZSgpCit7Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50Ojpj
cmVhdGVUZXh0dXJlKCkKK3sKKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Cisg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFS
RVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX05FQVJFU1QpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURH
RSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2M2ZDE2Ci0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9y
dFN1cmZhY2UuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEdMVHJhbnNwb3J0U3VyZmFjZV9oCisjZGVmaW5lIEdMVHJhbnNwb3J0U3VyZmFjZV9oCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJHTFBsYXRmb3JtU3Vy
ZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW07CisKK2NsYXNzIEdMVHJhbnNw
b3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CisKK3B1YmxpYzoKKyAgICAv
LyBDcmVhdGVzIGEgR0wgc3VyZmFjZSB3aG9zZSByZXN1bHRzIGNhbiBiZSB0cmFuc3BvcnRlZAor
ICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBkaXNwbGF5LgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gY3JlYXRlVHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRT
aXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6RGVmYXVsdCk7Cisg
ICAgdmlydHVhbCB+R0xUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCkgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBHTFRyYW5zcG9ydFN1cmZhY2UoY29u
c3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zZm9y
bWF0aW9uTWF0cml4KCk7CisgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoKSBjb25zdDsKKyAgICB2
b2lkIGluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IHVpbnQz
Ml90KTsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBtX3NoYWRlclByb2dyYW07CisgICAg
UGxhdGZvcm0zRE9iamVjdCBtX3ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4SGFu
ZGxlOworICAgIEdMdWludCBtX2JvdW5kVGV4dHVyZTsKK307CisKK2NsYXNzIEdMVHJhbnNwb3J0
U3VyZmFjZUNsaWVudCB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFRyYW5z
cG9ydFN1cmZhY2VDbGllbnQ+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2VDbGllbnQoY29uc3QgUGxh
dGZvcm1CdWZmZXJIYW5kbGUpOworICAgIHZpcnR1YWwgfkdMVHJhbnNwb3J0U3VyZmFjZUNsaWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCk7CisgICAgR0x1aW50IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmU7IH0KKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0IFBsYXRmb3Jt
QnVmZmVySGFuZGxlKTsKKyAgICB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKKyAgICBHTHVpbnQgbV90
ZXh0dXJlOworICAgIGJvb2wgbV9oYXNBbHBoYTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vm
bC9HcmFwaGljc1N1cmZhY2VDb21tb24uY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VmbC9HcmFwaGljc1N1cmZhY2VDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MmFmNDAKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dyYXBoaWNzU3VyZmFjZUNvbW1v
bi5jcHAKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorCisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKyNpbmNsdWRlICJH
TFRyYW5zcG9ydFN1cmZhY2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBH
cmFwaGljc1N1cmZhY2VQcml2YXRlIHsKKworICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKQor
ICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKFBsYXRmb3JtQnVmZmVy
SGFuZGxlIHdpbklkLCBjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZhY2U6OkZsYWdz
KQorICAgICAgICA6IG1fcmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIHNpemUpCisgICAgICAgICwg
bV9zaXplKHNpemUpCisgICAgICAgICwgbV9zaGFyZWRIYW5kbGUod2luSWQpCisgICAgeworICAg
IH0KKworICAgIH5HcmFwaGljc1N1cmZhY2VQcml2YXRlKCkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAg
IG1fY2xpZW50LT5kZXN0cm95KCk7CisKKyAgICAgICAgaWYgKG1fc2hhcmVkQ29udGV4dCAmJiBt
X3NoYXJlZENvbnRleHQtPmhhbmRsZSgpICYmIG1fc2hhcmVkU3VyZmFjZSkKKyAgICAgICAgICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgICAgIGlmIChtX3NoYXJlZFN1cmZhY2UpCisg
ICAgICAgICAgICBtX3NoYXJlZFN1cmZhY2UtPmRlc3Ryb3koKTsKKworICAgICAgICBpZiAobV9z
aGFyZWRDb250ZXh0KSB7CisgICAgICAgICAgICBtX3NoYXJlZENvbnRleHQtPmRlc3Ryb3koKTsK
KyAgICAgICAgICAgIG1fc2hhcmVkQ29udGV4dC0+cmVsZWFzZUN1cnJlbnQoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgaW5pdGlhbGl6ZVRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBmbGFncywgY29uc3QgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBzaGFyZUNvbnRleHQpCisgICAgeworICAgICAgICBHTFBsYXRmb3Jt
U3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgc2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBs
YXRmb3JtU3VyZmFjZTo6RGVmYXVsdDsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKworICAgICAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQWxwaGEpCisgICAgICAgICAg
ICBzaGFyZWRTdXJmYWNlQXR0cmlidXRlcyA9IEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxw
aGE7CisKKyAgICAgICAgbV9zaGFyZWRTdXJmYWNlID0gR0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVh
dGVUcmFuc3BvcnRTdXJmYWNlKHNpemUsIHNoYXJlZFN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgaWYgKCFtX3NoYXJlZFN1cmZhY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgbV9zaGFyZWRDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQo
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbik7CisgICAgICAgIGlmICghbV9zaGFy
ZWRDb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghbV9z
aGFyZWRDb250ZXh0LT5pbml0aWFsaXplKG1fc2hhcmVkU3VyZmFjZS5nZXQoKSwgc3RhdGljX2Nh
c3Q8UGxhdGZvcm1Db250ZXh0PihzaGFyZUNvbnRleHQpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
bWFrZUNvbnRleHRDdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NoYXJl
ZENvbnRleHQtPm1ha2VDdXJyZW50KG1fc2hhcmVkU3VyZmFjZS5nZXQoKSk7CisgICAgfQorCisg
ICAgdm9pZCBjb3B5RnJvbVRleHR1cmUoR0x1aW50IHRleHR1cmVJZCkKKyAgICB7CisgICAgICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgbV9zaGFyZWRTdXJmYWNlLT51cGRhdGVDb250ZW50cyh0ZXh0dXJlSWQpOworICAgIH0KKwor
ICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIGhhbmRsZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9zaGFyZWRTdXJmYWNlLT5oYW5kbGUoKTsKKyAgICB9CisKKyAgICAvLyBDbGllbnQK
KyAgICB2b2lkIHVwZGF0ZUNsaWVudEJ1ZmZlcigpCisgICAgeworICAgICAgICBpZiAoIW1fY2xp
ZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50LT5wcmVwYXJlVGV4
dHVyZSgpOworICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBjb25z
dCB7IHJldHVybiBtX2ZsYWdzOyB9CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisKKyAgICBHTHVpbnQgdGV4dHVyZUlkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAgICAgICBjb25zdF9jYXN0PEdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGUqPih0aGlzKS0+aW5pdGlhbGl6ZUNsaWVudCgpOworCisgICAgICAgIHJldHVy
biBtX2NsaWVudCA/IG1fY2xpZW50LT50ZXh0dXJlKCkgOiAwOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoKQorICAgIHsKKyAgICAgICAgbV9jbGllbnQgPSBH
TFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2VDbGllbnQobV9z
aGFyZWRIYW5kbGUpOworCisgICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHBhc3Nl
ZCBmcm9tIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgaWYgKG1fY2xpZW50LT5oYXNBbHBoYSgp
KQorICAgICAgICAgICAgbV9mbGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kOwor
ICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9mbGFnczsKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworICAgIEludFNpemUgbV9zaXplOworICAgIFBsYXRmb3JtQnVmZmVySGFuZGxl
IG1fc2hhcmVkSGFuZGxlOworICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+IG1f
Y2xpZW50OworICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9zaGFyZWRDb250ZXh0Owor
ICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IG1fc2hhcmVkU3VyZmFjZTsKK307CisKK0dy
YXBoaWNzU3VyZmFjZVRva2VuIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBvcnQoKQorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmhhbmRsZSgpOworfQorCit1aW50MzJfdCBHcmFwaGljc1N1
cmZhY2U6OnBsYXRmb3JtR2V0VGV4dHVyZUlEKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT50
ZXh0dXJlSWQoKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xU
ZXh0dXJlKHVpbnQzMl90IC8qdGFyZ2V0Ki8sIHVpbnQzMl90IC8qaWQqLywgY29uc3QgSW50UmVj
dCYgLyp0YXJnZXRSZWN0Ki8sIGNvbnN0IEludFBvaW50JiAvKm9mZnNldCovKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlG
cm9tVGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmKQoreworICAgIGlm
ICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUtPmNvcHlGcm9t
VGV4dHVyZSh0ZXh0dXJlSWQpOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Q
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAgdWludDMyX3QgdGV4dHVyZSA9IHBsYXRmb3JtR2V0
VGV4dHVyZUlEKCk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm47CisKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBh
ZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVj
dChtX3ByaXZhdGUtPnJlY3QoKSwgdGFyZ2V0UmVjdCkpOworICAgIHN0YXRpY19jYXN0PFRleHR1
cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBtX3ByaXZh
dGUtPmZsYWdzKCksIG1fcHJpdmF0ZS0+c2l6ZSgpLCBtX3ByaXZhdGUtPnJlY3QoKSwgYWRqdXN0
ZWRUcmFuc2Zvcm0sIG9wYWNpdHkpOworfQorCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1aW50MzJf
dCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMoKQoreworICAgIG1fcHJpdmF0
ZS0+dXBkYXRlQ2xpZW50QnVmZmVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgR3Jh
cGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPnNpemUoKTsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIGNv
bnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qgc2hhcmVDb250ZXh0KQoreworICAgIC8vIEdy
YXBoaWNzU3VyZmFjZSBkb2Vzbid0IHlldCBzdXBwb3J0IGNvcHlUb1RleHR1cmUgb3Igc2luZ2xl
YnVmZmVyZWQgc3VyZmFjZS4KKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUg
fHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBz
dXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOworICAg
IHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2YXRlKCk7CisKKyAg
ICBpZiAoc3VyZmFjZS0+bV9wcml2YXRlLT5pbml0aWFsaXplVHJhbnNwb3J0U3VyZmFjZShzaXpl
LCBmbGFncywgc2hhcmVDb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2U7CisKKyAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7Cit9CisKK1Bhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNvbnN0IEludFNp
emUmIHNpemUsIEZsYWdzIGZsYWdzLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4p
Cit7CisgICAgLy8gR3JhcGhpY3NTdXJmYWNlIGRvZXNuJ3QgeWV0IHN1cHBvcnQgY29weVRvVGV4
dHVyZSBvciBzaW5nbGVidWZmZXJlZCBzdXJmYWNlLgorICAgIGlmIChmbGFncyAmIFN1cHBvcnRz
Q29weVRvVGV4dHVyZSB8fCBmbGFncyAmIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQpCisgICAgICAg
IHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIFJlZlB0cjxHcmFw
aGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUs
IGZsYWdzKSk7CisgICAgc3VyZmFjZS0+bV9wcml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVBy
aXZhdGUodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUsIHNpemUsIGZsYWdzKTsKKyAgICByZXR1cm4g
c3VyZmFjZTsKK30KKworY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2soY29uc3Qg
SW50UmVjdCYsIGludCogLypvdXRwdXRTdHJpZGUqLywgTG9ja09wdGlvbnMpCit7CisgICAgLy8g
R3JhcGhpY3NTdXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQgZm9yIFdlYkdMLCB3
aGljaCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20uCisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygpCit7CisgICAg
Ly8gR3JhcGhpY3NTdXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQgZm9yIFdlYkdM
LCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20uCit9CisKK3Zv
aWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGlmICghbV9wcml2
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUtPmRlc3Ryb3koKTsKKworICAg
IGRlbGV0ZSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gMDsKK30KKworUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBhaW50KGNvbnN0
IEludFNpemUmLCBjaGFyKiwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3Jl
YXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKaW5k
ZXggODliZjUxNi4uZGExZDE3YyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0zMCw4ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlKGF0dHJpYnV0ZXMpCitFR0xXaW5kb3dUcmFuc3BvcnRT
dXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1
cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6
ZSwgYXR0cmlidXRlcykKIHsKICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVH
TENvbmZpZ1NlbGVjdG9yKGF0dHJpYnV0ZXMsIE5hdGl2ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXko
KSkpOwogICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29uZmlnU2VsZWN0b3ItPmRpc3BsYXkoKTsK
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xTdXJmYWNlLmgKaW5kZXggNTRiZDI0Yy4uMDVlOGFlNiAxMDA2NDQKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgK
QEAgLTQzLDcgKzQzLDcgQEAgdHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsKIGNsYXNz
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJmYWNlIHsK
IAogcHVibGljOgotICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0
ZXMpOworICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZh
Y2VBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7
CiAgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0
KSBPVkVSUklERTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IGMwZTU2MzYuLmZmZGExZmEgMTAw
NjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
U3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMzAsMTAgKzMwLDM5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1tdID0geyBHTFhfUEJV
RkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CitzdGF0aWMgUEZOR0xY
QklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmluZFRleEltYWdlRVhUID0gMDsKK3N0YXRpYyBQRk5H
TFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSAwOwogCi1H
TFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMpCi0gICAgOiBHTFRyYW5zcG9ydFN1cmZhY2UoYXR0cmlidXRlcykKK3N0YXRp
YyBib29sIHJlc29sdmVHTE1ldGhvZHMoKQoreworICAgIHN0YXRpYyBib29sIHJlc29sdmVkID0g
ZmFsc2U7CisgICAgaWYgKHJlc29sdmVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHBH
bFhCaW5kVGV4SW1hZ2VFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMWEJJTkRURVhJTUFHRUVY
VFBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KCJnbFhCaW5kVGV4SW1hZ2VFWFQiKSkpOworICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMWFJFTEVBU0VURVhJTUFHRUVYVFBST0M+KGdsWEdldFByb2NB
ZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbFhSZWxlYXNlVGV4SW1h
Z2VFWFQiKSkpOworCisgICAgcmVzb2x2ZWQgPSBwR2xYQmluZFRleEltYWdlRVhUICYmIHBHbFhS
ZWxlYXNlVGV4SW1hZ2VFWFQ7CisKKyAgICByZXR1cm4gcmVzb2x2ZWQ7Cit9CisKK3N0YXRpYyBp
bnQgZ2x4QXR0cmlidXRlc1tdID0geworICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9FWFQsCisgICAg
R0xYX1RFWFRVUkVfRk9STUFUX1JHQkFfRVhULAorICAgIEdMWF9URVhUVVJFX1RBUkdFVF9FWFQs
CisgICAgR0xYX1RFWFRVUkVfMkRfRVhULAorICAgIDAKK307CisKK3N0YXRpYyBib29sIGlzTWVz
YUdMWCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNNZXNhID0gISFzdHJzdHIoZ2xYR2V0Q2xpZW50
U3RyaW5nKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBHTFhfVkVORE9SKSwgIk1lc2EiKTsK
KyAgICByZXR1cm4gaXNNZXNhOworfQorCitHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3Bv
cnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMpCisgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykKIHsKICAgICBt
X3NoYXJlZERpc3BsYXkgPSBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKICAgICBhdHRyaWJ1
dGVzIHw9IEdMUGxhdGZvcm1TdXJmYWNlOjpEb3VibGVCdWZmZXJlZDsKQEAgLTQ1LDcgKzc0LDcg
QEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgWDExSGVscGVy
OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCAqdmlzSW5mby5nZXQoKSk7
CisgICAgWDExSGVscGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCAq
dmlzSW5mby5nZXQoKSwgc2l6ZSk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAg
ICAgIGRlc3Ryb3koKTsKQEAgLTE2Niw2ICsxOTUsOTIgQEAgdm9pZCBHTFhPZmZTY3JlZW5TdXJm
YWNlOjpmcmVlUmVzb3VyY2VzKCkKICAgICBtX2RyYXdhYmxlID0gMDsKIH0KIAorR0xYVHJhbnNw
b3J0U3VyZmFjZUNsaWVudDo6R0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25zdCBQbGF0Zm9y
bUJ1ZmZlckhhbmRsZSBoYW5kbGUpCisgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoaGFu
ZGxlKQoreworICAgIGlmICghcmVzb2x2ZUdMTWV0aG9kcygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYMTFI
ZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRp
c3BsYXksIGhhbmRsZSwgJmF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFbnN1cmUg
dGhhdCB0aGUgd2luZG93IGlzIG1hcHBlZC4KKyAgICBpZiAoYXR0ci5tYXBfc3RhdGUgPT0gSXNV
bm1hcHBlZCB8fCBhdHRyLm1hcF9zdGF0ZSA9PSBJc1Vudmlld2FibGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciBoYW5kbGVyOworCisg
ICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRp
c3BsYXksIGF0dHIudmlzdWFsKTsKKyAgICBib29sIGhhc0FscGhhID0gKGZvcm1hdC0+dHlwZSA9
PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spOworICAgIG1feFBp
eG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKGRpc3BsYXksIGhhbmRsZSk7CisKKyAg
ICBpZiAoIW1feFBpeG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2x4QXR0cmlidXRlc1sx
XSA9IChmb3JtYXQtPmRlcHRoID09IDMyICYmIGhhc0FscGhhKSA/IEdMWF9URVhUVVJFX0ZPUk1B
VF9SR0JBX0VYVCA6IEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JfRVhUOworCisgICAgR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIHNoYXJlZFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQ
bGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQ7CisKKyAgICBpZiAoaGFzQWxwaGEpIHsKKyAgICAgICAg
c2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
OworICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICB9CisKKyAgICBHTFhDb25maWdTZWxl
Y3RvciBjb25maWdTZWxlY3RvcihzaGFyZWRTdXJmYWNlQXR0cmlidXRlcyk7CisKKyAgICBtX2ds
eFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChkaXNwbGF5LCBjb25maWdTZWxlY3Rvci5zdXJmYWNl
Q2xpZW50Q29uZmlnKGZvcm1hdC0+ZGVwdGgsIFhWaXN1YWxJREZyb21WaXN1YWwoYXR0ci52aXN1
YWwpKSwgbV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsKKworICAgIGlmICghbV9nbHhQaXhtYXAg
fHwgIWhhbmRsZXIuaXNWYWxpZE9wZXJhdGlvbigpKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbFhXYWl0
WCgpOworICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQoZGlzcGxheSwgbV9nbHhQaXhtYXAsIEdMWF9G
Uk9OVF9FWFQsIDApOworfQorCitHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50Ojp+R0xYVHJhbnNw
b3J0U3VyZmFjZUNsaWVudCgpCit7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVu
dDo6ZGVzdHJveSgpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IFgxMUhlbHBlcjo6bmF0aXZl
RGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fdGV4dHVyZSkgeworICAgICAgICBwR2xYUmVsZWFzZVRleEltYWdlRVhUKGRpc3BsYXksIG1f
Z2x4UGl4bWFwLCBHTFhfRlJPTlRfRVhUKTsKKyAgICAgICAgR0xUcmFuc3BvcnRTdXJmYWNlQ2xp
ZW50OjpkZXN0cm95KCk7CisgICAgfQorCisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAg
IGdsWERlc3Ryb3lQaXhtYXAoZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAgICBtX2dseFBp
eG1hcCA9IDA7CisgICAgICAgIGdsWFdhaXRHTCgpOworICAgIH0KKworICAgIGlmIChtX3hQaXht
YXApIHsKKyAgICAgICAgWDExSGVscGVyOjpkZXN0cm95UGl4bWFwKG1feFBpeG1hcCk7CisgICAg
ICAgIG1feFBpeG1hcCA9IDA7CisgICAgfQorfQorCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQ6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBpZiAoaXNNZXNhR0xYKCkgJiYgbV90ZXh0
dXJlKSB7CisgICAgICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkoKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwor
ICAgICAgICAvLyBNZXNhIGRvZXNuJ3QgcmUtYmluZCB0ZXh0dXJlIHRvIHRoZSBmcm9udCBidWZm
ZXIgb24gZ2xYU3dhcEJ1ZmVyCisgICAgICAgIC8vIE1hbnVhbGx5IHJlbGVhc2UgcHJldmlvdXMg
bG9jayBhbmQgcmViaW5kIHRleHR1cmUgdG8gc3VyZmFjZSB0byBlbnN1cmUgZnJhbWUgdXBkYXRl
cy4KKyAgICAgICAgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVChkaXNwbGF5LCBtX2dseFBpeG1hcCwg
R0xYX0ZST05UX0VYVCk7CisgICAgICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQoZGlzcGxheSwgbV9n
bHhQaXhtYXAsIEdMWF9GUk9OVF9FWFQsIDApOworICAgIH0KK30KKwogfQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
U3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhTdXJmYWNlLmgKaW5kZXggZTg2MTg5MS4uNWU0ZWZjYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKQEAg
LTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xYVHJhbnNwb3J0U3Vy
ZmFjZSA6IHB1YmxpYyBHTFRyYW5zcG9ydFN1cmZhY2UgewogCiBwdWJsaWM6Ci0gICAgR0xYVHJh
bnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7CisgICAgR0xYVHJhbnNwb3J0U3VyZmFj
ZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMpOwogICAgIHZpcnR1YWwgfkdMWFRy
YW5zcG9ydFN1cmZhY2UoKTsKICAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25m
aWd1cmF0aW9uKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgT1ZF
UlJJREU7CkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpIE9WRVJSSURFOwogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIE93
blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAKQEAgLTY2LDYg
KzY1LDE5IEBAIHByaXZhdGU6CiAgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwogfTsKIAorY2xh
c3MgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudCA6IHB1YmxpYyBHTFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQgeworCitwdWJsaWM6CisgICAgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25zdCBQ
bGF0Zm9ybUJ1ZmZlckhhbmRsZSk7CisgICAgdmlydHVhbCB+R0xYVHJhbnNwb3J0U3VyZmFjZUNs
aWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUGl4bWFw
IG1feFBpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Cit9OworCiB9CiAKICNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193571</attachid>
            <date>2013-03-18 08:40:51 -0700</date>
            <delta_ts>2013-03-21 06:18:27 -0700</delta_ts>
            <desc>patchv3</desc>
            <filename>reviewchanges.patch</filename>
            <type>text/plain</type>
            <size>54218</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDk2OGZkODUuLmFkOTQ0NTUgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAx
My0wMy0xOCAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBhIGNvbW1vbiBHcmFwaGljc1N1cmZh
Y2UgSW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTE3NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFdlYkdMIHRlc3RzLgorCisgICAgICAgIFRo
aXMgaXMgaW4gcHJlcGFyYXRpb24gdG8gYWRkIHRyYW5zcG9ydCBzdXJmYWNlIHN1cHBvcnQgZm9y
IEdMRVMyLgorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IGVhc3kgdG8gc2hhcmUgdGhlIGNv
cmUgbG9naWMgb2YgdXNpbmcKKyAgICAgICAgVHJhbnNwb3J0IFN1cmZhY2UgYW5kIGNsaWVudCBv
biBHTFggYW5kIEdMRVMyIGJhY2tlbmRzIHdpdGhvdXQKKyAgICAgICAgYW55IGNvZGUgZHVwbGlj
YXRpb24uCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
ZGlkUmVzaXplQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAgIChHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUpOgorCisgICAgICAgIFRyYW5zcG9ydFN1cmZhY2UgcmVsYXRlZCBjb2RlIGlz
IG1vdmVkIHRvIEdyYXBoaWNzU3VyZmFjZUNvbW1vbi4KKyAgICAgICAgQXMgR3JhcGhpY3NTdXJm
YWNlIGlzIGRlbGV0ZWQgb24gcmVzaXplLCBhZGRlZCBsb2dpYyB0byBlbnN1cmUgdGhhdAorICAg
ICAgICBjdXJyZW50IGJ1ZmZlciBpcyBub3QgZGVsZXRlZCBiZWZvcmUgaGF2aW5nIHRoZSBzaGFy
ZWQgYnVmZmVyCisgICAgICAgIHdpdGggY29ycmVjdCBzaXplLiBUaGlzIHdvdWxkIGF2b2lkIGFu
eSBmbGFzaGluZyBkdXJpbmcgcmVzaXplLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3Vy
ZmFjZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNw
b3J0U3VyZmFjZTo6R0xUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJh
bnNwb3J0U3VyZmFjZTo6fkdMVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFRyYW5zcG9ydFN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFu
c3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3Vy
ZmFjZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1cmZhY2U6OmJpbmRB
cnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1cmZhY2U6OnVwZGF0
ZVRyYW5zZm9ybWF0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3Vy
ZmFjZTo6aW5pdGlhbGl6ZVNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFu
c3BvcnRTdXJmYWNlQ2xpZW50OjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6R0xUcmFuc3BvcnRTdXJmYWNl
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6fkdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9ydFN1
cmZhY2VDbGllbnQ6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R0xUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZhY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3VyZmFjZS5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAg
ICAgICAoR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMVHJh
bnNwb3J0U3VyZmFjZUNsaWVudDo6dGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFRyYW5z
cG9ydFN1cmZhY2VDbGllbnQ6Omhhc0FscGhhKToKKworICAgICAgICBNb3ZlZCBUcmFuc3BvcnRT
dXJmYWNlIHRvIEVGTCBmb2xkZXIgYXMgdGhpcyBpcyBiZWluZyB1c2VkIGJ5IEVGTCBwb3J0IG9u
bHkuCisgICAgICAgIEFkZGVkIGEgYmFzZSBjbGFzcyBmb3IgVHJhbnNwb3J0U3VyZmFjZUNsaWVu
dC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HcmFwaGljc1N1
cmZhY2VDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQ
cml2YXRlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6aW5pdGlhbGl6ZVRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmNvcHlGcm9t
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpoYW5k
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6dXBkYXRlQ2xp
ZW50QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmZs
YWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6c2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjp0ZXh0dXJlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6aW5pdGlhbGl6ZUNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weUZyb21UZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1QYWludFRvVGV4
dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
RnJvbnRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bVN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtTG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlUmVhZE9ubHlJbWFnZSk6CisKKyAgICAgICAg
R3JhcGhpY3NTdXJmYWNlIGltcGxlbWVudGF0aW9uIHRvIGJlIHNoYXJlZCBieSBib3RoIEdMWCBh
bmQgR0xFUzIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
U3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
OjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAgICAoRUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1
cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZl
R0xNZXRob2RzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTWVzYUdMWCk6CisgICAgICAgIChXZWJD
b3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OkdMWFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6fkdM
WFRyYW5zcG9ydFN1cmZhY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZUNsaWVudDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRT
dXJmYWNlQ2xpZW50OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDoKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1cmZh
Y2UpOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4K
KwogMjAxMy0wMy0xOCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIERldGFjaCBvdmVybGF5cyBmcm9tIHBhZ2Ugd2hlbiBjb21wb3NpdG9y
IGlzIGRldGFjaGVkCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2Ug
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTM1ZmJmZS4uZjY3ZDlhOCAx
MDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBTb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMjk3LDYgKzI5Nyw3IEBAIGlmIChXVEZfVVNFXzNE
X0dSQVBISUNTKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMiCisgICAgICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwiCiAgICAgICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgiCiAgICAgICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAgICAgKQpAQCAtMzE2LDgg
KzMxNyw5IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dyYXBoaWNzU3VyZmFjZUNvbW1vbi5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
LmNwcApAQCAtMzMzLDcgKzMzNSw2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAogICAgICAgICApCiAg
ICAgZW5kaWYgKCkKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IGVhNzI2OWIu
LjY5NjEzMDMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKQEAgLTY4LDM3ICs2OCwx
MyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAg
IGlmICghbV9vZmZTY3JlZW5Db250ZXh0LT5pbml0aWFsaXplKG1fb2ZmU2NyZWVuU3VyZmFjZS5n
ZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKICAgICAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBtX2NvbnRleHQtPnZhbGlkYXRlQXR0cmlidXRlcygpOwot
ICAgICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgc2hhcmVkU3VyZmFj
ZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6RGVmYXVsdDsKLSAgICAgICAgaWYgKG1f
Y29udGV4dC0+bV9hdHRycy5hbHBoYSkKLSAgICAgICAgICAgIHNoYXJlZFN1cmZhY2VBdHRyaWJ1
dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYTsKLQotICAgICAgICBtX29mZlNj
cmVlbkNvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7Ci0gICAgICAgIG1fc2hhcmVkU3VyZmFjZSA9
IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKHNoYXJlZFN1cmZhY2VB
dHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKCFtX3NoYXJlZFN1cmZhY2UpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9zaGFyZWRDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZUNvbnRleHQobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlKTsKLSAgICAgICAgaWYg
KCFtX3NoYXJlZENvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKCFtX3NoYXJlZENvbnRleHQtPmluaXRpYWxpemUobV9zaGFyZWRTdXJmYWNlLmdldCgpLCBt
X29mZlNjcmVlbkNvbnRleHQtPmhhbmRsZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoIW1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fc3VyZmFjZUhhbmRsZSA9IEdyYXBoaWNzU3VyZmFj
ZVRva2VuKG1fc2hhcmVkU3VyZmFjZS0+aGFuZGxlKCkpOworI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorICAgICAgICBtX3N1cmZhY2VPcGVyYXRpb24gPSBDcmVhdGVTdXJmYWNlOwogI2VuZGlm
CiAgICAgfQogCi0gICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNCwxNiArOTAsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbGVhc2VSZXNvdXJjZXMoKQogCiAgICAgLy8g
UmVsZWFzZSB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBkcmF3YWJsZSBvbmx5IGFmdGVyIGRlc3Ry
b3lpbmcgYW55IGFzc29jaWF0ZWQgZ2wgcmVzb3VyY2VzLgogI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQotICAgIGlmIChtX3NoYXJlZENvbnRleHQgJiYgbV9zaGFyZWRDb250ZXh0LT5oYW5kbGUo
KSAmJiBtX3NoYXJlZFN1cmZhY2UpCi0gICAgICAgIG1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgp
OworICAgIGlmIChtX3ByZXZpb3VzR3JhcGhpY3NTdXJmYWNlKQorICAgICAgICBtX3ByZXZpb3Vz
R3JhcGhpY3NTdXJmYWNlID0gbnVsbHB0cjsKIAotICAgIGlmIChtX3NoYXJlZFN1cmZhY2UpCi0g
ICAgICAgIG1fc2hhcmVkU3VyZmFjZS0+ZGVzdHJveSgpOworICAgIGlmIChtX2dyYXBoaWNzU3Vy
ZmFjZSkKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UgPSBudWxscHRyOwogCi0gICAgaWYgKG1f
c2hhcmVkQ29udGV4dCkgewotICAgICAgICBtX3NoYXJlZENvbnRleHQtPmRlc3Ryb3koKTsKLSAg
ICAgICAgbV9zaGFyZWRDb250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwotICAgIH0KKyAgICBtX3N1
cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbigpOwogI2VuZGlmCiAgICAgaWYgKG1f
b2ZmU2NyZWVuU3VyZmFjZSkKICAgICAgICAgbV9vZmZTY3JlZW5TdXJmYWNlLT5kZXN0cm95KCk7
CkBAIC0xOTEsNiArMTY0LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnByZXBh
cmVCdWZmZXIoKSBjb25zdAogCiAgICAgICAgIGlmIChlbmFibGVTY2lzc29yVGVzdCkKICAgICAg
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OworCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2NvbnRleHQt
Pm1fc3RhdGUuYm91bmRGQk8pOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjA0LDM4
ICsxNzksODAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFIKICNlbmRpZgogCiAjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZVNoYXJl
ZENvbnRleHRDdXJyZW50KCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc1N1cmZhY2UoKQogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fc2hhcmVkQ29u
dGV4dC0+bWFrZUN1cnJlbnQobV9zaGFyZWRTdXJmYWNlLmdldCgpKTsKKyAgICBzdGF0aWMgUGVu
ZGluZ1N1cmZhY2VPcGVyYXRpb24gcGVuZGluZ09wZXJhdGlvbiA9IERlbGV0ZVByZXZpb3VzU3Vy
ZmFjZSB8IFJlc2l6ZSB8IENyZWF0ZVN1cmZhY2U7CisgICAgaWYgKCEobV9zdXJmYWNlT3BlcmF0
aW9uICYgcGVuZGluZ09wZXJhdGlvbikpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9z
aGFyZWRDb250ZXh0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFJlc3RvcmUgY29u
dGV4dAotICAgICAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrKQotICAgICAgICAgICAgbV9j
b250ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisgICAgaWYgKG1fc3VyZmFjZU9w
ZXJhdGlvbiAmIERlbGV0ZVByZXZpb3VzU3VyZmFjZSkgeworICAgICAgICBtX3ByZXZpb3VzR3Jh
cGhpY3NTdXJmYWNlID0gbnVsbHB0cjsKKyAgICAgICAgbV9zdXJmYWNlT3BlcmF0aW9uICY9IH5E
ZWxldGVQcmV2aW91c1N1cmZhY2U7CisgICAgfQogCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIShtX3N1cmZhY2VPcGVyYXRpb24gJiBwZW5kaW5nT3BlcmF0aW9uKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRG9uJ3QgcmVsZWFzZSBjdXJyZW50IGdyYXBoaWNzIHN1cmZhY2Ug
dW50aWwgd2UgaGF2ZSBwcmVwYXJlZCBzdXJmYWNlCisgICAgLy8gd2l0aCByZXF1ZXN0ZWQgc2l6
ZS4gVGhpcyBpcyB0byBhdm9pZCBmbGFzaGluZyBkdXJpbmcgcmVzaXplLgorICAgIGlmIChtX3N1
cmZhY2VPcGVyYXRpb24gJiBSZXNpemUpIHsKKyAgICAgICAgbV9wcmV2aW91c0dyYXBoaWNzU3Vy
ZmFjZSA9IG1fZ3JhcGhpY3NTdXJmYWNlOworICAgICAgICBtX3N1cmZhY2VPcGVyYXRpb24gJj0g
flJlc2l6ZTsKKyAgICAgICAgbV9zdXJmYWNlT3BlcmF0aW9uIHw9IERlbGV0ZVByZXZpb3VzU3Vy
ZmFjZTsKKyAgICAgICAgbV9zaXplID0gSW50U2l6ZShtX2NvbnRleHQtPm1fY3VycmVudFdpZHRo
LCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3Vy
ZmFjZU9wZXJhdGlvbiAmPSB+Q3JlYXRlU3VyZmFjZTsKKworICAgIG1fdGFyZ2V0UmVjdCA9IElu
dFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmIChtX2dyYXBoaWNzU3VyZmFjZSkgeworICAgICAgICAgICAgbV9ncmFwaGlj
c1N1cmZhY2UgPSBudWxscHRyOworICAgICAgICAgICAgbV9zdXJmYWNlSGFuZGxlID0gR3JhcGhp
Y3NTdXJmYWNlVG9rZW4oKTsKKyAgICAgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiBzdWNjZXNzOwor
ICAgIG1fb2ZmU2NyZWVuQ29udGV4dC0+cmVsZWFzZUN1cnJlbnQoKTsKKyAgICBHcmFwaGljc1N1
cmZhY2U6OkZsYWdzIGZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJn
ZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKworICAgIGlmIChtX2NvbnRl
eHQtPm1fYXR0cnMuYWxwaGEpCisgICAgICAgIGZsYWdzIHw9IEdyYXBoaWNzU3VyZmFjZTo6U3Vw
cG9ydHNBbHBoYTsKKworICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNlOjpj
cmVhdGUobV9zaXplLCBmbGFncywgbV9vZmZTY3JlZW5Db250ZXh0LT5oYW5kbGUoKSk7CisKKyAg
ICBpZiAoIW1fZ3JhcGhpY3NTdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2VIYW5kbGUgPSBHcmFw
aGljc1N1cmZhY2VUb2tlbigpOworICAgIGVsc2UKKyAgICAgICAgbV9zdXJmYWNlSGFuZGxlID0g
R3JhcGhpY3NTdXJmYWNlVG9rZW4obV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCkpOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpkaWRSZXNpemVDYW52YXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3Np
emUgPSBzaXplOworICAgIGlmIChtX3N1cmZhY2VPcGVyYXRpb24gJiBDcmVhdGVTdXJmYWNlKSB7
CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgIGNyZWF0ZUdyYXBoaWNzU3VyZmFjZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKG1ha2VTaGFyZWRDb250ZXh0Q3Vy
cmVudCgpKQotICAgICAgICBtX3NoYXJlZFN1cmZhY2UtPnNldEdlb21ldHJ5KEludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgIG1fc3VyZmFjZU9wZXJh
dGlvbiB8PSBSZXNpemU7CiB9CiAKIHVpbnQzMl90IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Y29weVRvR3JhcGhpY3NTdXJmYWNlKCkKIHsKLSAgICBpZiAobV9jb250ZXh0LT5tX2xheWVyQ29t
cG9zaXRlZCB8fCAhcHJlcGFyZUJ1ZmZlcigpIHx8ICFtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQo
KSkKKyAgICBjcmVhdGVHcmFwaGljc1N1cmZhY2UoKTsKKworICAgIGlmICghbV9ncmFwaGljc1N1
cmZhY2UgfHwgbV9jb250ZXh0LT5tX2xheWVyQ29tcG9zaXRlZCB8fCAhcHJlcGFyZUJ1ZmZlcigp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc2hhcmVkU3VyZmFjZS0+dXBkYXRlQ29udGVu
dHMobV9jb250ZXh0LT5tX3RleHR1cmUpOworICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5RnJv
bVRleHR1cmUobV9jb250ZXh0LT5tX3RleHR1cmUsIG1fdGFyZ2V0UmVjdCk7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsICBt
X2NvbnRleHQtPm1fc3RhdGUuYm91bmRGQk8pOwotICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1fZ3JhcGhpY3NTdXJmYWNlLT5mcm9udEJ1ZmZlcigpOwogfQogCiBHcmFwaGljc1N1cmZhY2VU
b2tlbiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyYXBoaWNzU3VyZmFjZVRva2VuKCkgY29u
c3QKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCmluZGV4IDhmMGViM2MuLjRhNzNmZTcgMTAwNjQ0
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaApAQCAtNTksMjUgKzU5LDM3IEBAIHB1YmxpYzoKICAgICBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpIGNvbnN0OwogCiBwcml2YXRlOgorI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIGVudW0gUGVuZGluZ09wZXJhdGlvbiB7CisgICAgICAgIERlZmF1
bHQgPSAweDAwLCAvLyBObyBQZW5kaW5nIE9wZXJhdGlvbi4KKyAgICAgICAgQ3JlYXRlU3VyZmFj
ZSA9IDB4MDEsCisgICAgICAgIFJlc2l6ZSA9IDB4MDIsCisgICAgICAgIERlbGV0ZVByZXZpb3Vz
U3VyZmFjZSA9IDB4MDQKKyAgICB9OworCisgICAgdHlwZWRlZiB1bnNpZ25lZCBQZW5kaW5nU3Vy
ZmFjZU9wZXJhdGlvbjsKKyNlbmRpZgorCiAgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdy
YXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyopOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwor
ICAgIHZvaWQgY3JlYXRlR3JhcGhpY3NTdXJmYWNlKCk7CiAgICAgYm9vbCBwcmVwYXJlQnVmZmVy
KCkgY29uc3Q7CiAgICAgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7Ci0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgYm9vbCBtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKSBjb25zdDsKLSNl
bmRpZgorCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBIb3N0V2luZG93
KiBtX2hvc3RXaW5kb3c7CiAgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBtX29mZlNjcmVl
bkNvbnRleHQ7CiAgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBtX29mZlNjcmVlblN1cmZh
Y2U7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250
ZXh0PiBtX3NoYXJlZENvbnRleHQ7Ci0gICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBtX3No
YXJlZFN1cmZhY2U7CiAgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gbV9zdXJmYWNlSGFuZGxlOwor
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOworICAgIFJlZlB0
cjxHcmFwaGljc1N1cmZhY2U+IG1fcHJldmlvdXNHcmFwaGljc1N1cmZhY2U7CisgICAgUGVuZGlu
Z1N1cmZhY2VPcGVyYXRpb24gbV9zdXJmYWNlT3BlcmF0aW9uIDogMzsKICNlbmRpZgogICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9z
dENhbGxiYWNrOwogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsK
ICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fdGFyZ2V0UmVjdDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTg1LDQgKzk3LDMgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjZW5kaWYKLQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCBiNTAzMjIxLi4wZGI4MGUwIDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmNwcApAQCAtNTQsMjAgKzU0LDYgQEAgUGFzc093blB0cjxHTFBs
YXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9mZlNjcmVlblN1cmZhY2Uo
U3VyZmFjZUEKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUGFzc093blB0cjxHTFBsYXRmb3Jt
U3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoU3VyZmFj
ZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLXsKLSNpZiBVU0UoR0xYKQotICAgIE93blB0cjxHTFBs
YXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNl
KGF0dHJpYnV0ZXMpKTsKLSNlbGlmIFVTRShFR0wpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1TdXJm
YWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoYXR0
cmlidXRlcykpOwotI2VuZGlmCi0KLSAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUo
KSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQotICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNl
KCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogR0xQbGF0Zm9ybVN1cmZhY2U6OkdMUGxh
dGZvcm1TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzKQogICAgIDogbV9zaGFyZWREaXNwbGF5KDAp
CiAgICAgLCBtX2RyYXdhYmxlKDApCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKaW5kZXggNWQ0MGM1Mi4uNTQz
YjY3NSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
TFBsYXRmb3JtU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApAQCAtNDMsMTcgKzQzLDEzIEBAIHB1YmxpYzoKICAg
ICBlbnVtIEF0dHJpYnV0ZXMgewogICAgICAgICBEZWZhdWx0ID0gMHgwMCwgLy8gTm8gQWxwaGEg
Y2hhbm5lbC4gT25seSBSLEcsQiB2YWx1ZXMgc2V0LgogICAgICAgICBTdXBwb3J0QWxwaGEgPSAw
eDAxLAotICAgICAgICBEb3VibGVCdWZmZXJlZCA9IDB4MDQKKyAgICAgICAgRG91YmxlQnVmZmVy
ZWQgPSAweDAyCiAgICAgfTsKIAotICAgIHR5cGVkZWYgaW50IFN1cmZhY2VBdHRyaWJ1dGVzOwor
ICAgIHR5cGVkZWYgdW5zaWduZWQgU3VyZmFjZUF0dHJpYnV0ZXM7CiAgICAgLy8gQ3JlYXRlcyBh
IEdMIHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4KICAgICBzdGF0aWMgUGFz
c093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gY3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShTdXJmYWNl
QXR0cmlidXRlcyA9IEdMUGxhdGZvcm1TdXJmYWNlOjpEZWZhdWx0KTsKIAotICAgIC8vIENyZWF0
ZXMgYSBHTCBzdXJmYWNlIHVzZWQgZm9yIG9mZnNjcmVlbiByZW5kZXJpbmcuIFRoZSByZXN1bHRz
IGNhbiBiZSB0cmFuc3BvcnRlZAotICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBkaXNwbGF5
LgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVhdGVUcmFuc3Bv
cnRTdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQp
OwotCiAgICAgdmlydHVhbCB+R0xQbGF0Zm9ybVN1cmZhY2UoKTsKIAogICAgIGNvbnN0IEludFJl
Y3QmIGdlb21ldHJ5KCkgY29uc3Q7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjM4YTliLi4wMDAwMDAwCi0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHTFRyYW5zcG9ydFN1cmZhY2UuaCIKLQotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
Y29uc3QgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07Ci1z
dGF0aWMgYm9vbCB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IGZhbHNlOwotCi1HTFRyYW5z
cG9ydFN1cmZhY2U6OkdMVHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQotICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoYXR0cmlidXRlcykKLSAgICAsIG1fdmJvKDAp
Ci0gICAgLCBtX3ZlcnRleEhhbmRsZSgwKQotewotfQotCi1HTFRyYW5zcG9ydFN1cmZhY2U6On5H
TFRyYW5zcG9ydFN1cmZhY2UoKQotewotfQotCi12b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6dXBk
YXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIW1fc2hhZGVy
UHJvZ3JhbSkKLSAgICAgICAgaW5pdGlhbGl6ZVNoYWRlclByb2dyYW0oKTsKLQotICAgIGRyYXco
dGV4dHVyZSk7Ci0gICAgc3dhcEJ1ZmZlcnMoKTsKLX0KLQotdm9pZCBHTFRyYW5zcG9ydFN1cmZh
Y2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCi17Ci0gICAgbV9yZWN0ID0g
bmV3UmVjdDsKLQotICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotfQotCi12b2lkIEdMVHJhbnNwb3J0
U3VyZmFjZTo6ZGVzdHJveSgpCi17Ci0gICAgbV9yZWN0ID0gSW50UmVjdCgpOwotCi0gICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgaWYgKCFtX3NoYWRlclByb2dyYW0gfHwgIW1fY29u
dGV4dDNEKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9C
VUZGRVIsIDApOwotCi0gICAgaWYgKG1fdmJvKQotICAgICAgICA6OmdsRGVsZXRlQnVmZmVycygx
LCAmbV92Ym8pOwotCi0gICAgaWYgKG1fdmVydGV4SGFuZGxlKSB7Ci0gICAgICAgIG1fY29udGV4
dDNELT5nZXRFeHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUygwKTsKLSAgICAgICAgbV9j
b250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+ZGVsZXRlVmVydGV4QXJyYXlPRVMobV92ZXJ0ZXhI
YW5kbGUpOwotICAgIH0gZWxzZSBpZiAobV9zaGFkZXJQcm9ncmFtKQotICAgICAgICA6OmdsRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7
Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbSgwKTsKLQotICAgIG1fc2hhZGVyUHJvZ3JhbSA9IG51bGxw
dHI7Ci0gICAgbV9jb250ZXh0M0QgPSBudWxscHRyOwotfQotCi12b2lkIEdMVHJhbnNwb3J0U3Vy
ZmFjZTo6ZHJhdyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlKQotewotICAgIGlmICghbV92ZXJ0ZXhI
YW5kbGUpCi0gICAgICAgIGJpbmRBcnJheUJ1ZmZlcigpOwotCi0gICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOwotICAgIDo6Z2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgNCk7Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpiaW5kQXJyYXlCdWZm
ZXIoKSBjb25zdAotewotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NoYWRlclBy
b2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgbV92Ym8pOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fc2hhZGVyUHJvZ3Jh
bS0+dmVydGV4TG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwg
MCwgMCk7Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpCi17Ci0gICAgaWYgKCFtX3NoYWRlclByb2dyYW0pCi0gICAgICAgIHJldHVybjsK
LQotICAgIDo6Z2xWaWV3cG9ydChtX3JlY3QueCgpLCBtX3JlY3QueSgpLCBtX3JlY3Qud2lkdGgo
KSwgbV9yZWN0LmhlaWdodCgpKTsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gRmxvYXRS
ZWN0KG1fcmVjdCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoaWRl
bnRpdHlNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZs
b2F0UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOwotICAgIG1fc2hhZGVyUHJvZ3JhbS0+
c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+bW9kZWxWaWV3TWF0cml4TG9jYXRpb24oKSwgbWF0
cml4KTsKLQotICAgIC8vIFRha2VuIGZyb20gVGV4dHVyZU1hcHBlckdMLgotICAgIGNvbnN0IGZs
b2F0IG5lYXJWYWx1ZSA9IDk5OTk5OTk7Ci0gICAgY29uc3QgZmxvYXQgZmFyVmFsdWUgPSAtOTk5
OTk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoMi4wIC8gZmxvYXQobV9yZWN0LndpZHRoKCkpLCAwLCAwLCAwLAotICAg
ICAgICAwLCAoLTIuMCkgLyBmbG9hdChtX3JlY3QuaGVpZ2h0KCkpLCAwLCAwLAotICAgICAgICAw
LCAwLCAtMi5mIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMCwKLSAgICAgICAgLTEsIDEsIC0o
ZmFyVmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMSk7Ci0KLSAg
ICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclByb2dyYW0tPnByb2plY3Rpb25N
YXRyaXhMb2NhdGlvbigpLCBwcm9qZWN0aW9uTWF0cml4KTsKLX0KLQotdm9pZCBHTFRyYW5zcG9y
dFN1cmZhY2U6OmluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1fY29udGV4
dDNEKQotICAgICAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JD
dXJyZW50R0xDb250ZXh0KCk7Ci0KLSAgICB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IG1f
Y29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5
X29iamVjdCIpOwotCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0
aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlOwotICAgIG1fc2hhZGVy
UHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0M0Qs
IG9wdGlvbnMpOwotCi0gICAgOjpnbFVzZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtLT5wcm9ncmFt
SUQoKSk7Ci0gICAgOjpnbFVuaWZvcm0xaShtX3NoYWRlclByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpLCAwKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgOjpnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZsaXBU
cmFuc2Zvcm07Ci0gICAgZmxpcFRyYW5zZm9ybS5mbGlwWSgpOwotICAgIGZsaXBUcmFuc2Zvcm0u
dHJhbnNsYXRlKDAsIC0xKTsKLSAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRl
clByb2dyYW0tPnRleHR1cmVTcGFjZU1hdHJpeExvY2F0aW9uKCksIGZsaXBUcmFuc2Zvcm0pOwot
Ci0gICAgOjpnbFVuaWZvcm0xZihtX3NoYWRlclByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCAx
LjApOwotCi0gICAgaWYgKCFtX3ZibykgewotICAgICAgICA6OmdsR2VuQnVmZmVycygxLCAmbV92
Ym8pOwotICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fdmJvKTsKLSAg
ICAgICAgOjpnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YoR0MzRGZsb2F0KSAq
IDgsIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFu
ZCBzZXQtdXAgdmVydGV4IGFycmF5IG9iamVjdC4KLSAgICBpZiAodmVydGV4QXJyYXlPYmplY3RT
dXBwb3J0ZWQpIHsKLSAgICAgICAgbV92ZXJ0ZXhIYW5kbGUgPSBtX2NvbnRleHQzRC0+Z2V0RXh0
ZW5zaW9ucygpLT5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwotCi0gICAgICAgIGlmIChtX3ZlcnRl
eEhhbmRsZSkgewotICAgICAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+Ymlu
ZFZlcnRleEFycmF5T0VTKG1fdmVydGV4SGFuZGxlKTsKLSAgICAgICAgICAgIGJpbmRBcnJheUJ1
ZmZlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlVHJhbnNmb3JtYXRpb25NYXRy
aXgoKTsKLQotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotfQot
Ci19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDZjYjlkMTAuLjAwMDAwMDAKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3VyZmFjZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHTFRyYW5zcG9ydFN1
cmZhY2VfaAotI2RlZmluZSBHTFRyYW5zcG9ydFN1cmZhY2VfaAotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKLSNpbmNs
dWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdMVHJhbnNwb3J0
U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7Ci0KLXB1YmxpYzoKLSAgICBHTFRy
YW5zcG9ydFN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIHZpcnR1YWwgfkdMVHJhbnNw
b3J0U3VyZmFjZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB1aW50
MzJfdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJl
Y3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotICAgIHZv
aWQgYmluZEFycmF5QnVmZmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0aWFsaXplU2hhZGVyUHJv
Z3JhbSgpOwotICAgIHZvaWQgZHJhdyhjb25zdCB1aW50MzJfdCk7Ci0KLSAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gbV9zaGFkZXJQcm9ncmFtOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92Ym87
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleEhhbmRsZTsKLX07Ci0KLX0KLQotI2VuZGlm
Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlZmE5MAotLS0gL2Rldi9udWxsCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJm
YWNlLmNwcApAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdMVHJhbnNwb3J0U3VyZmFjZS5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaWYgVVNFKEdMWCkKKyNpbmNsdWRlICJHTFhTdXJm
YWNlLmgiCisjZW5kaWYKKworI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMU3VyZmFjZS5oIgor
I2VuZGlmCisKKyNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgR0xmbG9hdCB2ZXJ0aWNlc1td
ID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07CitzdGF0aWMgYm9vbCB2ZXJ0ZXhBcnJheU9i
amVjdFN1cHBvcnRlZCA9IGZhbHNlOworCitQYXNzT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4g
R0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUm
IHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCit7CisjaWYgVVNFKEdMWCkKKyAg
ICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWFRy
YW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykpOworI2VsaWYgVVNFKEVHTCkKKyAgICBP
d25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFdpbmRv
d1RyYW5zcG9ydFN1cmZhY2UoYXR0cmlidXRlcykpOworI2VuZGlmCisKKyAgICBpZiAoc3VyZmFj
ZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQorICAgICAgICBy
ZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR0xU
cmFuc3BvcnRTdXJmYWNlOjpHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKGF0
dHJpYnV0ZXMpCisgICAgLCBtX3ZibygwKQorICAgICwgbV92ZXJ0ZXhIYW5kbGUoMCkKKyAgICAs
IG1fYm91bmRUZXh0dXJlKDApCit7CisgICAgbV9yZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBz
aXplKTsKK30KKworR0xUcmFuc3BvcnRTdXJmYWNlOjp+R0xUcmFuc3BvcnRTdXJmYWNlKCkKK3sK
K30KKwordm9pZCBHTFRyYW5zcG9ydFN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQz
Ml90IHRleHR1cmUpCit7CisgICAgaWYgKCFtX3NoYWRlclByb2dyYW0pCisgICAgICAgIGluaXRp
YWxpemVTaGFkZXJQcm9ncmFtKCk7CisKKyAgICBkcmF3KHRleHR1cmUpOworICAgIHN3YXBCdWZm
ZXJzKCk7Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJ
bnRSZWN0JiBuZXdSZWN0KQoreworICAgIG1fcmVjdCA9IG5ld1JlY3Q7CisKKyAgICBpZiAoIW1f
c2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlVHJhbnNmb3JtYXRp
b25NYXRyaXgoKTsKK30KKwordm9pZCBHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQorewor
ICAgIG1fcmVjdCA9IEludFJlY3QoKTsKKworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtIHx8ICFt
X2NvbnRleHQzRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OworICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7CisKKyAgICBpZiAobV92
Ym8pCisgICAgICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZtX3Zibyk7CisKKyAgICBpZiAobV92
ZXJ0ZXhIYW5kbGUpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+Ymlu
ZFZlcnRleEFycmF5T0VTKDApOworICAgICAgICBtX2NvbnRleHQzRC0+Z2V0RXh0ZW5zaW9ucygp
LT5kZWxldGVWZXJ0ZXhBcnJheU9FUyhtX3ZlcnRleEhhbmRsZSk7CisgICAgfSBlbHNlIGlmICht
X3NoYWRlclByb2dyYW0pCisgICAgICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobV9z
aGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKworICAgIDo6Z2xVc2VQcm9ncmFtKDAp
OworCisgICAgbV9zaGFkZXJQcm9ncmFtID0gbnVsbHB0cjsKKyAgICBtX2NvbnRleHQzRCA9IG51
bGxwdHI7CisgICAgbV9ib3VuZFRleHR1cmUgPSAwOworfQorCit2b2lkIEdMVHJhbnNwb3J0U3Vy
ZmFjZTo6ZHJhdyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlKQoreworICAgIGlmICghbV92ZXJ0ZXhI
YW5kbGUpCisgICAgICAgIGJpbmRBcnJheUJ1ZmZlcigpOworCisgICAgaWYgKG1fYm91bmRUZXh0
dXJlICE9IHRleHR1cmUpIHsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHRleHR1cmUpOworICAgICAgICBtX2JvdW5kVGV4dHVyZSA9IHRleHR1cmU7CisgICAgfQorCisg
ICAgOjpnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKK30KKwordm9pZCBHTFRy
YW5zcG9ydFN1cmZhY2U6OmJpbmRBcnJheUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgOjpnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Cisg
ICAgOjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Zibyk7CisgICAgOjpnbFZlcnRl
eEF0dHJpYlBvaW50ZXIobV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKK30KKwordm9pZCBHTFRyYW5zcG9y
dFN1cmZhY2U6OnVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCkKK3sKKyAgICBpZiAoIW1fc2hh
ZGVyUHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgOjpnbFZpZXdwb3J0KG1fcmVjdC54
KCksIG1fcmVjdC55KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkpOworICAgIG1f
Ym91bmRUZXh0dXJlID0gMDsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gRmxvYXRSZWN0
KG1fcmVjdCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoaWRlbnRp
dHlNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0
UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOworICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0
TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+bW9kZWxWaWV3TWF0cml4TG9jYXRpb24oKSwgbWF0cml4
KTsKKworICAgIC8vIFRha2VuIGZyb20gVGV4dHVyZU1hcHBlckdMLgorICAgIGNvbnN0IGZsb2F0
IG5lYXJWYWx1ZSA9IDk5OTk5OTk7CisgICAgY29uc3QgZmxvYXQgZmFyVmFsdWUgPSAtOTk5OTk7
CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4ID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoMi4wIC8gZmxvYXQobV9yZWN0LndpZHRoKCkpLCAwLCAwLCAwLAorICAgICAg
ICAwLCAoLTIuMCkgLyBmbG9hdChtX3JlY3QuaGVpZ2h0KCkpLCAwLCAwLAorICAgICAgICAwLCAw
LCAtMi5mIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMCwKKyAgICAgICAgLTEsIDEsIC0oZmFy
VmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMSk7CisKKyAgICBt
X3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclByb2dyYW0tPnByb2plY3Rpb25NYXRy
aXhMb2NhdGlvbigpLCBwcm9qZWN0aW9uTWF0cml4KTsKK30KKwordm9pZCBHTFRyYW5zcG9ydFN1
cmZhY2U6OmluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dDNE
KQorICAgICAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJy
ZW50R0xDb250ZXh0KCk7CisKKyAgICB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IG1fY29u
dGV4dDNELT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29i
amVjdCIpOworCisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9u
cyA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlOworICAgIG1fc2hhZGVyUHJv
Z3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0M0QsIG9w
dGlvbnMpOworCisgICAgOjpnbFVzZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtLT5wcm9ncmFtSUQo
KSk7CisgICAgOjpnbFVuaWZvcm0xaShtX3NoYWRlclByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigp
LCAwKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX05FQVJFU1QpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZsaXBUcmFu
c2Zvcm07CisgICAgZmxpcFRyYW5zZm9ybS5mbGlwWSgpOworICAgIGZsaXBUcmFuc2Zvcm0udHJh
bnNsYXRlKDAsIC0xKTsKKyAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclBy
b2dyYW0tPnRleHR1cmVTcGFjZU1hdHJpeExvY2F0aW9uKCksIGZsaXBUcmFuc2Zvcm0pOworCisg
ICAgOjpnbFVuaWZvcm0xZihtX3NoYWRlclByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCAxLjAp
OworCisgICAgaWYgKCFtX3ZibykgeworICAgICAgICA6OmdsR2VuQnVmZmVycygxLCAmbV92Ym8p
OworICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fdmJvKTsKKyAgICAg
ICAgOjpnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YoR0MzRGZsb2F0KSAqIDgs
IHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuZCBz
ZXQtdXAgdmVydGV4IGFycmF5IG9iamVjdC4KKyAgICBpZiAodmVydGV4QXJyYXlPYmplY3RTdXBw
b3J0ZWQpIHsKKyAgICAgICAgbV92ZXJ0ZXhIYW5kbGUgPSBtX2NvbnRleHQzRC0+Z2V0RXh0ZW5z
aW9ucygpLT5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworCisgICAgICAgIGlmIChtX3ZlcnRleEhh
bmRsZSkgeworICAgICAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+YmluZFZl
cnRleEFycmF5T0VTKG1fdmVydGV4SGFuZGxlKTsKKyAgICAgICAgICAgIGJpbmRBcnJheUJ1ZmZl
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgdXBkYXRlVHJhbnNmb3JtYXRpb25NYXRyaXgo
KTsKK30KKworUGFzc093blB0cjxHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+IEdMVHJhbnNwb3J0
U3VyZmFjZUNsaWVudDo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25zdCBQbGF0Zm9y
bUJ1ZmZlckhhbmRsZSBoYW5kbGUpCit7CisjaWYgVVNFKEdMWCkKKyAgICBPd25QdHI8R0xUcmFu
c3BvcnRTdXJmYWNlQ2xpZW50PiBjbGllbnQgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3Vy
ZmFjZUNsaWVudChoYW5kbGUpKTsKKworICAgIGlmICghY2xpZW50LT50ZXh0dXJlKCkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gQ3JlYXRlIFRyYW5zcG9ydCBTdXJmYWNlIGNsaWVu
dC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNsaWVu
dC5yZWxlYXNlKCk7CisKKyNlbHNlCisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKwor
CitHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OkdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25z
dCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSkKKyAgICA6IG1fdGV4dHVyZSgwKQorICAgICwgbV9oYXNB
bHBoYSh0cnVlKQoreworfQorCitHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6On5HTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQoKQoreworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6
ZGVzdHJveSgpCit7CisgICAgaWYgKG1fdGV4dHVyZSkgeworICAgICAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOworICAgICAgICBtX3RleHR1cmUgPSAwOworICAgIH0KK30KKwordm9pZCBHTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQ6OnByZXBhcmVUZXh0dXJlKCkKK3sKK30KKwordm9pZCBHTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0
dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX05FQVJFU1QpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNl
LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNw
b3J0U3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDcxOTIK
LS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgR0xUcmFuc3BvcnRTdXJmYWNlX2gKKyNkZWZpbmUgR0xUcmFuc3Bv
cnRTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTsK
KworY2xhc3MgR0xUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsK
KworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHdob3NlIHJlc3VsdHMgY2Fu
IGJlIHRyYW5zcG9ydGVkIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBkaXNwbGF5LgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gY3JlYXRlVHJhbnNwb3J0U3VyZmFjZShj
b25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6RGVm
YXVsdCk7CisgICAgdmlydHVhbCB+R0xUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBHTFRyYW5zcG9ydFN1
cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICB2b2lkIHVwZGF0
ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoKSBjb25z
dDsKKyAgICB2b2lkIGluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCk7CisgICAgdm9pZCBkcmF3KGNv
bnN0IHVpbnQzMl90KTsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0
M0Q7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBtX3NoYWRlclByb2dy
YW07CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
dmVydGV4SGFuZGxlOworICAgIEdMdWludCBtX2JvdW5kVGV4dHVyZTsKK307CisKK2NsYXNzIEdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudCB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2VDbGllbnQo
Y29uc3QgUGxhdGZvcm1CdWZmZXJIYW5kbGUpOworICAgIHZpcnR1YWwgfkdMVHJhbnNwb3J0U3Vy
ZmFjZUNsaWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOworICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgR0x1aW50IHRleHR1cmUoKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmU7IH0KKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNB
bHBoYTsgfQorCitwcm90ZWN0ZWQ6CisgICAgR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0
IFBsYXRmb3JtQnVmZmVySGFuZGxlKTsKKyAgICB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKKyAgICBH
THVpbnQgbV90ZXh0dXJlOworICAgIGJvb2wgbV9oYXNBbHBoYTsKK307CisKK30KKworI2VuZGlm
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VmbC9HcmFwaGljc1N1cmZhY2VDb21tb24uY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HcmFwaGljc1N1cmZhY2VDb21tb24uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MmFmNDAKLS0tIC9kZXYvbnVsbAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dyYXBoaWNzU3Vy
ZmFjZUNvbW1vbi5jcHAKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKyNp
bmNsdWRlICJHTFRyYW5zcG9ydFN1cmZhY2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKKworICAgIEdyYXBoaWNzU3VyZmFjZVBy
aXZhdGUoKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKFBsYXRm
b3JtQnVmZmVySGFuZGxlIHdpbklkLCBjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1N1cmZh
Y2U6OkZsYWdzKQorICAgICAgICA6IG1fcmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIHNpemUpCisg
ICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICwgbV9zaGFyZWRIYW5kbGUod2luSWQpCisg
ICAgeworICAgIH0KKworICAgIH5HcmFwaGljc1N1cmZhY2VQcml2YXRlKCkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgICAgIG1fY2xpZW50LT5kZXN0cm95KCk7CisKKyAgICAgICAgaWYgKG1fc2hhcmVkQ29u
dGV4dCAmJiBtX3NoYXJlZENvbnRleHQtPmhhbmRsZSgpICYmIG1fc2hhcmVkU3VyZmFjZSkKKyAg
ICAgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgICAgIGlmIChtX3NoYXJlZFN1
cmZhY2UpCisgICAgICAgICAgICBtX3NoYXJlZFN1cmZhY2UtPmRlc3Ryb3koKTsKKworICAgICAg
ICBpZiAobV9zaGFyZWRDb250ZXh0KSB7CisgICAgICAgICAgICBtX3NoYXJlZENvbnRleHQtPmRl
c3Ryb3koKTsKKyAgICAgICAgICAgIG1fc2hhcmVkQ29udGV4dC0+cmVsZWFzZUN1cnJlbnQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaW5pdGlhbGl6ZVRyYW5zcG9ydFN1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBmbGFncywgY29uc3Qg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBzaGFyZUNvbnRleHQpCisgICAgeworICAgICAgICBH
TFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgc2hhcmVkU3VyZmFjZUF0dHJpYnV0
ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6RGVmYXVsdDsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsK
KworICAgICAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQWxwaGEpCisg
ICAgICAgICAgICBzaGFyZWRTdXJmYWNlQXR0cmlidXRlcyA9IEdMUGxhdGZvcm1TdXJmYWNlOjpT
dXBwb3J0QWxwaGE7CisKKyAgICAgICAgbV9zaGFyZWRTdXJmYWNlID0gR0xUcmFuc3BvcnRTdXJm
YWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKHNpemUsIHNoYXJlZFN1cmZhY2VBdHRyaWJ1dGVz
KTsKKyAgICAgICAgaWYgKCFtX3NoYXJlZFN1cmZhY2UpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgbV9zaGFyZWRDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbik7CisgICAgICAgIGlm
ICghbV9zaGFyZWRDb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmICghbV9zaGFyZWRDb250ZXh0LT5pbml0aWFsaXplKG1fc2hhcmVkU3VyZmFjZS5nZXQoKSwg
c3RhdGljX2Nhc3Q8UGxhdGZvcm1Db250ZXh0PihzaGFyZUNvbnRleHQpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3NoYXJlZENvbnRleHQtPm1ha2VDdXJyZW50KG1fc2hhcmVkU3VyZmFjZS5nZXQoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb3B5RnJvbVRleHR1cmUoR0x1aW50IHRleHR1cmVJZCkKKyAgICB7
CisgICAgICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbV9zaGFyZWRTdXJmYWNlLT51cGRhdGVDb250ZW50cyh0ZXh0dXJlSWQpOwor
ICAgIH0KKworICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIGhhbmRsZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9zaGFyZWRTdXJmYWNlLT5oYW5kbGUoKTsKKyAgICB9CisKKyAgICAv
LyBDbGllbnQKKyAgICB2b2lkIHVwZGF0ZUNsaWVudEJ1ZmZlcigpCisgICAgeworICAgICAgICBp
ZiAoIW1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50LT5w
cmVwYXJlVGV4dHVyZSgpOworICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxh
Z3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBHTHVpbnQgdGV4dHVyZUlkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAgICAgICBjb25zdF9jYXN0PEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUqPih0aGlzKS0+aW5pdGlhbGl6ZUNsaWVudCgpOworCisgICAg
ICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT50ZXh0dXJlKCkgOiAwOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoKQorICAgIHsKKyAgICAgICAgbV9j
bGllbnQgPSBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2VD
bGllbnQobV9zaGFyZWRIYW5kbGUpOworCisgICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaW5mb3JtYXRpb24gc2hvdWxk
IGJlIHBhc3NlZCBmcm9tIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgaWYgKG1fY2xpZW50LT5o
YXNBbHBoYSgpKQorICAgICAgICAgICAgbV9mbGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kOworICAgIH0KKworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9mbGFnczsKKyAg
ICBGbG9hdFJlY3QgbV9yZWN0OworICAgIEludFNpemUgbV9zaXplOworICAgIFBsYXRmb3JtQnVm
ZmVySGFuZGxlIG1fc2hhcmVkSGFuZGxlOworICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQ+IG1fY2xpZW50OworICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9zaGFyZWRD
b250ZXh0OworICAgIE93blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IG1fc2hhcmVkU3VyZmFjZTsK
K307CisKK0dyYXBoaWNzU3VyZmFjZVRva2VuIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBv
cnQoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhbmRsZSgpOworfQorCit1aW50MzJfdCBH
cmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtR2V0VGV4dHVyZUlEKCkKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT50ZXh0dXJlSWQoKTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
Q29weVRvR0xUZXh0dXJlKHVpbnQzMl90IC8qdGFyZ2V0Ki8sIHVpbnQzMl90IC8qaWQqLywgY29u
c3QgSW50UmVjdCYgLyp0YXJnZXRSZWN0Ki8sIGNvbnN0IEludFBvaW50JiAvKm9mZnNldCovKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUNvcHlGcm9tVGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmKQor
eworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUt
PmNvcHlGcm9tVGV4dHVyZSh0ZXh0dXJlSWQpOworfQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1QYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCit7CisgICAgdWludDMyX3QgdGV4dHVyZSA9IHBs
YXRmb3JtR2V0VGV4dHVyZUlEKCk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm47
CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9y
bTsKKyAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
cmVjdFRvUmVjdChtX3ByaXZhdGUtPnJlY3QoKSwgdGFyZ2V0UmVjdCkpOworICAgIHN0YXRpY19j
YXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpLT5kcmF3VGV4dHVyZSh0ZXh0dXJl
LCBtX3ByaXZhdGUtPmZsYWdzKCksIG1fcHJpdmF0ZS0+c2l6ZSgpLCBtX3ByaXZhdGUtPnJlY3Qo
KSwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHkpOworfQorCit1aW50MzJfdCBHcmFwaGljc1N1
cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQor
Cit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMoKQoreworICAg
IG1fcHJpdmF0ZS0+dXBkYXRlQ2xpZW50QnVmZmVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0lu
dFNpemUgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVNpemUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPnNpemUoKTsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdy
YXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3Mg
ZmxhZ3MsIGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qgc2hhcmVDb250ZXh0KQorewor
ICAgIC8vIEdyYXBoaWNzU3VyZmFjZSBkb2Vzbid0IHlldCBzdXBwb3J0IGNvcHlUb1RleHR1cmUg
b3Igc2luZ2xlYnVmZmVyZWQgc3VyZmFjZS4KKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlU
b1RleHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NT
dXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFn
cykpOworICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2YXRl
KCk7CisKKyAgICBpZiAoc3VyZmFjZS0+bV9wcml2YXRlLT5pbml0aWFsaXplVHJhbnNwb3J0U3Vy
ZmFjZShzaXplLCBmbGFncywgc2hhcmVDb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2U7
CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7Cit9CisKK1Bhc3NS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tl
biYgdG9rZW4pCit7CisgICAgLy8gR3JhcGhpY3NTdXJmYWNlIGRvZXNuJ3QgeWV0IHN1cHBvcnQg
Y29weVRvVGV4dHVyZSBvciBzaW5nbGVidWZmZXJlZCBzdXJmYWNlLgorICAgIGlmIChmbGFncyAm
IFN1cHBvcnRzQ29weVRvVGV4dHVyZSB8fCBmbGFncyAmIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQp
CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKworICAgIFJl
ZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJm
YWNlKHNpemUsIGZsYWdzKSk7CisgICAgc3VyZmFjZS0+bV9wcml2YXRlID0gbmV3IEdyYXBoaWNz
U3VyZmFjZVByaXZhdGUodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUsIHNpemUsIGZsYWdzKTsKKyAg
ICByZXR1cm4gc3VyZmFjZTsKK30KKworY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxv
Y2soY29uc3QgSW50UmVjdCYsIGludCogLypvdXRwdXRTdHJpZGUqLywgTG9ja09wdGlvbnMpCit7
CisgICAgLy8gR3JhcGhpY3NTdXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQgZm9y
IFdlYkdMLCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20uCisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygp
Cit7CisgICAgLy8gR3JhcGhpY3NTdXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQg
Zm9yIFdlYkdMLCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20u
Cit9CisKK3ZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGlm
ICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByaXZhdGUtPmRlc3Ryb3ko
KTsKKworICAgIGRlbGV0ZSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gMDsKK30KKworUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBh
aW50KGNvbnN0IEludFNpemUmLCBjaGFyKiwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNw
cCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFj
ZS5jcHAKaW5kZXggODliZjUxNi4uZGExZDE3YyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0z
MCw4ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQotICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlKGF0dHJpYnV0ZXMpCitFR0xXaW5kb3dU
cmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUm
IHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHTFRyYW5zcG9ydFN1
cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykKIHsKICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQ
dHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKGF0dHJpYnV0ZXMsIE5hdGl2ZVdyYXBwZXI6Om5hdGl2
ZURpc3BsYXkoKSkpOwogICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29uZmlnU2VsZWN0b3ItPmRp
c3BsYXkoKTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKaW5kZXggNTRiZDI0Yy4uMDVlOGFlNiAxMDA2NDQKLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xT
dXJmYWNlLmgKQEAgLTQzLDcgKzQzLDcgQEAgdHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBl
cjsKIGNsYXNzIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRT
dXJmYWNlIHsKIAogcHVibGljOgotICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoU3VyZmFj
ZUF0dHJpYnV0ZXMpOworICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6
ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5FR0xXaW5kb3dUcmFuc3BvcnRT
dXJmYWNlKCk7CiAgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlv
bigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0
JiBuZXdSZWN0KSBPVkVSUklERTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IGMwZTU2MzYuLmZm
ZGExZmEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMzAsMTAgKzMwLDM5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1tdID0g
eyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CitzdGF0
aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmluZFRleEltYWdlRVhUID0gMDsKK3N0
YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQg
PSAwOwogCi1HTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKFN1cmZhY2VB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHTFRyYW5zcG9ydFN1cmZhY2UoYXR0cmlidXRl
cykKK3N0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoKQoreworICAgIHN0YXRpYyBib29sIHJl
c29sdmVkID0gZmFsc2U7CisgICAgaWYgKHJlc29sdmVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMWEJJTkRU
RVhJTUFHRUVYVFBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
R0x1Ynl0ZSo+KCJnbFhCaW5kVGV4SW1hZ2VFWFQiKSkpOworICAgIHBHbFhSZWxlYXNlVGV4SW1h
Z2VFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMWFJFTEVBU0VURVhJTUFHRUVYVFBST0M+KGds
WEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbFhSZWxl
YXNlVGV4SW1hZ2VFWFQiKSkpOworCisgICAgcmVzb2x2ZWQgPSBwR2xYQmluZFRleEltYWdlRVhU
ICYmIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQ7CisKKyAgICByZXR1cm4gcmVzb2x2ZWQ7Cit9CisK
K3N0YXRpYyBpbnQgZ2x4QXR0cmlidXRlc1tdID0geworICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9F
WFQsCisgICAgR0xYX1RFWFRVUkVfRk9STUFUX1JHQkFfRVhULAorICAgIEdMWF9URVhUVVJFX1RB
UkdFVF9FWFQsCisgICAgR0xYX1RFWFRVUkVfMkRfRVhULAorICAgIDAKK307CisKK3N0YXRpYyBi
b29sIGlzTWVzYUdMWCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNNZXNhID0gISFzdHJzdHIoZ2xY
R2V0Q2xpZW50U3RyaW5nKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBHTFhfVkVORE9SKSwg
Ik1lc2EiKTsKKyAgICByZXR1cm4gaXNNZXNhOworfQorCitHTFhUcmFuc3BvcnRTdXJmYWNlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMpCisgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykK
IHsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKICAg
ICBhdHRyaWJ1dGVzIHw9IEdMUGxhdGZvcm1TdXJmYWNlOjpEb3VibGVCdWZmZXJlZDsKQEAgLTQ1
LDcgKzc0LDcgQEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZShTdXJm
YWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
WDExSGVscGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCAqdmlzSW5m
by5nZXQoKSk7CisgICAgWDExSGVscGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVy
SGFuZGxlLCAqdmlzSW5mby5nZXQoKSwgc2l6ZSk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxl
KSB7CiAgICAgICAgIGRlc3Ryb3koKTsKQEAgLTE2Niw2ICsxOTUsOTIgQEAgdm9pZCBHTFhPZmZT
Y3JlZW5TdXJmYWNlOjpmcmVlUmVzb3VyY2VzKCkKICAgICBtX2RyYXdhYmxlID0gMDsKIH0KIAor
R0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6R0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25z
dCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBoYW5kbGUpCisgICAgOiBHTFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQoaGFuZGxlKQoreworICAgIGlmICghcmVzb2x2ZUdMTWV0aG9kcygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRy
aWJ1dGVzKGRpc3BsYXksIGhhbmRsZSwgJmF0dHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgd2luZG93IGlzIG1hcHBlZC4KKyAgICBpZiAoYXR0ci5tYXBfc3Rh
dGUgPT0gSXNVbm1hcHBlZCB8fCBhdHRyLm1hcF9zdGF0ZSA9PSBJc1Vudmlld2FibGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciBoYW5k
bGVyOworCisgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFs
Rm9ybWF0KGRpc3BsYXksIGF0dHIudmlzdWFsKTsKKyAgICBib29sIGhhc0FscGhhID0gKGZvcm1h
dC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spOwor
ICAgIG1feFBpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKGRpc3BsYXksIGhhbmRs
ZSk7CisKKyAgICBpZiAoIW1feFBpeG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2x4QXR0
cmlidXRlc1sxXSA9IChmb3JtYXQtPmRlcHRoID09IDMyICYmIGhhc0FscGhhKSA/IEdMWF9URVhU
VVJFX0ZPUk1BVF9SR0JBX0VYVCA6IEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JfRVhUOworCisgICAg
R0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIHNoYXJlZFN1cmZhY2VBdHRyaWJ1
dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQ7CisKKyAgICBpZiAoaGFzQWxwaGEpIHsK
KyAgICAgICAgc2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6U3Vw
cG9ydEFscGhhOworICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICB9CisKKyAgICBHTFhD
b25maWdTZWxlY3RvciBjb25maWdTZWxlY3RvcihzaGFyZWRTdXJmYWNlQXR0cmlidXRlcyk7CisK
KyAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChkaXNwbGF5LCBjb25maWdTZWxlY3Rv
ci5zdXJmYWNlQ2xpZW50Q29uZmlnKGZvcm1hdC0+ZGVwdGgsIFhWaXN1YWxJREZyb21WaXN1YWwo
YXR0ci52aXN1YWwpKSwgbV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsKKworICAgIGlmICghbV9n
bHhQaXhtYXAgfHwgIWhhbmRsZXIuaXNWYWxpZE9wZXJhdGlvbigpKSB7CisgICAgICAgIGRlc3Ry
b3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNyZWF0ZVRleHR1cmUoKTsKKyAg
ICBnbFhXYWl0WCgpOworICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQoZGlzcGxheSwgbV9nbHhQaXht
YXAsIEdMWF9GUk9OVF9FWFQsIDApOworfQorCitHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50Ojp+
R0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudCgpCit7Cit9CisKK3ZvaWQgR0xYVHJhbnNwb3J0U3Vy
ZmFjZUNsaWVudDo6ZGVzdHJveSgpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IFgxMUhlbHBl
cjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fdGV4dHVyZSkgeworICAgICAgICBwR2xYUmVsZWFzZVRleEltYWdlRVhUKGRp
c3BsYXksIG1fZ2x4UGl4bWFwLCBHTFhfRlJPTlRfRVhUKTsKKyAgICAgICAgR0xUcmFuc3BvcnRT
dXJmYWNlQ2xpZW50OjpkZXN0cm95KCk7CisgICAgfQorCisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7
CisgICAgICAgIGdsWERlc3Ryb3lQaXhtYXAoZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAg
ICBtX2dseFBpeG1hcCA9IDA7CisgICAgICAgIGdsWFdhaXRHTCgpOworICAgIH0KKworICAgIGlm
IChtX3hQaXhtYXApIHsKKyAgICAgICAgWDExSGVscGVyOjpkZXN0cm95UGl4bWFwKG1feFBpeG1h
cCk7CisgICAgICAgIG1feFBpeG1hcCA9IDA7CisgICAgfQorfQorCit2b2lkIEdMWFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQ6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBpZiAoaXNNZXNhR0xYKCkg
JiYgbV90ZXh0dXJlKSB7CisgICAgICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYMTFIZWxwZXI6Om5h
dGl2ZURpc3BsYXkoKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUpOworICAgICAgICAvLyBNZXNhIGRvZXNuJ3QgcmUtYmluZCB0ZXh0dXJlIHRvIHRoZSBm
cm9udCBidWZmZXIgb24gZ2xYU3dhcEJ1ZmVyCisgICAgICAgIC8vIE1hbnVhbGx5IHJlbGVhc2Ug
cHJldmlvdXMgbG9jayBhbmQgcmViaW5kIHRleHR1cmUgdG8gc3VyZmFjZSB0byBlbnN1cmUgZnJh
bWUgdXBkYXRlcy4KKyAgICAgICAgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVChkaXNwbGF5LCBtX2ds
eFBpeG1hcCwgR0xYX0ZST05UX0VYVCk7CisgICAgICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQoZGlz
cGxheSwgbV9nbHhQaXhtYXAsIEdMWF9GUk9OVF9FWFQsIDApOworICAgIH0KK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmgKaW5kZXggZTg2MTg5MS4uNWU0ZWZjYSAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xYVHJh
bnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFRyYW5zcG9ydFN1cmZhY2UgewogCiBwdWJsaWM6Ci0g
ICAgR0xYVHJhbnNwb3J0U3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7CisgICAgR0xYVHJhbnNw
b3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMpOwogICAgIHZpcnR1
YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKICAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNv
bmZpZyBjb25maWd1cmF0aW9uKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZm
ZXJzKCkgT1ZFUlJJREU7CkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpIE9WRVJSSURFOwogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdGlhbGl6ZSgp
OwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAK
QEAgLTY2LDYgKzY1LDE5IEBAIHByaXZhdGU6CiAgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwog
fTsKIAorY2xhc3MgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudCA6IHB1YmxpYyBHTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQgeworCitwdWJsaWM6CisgICAgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVu
dChjb25zdCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSk7CisgICAgdmlydHVhbCB+R0xYVHJhbnNwb3J0
U3VyZmFjZUNsaWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgUGl4bWFwIG1feFBpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Cit9OworCiB9
CiAKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>