<?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>130529</bug_id>
          
          <creation_ts>2014-03-20 12:30:54 -0700</creation_ts>
          <short_desc>Add WebCore::IOSurface wrapper</short_desc>
          <delta_ts>2014-03-20 15:08:30 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>992657</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 12:30:54 -0700</bug_when>
    <thetext>We&apos;ve been spreading IOSurface code around WebCore and WebKit2 which is SPI, and picky about how it&apos;s used.

We should wrap it in a C++ class to hide some of the pickyness, drag some extra context around with them, and overall make surfaces easier to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992663</commentid>
    <comment_count>1</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 12:39:29 -0700</bug_when>
    <thetext>Renamed at Anders/Sam&apos;s request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992715</commentid>
    <comment_count>2</comment_count>
      <attachid>227331</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 14:08:24 -0700</bug_when>
    <thetext>Created attachment 227331
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992717</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-20 14:10:12 -0700</bug_when>
    <thetext>Attachment 227331 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cocoa/IOSurface.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/Shared/mac/RemoteLayerBackingStore.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992725</commentid>
    <comment_count>4</comment_count>
      <attachid>227333</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 14:16:53 -0700</bug_when>
    <thetext>Created attachment 227333
style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992729</commentid>
    <comment_count>5</comment_count>
      <attachid>227333</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-03-20 14:21:32 -0700</bug_when>
    <thetext>Comment on attachment 227333
style

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

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:52
&gt; +    IOSurfaceRef platformSurface() const { return m_surface.get(); }

Why not call this surface().

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:68
&gt; +#if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 1090
&gt; +    bool isPurgeable() const;
&gt; +    SurfaceState setIsPurgeable(bool);
&gt; +#endif // __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 1090

Can&apos;t we just make these no-ops on older versions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992730</commentid>
    <comment_count>6</comment_count>
      <attachid>227333</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-03-20 14:25:53 -0700</bug_when>
    <thetext>Comment on attachment 227333
style

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        * platform/graphics/cocoa/IOSurface.h: Added.

Nope, there&apos;s a framework header with this name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992732</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 14:32:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 227333 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=227333&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:52
&gt; &gt; +    IOSurfaceRef platformSurface() const { return m_surface.get(); }
&gt; 
&gt; Why not call this surface().

Sure.

&gt; &gt; Source/WebCore/platform/graphics/cocoa/IOSurface.h:68
&gt; &gt; +#if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 1090
&gt; &gt; +    bool isPurgeable() const;
&gt; &gt; +    SurfaceState setIsPurgeable(bool);
&gt; &gt; +#endif // __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 1090
&gt; 
&gt; Can&apos;t we just make these no-ops on older versions?

I guess, I&apos;m just afraid that people will think they&apos;re getting purgeability and have issues. But since it&apos;s internal, I guess that&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992733</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 14:32:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 227333 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=227333&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; +        * platform/graphics/cocoa/IOSurface.h: Added.
&gt; 
&gt; Nope, there&apos;s a framework header with this name.

And yet!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992742</commentid>
    <comment_count>9</comment_count>
      <attachid>227333</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-03-20 14:46:33 -0700</bug_when>
    <thetext>Comment on attachment 227333
style

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

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:95
&gt; +    ASSERT(m_surface);

I don&apos;t think this is very useful; it will fire if height or width is zero (maybe?), and/or on system that have run out of graphics memory.

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:150
&gt; +    uint32_t previousState;

Maybe initailize this to 0 in case the IOSurfaceSetPurgeable fails and we use uninitialized bits.

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:151
&gt; +    IOReturn ret = IOSurfaceSetPurgeable(m_surface.get(), kIOSurfacePurgeableKeepCurrent, &amp;previousState);

Weird that a const function is calling IOSurfaceSetPurgeable(). Is that call a no-op?

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:163
&gt; +    IOReturn ret = IOSurfaceSetPurgeable(m_surface.get(), kIOSurfacePurgeableKeepCurrent, &amp;previousState);

Again.

&gt; Source/WebCore/platform/graphics/cocoa/IOSurface.mm:171
&gt; +    IOReturn ret = IOSurfaceSetPurgeable(m_surface.get(), isPurgeable ? kIOSurfacePurgeableVolatile : kIOSurfacePurgeableNonVolatile, &amp;previousState);

Bored now.

Oh wait, this is a real setter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992757</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-20 15:08:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/166005</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227331</attachid>
            <date>2014-03-20 14:08:24 -0700</date>
            <delta_ts>2014-03-20 14:16:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>iosurface.diff</filename>
            <type>text/plain</type>
            <size>39564</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZTk0YzcwLi40NzRkYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDMtMjAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIFdlYkNvcmU6OklPU3VyZmFjZSB3cmFwcGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA1MjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkQ0dDb2xvclNw
