<?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>91143</bug_id>
          
          <creation_ts>2012-07-12 13:27:48 -0700</creation_ts>
          <short_desc>[BlackBerry] Upstream WebGL Code</short_desc>
          <delta_ts>2012-07-16 13:29:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</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>0</everconfirmed>
          <reporter name="Joshua Netterfield">jnetterfield</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>668157</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-12 13:27:48 -0700</bug_when>
    <thetext>Upstream WebGL code for BlackBerry port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669480</commentid>
    <comment_count>1</comment_count>
      <attachid>152350</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-13 15:12:03 -0700</bug_when>
    <thetext>Created attachment 152350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669496</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-13 15:28:27 -0700</bug_when>
    <thetext>Will revert changes to readPixels Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670354</commentid>
    <comment_count>3</comment_count>
      <attachid>152538</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-16 08:20:28 -0700</bug_when>
    <thetext>Created attachment 152538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670366</commentid>
    <comment_count>4</comment_count>
      <attachid>152538</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-16 08:39:49 -0700</bug_when>
    <thetext>Comment on attachment 152538
Patch

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

Still some things to cleanup.

&gt; Source/WebCore/ChangeLog:3
&gt; +        This patch includes BlackBerry-specific fixes for anti-aliasing, logging, and shader compilation.

This line should go below the Reviewed by line.

&gt; Source/WebCore/ChangeLog:23
&gt; +        * platform/graphics/opengl/Extensions3DOpenGL.h: Remove unnecessary  whitespace.

Remove unnecessary whitespace. &lt;- there is unnecessary whitespace in that sentence.

&gt; Source/WebKit/ChangeLog:3
&gt; +        This patch includes BlackBerry-specific fixes for anti-aliasing, logging, and shader compilation.

This line should go below the Reviewed by line.

&gt; Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:142
&gt; +#endif

Better add some whitespace in some of these lines.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:53
&gt; +    // Currently only format=RGBA, type=UNSIGNED_BYTE is supported by the specification: http://www.khronos.org/reg

Huh? gives 404</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670372</commentid>
    <comment_count>5</comment_count>
      <attachid>152543</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-16 08:47:19 -0700</bug_when>
    <thetext>Created attachment 152543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670416</commentid>
    <comment_count>6</comment_count>
      <attachid>152554</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-16 09:53:04 -0700</bug_when>
    <thetext>Created attachment 152554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670547</commentid>
    <comment_count>7</comment_count>
      <attachid>152582</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-16 12:11:05 -0700</bug_when>
    <thetext>Created attachment 152582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670577</commentid>
    <comment_count>8</comment_count>
      <attachid>152582</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-16 12:52:59 -0700</bug_when>
    <thetext>Comment on attachment 152582
Patch

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670612</commentid>
    <comment_count>9</comment_count>
      <attachid>152582</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 13:29:19 -0700</bug_when>
    <thetext>Comment on attachment 152582
Patch

Clearing flags on attachment: 152582

Committed r122754: &lt;http://trac.webkit.org/changeset/122754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670613</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 13:29:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152350</attachid>
            <date>2012-07-13 15:12:03 -0700</date>
            <delta_ts>2012-07-16 08:20:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91143-20120713181131.patch</filename>
            <type>text/plain</type>
            <size>39978</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzVlZWQzODUwYTlmNDFh
OTBlZjU4ZWRkYzc3ZWFjZTc0NTU0MTdhNS4uMjU5NjliNjk3NmM2NTY2YjhkMGRjZDZlYzA3MTU0
MmUwODE2ODU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA3LTEzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBUaGlzIHBh
dGNoIGluY2x1ZGVzIEJsYWNrQmVycnktc3BlY2lmaWMgZml4ZXMgZm9yIGFudGktYWxpYXNpbmcs
IGxvZ2dpbmcsIGFuZCBzaGFkZXIgY29tcGlsYXRpb24uCisKKyAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIFdlYkdMIENvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkxMTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDogQWRkIGEgdmFsdWUgZm9yIFRJIEltYWdpbmF0aW9uIGNoaXBzZXRzIG9uIEJsYWNrQmVycnkg
cGxhdGZvcm1zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwOiBNdWx0aXBsZSBkb3duc3RyZWFtIGNoYW5nZXMKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJh
bWVCdWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNJTUcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
c0ludG9DYW52YXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oOiBSZW1vdmUgdW5uZWNlc3NhcnkgIHdoaXRlc3BhY2Uu
CisgICAgICAgIChFeHRlbnNpb25zM0RPcGVuR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5H
TEUpOiBIYWNrIHRvIGZpeCBBTkdMRS1nZW5lcmF0ZWQgY29kZSBvbiBCbGFja0JlcnJ5IHBsYXRm
b3Jtcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmg6CisgICAgICAgIChFeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHA6IEkg
YW0gbm90IGluIGEgcG9zaXRpb24gdG8gY2hhbmdlIHN5c3RlbSBoZWFkZXJzIGZyb20gY29ycmVj
dCB0byBpbmNvcnJlY3QuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6
cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmg6IEkgYW0gbm90IGluIGEgcG9z
aXRpb24gdG8gY2hhbmdlIHN5c3RlbSBoZWFkZXJzIGZyb20gY29ycmVjdCB0byBpbmNvcnJlY3Qu
CisgICAgICAgIChFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDogTXVsdGlwbGUg
ZG93bnN0cmVhbSBjaGFuZ2VzIGJvdW5kIHRvIGNyZWF0ZSBtdWNoIGNvbnRyb3ZlcnN5CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNy0x
MyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0NhbGxX
aXRoPVhYWF0gYXJndW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGhlYWQgb2YgbWV0aG9k
IGFyZ3VtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA3NjE0ZDQxNTRkODczOTFlNTUyYjQyZGZhOGRkYWUyODdk
NjliNjU2Li5kMjVlMjc4Njg5MTUxMjBlNTQxMWNhYzc1M2Y0MDRjYWRlMDZkYTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA3LTEzICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0
dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIEJsYWNrQmVy
cnktc3BlY2lmaWMgZml4ZXMgZm9yIGFudGktYWxpYXNpbmcsIGxvZ2dpbmcsIGFuZCBzaGFkZXIg
Y29tcGlsYXRpb24uCisKKyAgICAgICAgW0JsYWNrQmVycnldIFVwc3RyZWFtIFdlYkdMIENvZGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMTQzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUJsYWNrQmVycnkuY21ha2U6IERlZmluZSBXVEZfVVNFX09QRU5HTF9FU18yIG9uIFdlYkdMLWVu
YWJsZWQgYnVpbGRzLgorCiAyMDEyLTA3LTEzICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRo
aWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtDTWFrZV0gUHJvcGVyIGhhbmRsaW5n
IG9mIEVOQUJMRV9BUElfVEVTVFMgYnVpbGQgb3B0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAxZTYxODQyOTM0
OGNhNWMwOGQxNGRhNzg3OGI0MWQxMjMxNWIzMTA1Li5jMmZlZWMyOTM5OWUyZGFiYzcxMWY4NTEy
YjlmOWNiOWY5OGM3NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTkzMSw2ICs5MzEsMTEgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKTsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICB2b2lkIGxvZ0ZyYW1lQnVmZmVyU3Rh
dHVzKGludCBsaW5lKTsKKyAgICB2b2lkIHJlYWRQaXhlbHNJTUcoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKTsKKyNlbmRpZgorCiAgICAgYm9vbCByZXNoYXBlRkJP
cyhjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNz
YXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKICNpZiBQTEFURk9STShRVCkgJiYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCkBAIC05NDMsNiArOTQ4LDExIEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgQ0dMQ29udGV4dE9iaiBtX2NvbnRleHRPYmo7CiAgICAgUmV0YWluUHRy
PFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKKyNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0cjxQbGF0Zm9ybUxheWVy
PiBtX2NvbXBvc2l0aW5nTGF5ZXI7CisjZW5kaWYKKyAgICB2b2lkKiBtX2NvbnRleHQ7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQpAQCAtOTk2LDkgKzEwMDYs
MTQgQEAgcHVibGljOgogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3Io
KS4KICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CiAKKyNpZiBQ
TEFURk9STShCTEFDS0JFUlJZKQorICAgIGJvb2wgbV9pc0ltYWdpbmF0aW9uSGFyZHdhcmU7Cisj
ZW5kaWYKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGZyaWVuZCBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZT4gbV9wcml2YXRlOwotCisjZW5kaWYKICAgICBib29sIHN5c3RlbUFsbG93c011bHRpc2FtcGxp
bmdPbkFUSUNhcmRzKCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNz
Q29udGV4dDNEQmxhY2tCZXJyeS5jcHAKaW5kZXggYTFmNjI1Njk2YjkzMTc5YzRkOTA4Mjc4OGYx
ODNlNDM0NWU2MDM3OC4uZGQ0ZTNmNGM4NWE4NjM0NTE5YzNmZTJjMDNmZTNhY2NjMDUzYzhhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9H
cmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcApA
QCAtMzEsMTEgKzMxLDEzIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAjaW5jbHVk
ZSAiV2ViR0xMYXllcldlYktpdFRocmVhZC5oIgogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCwyMiArNTAsMjEgQEAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJpYnMs
IEhvc3QKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnMs
IGhvc3RXaW5kb3csIGZhbHNlKSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKK0dyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAg
OiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi0gICAgLCBtX2hv
c3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fY29udGV4dChCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6R3JhcGhpY3M6OmNyZWF0ZVdlYkdMQ29udGV4dCgpKQotICAgICwgbV9leHRlbnNpb25zKGFk
b3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpKQorICAgICwgbV9leHRlbnNpb25z
KGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0xFUyh0aGlzKSkpCiAgICAgLCBtX2F0dHJz
KGF0dHJzKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQorICAgICwg
bV9pbnRlcm5hbENvbG9yRm9ybWF0KEdMX1JHQkEpCiAgICAgLCBtX2JvdW5kRkJPKDApCiAgICAg
LCBtX2FjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApCiAgICAgLCBtX2JvdW5kVGV4dHVyZTAoMCkK
LSAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIoMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9p
c0ltYWdpbmF0aW9uSGFyZHdhcmUoMCkKIHsKICAgICBpZiAoIXJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNzEsMTAgKzcy
LDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICNlbmRpZgogICAgICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKIAotICAgICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRl
bnNpb25zKCk7Ci0gICAgICAgIGlmICghZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0lNR19tdWx0
aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSkKLSAgICAgICAgICAgIG1fYXR0cnMuYW50aWFs
aWFzID0gZmFsc2U7Ci0KICAgICAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50
by4KICAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogICAgICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKQEAgLTk2LDExICs5MywyOCBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogI2VuZGlmCiAgICAgfQogCi0gICAgLy8gRklYTUU6
IElmIEdyYXBoaWNzQ29udGV4dDNEIGlzIGNyZWF0ZWQgd2l0aCByZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyA9PSB0cnVlLAotICAgIC8vIG1ha2VDb250ZXh0Q3VycmVudCgpIHdpbGwgbWFrZSB0
aGUgc2hhcmVkIGNvbnRleHQgY3VycmVudC4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAot
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGVuYWJsZSBHTF9WRVJURVhfUFJPR1JBTV9QT0lO
VF9TSVpFIHdpdGggR0wgRVMyPyBTZWUgUFIgIzEyMDE0MS4KKyAgICBjb25zdCBjaGFyKiByZW5k
ZXJlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfUkVO
REVSRVIpKTsKKyAgICBtX2lzSW1hZ2luYXRpb25IYXJkd2FyZSA9IHN0ZDo6c3Ryc3RyKHJlbmRl
cmVyLCAiUG93ZXJWUiBTR1giKTsKKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAg
IFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVz
b3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmli
cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNl
cy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRV
bmlmb3JtVmVjdG9ycyk7CisKKyAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7
IC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IG1fZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIEFOR0xFUmVzb3VyY2VzLk9FU19FR0xfaW1hZ2Vf
ZXh0ZXJuYWwgPSBtX2V4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FR0xfaW1hZ2VfZXh0ZXJuYWwi
KTsKKyAgICBBTkdMRVJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSBtX2V4dGVuc2lv
bnMtPnN1cHBvcnRzKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKTsKKyAgICBtX2NvbXBpbGVy
LnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CiAKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKIH0KQEAgLTExOCw5ICsxMzIsMTg3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3Jh
cGhpY3NDb250ZXh0M0QoKQogICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVz
dHJveVdlYkdMQ29udGV4dChtX2NvbnRleHQpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIC8vIEEgQmxhY2tCZXJy
eS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiByZXNoYXBlRkJPcyBpcyBuZWNlc3NhcnkgYmVj
YXVzZSBpdCBjb250YWluczoKKyAgICAvLyAgLSBhbiBJbWFnaW5hdGlvbi1zcGVjaWZpYyBpbXBs
ZW1lbnRhdGlvbiBvZiBhbnRpLWFsaWFzaW5nCisgICAgLy8gIC0gYW4gSW1hZ2luYXRpb24tc3Bl
Y2lmaWMgZml4IGZvciBGQk9zIG9mIHNpemUgbGVzcyB0aGFuICgxNiwxNikKKworICAgIGludCBm
Ym9XaWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpbnQgZmJvSGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKworICAgIC8vIEltYWdpbmF0aW9uLXNwZWNpZmljIGZpeAorICAgIGlmIChtX2lzSW1hZ2lu
YXRpb25IYXJkd2FyZSkgeworICAgICAgICBmYm9XaWR0aCA9IHN0ZDo6bWF4KGZib1dpZHRoLCAx
Nik7CisgICAgICAgIGZib0hlaWdodCA9IHN0ZDo6bWF4KGZib0hlaWdodCwgMTYpOworICAgIH0K
KworICAgIEdMdWludCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAg
IGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgICAgICBjb2xvckZvcm1hdCA9IEdM
X1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JH
QjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0
aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAg
ICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwgJiYgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9O
RU5UMTY7CisgICAgfQorCisgICAgR0xpbnQgc2FtcGxlQ291bnQgPSA4OworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgeworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAg
Ly8gSGFyZGNvZGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNhbXBsZXMgZHVlIHRvIGhlYWRlciBp
c3N1ZSAoUFIxMzIxODMpCisgICAgICAgIC8vIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExF
U19JTUcsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIG1heFNhbXBsZUNvdW50ID0gNDsKKyAg
ICAgICAgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisgICAgfQor
CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRG
Qk8pOworCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Cisg
ICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwg
ZmJvV2lkdGgsIGZib0hlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OworCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAg
IGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBleHRlbnNpb25zLT5mcmFtZWJ1ZmZl
clRleHR1cmUyRE11bHRpc2FtcGxlSU1HKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsK
KworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAg
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMtPnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUlNRyhHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGZib1dpZHRoLCBmYm9IZWlnaHQpOworCisgICAgICAg
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVO
VF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRf
RVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlLCAwKTsKKworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xS
ZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIGludGVybmFsRGVwdGhT
dGVuY2lsRm9ybWF0LCBmYm9XaWR0aCwgZmJvSGVpZ2h0KTsKKworICAgICAgICAgICAgaWYgKG1f
YXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAo
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVO
REVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisKKyAgICBsb2dG
cmFtZUJ1ZmZlclN0YXR1cyhfX0xJTkVfXyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJhbWVCdWZmZXJTdGF0dXMoaW50IGxpbmUpCit7Cisg
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2
ZWxJbmZvLCAiQ2hlY2tpbmcgRnJhbWVCdWZmZXIgc3RhdHVzIGF0IGxpbmUgJWQ6ICIsIGxpbmUp
OworICAgIHN3aXRjaCAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCkpIHsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOgorICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8s
ICJDT01QTEVURSB8ICIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Omxv
ZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5DT01QTEVURSBBVFRBQ0hN
RU5UIHwgIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjps
b2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIk1JU1NJTkcgQVRUQUNITUVO
VCB8ICIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfRElNRU5TSU9OUzoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5DT01QTEVURSBESU1FTlNJT05TIHwgIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ6Cisg
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06Okxv
Z0xldmVsSW5mbywgIlVOU1VQUE9SVEVEIHwgIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9FWFQ6CisgICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIklO
Q09NUExFVEUgTVVMVElTQU1QTEUgfCAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c3dpdGNoIChnbEdldEVycm9yKCkpIHsKKyAgICBjYXNlIEdMX05PX0VSUk9SOgorICAgICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJOTyBFUlJPUiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX0lOVkFMSURfRU5V
TToKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6TG9nTGV2ZWxJbmZvLCAiSU5WQUxJRCBFTlVNIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR0xfSU5WQUxJRF9WQUxVRToKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5WQUxJRCBWQUxVRSIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8s
ICJJTlZBTElEIE9QRVJBVElPTiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX09VVF9P
Rl9NRU1PUlk6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIk9VVCBPRiBNRU1PUlkiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkxvZ0xldmVsSW5mbywgIlxuIik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNJTUcoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQor
eworICAgIC8vIEN1cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBlPVVOU0lHTkVEX0JZVEUg
aXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3Jn
L3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJZiB0aGlzIGV2ZXIgY2hhbmdl
cywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgorCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBzdHJpZGVzIG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAgICB1bnNpZ25lZCBpbnQgZm9y
bWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQorICAgIHVuc2lnbmVkIGludCBkYXRh
U3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCBjYW52YXNTdHJp
ZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAgICAvLyBJZiB3ZSBhcmUgdXNp
bmcgYSBwYWNrIGFsaWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQgdG8gYWxpZ24gb3VyIHN0cmlk
ZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21wdXRpbmcgcGFkZGluZykKKyAg
ICBpbnQgcGFja0FsaWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5U
LCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKDggPT0gcGFja0FsaWdubWVudCkgeworICAgICAg
ICBkYXRhU3RyaWRlID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43OworICAgICAgICBjYW52YXNTdHJp
ZGUgPSAoY2FudmFzU3RyaWRlICsgNykgJiB+NzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFy
KiBjYW52YXNEYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbY2FudmFzU3RyaWRlICogbV9jdXJyZW50
SGVpZ2h0XTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNhbnZhc0RhdGEpOworCisgICAgLy8gSWYgd2UgZmFp
bGVkIHRvIHJlYWQgb3VyIGNhbnZhcyBkYXRhIGR1ZSB0byBhIEdMIGVycm9yLCBkb24ndCBjb250
aW51ZQorICAgIGludCBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoR0xfTk9fRVJST1Ig
IT0gZXJyb3IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gQ2xlYXIgb3VyIGRhdGEgaW4gY2FzZSBzb21lIG9mIGl0
IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBjYW52YXMKKyAgICAvLyBUT0RPOiBkb24n
dCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUgZGF0YSBsaWVzIGluc2lkZSB0aGUgYm91bmRzIG9mIHRo
ZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0cmlkZSAqIGhlaWdodCk7CisKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBvdXIgY2FudmFzIGFuZCBkYXRhIGJv
dW5kcworICAgIEludFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgSW50
UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwor
ICAgIEludFJlY3Qgbm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBjYW52
YXNSZWN0KTsKKworICAgIHVuc2lnbmVkIGludCB4RGF0YU9mZnNldCA9IHggPCAwID8gLXggKiBm
b3JtYXRTaXplIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeURhdGFPZmZzZXQgPSB5IDwgMCA/IC15
ICogZGF0YVN0cmlkZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHhDYW52YXNPZmZzZXQgPSBub25a
ZXJvRGF0YVJlY3QueCgpICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgeUNhbnZhc09m
ZnNldCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJpZGU7CisgICAgdW5zaWduZWQg
Y2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpICsgeERhdGFPZmZz
ZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmMgPSBjYW52YXNEYXRhICsg
eENhbnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93
IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykgeworICAgICAgICBtZW1jcHkoZHN0
LCBzcmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0U2l6ZSk7CisgICAgICAgIGRz
dCArPSBkYXRhU3RyaWRlOworICAgICAgICBzcmMgKz0gY2FudmFzU3RyaWRlOworICAgIH0KKwor
ICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKIHsKLSAgICAvLyBTZWUgUFIgIzEyMDE0MS4K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQ3LDcgKzMzOSwxMiBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29uc3QK
IAogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXh0dXJlOworICAgIHJldHVybiBtX2NvbXBvc2l0aW5n
TGF5ZXItPmdldFRleHR1cmVJRCgpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0OwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpAQCAtMTk2LDcgKzM5Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52
YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnCiAgICAgRmxvYXRS
ZWN0IGRzdCgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7CiAKICAgICBSZWZQdHI8Qml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGJpdG1hcEltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWE6OmNyZWF0ZShjYW52YXNCaXRtYXAsIGZhbHNlKTsKLSAgICBjb250ZXh0LT5kcmF3
SW1hZ2UoYml0bWFwSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdCwgc3JjLCBD
b21wb3NpdGVDb3B5LCBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBmYWxzZSk7CisgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGJpdG1hcEltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkc3QsIHNyYywgQ29tcG9zaXRlQ29weSwgUmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQ
YXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCmlu
ZGV4IDcyZWZmOTIxODkyYTZhMDBkNTY0ZjU0YTEyOWUyM2FhYTdjMWJhZDUuLjc4NjMwM2M1OWNh
ZTUzODAyOWU4N2U2ZGM1ZDE4YTA1ZGM1ODg0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgK
QEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgog
ICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwg
bG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RY
MSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7
CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7Ci0g
ICAgCisKICAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCk7CiAgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA1YTYy
ODgxMGRmZDEyNzY3MDYwZWEwZjRlNjIxODAyYzY5YTNhOGViLi4xNWNhNGM5MTk3Y2JjZjkxNDk1
Y2M4YjQ4YjY5NGI3MTUwOTY5MzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcApAQCAtMTMwLDYgKzEzMCwxNiBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdAogICAg
IGlmICghaXNWYWxpZCkKICAgICAgICAgcmV0dXJuICIiOwogCisjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKKyAgICAvLyBPdXIgaGFyZHdhcmUgcmVhbGx5IGxpa2VzIGJlaW5nIHRvbGQgd2hhdCBw
cmVjaXNpb24gdG8gaGF2ZSAoaS5lLiwgd2l0aCAicHJlY2lzaW9uICogZmxvYXQiKQorICAgIC8v
IEFOR0xFIHN0cmlwcyB0aGlzIGluZm9ybWF0aW9uLgorICAgIGlmIChlbnRyeS5zb3VyY2UuY29u
dGFpbnMoInByZWNpc2lvbiBsb3dwIGZsb2F0IikpCisgICAgICAgIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2U9InByZWNpc2lvbiBsb3dwIGZsb2F0O1xuIit0cmFuc2xhdGVkU2hhZGVyU291cmNlOwor
ICAgIGVsc2UgaWYgKGVudHJ5LnNvdXJjZS5jb250YWlucygicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQiKSkKKyAgICAgICAgdHJhbnNsYXRlZFNoYWRlclNvdXJjZT0icHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7XG4iK3RyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZQorICAgICAgICB0cmFu
c2xhdGVkU2hhZGVyU291cmNlPSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4iK3RyYW5zbGF0ZWRT
aGFkZXJTb3VyY2U7CisjZW5kaWYKICAgICByZXR1cm4gdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCmluZGV4IDI3OTZkNmZjOTMw
OTY1Y2RmMWViNDc0YzczNzE3YjJkMTM1N2UxMWUuLjZhNjFlNDYzMmJlODE2NTc3OTRmZDM3N2Q4
YzUxNmI4MGZlOTYyZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAg
LTUzLDEzICs1MywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTOwogICAgIEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbihHcmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRl
bnNpb25zKCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFpbGFibGVFeHRl
bnNpb25zKCk7Ci0KICAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMRVMuY3BwCmluZGV4IGZlZDU0OTJjNjUyYTM1YjE4YWY3Y2FiY2U4YTcxYWIw
MTIyYTMxYjguLmNmN2NjNDYxNjllYzY5ODdhYmVkNjUzOTM1ZDc0ZTgxYWYxMjhjY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwg
bG9uZyBzcmNYMSwgbAogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNv
cHlUZXh0dXJlQ0hST01JVU0oR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RP
YmplY3QsIEdDM0RpbnQsIEdDM0RlbnVtKQpAQCAtMTQ1LDggKzE0NSwxNCBAQCBib29sIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAg
ICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJ
U1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9F
UyIpKTsKICAgICAgICAgICAgIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7
CiAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJf
dG9fdGV4dHVyZSIgJiYgIW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUp
IHsKKyAgICAgICAgICAgIC8vIFNlZSBidWcgIzkxMTMwLgorI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCisgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1H
UFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBs
ZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJ
TUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExF
SU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlSU1HIikpOworI2Vsc2UKICAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11
bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJE
TVVMVElTQU1QTEVJTUc+KGVnbEdldFByb2NBZGRyZXNzKCJnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUciKSk7CiAgICAgICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VN
VUxUSVNBTVBMRUlNRz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HIikpOworI2VuZGlmCiAgICAgICAgICAgICBtX3N1cHBvcnRzSU1HTXVsdGlz
YW1wbGVkUmVuZGVyVG9UZXh0dXJlID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
dHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKaW5kZXggYzNjYzU5NTcxY2UzOTM5YTcx
MmU0OTc1ODkzN2RhM2MzZmU0MmQyMS4uM2U1ZTQ0YjYxMDNiMTZjY2Q4ODJiOGQxMWY0YjBmMmQ5
NDcwMjZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKQEAgLTYyLDggKzYyLDE2IEBA
IHByb3RlY3RlZDoKICAgICBib29sIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsKICAg
ICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CiAKKyAgICAv
LyBPbGRlciB2ZXJzaW9ucyBvZiBnbDJleHQuaCBkZWZpbmUgUEZOR0xGUkFNRUJVRkZFUlRFWFRV
UkUyRE1VTFRJU0FNUExFSU1HIGluc3RlYWQgb2YgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1V
TFRJU0FNUExFSU1HUFJPQworICAgIC8vIEluIGFuIGlkZWFsIHdvcmxkLCB3ZSB3b3VsZCBqdXN0
IGhhdmUgYW4gI2lmIHRvIGNoZWNrIGZvciB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCwg
YnV0IHRoaXMgY2Fubm90IGJlIGRvbmUgYnkgdGhlIHByZXByb2Nlc3Nvci4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDMwLgorI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCisgICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExF
SU1HUFJPQyBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5H
TFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUlNRzsKKyNlbHNlCiAgICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUy
RE1VTFRJU0FNUExFSU1HIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOwog
ICAgIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HIG1fZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUc7CisjZW5kaWYKICAgICBQRk5HTEJJTkRWRVJURVhBUlJB
WU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsKICAgICBQRk5HTERFTEVURVZFUlRFWEFS
UkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUzsKICAgICBQRk5HTEdFTlZFUlRF
WEFSUkFZU09FU1BST0MgbV9nbEdlblZlcnRleEFycmF5c09FUzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IGQ4MTNiZWU5Mzk0NjI3ZWQ0ZTA5MDQ0NTBjNThmZWE5
NDRiODZlMzIuLjM5Nzg3MGZmMDcyMzhhODM5YjU4YTllZmU0MTBlMTI3NjY5YmM2YTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMzA4LDIyICszMDgsNiBAQCBF
eHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKICAgICByZXR1
cm4gbV9leHRlbnNpb25zLmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIg
YnVnIGlzIGZpeGVkLCBpLmUuLAotICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMg
c2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xGbHVzaCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotICAgIDo6Z2xSZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOwotfQotCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA5YTdmNDI1
MGQ1N2UzYjg5NzNiMzc1OTZkYjc1YmQ1M2RkYzk2OGFhLi5lNmEwZTg1ODFkZDM3ZTg2NDBlY2Fk
NmFkYzg2YWE5Mzc4MzZlNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTENvbW1vbi5jcHAKQEAgLTEyMCw4ICsxMjAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
LAogICAgICAgICB9CiAgICAgfQogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBwYWlu
dFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwK
KyAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpLCBp
bWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0
KCksIHRydWUpOworI2Vsc2UKICAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVy
LT5pbnRlcm5hbFNpemUoKS53aWR0aCgpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVp
Z2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbmRp
ZgogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoSW1hZ2VCdWZmZXIqKQpAQCAtMTYxLDExICsxNjYsMjcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICA6OmdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMCk7CisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBpZiAoIXBs
YXRmb3JtVGV4dHVyZSgpKSB7CisgICAgICAgIEdMdWludCB0ZXggPSAwOworICAgICAgICA6Omds
R2VuVGV4dHVyZXMoMSwgJnRleCk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCB0ZXgpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAg
ICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgICAgICBtX2Nv
bXBvc2l0aW5nTGF5ZXItPnNldFRleHR1cmVJRCh0ZXgpOworICAgIH0KKyAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgcGxhdGZvcm1UZXh0dXJlKCkpOworI2Vsc2UKICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYK
ICAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwKTsKICAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1cmUwKTsKICAgICA6Omds
QWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2JvdW5kRkJPKTsKKyAgICBpZiAo
bV9ib3VuZEZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOwogICAgIDo6Z2xGaW5pc2go
KTsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CiB9CkBAIC0zMjUsNyArMzQ2LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyCiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgZmJvID0g
YnVmZmVyOwogICAgIGVsc2UKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorICAgICAgICBmYm8g
PSBtX2ZibzsKKyNlbHNlCiAgICAgICAgIGZibyA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVs
dGlzYW1wbGVGQk8gOiBtX2Zibyk7CisjZW5kaWYKICAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8p
IHsKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CiAgICAgICAg
IG1fYm91bmRGQk8gPSBmYm87CkBAIC00NDgsMzMgKzQ3Myw2MCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGludCBH
TENvbXBpbGVTdWNjZXNzOwogICAgIAogICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJ
TEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7CisKKyAgICAvLyBQb3B1bGF0ZSB0aGUgc2hh
ZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRl
ciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIGlmIChsZW5ndGgpIHsKKyAg
ICAgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVy
U291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50
cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgICAgICBHTHNpemVpIHNpemUgPSAwOworICAgICAg
ICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVu
Z3RoXSk7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6
ZSwgaW5mby5nZXQoKSk7CisKKyAgICAgICAgZW50cnkubG9nID0gaW5mby5nZXQoKTsKKyAgICB9
CiAgICAgCiAgICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBh
Y2NlcHRlZCBieSBPcGVuR0wuCiAgICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJV
RSk7CisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBpZiAoR0xDb21waWxlU3VjY2VzcyAh
PSBHTF9UUlVFKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJUaGUgc2hhZGVyIHZhbGlkYXRlZCwgYnV0IGRpZG4n
dCBjb21waWxlLlxuIik7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYm
IG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOwogICAgIH0KKyNlbmRpZgogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyNpZiAh
UExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisjZW5k
aWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJS
WSkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgfQorI2VuZGlmCiAg
ICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQpAQCAtNzU3LDYgKzgwOSw4NiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9h
dCB1bml0cykKICAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIHZvaWQqIGRhdGEpCit7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBp
cyBmaXhlZCwgaS5lLiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3Vs
ZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRmx1c2goKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgICAgIDo6Z2xGbHVzaCgpOworICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKKyAgICAvLyBDdXJyZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05F
RF9CWVRFIGlzIHN1cHBvcnRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJv
bm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVy
IGNoYW5nZXMsIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENh
bGN1bGF0ZSB0aGUgc3RyaWRlcyBvZiBvdXIgZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQg
aW50IGZvcm1hdFNpemUgPSA0OyAvLyBSR0JBIFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBp
bnQgZGF0YVN0cmlkZSA9IHdpZHRoICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2Fu
dmFzU3RyaWRlID0gbV9jdXJyZW50V2lkdGggKiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2Ug
YXJlIHVzaW5nIGEgcGFjayBhbGlnbm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91
ciBzdHJpZGVzIHRvIDggYnl0ZSBib3VuZGFyaWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL0RhdGFfc3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRp
bmcpCisgICAgaW50IHBhY2tBbGlnbm1lbnQ7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FM
SUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsK
KyAgICAgICAgZGF0YVN0cmlkZSA9IChkYXRhU3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2Fu
dmFzU3RyaWRlID0gKGNhbnZhc1N0cmlkZSArIDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgY2hhciogY2FudmFzRGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1f
Y3VycmVudEhlaWdodF07CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgZm9ybWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElm
IHdlIGZhaWxlZCB0byByZWFkIG91ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9u
J3QgY29udGludWUKKyAgICBpbnQgZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05P
X0VSUk9SICE9IGVycm9yKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29t
ZSBvZiBpdCBsaWVzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9E
TzogZG9uJ3QgZG8gdGhpcyBpZiBhbGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5k
cyBvZiB0aGUgY2FudmFzCisgICAgbWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQp
OworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQg
ZGF0YSBib3VuZHMKKyAgICBJbnRSZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIEludFJlY3QgY2FudmFzUmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KTsKKyAgICBJbnRSZWN0IG5vblplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVj
dCwgY2FudmFzUmVjdCk7CisKKyAgICB1bnNpZ25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/
IC14ICogZm9ybWF0U2l6ZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8
IDAgPyAteSAqIGRhdGFTdHJpZGUgOiAwOworICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0
ID0gbm9uWmVyb0RhdGFSZWN0LngoKSAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlD
YW52YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVu
c2lnbmVkIGNoYXIqIGRzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhE
YXRhT2Zmc2V0ICsgeURhdGFPZmZzZXQ7CisgICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFz
RGF0YSArIHhDYW52YXNPZmZzZXQgKyB5Q2FudmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IG5vblplcm9EYXRhUmVjdC5oZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVt
Y3B5KGRzdCwgc3JjLCBub25aZXJvRGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAg
ICAgICBkc3QgKz0gZGF0YVN0cmlkZTsKKyAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAg
ICB9CisKKyAgICBkZWxldGUgW10gY2FudmFzRGF0YTsKKworICAgIC8vIEltYWdpbmF0aW9uIHNw
ZWNpZmljIGZpeAorICAgIGlmIChtX2lzSW1hZ2luYXRpb25IYXJkd2FyZSkKKyAgICAgICAgcmVh
ZFBpeGVsc0lNRyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAg
IGVsc2UKKyAgICAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBkYXRhKTsKKyNlbHNlCisgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKEJMQUNL
QkVSUlkpCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0
aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworI2VuZGlmCit9CisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Ri
b29sZWFuIGludmVydCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCAyNjI4MTkwOWI0OGZlMWYzZDZiYTJl
ZWY5OGZmMzVkNWRlMDA3MDAyLi5lMWM4ZmIwNzlkMmJhNDMyNjU5N2M0MjcyMDc3YzMwYzI4NTIz
ZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC00OCw2
MyArNDgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KQogICAgIDo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQq
IGRhdGEpCi17Ci0gICAgLy8gQ3VycmVudGx5IG9ubHkgZm9ybWF0PVJHQkEsIHR5cGU9VU5TSUdO
RURfQllURSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cua2hy
b25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LwotICAgIC8vIElmIHRoaXMgZXZl
ciBjaGFuZ2VzLCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0KLSAgICAvLyBD
YWxjdWxhdGUgdGhlIHN0cmlkZXMgb2Ygb3VyIGRhdGEgYW5kIGNhbnZhcwotICAgIHVuc2lnbmVk
IGludCBmb3JtYXRTaXplID0gNDsgLy8gUkdCQSBVTlNJR05FRF9CWVRFCi0gICAgdW5zaWduZWQg
aW50IGRhdGFTdHJpZGUgPSB3aWR0aCAqIGZvcm1hdFNpemU7Ci0gICAgdW5zaWduZWQgaW50IGNh
bnZhc1N0cmlkZSA9IG1fY3VycmVudFdpZHRoICogZm9ybWF0U2l6ZTsKLQotICAgIC8vIElmIHdl
IGFyZSB1c2luZyBhIHBhY2sgYWxpZ25tZW50IG9mIDgsIHRoZW4gd2UgbmVlZCB0byBhbGlnbiBv
dXIgc3RyaWRlcyB0byA4IGJ5dGUgYm91bmRhcmllcwotICAgIC8vIFNlZTogaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9EYXRhX3N0cnVjdHVyZV9hbGlnbm1lbnQgKGNvbXB1dGluZyBwYWRk
aW5nKQotICAgIGludCBwYWNrQWxpZ25tZW50OwotICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19B
TElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKLSAgICBpZiAoOCA9PSBwYWNrQWxpZ25tZW50KSB7
Ci0gICAgICAgIGRhdGFTdHJpZGUgPSAoZGF0YVN0cmlkZSArIDcpICYgfjc7Ci0gICAgICAgIGNh
bnZhc1N0cmlkZSA9IChjYW52YXNTdHJpZGUgKyA3KSAmIH43OwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGNoYXIqIGNhbnZhc0RhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltjYW52YXNTdHJpZGUgKiBt
X2N1cnJlbnRIZWlnaHRdOwotICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsIGZvcm1hdCwgdHlwZSwgY2FudmFzRGF0YSk7Ci0KLSAgICAvLyBJ
ZiB3ZSBmYWlsZWQgdG8gcmVhZCBvdXIgY2FudmFzIGRhdGEgZHVlIHRvIGEgR0wgZXJyb3IsIGRv
bid0IGNvbnRpbnVlCi0gICAgaW50IGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgIGlmIChHTF9O
T19FUlJPUiAhPSBlcnJvcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDbGVhciBvdXIgZGF0YSBpbiBjYXNlIHNv
bWUgb2YgaXQgbGllcyBvdXRzaWRlIHRoZSBib3VuZHMgb2Ygb3VyIGNhbnZhcwotICAgIC8vIFRP
RE86IGRvbid0IGRvIHRoaXMgaWYgYWxsIG9mIHRoZSBkYXRhIGxpZXMgaW5zaWRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGNhbnZhcwotICAgIG1lbXNldChkYXRhLCAwLCBkYXRhU3RyaWRlICogaGVpZ2h0
KTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIG91ciBjYW52YXMgYW5k
IGRhdGEgYm91bmRzCi0gICAgSW50UmVjdCBkYXRhUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCk7Ci0gICAgSW50UmVjdCBub25aZXJvRGF0YVJlY3QgPSBpbnRlcnNlY3Rpb24oZGF0YVJl
Y3QsIGNhbnZhc1JlY3QpOwotCi0gICAgdW5zaWduZWQgaW50IHhEYXRhT2Zmc2V0ID0geCA8IDAg
PyAteCAqIGZvcm1hdFNpemUgOiAwOwotICAgIHVuc2lnbmVkIGludCB5RGF0YU9mZnNldCA9IHkg
PCAwID8gLXkgKiBkYXRhU3RyaWRlIDogMDsKLSAgICB1bnNpZ25lZCBpbnQgeENhbnZhc09mZnNl
dCA9IG5vblplcm9EYXRhUmVjdC54KCkgKiBmb3JtYXRTaXplOwotICAgIHVuc2lnbmVkIGludCB5
Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0LnkoKSAqIGNhbnZhc1N0cmlkZTsKLSAgICB1
bnNpZ25lZCBjaGFyKiBkc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyB4
RGF0YU9mZnNldCArIHlEYXRhT2Zmc2V0OwotICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IGNhbnZh
c0RhdGEgKyB4Q2FudmFzT2Zmc2V0ICsgeUNhbnZhc09mZnNldDsKLSAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBub25aZXJvRGF0YVJlY3QuaGVpZ2h0KCk7IHJvdysrKSB7Ci0gICAgICAgIG1l
bWNweShkc3QsIHNyYywgbm9uWmVyb0RhdGFSZWN0LndpZHRoKCkgKiBmb3JtYXRTaXplKTsKLSAg
ICAgICAgZHN0ICs9IGRhdGFTdHJpZGU7Ci0gICAgICAgIHNyYyArPSBjYW52YXNTdHJpZGU7Ci0g
ICAgfQotCi0gICAgZGVsZXRlIFtdIGNhbnZhc0RhdGE7Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLQotICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0Fu
ZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQogewogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CkBAIC0x
MTUsNiArNTgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVy
dFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50CiAgICAgfQogfQogCisjaWYgIVBM
QVRGT1JNKEJMQUNLQkVSUlkpCisvLyBUaGUgQmxhY2tCZXJyeSBwb3J0IHVzZXMgYSBzcGVjaWFs
IGltcGxlbWVudGF0aW9uIG9mIHJlc2hhcGVGQk9zLiBTZWUgR3JhcGhpY3NDb250ZXh0M0RCbGFj
a0JlcnJ5LmNwcAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKICAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CkBAIC0x
ODMsNiArMTI4LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIAogICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKIH0KKyNlbmRpZgog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNt
YWtlCmluZGV4IGFhYzA2OGI0ODRkZGRjODc0NzZmMTI1YTIxM2NmNGM0ZGU5M2EwNjkuLjBjMmYx
ODMzNmNmZDJlOTMzZmFiOWFmMDE5MGU3OTNmNjBkNzBkN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlCkBAIC0xMDksNiArMTA5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0
X1NPVVJDRVMKICkKIAogSUYgKEVOQUJMRV9XRUJHTCkKKyAgICBBRERfREVGSU5JVElPTlMgKC1E
V1RGX1VTRV9PUEVOR0xfRVNfMj0xKQogICAgIExJU1QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgICAgICR7T1BFTkdMX0lOQ0xVREVfRElSfQogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152538</attachid>
            <date>2012-07-16 08:20:28 -0700</date>
            <delta_ts>2012-07-16 08:47:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91143-20120716111951.patch</filename>
            <type>text/plain</type>
            <size>33334</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgxYTQzOWY3MTM2YmYy