YWNlKToKKyAgICAgICAgTW92ZSBjYWNoZWRDR0NvbG9yU3BhY2Ugb3V0IHNvIHRoYXQgb3RoZXIg
Y2xpZW50cyBvZiBHcmFwaGljc0NvbnRleHRDRworICAgICAgICBjYW4gdXNlIGl0cyBtYXBwaW5n
IGZyb20gV2ViQ29yZTo6Q29sb3JTcGFjZSAtPiBDR0NvbG9yU3BhY2VSZWYuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckJhY2tpbmdTdG9yZUNhY2hlLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAg
ICAgQWRkIEZJWE1FcyBmb3IgSW1hZ2VCdWZmZXIgdG8gYWRvcHQgV2ViQ29yZTo6SU9TdXJmYWNl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbTogQWRkZWQu
CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0
ZUZyb21NYWNoUG9ydCk6CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0ZUZyb21TdXJmYWNlKToK
KyAgICAgICAgKElPU3VyZmFjZTo6SU9TdXJmYWNlKToKKyAgICAgICAgKElPU3VyZmFjZTo6bWF4
aW11bVNpemUpOgorICAgICAgICAoSU9TdXJmYWNlOjpjcmVhdGVNYWNoUG9ydCk6CisgICAgICAg
IChJT1N1cmZhY2U6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKElPU3VyZmFjZTo6ZW5zdXJlUGxh
dGZvcm1Db250ZXh0KToKKyAgICAgICAgKElPU3VyZmFjZTo6ZW5zdXJlR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKElPU3VyZmFjZTo6c3RhdGUpOgorICAgICAgICAoSU9TdXJmYWNlOjppc1B1
cmdlYWJsZSk6CisgICAgICAgIChJT1N1cmZhY2U6OnNldElzUHVyZ2VhYmxlKToKKyAgICAgICAg
KElPU3VyZmFjZTo6aW5Vc2UpOgorICAgICAgICBBZGQgV2ViQ29yZTo6SU9TdXJmYWNlLgorCiAy
MDE0LTAzLTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgd2lsbCBiZSByZXF1aXJlZCBieSB0aGUgaGlz
dG9yeSBpdGVtIGRlY29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDcwZTAyODIuLjdjNGQ5
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yNzAzLDExICsyNzAzLDYgQEAgX19aTjdXZWJD
b3JlMjhnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5RVJOM1dURjZWZWN0b3JJaExtMEVOUzBf
MTVDcmFzaE9uT3ZlcmYKIF93a0NURm9udFRyYW5zZm9ybUdseXBocwogI2VuZGlmCiAKLSNpZiAh
UExBVEZPUk0oSU9TX1NJTVVMQVRPUikKLV93a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUKLV93a0lP
U3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZQotI2VuZGlmCi0KICNpZiBFTkFCTEUoM0RfUkVOREVS
SU5HKQogX1dlYkNvcmVIYXMzRFJlbmRlcmluZwogI2VuZGlmCkBAIC0zMDQ3LDYgKzMwNDIsMTgg
QEAgX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMmNvbnRhaW5zUXVhZEVSS1MwXwogX19aTks3V2Vi
Q29yZTlGbG9hdFF1YWQxM2NvbnRhaW5zUG9pbnRFUktOU18xMEZsb2F0UG9pbnRFCiAjZW5kaWYK
IAorI2lmIFVTRShJT1NVUkZBQ0UpCitfX1pON1dlYkNvcmU5SU9TdXJmYWNlMTRzZXRJc1B1cmdl
YWJsZUViCitfX1pON1dlYkNvcmU5SU9TdXJmYWNlMThjcmVhdGVGcm9tTWFjaFBvcnRFak5TXzEw
Q29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTlJT1N1cmZhY2UyMWVuc3VyZUdyYXBoaWNzQ29udGV4
dEV2CitfX1pON1dlYkNvcmU5SU9TdXJmYWNlMjFlbnN1cmVQbGF0Zm9ybUNvbnRleHRFdgorX19a
TjdXZWJDb3JlOUlPU3VyZmFjZTZjcmVhdGVFTlNfN0ludFNpemVFTlNfMTBDb2xvclNwYWNlRQor
X19aTks3V2ViQ29yZTlJT1N1cmZhY2UxMWNyZWF0ZUltYWdlRXYKK19fWk5LN1dlYkNvcmU5SU9T
dXJmYWNlMTRjcmVhdGVNYWNoUG9ydEV2Citfd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlCitfd2tJ
T1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElPU19URVhU
X0FVVE9TSVpJTkcpCiBfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5cmVzZXRUZXh0QXV0b3Np
emluZ0V2CiBfX1pON1dlYkNvcmU1RnJhbWUyMnNldFRleHRBdXRvc2l6aW5nV2lkdGhFZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDFiNjkxNzQuLmM4NDg5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMzUsNiArMTAzNSw4IEBACiAJCTJCMzY1Qzg0MTUy
NTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQjQyMzVBMDE1MjUwRjYwMDBEQkJDRDggLyogUmVu
ZGVyU1ZHRWxsaXBzZS5oICovOyB9OwogCQkyQkU4RTJDNzEyQTU4OUVDMDBGQUQ1NTAgLyogSFRN
TE1ldGFDaGFyc2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmggKi87IH07CiAJCTJCRThFMkM5MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAg
Ki87IH07CisJCTJEMEI0QUFCMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMEI0QUE5MThEQTFDQ0Qw
MDQzNERFMSAvKiBJT1N1cmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkyRDBCNEFBQzE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwQjRBQUEx
OERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5tbSAqLzsgfTsKIAkJMkQyNTM5NjIxOENFN0Y2
MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMjUzOTYwMThDRTdGNjIwMDI3
MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAgKi87IH07CiAJCTJEMjUz
OTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyNTM5NjExOENF
N0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggKi87IH07CiAJ
CTJEM0EwRTM2MTNBN0Q3NjEwMEU4NUFGMCAvKiBTVkdQYXJzaW5nRXJyb3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0EwRTM1MTNBN0Q3NjEwMEU4
NUFGMCAvKiBTVkdQYXJzaW5nRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNzg5MSw2ICs3ODkzLDggQEAKIAkJMkI0MjM1QTAxNTI1MEY2
MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBw
YXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxNZXRhQ2hh
cnNldFBhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8q
IElPU3VyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJT1N1cmZhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwQjRBQUExOERBMUNDRDAwNDM0REUx
IC8qIElPU3VyZmFjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IElPU3VyZmFjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyNTM5NjAxOENF
N0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyNTM5NjExOENFN0Y2MjAw
MjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDIyNCw2ICsyMDIyOCw4IEBACiAJCUI1MzIwRDY4MTIyQTI0RTkwMDJEMTQ0MCAv
KiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICovLAorCQkJCTJEMEI0QUFB
MThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8sCiAJCQkJQjUzMjBENkExMjJBMjRF
OTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gY29jb2E7CkBAIC0yMjk5Nyw2ICsyMzAwMyw3IEBACiAJCQkJQjJDM0RBMkEwRDAwNkMxRDAw
RUY2RjI2IC8qIENoYXJzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCMjEyNTFG
MTJEMDAzRUYyNjkgLyogQ2hlY2tib3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjAwOTc3RDNDMDAwNTgyNkQ5IC8q
IENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDgyMzUyMEFGOTJBNzkwMDA0
RjA1NyAvKiBDaHJvbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjcwNTgsNiArMjcwNjUsNyBAQAog
CQkJCUJDNTNEQTQ4MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUExRDEzODEwQTUzMjU1MjAwNjRCRjVGIC8qIERPTVhQYXRoLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODVFOUUwQTIwQUIzQTBDNzAwMDY5Q0QwIC8qIERPTVhQYXRoRXhw
cmVzc2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJEMEI0QUFDMThEQTFDQ0QwMDQzNERFMSAv
KiBJT1N1cmZhY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBNjBBQjNBMEM3MDAwNjlD
RDAgLyogRE9NWFBhdGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDE3NjJFMzE3NjY4
NkVBMDBEODM2QTggLyogRG93blNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTU5
NUUwQjI3QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAppbmRl
eCAxMTVmMGJmLi5iY2E4MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcApAQCAtMTA3LDIwICsxMDcsNiBAQCBDb2xvcjo6Q29sb3IoQ0dD
b2xvclJlZiBjb2xvcikKICAgICBtX3ZhbGlkID0gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBD
R0NvbG9yU3BhY2VSZWYgY2FjaGVkQ0dDb2xvclNwYWNlKENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
LXsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2VEZXZpY2VS
R0I6Ci0gICAgICAgIHJldHVybiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7Ci0gICAgY2FzZSBD
b2xvclNwYWNlU1JHQjoKLSAgICAgICAgcmV0dXJuIHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0gICAg
Y2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgotICAgICAgICByZXR1cm4gbGluZWFyUkdCQ29sb3JT
cGFjZVJlZigpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwotfQotCiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dD
b2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBD
R0Zsb2F0IGNvbXBvbmVudHNbNF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA5YWRjMGQ2Li43ODA0NThl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmgKQEAgLTM2LDYgKzM2LDIwIEBAIENHQ29sb3JTcGFjZVJlZiBkZXZp
Y2VSR0JDb2xvclNwYWNlUmVmKCk7CiBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2VSZWYo
KTsKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCk7CiAKK3N0YXRpYyBp
bmxpbmUgQ0dDb2xvclNwYWNlUmVmIGNhY2hlZENHQ29sb3JTcGFjZShDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNl
RGV2aWNlUkdCOgorICAgICAgICByZXR1cm4gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOworICAg
IGNhc2UgQ29sb3JTcGFjZVNSR0I6CisgICAgICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZVJlZigp
OworICAgIGNhc2UgQ29sb3JTcGFjZUxpbmVhclJHQjoKKyAgICAgICAgcmV0dXJuIGxpbmVhclJH
QkNvbG9yU3BhY2VSZWYoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQmFj
a2luZ1N0b3JlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJCYWNraW5nU3RvcmVDYWNoZS5jcHAKaW5kZXggMmUyZTAzYi4uOWZkNmJlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJCYWNraW5nU3RvcmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJCYWNraW5nU3RvcmVDYWNoZS5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAgc3RhdGljIGNvbnN0IGRvdWJsZSBwdXJnZUludGVydmFsID0gNTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisvLyBGSVhNRTogQWRvcHQgV2ViQ29yZTo6SU9TdXJmYWNlLgogc3RhdGljIFJl
dGFpblB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewogICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAppbmRleCA2
Y2E0MTVhNC4uNTRkOGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIGNv
bnN0IGludCBtYXhJT1N1cmZhY2VEaW1lbnNpb24gPSAyMDQ4Owogc3RhdGljIGNvbnN0IGludCBt
YXhJT1N1cmZhY2VEaW1lbnNpb24gPSA0MDk2OwogI2VuZGlmCiAKKy8vIEZJWE1FOiBBZG9wdCBX
ZWJDb3JlOjpJT1N1cmZhY2UuCiBzdGF0aWMgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRl
SU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgdW5zaWduZWQgcGl4ZWxGb3Jt
YXQgPSAnQkdSQSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjFi
NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJT1N1cmZhY2VfaAorI2RlZmluZSBJT1N1
cmZhY2VfaAorCisjaWYgVVNFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSU9TdXJmYWNlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SU9TdXJmYWNlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SU9TdXJmYWNlPiBjcmVhdGUoSW50U2l6ZSwgQ29s
b3JTcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tTWFj
aFBvcnQobWFjaF9wb3J0X3QsIENvbG9yU3BhY2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElP
U3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVmLCBDb2xvclNwYWNlKTsKKwor
ICAgIHN0YXRpYyBJbnRTaXplIG1heGltdW1TaXplKCk7CisKKyAgICBtYWNoX3BvcnRfdCBjcmVh
dGVNYWNoUG9ydCgpIGNvbnN0OworCisgICAgLy8gQW55IGltYWdlcyBjcmVhdGVkIGZyb20gYSBz
dXJmYWNlIG5lZWQgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHJlbGVhc2luZworICAgIC8vIHRoZSBz
dXJmYWNlLCBvciBhbiBleHBlbnNpdmUgR1BVIHJlYWRiYWNrIGNhbiByZXN1bHQuCisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdlKCkgY29uc3Q7CisKKyAgICBJT1N1cmZhY2VS
ZWYgcGxhdGZvcm1TdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0JiBlbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRSZWYgZW5zdXJlUGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBlbnVtIGNsYXNzIFN1cmZhY2VT
dGF0ZSB7CisgICAgICAgIFZhbGlkLAorICAgICAgICBFbXB0eQorICAgIH07CisKKyAgICAvLyBR
dWVyeWluZyBwdXJnZWFiaWxpdHkgc3RhdGUgY2FuIGJlIGV4cGVuc2l2ZSwgc28gaW4gY2FzZXMg
d2hlcmUgdGhlIHN1cmZhY2UgaXMKKyAgICAvLyBnb2luZyB0byBiZSB1c2VkIGltbWVkaWF0ZWx5
LCB1c2UgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRJc1B1cmdlYWJsZSB0bworICAgIC8vIGRldGVy
bWluZSB3aGV0aGVyIHRoZSBkYXRhIHdhcyBwdXJnZWQsIGluc3RlYWQgb2YgZmlyc3QgY2FsbGlu
ZyBzdGF0ZSgpIG9yIGlzUHVyZ2VhYmxlKCkuCisgICAgU3VyZmFjZVN0YXRlIHN0YXRlKCkgY29u
c3Q7CisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKKyAgICBib29sIGlzUHVyZ2VhYmxlKCkgY29uc3Q7CisgICAgU3VyZmFjZVN0YXRl
IHNldElzUHVyZ2VhYmxlKGJvb2wpOworI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA5MAorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgc2l6ZV90IHRvdGFsQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsQnl0
ZXM7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KKworICAgIGJvb2wgaW5Vc2UoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJT1N1
cmZhY2UoSW50U2l6ZSwgQ29sb3JTcGFjZSk7CisgICAgSU9TdXJmYWNlKElPU3VyZmFjZVJlZiwg
Q29sb3JTcGFjZSk7CisKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKKyAgICBzaXplX3QgbV90b3RhbEJ5dGVzOworCisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQ7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
bV9jZ0NvbnRleHQ7CisKKyAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFKQor
CisjZW5kaWYgLy8gSU9TdXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hYmY4ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJJT1N1cmZhY2UuaCIKKworI2lmIFVTRShJT1NVUkZBQ0UpCisKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaWYgX19oYXNfaW5jbHVkZSg8SU9TdXJmYWNl
L0lPU3VyZmFjZVByaXZhdGUuaD4pCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0
ZS5oPgorI2Vsc2UKK2VudW0geworICAgIGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSA9
IDAsCisgICAga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlID0gMSwKKyAgICBrSU9TdXJmYWNl
UHVyZ2VhYmxlRW1wdHkgPSAyLAorICAgIGtJT1N1cmZhY2VQdXJnZWFibGVLZWVwQ3VycmVudCA9
IDMsCit9OworI2VuZGlmCisKK2V4dGVybiAiQyIgeworQ0dDb250ZXh0UmVmIENHSU9TdXJmYWNl
Q29udGV4dENyZWF0ZShJT1N1cmZhY2VSZWYsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QsIHNpemVf
dCwgQ0dDb2xvclNwYWNlUmVmLCBDR0JpdG1hcEluZm8pOworQ0dJbWFnZVJlZiBDR0lPU3VyZmFj
ZUNvbnRleHRDcmVhdGVJbWFnZShDR0NvbnRleHRSZWYpOworSU9SZXR1cm4gSU9TdXJmYWNlU2V0
UHVyZ2VhYmxlKElPU3VyZmFjZVJlZiwgdWludDMyX3QsIHVpbnQzMl90ICopOworfQorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUGFzc1JlZlB0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6
Y3JlYXRlKEludFNpemUgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSU9TdXJmYWNlKHNpemUsIGNvbG9yU3BhY2UpKTsKK30KKworUGFzc1Jl
ZlB0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbU1hY2hQb3J0KG1hY2hfcG9ydF90
IG1hY2hQb3J0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgUmV0YWluUHRyPElPU3Vy
ZmFjZVJlZj4gc3VyZmFjZSA9IGFkb3B0Q0YoSU9TdXJmYWNlTG9va3VwRnJvbU1hY2hQb3J0KG1h
Y2hQb3J0KSk7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6Y3JlYXRlRnJvbVN1cmZhY2Uoc3VyZmFj
ZS5nZXQoKSwgY29sb3JTcGFjZSk7Cit9CisKK1Bhc3NSZWZQdHI8SU9TdXJmYWNlPiBJT1N1cmZh
Y2U6OmNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJT1N1cmZhY2Uoc3VyZmFjZSwg
Y29sb3JTcGFjZSkpOworfQorCitJT1N1cmZhY2U6OklPU3VyZmFjZShJbnRTaXplIHNpemUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAg
ICwgbV9zaXplKHNpemUpCit7CisgICAgdW5zaWduZWQgcGl4ZWxGb3JtYXQgPSAnQkdSQSc7Cisg
ICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKKyAgICBpbnQgd2lkdGggPSBzaXplLndp
ZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICBzaXplX3QgYnl0
ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywg
d2lkdGggKiBieXRlc1BlckVsZW1lbnQpOworICAgIEFTU0VSVChieXRlc1BlclJvdyk7CisKKyAg
ICBtX3RvdGFsQnl0ZXMgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VBbGxvY1Np
emUsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTsKKyAgICBBU1NFUlQobV90b3RhbEJ5dGVzKTsKKwor
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7CisgICAgICAgIChpZClrSU9TdXJmYWNlV2lk
dGg6IEAod2lkdGgpLAorICAgICAgICAoaWQpa0lPU3VyZmFjZUhlaWdodDogQChoZWlnaHQpLAor
ICAgICAgICAoaWQpa0lPU3VyZmFjZVBpeGVsRm9ybWF0OiBAKHBpeGVsRm9ybWF0KSwKKyAgICAg
ICAgKGlkKWtJT1N1cmZhY2VCeXRlc1BlckVsZW1lbnQ6IEAoYnl0ZXNQZXJFbGVtZW50KSwKKyAg
ICAgICAgKGlkKWtJT1N1cmZhY2VCeXRlc1BlclJvdzogQChieXRlc1BlclJvdyksCisgICAgICAg
IChpZClrSU9TdXJmYWNlQWxsb2NTaXplOiBAKG1fdG90YWxCeXRlcykKKyAgICB9OworCisgICAg
bV9zdXJmYWNlID0gYWRvcHRDRihJT1N1cmZhY2VDcmVhdGUoKENGRGljdGlvbmFyeVJlZilvcHRp
b25zKSk7CisgICAgQVNTRVJUKG1fc3VyZmFjZSk7Cit9CisKK0lPU3VyZmFjZTo6SU9TdXJmYWNl
KElPU3VyZmFjZVJlZiBzdXJmYWNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2Nv
bG9yU3BhY2UoY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQoreworICAgIG1f
c2l6ZSA9IEludFNpemUoSU9TdXJmYWNlR2V0V2lkdGgoc3VyZmFjZSksIElPU3VyZmFjZUdldEhl
aWdodChzdXJmYWNlKSk7CisgICAgbV90b3RhbEJ5dGVzID0gSU9TdXJmYWNlR2V0QWxsb2NTaXpl
KHN1cmZhY2UpOworfQorCitJbnRTaXplIElPU3VyZmFjZTo6bWF4aW11bVNpemUoKQoreworICAg
IHJldHVybiBJbnRTaXplKElPU3VyZmFjZUdldFByb3BlcnR5TWF4aW11bShrSU9TdXJmYWNlV2lk
dGgpLCBJT1N1cmZhY2VHZXRQcm9wZXJ0eU1heGltdW0oa0lPU3VyZmFjZUhlaWdodCkpOworfQor
CittYWNoX3BvcnRfdCBJT1N1cmZhY2U6OmNyZWF0ZU1hY2hQb3J0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSU9TdXJmYWNlQ3JlYXRlTWFjaFBvcnQobV9zdXJmYWNlLmdldCgpKTsKK30KKworUmV0
YWluUHRyPENHSW1hZ2VSZWY+IElPU3VyZmFjZTo6Y3JlYXRlSW1hZ2UoKSBjb25zdAoreworICAg
IGlmICghbV9jZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IGFkb3B0Q0YoQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UobV9jZ0NvbnRleHQuZ2V0KCkp
KTsKK30KKworQ0dDb250ZXh0UmVmIElPU3VyZmFjZTo6ZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkK
K3sKKyAgICBpZiAobV9jZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBtX2NnQ29udGV4dC5nZXQo
KTsKKworICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKKyAgICBzaXplX3QgYml0c1Bl
ckNvbXBvbmVudCA9IDg7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDMyOworICAgIG1fY2dD
b250ZXh0ID0gYWRvcHRDRihDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGUobV9zdXJmYWNlLmdldCgp
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBiaXRzUGVyQ29tcG9uZW50LCBiaXRz
UGVyUGl4ZWwsIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBiaXRtYXBJbmZvKSk7
CisKKyAgICByZXR1cm4gbV9jZ0NvbnRleHQuZ2V0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYg
SU9TdXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGlmIChtX2dyYXBoaWNz
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKKworICAgIG1fZ3Jh
cGhpY3NDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dChlbnN1cmVQbGF0Zm9y
bUNvbnRleHQoKSkpOworCisgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKK30KKworSU9T
dXJmYWNlOjpTdXJmYWNlU3RhdGUgSU9TdXJmYWNlOjpzdGF0ZSgpIGNvbnN0Cit7CisjaWYgUExB
VEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAg
ICB1aW50MzJfdCBwcmV2aW91c1N0YXRlOworICAgIElPUmV0dXJuIHJldCA9IElPU3VyZmFjZVNl
dFB1cmdlYWJsZShtX3N1cmZhY2UuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVLZWVwQ3VycmVu
dCwgJnByZXZpb3VzU3RhdGUpOworICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0ga0lPUmV0
dXJuU3VjY2Vzcyk7CisgICAgcmV0dXJuIHByZXZpb3VzU3RhdGUgPT0ga0lPU3VyZmFjZVB1cmdl
YWJsZUVtcHR5ID8gSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGU6OkVtcHR5IDogSU9TdXJmYWNlOjpT
dXJmYWNlU3RhdGU6OlZhbGlkOworI2Vsc2UKKyAgICByZXR1cm4gU3VyZmFjZVN0YXRlOjpWYWxp
ZDsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTAKK2Jvb2wgSU9TdXJmYWNlOjppc1B1cmdlYWJsZSgpIGNvbnN0
Cit7CisgICAgdWludDMyX3QgcHJldmlvdXNTdGF0ZTsKKyAgICBJT1JldHVybiByZXQgPSBJT1N1
cmZhY2VTZXRQdXJnZWFibGUobV9zdXJmYWNlLmdldCgpLCBrSU9TdXJmYWNlUHVyZ2VhYmxlS2Vl
cEN1cnJlbnQsICZwcmV2aW91c1N0YXRlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09
IGtJT1JldHVyblN1Y2Nlc3MpOworICAgIHJldHVybiBwcmV2aW91c1N0YXRlICE9IGtJT1N1cmZh
Y2VQdXJnZWFibGVOb25Wb2xhdGlsZTsKK30KKworSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgSU9T
dXJmYWNlOjpzZXRJc1B1cmdlYWJsZShib29sIGlzUHVyZ2VhYmxlKQoreworICAgIHVpbnQzMl90
IHByZXZpb3VzU3RhdGU7CisgICAgSU9SZXR1cm4gcmV0ID0gSU9TdXJmYWNlU2V0UHVyZ2VhYmxl
KG1fc3VyZmFjZS5nZXQoKSwgaXNQdXJnZWFibGUgPyBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRp
bGUgOiBrSU9TdXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGUsICZwcmV2aW91c1N0YXRlKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IGtJT1JldHVyblN1Y2Nlc3MpOworCisgICAgaWYg
KHByZXZpb3VzU3RhdGUgPT0ga0lPU3VyZmFjZVB1cmdlYWJsZUVtcHR5KQorICAgICAgICByZXR1
cm4gSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGU6OkVtcHR5OworCisgICAgcmV0dXJuIElPU3VyZmFj
ZTo6U3VyZmFjZVN0YXRlOjpWYWxpZDsKK30KKyNlbmRpZgorCitib29sIElPU3VyZmFjZTo6aW5V
c2UoKSBjb25zdAoreworICAgIHJldHVybiBJT1N1cmZhY2VJc0luVXNlKG1fc3VyZmFjZS5nZXQo
KSk7Cit9CisKKyNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI2YzU3ZTYu
LjM4Njc0ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxNC0wMy0yMCAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgV2ViQ29yZTo6
SU9TdXJmYWNlIHdyYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMDUyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTo6ZW5jb2RlKToKKyAgICAgICAgKFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpkZWNvZGUpOgorICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3Bs
YXkpOgorICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmFwcGx5QmFja2luZ1N0b3Jl
VG9MYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lw
ZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92
ZVN3aXBlU25hcHNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250
cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lw
ZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92
ZVN3aXBlU25hcHNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QpOgorICAgICAgICBBZG9wdCBXZWJD
b3JlOjpJT1N1cmZhY2UuCisKIDIwMTQtMDMtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzOiBTd2lwZSBnZXN0
dXJlIGNhbiB0cmFjayB2ZXJ0aWNhbCBtb3ZlbWVudCBpbnN0ZWFkIG9mIGhvcml6b250YWwgbW92
ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUuaAppbmRleCAyNDVkODU4Li4zM2U3MTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCkBAIC0yOSwxMCArMjks
NyBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KLQotI2lmIFVTRShJT1NVUkZB
Q0UpCi0jaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgotI2VuZGlmCisjaW5jbHVkZSA8
V2ViQ29yZS9JT1N1cmZhY2UuaD4KIAogT0JKQ19DTEFTUyBDQUxheWVyOwogCkBAIC05Myw3ICs5
MCw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2Zyb250QnVm
ZmVyOwogI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gbV9m
cm9udFN1cmZhY2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gbV9mcm9udFN1cmZh
Y2U7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9hY2NlbGVyYXRlc0RyYXdpbmc7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQppbmRl
eCBkNTE3ZWI2Li43NDA0ZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KQEAgLTMzLDIzICszMywxMyBAQAogI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNv
cmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSU9TdXJmYWNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkxheWVyLmg+CiAKICNpZiBV
U0UoSU9TVVJGQUNFKQogI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4KICNlbmRpZgogCi0jaWYg
X19oYXNfaW5jbHVkZSg8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzUHJp
di5oPikKLSNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlc1By
aXYuaD4KLSNlbmRpZgotCi1leHRlcm4gIkMiIHsKLSNpZiBVU0UoSU9TVVJGQUNFKQotQ0dDb250
ZXh0UmVmIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZShJT1N1cmZhY2VSZWYsIHNpemVfdCwgc2l6
ZV90LCBzaXplX3QsIHNpemVfdCwgQ0dDb2xvclNwYWNlUmVmLCBDR0JpdG1hcEluZm8pOwotI2Vu
ZGlmCi1DR0ltYWdlUmVmIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKENHQ29udGV4dFJl
Zik7Ci19Ci0KICNpZiBfX2hhc19pbmNsdWRlKDxRdWFydHpDb3JlL0NBTGF5ZXJQcml2YXRlLmg+
KQogI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyUHJpdmF0ZS5oPgogI2VuZGlmCkBAIC05Myw3
ICs4Myw3IEBAIHZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmVuY29kZShJUEM6OkFyZ3Vt
ZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIAogI2lmIFVTRShJT1NVUkZBQ0UpCiAgICAgaWYg
KG1fYWNjZWxlcmF0ZXNEcmF3aW5nKSB7Ci0gICAgICAgIG1hY2hfcG9ydF90IHBvcnQgPSBJT1N1
cmZhY2VDcmVhdGVNYWNoUG9ydChtX2Zyb250U3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG1hY2hf
cG9ydF90IHBvcnQgPSBtX2Zyb250U3VyZmFjZS0+Y3JlYXRlTWFjaFBvcnQoKTsKICAgICAgICAg
ZW5jb2RlciA8PCBJUEM6Ok1hY2hQb3J0KHBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyNSw3ICsxMTUsNyBAQCBib29sIFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFJl
bW90ZUxheWVyQgogICAgICAgICBJUEM6Ok1hY2hQb3J0IG1hY2hQb3J0OwogICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG1hY2hQb3J0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmVzdWx0Lm1fZnJvbnRTdXJmYWNlID0gYWRvcHRDRihJT1N1cmZhY2VMb29rdXBGcm9t
TWFjaFBvcnQobWFjaFBvcnQucG9ydCgpKSk7CisgICAgICAgIHJlc3VsdC5tX2Zyb250U3VyZmFj
ZSA9IElPU3VyZmFjZTo6Y3JlYXRlRnJvbU1hY2hQb3J0KG1hY2hQb3J0LnBvcnQoKSwgQ29sb3JT
cGFjZURldmljZVJHQik7CiAgICAgICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19z
ZWxmKCksIG1hY2hQb3J0LnBvcnQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTE1MSw0NCArMTQxLDYgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0TmVlZHNE
aXNwbGF5KCkKICAgICBzZXROZWVkc0Rpc3BsYXkoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUp
KTsKIH0KIAotI2lmIFVTRShJT1NVUkZBQ0UpCi1zdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gY3JlYXRlSU9TdXJmYWNlQ29udGV4dChJT1N1cmZhY2VSZWYgc3VyZmFjZSwgSW50U2l6ZSBz
aXplLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAoIXN1cmZhY2UpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0
OwotICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0gODsKLSAgICBzaXplX3QgYml0c1BlclBp
eGVsID0gMzI7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKHN1
cmZhY2UsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgYml0c1BlckNvbXBvbmVudCwgYml0
c1BlclBpeGVsLCBjb2xvclNwYWNlLCBiaXRtYXBJbmZvKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5Q
dHI8SU9TdXJmYWNlUmVmPiBjcmVhdGVJT1N1cmZhY2UoSW50U2l6ZSBzaXplKQotewotICAgIHVu
c2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOwotICAgIHVuc2lnbmVkIGJ5dGVzUGVyRWxlbWVu
dCA9IDQ7Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBz
aXplLmhlaWdodCgpOwotCi0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Q
cm9wZXJ0eShrSU9TdXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJFbGVtZW50KTsK
LSAgICBBU1NFUlQoYnl0ZXNQZXJSb3cpOwotCi0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9IElPU3Vy
ZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6ZSwgaGVpZ2h0ICogYnl0ZXNQZXJS
b3cpOwotICAgIEFTU0VSVChhbGxvY1NpemUpOwotCi0gICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0g
QHsKLSAgICAgICAgKGlkKWtJT1N1cmZhY2VXaWR0aDogQCh3aWR0aCksCi0gICAgICAgIChpZClr
SU9TdXJmYWNlSGVpZ2h0OiBAKGhlaWdodCksCi0gICAgICAgIChpZClrSU9TdXJmYWNlUGl4ZWxG
b3JtYXQ6IEAocGl4ZWxGb3JtYXQpLAotICAgICAgICAoaWQpa0lPU3VyZmFjZUJ5dGVzUGVyRWxl
bWVudDogQChieXRlc1BlckVsZW1lbnQpLAotICAgICAgICAoaWQpa0lPU3VyZmFjZUJ5dGVzUGVy
Um93OiBAKGJ5dGVzUGVyUm93KSwKLSAgICAgICAgKGlkKWtJT1N1cmZhY2VBbGxvY1NpemU6IEAo
YWxsb2NTaXplKQotICAgIH07Ci0KLSAgICByZXR1cm4gYWRvcHRDRihJT1N1cmZhY2VDcmVhdGUo
KENGRGljdGlvbmFyeVJlZilkaWN0KSk7Ci19Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRSkKLQog
UmV0YWluUHRyPENHSW1hZ2VSZWY+IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpjcmVhdGVJbWFn
ZUZvckZyb250QnVmZmVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJvbnRCdWZmZXIgfHwgbV9h
Y2NlbGVyYXRlc0RyYXdpbmcpCkBAIC0yMzMsMzAgKzE4NSwyMiBAQCBib29sIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKIAogI2lmIFVTRShJT1NVUkZBQ0UpCiAgICAgaWYgKG1f
YWNjZWxlcmF0ZXNEcmF3aW5nKSB7Ci0gICAgICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IGJh
Y2tTdXJmYWNlID0gY3JlYXRlSU9TdXJmYWNlKGV4cGFuZGVkU2NhbGVkU2l6ZSk7Ci0gICAgICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IGNyZWF0ZUlPU3VyZmFjZUNvbnRl
eHQoYmFja1N1cmZhY2UuZ2V0KCksIGV4cGFuZGVkU2NhbGVkU2l6ZSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNnQ29udGV4dC5nZXQoKSk7
CisgICAgICAgIFJlZlB0cjxJT1N1cmZhY2U+IGJhY2tTdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVh
dGUoZXhwYW5kZWRTY2FsZWRTaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0ID0gYmFja1N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4
dCgpOwogICAgICAgICBjb250ZXh0LmNsZWFyUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBl
eHBhbmRlZFNjYWxlZFNpemUpKTsKICAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWV4cGFuZGVkU2NhbGVkU2l6ZS5o
ZWlnaHQoKSk7CiAKLSAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gZnJvbnRDb250ZXh0
OwogICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZnJvbnRJbWFnZTsKLSAgICAgICAgaWYg
KG1fZnJvbnRTdXJmYWNlKSB7Ci0gICAgICAgICAgICBmcm9udENvbnRleHQgPSBjcmVhdGVJT1N1
cmZhY2VDb250ZXh0KG1fZnJvbnRTdXJmYWNlLmdldCgpLCBleHBhbmRlZEludFNpemUobV9zaXpl
ICogbV9zY2FsZSksIHNSR0JDb2xvclNwYWNlUmVmKCkpOwotICAgICAgICAgICAgZnJvbnRJbWFn
ZSA9IGFkb3B0Q0YoQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoZnJvbnRDb250ZXh0Lmdl
dCgpKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBpZiAobV9mcm9udFN1cmZhY2UpCisgICAgICAg
ICAgICBmcm9udEltYWdlID0gbV9mcm9udFN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7CiAgICAgICAg
IGRyYXdJbkNvbnRleHQoY29udGV4dCwgZnJvbnRJbWFnZS5nZXQoKSk7Ci0gICAgICAgIG1fZnJv
bnRTdXJmYWNlID0gYmFja1N1cmZhY2U7CiAKICAgICAgICAgLy8gSWYgb3VyIGZyb250SW1hZ2Ug
aXMgZGVyaXZlZCBmcm9tIGFuIElPU3VyZmFjZSwgd2UgbmVlZCB0bwogICAgICAgICAvLyBkZXN0
cm95IHRoZSBpbWFnZSBiZWZvcmUgdGhlIENHQ29udGV4dCBpdCdzIGRlcml2ZWQgZnJvbSwKICAg
ICAgICAgLy8gc28gdGhhdCB0aGUgY29udGV4dCBkb2Vzbid0IG1ha2UgYSBDUFUgY29weSBvZiB0
aGUgc3VyZmFjZSBkYXRhLgotICAgICAgICBpZiAoZnJvbnRJbWFnZSkgewotICAgICAgICAgICAg
ZnJvbnRJbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBBU1NFUlQoZnJvbnRDb250ZXh0KTsK
LSAgICAgICAgfQorICAgICAgICBmcm9udEltYWdlID0gbnVsbHB0cjsKKyAgICAgICAgbV9mcm9u
dFN1cmZhY2UgPSBiYWNrU3VyZmFjZTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC0zNjcsNyArMzExLDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6YXBwbHlCYWNr
aW5nU3RvcmVUb0xheWVyKENBTGF5ZXIgKmxheWVyKQogewogI2lmIFVTRShJT1NVUkZBQ0UpCiAg
ICAgaWYgKGFjY2VsZXJhdGVzRHJhd2luZygpKQotICAgICAgICBsYXllci5jb250ZW50cyA9IChp
ZCltX2Zyb250U3VyZmFjZS5nZXQoKTsKKyAgICAgICAgbGF5ZXIuY29udGVudHMgPSAoaWQpbV9m
cm9udFN1cmZhY2UtPnBsYXRmb3JtU3VyZmFjZSgpOwogICAgIGVsc2UKICAgICAgICAgbGF5ZXIu
Y29udGVudHMgPSAoaWQpY3JlYXRlSW1hZ2VGb3JGcm9udEJ1ZmZlcigpLmdldCgpOwogI2Vsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250
cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNv
bnRyb2xsZXJJT1MubW0KaW5kZXggZWQwOWI2ZC4uYjNhY2RjYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0K
QEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAi
V2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFdl
YkNvcmUvSU9TdXJmYWNlLmg+CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNp
bXBvcnQgPFVJS2l0L1VJU2NyZWVuRWRnZVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CiAjaW1wb3J0
IDxVSUtpdC9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZ19Qcml2YXRlLmg+CkBAIC00Mywx
MSArNDQsNiBAQAogI2ltcG9ydCA8VUlLaXQvX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNp
dGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvX1VJTmF2aWdhdGlvblBhcmFsbGF4VHJhbnNpdGlvbi5o
PgogCi0jaWYgVVNFKElPU1VSRkFDRSkKLSNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4K
LSNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2VQcml2YXRlLmg+Ci0jZW5kaWYKLQogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbnRlcmZhY2UgV0tTd2lwZVRyYW5zaXRpb25Db250cm9s
bGVyIDogTlNPYmplY3QgPF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlRGVs
ZWdhdGU+CkBAIC0xNTcsMTEgKzE1MywxMCBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
YmVnaW5Td2lwZUdlc3R1cmUoX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbgogICAg
IG1fc25hcHNob3RWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpb
bV9saXZlU3dpcGVWaWV3IGZyYW1lXV0pOwogICAgIGlmIChzbmFwc2hvdCkgewogI2lmIFVTRShJ
T1NVUkZBQ0UpCi0gICAgICAgIHVpbnQzMl90IHB1cmdlYWJpbGl0eVN0YXRlID0ga0lPU3VyZmFj
ZVB1cmdlYWJsZU5vblZvbGF0aWxlOwotICAgICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25h
cHNob3QuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSwgJnB1cmdlYWJpbGl0
eVN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwdXJnZWFiaWxpdHlTdGF0ZSAhPSBrSU9T
dXJmYWNlUHVyZ2VhYmxlRW1wdHkpCisgICAgICAgIGlmIChzbmFwc2hvdC0+c2V0SXNQdXJnZWFi
bGUoZmFsc2UpID09IElPU3VyZmFjZTo6U3VyZmFjZVN0YXRlOjpWYWxpZCkgewogICAgICAgICAg
ICAgW21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50cyA9IChpZClzbmFwc2hvdC5nZXQoKTsK
KyAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RTdXJmYWNlID0gc25hcHNob3Q7Cisg
ICAgICAgIH0KICNlbHNlCiAgICAgICAgIFttX3NuYXBzaG90VmlldyBsYXllcl0uY29udGVudHMg
PSAoaWQpc25hcHNob3QuZ2V0KCk7CiAjZW5kaWYKQEAgLTI2Myw5ICsyNTgsOSBAQCB2b2lkIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFwc2hvdCgpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICNpZiBVU0UoSU9TVVJGQUNFKQotICAgIElPU3VyZmFjZVJlZiBzbmFwc2hvdFN1
cmZhY2UgPSAoSU9TdXJmYWNlUmVmKVttX3NuYXBzaG90VmlldyBsYXllcl0uY29udGVudHM7Ci0g
ICAgaWYgKHNuYXBzaG90U3VyZmFjZSkKLSAgICAgICAgSU9TdXJmYWNlU2V0UHVyZ2VhYmxlKHNu
YXBzaG90U3VyZmFjZSwga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlLCBudWxscHRyKTsKKyAg
ICBpZiAobV9jdXJyZW50U3dpcGVTbmFwc2hvdFN1cmZhY2UpCisgICAgICAgIG1fY3VycmVudFN3
aXBlU25hcHNob3RTdXJmYWNlLT5zZXRJc1B1cmdlYWJsZSh0cnVlKTsKKyAgICBtX2N1cnJlbnRT
d2lwZVNuYXBzaG90U3VyZmFjZSA9IG51bGxwdHI7CiAjZW5kaWYKICAgICAKICAgICBbbV9zbmFw
c2hvdFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCAzMmVjNTVjLi4zMWU0
ZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1
cmVDb250cm9sbGVyLmgKQEAgLTQzLDYgKzQzLDEwIEBAIE9CSkNfQ0xBU1MgTlNFdmVudDsKIE9C
SkNfQ0xBU1MgTlNWaWV3OwogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIElP
U3VyZmFjZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW07CkBAIC0xMjEsNiArMTI1LDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgV2ViQ29y
ZTo6VGltZXI8Vmlld0dlc3R1cmVDb250cm9sbGVyPiBtX3N3aXBlV2F0Y2hkb2dUaW1lcjsKIAor
I2lmIFVTRShJT1NVUkZBQ0UpCisgICAgUmVmUHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gbV9jdXJy
ZW50U3dpcGVTbmFwc2hvdFN1cmZhY2U7CisjZW5kaWYKKwogI2lmICFQTEFURk9STShJT1MpCiAg
ICAgZG91YmxlIG1fbWFnbmlmaWNhdGlvbjsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fbWFn
bmlmaWNhdGlvbk9yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0KaW5kZXggZWJmYzlkZC4uZThmZTcyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXJNYWMubW0KQEAgLTQwLDIyICs0MCw5IEBACiAjaW1wb3J0ICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbXBvcnQgPENvY29hL0NvY29hLmg+CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVDQUxheWVyRXh0cmFzLmg+CiAKLSNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUp
ICYmIF9faGFzX2luY2x1ZGUoPElPU3VyZmFjZS9JT1N1cmZhY2VQcml2YXRlLmg+KQotI2ltcG9y
dCA8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZhdGUuaD4KLSNlbHNlCi1lbnVtIHsKLSAgICBrSU9T
dXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGUgPSAwLAotICAgIGtJT1N1cmZhY2VQdXJnZWFibGVW
b2xhdGlsZSA9IDEsCi0gICAga0lPU3VyZmFjZVB1cmdlYWJsZUVtcHR5ID0gMiwKLX07Ci0jZW5k
aWYKLQotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotZXh0ZXJu
ICJDIiBJT1JldHVybiBJT1N1cmZhY2VTZXRQdXJnZWFibGUoSU9TdXJmYWNlUmVmIGJ1ZmZlciwg
dWludDMyX3QgbmV3U3RhdGUsIHVpbnQzMl90ICpvbGRTdGF0ZSk7Ci0jZW5kaWYKLQogI2lmIGRl
ZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVkZSg8UXVhcnR6Q29yZS9RdWFydHpD
b3JlUHJpdmF0ZS5oPikKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4K
ICNlbHNlCkBAIC0zNzMsMTcgKzM2MCwxNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
YmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbQogICAg
IG1fc3dpcGVTbmFwc2hvdExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsK
ICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOkNHQ29sb3JHZXRD
b25zdGFudENvbG9yKGtDR0NvbG9yV2hpdGUpXTsKIAotICAgIFJldGFpblB0cjxJT1N1cmZhY2VS
ZWY+IHNuYXBzaG90ID0gVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnNuYXBzaG90QW5kUmVu
ZGVyVHJlZVNpemUodGFyZ2V0SXRlbSkuZmlyc3Q7CisgICAgUmVmUHRyPElPU3VyZmFjZT4gc25h
cHNob3QgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNob3RBbmRSZW5kZXJUcmVl
U2l6ZSh0YXJnZXRJdGVtKS5maXJzdDsKIAogICAgIGlmIChzbmFwc2hvdCkgewogI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotICAgICAgICB1aW50MzJfdCBwdXJn
ZWFiaWxpdHlTdGF0ZSA9IGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZTsKLSAgICAgICAg
SU9TdXJmYWNlU2V0UHVyZ2VhYmxlKHNuYXBzaG90LmdldCgpLCBrSU9TdXJmYWNlUHVyZ2VhYmxl
Tm9uVm9sYXRpbGUsICZwdXJnZWFiaWxpdHlTdGF0ZSk7Ci0KLSAgICAgICAgaWYgKHB1cmdlYWJp
bGl0eVN0YXRlICE9IGtJT1N1cmZhY2VQdXJnZWFibGVFbXB0eSkKLSAgICAgICAgICAgIFttX3N3
aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50czooaWQpc25hcHNob3QuZ2V0KCldOworICAgICAg
ICBpZiAoc25hcHNob3QtPnNldElzUHVyZ2VhYmxlKGZhbHNlKSA9PSBJT1N1cmZhY2U6OlN1cmZh
Y2VTdGF0ZTo6VmFsaWQpIHsKKyAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RTdXJm
YWNlID0gc25hcHNob3Q7CisgICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29u
dGVudHM6KGlkKXNuYXBzaG90LT5wbGF0Zm9ybVN1cmZhY2UoKV07CisgICAgICAgIH0KICNlbHNl
Ci0gICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50czooaWQpc25hcHNob3Qu
Z2V0KCldOworICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90U3VyZmFjZSA9IHNuYXBzaG90
OworICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29udGVudHM6KGlkKXNuYXBzaG90
LT5wbGF0Zm9ybVN1cmZhY2UoKV07CiAjZW5kaWYKICAgICB9CiAKQEAgLTUzMSwxMCArNTE4LDEw
IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBzaG90KCkKICAg
ICAgICAgcmV0dXJuOwogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDkwCi0gICAgSU9TdXJmYWNlUmVmIHNuYXBzaG90U3VyZmFjZSA9IChJT1N1cmZhY2VSZWYpW21f
c3dpcGVTbmFwc2hvdExheWVyIGNvbnRlbnRzXTsKLSAgICBpZiAoc25hcHNob3RTdXJmYWNlKQot
ICAgICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3RTdXJmYWNlLCBrSU9TdXJmYWNl
UHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxwdHIpOworICAgIGlmIChtX2N1cnJlbnRTd2lwZVNuYXBz
aG90U3VyZmFjZSkKKyAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFN1cmZhY2UtPnNldElz
UHVyZ2VhYmxlKHRydWUpOwogI2VuZGlmCisgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFN1cmZh
Y2UgPSBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBsYXllciA6IG1fY3VycmVudFN3
aXBlTGl2ZUxheWVycykKICAgICAgICAgW2xheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNE
SWRlbnRpdHldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3
U25hcHNob3RTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNo
b3RTdG9yZS5oCmluZGV4IGY4Yzg0MGUuLjJmMGVjMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTI2LDE2ICsyNiwxMyBAQAog
I2lmbmRlZiBWaWV3U25hcHNob3RTdG9yZV9oCiAjZGVmaW5lIFZpZXdTbmFwc2hvdFN0b3JlX2gK
IAorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CiAjaW5jbHVkZSA8Y2hyb25vPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
Ci0jaWYgVVNFKElPU1VSRkFDRSkKLSNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW07CkBAIC01MSw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVjb3JkU25hcHNob3Qo
V2ViUGFnZVByb3h5Jik7CiAjaWYgVVNFKElPU1VSRkFDRSkKLSAgICBzdGQ6OnBhaXI8UmV0YWlu
UHRyPElPU3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKKyAgICBzdGQ6OnBhaXI8UmVmUHRyPFdlYkNvcmU6OklP
U3VyZmFjZT4sIHVpbnQ2NF90PiBzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0qKTsKICNlbHNlCiAgICAgc3RkOjpwYWlyPFJldGFpblB0cjxDR0ltYWdlUmVm
PiwgdWludDY0X3Q+IHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSopOwogI2VuZGlmCkBAIC02NCw4ICs2MSw3IEBAIHByaXZhdGU6CiAKICAgICBzdHJ1Y3Qg
U25hcHNob3QgewogI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgICAgIFJldGFpblB0cjxJT1N1cmZh
Y2VSZWY+IHN1cmZhY2U7Ci0gICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHN1cmZhY2VD
b250ZXh0OworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBzdXJmYWNlOwogI2Vs
c2UKICAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQppbmRleCA2
NDZhZGU3Li5iOGJiMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1ZpZXdTbmFwc2hvdFN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Vmlld1NuYXBzaG90U3RvcmUubW0KQEAgLTI5LDI5ICsyOSw5IEBACiAjaW1wb3J0ICJXZWJCYWNr
Rm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVVVJRC5oPgogCi0jaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBf
X2hhc19pbmNsdWRlKDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPikKLSNpbXBv
cnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVT
RShJT1NVUkZBQ0UpCi0jaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+Ci1leHRlcm4gIkMi
IENHQ29udGV4dFJlZiBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGUoSU9TdXJmYWNlUmVmIHN1cmZh
Y2UsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQs
IHNpemVfdCBiaXRzUGVyUGl4ZWwsIENHQ29sb3JTcGFjZVJlZiBzcGFjZSwgQ0dCaXRtYXBJbmZv
IGJpdG1hcEluZm8pOwotCi0jaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNs
dWRlKDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0ZS5oPikKLSNpbXBvcnQgPElPU3VyZmFjZS9J
T1N1cmZhY2VQcml2YXRlLmg+Ci0jZWxzZQotZW51bSB7Ci0gICAga0lPU3VyZmFjZVB1cmdlYWJs
ZVZvbGF0aWxlID0gMSwKLX07Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi1leHRlcm4gIkMiIElPUmV0dXJuIElP
U3VyZmFjZVNldFB1cmdlYWJsZShJT1N1cmZhY2VSZWYgYnVmZmVyLCB1aW50MzJfdCBuZXdTdGF0
ZSwgdWludDMyX3QgKm9sZFN0YXRlKTsKLSNlbmRpZgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBzdGF0aWMgY29uc3QgaW50IG1heGltdW1TbmFwc2hvdENvdW50ID0gMjA7
CkBAIC0xMTksMzYgKzk5LDE3IEBAIHZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnBydW5lU25hcHNo
b3RzKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQogfQogCiAjaWYgVVNFKElPU1VSRkFDRSkK
LXN0YXRpYyBzdGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIFJldGFpblB0cjxDR0Nv
bnRleHRSZWY+PiBjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKK3N0
YXRpYyBSZWZQdHI8SU9TdXJmYWNlPiBjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2UoQ0dJbWFnZVJl
ZiBpbWFnZSkKIHsKLSAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKLSAgICBzaXpl
X3QgYml0c1BlckNvbXBvbmVudCA9IDg7Ci0gICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDMyOwot
ICAgIHNpemVfdCBieXRlc1BlckVsZW1lbnQgPSA0OwogICAgIHNpemVfdCB3aWR0aCA9IENHSW1h
Z2VHZXRXaWR0aChpbWFnZSk7CiAgICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UpOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9IElPU3VyZmFjZUFsaWduUHJvcGVydHko
a0lPU3VyZmFjZUJ5dGVzUGVyUm93LCB3aWR0aCAqIGJ5dGVzUGVyRWxlbWVudCk7Ci0gICAgQVNT
RVJUKGJ5dGVzUGVyUm93KTsKLQotICAgIHNpemVfdCBhbGxvY1NpemUgPSBJT1N1cmZhY2VBbGln
blByb3BlcnR5KGtJT1N1cmZhY2VBbGxvY1NpemUsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTsKLSAg
ICBBU1NFUlQoYWxsb2NTaXplKTsKLQotICAgIE5TRGljdGlvbmFyeSAqcHJvcGVydGllcyA9IEB7
Ci0gICAgICAgIChpZClrSU9TdXJmYWNlV2lkdGg6IEAod2lkdGgpLAotICAgICAgICAoaWQpa0lP
U3VyZmFjZUhlaWdodDogQChoZWlnaHQpLAotICAgICAgICAoaWQpa0lPU3VyZmFjZVBpeGVsRm9y
bWF0OiBAKHBpeGVsRm9ybWF0KSwKLSAgICAgICAgKGlkKWtJT1N1cmZhY2VCeXRlc1BlckVsZW1l
bnQ6IEAoYnl0ZXNQZXJFbGVtZW50KSwKLSAgICAgICAgKGlkKWtJT1N1cmZhY2VCeXRlc1BlclJv
dzogQChieXRlc1BlclJvdyksCi0gICAgICAgIChpZClrSU9TdXJmYWNlQWxsb2NTaXplOiBAKGFs
bG9jU2l6ZSkKLSAgICB9OwotCi0gICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gc3VyZmFjZSA9
IGFkb3B0Q0YoSU9TdXJmYWNlQ3JlYXRlKChDRkRpY3Rpb25hcnlSZWYpcHJvcGVydGllcykpOwot
ICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRG
aXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0
UmVmPiBzdXJmYWNlQ29udGV4dCA9IGFkb3B0Q0YoQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKHN1
cmZhY2UuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIGJpdHNQZXJDb21wb25lbnQsIGJpdHNQZXJQaXhl
bCwgQ0dJbWFnZUdldENvbG9yU3BhY2UoaW1hZ2UpLCBiaXRtYXBJbmZvKSk7CisKKyAgICBSZWZQ
dHI8SU9TdXJmYWNlPiBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gc3VyZmFjZUNvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBDR0NvbnRleHREcmF3SW1hZ2Uoc3VyZmFjZUNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgd2lkdGgsIGhlaWdodCksIGltYWdlKTsKICAgICBDR0NvbnRleHRGbHVzaChzdXJmYWNlQ29u
dGV4dC5nZXQoKSk7CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3VyZmFjZSwgc3VyZmFj
ZUNvbnRleHQpOworICAgIHJldHVybiBzdXJmYWNlOwogfQogI2VuZGlmCiAKQEAgLTE4MCwxMSAr
MTQxLDkgQEAgdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QoV2ViUGFnZVBy
b3h5JiB3ZWJQYWdlUHJveHkpCiAgICAgc25hcHNob3QuY3JlYXRpb25UaW1lID0gc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFKQotICAgIGF1dG8g
c3VyZmFjZUFuZENvbnRleHQgPSBjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2Uoc25hcHNob3RJbWFn
ZS5nZXQoKSk7Ci0gICAgc25hcHNob3Quc3VyZmFjZSA9IHN1cmZhY2VBbmRDb250ZXh0LmZpcnN0
OwotICAgIHNuYXBzaG90LnN1cmZhY2VDb250ZXh0ID0gc3VyZmFjZUFuZENvbnRleHQuc2Vjb25k
OworICAgIHNuYXBzaG90LnN1cmZhY2UgPSBjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2Uoc25hcHNo
b3RJbWFnZS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTAKLSAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3Qu
c3VyZmFjZS5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlLCBudWxscHRyKTsKKyAg
ICBzbmFwc2hvdC5zdXJmYWNlLT5zZXRJc1B1cmdlYWJsZSh0cnVlKTsKICNlbmRpZgogI2Vsc2UK
ICAgICBzbmFwc2hvdC5pbWFnZSA9IHNuYXBzaG90SW1hZ2U7CkBAIC0xOTUsNyArMTU0LDcgQEAg
dm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QoV2ViUGFnZVByb3h5JiB3ZWJQ
YWdlUHJveHkpCiB9CiAKICNpZiBVU0UoSU9TVVJGQUNFKQotc3RkOjpwYWlyPFJldGFpblB0cjxJ
T1N1cmZhY2VSZWY+LCB1aW50NjRfdD4gVmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90QW5kUmVu
ZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKK3N0ZDo6cGFpcjxSZWZQ
dHI8SU9TdXJmYWNlPiwgdWludDY0X3Q+IFZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdEFuZFJl
bmRlclRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCiAjZWxzZQogc3RkOjpw
YWlyPFJldGFpblB0cjxDR0ltYWdlUmVmPiwgdWludDY0X3Q+IFZpZXdTbmFwc2hvdFN0b3JlOjpz
bmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227333</attachid>
            <date>2014-03-20 14:16:53 -0700</date>
            <delta_ts>2014-03-20 14:46:33 -0700</delta_ts>
            <desc>style</desc>
            <filename>iosurface.diff</filename>
            <type>text/plain</type>
            <size>39677</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZTk0YzcwLi40NzRkYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDMtMjAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIFdlYkNvcmU6OklPU3VyZmFjZSB3cmFwcGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA1MjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkQ0dDb2xvclNw