MjRjYzFmMTQwMjQxZmJmNTM1MDYwMmE4ZC4uNzMzZGJkMzU2MzI5MjY5Y2E4NzJmODJlNGUzZWU3
MjEzODAxNWFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3LTEzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBUaGlzIHBh
dGNoIGluY2x1ZGVzIEJsYWNrQmVycnktc3BlY2lmaWMgZml4ZXMgZm9yIGFudGktYWxpYXNpbmcs
IGxvZ2dpbmcsIGFuZCBzaGFkZXIgY29tcGlsYXRpb24uCisKKyAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIFdlYkdMIENvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkxMTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDogQWRkIGEgdmFsdWUgZm9yIFRJIEltYWdpbmF0aW9uIGNoaXBzZXRzIG9uIEJsYWNrQmVycnkg
cGxhdGZvcm1zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwOiBNdWx0aXBsZSBkb3duc3RyZWFtIGNoYW5nZXMKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJh
bWVCdWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNJTUcpOiBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeCBmb3IgSW1hZ2luYXRpb24gaGFy
ZHdhcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSAgd2hpdGVzcGFjZS4KKyAgICAg
ICAgKEV4dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSk6IEhh
Y2sgdG8gZml4IEFOR0xFLWdlbmVyYXRlZCBjb2RlIG9uIEJsYWNrQmVycnkgcGxhdGZvcm1zLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaDoKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogSSBhbSBub3Qg
aW4gYSBwb3NpdGlvbiB0byBjaGFuZ2Ugc3lzdGVtIGhlYWRlcnMgZnJvbSBjb3JyZWN0IHRvIGlu
Y29ycmVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
T3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaDogSSBhbSBub3QgaW4gYSBwb3NpdGlvbiB0
byBjaGFuZ2Ugc3lzdGVtIGhlYWRlcnMgZnJvbSBjb3JyZWN0IHRvIGluY29ycmVjdC4KKyAgICAg
ICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOiBBZGQgYSBCbGFja0JlcnJ5
LXNwZWNpZmljIGFudGktYWxpYXNpbmcgZml4LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDctMTYgIFpvbHRhbiBIb3J2YXRo
ICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBDaGFuZ2UgTmF0aXZlSW1hZ2VQ
dHIgZnJvbSBRUGl4bWFwKiB0byBRSW1hZ2UqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFmMTUwZGQ2MTU4ODNhOGY4
OThhMjQyMzk2MzBkOWIwMzgzOTM1MjEuLmFhMWFiZmEwZDJhNDlkNTRhYmYwMmZlYTkzY2IxNjcx
ZjU5YjBkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDctMTMgIEpvc2h1YSBO
ZXR0ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0uY29tPgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW5jbHVkZXMgQmxhY2tCZXJyeS1zcGVjaWZpYyBmaXhlcyBmb3IgYW50aS1hbGlhc2luZywgbG9n
Z2luZywgYW5kIHNoYWRlciBjb21waWxhdGlvbi4KKworICAgICAgICBbQmxhY2tCZXJyeV0gVXBz
dHJlYW0gV2ViR0wgQ29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTExNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZTogRGVmaW5lIFdURl9VU0VfT1BFTkdM
X0VTXzIgb24gV2ViR0wtZW5hYmxlZCBidWlsZHMuCisKIDIwMTItMDctMTYgIEZyZWRlcmlrIEds
YWRob3JuICA8ZnJlZGVyaWsuZ2xhZGhvcm5Abm9raWEuY29tPgogCiAgICAgICAgIEFkZCBhY2Nl
c3NpYmxlIGZvciBRV2ViVmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDFlNjE4NDI5MzQ4Y2E1YzA4ZDE0ZGE3
ODc4YjQxZDEyMzE1YjMxMDUuLmMyZmVlYzI5Mzk5ZTJkYWJjNzExZjg1MTJiOWY5Y2I5Zjk4Yzc2
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaApAQCAtOTMxLDYgKzkzMSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWFk
UGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpOwogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQorICAgIHZvaWQgbG9nRnJhbWVCdWZmZXJTdGF0dXMoaW50IGxpbmUp
OworICAgIHZvaWQgcmVhZFBpeGVsc0lNRyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IHZvaWQqIGRhdGEpOworI2VuZGlmCisKICAgICBib29sIHJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmKTsKICAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50
UmVjdCYgPSBJbnRSZWN0KCkpOwogI2lmIFBMQVRGT1JNKFFUKSAmJiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKQEAgLTk0Myw2ICs5NDgsMTEgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4g
bV93ZWJHTExheWVyOworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgUmVmUHRyPFBsYXRmb3JtTGF5ZXI+IG1fY29tcG9zaXRp
bmdMYXllcjsKKyNlbmRpZgorICAgIHZvaWQqIG1fY29udGV4dDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCkBAIC05OTYsOSArMTAwNiwxNCBAQCBwdWJsaWM6
CiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RI
YXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIAorI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCisgICAgYm9vbCBtX2lzSW1hZ2luYXRpb25IYXJkd2FyZTsKKyNlbmRpZgorCisjaWYg
IVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBtX3ByaXZhdGU7
Ci0KKyNlbmRpZgogICAgIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMo
KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFj
a0JlcnJ5LmNwcAppbmRleCBhMWY2MjU2OTZiOTMxNzljNGQ5MDgyNzg4ZjE4M2U0MzQ1ZTYwMzc4
Li5kZDRlM2Y0Yzg1YTg2MzQ1MTljM2ZlMmMwM2ZlM2FjY2MwNTNjOGE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4
dDNEQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCkBAIC0zMSwxMSArMzEs
MTMgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiQml0bWFw
SW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKICNpbmNsdWRlICJXZWJHTExheWVy
V2ViS2l0VGhyZWFkLmgiCiAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5o
PgorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ4LDIyICs1MCwyMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEF0dHJpYnV0ZXMgYXR0cmlicywgSG9zdAogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywg
ZmFsc2UpKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBi
b29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2lu
ZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAgICA6IG1fY3VycmVudFdp
ZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKLSAgICAsIG1faG9zdFdpbmRvdyhob3N0
V2luZG93KQogICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
Y3JlYXRlV2ViR0xDb250ZXh0KCkpCi0gICAgLCBtX2V4dGVuc2lvbnMoYWRvcHRQdHIobmV3IEV4
dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSkpCisgICAgLCBtX2V4dGVuc2lvbnMoYWRvcHRQdHIobmV3
IEV4dGVuc2lvbnMzRE9wZW5HTEVTKHRoaXMpKSkKICAgICAsIG1fYXR0cnMoYXR0cnMpCiAgICAg
LCBtX3RleHR1cmUoMCkKICAgICAsIG1fZmJvKDApCiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cigwKQorICAgICwgbV9sYXllckNvbXBvc2l0ZWQoZmFsc2UpCisgICAgLCBtX2ludGVybmFsQ29s
b3JGb3JtYXQoR0xfUkdCQSkKICAgICAsIG1fYm91bmRGQk8oMCkKICAgICAsIG1fYWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMCkKICAgICAsIG1fYm91bmRUZXh0dXJlMCgwKQotICAgICwgbV9tdWx0
aXNhbXBsZUZCTygwKQotICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQot
ICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX2lzSW1hZ2luYXRpb25I
YXJkd2FyZSgwKQogewogICAgIGlmICghcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03MSwxMCArNzIsNiBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaQogI2VuZGlmCiAgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
Ci0gICAgICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAg
ICAgICAgaWYgKCFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZSIpKQotICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsK
LQogICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgogICAgICAgICA6
OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwpAQCAtOTYsMTEgKzkzLDI4IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAjZW5kaWYKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSWYgR3JhcGhpY3ND
b250ZXh0M0QgaXMgY3JlYXRlZCB3aXRoIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93ID09IHRy
dWUsCi0gICAgLy8gbWFrZUNvbnRleHRDdXJyZW50KCkgd2lsbCBtYWtlIHRoZSBzaGFyZWQgY29u
dGV4dCBjdXJyZW50LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gRklYTUU6
IERvIHdlIG5lZWQgdG8gZW5hYmxlIEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUgd2l0aCBH
TCBFUzI/IFNlZSBQUiAjMTIwMTQxLgorICAgIGNvbnN0IGNoYXIqIHJlbmRlcmVyID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9SRU5ERVJFUikpOworICAg
IG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlID0gc3RkOjpzdHJzdHIocmVuZGVyZXIsICJQb3dlclZS
IFNHWCIpOworCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVz
b3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xF
UmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5N
YXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KTsKKworICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsgLy8gQWx3YXlzIHNl
dCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzID0gbV9leHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgQU5HTEVSZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IG1f
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VHTF9pbWFnZV9leHRlcm5hbCIpOworICAgIEFOR0xF
UmVzb3VyY2VzLkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IG1fZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
IkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2Vz
KEFOR0xFUmVzb3VyY2VzKTsKIAogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwogfQpA
QCAtMTE4LDkgKzEzMiwxODcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCgpCiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpkZXN0cm95V2ViR0xDb250
ZXh0KG1fY29udGV4dCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9z
KGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgLy8gQSBCbGFja0JlcnJ5LXNwZWNpZmljIGlt
cGxlbWVudGF0aW9uIG9mIHJlc2hhcGVGQk9zIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGNvbnRh
aW5zOgorICAgIC8vICAtIGFuIEltYWdpbmF0aW9uLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9m
IGFudGktYWxpYXNpbmcKKyAgICAvLyAgLSBhbiBJbWFnaW5hdGlvbi1zcGVjaWZpYyBmaXggZm9y
IEZCT3Mgb2Ygc2l6ZSBsZXNzIHRoYW4gKDE2LDE2KQorCisgICAgaW50IGZib1dpZHRoID0gc2l6
ZS53aWR0aCgpOworICAgIGludCBmYm9IZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgLy8g
SW1hZ2luYXRpb24tc3BlY2lmaWMgZml4CisgICAgaWYgKG1faXNJbWFnaW5hdGlvbkhhcmR3YXJl
KSB7CisgICAgICAgIGZib1dpZHRoID0gc3RkOjptYXgoZmJvV2lkdGgsIDE2KTsKKyAgICAgICAg
ZmJvSGVpZ2h0ID0gc3RkOjptYXgoZmJvSGVpZ2h0LCAxNik7CisgICAgfQorCisgICAgR0x1aW50
IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCA9IDA7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgaW50ZXJuYWxDb2xv
ckZvcm1hdCA9IEdMX1JHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBj
b2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBt
X2F0dHJzLmRlcHRoKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVy
ZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBH
cmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCAmJiBtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyAgICB9
CisKKyAgICBHTGludCBzYW1wbGVDb3VudCA9IDg7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
KSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICAvLyBIYXJkY29kZSB0
aGUgbWF4aW11bSBudW1iZXIgb2Ygc2FtcGxlcyBkdWUgdG8gaGVhZGVyIGlzc3VlIChQUjEzMjE4
MykKKyAgICAgICAgLy8gOjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0lNRywgJm1heFNh
bXBsZUNvdW50KTsKKyAgICAgICAgbWF4U2FtcGxlQ291bnQgPSA0OworICAgICAgICBzYW1wbGVD
b3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKyAgICB9CisKKyAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBmYm9XaWR0aCwgZmJv
SGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBFeHRl
bnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzKSB7CisgICAgICAgIGV4dGVuc2lvbnMtPmZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQs
IEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCwgc2FtcGxlQ291bnQpOworCisgICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlSU1HKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CisKKyAgICAgICAgICAgIGlmIChtX2F0
dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVO
REVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRF
UkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUsIDApOworCisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkg
eworICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQs
IGZib1dpZHRoLCBmYm9IZWlnaHQpOworCisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
KQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRo
KQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKworICAgIGxvZ0ZyYW1lQnVmZmVyU3Rh
dHVzKF9fTElORV9fKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpsb2dGcmFtZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSkKK3sKKyAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJDaGVj
a2luZyBGcmFtZUJ1ZmZlciBzdGF0dXMgYXQgbGluZSAlZDogIiwgbGluZSk7CisgICAgc3dpdGNo
IChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSkgeworICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIkNPTVBMRVRFIHwg
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIEFUVEFDSE1FTlQgfCAiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdf
QVRUQUNITUVOVDoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiTUlTU0lORyBBVFRBQ0hNRU5UIHwgIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05T
OgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIERJTUVOU0lPTlMgfCAiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDoKKyAgICAgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAi
VU5TVVBQT1JURUQgfCAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVDoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5DT01QTEVURSBNVUxU
SVNBTVBMRSB8ICIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGdsR2V0
RXJyb3IoKSkgeworICAgIGNhc2UgR0xfTk9fRVJST1I6CisgICAgICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIk5PIEVSUk9S
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfSU5WQUxJRF9FTlVNOgorICAgICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJJTlZBTElEIEVOVU0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9JTlZBTElE
X1ZBTFVFOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTlZBTElEIFZBTFVFIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR0xfSU5WQUxJRF9PUEVSQVRJT046CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIklOVkFMSUQgT1BF
UkFUSU9OIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfT1VUX09GX01FTU9SWToKKyAg
ICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9n
TGV2ZWxJbmZvLCAiT1VUIE9GIE1FTU9SWSIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJ
bmZvLCAiXG4iKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0lNRyhH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgLy8gQ3Vy
cmVudGx5IG9ubHkgZm9ybWF0PVJHQkEsIHR5cGU9VU5TSUdORURfQllURSBpcyBzdXBwb3J0ZWQg
YnkgdGhlIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2Vi
Z2wvc3BlY3MvbGF0ZXN0LworICAgIC8vIElmIHRoaXMgZXZlciBjaGFuZ2VzLCB0aGlzIGNvZGUg
d2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0cmlkZXMg
b2Ygb3VyIGRhdGEgYW5kIGNhbnZhcworICAgIHVuc2lnbmVkIGludCBmb3JtYXRTaXplID0gNDsg
Ly8gUkdCQSBVTlNJR05FRF9CWVRFCisgICAgdW5zaWduZWQgaW50IGRhdGFTdHJpZGUgPSB3aWR0
aCAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IGNhbnZhc1N0cmlkZSA9IG1fY3VycmVu
dFdpZHRoICogZm9ybWF0U2l6ZTsKKworICAgIC8vIElmIHdlIGFyZSB1c2luZyBhIHBhY2sgYWxp
Z25tZW50IG9mIDgsIHRoZW4gd2UgbmVlZCB0byBhbGlnbiBvdXIgc3RyaWRlcyB0byA4IGJ5dGUg
Ym91bmRhcmllcworICAgIC8vIFNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRh
X3N0cnVjdHVyZV9hbGlnbm1lbnQgKGNvbXB1dGluZyBwYWRkaW5nKQorICAgIGludCBwYWNrQWxp
Z25tZW50OworICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25t
ZW50KTsKKyAgICBpZiAoOCA9PSBwYWNrQWxpZ25tZW50KSB7CisgICAgICAgIGRhdGFTdHJpZGUg
PSAoZGF0YVN0cmlkZSArIDcpICYgfjc7CisgICAgICAgIGNhbnZhc1N0cmlkZSA9IChjYW52YXNT
dHJpZGUgKyA3KSAmIH43OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIqIGNhbnZhc0RhdGEg
PSBuZXcgdW5zaWduZWQgY2hhcltjYW52YXNTdHJpZGUgKiBtX2N1cnJlbnRIZWlnaHRdOworICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY2FudmFzRGF0YSk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVhZCBv
dXIgY2FudmFzIGRhdGEgZHVlIHRvIGEgR0wgZXJyb3IsIGRvbid0IGNvbnRpbnVlCisgICAgaW50
IGVycm9yID0gZ2xHZXRFcnJvcigpOworICAgIGlmIChHTF9OT19FUlJPUiAhPSBlcnJvcikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBDbGVhciBvdXIgZGF0YSBpbiBjYXNlIHNvbWUgb2YgaXQgbGllcyBvdXRzaWRl
IHRoZSBib3VuZHMgb2Ygb3VyIGNhbnZhcworICAgIC8vIFRPRE86IGRvbid0IGRvIHRoaXMgaWYg
YWxsIG9mIHRoZSBkYXRhIGxpZXMgaW5zaWRlIHRoZSBib3VuZHMgb2YgdGhlIGNhbnZhcworICAg
IG1lbXNldChkYXRhLCAwLCBkYXRhU3RyaWRlICogaGVpZ2h0KTsKKworICAgIC8vIENhbGN1bGF0
ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIG91ciBjYW52YXMgYW5kIGRhdGEgYm91bmRzCisgICAgSW50
UmVjdCBkYXRhUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBJbnRSZWN0IGNhbnZhc1Jl
Y3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisgICAgSW50UmVjdCBu
b25aZXJvRGF0YVJlY3QgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3QsIGNhbnZhc1JlY3QpOworCisg
ICAgdW5zaWduZWQgaW50IHhEYXRhT2Zmc2V0ID0geCA8IDAgPyAteCAqIGZvcm1hdFNpemUgOiAw
OworICAgIHVuc2lnbmVkIGludCB5RGF0YU9mZnNldCA9IHkgPCAwID8gLXkgKiBkYXRhU3RyaWRl
IDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeENhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC54
KCkgKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCB5Q2FudmFzT2Zmc2V0ID0gbm9uWmVy
b0RhdGFSZWN0LnkoKSAqIGNhbnZhc1N0cmlkZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyB4RGF0YU9mZnNldCArIHlEYXRhT2Zm
c2V0OworICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IGNhbnZhc0RhdGEgKyB4Q2FudmFzT2Zmc2V0
ICsgeUNhbnZhc09mZnNldDsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBub25aZXJvRGF0
YVJlY3QuaGVpZ2h0KCk7IHJvdysrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgbm9uWmVy
b0RhdGFSZWN0LndpZHRoKCkgKiBmb3JtYXRTaXplKTsKKyAgICAgICAgZHN0ICs9IGRhdGFTdHJp
ZGU7CisgICAgICAgIHNyYyArPSBjYW52YXNTdHJpZGU7CisgICAgfQorCisgICAgZGVsZXRlIFtd
IGNhbnZhc0RhdGE7Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52
YXNCdWZmZXIoKSBjb25zdAogewotICAgIC8vIFNlZSBQUiAjMTIwMTQxLgogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xNDcsNyArMzM5LDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAogCiBQbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogewotICAg
IHJldHVybiBtX3RleHR1cmU7CisgICAgcmV0dXJuIG1fY29tcG9zaXRpbmdMYXllci0+Z2V0VGV4
dHVyZUlEKCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nv
bnRleHQ7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xOTYsNyAr
MzkzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNp
Z25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWcKICAgICBGbG9hdFJlY3QgZHN0KDAsIDAs
IGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKIAogICAgIFJlZlB0cjxCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYT4gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3Jl
YXRlKGNhbnZhc0JpdG1hcCwgZmFsc2UpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShiaXRtYXBJ
bWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0LCBzcmMsIENvbXBvc2l0ZUNvcHks
IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNlKTsKKyAgICBjb250ZXh0LT5kcmF3
SW1hZ2UoYml0bWFwSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdCwgc3JjLCBD
b21wb3NpdGVDb3B5LCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8Q29u
dGV4dExvc3RDYWxsYmFjaz4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKaW5kZXggNzJlZmY5MjE4
OTJhNmEwMGQ1NjRmNTRhMTI5ZTIzYWFhN2MxYmFkNS4uNzg2MzAzYzU5Y2FlNTM4MDI5ZTg3ZTZk
YzVkMThhMDVkYzU4ODQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaApAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCiAgICAgdmlydHVhbCB2
b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBs
b25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkx
LCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAKKwogICAgIHZp
cnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0
dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDVhNjI4ODEwZGZkMTI3Njcw
NjBlYTBmNGU2MjE4MDJjNjlhM2E4ZWIuLjE1Y2E0YzkxOTdjYmNmOTE0OTVjYzhiNDhiNjk0Yjcx
NTA5NjkzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBAIC0x
MzAsNiArMTMwLDE2IEBAIFN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0CiAgICAgaWYgKCFpc1ZhbGlk
KQogICAgICAgICByZXR1cm4gIiI7CiAKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorICAgIC8v
IE91ciBoYXJkd2FyZSByZWFsbHkgbGlrZXMgYmVpbmcgdG9sZCB3aGF0IHByZWNpc2lvbiB0byBo
YXZlIChpLmUuLCB3aXRoICJwcmVjaXNpb24gKiBmbG9hdCIpCisgICAgLy8gQU5HTEUgc3RyaXBz
IHRoaXMgaW5mb3JtYXRpb24uCisgICAgaWYgKGVudHJ5LnNvdXJjZS5jb250YWlucygicHJlY2lz
aW9uIGxvd3AgZmxvYXQiKSkKKyAgICAgICAgdHJhbnNsYXRlZFNoYWRlclNvdXJjZT0icHJlY2lz
aW9uIGxvd3AgZmxvYXQ7XG4iK3RyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZSBpZiAo
ZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdCIpKQorICAgICAg
ICB0cmFuc2xhdGVkU2hhZGVyU291cmNlPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIrdHJh
bnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBlbHNlCisgICAgICAgIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2U9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiIrdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsK
KyNlbmRpZgogICAgIHJldHVybiB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKaW5kZXggMjc5NmQ2ZmM5MzA5NjVjZGYxZWI0NzRj
NzM3MTdiMmQxMzU3ZTExZS4uNmE2MWU0NjMyYmU4MTY1Nzc5NGZkMzc3ZDhjNTE2YjgwZmU5NjJl
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaApAQCAtNTMsMTMgKzUzLDEz
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3Mg
RXh0ZW5zaW9uczNET3BlbkdMRVM7CiAgICAgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKEdyYXBo
aWNzQ29udGV4dDNEKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29u
c3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGdldEV4dGVuc2lvbnMoKSA9IDA7
CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQog
ICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxT
dHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xF
Uy5jcHAKaW5kZXggZmVkNTQ5MmM2NTJhMzViMThhZjdjYWJjZThhNzFhYjAxMjJhMzFiOC4uY2Y3
Y2M0NjE2OWVjNjk4N2FiZWQ2NTM5MzVkNzRlODFhZjEyOGNjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdM
RVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBs
CiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25l
ZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Y29weVRleHR1cmVDSFJP
TUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGlu
dCwgR0MzRGVudW0pCkBAIC0xNDUsOCArMTQ1LDE0IEBAIGJvb2wgRXh0ZW5zaW9uczNET3BlbkdM
RVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgICAgIG1f
Z2xJc1ZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElTVkVSVEVYQVJSQVlP
RVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5T0VTIikpOwogICAgICAg
ICAgICAgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0ID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIGlmIChuYW1lID09ICJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiAm
JiAhbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSkgeworICAgICAgICAg
ICAgLy8gU2VlIGJ1ZyAjOTExMzAuCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICAgICAg
ICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQ
cm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOworICAg
ICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DPihlZ2xH
ZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUciKSk7Cisj
ZWxzZQogICAgICAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcg
PSByZWludGVycHJldF9jYXN0PFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlN
Rz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlN
RyIpKTsKICAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcg
PSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1H
PihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUci
KSk7CisjZW5kaWYKICAgICAgICAgICAgIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJU
b1RleHR1cmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTEVTLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMRVMuaAppbmRleCBjM2NjNTk1NzFjZTM5MzlhNzEyZTQ5NzU4OTM3ZGEz
YzNmZTQyZDIxLi4zZTVlNDRiNjEwM2IxNmNjZDg4MmI4ZDExZjRiMGYyZDk0NzAyNmU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApAQCAtNjIsOCArNjIsMTYgQEAgcHJvdGVjdGVkOgog
ICAgIGJvb2wgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0OwogICAgIGJvb2wgbV9zdXBw
b3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZTsKIAorICAgIC8vIE9sZGVyIHZlcnNp
b25zIG9mIGdsMmV4dC5oIGRlZmluZSBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1Q
TEVJTUcgaW5zdGVhZCBvZiBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQ
Uk9DCisgICAgLy8gSW4gYW4gaWRlYWwgd29ybGQsIHdlIHdvdWxkIGp1c3QgaGF2ZSBhbiAjaWYg
dG8gY2hlY2sgZm9yIHdoZXRoZXIgdGhlIHN5bWJvbCBpcyBkZWZpbmVkLCBidXQgdGhpcyBjYW5u
b3QgYmUgZG9uZSBieSB0aGUgcHJlcHJvY2Vzc29yLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEwMzAuCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVSQlVGRkVS
U1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlSU1HOworI2Vsc2UKICAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJ
TUcgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7CiAgICAgUEZOR0xSRU5E
RVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUcgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRzsKKyNlbmRpZgogICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBtX2ds
QmluZFZlcnRleEFycmF5T0VTOwogICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBt
X2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOwogICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJP
QyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAKaW5kZXggOWE3ZjQyNTBkNTdlM2I4OTczYjM3NTk2ZGI3NWJkNTNk
ZGM5NjhhYS4uYTRkMWViNGNkOTNjNDc2MzM2YzAyZjYxM2JmYzY1OTQ0ZDI4NmNiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xMjAsOCAr
MTIwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciwKICAgICAgICAgfQogICAgIH0KIAorI2lm
IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgp
LmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLCB0cnVlKTsKKyNlbHNlCiAgICAgcGFp
bnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQs
CiAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSwg
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKikKQEAgLTE2
MSwxMSArMTY2LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkK
IAogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7CiAgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworI2lmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCisgICAgaWYgKCFwbGF0Zm9ybVRleHR1cmUoKSkgeworICAgICAg
ICBHTHVpbnQgdGV4ID0gMDsKKyAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZ0ZXgpOworICAg
ICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4KTsKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBH
TF9SR0JBLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgbV9jb21wb3NpdGluZ0xheWVyLT5zZXRUZXh0dXJl
SUQodGV4KTsKKyAgICB9CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHBsYXRm
b3JtVGV4dHVyZSgpKTsKKyNlbHNlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCiAgICAgOjpnbENvcHlUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgMCwgMCwgbV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCwgMCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fYm91bmRUZXh0dXJlMCk7CiAgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0
dXJlKTsKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9ib3VuZEZCTyk7CisgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pCisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2JvdW5kRkJPKTsKICAgICA6OmdsRmluaXNoKCk7CiAgICAgbV9sYXllckNvbXBvc2l0ZWQg
PSB0cnVlOwogfQpAQCAtMzI1LDcgKzM0NiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcgog
ICAgIGlmIChidWZmZXIpCiAgICAgICAgIGZibyA9IGJ1ZmZlcjsKICAgICBlbHNlCisjaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKKyAgICAgICAgZmJvID0gbV9mYm87CisjZWxzZQogICAgICAgICBm
Ym8gPSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworI2Vu
ZGlmCiAgICAgaWYgKGZibyAhPSBtX2JvdW5kRkJPKSB7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQodGFyZ2V0LCBmYm8pOwogICAgICAgICBtX2JvdW5kRkJPID0gZmJvOwpAQCAtNDQ4
LDMzICs0NzMsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBpbnQgR0xDb21waWxlU3VjY2VzczsKICAgICAKICAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nl
c3MpOworCisgICAgLy8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKKyAgICBHTGludCBsZW5ndGgg
PSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxl
bmd0aCk7CisKKyAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9i
amVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAg
ICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgT3duQXJyYXlQdHI8R0xjaGFyPiBpbmZv
ID0gYWRvcHRBcnJheVB0cihuZXcgR0xjaGFyW2xlbmd0aF0pOworICAgICAgICA6OmdsR2V0U2hh
ZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZ2V0KCkpOworCisgICAgICAg
IGVudHJ5LmxvZyA9IGluZm8uZ2V0KCk7CisgICAgfQogICAgIAogICAgIC8vIEFTU0VSVCB0aGF0
IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMLgogICAgIEFT
U0VSVChHTENvbXBpbGVTdWNjZXNzID09IEdMX1RSVUUpOworI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCisgICAgaWYgKEdMQ29tcGlsZVN1Y2Nlc3MgIT0gR0xfVFJVRSkKKyAgICAgICAgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAi
VGhlIHNoYWRlciB2YWxpZGF0ZWQsIGJ1dCBkaWRuJ3QgY29tcGlsZS5cbiIpOworI2VuZGlmCiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmICFQTEFURk9STShCTEFDS0JFUlJZ
KQogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pIHsKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICB9CisjZW5kaWYKICAg
ICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAg
aWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICByZXNvbHZl
TXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwog
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOwogICAgIH0KKyNlbmRpZgogICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyNp
ZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9k
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCAyNjI4MTkw
OWI0OGZlMWYzZDZiYTJlZWY5OGZmMzVkNWRlMDA3MDAyLi43OGJmNzQ1YWFjZDFlM2QwZTI1NzM3
MzEyMDU0ZGViMTRjNjBhMjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VT
aGFkZXJDb21waWxlcigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQogewotICAgIC8vIEN1cnJl
bnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBlPVVOU0lHTkVEX0JZVEUgaXMgc3VwcG9ydGVkIGJ5
IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmds
L3NwZWNzL2xhdGVzdC8KKyAgICAvLyBDdXJyZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1V
TlNJR05FRF9CWVRFIGlzIHN1cHBvcnRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3
dy5raHJvbm9zLm9yZy9yZWcKICAgICAvLyBJZiB0aGlzIGV2ZXIgY2hhbmdlcywgdGhpcyBjb2Rl
IHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdHJpZGVz
IG9mIG91ciBkYXRhIGFuZCBjYW52YXMKQEAgLTk5LDEwICs5OSwyMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaQogICAgIH0KIAogICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOworI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCisgICAgLy8gSW1hZ2luYXRpb24gc3BlY2lmaWMgZml4CisgICAgaWYg
KG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlKQorICAgICAgICByZWFkUGl4ZWxzSU1HKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgZWxzZQorICAgICAgICA6Omds
UmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisg
ICAgLy8gTm90ZTogQmxhY2tCZXJyaWVzIGhhdmUgYSBkaWZmZXJlbnQgYW50aS1hbGlhc2luZyBw
aXBlbGluZS4KKyNlbHNlCiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhKTsKIAogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2Jv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyNl
bmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNp
Z25lZCBjaGFyKiBwaXhlbHMpCkBAIC0xMTUsNiArMTI1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHks
IGludAogICAgIH0KIH0KIAorI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQorLy8gVGhlIEJsYWNr
QmVycnkgcG9ydCB1c2VzIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlvbiBvZiByZXNoYXBlRkJPcy4g
U2VlIEdyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdp
ZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtMTgzLDYgKzE5NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAKICAgICByZXR1cm4gbXVz
dFJlc3RvcmVGQk87CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2
ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhYWMwNjhiNDg0ZGRkYzg3NDc2ZjEy
NWEyMTNjZjRjNGRlOTNhMDY5Li4wYzJmMTgzMzZjZmQyZTkzM2ZhYjlhZjAxOTBlNzkzZjYwZDcw
ZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtMTA5LDYgKzEw
OSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiApCiAKIElGIChFTkFCTEVfV0VCR0wp
CisgICAgQUREX0RFRklOSVRJT05TICgtRFdURl9VU0VfT1BFTkdMX0VTXzI9MSkKICAgICBMSVNU
KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAke09QRU5HTF9JTkNM
VURFX0RJUn0KICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152543</attachid>
            <date>2012-07-16 08:47:19 -0700</date>
            <delta_ts>2012-07-16 09:52:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91143-20120716114642.patch</filename>
            <type>text/plain</type>
            <size>32758</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgxYTQzOWY3MTM2YmYy
MjRjYzFmMTQwMjQxZmJmNTM1MDYwMmE4ZC4uODlkYzQ1NTQ4NzI2OGMyMjgyMjFlYTYyZTJlYmUw
NGI4ZmY0YmExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3LTEzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gV2ViR0wgQ29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIEJsYWNrQmVycnktc3BlY2lmaWMg
Zml4ZXMgZm9yIGFudGktYWxpYXNpbmcsIGxvZ2dpbmcsIGFuZCBzaGFkZXIgY29tcGlsYXRpb24u
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDogQWRkIGEgdmFsdWUgZm9yIFRJIEltYWdpbmF0aW9uIGNoaXBzZXRzIG9uIEJsYWNrQmVycnkg
cGxhdGZvcm1zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwOiBNdWx0aXBsZSBkb3duc3RyZWFtIGNoYW5nZXMKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJh
bWVCdWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNJTUcpOiBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeCBmb3IgSW1hZ2luYXRpb24gaGFy
ZHdhcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlLgorICAgICAg
ICAoRXh0ZW5zaW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKTogSGFj
ayB0byBmaXggQU5HTEUtZ2VuZXJhdGVkIGNvZGUgb24gQmxhY2tCZXJyeSBwbGF0Zm9ybXMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBJIGFtIG5vdCBp
biBhIHBvc2l0aW9uIHRvIGNoYW5nZSBzeXN0ZW0gaGVhZGVycyBmcm9tIGNvcnJlY3QgdG8gaW5j
b3JyZWN0LgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBJIGFtIG5vdCBpbiBhIHBvc2l0aW9uIHRv
IGNoYW5nZSBzeXN0ZW0gaGVhZGVycyBmcm9tIGNvcnJlY3QgdG8gaW5jb3JyZWN0LgorICAgICAg
ICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6IEFkZCBhIEJsYWNrQmVycnkt
c3BlY2lmaWMgYW50aS1hbGlhc2luZyBmaXguCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNy0xNiAgWm9sdGFuIEhvcnZhdGgg
IDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0
ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYWYxNTBkZDYxNTg4M2E4Zjg5
OGEyNDIzOTYzMGQ5YjAzODM5MzUyMS4uZWM3MzJmMjg2YjI3ZDZhMDM0NDk5OGM5NzU1Yjk4Yjhl
OTA4MmRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0xMyAgSm9zaHVhIE5l
dHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIFdlYkdMIENvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkxMTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeGVz
IGZvciBhbnRpLWFsaWFzaW5nLCBsb2dnaW5nLCBhbmQgc2hhZGVyIGNvbXBpbGF0aW9uLgorCisg
ICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBEZWZpbmUgV1RGX1VTRV9PUEVOR0xf
RVNfMiBvbiBXZWJHTC1lbmFibGVkIGJ1aWxkcy4KKwogMjAxMi0wNy0xNiAgRnJlZGVyaWsgR2xh
ZGhvcm4gIDxmcmVkZXJpay5nbGFkaG9ybkBub2tpYS5jb20+CiAKICAgICAgICAgQWRkIGFjY2Vz
c2libGUgZm9yIFFXZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMWU2MTg0MjkzNDhjYTVjMDhkMTRkYTc4
NzhiNDFkMTIzMTViMzEwNS4uYzJmZWVjMjkzOTllMmRhYmM3MTFmODUxMmI5ZjljYjlmOThjNzY5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC05MzEsNiArOTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlYWRQ
aXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscyk7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCisgICAgdm9pZCBsb2dGcmFtZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7
CisgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
dm9pZCogZGF0YSk7CisjZW5kaWYKKwogICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYpOwogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiA9IEludFJlY3QoKSk7CiAjaWYgUExBVEZPUk0oUVQpICYmIFVTRShHUkFQSElDU19TVVJG
QUNFKQpAQCAtOTQzLDYgKzk0OCwxMSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBt
X3dlYkdMTGF5ZXI7CisjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBSZWZQdHI8UGxhdGZvcm1MYXllcj4gbV9jb21wb3NpdGlu
Z0xheWVyOworI2VuZGlmCisgICAgdm9pZCogbV9jb250ZXh0OwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKQEAgLTk5Niw5ICsxMDA2LDE0IEBAIHB1YmxpYzoK
ICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhh
c2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogCisjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKKyAgICBib29sIG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlOworI2VuZGlmCisKKyNpZiAh
UExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsK
LQorI2VuZGlmCiAgICAgYm9vbCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygp
IGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNr
QmVycnkuY3BwCmluZGV4IGExZjYyNTY5NmI5MzE3OWM0ZDkwODI3ODhmMTgzZTQzNDVlNjAzNzgu
LmRkNGUzZjRjODVhODYzNDUxOWMzZmUyYzAzZmUzYWNjYzA1M2M4YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0
M0RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTMxLDExICszMSwx
MyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJX
ZWJLaXRUaHJlYWQuaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDgsMjIgKzUwLDIxIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoQXR0cmlidXRlcyBhdHRyaWJzLCBIb3N0CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCBm
YWxzZSkpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
b3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jdXJyZW50V2lk
dGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9ob3N0V2luZG93KGhvc3RX
aW5kb3cpCiAgICAgLCBtX2NvbnRleHQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpj
cmVhdGVXZWJHTENvbnRleHQoKSkKLSAgICAsIG1fZXh0ZW5zaW9ucyhhZG9wdFB0cihuZXcgRXh0
ZW5zaW9uczNET3BlbkdMKHRoaXMpKSkKKyAgICAsIG1fZXh0ZW5zaW9ucyhhZG9wdFB0cihuZXcg
RXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykpKQogICAgICwgbV9hdHRycyhhdHRycykKICAgICAs
IG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKKyAgICAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdChHTF9SR0JBKQogICAgICwgbV9ib3VuZEZCTygwKQogICAgICwgbV9hY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKQogICAgICwgbV9ib3VuZFRleHR1cmUwKDApCi0gICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCi0g
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1faXNJbWFnaW5hdGlvbkhh
cmR3YXJlKDApCiB7CiAgICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTcxLDEwICs3Miw2IEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpCiAjZW5kaWYKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAK
LSAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAg
ICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRl
cl90b190ZXh0dXJlIikpCi0gICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
CiAgICAgICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCiAgICAgICAgIDo6
Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CkBAIC05NiwxMSArOTMsMjggQEAgR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2kKICNlbmRpZgogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJZiBHcmFwaGljc0Nv
bnRleHQzRCBpcyBjcmVhdGVkIHdpdGggcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgPT0gdHJ1
ZSwKLSAgICAvLyBtYWtlQ29udGV4dEN1cnJlbnQoKSB3aWxsIG1ha2UgdGhlIHNoYXJlZCBjb250
ZXh0IGN1cnJlbnQuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBlbmFibGUgR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSB3aXRoIEdM
IEVTMj8gU2VlIFBSICMxMjAxNDEuCisgICAgY29uc3QgY2hhciogcmVuZGVyZXIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1JFTkRFUkVSKSk7CisgICAg
bV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUgPSBzdGQ6OnN0cnN0cihyZW5kZXJlciwgIlBvd2VyVlIg
U0dYIik7CisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVS
ZXNvdXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMp
OworCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOyAvLyBBbHdheXMgc2V0
IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgPSBtX2V4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKKyAgICBBTkdMRVJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gbV9l
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRUdMX2ltYWdlX2V4dGVybmFsIik7CisgICAgQU5HTEVS
ZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlID0gbV9leHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIik7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOwogCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CkBA
IC0xMTgsOSArMTMyLDE4NyBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KCkKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lXZWJHTENvbnRl
eHQobV9jb250ZXh0KTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3Mo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBBIEJsYWNrQmVycnktc3BlY2lmaWMgaW1w
bGVtZW50YXRpb24gb2YgcmVzaGFwZUZCT3MgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgY29udGFp
bnM6CisgICAgLy8gIC0gYW4gSW1hZ2luYXRpb24tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2Yg
YW50aS1hbGlhc2luZworICAgIC8vICAtIGFuIEltYWdpbmF0aW9uLXNwZWNpZmljIGZpeCBmb3Ig
RkJPcyBvZiBzaXplIGxlc3MgdGhhbiAoMTYsMTYpCisKKyAgICBpbnQgZmJvV2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaW50IGZib0hlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICAvLyBJ
bWFnaW5hdGlvbi1zcGVjaWZpYyBmaXgKKyAgICBpZiAobV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUp
IHsKKyAgICAgICAgZmJvV2lkdGggPSBzdGQ6Om1heChmYm9XaWR0aCwgMTYpOworICAgICAgICBm
Ym9IZWlnaHQgPSBzdGQ6Om1heChmYm9IZWlnaHQsIDE2KTsKKyAgICB9CisKKyAgICBHTHVpbnQg
aW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgICAgIGNv
bG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJl
IHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdy
YXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
ICYmIG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgIH0K
KworICAgIEdMaW50IHNhbXBsZUNvdW50ID0gODsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIC8vIEhhcmRjb2RlIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIGR1ZSB0byBoZWFkZXIgaXNzdWUgKFBSMTMyMTgz
KQorICAgICAgICAvLyA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfSU1HLCAmbWF4U2Ft
cGxlQ291bnQpOworICAgICAgICBtYXhTYW1wbGVDb3VudCA9IDQ7CisgICAgICAgIHNhbXBsZUNv
dW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgIH0KKworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIGZib1dpZHRoLCBmYm9I
ZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIEV4dGVu
c2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyhHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwLCBzYW1wbGVDb3VudCk7CisKKyAgICAgICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgICAgICBleHRlbnNpb25zLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0LCBmYm9XaWR0aCwgZmJvSGVpZ2h0KTsKKworICAgICAgICAgICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CisKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7
CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
ZmJvV2lkdGgsIGZib0hlaWdodCk7CisKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICB9CisgICAgfQorICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworCisgICAgbG9nRnJhbWVCdWZmZXJTdGF0
dXMoX19MSU5FX18pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxvZ0ZyYW1lQnVmZmVyU3RhdHVzKGludCBsaW5lKQoreworICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIkNoZWNr
aW5nIEZyYW1lQnVmZmVyIHN0YXR1cyBhdCBsaW5lICVkOiAiLCBsaW5lKTsKKyAgICBzd2l0Y2gg
KGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpKSB7CisgICAg
Y2FzZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURToKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiQ09NUExFVEUgfCAi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgQVRUQUNITUVOVCB8ICIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19B
VFRBQ0hNRU5UOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJNSVNTSU5HIEFUVEFDSE1FTlQgfCAiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM6
CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgRElNRU5TSU9OUyB8ICIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOgorICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJV
TlNVUFBPUlRFRCB8ICIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEVfRVhUOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIE1VTFRJ
U0FNUExFIHwgIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoZ2xHZXRF
cnJvcigpKSB7CisgICAgY2FzZSBHTF9OT19FUlJPUjoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiTk8gRVJST1Ii
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06CisgICAgICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5m
bywgIklOVkFMSUQgRU5VTSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX0lOVkFMSURf
VkFMVUU6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkxvZ0xldmVsSW5mbywgIklOVkFMSUQgVkFMVUUiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5WQUxJRCBPUEVS
QVRJT04iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9PVVRfT0ZfTUVNT1JZOgorICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbEluZm8sICJPVVQgT0YgTUVNT1JZIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJcbiIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzSU1HKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBDdXJy
ZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05FRF9CWVRFIGlzIHN1cHBvcnRlZCBi
eSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJn
bC9zcGVjcy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVyIGNoYW5nZXMsIHRoaXMgY29kZSB3
aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RyaWRlcyBv
ZiBvdXIgZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQgaW50IGZvcm1hdFNpemUgPSA0OyAv
LyBSR0JBIFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBpbnQgZGF0YVN0cmlkZSA9IHdpZHRo
ICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2FudmFzU3RyaWRlID0gbV9jdXJyZW50
V2lkdGggKiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGEgcGFjayBhbGln
bm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91ciBzdHJpZGVzIHRvIDggYnl0ZSBi
b3VuZGFyaWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFf
c3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRpbmcpCisgICAgaW50IHBhY2tBbGln
bm1lbnQ7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1l
bnQpOworICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsKKyAgICAgICAgZGF0YVN0cmlkZSA9
IChkYXRhU3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2FudmFzU3RyaWRlID0gKGNhbnZhc1N0
cmlkZSArIDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogY2FudmFzRGF0YSA9
IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3VycmVudEhlaWdodF07CisgICAg
OjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgZm9y
bWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZWFkIG91
ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9uJ3QgY29udGludWUKKyAgICBpbnQg
ZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05PX0VSUk9SICE9IGVycm9yKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29tZSBvZiBpdCBsaWVzIG91dHNpZGUg
dGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9ETzogZG9uJ3QgZG8gdGhpcyBpZiBh
bGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY2FudmFzCisgICAg
bWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQpOworCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQgZGF0YSBib3VuZHMKKyAgICBJbnRS
ZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJlY3QgY2FudmFzUmVj
dCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyAgICBJbnRSZWN0IG5v
blplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgY2FudmFzUmVjdCk7CisKKyAg
ICB1bnNpZ25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14ICogZm9ybWF0U2l6ZSA6IDA7
CisgICAgdW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8IDAgPyAteSAqIGRhdGFTdHJpZGUg
OiAwOworICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0Lngo
KSAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlDYW52YXNPZmZzZXQgPSBub25aZXJv
RGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRhT2Zmc2V0ICsgeURhdGFPZmZz
ZXQ7CisgICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0YSArIHhDYW52YXNPZmZzZXQg
KyB5Q2FudmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vblplcm9EYXRh
UmVjdC5oZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBub25aZXJv
RGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAgICAgICBkc3QgKz0gZGF0YVN0cmlk
ZTsKKyAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAgICB9CisKKyAgICBkZWxldGUgW10g
Y2FudmFzRGF0YTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpIGNvbnN0CiB7Ci0gICAgLy8gU2VlIFBSICMxMjAxNDEuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTE0Nyw3ICszMzksMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0CiAKIFBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fdGV4dHVyZTsKKyAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLT5nZXRUZXh0
dXJlSUQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dDsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE5Niw3ICsz
OTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZwogICAgIEZsb2F0UmVjdCBkc3QoMCwgMCwg
aW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpOwogCiAgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhPiBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVh
dGUoY2FudmFzQml0bWFwLCBmYWxzZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGJpdG1hcElt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3QsIHNyYywgQ29tcG9zaXRlQ29weSwg
RG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOworICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShiaXRtYXBJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0LCBzcmMsIENv
bXBvc2l0ZUNvcHksIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBmYWxzZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAppbmRleCA3MmVmZjkyMTg5
MmE2YTAwZDU2NGY1NGExMjllMjNhYWE3YzFiYWQ1Li43ODYzMDNjNTljYWU1MzgwMjllODdlNmRj
NWQxOGEwNWRjNTg4NDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIHZv
aWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxv
bmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEs
IHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwotICAgIAorCiAgICAgdmly
dHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CiAgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1
YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNWE2Mjg4MTBkZmQxMjc2NzA2
MGVhMGY0ZTYyMTgwMmM2OWEzYThlYi4uNThmYzdmN2RlYjBkODY5NmRhNzFiZGQ3OTVlY2ExZmQx
MDg3OTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEz
MCw2ICsxMzAsMTYgQEAgU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QKICAgICBpZiAoIWlzVmFsaWQp
CiAgICAgICAgIHJldHVybiAiIjsKIAorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8g
T3VyIGhhcmR3YXJlIHJlYWxseSBsaWtlcyBiZWluZyB0b2xkIHdoYXQgcHJlY2lzaW9uIHRvIGhh
dmUgKGkuZS4sIHdpdGggInByZWNpc2lvbiAqIGZsb2F0IikKKyAgICAvLyBBTkdMRSBzdHJpcHMg
dGhpcyBpbmZvcm1hdGlvbi4KKyAgICBpZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNp
b24gbG93cCBmbG9hdCIpKQorICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gInByZWNp
c2lvbiBsb3dwIGZsb2F0O1xuIiArIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZSBp
ZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdCIpKQorICAg
ICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IiArIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZQorICAgICAgICB0cmFuc2xhdGVk
U2hhZGVyU291cmNlID0gInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiIgKyB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlOworI2VuZGlmCiAgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAppbmRleCAyNzk2ZDZmYzkzMDk2
NWNkZjFlYjQ3NGM3MzcxN2IyZDEzNTdlMTFlLi42YTYxZTQ2MzJiZTgxNjU3Nzk0ZmQzNzdkOGM1
MTZiODBmZTk2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCkBAIC01
MywxMyArNTMsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJvdGVjdGVkOgorICAgIGZy
aWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKICAgICBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5z
aW9ucygpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5z
aW9ucygpOwotCiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAg
ICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmNwcAppbmRleCBmZWQ1NDkyYzY1MmEzNWIxOGFmN2NhYmNlOGE3MWFiMDEy
MmEzMWI4Li5jZjdjYzQ2MTY5ZWM2OTg3YWJlZDY1MzkzNWQ3NGU4MWFmMTI4Y2NmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBFeHRlbnNp
b25zM0RPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxv
bmcgc3JjWDEsIGwKIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBs
ZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpjb3B5
VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEaW50LCBHQzNEZW51bSkKQEAgLTE0NSw4ICsxNDUsMTQgQEAgYm9vbCBFeHRlbnNp
b25zM0RPcGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogICAg
ICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNW
RVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMi
KSk7CiAgICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3Rv
X3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7
CisgICAgICAgICAgICAvLyBTZWUgYnVnICM5MTEzMC4KKyNpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQorICAgICAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BS
T0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJ
TUciKSk7CisgICAgICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlN
R1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyIpKTsKKyNlbHNlCiAgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1V
TFRJU0FNUExFSU1HPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11
bHRpc2FtcGxlSU1HIikpOwogICAgICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVM
VElTQU1QTEVJTUc+KGVnbEdldFByb2NBZGRyZXNzKCJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRyIpKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2Ft
cGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCmluZGV4IGMzY2M1OTU3MWNlMzkzOWE3MTJl
NDk3NTg5MzdkYTNjM2ZlNDJkMjEuLjNlNWU0NGI2MTAzYjE2Y2NkODgyYjhkMTFmNGIwZjJkOTQ3
MDI2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCkBAIC02Miw4ICs2MiwxNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3Q7CiAgICAg
Ym9vbCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlOwogCisgICAgLy8g
T2xkZXIgdmVyc2lvbnMgb2YgZ2wyZXh0LmggZGVmaW5lIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJF
MkRNVUxUSVNBTVBMRUlNRyBpbnN0ZWFkIG9mIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxU
SVNBTVBMRUlNR1BST0MKKyAgICAvLyBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugd291bGQganVzdCBo
YXZlIGFuICNpZiB0byBjaGVjayBmb3Igd2hldGhlciB0aGUgc3ltYm9sIGlzIGRlZmluZWQsIGJ1
dCB0aGlzIGNhbm5vdCBiZSBkb25lIGJ5IHRoZSBwcmVwcm9jZXNzb3IuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTAzMC4KKyNpZiBQTEFURk9S
TShCTEFDS0JFUlJZKQorICAgIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlN
R1BST0MgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xS
RU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUc7CisjZWxzZQogICAgIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRN
VUxUSVNBTVBMRUlNRyBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKICAg
ICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRyBtX2dsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HOworI2VuZGlmCiAgICAgUEZOR0xCSU5EVkVSVEVYQVJSQVlP
RVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVM7CiAgICAgUEZOR0xERUxFVEVWRVJURVhBUlJB
WVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVM7CiAgICAgUEZOR0xHRU5WRVJURVhB
UlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA5YTdmNDI1MGQ1N2UzYjg5NzNiMzc1
OTZkYjc1YmQ1M2RkYzk2OGFhLi5hNGQxZWI0Y2Q5M2M0NzYzMzZjMDJmNjEzYmZjNjU5NDRkMjg2
Y2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAK
QEAgLTEyMCw4ICsxMjAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyLAogICAgICAgICB9CiAg
ICAgfQogCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBwYWludFRvQ2FudmFzKHBpeGVs
cy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpLCBpbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCkuaGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCksIHRydWUpOworI2Vs
c2UKICAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCwKICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUo
KS53aWR0aCgpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCksIGltYWdlQnVm
ZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbmRpZgogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZm
ZXIqKQpAQCAtMTYxLDExICsxNjYsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFy
ZVRleHR1cmUoKQogCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJF
MCk7CisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBpZiAoIXBsYXRmb3JtVGV4dHVyZSgp
KSB7CisgICAgICAgIEdMdWludCB0ZXggPSAwOworICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwg
JnRleCk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXgpOworICAg
ICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIEdMX1JHQkEsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgICAgICBtX2NvbXBvc2l0aW5nTGF5ZXIt
PnNldFRleHR1cmVJRCh0ZXgpOworICAgIH0KKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgcGxhdGZvcm1UZXh0dXJlKCkpOworI2Vsc2UKICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYKICAgICA6OmdsQ29weVRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCAwLCAwLCBt
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwKTsKICAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1cmUwKTsKICAgICA6OmdsQWN0aXZlVGV4dHVyZSht
X2FjdGl2ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2JvdW5kRkJPKTsKKyAgICBpZiAobV9ib3VuZEZCTyAhPSBt
X2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOwogICAgIDo6Z2xGaW5pc2goKTsKICAgICBtX2xheWVy
Q29tcG9zaXRlZCA9IHRydWU7CiB9CkBAIC0zMjUsNyArMzQ2LDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgYnVmZmVyCiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgZmJvID0gYnVmZmVyOwogICAgIGVs
c2UKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorICAgICAgICBmYm8gPSBtX2ZibzsKKyNlbHNl
CiAgICAgICAgIGZibyA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBt
X2Zibyk7CisjZW5kaWYKICAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8pIHsKICAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CiAgICAgICAgIG1fYm91bmRGQk8gPSBm
Ym87CkBAIC00NDgsMzMgKzQ3Myw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxl
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIGludCBHTENvbXBpbGVTdWNjZXNz
OwogICAgIAogICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xD
b21waWxlU3VjY2Vzcyk7CisKKyAgICAvLyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdM
aW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0df
TEVOR1RILCAmbGVuZ3RoKTsKKworICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNl
Y29uZDsKKworICAgICAgICBHTHNpemVpIHNpemUgPSAwOworICAgICAgICBPd25BcnJheVB0cjxH
TGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7CisgICAgICAg
IDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5nZXQoKSk7
CisKKyAgICAgICAgZW50cnkubG9nID0gaW5mby5nZXQoKTsKKyAgICB9CiAgICAgCiAgICAgLy8g
QVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVu
R0wuCiAgICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7CisjaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyAgICBpZiAoR0xDb21waWxlU3VjY2VzcyAhPSBHTF9UUlVFKQorICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbFdhcm4sICJUaGUgc2hhZGVyIHZhbGlkYXRlZCwgYnV0IGRpZG4ndCBjb21waWxlLlxuIik7
CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgIVBMQVRGT1JN
KEJMQUNLQkVSUlkpCiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0g
bV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNz
YXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0K
KyNlbmRpZgogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyNpZiAhUExBVEZPUk0oQkxBQ0tC
RVJSWSkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisjZW5kaWYKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CiAgICAg
ICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgfQorI2VuZGlmCiAgICAgOjpnbENvcHlUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZShH
QzNEZW51bSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmlu
ZGV4IDI2MjgxOTA5YjQ4ZmUxZjNkNmJhMmVlZjk4ZmYzNWQ1ZGUwMDcwMDIuLjc5ZGRjYmJmZDlh
NGI1NWVjODI2ZTQxYjU5NWVlZjg0ZTY0ZDlkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTk5LDEwICs5OSwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaQogICAgIH0KIAogICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOworI2lmIFBMQVRGT1JNKEJM
QUNLQkVSUlkpCisgICAgLy8gSW1hZ2luYXRpb24gc3BlY2lmaWMgZml4CisgICAgaWYgKG1faXNJ
bWFnaW5hdGlvbkhhcmR3YXJlKQorICAgICAgICByZWFkUGl4ZWxzSU1HKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgZWxzZQorICAgICAgICA6OmdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8g
Tm90ZTogQmxhY2tCZXJyaWVzIGhhdmUgYSBkaWZmZXJlbnQgYW50aS1hbGlhc2luZyBwaXBlbGlu
ZS4KKyNlbHNlCiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBkYXRhKTsKIAogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyNlbmRpZgog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlm
TmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBj
aGFyKiBwaXhlbHMpCkBAIC0xMTUsNiArMTI1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludAog
ICAgIH0KIH0KIAorI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQorLy8gVGhlIEJsYWNrQmVycnkg
cG9ydCB1c2VzIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlvbiBvZiByZXNoYXBlRkJPcy4gU2VlIEdy
YXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
c2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdpZHRoID0g
c2l6ZS53aWR0aCgpOwpAQCAtMTgzLDYgKzE5NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAKICAgICByZXR1cm4gbXVzdFJlc3Rv
cmVGQk87CiB9CisjZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBhYWMwNjhiNDg0ZGRkYzg3NDc2ZjEyNWEyMTNj
ZjRjNGRlOTNhMDY5Li4wYzJmMTgzMzZjZmQyZTkzM2ZhYjlhZjAxOTBlNzkzZjYwZDcwZDdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtMTA5LDYgKzEwOSw3IEBA
IExJU1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiApCiAKIElGIChFTkFCTEVfV0VCR0wpCisgICAg
QUREX0RFRklOSVRJT05TICgtRFdURl9VU0VfT1BFTkdMX0VTXzI9MSkKICAgICBMSVNUKEFQUEVO
RCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAke09QRU5HTF9JTkNMVURFX0RJ
Un0KICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152554</attachid>
            <date>2012-07-16 09:53:04 -0700</date>
            <delta_ts>2012-07-16 12:10:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91143-20120716125227.patch</filename>
            <type>text/plain</type>
            <size>32848</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgxYTQzOWY3MTM2YmYy