YWNlKToKKyAgICAgICAgTW92ZSBjYWNoZWRDR0NvbG9yU3BhY2Ugb3V0IHNvIHRoYXQgb3RoZXIg
Y2xpZW50cyBvZiBHcmFwaGljc0NvbnRleHRDRworICAgICAgICBjYW4gdXNlIGl0cyBtYXBwaW5n
IGZyb20gV2ViQ29yZTo6Q29sb3JTcGFjZSAtPiBDR0NvbG9yU3BhY2VSZWYuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckJhY2tpbmdTdG9yZUNhY2hlLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAg
ICAgQWRkIEZJWE1FcyBmb3IgSW1hZ2VCdWZmZXIgdG8gYWRvcHQgV2ViQ29yZTo6SU9TdXJmYWNl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbTogQWRkZWQu
CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0
ZUZyb21NYWNoUG9ydCk6CisgICAgICAgIChJT1N1cmZhY2U6OmNyZWF0ZUZyb21TdXJmYWNlKToK
KyAgICAgICAgKElPU3VyZmFjZTo6SU9TdXJmYWNlKToKKyAgICAgICAgKElPU3VyZmFjZTo6bWF4
aW11bVNpemUpOgorICAgICAgICAoSU9TdXJmYWNlOjpjcmVhdGVNYWNoUG9ydCk6CisgICAgICAg
IChJT1N1cmZhY2U6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKElPU3VyZmFjZTo6ZW5zdXJlUGxh
dGZvcm1Db250ZXh0KToKKyAgICAgICAgKElPU3VyZmFjZTo6ZW5zdXJlR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKElPU3VyZmFjZTo6c3RhdGUpOgorICAgICAgICAoSU9TdXJmYWNlOjppc1B1
cmdlYWJsZSk6CisgICAgICAgIChJT1N1cmZhY2U6OnNldElzUHVyZ2VhYmxlKToKKyAgICAgICAg
KElPU3VyZmFjZTo6aW5Vc2UpOgorICAgICAgICBBZGQgV2ViQ29yZTo6SU9TdXJmYWNlLgorCiAy
MDE0LTAzLTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgd2lsbCBiZSByZXF1aXJlZCBieSB0aGUgaGlz
dG9yeSBpdGVtIGRlY29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDcwZTAyODIuLjdjNGQ5
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yNzAzLDExICsyNzAzLDYgQEAgX19aTjdXZWJD
b3JlMjhnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5RVJOM1dURjZWZWN0b3JJaExtMEVOUzBf
MTVDcmFzaE9uT3ZlcmYKIF93a0NURm9udFRyYW5zZm9ybUdseXBocwogI2VuZGlmCiAKLSNpZiAh
UExBVEZPUk0oSU9TX1NJTVVMQVRPUikKLV93a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUKLV93a0lP
U3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZQotI2VuZGlmCi0KICNpZiBFTkFCTEUoM0RfUkVOREVS
SU5HKQogX1dlYkNvcmVIYXMzRFJlbmRlcmluZwogI2VuZGlmCkBAIC0zMDQ3LDYgKzMwNDIsMTgg
QEAgX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMmNvbnRhaW5zUXVhZEVSS1MwXwogX19aTks3V2Vi
Q29yZTlGbG9hdFF1YWQxM2NvbnRhaW5zUG9pbnRFUktOU18xMEZsb2F0UG9pbnRFCiAjZW5kaWYK
IAorI2lmIFVTRShJT1NVUkZBQ0UpCitfX1pON1dlYkNvcmU5SU9TdXJmYWNlMTRzZXRJc1B1cmdl
YWJsZUViCitfX1pON1dlYkNvcmU5SU9TdXJmYWNlMThjcmVhdGVGcm9tTWFjaFBvcnRFak5TXzEw
Q29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTlJT1N1cmZhY2UyMWVuc3VyZUdyYXBoaWNzQ29udGV4
dEV2CitfX1pON1dlYkNvcmU5SU9TdXJmYWNlMjFlbnN1cmVQbGF0Zm9ybUNvbnRleHRFdgorX19a
TjdXZWJDb3JlOUlPU3VyZmFjZTZjcmVhdGVFTlNfN0ludFNpemVFTlNfMTBDb2xvclNwYWNlRQor
X19aTks3V2ViQ29yZTlJT1N1cmZhY2UxMWNyZWF0ZUltYWdlRXYKK19fWk5LN1dlYkNvcmU5SU9T
dXJmYWNlMTRjcmVhdGVNYWNoUG9ydEV2Citfd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlCitfd2tJ
T1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElPU19URVhU
X0FVVE9TSVpJTkcpCiBfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5cmVzZXRUZXh0QXV0b3Np
emluZ0V2CiBfX1pON1dlYkNvcmU1RnJhbWUyMnNldFRleHRBdXRvc2l6aW5nV2lkdGhFZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDFiNjkxNzQuLmM4NDg5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMzUsNiArMTAzNSw4IEBACiAJCTJCMzY1Qzg0MTUy
NTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQjQyMzVBMDE1MjUwRjYwMDBEQkJDRDggLyogUmVu
ZGVyU1ZHRWxsaXBzZS5oICovOyB9OwogCQkyQkU4RTJDNzEyQTU4OUVDMDBGQUQ1NTAgLyogSFRN
TE1ldGFDaGFyc2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmggKi87IH07CiAJCTJCRThFMkM5MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAg
Ki87IH07CisJCTJEMEI0QUFCMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMEI0QUE5MThEQTFDQ0Qw
MDQzNERFMSAvKiBJT1N1cmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkyRDBCNEFBQzE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwQjRBQUEx
OERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5tbSAqLzsgfTsKIAkJMkQyNTM5NjIxOENFN0Y2
MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMjUzOTYwMThDRTdGNjIwMDI3
MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAgKi87IH07CiAJCTJEMjUz
OTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyNTM5NjExOENF
N0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggKi87IH07CiAJ
CTJEM0EwRTM2MTNBN0Q3NjEwMEU4NUFGMCAvKiBTVkdQYXJzaW5nRXJyb3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0EwRTM1MTNBN0Q3NjEwMEU4
NUFGMCAvKiBTVkdQYXJzaW5nRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNzg5MSw2ICs3ODkzLDggQEAKIAkJMkI0MjM1QTAxNTI1MEY2
MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBw
YXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxNZXRhQ2hh
cnNldFBhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8q
IElPU3VyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJT1N1cmZhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwQjRBQUExOERBMUNDRDAwNDM0REUx
IC8qIElPU3VyZmFjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IElPU3VyZmFjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyNTM5NjAxOENF
N0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyNTM5NjExOENFN0Y2MjAw
MjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDIyNCw2ICsyMDIyOCw4IEBACiAJCUI1MzIwRDY4MTIyQTI0RTkwMDJEMTQ0MCAv
KiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICovLAorCQkJCTJEMEI0QUFB
MThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8sCiAJCQkJQjUzMjBENkExMjJBMjRF
OTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gY29jb2E7CkBAIC0yMjk5Nyw2ICsyMzAwMyw3IEBACiAJCQkJQjJDM0RBMkEwRDAwNkMxRDAw
RUY2RjI2IC8qIENoYXJzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCMjEyNTFG
MTJEMDAzRUYyNjkgLyogQ2hlY2tib3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMjAwOTc3RDNDMDAwNTgyNkQ5IC8q
IENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDgyMzUyMEFGOTJBNzkwMDA0
RjA1NyAvKiBDaHJvbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjcwNTgsNiArMjcwNjUsNyBAQAog
CQkJCUJDNTNEQTQ4MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUExRDEzODEwQTUzMjU1MjAwNjRCRjVGIC8qIERPTVhQYXRoLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODVFOUUwQTIwQUIzQTBDNzAwMDY5Q0QwIC8qIERPTVhQYXRoRXhw
cmVzc2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJEMEI0QUFDMThEQTFDQ0QwMDQzNERFMSAv
KiBJT1N1cmZhY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBNjBBQjNBMEM3MDAwNjlD
RDAgLyogRE9NWFBhdGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDE3NjJFMzE3NjY4
NkVBMDBEODM2QTggLyogRG93blNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTU5
NUUwQjI3QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAppbmRl
eCAxMTVmMGJmLi5iY2E4MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcApAQCAtMTA3LDIwICsxMDcsNiBAQCBDb2xvcjo6Q29sb3IoQ0dD
b2xvclJlZiBjb2xvcikKICAgICBtX3ZhbGlkID0gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBD
R0NvbG9yU3BhY2VSZWYgY2FjaGVkQ0dDb2xvclNwYWNlKENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
LXsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2VEZXZpY2VS
R0I6Ci0gICAgICAgIHJldHVybiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7Ci0gICAgY2FzZSBD
b2xvclNwYWNlU1JHQjoKLSAgICAgICAgcmV0dXJuIHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0gICAg
Y2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgotICAgICAgICByZXR1cm4gbGluZWFyUkdCQ29sb3JT
cGFjZVJlZigpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwotfQotCiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dD
b2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBD
R0Zsb2F0IGNvbXBvbmVudHNbNF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA5YWRjMGQ2Li43ODA0NThl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmgKQEAgLTM2LDYgKzM2LDIwIEBAIENHQ29sb3JTcGFjZVJlZiBkZXZp
Y2VSR0JDb2xvclNwYWNlUmVmKCk7CiBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2VSZWYo
KTsKIENHQ29sb3JTcGFjZVJlZiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCk7CiAKK3N0YXRpYyBp
bmxpbmUgQ0dDb2xvclNwYWNlUmVmIGNhY2hlZENHQ29sb3JTcGFjZShDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNl
RGV2aWNlUkdCOgorICAgICAgICByZXR1cm4gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOworICAg
IGNhc2UgQ29sb3JTcGFjZVNSR0I6CisgICAgICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZVJlZigp
OworICAgIGNhc2UgQ29sb3JTcGFjZUxpbmVhclJHQjoKKyAgICAgICAgcmV0dXJuIGxpbmVhclJH
QkNvbG9yU3BhY2VSZWYoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQmFj
a2luZ1N0b3JlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJCYWNraW5nU3RvcmVDYWNoZS5jcHAKaW5kZXggMmUyZTAzYi4uOWZkNmJlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJCYWNraW5nU3RvcmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJCYWNraW5nU3RvcmVDYWNoZS5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAgc3RhdGljIGNvbnN0IGRvdWJsZSBwdXJnZUludGVydmFsID0gNTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisvLyBGSVhNRTogQWRvcHQgV2ViQ29yZTo6SU9TdXJmYWNlLgogc3RhdGljIFJl
dGFpblB0cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewogICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAppbmRleCA2
Y2E0MTVhNC4uNTRkOGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIGNv
bnN0IGludCBtYXhJT1N1cmZhY2VEaW1lbnNpb24gPSAyMDQ4Owogc3RhdGljIGNvbnN0IGludCBt
YXhJT1N1cmZhY2VEaW1lbnNpb24gPSA0MDk2OwogI2VuZGlmCiAKKy8vIEZJWE1FOiBBZG9wdCBX
ZWJDb3JlOjpJT1N1cmZhY2UuCiBzdGF0aWMgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3JlYXRl
SU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgdW5zaWduZWQgcGl4ZWxGb3Jt
YXQgPSAnQkdSQSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjQ2
NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJT1N1cmZhY2VfaAorI2RlZmluZSBJT1N1
cmZhY2VfaAorCisjaWYgVVNFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSU9TdXJmYWNlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SU9TdXJmYWNlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SU9TdXJmYWNlPiBjcmVhdGUoSW50U2l6ZSwgQ29s
b3JTcGFjZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tTWFj
aFBvcnQobWFjaF9wb3J0X3QsIENvbG9yU3BhY2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElP
U3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVmLCBDb2xvclNwYWNlKTsKKwor
ICAgIHN0YXRpYyBJbnRTaXplIG1heGltdW1TaXplKCk7CisKKyAgICBtYWNoX3BvcnRfdCBjcmVh
dGVNYWNoUG9ydCgpIGNvbnN0OworCisgICAgLy8gQW55IGltYWdlcyBjcmVhdGVkIGZyb20gYSBz
dXJmYWNlIG5lZWQgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHJlbGVhc2luZworICAgIC8vIHRoZSBz
dXJmYWNlLCBvciBhbiBleHBlbnNpdmUgR1BVIHJlYWRiYWNrIGNhbiByZXN1bHQuCisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdlKCkgY29uc3Q7CisKKyAgICBJT1N1cmZhY2VS
ZWYgcGxhdGZvcm1TdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0JiBlbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRSZWYgZW5zdXJlUGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBlbnVtIGNsYXNzIFN1cmZhY2VT
dGF0ZSB7CisgICAgICAgIFZhbGlkLAorICAgICAgICBFbXB0eQorICAgIH07CisKKyAgICAvLyBR
dWVyeWluZyBwdXJnZWFiaWxpdHkgc3RhdGUgY2FuIGJlIGV4cGVuc2l2ZSwgc28gaW4gY2FzZXMg
d2hlcmUgdGhlIHN1cmZhY2UgaXMKKyAgICAvLyBnb2luZyB0byBiZSB1c2VkIGltbWVkaWF0ZWx5
LCB1c2UgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRJc1B1cmdlYWJsZSB0bworICAgIC8vIGRldGVy
bWluZSB3aGV0aGVyIHRoZSBkYXRhIHdhcyBwdXJnZWQsIGluc3RlYWQgb2YgZmlyc3QgY2FsbGlu
ZyBzdGF0ZSgpIG9yIGlzUHVyZ2VhYmxlKCkuCisgICAgU3VyZmFjZVN0YXRlIHN0YXRlKCkgY29u
c3Q7CisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKKyAgICBib29sIGlzUHVyZ2VhYmxlKCkgY29uc3Q7CisgICAgU3VyZmFjZVN0YXRl
IHNldElzUHVyZ2VhYmxlKGJvb2wpOworI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA5MAorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgc2l6ZV90IHRvdGFsQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsQnl0
ZXM7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KKworICAgIGJvb2wgaW5Vc2UoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJT1N1
cmZhY2UoSW50U2l6ZSwgQ29sb3JTcGFjZSk7CisgICAgSU9TdXJmYWNlKElPU3VyZmFjZVJlZiwg
Q29sb3JTcGFjZSk7CisKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKKyAgICBzaXplX3QgbV90b3RhbEJ5dGVzOworCisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQ7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
bV9jZ0NvbnRleHQ7CisKKyAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFKQor
CisjZW5kaWYgLy8gSU9TdXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hYmY4ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJJT1N1cmZhY2UuaCIKKworI2lmIFVTRShJT1NVUkZBQ0UpCisKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaWYgX19oYXNfaW5jbHVkZSg8SU9TdXJmYWNl
L0lPU3VyZmFjZVByaXZhdGUuaD4pCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0
ZS5oPgorI2Vsc2UKK2VudW0geworICAgIGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSA9
IDAsCisgICAga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlID0gMSwKKyAgICBrSU9TdXJmYWNl
UHVyZ2VhYmxlRW1wdHkgPSAyLAorICAgIGtJT1N1cmZhY2VQdXJnZWFibGVLZWVwQ3VycmVudCA9
IDMsCit9OworI2VuZGlmCisKK2V4dGVybiAiQyIgeworQ0dDb250ZXh0UmVmIENHSU9TdXJmYWNl
Q29udGV4dENyZWF0ZShJT1N1cmZhY2VSZWYsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QsIHNpemVf
dCwgQ0dDb2xvclNwYWNlUmVmLCBDR0JpdG1hcEluZm8pOworQ0dJbWFnZVJlZiBDR0lPU3VyZmFj
ZUNvbnRleHRDcmVhdGVJbWFnZShDR0NvbnRleHRSZWYpOworSU9SZXR1cm4gSU9TdXJmYWNlU2V0
UHVyZ2VhYmxlKElPU3VyZmFjZVJlZiwgdWludDMyX3QsIHVpbnQzMl90ICopOworfQorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUGFzc1JlZlB0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6
Y3JlYXRlKEludFNpemUgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSU9TdXJmYWNlKHNpemUsIGNvbG9yU3BhY2UpKTsKK30KKworUGFzc1Jl
ZlB0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbU1hY2hQb3J0KG1hY2hfcG9ydF90
IG1hY2hQb3J0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgUmV0YWluUHRyPElPU3Vy
ZmFjZVJlZj4gc3VyZmFjZSA9IGFkb3B0Q0YoSU9TdXJmYWNlTG9va3VwRnJvbU1hY2hQb3J0KG1h
Y2hQb3J0KSk7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6Y3JlYXRlRnJvbVN1cmZhY2Uoc3VyZmFj
ZS5nZXQoKSwgY29sb3JTcGFjZSk7Cit9CisKK1Bhc3NSZWZQdHI8SU9TdXJmYWNlPiBJT1N1cmZh
Y2U6OmNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJT1N1cmZhY2Uoc3VyZmFjZSwg
Y29sb3JTcGFjZSkpOworfQorCitJT1N1cmZhY2U6OklPU3VyZmFjZShJbnRTaXplIHNpemUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAg
ICwgbV9zaXplKHNpemUpCit7CisgICAgdW5zaWduZWQgcGl4ZWxGb3JtYXQgPSAnQkdSQSc7Cisg
ICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKKyAgICBpbnQgd2lkdGggPSBzaXplLndp
ZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICBzaXplX3QgYnl0
ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywg
d2lkdGggKiBieXRlc1BlckVsZW1lbnQpOworICAgIEFTU0VSVChieXRlc1BlclJvdyk7CisKKyAg
ICBtX3RvdGFsQnl0ZXMgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VBbGxvY1Np
emUsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTsKKyAgICBBU1NFUlQobV90b3RhbEJ5dGVzKTsKKwor
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7CisgICAgICAgIChpZClrSU9TdXJmYWNlV2lk
dGg6IEAod2lkdGgpLAorICAgICAgICAoaWQpa0lPU3VyZmFjZUhlaWdodDogQChoZWlnaHQpLAor
ICAgICAgICAoaWQpa0lPU3VyZmFjZVBpeGVsRm9ybWF0OiBAKHBpeGVsRm9ybWF0KSwKKyAgICAg
ICAgKGlkKWtJT1N1cmZhY2VCeXRlc1BlckVsZW1lbnQ6IEAoYnl0ZXNQZXJFbGVtZW50KSwKKyAg
ICAgICAgKGlkKWtJT1N1cmZhY2VCeXRlc1BlclJvdzogQChieXRlc1BlclJvdyksCisgICAgICAg
IChpZClrSU9TdXJmYWNlQWxsb2NTaXplOiBAKG1fdG90YWxCeXRlcykKKyAgICB9OworCisgICAg
bV9zdXJmYWNlID0gYWRvcHRDRihJT1N1cmZhY2VDcmVhdGUoKENGRGljdGlvbmFyeVJlZilvcHRp
b25zKSk7CisgICAgQVNTRVJUKG1fc3VyZmFjZSk7Cit9CisKK0lPU3VyZmFjZTo6SU9TdXJmYWNl
KElPU3VyZmFjZVJlZiBzdXJmYWNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2Nv
bG9yU3BhY2UoY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQoreworICAgIG1f
c2l6ZSA9IEludFNpemUoSU9TdXJmYWNlR2V0V2lkdGgoc3VyZmFjZSksIElPU3VyZmFjZUdldEhl
aWdodChzdXJmYWNlKSk7CisgICAgbV90b3RhbEJ5dGVzID0gSU9TdXJmYWNlR2V0QWxsb2NTaXpl
KHN1cmZhY2UpOworfQorCitJbnRTaXplIElPU3VyZmFjZTo6bWF4aW11bVNpemUoKQoreworICAg
IHJldHVybiBJbnRTaXplKElPU3VyZmFjZUdldFByb3BlcnR5TWF4aW11bShrSU9TdXJmYWNlV2lk
dGgpLCBJT1N1cmZhY2VHZXRQcm9wZXJ0eU1heGltdW0oa0lPU3VyZmFjZUhlaWdodCkpOworfQor
CittYWNoX3BvcnRfdCBJT1N1cmZhY2U6OmNyZWF0ZU1hY2hQb3J0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSU9TdXJmYWNlQ3JlYXRlTWFjaFBvcnQobV9zdXJmYWNlLmdldCgpKTsKK30KKworUmV0
YWluUHRyPENHSW1hZ2VSZWY+IElPU3VyZmFjZTo6Y3JlYXRlSW1hZ2UoKSBjb25zdAoreworICAg
IGlmICghbV9jZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IGFkb3B0Q0YoQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UobV9jZ0NvbnRleHQuZ2V0KCkp
KTsKK30KKworQ0dDb250ZXh0UmVmIElPU3VyZmFjZTo6ZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkK
K3sKKyAgICBpZiAobV9jZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBtX2NnQ29udGV4dC5nZXQo
KTsKKworICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKKyAgICBzaXplX3QgYml0c1Bl
ckNvbXBvbmVudCA9IDg7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDMyOworICAgIG1fY2dD
b250ZXh0ID0gYWRvcHRDRihDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGUobV9zdXJmYWNlLmdldCgp
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBiaXRzUGVyQ29tcG9uZW50LCBiaXRz
UGVyUGl4ZWwsIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBiaXRtYXBJbmZvKSk7
CisKKyAgICByZXR1cm4gbV9jZ0NvbnRleHQuZ2V0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYg
SU9TdXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQoreworICAgIGlmIChtX2dyYXBoaWNz
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKKworICAgIG1fZ3Jh
cGhpY3NDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dChlbnN1cmVQbGF0Zm9y
bUNvbnRleHQoKSkpOworCisgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKK30KKworSU9T
dXJmYWNlOjpTdXJmYWNlU3RhdGUgSU9TdXJmYWNlOjpzdGF0ZSgpIGNvbnN0Cit7CisjaWYgUExB
VEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAg
ICB1aW50MzJfdCBwcmV2aW91c1N0YXRlOworICAgIElPUmV0dXJuIHJldCA9IElPU3VyZmFjZVNl
dFB1cmdlYWJsZShtX3N1cmZhY2UuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVLZWVwQ3VycmVu
dCwgJnByZXZpb3VzU3RhdGUpOworICAgIEFTU0VSVF9VTlVTRUQocmV0LCByZXQgPT0ga0lPUmV0
dXJuU3VjY2Vzcyk7CisgICAgcmV0dXJuIHByZXZpb3VzU3RhdGUgPT0ga0lPU3VyZmFjZVB1cmdl
YWJsZUVtcHR5ID8gSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGU6OkVtcHR5IDogSU9TdXJmYWNlOjpT
dXJmYWNlU3RhdGU6OlZhbGlkOworI2Vsc2UKKyAgICByZXR1cm4gU3VyZmFjZVN0YXRlOjpWYWxp
ZDsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTAKK2Jvb2wgSU9TdXJmYWNlOjppc1B1cmdlYWJsZSgpIGNvbnN0
Cit7CisgICAgdWludDMyX3QgcHJldmlvdXNTdGF0ZTsKKyAgICBJT1JldHVybiByZXQgPSBJT1N1
cmZhY2VTZXRQdXJnZWFibGUobV9zdXJmYWNlLmdldCgpLCBrSU9TdXJmYWNlUHVyZ2VhYmxlS2Vl
cEN1cnJlbnQsICZwcmV2aW91c1N0YXRlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09
IGtJT1JldHVyblN1Y2Nlc3MpOworICAgIHJldHVybiBwcmV2aW91c1N0YXRlICE9IGtJT1N1cmZh
Y2VQdXJnZWFibGVOb25Wb2xhdGlsZTsKK30KKworSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgSU9T
dXJmYWNlOjpzZXRJc1B1cmdlYWJsZShib29sIGlzUHVyZ2VhYmxlKQoreworICAgIHVpbnQzMl90
IHByZXZpb3VzU3RhdGU7CisgICAgSU9SZXR1cm4gcmV0ID0gSU9TdXJmYWNlU2V0UHVyZ2VhYmxl
KG1fc3VyZmFjZS5nZXQoKSwgaXNQdXJnZWFibGUgPyBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRp
bGUgOiBrSU9TdXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGUsICZwcmV2aW91c1N0YXRlKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJldCwgcmV0ID09IGtJT1JldHVyblN1Y2Nlc3MpOworCisgICAgaWYg
KHByZXZpb3VzU3RhdGUgPT0ga0lPU3VyZmFjZVB1cmdlYWJsZUVtcHR5KQorICAgICAgICByZXR1
cm4gSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGU6OkVtcHR5OworCisgICAgcmV0dXJuIElPU3VyZmFj
ZTo6U3VyZmFjZVN0YXRlOjpWYWxpZDsKK30KKyNlbmRpZgorCitib29sIElPU3VyZmFjZTo6aW5V
c2UoKSBjb25zdAoreworICAgIHJldHVybiBJT1N1cmZhY2VJc0luVXNlKG1fc3VyZmFjZS5nZXQo
KSk7Cit9CisKKyNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI2YzU3ZTYu
LjM4Njc0ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxNC0wMy0yMCAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgV2ViQ29yZTo6
SU9TdXJmYWNlIHdyYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMDUyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTo6ZW5jb2RlKToKKyAgICAgICAgKFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpkZWNvZGUpOgorICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3Bs
YXkpOgorICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmFwcGx5QmFja2luZ1N0b3Jl
VG9MYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lw
ZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92
ZVN3aXBlU25hcHNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250
cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lw
ZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92
ZVN3aXBlU25hcHNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QpOgorICAgICAgICBBZG9wdCBXZWJD
b3JlOjpJT1N1cmZhY2UuCisKIDIwMTQtMDMtMTkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzOiBTd2lwZSBnZXN0
dXJlIGNhbiB0cmFjayB2ZXJ0aWNhbCBtb3ZlbWVudCBpbnN0ZWFkIG9mIGhvcml6b250YWwgbW92
ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUuaAppbmRleCAyNDVkODU4Li45M2QyNjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCkBAIC0yOCwxMiArMjgs
OSBAQAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVnaW9uLmg+CiAKLSNpZiBVU0UoSU9TVVJGQUNFKQotI2luY2x1ZGUgPElPU3VyZmFj
ZS9JT1N1cmZhY2UuaD4KLSNlbmRpZgotCiBPQkpDX0NMQVNTIENBTGF5ZXI7CiAKIC8vIEZJWE1F
OiBNYWtlIFBsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgT2JqZWN0aXZlLUMgc28gd2UgY2FuIGlu
Y2x1ZGUgV2ViTGF5ZXIuaCBoZXJlIGFuZCBzaGFyZSB0aGUgdHlwZWRlZi4KQEAgLTkzLDcgKzkw
LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fZnJvbnRCdWZm
ZXI7CiAjaWYgVVNFKElPU1VSRkFDRSkKLSAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBtX2Zy
b250U3VyZmFjZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBtX2Zyb250U3VyZmFj
ZTsKICNlbmRpZgogCiAgICAgYm9vbCBtX2FjY2VsZXJhdGVzRHJhd2luZzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4
IGQ1MTdlYjYuLjc0MDRkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMzMsMjMgKzMzLDEzIEBACiAjaW1wb3J0
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9JT1N1cmZhY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViTGF5ZXIuaD4KIAogI2lmIFVT
RShJT1NVUkZBQ0UpCiAjaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgogI2VuZGlmCiAKLSNpZiBf
X2hhc19pbmNsdWRlKDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXNQcml2
Lmg+KQotI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzUHJp
di5oPgotI2VuZGlmCi0KLWV4dGVybiAiQyIgewotI2lmIFVTRShJT1NVUkZBQ0UpCi1DR0NvbnRl
eHRSZWYgQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKElPU3VyZmFjZVJlZiwgc2l6ZV90LCBzaXpl
X3QsIHNpemVfdCwgc2l6ZV90LCBDR0NvbG9yU3BhY2VSZWYsIENHQml0bWFwSW5mbyk7Ci0jZW5k
aWYKLUNHSW1hZ2VSZWYgQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoQ0dDb250ZXh0UmVm
KTsKLX0KLQogI2lmIF9faGFzX2luY2x1ZGUoPFF1YXJ0ekNvcmUvQ0FMYXllclByaXZhdGUuaD4p
CiAjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5ZXJQcml2YXRlLmg+CiAjZW5kaWYKQEAgLTkzLDcg
KzgzLDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZW5jb2RlKElQQzo6QXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiAjaWYgVVNFKElPU1VSRkFDRSkKICAgICBpZiAo
bV9hY2NlbGVyYXRlc0RyYXdpbmcpIHsKLSAgICAgICAgbWFjaF9wb3J0X3QgcG9ydCA9IElPU3Vy
ZmFjZUNyZWF0ZU1hY2hQb3J0KG1fZnJvbnRTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgbWFjaF9w
b3J0X3QgcG9ydCA9IG1fZnJvbnRTdXJmYWNlLT5jcmVhdGVNYWNoUG9ydCgpOwogICAgICAgICBl
bmNvZGVyIDw8IElQQzo6TWFjaFBvcnQocG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTI1LDcgKzExNSw3IEBAIGJvb2wgUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmU6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUmVt
b3RlTGF5ZXJCCiAgICAgICAgIElQQzo6TWFjaFBvcnQgbWFjaFBvcnQ7CiAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWFjaFBvcnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICByZXN1bHQubV9mcm9udFN1cmZhY2UgPSBhZG9wdENGKElPU3VyZmFjZUxvb2t1cEZyb21N
YWNoUG9ydChtYWNoUG9ydC5wb3J0KCkpKTsKKyAgICAgICAgcmVzdWx0Lm1fZnJvbnRTdXJmYWNl
ID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tTWFjaFBvcnQobWFjaFBvcnQucG9ydCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgbWFjaFBvcnQucG9ydCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTUxLDQ0ICsxNDEsNiBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzZXROZWVkc0Rp
c3BsYXkoKQogICAgIHNldE5lZWRzRGlzcGxheShJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkp
OwogfQogCi0jaWYgVVNFKElPU1VSRkFDRSkKLXN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBjcmVhdGVJT1N1cmZhY2VDb250ZXh0KElPU3VyZmFjZVJlZiBzdXJmYWNlLCBJbnRTaXplIHNp
emUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlKQotewotICAgIGlmICghc3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7
Ci0gICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQgPSA4OwotICAgIHNpemVfdCBiaXRzUGVyUGl4
ZWwgPSAzMjsKLSAgICByZXR1cm4gYWRvcHRDRihDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGUoc3Vy
ZmFjZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBiaXRzUGVyQ29tcG9uZW50LCBiaXRz
UGVyUGl4ZWwsIGNvbG9yU3BhY2UsIGJpdG1hcEluZm8pKTsKLX0KLQotc3RhdGljIFJldGFpblB0
cjxJT1N1cmZhY2VSZWY+IGNyZWF0ZUlPU3VyZmFjZShJbnRTaXplIHNpemUpCi17Ci0gICAgdW5z
aWduZWQgcGl4ZWxGb3JtYXQgPSAnQkdSQSc7Ci0gICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50
ID0gNDsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNp
emUuaGVpZ2h0KCk7Ci0KLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblBy
b3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRlc1BlckVsZW1lbnQpOwot
ICAgIEFTU0VSVChieXRlc1BlclJvdyk7Ci0KLSAgICBzaXplX3QgYWxsb2NTaXplID0gSU9TdXJm
YWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NTaXplLCBoZWlnaHQgKiBieXRlc1BlclJv
dyk7Ci0gICAgQVNTRVJUKGFsbG9jU2l6ZSk7Ci0KLSAgICBOU0RpY3Rpb25hcnkgKmRpY3QgPSBA
ewotICAgICAgICAoaWQpa0lPU3VyZmFjZVdpZHRoOiBAKHdpZHRoKSwKLSAgICAgICAgKGlkKWtJ
T1N1cmZhY2VIZWlnaHQ6IEAoaGVpZ2h0KSwKLSAgICAgICAgKGlkKWtJT1N1cmZhY2VQaXhlbEZv
cm1hdDogQChwaXhlbEZvcm1hdCksCi0gICAgICAgIChpZClrSU9TdXJmYWNlQnl0ZXNQZXJFbGVt
ZW50OiBAKGJ5dGVzUGVyRWxlbWVudCksCi0gICAgICAgIChpZClrSU9TdXJmYWNlQnl0ZXNQZXJS
b3c6IEAoYnl0ZXNQZXJSb3cpLAotICAgICAgICAoaWQpa0lPU3VyZmFjZUFsbG9jU2l6ZTogQChh
bGxvY1NpemUpCi0gICAgfTsKLQotICAgIHJldHVybiBhZG9wdENGKElPU3VyZmFjZUNyZWF0ZSgo
Q0ZEaWN0aW9uYXJ5UmVmKWRpY3QpKTsKLX0KLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFKQotCiBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZUltYWdl
Rm9yRnJvbnRCdWZmZXIoKSBjb25zdAogewogICAgIGlmICghbV9mcm9udEJ1ZmZlciB8fCBtX2Fj
Y2VsZXJhdGVzRHJhd2luZykKQEAgLTIzMywzMCArMTg1LDIyIEBAIGJvb2wgUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmU6OmRpc3BsYXkoKQogCiAjaWYgVVNFKElPU1VSRkFDRSkKICAgICBpZiAobV9h
Y2NlbGVyYXRlc0RyYXdpbmcpIHsKLSAgICAgICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gYmFj
a1N1cmZhY2UgPSBjcmVhdGVJT1N1cmZhY2UoZXhwYW5kZWRTY2FsZWRTaXplKTsKLSAgICAgICAg
UmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gY3JlYXRlSU9TdXJmYWNlQ29udGV4
dChiYWNrU3VyZmFjZS5nZXQoKSwgZXhwYW5kZWRTY2FsZWRTaXplLCBzUkdCQ29sb3JTcGFjZVJl
ZigpKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY2dDb250ZXh0LmdldCgpKTsK
KyAgICAgICAgUmVmUHRyPElPU3VyZmFjZT4gYmFja1N1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0
ZShleHBhbmRlZFNjYWxlZFNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSBiYWNrU3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0
KCk7CiAgICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGV4
cGFuZGVkU2NhbGVkU2l6ZSkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtZXhwYW5kZWRTY2FsZWRTaXplLmhl
aWdodCgpKTsKIAotICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBmcm9udENvbnRleHQ7
CiAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBmcm9udEltYWdlOwotICAgICAgICBpZiAo
bV9mcm9udFN1cmZhY2UpIHsKLSAgICAgICAgICAgIGZyb250Q29udGV4dCA9IGNyZWF0ZUlPU3Vy
ZmFjZUNvbnRleHQobV9mcm9udFN1cmZhY2UuZ2V0KCksIGV4cGFuZGVkSW50U2l6ZShtX3NpemUg
KiBtX3NjYWxlKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7Ci0gICAgICAgICAgICBmcm9udEltYWdl
ID0gYWRvcHRDRihDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShmcm9udENvbnRleHQuZ2V0
KCkpKTsKLSAgICAgICAgfQotCisgICAgICAgIGlmIChtX2Zyb250U3VyZmFjZSkKKyAgICAgICAg
ICAgIGZyb250SW1hZ2UgPSBtX2Zyb250U3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKICAgICAgICAg
ZHJhd0luQ29udGV4dChjb250ZXh0LCBmcm9udEltYWdlLmdldCgpKTsKLSAgICAgICAgbV9mcm9u
dFN1cmZhY2UgPSBiYWNrU3VyZmFjZTsKIAogICAgICAgICAvLyBJZiBvdXIgZnJvbnRJbWFnZSBp
cyBkZXJpdmVkIGZyb20gYW4gSU9TdXJmYWNlLCB3ZSBuZWVkIHRvCiAgICAgICAgIC8vIGRlc3Ry
b3kgdGhlIGltYWdlIGJlZm9yZSB0aGUgQ0dDb250ZXh0IGl0J3MgZGVyaXZlZCBmcm9tLAogICAg
ICAgICAvLyBzbyB0aGF0IHRoZSBjb250ZXh0IGRvZXNuJ3QgbWFrZSBhIENQVSBjb3B5IG9mIHRo
ZSBzdXJmYWNlIGRhdGEuCi0gICAgICAgIGlmIChmcm9udEltYWdlKSB7Ci0gICAgICAgICAgICBm
cm9udEltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIEFTU0VSVChmcm9udENvbnRleHQpOwot
ICAgICAgICB9CisgICAgICAgIGZyb250SW1hZ2UgPSBudWxscHRyOworICAgICAgICBtX2Zyb250
U3VyZmFjZSA9IGJhY2tTdXJmYWNlOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTM2Nyw3ICszMTEsNyBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjphcHBseUJhY2tp
bmdTdG9yZVRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIpCiB7CiAjaWYgVVNFKElPU1VSRkFDRSkKICAg
ICBpZiAoYWNjZWxlcmF0ZXNEcmF3aW5nKCkpCi0gICAgICAgIGxheWVyLmNvbnRlbnRzID0gKGlk
KW1fZnJvbnRTdXJmYWNlLmdldCgpOworICAgICAgICBsYXllci5jb250ZW50cyA9IChpZCltX2Zy
b250U3VyZmFjZS0+cGxhdGZvcm1TdXJmYWNlKCk7CiAgICAgZWxzZQogICAgICAgICBsYXllci5j
b250ZW50cyA9IChpZCljcmVhdGVJbWFnZUZvckZyb250QnVmZmVyKCkuZ2V0KCk7CiAjZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlcklPUy5tbQppbmRleCBlZDA5YjZkLi5iM2FjZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQpA
QCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9JT1N1cmZhY2UuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2lt
cG9ydCA8VUlLaXQvVUlTY3JlZW5FZGdlUGFuR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQg
PFVJS2l0L1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nX1ByaXZhdGUuaD4KQEAgLTQzLDEx
ICs0NCw2IEBACiAjaW1wb3J0IDxVSUtpdC9fVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0
aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9fVUlOYXZpZ2F0aW9uUGFyYWxsYXhUcmFuc2l0aW9uLmg+
CiAKLSNpZiBVU0UoSU9TVVJGQUNFKQotI2ltcG9ydCA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgot
I2ltcG9ydCA8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZhdGUuaD4KLSNlbmRpZgotCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBXS1N3aXBlVHJhbnNpdGlvbkNvbnRyb2xs
ZXIgOiBOU09iamVjdCA8X1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2VEZWxl
Z2F0ZT4KQEAgLTE1NywxMSArMTUzLDEwIEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpi
ZWdpblN3aXBlR2VzdHVyZShfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uCiAgICAg
bV9zbmFwc2hvdFZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltt
X2xpdmVTd2lwZVZpZXcgZnJhbWVdXSk7CiAgICAgaWYgKHNuYXBzaG90KSB7CiAjaWYgVVNFKElP
U1VSRkFDRSkKLSAgICAgICAgdWludDMyX3QgcHVyZ2VhYmlsaXR5U3RhdGUgPSBrSU9TdXJmYWNl
UHVyZ2VhYmxlTm9uVm9sYXRpbGU7Ci0gICAgICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShzbmFw
c2hvdC5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0aWxlLCAmcHVyZ2VhYmlsaXR5
U3RhdGUpOwotICAgICAgICAKLSAgICAgICAgaWYgKHB1cmdlYWJpbGl0eVN0YXRlICE9IGtJT1N1
cmZhY2VQdXJnZWFibGVFbXB0eSkKKyAgICAgICAgaWYgKHNuYXBzaG90LT5zZXRJc1B1cmdlYWJs
ZShmYWxzZSkgPT0gSU9TdXJmYWNlOjpTdXJmYWNlU3RhdGU6OlZhbGlkKSB7CiAgICAgICAgICAg
ICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzID0gKGlkKXNuYXBzaG90LmdldCgpOwor
ICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFN1cmZhY2UgPSBzbmFwc2hvdDsKKyAg
ICAgICAgfQogI2Vsc2UKICAgICAgICAgW21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50cyA9
IChpZClzbmFwc2hvdC5nZXQoKTsKICNlbmRpZgpAQCAtMjYzLDkgKzI1OCw5IEBAIHZvaWQgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBzaG90KCkKICAgICAgICAgcmV0dXJu
OwogICAgIAogI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgSU9TdXJmYWNlUmVmIHNuYXBzaG90U3Vy
ZmFjZSA9IChJT1N1cmZhY2VSZWYpW21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50czsKLSAg
ICBpZiAoc25hcHNob3RTdXJmYWNlKQotICAgICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25h
cHNob3RTdXJmYWNlLCBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxwdHIpOworICAg
IGlmIChtX2N1cnJlbnRTd2lwZVNuYXBzaG90U3VyZmFjZSkKKyAgICAgICAgbV9jdXJyZW50U3dp
cGVTbmFwc2hvdFN1cmZhY2UtPnNldElzUHVyZ2VhYmxlKHRydWUpOworICAgIG1fY3VycmVudFN3
aXBlU25hcHNob3RTdXJmYWNlID0gbnVsbHB0cjsKICNlbmRpZgogICAgIAogICAgIFttX3NuYXBz
aG90VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IDMyZWM1NWMuLjMxZTRk
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuaApAQCAtNDMsNiArNDMsMTAgQEAgT0JKQ19DTEFTUyBOU0V2ZW50OwogT0JK
Q19DTEFTUyBOU1ZpZXc7CiAjZW5kaWYKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSU9T
dXJmYWNlOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbTsKQEAgLTEyMSw2ICsxMjUsMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICBXZWJDb3Jl
OjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IG1fc3dpcGVXYXRjaGRvZ1RpbWVyOwogCisj
aWYgVVNFKElPU1VSRkFDRSkKKyAgICBSZWZQdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBtX2N1cnJl
bnRTd2lwZVNuYXBzaG90U3VyZmFjZTsKKyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBkb3VibGUgbV9tYWduaWZpY2F0aW9uOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9tYWdu
aWZpY2F0aW9uT3JpZ2luOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQppbmRleCBlYmZjOWRkLi5lOGZlNzI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJv
bGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlck1hYy5tbQpAQCAtNDAsMjIgKzQwLDkgQEAKICNpbXBvcnQgIldlYlByb2Nlc3NQ
cm94eS5oIgogI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZUNBTGF5ZXJFeHRyYXMuaD4KIAotI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkg
JiYgX19oYXNfaW5jbHVkZSg8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZhdGUuaD4pCi0jaW1wb3J0
IDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0ZS5oPgotI2Vsc2UKLWVudW0gewotICAgIGtJT1N1
cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSA9IDAsCi0gICAga0lPU3VyZmFjZVB1cmdlYWJsZVZv
bGF0aWxlID0gMSwKLSAgICBrSU9TdXJmYWNlUHVyZ2VhYmxlRW1wdHkgPSAyLAotfTsKLSNlbmRp
ZgotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi1leHRlcm4g
IkMiIElPUmV0dXJuIElPU3VyZmFjZVNldFB1cmdlYWJsZShJT1N1cmZhY2VSZWYgYnVmZmVyLCB1
aW50MzJfdCBuZXdTdGF0ZSwgdWludDMyX3QgKm9sZFN0YXRlKTsKLSNlbmRpZgotCiAjaWYgZGVm
aW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxRdWFydHpDb3JlL1F1YXJ0ekNv
cmVQcml2YXRlLmg+KQogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgog
I2Vsc2UKQEAgLTM3MywxNyArMzYwLDE3IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpi
ZWdpblN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtCiAgICAg
bV9zd2lwZVNuYXBzaG90TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwog
ICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Q0dDb2xvckdldENv
bnN0YW50Q29sb3Ioa0NHQ29sb3JXaGl0ZSldOwogCi0gICAgUmV0YWluUHRyPElPU3VyZmFjZVJl
Zj4gc25hcHNob3QgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNob3RBbmRSZW5k
ZXJUcmVlU2l6ZSh0YXJnZXRJdGVtKS5maXJzdDsKKyAgICBSZWZQdHI8SU9TdXJmYWNlPiBzbmFw
c2hvdCA9IFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5zbmFwc2hvdEFuZFJlbmRlclRyZWVT
aXplKHRhcmdldEl0ZW0pLmZpcnN0OwogCiAgICAgaWYgKHNuYXBzaG90KSB7CiAjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAgICAgIHVpbnQzMl90IHB1cmdl
YWJpbGl0eVN0YXRlID0ga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0aWxlOwotICAgICAgICBJ
T1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3QuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVO
b25Wb2xhdGlsZSwgJnB1cmdlYWJpbGl0eVN0YXRlKTsKLQotICAgICAgICBpZiAocHVyZ2VhYmls
aXR5U3RhdGUgIT0ga0lPU3VyZmFjZVB1cmdlYWJsZUVtcHR5KQotICAgICAgICAgICAgW21fc3dp
cGVTbmFwc2hvdExheWVyIHNldENvbnRlbnRzOihpZClzbmFwc2hvdC5nZXQoKV07CisgICAgICAg
IGlmIChzbmFwc2hvdC0+c2V0SXNQdXJnZWFibGUoZmFsc2UpID09IElPU3VyZmFjZTo6U3VyZmFj
ZVN0YXRlOjpWYWxpZCkgeworICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFN1cmZh
Y2UgPSBzbmFwc2hvdDsKKyAgICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250
ZW50czooaWQpc25hcHNob3QtPnBsYXRmb3JtU3VyZmFjZSgpXTsKKyAgICAgICAgfQogI2Vsc2UK
LSAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldENvbnRlbnRzOihpZClzbmFwc2hvdC5n
ZXQoKV07CisgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RTdXJmYWNlID0gc25hcHNob3Q7
CisgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50czooaWQpc25hcHNob3Qt
PnBsYXRmb3JtU3VyZmFjZSgpXTsKICNlbmRpZgogICAgIH0KIApAQCAtNTMxLDEwICs1MTgsMTAg
QEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBlU25hcHNob3QoKQogICAg
ICAgICByZXR1cm47CiAKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKLSAgICBJT1N1cmZhY2VSZWYgc25hcHNob3RTdXJmYWNlID0gKElPU3VyZmFjZVJlZilbbV9z
d2lwZVNuYXBzaG90TGF5ZXIgY29udGVudHNdOwotICAgIGlmIChzbmFwc2hvdFN1cmZhY2UpCi0g
ICAgICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShzbmFwc2hvdFN1cmZhY2UsIGtJT1N1cmZhY2VQ
dXJnZWFibGVWb2xhdGlsZSwgbnVsbHB0cik7CisgICAgaWYgKG1fY3VycmVudFN3aXBlU25hcHNo
b3RTdXJmYWNlKQorICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90U3VyZmFjZS0+c2V0SXNQ
dXJnZWFibGUodHJ1ZSk7CiAjZW5kaWYKKyAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90U3VyZmFj
ZSA9IG51bGxwdHI7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDogbV9jdXJyZW50U3dp
cGVMaXZlTGF5ZXJzKQogICAgICAgICBbbGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RJ
ZGVudGl0eV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdT
bmFwc2hvdFN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hv
dFN0b3JlLmgKaW5kZXggZjhjODQwZS4uMmYwZWMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaApAQCAtMjYsMTYgKzI2LDEzIEBACiAj
aWZuZGVmIFZpZXdTbmFwc2hvdFN0b3JlX2gKICNkZWZpbmUgVmlld1NuYXBzaG90U3RvcmVfaAog
CisjaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
LSNpZiBVU0UoSU9TVVJGQUNFKQotI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bTsKQEAgLTUxLDcgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNvcmRTbmFwc2hvdChX
ZWJQYWdlUHJveHkmKTsKICNpZiBVU0UoSU9TVVJGQUNFKQotICAgIHN0ZDo6cGFpcjxSZXRhaW5Q
dHI8SU9TdXJmYWNlUmVmPiwgdWludDY0X3Q+IHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUoV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSopOworICAgIHN0ZDo6cGFpcjxSZWZQdHI8V2ViQ29yZTo6SU9T
dXJmYWNlPiwgdWludDY0X3Q+IHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUoV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSopOwogI2Vsc2UKICAgICBzdGQ6OnBhaXI8UmV0YWluUHRyPENHSW1hZ2VSZWY+
LCB1aW50NjRfdD4gc25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKik7CiAjZW5kaWYKQEAgLTY0LDggKzYxLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCBT
bmFwc2hvdCB7CiAjaWYgVVNFKElPU1VSRkFDRSkKLSAgICAgICAgUmV0YWluUHRyPElPU3VyZmFj
ZVJlZj4gc3VyZmFjZTsKLSAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gc3VyZmFjZUNv
bnRleHQ7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IHN1cmZhY2U7CiAjZWxz
ZQogICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCmluZGV4IDY0
NmFkZTcuLmI4YmIyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Vmlld1NuYXBzaG90U3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9W
aWV3U25hcHNob3RTdG9yZS5tbQpAQCAtMjksMjkgKzI5LDkgQEAKICNpbXBvcnQgIldlYkJhY2tG
b3J3YXJkTGlzdC5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0lPU3VyZmFjZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9VVUlELmg+CiAKLSNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9f
aGFzX2luY2x1ZGUoPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+KQotI2ltcG9y
dCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljc1ByaXZhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNF
KElPU1VSRkFDRSkKLSNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KLWV4dGVybiAiQyIg
Q0dDb250ZXh0UmVmIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZShJT1N1cmZhY2VSZWYgc3VyZmFj
ZSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3QgYml0c1BlckNvbXBvbmVudCwg
c2l6ZV90IGJpdHNQZXJQaXhlbCwgQ0dDb2xvclNwYWNlUmVmIHNwYWNlLCBDR0JpdG1hcEluZm8g
Yml0bWFwSW5mbyk7Ci0KLSNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1
ZGUoPElPU3VyZmFjZS9JT1N1cmZhY2VQcml2YXRlLmg+KQotI2ltcG9ydCA8SU9TdXJmYWNlL0lP
U3VyZmFjZVByaXZhdGUuaD4KLSNlbHNlCi1lbnVtIHsKLSAgICBrSU9TdXJmYWNlUHVyZ2VhYmxl
Vm9sYXRpbGUgPSAxLAotfTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLWV4dGVybiAiQyIgSU9SZXR1cm4gSU9T
dXJmYWNlU2V0UHVyZ2VhYmxlKElPU3VyZmFjZVJlZiBidWZmZXIsIHVpbnQzMl90IG5ld1N0YXRl
LCB1aW50MzJfdCAqb2xkU3RhdGUpOwotI2VuZGlmCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVNuYXBzaG90Q291bnQgPSAyMDsK
QEAgLTExOSwzNiArOTksMTcgQEAgdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cHJ1bmVTbmFwc2hv
dHMoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCiB9CiAKICNpZiBVU0UoSU9TVVJGQUNFKQot
c3RhdGljIHN0ZDo6cGFpcjxSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiwgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4+IGNyZWF0ZUlPU3VyZmFjZUZyb21JbWFnZShDR0ltYWdlUmVmIGltYWdlKQorc3Rh
dGljIFJlZlB0cjxJT1N1cmZhY2U+IGNyZWF0ZUlPU3VyZmFjZUZyb21JbWFnZShDR0ltYWdlUmVm
IGltYWdlKQogewotICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOwotICAgIHNpemVf
dCBiaXRzUGVyQ29tcG9uZW50ID0gODsKLSAgICBzaXplX3QgYml0c1BlclBpeGVsID0gMzI7Ci0g
ICAgc2l6ZV90IGJ5dGVzUGVyRWxlbWVudCA9IDQ7CiAgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFn
ZUdldFdpZHRoKGltYWdlKTsKICAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChp
bWFnZSk7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShr
SU9TdXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJFbGVtZW50KTsKLSAgICBBU1NF
UlQoYnl0ZXNQZXJSb3cpOwotCi0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9IElPU3VyZmFjZUFsaWdu
UHJvcGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6ZSwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpOwotICAg
IEFTU0VSVChhbGxvY1NpemUpOwotCi0gICAgTlNEaWN0aW9uYXJ5ICpwcm9wZXJ0aWVzID0gQHsK
LSAgICAgICAgKGlkKWtJT1N1cmZhY2VXaWR0aDogQCh3aWR0aCksCi0gICAgICAgIChpZClrSU9T
dXJmYWNlSGVpZ2h0OiBAKGhlaWdodCksCi0gICAgICAgIChpZClrSU9TdXJmYWNlUGl4ZWxGb3Jt
YXQ6IEAocGl4ZWxGb3JtYXQpLAotICAgICAgICAoaWQpa0lPU3VyZmFjZUJ5dGVzUGVyRWxlbWVu
dDogQChieXRlc1BlckVsZW1lbnQpLAotICAgICAgICAoaWQpa0lPU3VyZmFjZUJ5dGVzUGVyUm93
OiBAKGJ5dGVzUGVyUm93KSwKLSAgICAgICAgKGlkKWtJT1N1cmZhY2VBbGxvY1NpemU6IEAoYWxs
b2NTaXplKQotICAgIH07Ci0KLSAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJmYWNlID0g
YWRvcHRDRihJT1N1cmZhY2VDcmVhdGUoKENGRGljdGlvbmFyeVJlZilwcm9wZXJ0aWVzKSk7Ci0g
ICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IHN1cmZhY2VDb250ZXh0ID0gYWRvcHRDRihDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGUoc3Vy
ZmFjZS5nZXQoKSwgd2lkdGgsIGhlaWdodCwgYml0c1BlckNvbXBvbmVudCwgYml0c1BlclBpeGVs
LCBDR0ltYWdlR2V0Q29sb3JTcGFjZShpbWFnZSksIGJpdG1hcEluZm8pKTsKKworICAgIFJlZlB0
cjxJT1N1cmZhY2U+IHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVm
PiBzdXJmYWNlQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dCgpOwogICAg
IENHQ29udGV4dERyYXdJbWFnZShzdXJmYWNlQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAw
LCB3aWR0aCwgaGVpZ2h0KSwgaW1hZ2UpOwogICAgIENHQ29udGV4dEZsdXNoKHN1cmZhY2VDb250
ZXh0LmdldCgpKTsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdXJmYWNlLCBzdXJmYWNl
Q29udGV4dCk7CisgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAjZW5kaWYKIApAQCAtMTgwLDExICsx
NDEsOSBAQCB2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hvdChXZWJQYWdlUHJv
eHkmIHdlYlBhZ2VQcm94eSkKICAgICBzbmFwc2hvdC5jcmVhdGlvblRpbWUgPSBzdGQ6OmNocm9u
bzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKIAogI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgYXV0byBz
dXJmYWNlQW5kQ29udGV4dCA9IGNyZWF0ZUlPU3VyZmFjZUZyb21JbWFnZShzbmFwc2hvdEltYWdl
LmdldCgpKTsKLSAgICBzbmFwc2hvdC5zdXJmYWNlID0gc3VyZmFjZUFuZENvbnRleHQuZmlyc3Q7
Ci0gICAgc25hcHNob3Quc3VyZmFjZUNvbnRleHQgPSBzdXJmYWNlQW5kQ29udGV4dC5zZWNvbmQ7
CisgICAgc25hcHNob3Quc3VyZmFjZSA9IGNyZWF0ZUlPU3VyZmFjZUZyb21JbWFnZShzbmFwc2hv
dEltYWdlLmdldCgpKTsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAotICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShzbmFwc2hvdC5z
dXJmYWNlLmdldCgpLCBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxwdHIpOworICAg
IHNuYXBzaG90LnN1cmZhY2UtPnNldElzUHVyZ2VhYmxlKHRydWUpOwogI2VuZGlmCiAjZWxzZQog
ICAgIHNuYXBzaG90LmltYWdlID0gc25hcHNob3RJbWFnZTsKQEAgLTE5NSw3ICsxNTQsNyBAQCB2
b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hvdChXZWJQYWdlUHJveHkmIHdlYlBh
Z2VQcm94eSkKIH0KIAogI2lmIFVTRShJT1NVUkZBQ0UpCi1zdGQ6OnBhaXI8UmV0YWluUHRyPElP
U3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3RBbmRSZW5k
ZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQorc3RkOjpwYWlyPFJlZlB0
cjxJT1N1cmZhY2U+LCB1aW50NjRfdD4gVmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90QW5kUmVu
ZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKICNlbHNlCiBzdGQ6OnBh
aXI8UmV0YWluUHRyPENHSW1hZ2VSZWY+LCB1aW50NjRfdD4gVmlld1NuYXBzaG90U3RvcmU6OnNu
YXBzaG90QW5kUmVuZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKICNl
bmRpZgo=
</data>
<flag name="review"
          id="251589"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>