MjRjYzFmMTQwMjQxZmJmNTM1MDYwMmE4ZC4uODlkYzQ1NTQ4NzI2OGMyMjgyMjFlYTYyZTJlYmUw
NGI4ZmY0YmExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3LTEzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gV2ViR0wgQ29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIEJsYWNrQmVycnktc3BlY2lmaWMg
Zml4ZXMgZm9yIGFudGktYWxpYXNpbmcsIGxvZ2dpbmcsIGFuZCBzaGFkZXIgY29tcGlsYXRpb24u
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDogQWRkIGEgdmFsdWUgZm9yIFRJIEltYWdpbmF0aW9uIGNoaXBzZXRzIG9uIEJsYWNrQmVycnkg
cGxhdGZvcm1zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwOiBNdWx0aXBsZSBkb3duc3RyZWFtIGNoYW5nZXMKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJh
bWVCdWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNJTUcpOiBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeCBmb3IgSW1hZ2luYXRpb24gaGFy
ZHdhcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlLgorICAgICAg
ICAoRXh0ZW5zaW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKTogSGFj
ayB0byBmaXggQU5HTEUtZ2VuZXJhdGVkIGNvZGUgb24gQmxhY2tCZXJyeSBwbGF0Zm9ybXMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBJIGFtIG5vdCBp
biBhIHBvc2l0aW9uIHRvIGNoYW5nZSBzeXN0ZW0gaGVhZGVycyBmcm9tIGNvcnJlY3QgdG8gaW5j
b3JyZWN0LgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBJIGFtIG5vdCBpbiBhIHBvc2l0aW9uIHRv
IGNoYW5nZSBzeXN0ZW0gaGVhZGVycyBmcm9tIGNvcnJlY3QgdG8gaW5jb3JyZWN0LgorICAgICAg
ICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6IEFkZCBhIEJsYWNrQmVycnkt
c3BlY2lmaWMgYW50aS1hbGlhc2luZyBmaXguCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNy0xNiAgWm9sdGFuIEhvcnZhdGgg
IDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0
ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYWYxNTBkZDYxNTg4M2E4Zjg5
OGEyNDIzOTYzMGQ5YjAzODM5MzUyMS4uZWM3MzJmMjg2YjI3ZDZhMDM0NDk5OGM5NzU1Yjk4Yjhl
OTA4MmRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0xMyAgSm9zaHVhIE5l
dHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIFdlYkdMIENvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkxMTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeGVz
IGZvciBhbnRpLWFsaWFzaW5nLCBsb2dnaW5nLCBhbmQgc2hhZGVyIGNvbXBpbGF0aW9uLgorCisg
ICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBEZWZpbmUgV1RGX1VTRV9PUEVOR0xf
RVNfMiBvbiBXZWJHTC1lbmFibGVkIGJ1aWxkcy4KKwogMjAxMi0wNy0xNiAgRnJlZGVyaWsgR2xh
ZGhvcm4gIDxmcmVkZXJpay5nbGFkaG9ybkBub2tpYS5jb20+CiAKICAgICAgICAgQWRkIGFjY2Vz
c2libGUgZm9yIFFXZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMWU2MTg0MjkzNDhjYTVjMDhkMTRkYTc4
NzhiNDFkMTIzMTViMzEwNS4uYzJmZWVjMjkzOTllMmRhYmM3MTFmODUxMmI5ZjljYjlmOThjNzY5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC05MzEsNiArOTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlYWRQ
aXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscyk7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCisgICAgdm9pZCBsb2dGcmFtZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7
CisgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
dm9pZCogZGF0YSk7CisjZW5kaWYKKwogICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYpOwogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiA9IEludFJlY3QoKSk7CiAjaWYgUExBVEZPUk0oUVQpICYmIFVTRShHUkFQSElDU19TVVJG
QUNFKQpAQCAtOTQzLDYgKzk0OCwxMSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBt
X3dlYkdMTGF5ZXI7CisjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBSZWZQdHI8UGxhdGZvcm1MYXllcj4gbV9jb21wb3NpdGlu
Z0xheWVyOworI2VuZGlmCisgICAgdm9pZCogbV9jb250ZXh0OwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKQEAgLTk5Niw5ICsxMDA2LDE0IEBAIHB1YmxpYzoK
ICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhh
c2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogCisjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKKyAgICBib29sIG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlOworI2VuZGlmCisKKyNpZiAh
UExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsK
LQorI2VuZGlmCiAgICAgYm9vbCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygp
IGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNr
QmVycnkuY3BwCmluZGV4IGExZjYyNTY5NmI5MzE3OWM0ZDkwODI3ODhmMTgzZTQzNDVlNjAzNzgu
LmRkNGUzZjRjODVhODYzNDUxOWMzZmUyYzAzZmUzYWNjYzA1M2M4YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0
M0RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTMxLDExICszMSwx
MyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJX
ZWJLaXRUaHJlYWQuaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDgsMjIgKzUwLDIxIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoQXR0cmlidXRlcyBhdHRyaWJzLCBIb3N0CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCBm
YWxzZSkpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
b3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jdXJyZW50V2lk
dGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9ob3N0V2luZG93KGhvc3RX
aW5kb3cpCiAgICAgLCBtX2NvbnRleHQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpj
cmVhdGVXZWJHTENvbnRleHQoKSkKLSAgICAsIG1fZXh0ZW5zaW9ucyhhZG9wdFB0cihuZXcgRXh0
ZW5zaW9uczNET3BlbkdMKHRoaXMpKSkKKyAgICAsIG1fZXh0ZW5zaW9ucyhhZG9wdFB0cihuZXcg
RXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykpKQogICAgICwgbV9hdHRycyhhdHRycykKICAgICAs
IG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKKyAgICAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdChHTF9SR0JBKQogICAgICwgbV9ib3VuZEZCTygwKQogICAgICwgbV9hY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKQogICAgICwgbV9ib3VuZFRleHR1cmUwKDApCi0gICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCi0g
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1faXNJbWFnaW5hdGlvbkhh
cmR3YXJlKDApCiB7CiAgICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTcxLDEwICs3Miw2IEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpCiAjZW5kaWYKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAK
LSAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAg
ICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRl
cl90b190ZXh0dXJlIikpCi0gICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
CiAgICAgICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCiAgICAgICAgIDo6
Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CkBAIC05NiwxMSArOTMsMjggQEAgR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2kKICNlbmRpZgogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJZiBHcmFwaGljc0Nv
bnRleHQzRCBpcyBjcmVhdGVkIHdpdGggcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgPT0gdHJ1
ZSwKLSAgICAvLyBtYWtlQ29udGV4dEN1cnJlbnQoKSB3aWxsIG1ha2UgdGhlIHNoYXJlZCBjb250
ZXh0IGN1cnJlbnQuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBlbmFibGUgR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSB3aXRoIEdM
IEVTMj8gU2VlIFBSICMxMjAxNDEuCisgICAgY29uc3QgY2hhciogcmVuZGVyZXIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1JFTkRFUkVSKSk7CisgICAg
bV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUgPSBzdGQ6OnN0cnN0cihyZW5kZXJlciwgIlBvd2VyVlIg
U0dYIik7CisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVS
ZXNvdXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMp
OworCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOyAvLyBBbHdheXMgc2V0
IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgPSBtX2V4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKKyAgICBBTkdMRVJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gbV9l
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRUdMX2ltYWdlX2V4dGVybmFsIik7CisgICAgQU5HTEVS
ZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlID0gbV9leHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIik7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOwogCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CkBA
IC0xMTgsOSArMTMyLDE4NyBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KCkKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lXZWJHTENvbnRl
eHQobV9jb250ZXh0KTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3Mo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBBIEJsYWNrQmVycnktc3BlY2lmaWMgaW1w
bGVtZW50YXRpb24gb2YgcmVzaGFwZUZCT3MgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgY29udGFp
bnM6CisgICAgLy8gIC0gYW4gSW1hZ2luYXRpb24tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2Yg
YW50aS1hbGlhc2luZworICAgIC8vICAtIGFuIEltYWdpbmF0aW9uLXNwZWNpZmljIGZpeCBmb3Ig
RkJPcyBvZiBzaXplIGxlc3MgdGhhbiAoMTYsMTYpCisKKyAgICBpbnQgZmJvV2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaW50IGZib0hlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICAvLyBJ
bWFnaW5hdGlvbi1zcGVjaWZpYyBmaXgKKyAgICBpZiAobV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUp
IHsKKyAgICAgICAgZmJvV2lkdGggPSBzdGQ6Om1heChmYm9XaWR0aCwgMTYpOworICAgICAgICBm
Ym9IZWlnaHQgPSBzdGQ6Om1heChmYm9IZWlnaHQsIDE2KTsKKyAgICB9CisKKyAgICBHTHVpbnQg
aW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgICAgIGNv
bG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJl
IHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdy
YXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
ICYmIG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgIH0K
KworICAgIEdMaW50IHNhbXBsZUNvdW50ID0gODsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIC8vIEhhcmRjb2RlIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIGR1ZSB0byBoZWFkZXIgaXNzdWUgKFBSMTMyMTgz
KQorICAgICAgICAvLyA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfSU1HLCAmbWF4U2Ft
cGxlQ291bnQpOworICAgICAgICBtYXhTYW1wbGVDb3VudCA9IDQ7CisgICAgICAgIHNhbXBsZUNv
dW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgIH0KKworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIGZib1dpZHRoLCBmYm9I
ZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIEV4dGVu
c2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyhHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwLCBzYW1wbGVDb3VudCk7CisKKyAgICAgICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgICAgICBleHRlbnNpb25zLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0LCBmYm9XaWR0aCwgZmJvSGVpZ2h0KTsKKworICAgICAgICAgICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CisKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7
CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
ZmJvV2lkdGgsIGZib0hlaWdodCk7CisKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICB9CisgICAgfQorICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworCisgICAgbG9nRnJhbWVCdWZmZXJTdGF0
dXMoX19MSU5FX18pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxvZ0ZyYW1lQnVmZmVyU3RhdHVzKGludCBsaW5lKQoreworICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIkNoZWNr
aW5nIEZyYW1lQnVmZmVyIHN0YXR1cyBhdCBsaW5lICVkOiAiLCBsaW5lKTsKKyAgICBzd2l0Y2gg
KGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpKSB7CisgICAg
Y2FzZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURToKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiQ09NUExFVEUgfCAi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgQVRUQUNITUVOVCB8ICIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19B
VFRBQ0hNRU5UOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJNSVNTSU5HIEFUVEFDSE1FTlQgfCAiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM6
CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgRElNRU5TSU9OUyB8ICIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOgorICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJV
TlNVUFBPUlRFRCB8ICIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEVfRVhUOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIE1VTFRJ
U0FNUExFIHwgIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoZ2xHZXRF
cnJvcigpKSB7CisgICAgY2FzZSBHTF9OT19FUlJPUjoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiTk8gRVJST1Ii
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06CisgICAgICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5m
bywgIklOVkFMSUQgRU5VTSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX0lOVkFMSURf
VkFMVUU6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkxvZ0xldmVsSW5mbywgIklOVkFMSUQgVkFMVUUiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5WQUxJRCBPUEVS
QVRJT04iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9PVVRfT0ZfTUVNT1JZOgorICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbEluZm8sICJPVVQgT0YgTUVNT1JZIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJcbiIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzSU1HKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBDdXJy
ZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05FRF9CWVRFIGlzIHN1cHBvcnRlZCBi
eSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJn
bC9zcGVjcy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVyIGNoYW5nZXMsIHRoaXMgY29kZSB3
aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RyaWRlcyBv
ZiBvdXIgZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQgaW50IGZvcm1hdFNpemUgPSA0OyAv
LyBSR0JBIFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBpbnQgZGF0YVN0cmlkZSA9IHdpZHRo
ICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2FudmFzU3RyaWRlID0gbV9jdXJyZW50
V2lkdGggKiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGEgcGFjayBhbGln
bm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91ciBzdHJpZGVzIHRvIDggYnl0ZSBi
b3VuZGFyaWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFf
c3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRpbmcpCisgICAgaW50IHBhY2tBbGln
bm1lbnQ7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1l
bnQpOworICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsKKyAgICAgICAgZGF0YVN0cmlkZSA9
IChkYXRhU3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2FudmFzU3RyaWRlID0gKGNhbnZhc1N0
cmlkZSArIDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogY2FudmFzRGF0YSA9
IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3VycmVudEhlaWdodF07CisgICAg
OjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgZm9y
bWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZWFkIG91
ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9uJ3QgY29udGludWUKKyAgICBpbnQg
ZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05PX0VSUk9SICE9IGVycm9yKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29tZSBvZiBpdCBsaWVzIG91dHNpZGUg
dGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9ETzogZG9uJ3QgZG8gdGhpcyBpZiBh
bGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY2FudmFzCisgICAg
bWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQpOworCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQgZGF0YSBib3VuZHMKKyAgICBJbnRS
ZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJlY3QgY2FudmFzUmVj
dCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyAgICBJbnRSZWN0IG5v
blplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgY2FudmFzUmVjdCk7CisKKyAg
ICB1bnNpZ25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14ICogZm9ybWF0U2l6ZSA6IDA7
CisgICAgdW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8IDAgPyAteSAqIGRhdGFTdHJpZGUg
OiAwOworICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0Lngo
KSAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlDYW52YXNPZmZzZXQgPSBub25aZXJv
RGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRhT2Zmc2V0ICsgeURhdGFPZmZz
ZXQ7CisgICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0YSArIHhDYW52YXNPZmZzZXQg
KyB5Q2FudmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vblplcm9EYXRh
UmVjdC5oZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBub25aZXJv
RGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAgICAgICBkc3QgKz0gZGF0YVN0cmlk
ZTsKKyAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAgICB9CisKKyAgICBkZWxldGUgW10g
Y2FudmFzRGF0YTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpIGNvbnN0CiB7Ci0gICAgLy8gU2VlIFBSICMxMjAxNDEuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTE0Nyw3ICszMzksMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0CiAKIFBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fdGV4dHVyZTsKKyAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLT5nZXRUZXh0
dXJlSUQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dDsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE5Niw3ICsz
OTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZwogICAgIEZsb2F0UmVjdCBkc3QoMCwgMCwg
aW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpOwogCiAgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhPiBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVh
dGUoY2FudmFzQml0bWFwLCBmYWxzZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGJpdG1hcElt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3QsIHNyYywgQ29tcG9zaXRlQ29weSwg
RG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOworICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShiaXRtYXBJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0LCBzcmMsIENv
bXBvc2l0ZUNvcHksIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBmYWxzZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAppbmRleCA3MmVmZjkyMTg5
MmE2YTAwZDU2NGY1NGExMjllMjNhYWE3YzFiYWQ1Li43ODYzMDNjNTljYWU1MzgwMjllODdlNmRj
NWQxOGEwNWRjNTg4NDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIHZv
aWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxv
bmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEs
IHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwotICAgIAorCiAgICAgdmly
dHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CiAgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1
YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNWE2Mjg4MTBkZmQxMjc2NzA2
MGVhMGY0ZTYyMTgwMmM2OWEzYThlYi4uNThmYzdmN2RlYjBkODY5NmRhNzFiZGQ3OTVlY2ExZmQx
MDg3OTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEz
MCw2ICsxMzAsMTYgQEAgU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QKICAgICBpZiAoIWlzVmFsaWQp
CiAgICAgICAgIHJldHVybiAiIjsKIAorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8g
T3VyIGhhcmR3YXJlIHJlYWxseSBsaWtlcyBiZWluZyB0b2xkIHdoYXQgcHJlY2lzaW9uIHRvIGhh
dmUgKGkuZS4sIHdpdGggInByZWNpc2lvbiAqIGZsb2F0IikKKyAgICAvLyBBTkdMRSBzdHJpcHMg
dGhpcyBpbmZvcm1hdGlvbi4KKyAgICBpZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNp
b24gbG93cCBmbG9hdCIpKQorICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gInByZWNp
c2lvbiBsb3dwIGZsb2F0O1xuIiArIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZSBp
ZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdCIpKQorICAg
ICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IiArIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZQorICAgICAgICB0cmFuc2xhdGVk
U2hhZGVyU291cmNlID0gInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiIgKyB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlOworI2VuZGlmCiAgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAppbmRleCAyNzk2ZDZmYzkzMDk2
NWNkZjFlYjQ3NGM3MzcxN2IyZDEzNTdlMTFlLi42YTYxZTQ2MzJiZTgxNjU3Nzk0ZmQzNzdkOGM1
MTZiODBmZTk2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCkBAIC01
MywxMyArNTMsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJvdGVjdGVkOgorICAgIGZy
aWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKICAgICBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5z
aW9ucygpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5z
aW9ucygpOwotCiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAg
ICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmNwcAppbmRleCBmZWQ1NDkyYzY1MmEzNWIxOGFmN2NhYmNlOGE3MWFiMDEy
MmEzMWI4Li44NjBjNzg3OTI4OTgzMjU4YmM1NGRiYWVlY2FjOWE3NjI1MDNkYTkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKQEAgLTc2LDcgKzc2LDEwIEBAIHZvaWQgRXh0ZW5z
aW9uczNET3BlbkdMRVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBs
b25nIHNyY1gxLCBsCiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1w
bGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICht
X2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICByZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVt
LCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkK
QEAgLTE0NSw4ICsxNDgsMTQgQEAgYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6c3VwcG9ydHNF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogICAgICAgICAgICAgbV9nbElzVmVydGV4QXJy
YXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdl
dFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CiAgICAgICAgICAgICBtX3N1cHBv
cnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRz
SU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7CisgICAgICAgICAgICAvLyBTZWUgYnVn
ICM5MTEzMC4KKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorICAgICAgICAgICAgbV9nbEZyYW1l
YnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMRlJB
TUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJn
bEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX2ds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5H
TFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNz
KCJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIpKTsKKyNlbHNlCiAgICAgICAg
ICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOwogICAgICAg
ICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUc+KGVnbEdldFByb2NB
ZGRyZXNzKCJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIpKTsKKyNlbmRpZgog
ICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xFUy5oCmluZGV4IGMzY2M1OTU3MWNlMzkzOWE3MTJlNDk3NTg5MzdkYTNjM2ZlNDJkMjEuLjNl
NWU0NGI2MTAzYjE2Y2NkODgyYjhkMTFmNGIwZjJkOTQ3MDI2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xFUy5oCkBAIC02Miw4ICs2MiwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3N1
cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3Q7CiAgICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlz
YW1wbGVkUmVuZGVyVG9UZXh0dXJlOwogCisgICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgZ2wyZXh0
LmggZGVmaW5lIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNRyBpbnN0ZWFk
IG9mIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MKKyAgICAvLyBJ
biBhbiBpZGVhbCB3b3JsZCwgd2Ugd291bGQganVzdCBoYXZlIGFuICNpZiB0byBjaGVjayBmb3Ig
d2hldGhlciB0aGUgc3ltYm9sIGlzIGRlZmluZWQsIGJ1dCB0aGlzIGNhbm5vdCBiZSBkb25lIGJ5
IHRoZSBwcmVwcm9jZXNzb3IuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MTAzMC4KKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorICAgIFBGTkdM
RlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MgbV9nbEZyYW1lYnVmZmVyVGV4
dHVyZTJETXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElT
QU1QTEVJTUdQUk9DIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUc7CisjZWxz
ZQogICAgIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNRyBtX2dsRnJhbWVi
dWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKICAgICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JB
R0VNVUxUSVNBTVBMRUlNRyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HOwor
I2VuZGlmCiAgICAgUEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJy
YXlPRVM7CiAgICAgUEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0
ZXhBcnJheXNPRVM7CiAgICAgUEZOR0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0
ZXhBcnJheXNPRVM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcAppbmRleCA5YTdmNDI1MGQ1N2UzYjg5NzNiMzc1OTZkYjc1YmQ1M2RkYzk2OGFhLi5hNGQx
ZWI0Y2Q5M2M0NzYzMzZjMDJmNjEzYmZjNjU5NDRkMjg2Y2I4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEyMCw4ICsxMjAsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyLAogICAgICAgICB9CiAgICAgfQogCisjaWYgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5pbnRlcm5h
bFNpemUoKS53aWR0aCgpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCksIGlt
YWdlQnVmZmVyLT5jb250ZXh0KCksIHRydWUpOworI2Vsc2UKICAgICBwYWludFRvQ2FudmFzKHBp
eGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKICAgICAgICAgICAg
ICAgICAgIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpLCBpbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpKTsKKyNlbmRpZgogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENv
bXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQpAQCAtMTYxLDExICsxNjYsMjcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogCiAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
ICAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKKyAgICBpZiAoIXBsYXRmb3JtVGV4dHVyZSgpKSB7CisgICAgICAgIEdMdWludCB0ZXgg
PSAwOworICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJnRleCk7CisgICAgICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXgpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAg
IDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworICAgICAgICBtX2NvbXBvc2l0aW5nTGF5ZXItPnNldFRleHR1cmVJRCh0ZXgpOworICAg
IH0KKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgcGxhdGZvcm1UZXh0dXJlKCkp
OworI2Vsc2UKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9y
VGV4dHVyZSk7CisjZW5kaWYKICAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LCAwKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRl
eHR1cmUwKTsKICAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOwotICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Jv
dW5kRkJPKTsKKyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fYm91bmRGQk8p
OwogICAgIDo6Z2xGaW5pc2goKTsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CiB9CkBA
IC0zMjUsNyArMzQ2LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyCiAgICAgaWYgKGJ1ZmZl
cikKICAgICAgICAgZmJvID0gYnVmZmVyOwogICAgIGVsc2UKKyNpZiBQTEFURk9STShCTEFDS0JF
UlJZKQorICAgICAgICBmYm8gPSBtX2ZibzsKKyNlbHNlCiAgICAgICAgIGZibyA9IChtX2F0dHJz
LmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CisjZW5kaWYKICAgICBpZiAo
ZmJvICE9IG1fYm91bmRGQk8pIHsKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJn
ZXQsIGZibyk7CiAgICAgICAgIG1fYm91bmRGQk8gPSBmYm87CkBAIC00NDgsMzMgKzQ3Myw2MCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQogICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwogICAgIAogICAgIDo6Z2xHZXRTaGFk
ZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7CisKKyAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IGlmIChsZW5ndGgpIHsKKyAgICAgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGlj
c0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgICAgICBHTHNpemVp
IHNpemUgPSAwOworICAgICAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5
UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNo
YWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5nZXQoKSk7CisKKyAgICAgICAgZW50cnkubG9nID0g
aW5mby5nZXQoKTsKKyAgICB9CiAgICAgCiAgICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJh
dGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wuCiAgICAgQVNTRVJUKEdMQ29tcGls
ZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7CisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBpZiAo
R0xDb21waWxlU3VjY2VzcyAhPSBHTF9UUlVFKQorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbFdhcm4sICJUaGUgc2hhZGVyIHZh
bGlkYXRlZCwgYnV0IGRpZG4ndCBjb21waWxlLlxuIik7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewogICAg
ICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCkpOwogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIH0KKyNlbmRpZgogICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyKTsKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiAh
UExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CiAgICAgfQorI2VuZGlmCiAgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworI2lmICFQTEFURk9STShC
TEFDS0JFUlJZKQogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyNlbmRpZgogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IDI2MjgxOTA5YjQ4ZmUxZjNkNmJh
MmVlZjk4ZmYzNWQ1ZGUwMDcwMDIuLjc5ZGRjYmJmZDlhNGI1NWVjODI2ZTQxYjU5NWVlZjg0ZTY0
ZDlkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTk5
LDEwICs5OSwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaQogICAgIH0KIAogICAgIGRlbGV0
ZSBbXSBjYW52YXNEYXRhOworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8gSW1hZ2lu
YXRpb24gc3BlY2lmaWMgZml4CisgICAgaWYgKG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlKQorICAg
ICAgICByZWFkUGl4ZWxzSU1HKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0
YSk7CisgICAgZWxzZQorICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgLy8gTm90ZTogQmxhY2tCZXJyaWVzIGhhdmUg
YSBkaWZmZXJlbnQgYW50aS1hbGlhc2luZyBwaXBlbGluZS4KKyNlbHNlCiAgICAgOjpnbFJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKIAogICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCkBAIC0xMTUsNiAr
MTI1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JH
UkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludAogICAgIH0KIH0KIAorI2lmICFQTEFURk9S
TShCTEFDS0JFUlJZKQorLy8gVGhlIEJsYWNrQmVycnkgcG9ydCB1c2VzIGEgc3BlY2lhbCBpbXBs
ZW1lbnRhdGlvbiBvZiByZXNoYXBlRkJPcy4gU2VlIEdyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJy
eS5jcHAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUm
IHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtMTgzLDYg
KzE5NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNp
emUmIHNpemUpCiAKICAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87CiB9CisjZW5kaWYKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25z
dCBJbnRSZWN0JiByZWN0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJs
YWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpp
bmRleCBhYWMwNjhiNDg0ZGRkYzg3NDc2ZjEyNWEyMTNjZjRjNGRlOTNhMDY5Li4wYzJmMTgzMzZj
ZmQyZTkzM2ZhYjlhZjAxOTBlNzkzZjYwZDcwZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZQpAQCAtMTA5LDYgKzEwOSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiApCiAKIElGIChFTkFCTEVfV0VCR0wpCisgICAgQUREX0RFRklOSVRJT05TICgtRFdURl9V
U0VfT1BFTkdMX0VTXzI9MSkKICAgICBMSVNUKEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICAgICAke09QRU5HTF9JTkNMVURFX0RJUn0KICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152582</attachid>
            <date>2012-07-16 12:11:05 -0700</date>
            <delta_ts>2012-07-16 13:29:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91143-20120716151028.patch</filename>
            <type>text/plain</type>
            <size>31022</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgxYTQzOWY3MTM2YmYy
MjRjYzFmMTQwMjQxZmJmNTM1MDYwMmE4ZC4uODlkYzQ1NTQ4NzI2OGMyMjgyMjFlYTYyZTJlYmUw
NGI4ZmY0YmExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3LTEzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gV2ViR0wgQ29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTExNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIEJsYWNrQmVycnktc3BlY2lmaWMg
Zml4ZXMgZm9yIGFudGktYWxpYXNpbmcsIGxvZ2dpbmcsIGFuZCBzaGFkZXIgY29tcGlsYXRpb24u
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aDogQWRkIGEgdmFsdWUgZm9yIFRJIEltYWdpbmF0aW9uIGNoaXBzZXRzIG9uIEJsYWNrQmVycnkg
cGxhdGZvcm1zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwOiBNdWx0aXBsZSBkb3duc3RyZWFtIGNoYW5nZXMKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bG9nRnJh
bWVCdWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHNJTUcpOiBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeCBmb3IgSW1hZ2luYXRpb24gaGFy
ZHdhcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlLgorICAgICAg
ICAoRXh0ZW5zaW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKTogSGFj
ayB0byBmaXggQU5HTEUtZ2VuZXJhdGVkIGNvZGUgb24gQmxhY2tCZXJyeSBwbGF0Zm9ybXMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBJIGFtIG5vdCBp
biBhIHBvc2l0aW9uIHRvIGNoYW5nZSBzeXN0ZW0gaGVhZGVycyBmcm9tIGNvcnJlY3QgdG8gaW5j
b3JyZWN0LgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBJIGFtIG5vdCBpbiBhIHBvc2l0aW9uIHRv
IGNoYW5nZSBzeXN0ZW0gaGVhZGVycyBmcm9tIGNvcnJlY3QgdG8gaW5jb3JyZWN0LgorICAgICAg
ICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6IEFkZCBhIEJsYWNrQmVycnkt
c3BlY2lmaWMgYW50aS1hbGlhc2luZyBmaXguCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNy0xNiAgWm9sdGFuIEhvcnZhdGgg
IDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIENoYW5nZSBOYXRpdmVJbWFnZVB0
ciBmcm9tIFFQaXhtYXAqIHRvIFFJbWFnZSoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYWYxNTBkZDYxNTg4M2E4Zjg5
OGEyNDIzOTYzMGQ5YjAzODM5MzUyMS4uZWM3MzJmMjg2YjI3ZDZhMDM0NDk5OGM5NzU1Yjk4Yjhl
OTA4MmRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0xMyAgSm9zaHVhIE5l
dHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIFdlYkdMIENvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkxMTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbmNsdWRlcyBCbGFja0JlcnJ5LXNwZWNpZmljIGZpeGVz
IGZvciBhbnRpLWFsaWFzaW5nLCBsb2dnaW5nLCBhbmQgc2hhZGVyIGNvbXBpbGF0aW9uLgorCisg
ICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBEZWZpbmUgV1RGX1VTRV9PUEVOR0xf
RVNfMiBvbiBXZWJHTC1lbmFibGVkIGJ1aWxkcy4KKwogMjAxMi0wNy0xNiAgRnJlZGVyaWsgR2xh
ZGhvcm4gIDxmcmVkZXJpay5nbGFkaG9ybkBub2tpYS5jb20+CiAKICAgICAgICAgQWRkIGFjY2Vz
c2libGUgZm9yIFFXZWJWaWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMWU2MTg0MjkzNDhjYTVjMDhkMTRkYTc4
NzhiNDFkMTIzMTViMzEwNS4uYzJmZWVjMjkzOTllMmRhYmM3MTFmODUxMmI5ZjljYjlmOThjNzY5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC05MzEsNiArOTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlYWRQ
aXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscyk7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCisgICAgdm9pZCBsb2dGcmFtZUJ1ZmZlclN0YXR1cyhpbnQgbGluZSk7
CisgICAgdm9pZCByZWFkUGl4ZWxzSU1HKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
dm9pZCogZGF0YSk7CisjZW5kaWYKKwogICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYpOwogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiA9IEludFJlY3QoKSk7CiAjaWYgUExBVEZPUk0oUVQpICYmIFVTRShHUkFQSElDU19TVVJG
QUNFKQpAQCAtOTQzLDYgKzk0OCwxMSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBt
X3dlYkdMTGF5ZXI7CisjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBSZWZQdHI8UGxhdGZvcm1MYXllcj4gbV9jb21wb3NpdGlu
Z0xheWVyOworI2VuZGlmCisgICAgdm9pZCogbV9jb250ZXh0OwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKQEAgLTk5Niw5ICsxMDA2LDE0IEBAIHB1YmxpYzoK
ICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhh
c2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwogCisjaWYgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKKyAgICBib29sIG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlOworI2VuZGlmCisKKyNpZiAh
UExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsK
LQorI2VuZGlmCiAgICAgYm9vbCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygp
IGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNr
QmVycnkuY3BwCmluZGV4IGExZjYyNTY5NmI5MzE3OWM0ZDkwODI3ODhmMTgzZTQzNDVlNjAzNzgu
LmRkNGUzZjRjODVhODYzNDUxOWMzZmUyYzAzZmUzYWNjYzA1M2M4YTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0
M0RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTMxLDExICszMSwx
MyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJX
ZWJLaXRUaHJlYWQuaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUdyYXBoaWNzLmg+
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDgsMjIgKzUwLDIxIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoQXR0cmlidXRlcyBhdHRyaWJzLCBIb3N0CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCBm
YWxzZSkpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
b3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jdXJyZW50V2lk
dGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9ob3N0V2luZG93KGhvc3RX
aW5kb3cpCiAgICAgLCBtX2NvbnRleHQoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpj
cmVhdGVXZWJHTENvbnRleHQoKSkKLSAgICAsIG1fZXh0ZW5zaW9ucyhhZG9wdFB0cihuZXcgRXh0
ZW5zaW9uczNET3BlbkdMKHRoaXMpKSkKKyAgICAsIG1fZXh0ZW5zaW9ucyhhZG9wdFB0cihuZXcg
RXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykpKQogICAgICwgbV9hdHRycyhhdHRycykKICAgICAs
IG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKKyAgICAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdChHTF9SR0JBKQogICAgICwgbV9ib3VuZEZCTygwKQogICAgICwgbV9hY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKQogICAgICwgbV9ib3VuZFRleHR1cmUwKDApCi0gICAgLCBtX211bHRp
c2FtcGxlRkJPKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCi0g
ICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1faXNJbWFnaW5hdGlvbkhh
cmR3YXJlKDApCiB7CiAgICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTcxLDEwICs3Miw2IEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpCiAjZW5kaWYKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAK
LSAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAg
ICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRl
cl90b190ZXh0dXJlIikpCi0gICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
CiAgICAgICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCiAgICAgICAgIDo6
Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CkBAIC05NiwxMSArOTMsMjggQEAgR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2kKICNlbmRpZgogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJZiBHcmFwaGljc0Nv
bnRleHQzRCBpcyBjcmVhdGVkIHdpdGggcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgPT0gdHJ1
ZSwKLSAgICAvLyBtYWtlQ29udGV4dEN1cnJlbnQoKSB3aWxsIG1ha2UgdGhlIHNoYXJlZCBjb250
ZXh0IGN1cnJlbnQuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBlbmFibGUgR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSB3aXRoIEdM
IEVTMj8gU2VlIFBSICMxMjAxNDEuCisgICAgY29uc3QgY2hhciogcmVuZGVyZXIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1JFTkRFUkVSKSk7CisgICAg
bV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUgPSBzdGQ6OnN0cnN0cihyZW5kZXJlciwgIlBvd2VyVlIg
U0dYIik7CisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVS
ZXNvdXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMp
OworCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOyAvLyBBbHdheXMgc2V0
IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgPSBtX2V4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKKyAgICBBTkdMRVJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gbV9l
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRUdMX2ltYWdlX2V4dGVybmFsIik7CisgICAgQU5HTEVS
ZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlID0gbV9leHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIik7CisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOwogCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CkBA
IC0xMTgsOSArMTMyLDE4NyBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KCkKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lXZWJHTENvbnRl
eHQobV9jb250ZXh0KTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3Mo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBBIEJsYWNrQmVycnktc3BlY2lmaWMgaW1w
bGVtZW50YXRpb24gb2YgcmVzaGFwZUZCT3MgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgY29udGFp
bnM6CisgICAgLy8gIC0gYW4gSW1hZ2luYXRpb24tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2Yg
YW50aS1hbGlhc2luZworICAgIC8vICAtIGFuIEltYWdpbmF0aW9uLXNwZWNpZmljIGZpeCBmb3Ig
RkJPcyBvZiBzaXplIGxlc3MgdGhhbiAoMTYsMTYpCisKKyAgICBpbnQgZmJvV2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaW50IGZib0hlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICAvLyBJ
bWFnaW5hdGlvbi1zcGVjaWZpYyBmaXgKKyAgICBpZiAobV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUp
IHsKKyAgICAgICAgZmJvV2lkdGggPSBzdGQ6Om1heChmYm9XaWR0aCwgMTYpOworICAgICAgICBm
Ym9IZWlnaHQgPSBzdGQ6Om1heChmYm9IZWlnaHQsIDE2KTsKKyAgICB9CisKKyAgICBHTHVpbnQg
aW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgICAgIGNv
bG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJl
IHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdy
YXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
ICYmIG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgIH0K
KworICAgIEdMaW50IHNhbXBsZUNvdW50ID0gODsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIC8vIEhhcmRjb2RlIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIGR1ZSB0byBoZWFkZXIgaXNzdWUgKFBSMTMyMTgz
KQorICAgICAgICAvLyA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfSU1HLCAmbWF4U2Ft
cGxlQ291bnQpOworICAgICAgICBtYXhTYW1wbGVDb3VudCA9IDQ7CisgICAgICAgIHNhbXBsZUNv
dW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgIH0KKworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIGZib1dpZHRoLCBmYm9I
ZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIEV4dGVu
c2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyhHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwLCBzYW1wbGVDb3VudCk7CisKKyAgICAgICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgICAgICBleHRlbnNpb25zLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0LCBmYm9XaWR0aCwgZmJvSGVpZ2h0KTsKKworICAgICAgICAgICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CisKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7
CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
ZmJvV2lkdGgsIGZib0hlaWdodCk7CisKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICB9CisgICAgfQorICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworCisgICAgbG9nRnJhbWVCdWZmZXJTdGF0
dXMoX19MSU5FX18pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxvZ0ZyYW1lQnVmZmVyU3RhdHVzKGludCBsaW5lKQoreworICAgIEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIkNoZWNr
aW5nIEZyYW1lQnVmZmVyIHN0YXR1cyBhdCBsaW5lICVkOiAiLCBsaW5lKTsKKyAgICBzd2l0Y2gg
KGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpKSB7CisgICAg
Y2FzZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURToKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiQ09NUExFVEUgfCAi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgQVRUQUNITUVOVCB8ICIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19B
VFRBQ0hNRU5UOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJNSVNTSU5HIEFUVEFDSE1FTlQgfCAiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM6
CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkxvZ0xldmVsSW5mbywgIklOQ09NUExFVEUgRElNRU5TSU9OUyB8ICIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOgorICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJV
TlNVUFBPUlRFRCB8ICIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEVfRVhUOgorICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJJTkNPTVBMRVRFIE1VTFRJ
U0FNUExFIHwgIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoZ2xHZXRF
cnJvcigpKSB7CisgICAgY2FzZSBHTF9OT19FUlJPUjoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiTk8gRVJST1Ii
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06CisgICAgICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZvcm06OkxvZ0xldmVsSW5m
bywgIklOVkFMSUQgRU5VTSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX0lOVkFMSURf
VkFMVUU6CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkxvZ0xldmVsSW5mbywgIklOVkFMSUQgVkFMVUUiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiSU5WQUxJRCBPUEVS
QVRJT04iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9PVVRfT0ZfTUVNT1JZOgorICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbEluZm8sICJPVVQgT0YgTUVNT1JZIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbElu
Zm8sICJcbiIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzSU1HKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBDdXJy
ZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05FRF9CWVRFIGlzIHN1cHBvcnRlZCBi
eSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJn
bC9zcGVjcy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVyIGNoYW5nZXMsIHRoaXMgY29kZSB3
aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RyaWRlcyBv
ZiBvdXIgZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQgaW50IGZvcm1hdFNpemUgPSA0OyAv
LyBSR0JBIFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBpbnQgZGF0YVN0cmlkZSA9IHdpZHRo
ICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2FudmFzU3RyaWRlID0gbV9jdXJyZW50
V2lkdGggKiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGEgcGFjayBhbGln
bm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91ciBzdHJpZGVzIHRvIDggYnl0ZSBi
b3VuZGFyaWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFf
c3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRpbmcpCisgICAgaW50IHBhY2tBbGln
bm1lbnQ7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1l
bnQpOworICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsKKyAgICAgICAgZGF0YVN0cmlkZSA9
IChkYXRhU3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2FudmFzU3RyaWRlID0gKGNhbnZhc1N0
cmlkZSArIDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogY2FudmFzRGF0YSA9
IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3VycmVudEhlaWdodF07CisgICAg
OjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgZm9y
bWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZWFkIG91
ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9uJ3QgY29udGludWUKKyAgICBpbnQg
ZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05PX0VSUk9SICE9IGVycm9yKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29tZSBvZiBpdCBsaWVzIG91dHNpZGUg
dGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9ETzogZG9uJ3QgZG8gdGhpcyBpZiBh
bGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY2FudmFzCisgICAg
bWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQpOworCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQgZGF0YSBib3VuZHMKKyAgICBJbnRS
ZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJlY3QgY2FudmFzUmVj
dCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyAgICBJbnRSZWN0IG5v
blplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgY2FudmFzUmVjdCk7CisKKyAg
ICB1bnNpZ25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14ICogZm9ybWF0U2l6ZSA6IDA7
CisgICAgdW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8IDAgPyAteSAqIGRhdGFTdHJpZGUg
OiAwOworICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0Lngo
KSAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlDYW52YXNPZmZzZXQgPSBub25aZXJv
RGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRhT2Zmc2V0ICsgeURhdGFPZmZz
ZXQ7CisgICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0YSArIHhDYW52YXNPZmZzZXQg
KyB5Q2FudmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vblplcm9EYXRh
UmVjdC5oZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBub25aZXJv
RGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAgICAgICBkc3QgKz0gZGF0YVN0cmlk
ZTsKKyAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAgICB9CisKKyAgICBkZWxldGUgW10g
Y2FudmFzRGF0YTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcigpIGNvbnN0CiB7Ci0gICAgLy8gU2VlIFBSICMxMjAxNDEuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTE0Nyw3ICszMzksMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0CiAKIFBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fdGV4dHVyZTsKKyAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLT5nZXRUZXh0
dXJlSUQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dDsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE5Niw3ICsz
OTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZwogICAgIEZsb2F0UmVjdCBkc3QoMCwgMCwg
aW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpOwogCiAgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhPiBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVh
dGUoY2FudmFzQml0bWFwLCBmYWxzZSk7Ci0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGJpdG1hcElt
YWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3QsIHNyYywgQ29tcG9zaXRlQ29weSwg
RG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOworICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShiaXRtYXBJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0LCBzcmMsIENv
bXBvc2l0ZUNvcHksIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBmYWxzZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAppbmRleCA3MmVmZjkyMTg5
MmE2YTAwZDU2NGY1NGExMjllMjNhYWE3YzFiYWQ1Li43ODYzMDNjNTljYWU1MzgwMjllODdlNmRj
NWQxOGEwNWRjNTg4NDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIHZv
aWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxv
bmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEs
IHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwotICAgIAorCiAgICAgdmly
dHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CiAgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1
YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNWE2Mjg4MTBkZmQxMjc2NzA2
MGVhMGY0ZTYyMTgwMmM2OWEzYThlYi4uNThmYzdmN2RlYjBkODY5NmRhNzFiZGQ3OTVlY2ExZmQx
MDg3OTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEz
MCw2ICsxMzAsMTYgQEAgU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QKICAgICBpZiAoIWlzVmFsaWQp
CiAgICAgICAgIHJldHVybiAiIjsKIAorI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8g
T3VyIGhhcmR3YXJlIHJlYWxseSBsaWtlcyBiZWluZyB0b2xkIHdoYXQgcHJlY2lzaW9uIHRvIGhh
dmUgKGkuZS4sIHdpdGggInByZWNpc2lvbiAqIGZsb2F0IikKKyAgICAvLyBBTkdMRSBzdHJpcHMg
dGhpcyBpbmZvcm1hdGlvbi4KKyAgICBpZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNp
b24gbG93cCBmbG9hdCIpKQorICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gInByZWNp
c2lvbiBsb3dwIGZsb2F0O1xuIiArIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZSBp
ZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdCIpKQorICAg
ICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IiArIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgZWxzZQorICAgICAgICB0cmFuc2xhdGVk
U2hhZGVyU291cmNlID0gInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiIgKyB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlOworI2VuZGlmCiAgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAppbmRleCAyNzk2ZDZmYzkzMDk2
NWNkZjFlYjQ3NGM3MzcxN2IyZDEzNTdlMTFlLi42YTYxZTQ2MzJiZTgxNjU3Nzk0ZmQzNzdkOGM1
MTZiODBmZTk2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCkBAIC01
MywxMyArNTMsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJvdGVjdGVkOgorICAgIGZy
aWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKICAgICBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5z
aW9ucygpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5z
aW9ucygpOwotCiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAg
ICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmNwcAppbmRleCBmZWQ1NDkyYzY1MmEzNWIxOGFmN2NhYmNlOGE3MWFiMDEy
MmEzMWI4Li5iM2E5MzAwMDFiYWRlZTA3YjBmNWViY2U2YTAzZTE0MDg2YzQyYmIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKQEAgLTc2LDcgKzc2LDEwIEBAIHZvaWQgRXh0ZW5z
aW9uczNET3BlbkdMRVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBs
b25nIHNyY1gxLCBsCiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1w
bGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICht
X2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICByZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVt
LCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xFUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKaW5kZXggYzNjYzU5NTcxY2UzOTM5YTcxMmU0OTc1
ODkzN2RhM2MzZmU0MmQyMS4uZmNmNzJkNmI1ZTM4ZDc2Mjc4MWI0NWQ4ZThhODQ4MDgwYmE1MjZj
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTEVTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKQEAgLTMyLDYgKzMyLDEyIEBACiAjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKKyNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQorLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTAzMC4KKyNkZWZpbmUgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FN
UExFSU1HIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MKKyNkZWZp
bmUgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUcgUEZOR0xSRU5ERVJCVUZG
RVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKaW5kZXggOWE3ZjQyNTBkNTdlM2I4OTczYjM3NTk2ZGI3NWJkNTNkZGM5NjhhYS4uYTRkMWVi
NGNkOTNjNDc2MzM2YzAyZjYxM2JmYzY1OTQ0ZDI4NmNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xMjAsOCArMTIwLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciwKICAgICAgICAgfQogICAgIH0KIAorI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxT
aXplKCkud2lkdGgoKSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpLCBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpLCB0cnVlKTsKKyNlbHNlCiAgICAgcGFpbnRUb0NhbnZhcyhwaXhl
bHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSwgaW1hZ2VCdWZmZXItPmlu
dGVybmFsU2l6ZSgpLmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKSk7CisjZW5kaWYKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKikKQEAgLTE2MSwxMSArMTY2LDI3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKIAogICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAg
ICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCisgICAgaWYgKCFwbGF0Zm9ybVRleHR1cmUoKSkgeworICAgICAgICBHTHVpbnQgdGV4ID0g
MDsKKyAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZ0ZXgpOworICAgICAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4KTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKKyAgICAgICAgbV9jb21wb3NpdGluZ0xheWVyLT5zZXRUZXh0dXJlSUQodGV4KTsKKyAgICB9
CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHBsYXRmb3JtVGV4dHVyZSgpKTsK
KyNlbHNlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRl
eHR1cmUpOworI2VuZGlmCiAgICAgOjpnbENvcHlUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IG1faW50ZXJuYWxDb2xvckZvcm1hdCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCwgMCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fYm91bmRUZXh0
dXJlMCk7CiAgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlKTsKLSAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9ib3Vu
ZEZCTyk7CisgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pCisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2JvdW5kRkJPKTsK
ICAgICA6OmdsRmluaXNoKCk7CiAgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwogfQpAQCAt
MzI1LDcgKzM0NiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcgogICAgIGlmIChidWZmZXIp
CiAgICAgICAgIGZibyA9IGJ1ZmZlcjsKICAgICBlbHNlCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKKyAgICAgICAgZmJvID0gbV9mYm87CisjZWxzZQogICAgICAgICBmYm8gPSAobV9hdHRycy5h
bnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworI2VuZGlmCiAgICAgaWYgKGZi
byAhPSBtX2JvdW5kRkJPKSB7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0
LCBmYm8pOwogICAgICAgICBtX2JvdW5kRkJPID0gZmJvOwpAQCAtNDQ4LDMzICs0NzMsNjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKICAgICBpbnQgR0xDb21waWxlU3VjY2VzczsKICAgICAKICAgICA6OmdsR2V0U2hhZGVy
aXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nlc3MpOworCisgICAgLy8g
UG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xH
ZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBp
ZiAobGVuZ3RoKSB7CisgICAgICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVy
U291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICAgICAgR0xzaXplaSBz
aXplID0gMDsKKyAgICAgICAgT3duQXJyYXlQdHI8R0xjaGFyPiBpbmZvID0gYWRvcHRBcnJheVB0
cihuZXcgR0xjaGFyW2xlbmd0aF0pOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZ2V0KCkpOworCisgICAgICAgIGVudHJ5LmxvZyA9IGlu
Zm8uZ2V0KCk7CisgICAgfQogICAgIAogICAgIC8vIEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRl
ZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMLgogICAgIEFTU0VSVChHTENvbXBpbGVT
dWNjZXNzID09IEdMX1RSVUUpOworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgaWYgKEdM
Q29tcGlsZVN1Y2Nlc3MgIT0gR0xfVFJVRSkKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiVGhlIHNoYWRlciB2YWxp
ZGF0ZWQsIGJ1dCBkaWRuJ3QgY29tcGlsZS5cbiIpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpKTsKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICB9CisjZW5kaWYKICAgICA6OmdsQ29weVRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGJvcmRlcik7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKICAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgIVBM
QVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwog
ICAgIH0KKyNlbmRpZgogICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyNpZiAhUExBVEZPUk0oQkxB
Q0tCRVJSWSkKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisjZW5kaWYKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCAyNjI4MTkwOWI0OGZlMWYzZDZiYTJl
ZWY5OGZmMzVkNWRlMDA3MDAyLi43OWRkY2JiZmQ5YTRiNTVlYzgyNmU0MWI1OTVlZWY4NGU2NGQ5
ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC05OSwx
MCArOTksMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICB9CiAKICAgICBkZWxldGUg
W10gY2FudmFzRGF0YTsKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorICAgIC8vIEltYWdpbmF0
aW9uIHNwZWNpZmljIGZpeAorICAgIGlmIChtX2lzSW1hZ2luYXRpb25IYXJkd2FyZSkKKyAgICAg
ICAgcmVhZFBpeGVsc0lNRyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OworICAgIGVsc2UKKyAgICAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhKTsKKworICAgIC8vIE5vdGU6IEJsYWNrQmVycmllcyBoYXZlIGEg
ZGlmZmVyZW50IGFudGktYWxpYXNpbmcgcGlwZWxpbmUuCisjZWxzZQogICAgIDo6Z2xSZWFkUGl4
ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CiAKICAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQpAQCAtMTE1LDYgKzEy
NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JB
SWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQKICAgICB9CiB9CiAKKyNpZiAhUExBVEZPUk0o
QkxBQ0tCRVJSWSkKKy8vIFRoZSBCbGFja0JlcnJ5IHBvcnQgdXNlcyBhIHNwZWNpYWwgaW1wbGVt
ZW50YXRpb24gb2YgcmVzaGFwZUZCT3MuIFNlZSBHcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnku
Y3BwCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBz
aXplKQogewogICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKQEAgLTE4Myw2ICsx
OTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
JiBzaXplKQogCiAgICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOwogfQorI2VuZGlmCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFj
a0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5k
ZXggYWFjMDY4YjQ4NGRkZGM4NzQ3NmYxMjVhMjEzY2Y0YzRkZTkzYTA2OS4uMGMyZjE4MzM2Y2Zk
MmU5MzNmYWI5YWYwMTkwZTc5M2Y2MGQ3MGQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNr
QmVycnkuY21ha2UKQEAgLTEwOSw2ICsxMDksNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09VUkNF
UwogKQogCiBJRiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAoLURXVEZfVVNF
X09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAgICAgJHtPUEVOR0xfSU5DTFVERV9ESVJ9CiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>