<?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>111206</bug_id>
          
          <creation_ts>2013-03-01 12:13:19 -0800</creation_ts>
          <short_desc>[New Multicolumn] Change inRenderFlowThread to follow containing block chain</short_desc>
          <delta_ts>2013-03-15 05:54:35 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>s.choi</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>845391</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-01 12:13:19 -0800</bug_when>
    <thetext>Make in RenderFlowThread and enclosingRenderFlowThread follow the containing block chain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845404</commentid>
    <comment_count>1</comment_count>
      <attachid>191010</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-01 12:29:04 -0800</bug_when>
    <thetext>Created attachment 191010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845451</commentid>
    <comment_count>2</comment_count>
      <attachid>191023</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-01 13:12:56 -0800</bug_when>
    <thetext>Created attachment 191023
Updated patch to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846083</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-03 14:22:21 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/144497</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191010</attachid>
            <date>2013-03-01 12:29:04 -0800</date>
            <delta_ts>2013-03-01 13:12:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>67581</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMy0wMy0wMSAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gQ2hh
bmdlIGluUmVuZGVyRmxvd1RocmVhZCB0byBmb2xsb3cgY29udGFpbmluZyBibG9jayBjaGFpbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMjA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCByZW1vdmVzIGluUmVuZGVyRmxvd1RocmVhZCBhbmQgY2hhbmdlcyBlbmNsb3NpbmdSZW5kZXJG
bG93VGhyZWFkKCkKKyAgICAgICAgdG8gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpLiBmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgbm93IGZvbGxvd3MKKyAgICAgICAgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgY2hhaW4gaW5zdGVhZCBvZiB0aGUgcGFyZW50IGNoYWluIHdoZW4gb3V0c2lkZSBv
ZiBsYXlvdXQuCisgICAgICAgIChJdCBhbHJlYWR5IGRpZCB0aGUgcmlnaHQgdGhpbmcgd2hlbiBj
YWxsZWQgZHVyaW5nIGxheW91dC4pCisgICAgICAgIAorICAgICAgICBCeSByZW1vdmluZyBpblJl
bmRlckZsb3dUaHJlYWQgKHdoaWNoIHdhcyBmb2xsb3dpbmcgdGhlIHBhcmVudCBjaGFpbiksIGFs
bAorICAgICAgICBjb2RlIHRoYXQgaXMgY2hlY2tpbmcgZm9yIGZsb3cgdGhyZWFkIGNvbnRhaW5t
ZW50IG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUKKyAgICAgICAgY29udGFpbmluZyBibG9jayBjaGFp
bi4gVGhpcyBhbGxvd3MgZm9yIGNvbnRlbnQgdG8gZXNjYXBlIGluLWZsb3cgZmxvdyB0aHJlYWRz
CisgICAgICAgIGFuZCBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCBhc3NlcnRpbmcuCisgICAg
ICAgIAorICAgICAgICBUZXN0OiBmYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1vZi1j
b2x1bW5zLmh0bWwKKworICAgICAgICAqIGRvbS9XZWJLaXROYW1lZEZsb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aW5GbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE5hbWVk
Rmxvdzo6Z2V0UmVnaW9uc0J5Q29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFu
b255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZUFu
b255bW91c0JveENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVS
ZWdpb25zQW5kRXhjbHVzaW9uc0xvZ2ljYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjb21wdXRlUmVnaW9uUmFuZ2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNvbXB1dGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGV0ZXJt
aW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTmV4dFBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExp
bmVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZWdp
b25BdEJsb2NrT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRTdGF0
aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxheW91dEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3Rh
dGU6OkxpbmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6
OmZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpzZXRGbG93
VGhyZWFkKToKKyAgICAgICAgKExpbmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnJlbmRlckJveFJlZ2lvbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNh
bEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6Omxh
eW91dEJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dEJs
b2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11
bGF0ZU9mZnNldFRvd2FyZHNBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpsYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRPYmplY3RTdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojph
ZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojppbml0aWFsaXplTGF5b3V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpjb250YWluaW5nUmVnaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNldENvbnRhaW5pbmdSZWdpb24p
OgorCiAyMDEzLTAzLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAg
ICAgICAgIEJ1aWxkIGZpeCBmb3IgYnVpbGRzIHdpdGggQkxPQiBkaXNhYmxlZC4gVGhpcyBmaXhl
cyBpdCBmb3IgbWUgb24gTWFjIGF0IGxlYXN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dl
YktpdE5hbWVkRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktp
dE5hbWVkRmxvdy5jcHAJKHJldmlzaW9uIDE0NDM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXROYW1lZEZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3MywxOCBAQCBib29s
IFdlYktpdE5hbWVkRmxvdzo6b3ZlcnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFyZW50Rmxv
d1RocmVhZCA/IG1fcGFyZW50Rmxvd1RocmVhZC0+b3ZlcnNldCgpIDogdHJ1ZTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIG5vZGVJbkZsb3dUaHJlYWQoTm9kZSogY29udGVudE5vZGUsIFJlbmRl
ck5hbWVkRmxvd1RocmVhZCogZmxvd1RocmVhZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbkZsb3dU
aHJlYWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93
VGhyZWFkKQogewotICAgIHJldHVybiBjb250ZW50Tm9kZS0+cmVuZGVyZXIoKSAmJiBjb250ZW50
Tm9kZS0+cmVuZGVyZXIoKS0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgZmxvd1RocmVhZCA9PSBj
b250ZW50Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAg
IGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5kZXJGbG93VGhy
ZWFkKiBjdXJyZW50Rmxvd1RocmVhZCA9IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7CisgICAgaWYgKGZsb3dUaHJlYWQgPT0gY3VycmVudEZsb3dUaHJlYWQpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChyZW5kZXJlci0+Zmxvd1RocmVhZFN0YXRlKCkgIT0gUmVu
ZGVyT2JqZWN0OjpJbnNpZGVJbkZsb3dUaHJlYWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICAvLyBBbiBpbi1mbG93IGZsb3cgdGhyZWFkIGNhbiBiZSBuZXN0ZWQgaW5zaWRlIGFu
IG91dC1vZi1mbG93IG9uZSwgc28gd2UgaGF2ZSB0byByZWN1ciB1cCB0byBjaGVjay4KKyAgICBy
ZXR1cm4gaW5GbG93VGhyZWFkKGN1cnJlbnRGbG93VGhyZWFkLT5jb250YWluaW5nQmxvY2soKSwg
Zmxvd1RocmVhZCk7CiB9CiAKIGludCBXZWJLaXROYW1lZEZsb3c6OmZpcnN0RW1wdHlSZWdpb25J
bmRleCgpIGNvbnN0CkBAIC0xMTMsNyArMTIyLDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gV2Vi
S2l0TmFtZWRGbG93OjpnZQogICAgIGlmICghbV9wYXJlbnRGbG93VGhyZWFkKQogICAgICAgICBy
ZXR1cm4gU3RhdGljTm9kZUxpc3Q6OmFkb3B0KHJlZ2lvbk5vZGVzKTsKIAotICAgIGlmIChub2Rl
SW5GbG93VGhyZWFkKGNvbnRlbnROb2RlLCBtX3BhcmVudEZsb3dUaHJlYWQpKSB7CisgICAgaWYg
KGluRmxvd1RocmVhZChjb250ZW50Tm9kZS0+cmVuZGVyZXIoKSwgbV9wYXJlbnRGbG93VGhyZWFk
KSkgewogICAgICAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0ID0gbV9wYXJl
bnRGbG93VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCk7CiAgICAgICAgIGZvciAoUmVuZGVyUmVn
aW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAh
PSByZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVuZGVyUmVnaW9uID0gKml0ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE0NDQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTYsOCArMTExNiw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUxlZnRvdmVyQW5vbnltb3UKICAgICBjaGlsZC0+
bV9uZXh0ID0gMDsKIAogICAgIC8vIFJlbW92ZSBhbGwgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBm
bG93IHRocmVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIGxlZnRvdmVyIGFub255bW91cyBibG9jay4K
LSAgICBpZiAoY2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICBjaGlsZC0+cmVt
b3ZlRnJvbVJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICBjaGlsZC0+cmVtb3ZlRnJvbVJlbmRlckZs
b3dUaHJlYWQoKTsKIAogICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7CiAgICAgY2hpbGQtPnNldFBy
ZXZpb3VzU2libGluZygwKTsKQEAgLTExNTcsNyArMTE1Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNvbGxhcHNlQW5vbnltb3VzQm94Q2gKICAgICBwYXJlbnQtPnNldENoaWxkcmVuSW5saW5lKGNo
aWxkLT5jaGlsZHJlbklubGluZSgpKTsKICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkKiBjaGlsZEZsb3dU
aHJlYWQgPSBjaGlsZC0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAgIFJlbmRlckZs
b3dUaHJlYWQqIGNoaWxkRmxvd1RocmVhZCA9IGNoaWxkLT5mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7CiAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRN
YWludGFpbmVyKGNoaWxkRmxvd1RocmVhZCk7CiAgICAgCiAgICAgUmVuZGVyQmxvY2sqIGFub25C
bG9jayA9IHRvUmVuZGVyQmxvY2socGFyZW50LT5jaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUo
cGFyZW50LCBjaGlsZCwgY2hpbGQtPmhhc0xheWVyKCkpKTsKQEAgLTE0MTQsMTIgKzE0MTMsMTIg
QEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRXhjbHVzaW9uU2hhcGVJbgogfQogI2VuZGlmCiAK
LXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9naWNhbFNpemUo
KQordm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNMb2dpY2FsU2l6
ZShSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogewogI2lmIEVOQUJMRShDU1NfRVhDTFVT
SU9OUykKLSAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpICYmICFleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQgJiYgIWV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbygpKQogI2Vsc2UKLSAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgIGlmICgh
Zmxvd1RocmVhZCkKICNlbmRpZgogICAgICAgICByZXR1cm47CiAKQEAgLTE0MzcsNyArMTQzNiw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXMKIAogICAgIC8vIFNl
dCBvdXIgc3RhcnQgYW5kIGVuZCByZWdpb25zLiBObyByZWdpb25zIGFib3ZlIG9yIGJlbG93IHVz
IHdpbGwgYmUgY29uc2lkZXJlZCBieSBvdXIgY2hpbGRyZW4uIFRoZXkgYXJlCiAgICAgLy8gZWZm
ZWN0aXZlbHkgY2xhbXBlZCB0byBvdXIgcmVnaW9uIHJhbmdlLgotICAgIGNvbXB1dGVSZWdpb25S
YW5nZUZvckJsb2NrKCk7CisgICAgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2soZmxvd1RocmVh
ZCk7CiAKICAgICBzZXRMb2dpY2FsSGVpZ2h0KG9sZEhlaWdodCk7CiAgICAgc2V0TG9naWNhbFRv
cChvbGRUb3ApOwpAQCAtMTQ1NCwxMCArMTQ1MywxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21w
dXRlRXhjbHVzaW9uU2hhcGVTCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0
ZVJlZ2lvblJhbmdlRm9yQmxvY2soKQordm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlZ2lvblJh
bmdlRm9yQmxvY2soUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKLSAgICBpZiAoaW5S
ZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+
c2V0UmVnaW9uUmFuZ2VGb3JCb3godGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSgpKTsKKyAgICBpZiAoZmxvd1RocmVhZCkKKyAgICAgICAgZmxvd1RocmVhZC0+c2V0UmVnaW9u
UmFuZ2VGb3JCb3godGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKIH0K
IAogYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKQpA
QCAtMTUzNCwxMiArMTUzMywxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcihyZW5kZXJWaWV3LCB0aGlzLCBsb2NhdGlvbk9m
ZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigp
IHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dpY2Fs
SGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGNvbHVtbkluZm8oKSk7CiAKLSAgICBp
ZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3
aWR0aHMgY2FuIGZvcmNlIHVzIHRvIHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KLSAgICAgICAgaWYg
KGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoKSkKLSAgICAgICAgICAgIHJlbGF5b3V0Q2hp
bGRyZW4gPSB0cnVlOwotICAgIH0KLSAgICB1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0xvZ2lj
YWxTaXplKCk7CisgICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3aWR0aHMgY2FuIGZvcmNlIHVzIHRv
IHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgIGlmIChsb2dpY2FsV2lkdGhDaGFu
Z2VkSW5SZWdpb25zKGZsb3dUaHJlYWQpKQorICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1
ZTsKKyAgICB1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0xvZ2ljYWxTaXplKGZsb3dUaHJlYWQp
OwogCiAgICAgLy8gV2UgdXNlIGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4
Qm90dG9tUG9zLCBhbmQgbWF4Qm90dG9tTmVnLCB0byB0cmFjawogICAgIC8vIG91ciBjdXJyZW50
IG1heGltYWwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbnMuICBUaGVzZSB2YWx1ZXMgYXJl
IHVzZWQgd2hlbiB3ZQpAQCAtMTYwMSw3ICsxNTk5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlv
dXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CiAKLSAgICBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCbG9j
aygpOworICAgIGNvbXB1dGVSZWdpb25SYW5nZUZvckJsb2NrKGZsb3dUaHJlYWQpOwogCiAgICAg
Ly8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVubGVzcyB3ZSdyZSBtdWx0aS1jb2x1bW4s
IHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxkIG92ZXJmbG93IGlzIGNsaXBwZWQgYW55
d2F5KS4KICAgICBjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKQEAgLTE3MjQs
NyArMTcyMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXQKICAg
ICBhZGRWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZSgpOwogCiAgICAgaWYgKGlzUmVuZGVyRmxvd1Ro
cmVhZCgpKQotICAgICAgICBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPmNvbXB1dGVPdmVy
Zmxvd1N0YXRlRm9yUmVnaW9ucyhvbGRDbGllbnRBZnRlckVkZ2UpOworICAgICAgICB0b1JlbmRl
ckZsb3dUaHJlYWQodGhpcyktPmNvbXB1dGVPdmVyZmxvd1N0YXRlRm9yUmVnaW9ucyhvbGRDbGll
bnRBZnRlckVkZ2UpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21CbG9j
a0NoaWxkcmVuKCkKQEAgLTIzMjMsNyArMjMyMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRldGVy
bWluZUxvZ2ljYWxMZWZ0UG8KICAgICAgICAgCiAgICAgLy8gU29tZSBvYmplY3RzIChlLmcuLCB0
YWJsZXMsIGhvcml6b250YWwgcnVsZXMsIG92ZXJmbG93OmF1dG8gYmxvY2tzKSBhdm9pZCBmbG9h
dHMuICBUaGV5IG5lZWQKICAgICAvLyB0byBzaGlmdCBvdmVyIGFzIG5lY2Vzc2FyeSB0byBkb2Rn
ZSBhbnkgZmxvYXRzIHRoYXQgbWlnaHQgZ2V0IGluIHRoZSB3YXkuCi0gICAgaWYgKGNoaWxkLT5h
dm9pZHNGbG9hdHMoKSAmJiBjb250YWluc0Zsb2F0cygpICYmICFpblJlbmRlckZsb3dUaHJlYWQo
KSkKKyAgICBpZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNvbnRhaW5zRmxvYXRzKCkgJiYg
IWZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgbmV3UG9zaXRpb24gKz0gY29t
cHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoY2hpbGQsIG1hcmdp
blN0YXJ0Rm9yQ2hpbGQoY2hpbGQpKTsKIAogICAgIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoY2hp
bGQsIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG5ld1Bvc2l0aW9uIDogdG90
YWxBdmFpbGFibGVMb2dpY2FsV2lkdGggLSBuZXdQb3NpdGlvbiAtIGxvZ2ljYWxXaWR0aEZvckNo
aWxkKGNoaWxkKSwgQXBwbHlMYXlvdXREZWx0YSk7CkBAIC0zOTg3LDYgKzM5ODUsOCBAQCBMYXlv
dXRQb2ludCBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxMCiAKICAgICBMYXlvdXRVbml0IGZs
b2F0TG9naWNhbExlZnQ7CiAKKyAgICBib29sIGluc2lkZUZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7CisKICAgICBpZiAoY2hpbGRCb3gtPnN0eWxlKCktPmZsb2F0aW5n
KCkgPT0gTGVmdEZsb2F0KSB7CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWluaW5nTGVm
dCA9IDE7CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWluaW5nUmlnaHQgPSAxOwpAQCAt
Mzk5NCw3ICszOTk0LDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2Fs
TAogICAgICAgICB3aGlsZSAobG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wT2Zm
c2V0LCBsb2dpY2FsUmlnaHRPZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nUmlnaHQpIC0g
ZmxvYXRMb2dpY2FsTGVmdCA8IGZsb2F0TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICBsb2dp
Y2FsVG9wT2Zmc2V0ICs9IG1pbihoZWlnaHRSZW1haW5pbmdMZWZ0LCBoZWlnaHRSZW1haW5pbmdS
aWdodCk7CiAgICAgICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRG
b3JMaW5lKGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBmYWxzZSwgJmhlaWdo
dFJlbWFpbmluZ0xlZnQpOwotICAgICAgICAgICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKSB7
CisgICAgICAgICAgICBpZiAoaW5zaWRlRmxvd1RocmVhZCkgewogICAgICAgICAgICAgICAgIC8v
IEhhdmUgdG8gcmUtZXZhbHVhdGUgYWxsIG9mIG91ciBvZmZzZXRzLCBzaW5jZSB0aGV5IG1heSBo
YXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gbG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFy
dCBvZiByaWdodCBvZmZzZXQuCiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgPSBs
b2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENvbnN0YW50
IHBhcnQgb2YgbGVmdCBvZmZzZXQuCkBAIC00MDA5LDcgKzQwMDksNyBAQCBMYXlvdXRQb2ludCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxMCiAgICAgICAgIHdoaWxlIChmbG9hdExvZ2ljYWxM
ZWZ0IC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxM
ZWZ0T2Zmc2V0LCBmYWxzZSwgJmhlaWdodFJlbWFpbmluZ0xlZnQpIDwgZmxvYXRMb2dpY2FsV2lk
dGgpIHsKICAgICAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgKz0gbWluKGhlaWdodFJlbWFpbmlu
Z0xlZnQsIGhlaWdodFJlbWFpbmluZ1JpZ2h0KTsKICAgICAgICAgICAgIGZsb2F0TG9naWNhbExl
ZnQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxS
aWdodE9mZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCk7Ci0gICAgICAgICAgICBp
ZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgICAgIGlmIChpbnNpZGVGbG93VGhy
ZWFkKSB7CiAgICAgICAgICAgICAgICAgLy8gSGF2ZSB0byByZS1ldmFsdWF0ZSBhbGwgb2Ygb3Vy
IG9mZnNldHMsIHNpbmNlIHRoZXkgbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgICBs
b2dpY2FsUmlnaHRPZmZzZXQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KGxvZ2ljYWxU
b3BPZmZzZXQpOyAvLyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4KICAgICAgICAgICAg
ICAgICBsb2dpY2FsTGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChsb2dp
Y2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiBsZWZ0IG9mZnNldC4KQEAgLTQyNzcs
NyArNDI3Nyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnRleHRJbmRlbnRPZmZzZXQKIExh
eW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJS
ZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGlmICghaW5SZW5kZXJGbG93VGhyZWFk
KCkpCisgICAgaWYgKCFyZWdpb24pCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldDsK
ICAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKICAgICByZXR1cm4gbG9naWNhbExlZnRP
ZmZzZXQgKyAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJveFJlY3QueCgpIDogYm94UmVj
dC55KCkpOwpAQCAtNDI4Nyw3ICs0Mjg3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9n
aWNhbFJpZ2h0T2ZmcwogewogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdM
ZWZ0KCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBsb2dpY2FsUmlnaHRPZmZz
ZXQgKz0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJl
YWQoKSkKKyAgICBpZiAoIXJlZ2lvbikKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNl
dDsKICAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9u
LCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKICAgICByZXR1cm4gbG9naWNhbFJp
Z2h0T2Zmc2V0IC0gKGxvZ2ljYWxXaWR0aCgpIC0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBib3hSZWN0Lm1heFgoKSA6IGJveFJlY3QubWF4WSgpKSk7CkBAIC03MTc3LDEyICs3MTc3LDEz
IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc05leHRQYWdlKExheW91dFVuaXQKIHsKICAgICBBU1NF
UlQodmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdp
bmF0ZWQoKSk7CiAKLSAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAg
aWYgKCFmbG93VGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUHJpbnRpbmcgYW5kIG11
bHRpLWNvbHVtbiBib3RoIG1ha2UgbmV3IHBhZ2VzIHRvIGFjY29tbW9kYXRlIGNvbnRlbnQuCiAK
ICAgICAvLyBTZWUgaWYgd2UncmUgaW4gdGhlIGxhc3QgcmVnaW9uLgogICAgIExheW91dFVuaXQg
cGFnZU9mZnNldCA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxP
ZmZzZXQ7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBlbmNsb3NpbmdSZW5kZXJGbG93VGhy
ZWFkKCktPnJlZ2lvbkF0QmxvY2tPZmZzZXQocGFnZU9mZnNldCwgdGhpcyk7CisgICAgUmVuZGVy
UmVnaW9uKiByZWdpb24gPSBmbG93VGhyZWFkLT5yZWdpb25BdEJsb2NrT2Zmc2V0KHBhZ2VPZmZz
ZXQsIHRoaXMpOwogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKHJlZ2lvbi0+aXNMYXN0UmVnaW9uKCkpCkBAIC03MjI4LDcgKzcyMjksOCBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrCiAgICAgLy8gRklYTUU6IEFkZCBwYWdl
IGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wg
Y2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0Nv
bHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJyZWFrcyAm
JiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJWE1FOiBP
bmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KLSAgICBib29sIGNo
ZWNrUmVnaW9uQnJlYWtzID0gaW5SZW5kZXJGbG93VGhyZWFkKCk7CisgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBib29s
IGNoZWNrUmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRlck5h
bWVkRmxvd1RocmVhZCgpOwogICAgIGJvb2wgY2hlY2tCZWZvcmVBbHdheXMgPSAoY2hlY2tDb2x1
bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdB
WVMpIHx8IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9y
ZSgpID09IFBCQUxXQVlTKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoY2hlY2tS
ZWdpb25CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnJlZ2lvbkJyZWFrQmVmb3JlKCkgPT0gUEJB
TFdBWVMpOwogICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cyAmJiBpbk5vcm1hbEZsb3coY2hpbGQp
ICYmIGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpKSB7CkBA
IC03MjM2LDcgKzcyMzgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJy
ZWFrCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENvbHVtbkJy
ZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVnaW9uQnJlYWtz
KSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDA7Ci0g
ICAgICAgICAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3JjZWRSZWdp
b25CcmVhayhvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2FsT2Zmc2V0
LCBjaGlsZCwgdHJ1ZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCisgICAgICAgICAgICBpZiAo
Zmxvd1RocmVhZC0+YWRkRm9yY2VkUmVnaW9uQnJlYWsob2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCwgY2hpbGQsIHRydWUsICZvZmZzZXRCcmVha0FkanVz
dG1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgb2Zmc2V0QnJl
YWtBZGp1c3RtZW50OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXh0UGFnZUxvZ2ljYWxU
b3AobG9naWNhbE9mZnNldCwgSW5jbHVkZVBhZ2VCb3VuZGFyeSk7CkBAIC03MjQ5LDcgKzcyNTEs
OCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWsoCiAgICAgLy8gRklY
TUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5n
LgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlz
UGFnaW5hdGluZ0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0Nv
bHVtbkJyZWFrcyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7
IC8vIEZJWE1FOiBPbmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4K
LSAgICBib29sIGNoZWNrUmVnaW9uQnJlYWtzID0gaW5SZW5kZXJGbG93VGhyZWFkKCk7CisgICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKKyAgICBib29sIGNoZWNrUmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFk
LT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpOwogICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9
IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigp
ID09IFBCQUxXQVlTKSB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdl
QnJlYWtBZnRlcigpID09IFBCQUxXQVlTKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cmVnaW9uQnJlYWtBZnRlcigp
ID09IFBCQUxXQVlTKTsKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cyAmJiBpbk5vcm1hbEZsb3co
Y2hpbGQpICYmIGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkp
KSB7CkBAIC03MjYyLDcgKzcyNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUFm
dGVyQnJlYWsoCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENv
bHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVnaW9u
QnJlYWtzKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9
IDA7Ci0gICAgICAgICAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3Jj
ZWRSZWdpb25CcmVhayhvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2Fs
T2Zmc2V0ICsgbWFyZ2luT2Zmc2V0LCBjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1l
bnQpKQorICAgICAgICAgICAgaWYgKGZsb3dUaHJlYWQtPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBtYXJnaW5P
ZmZzZXQsIGNoaWxkLCBmYWxzZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG5leHRQYWdlTG9naWNhbFRvcChsb2dpY2FsT2Zmc2V0LCBJ
bmNsdWRlUGFnZUJvdW5kYXJ5KTsKQEAgLTcyNzcsMjEgKzcyODAsMjMgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6cGFnZUxvZ2ljYWxUb3BGbwogICAgIExheW91dFVuaXQgYmxvY2tMb2dpY2Fs
VG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlbmRlclZpZXctPmxheW91dFN0YXRl
KCktPm1fbGF5b3V0T2Zmc2V0LmhlaWdodCgpIDogcmVuZGVyVmlldy0+bGF5b3V0U3RhdGUoKS0+
bV9sYXlvdXRPZmZzZXQud2lkdGgoKTsKIAogICAgIExheW91dFVuaXQgY3VtdWxhdGl2ZU9mZnNl
dCA9IG9mZnNldCArIGJsb2NrTG9naWNhbFRvcDsKLSAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVh
ZCgpKSB7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dUaHJlYWQpIHsKICAgICAgICAgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCA9IHJlbmRlclZpZXctPmxheW91dFN0YXRlKCktPnBhZ2VMb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGN1bXVsYXRpdmVPZmZzZXQgLSByb3VuZFRvSW50
KGN1bXVsYXRpdmVPZmZzZXQgLSBmaXJzdFBhZ2VMb2dpY2FsVG9wKSAlIHJvdW5kVG9JbnQocGFn
ZUxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICByZXR1cm4gZW5jbG9zaW5nUmVuZGVyRmxvd1Ro
cmVhZCgpLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChjdW11bGF0aXZlT2Zmc2V0KTsKKyAgICBy
ZXR1cm4gZmxvd1RocmVhZC0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoY3VtdWxhdGl2ZU9mZnNl
dCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zm
c2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSB2aWV3KCk7Ci0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAg
IGlmICghZmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuIHJlbmRlclZpZXctPmxheW91dFN0YXRl
KCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ1JlbmRlckZsb3dU
aHJlYWQoKS0+cGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0ICsgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICByZXR1cm4gZmxvd1RocmVhZC0+cGFnZUxvZ2lj
YWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0ICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnZVJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgcGFnZUJv
dW5kYXJ5UnVsZSkgY29uc3QKQEAgLTcyOTksNyArNzMwNCw4IEBAIExheW91dFVuaXQgUmVuZGVy
QmxvY2s6OnBhZ2VSZW1haW5pbmdMb2cKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdmll
dygpOwogICAgIG9mZnNldCArPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7CiAg
ICAgCi0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkgeworICAgIFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKCFm
bG93VGhyZWFkKSB7CiAgICAgICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSByZW5k
ZXJWaWV3LT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0OwogICAgICAgICBMYXlv
dXRVbml0IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0IC0gaW50TW9kKG9mZnNl
dCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgICAgICBpZiAocGFnZUJvdW5kYXJ5UnVsZSA9PSBJ
bmNsdWRlUGFnZUJvdW5kYXJ5KSB7CkBAIC03MzEwLDE0ICs3MzE2LDE1IEBAIExheW91dFVuaXQg
UmVuZGVyQmxvY2s6OnBhZ2VSZW1haW5pbmdMb2cKICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0hl
aWdodDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQo
KS0+cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0LCBwYWdlQm91bmRh
cnlSdWxlKTsKKyAgICByZXR1cm4gZmxvd1RocmVhZC0+cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWln
aHRGb3JPZmZzZXQob2Zmc2V0LCBwYWdlQm91bmRhcnlSdWxlKTsKIH0KIAogTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwg
TGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBib29sIGluY2x1ZGVNYXJnaW5zKQogewogICAgIGJv
b2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGlu
Z0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJyZWFr
cyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgYm9v
bCBjaGVja1JlZ2lvbkJyZWFrcyA9IGluUmVuZGVyRmxvd1RocmVhZCgpOworICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAg
Ym9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQoKTsKICAgICBib29sIGlzVW5zcGxpdHRhYmxlID0gY2hpbGQtPmlz
VW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGls
ZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtJbnNpZGUoKSA9PSBQQkFWT0lEKQogICAgICAgICB8fCAo
Y2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtJbnNpZGUoKSA9PSBQ
QkFWT0lEKQogICAgICAgICB8fCAoY2hlY2tSZWdpb25CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCkt
PnJlZ2lvbkJyZWFrSW5zaWRlKCkgPT0gUEJBVk9JRCk7CkBAIC03MzI4LDcgKzczMzUsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0CiAgICAgaWYgKGxheW91dFN0
YXRlLT5tX2NvbHVtbkluZm8pCiAgICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVw
ZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQoY2hpbGRMb2dpY2FsSGVpZ2h0KTsKICAgICBMYXlvdXRV
bml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobG9naWNh
bE9mZnNldCk7Ci0gICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxvZ2ljYWxIZWlnaHQgPSAhaW5SZW5k
ZXJGbG93VGhyZWFkKCkgfHwgZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5yZWdpb25zSGF2
ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0KCk7CisgICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxvZ2ljYWxI
ZWlnaHQgPSAhZmxvd1RocmVhZCB8fCBmbG93VGhyZWFkLT5yZWdpb25zSGF2ZVVuaWZvcm1Mb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCB8fCAoaGFzVW5pZm9ybVBh
Z2VMb2dpY2FsSGVpZ2h0ICYmIGNoaWxkTG9naWNhbEhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0
KQogICAgICAgICB8fCAhaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCkpCiAgICAgICAgIHJldHVy
biBsb2dpY2FsT2Zmc2V0OwpAQCAtNzM1Niw3ICs3MzYzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
cHVzaFRvTmV4dFBhZ2VXaXRoTWluaQogICAgIHJldHVybiAhY2hlY2tSZWdpb247CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGlu
ZUJveCogbGluZUJveCwgTGF5b3V0VW5pdCYgZGVsdGEpCit2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIExheW91
dFVuaXQmIGRlbHRhLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogewogICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIHBhZ2luYXRlIHVzaW5nIGxpbmUgb3ZlcmZsb3cuICBUaGlzIGVuc3Vy
ZXMgdGhhdCBsaW5lcyBkb24ndCBvdmVybGFwIGF0IGFsbCB3aGVuIHdlCiAgICAgLy8gcHV0IGEg
c3RydXQgYmV0d2VlbiB0aGVtIGZvciBwYWdpbmF0aW9uIHB1cnBvc2VzLiAgSG93ZXZlciwgdGhp
cyByZWFsbHkgaXNuJ3QgdGhlIGRlc2lyZWQgcmVuZGVyaW5nLCBzaW5jZQpAQCAtNzM4OCw3ICs3
Mzk1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUAogICAgIGxp
bmVCb3gtPnNldFBhZ2luYXRpb25TdHJ1dCgwKTsKICAgICBsaW5lQm94LT5zZXRJc0ZpcnN0QWZ0
ZXJQYWdlQnJlYWsoZmFsc2UpOwogICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBw
YWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsT2Zmc2V0KTsKLSAgICBib29sIGhhc1Vu
aWZvcm1QYWdlTG9naWNhbEhlaWdodCA9ICFpblJlbmRlckZsb3dUaHJlYWQoKSB8fCBlbmNsb3Np
bmdSZW5kZXJGbG93VGhyZWFkKCktPnJlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQoKTsK
KyAgICBib29sIGhhc1VuaWZvcm1QYWdlTG9naWNhbEhlaWdodCA9ICFmbG93VGhyZWFkIHx8IGZs
b3dUaHJlYWQtPnJlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQoKTsKICAgICAvLyBJZiBs
aW5lSGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiBwYWdlTG9naWNhbEhlaWdodCwgYnV0IGxvZ2ljYWxW
aXN1YWxPdmVyZmxvdy5oZWlnaHQoKSBzdGlsbCBmaXRzLCB3ZSBhcmUKICAgICAvLyBzdGlsbCBn
b2luZyB0byBhZGQgYSBzdHJ1dCwgc28gdGhhdCB0aGUgdmlzaWJsZSBvdmVyZmxvdyBmaXRzIG9u
IGEgc2luZ2xlIHBhZ2UuCiAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCB8fCAoaGFzVW5pZm9y
bVBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5oZWlnaHQoKSA+IHBh
Z2VMb2dpY2FsSGVpZ2h0KQpAQCAtNzQ4Niw5ICs3NDkzLDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6YWRqdXN0QmxvY2tDaGlsZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgUmVu
ZGVyQmxvY2s6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gq
IHJvb3RCb3gsIExheW91dFVuaXQgbGluZURlbHRhKSBjb25zdAorYm9vbCBSZW5kZXJCbG9jazo6
bGluZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNoYW5nZWQoUm9vdElubGluZUJveCogcm9vdEJveCwg
TGF5b3V0VW5pdCBsaW5lRGVsdGEsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpIGNvbnN0
CiB7Ci0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlbmRlclJlZ2lvbiogY3VycmVudFJlZ2lv
biA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQocm9vdEJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkgKyBs
aW5lRGVsdGEpOwpAQCAtNzUxNyw3ICs3NTI0LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
b2Zmc2V0RnJvbUxvZ2ljYQogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzbG93ZXIgcGF0aCB0
aGF0IGRvZXNuJ3QgdXNlIGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9uIGdldHRpbmcgeW91ciBs
b2dpY2FsIHRvcCBpbnNpZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVhZC4gSXQgZG9lc24ndAog
ICAgIC8vIHdvcmsgd2l0aCBjb2x1bW5zIG9yIHBhZ2VzIGN1cnJlbnRseSwgYnV0IGl0IHNob3Vs
ZCBvbmNlIHRoZXkgaGF2ZSBiZWVuIHN3aXRjaGVkIG92ZXIgdG8gdXNpbmcgZmxvdyB0aHJlYWRz
LgotICAgIGlmICghaW5SZW5kZXJGbG93VGhyZWFkKCkpCisgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dU
aHJlYWQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJl
bnRCbG9jayA9IHRoaXM7CkBAIC03NTQ5LDEwICs3NTU3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6b2Zmc2V0RnJvbUxvZ2ljYQogCiBSZW5kZXJSZWdpb24qIFJlbmRlckJsb2NrOjpyZWdp
b25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiB7Ci0gICAgaWYg
KCFpblJlbmRlckZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNWYWxpZFJlZ2lvbklu
Zm8oKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTc1NjksMjggKzc1NzQsMjYgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlU3RhdGljSW5saW5lUG9zaQogCiB2b2lkIFJlbmRlckJsb2NrOjpz
ZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVu
aXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pCiB7Ci0gICAgaWYgKGlu
UmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KSkgewogICAgICAgICAvLyBTaGlmdCB0aGUgaW5saW5lIHBvc2l0aW9uIHRvIGV4Y2x1ZGUgdGhl
IHJlZ2lvbiBvZmZzZXQuCiAgICAgICAgIGlubGluZVBvc2l0aW9uICs9IHN0YXJ0T2Zmc2V0Rm9y
Q29udGVudCgpIC0gc3RhcnRPZmZzZXRGb3JDb250ZW50KGJsb2NrT2Zmc2V0KTsKICAgICB9CiAg
ICAgY2hpbGQtPmxheWVyKCktPnNldFN0YXRpY0lubGluZVBvc2l0aW9uKGlubGluZVBvc2l0aW9u
KTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucygp
IGNvbnN0Citib29sIFJlbmRlckJsb2NrOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpIGNvbnN0CiB7Ci0gICAgaWYgKCFpblJlbmRlckZs
b3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJlbmRlckZsb3dU
aHJlYWQqIGZsb3dUaHJlYWQgPSBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7CiAgICAgaWYg
KCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNWYWxpZFJlZ2lvbkluZm8oKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1cm4gZmxv
d1RocmVhZC0+bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyh0aGlzLCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKCkpOwogfQogCiBSZW5kZXJSZWdpb24qIFJlbmRlckJsb2NrOjpj
bGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAogewot
ICAgIEFTU0VSVChpc1JlbmRlclZpZXcoKSB8fCAocmVnaW9uICYmIGluUmVuZGVyRmxvd1RocmVh
ZCgpKSk7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKKworICAgIEFTU0VSVChpc1JlbmRlclZpZXcoKSB8fCAocmVnaW9uICYm
IGZsb3dUaHJlYWQpKTsKICAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybiBy
ZWdpb247CiAKQEAgLTc2MDAsNyArNzYwMyw3IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyQmxvY2s6
OmNsYW1wVG9TdGFydEEKICAgICAvLyB0aGV5IG92ZXJmbG93IGludG8sIHdoaWNoIG1ha2VzIG5v
IHNlbnNlIHdoZW4gdGhpcyBibG9jayBkb2Vzbid0IGV4aXN0IGluIHxyZWdpb258IGF0IGFsbC4K
ICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uOwogICAgIFJlbmRlclJlZ2lvbiogZW5kUmVn
aW9uOwotICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+Z2V0UmVnaW9uUmFuZ2VGb3JC
b3godGhpcywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CisgICAgZmxvd1RocmVhZC0+Z2V0UmVn
aW9uUmFuZ2VGb3JCb3godGhpcywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CiAgICAgCiAgICAg
aWYgKHN0YXJ0UmVnaW9uICYmIHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50
KCkgPCBzdGFydFJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpCiAgICAg
ICAgIHJldHVybiBzdGFydFJlZ2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCShyZXZpc2lvbiAxNDQzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTU3LDggKzU1Nyw4IEBAIHByb3RlY3Rl
ZDoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgdXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNM
b2dpY2FsU2l6ZSgpOwotICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2soKTsKKyAg
ICB2b2lkIHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9naWNhbFNpemUoUmVuZGVyRmxvd1Ro
cmVhZCopOworICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2soUmVuZGVyRmxvd1Ro
cmVhZCopOwogCiAgICAgdm9pZCB1cGRhdGVCbG9ja0NoaWxkRGlydHlCaXRzQmVmb3JlTGF5b3V0
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgUmVuZGVyQm94Kik7CiAKQEAgLTEwODAsNyArMTA4MCw3
IEBAIHByb3RlY3RlZDoKICAgICBib29sIHB1c2hUb05leHRQYWdlV2l0aE1pbmltdW1Mb2dpY2Fs
SGVpZ2h0KExheW91dFVuaXQmIGFkanVzdG1lbnQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwg
TGF5b3V0VW5pdCBtaW5pbXVtTG9naWNhbEhlaWdodCkgY29uc3Q7CiAKICAgICBMYXlvdXRVbml0
IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQg
bG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNo
aWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJl
dHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgotICAgIHZvaWQgYWRqdXN0TGlu
ZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgTGF5b3V0VW5pdCYgZGVsdGFP
ZmZzZXQpOyAvLyBDb21wdXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEgbGluZSBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJl
bnQgcGFnZS4KKyAgICB2b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElu
bGluZUJveCosIExheW91dFVuaXQmIGRlbHRhT2Zmc2V0LCBSZW5kZXJGbG93VGhyZWFkKik7IC8v
IENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Ag
b2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgog
ICAgIExheW91dFVuaXQgYWRqdXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24oTGF5b3V0VW5pdCBs
b2dpY2FsVG9wQWZ0ZXJDbGVhciwgTGF5b3V0VW5pdCBlc3RpbWF0ZVdpdGhvdXRQYWdpbmF0aW9u
LCBSZW5kZXJCb3gqIGNoaWxkLCBib29sIGF0QmVmb3JlU2lkZU9mQmxvY2spOwogCiAgICAgLy8g
QWRqdXN0IGZyb20gcGFpbnRpbmcgb2Zmc2V0cyB0byB0aGUgbG9jYWwgY29vcmRzIG9mIHRoaXMg
cmVuZGVyZXIKQEAgLTEwODksOSArMTA4OSw5IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCB0byB0ZXN0IGEgbGluZSBib3ggdGhhdCBoYXMgbW92ZWQgaW4gdGhl
IGJsb2NrIGRpcmVjdGlvbiB0byBzZWUgaWYgaXQgaGFzIGVuZGVkIHVwIGluIGEgbmV3CiAgICAg
Ly8gcmVnaW9uL3BhZ2UvY29sdW1uIHRoYXQgaGFzIGEgZGlmZmVyZW50IGF2YWlsYWJsZSBsaW5l
IHdpZHRoIHRoYW4gdGhlIG9sZCBvbmUuIFVzZWQgdG8ga25vdyB3aGVuIHlvdSBoYXZlIHRvIGRp
cnR5IGEKICAgICAvLyBsaW5lLCBpLmUuLCB0aGF0IGl0IGNhbid0IGJlIHJlLXVzZWQuCi0gICAg
Ym9vbCBsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChSb290SW5saW5lQm94KiwgTGF5
b3V0VW5pdCBsaW5lRGVsdGEgPSAwKSBjb25zdDsKKyAgICBib29sIGxpbmVXaWR0aEZvclBhZ2lu
YXRlZExpbmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0IGxpbmVEZWx0YSwgUmVu
ZGVyRmxvd1RocmVhZCopIGNvbnN0OwogCi0gICAgYm9vbCBsb2dpY2FsV2lkdGhDaGFuZ2VkSW5S
ZWdpb25zKCkgY29uc3Q7CisgICAgYm9vbCBsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKFJl
bmRlckZsb3dUaHJlYWQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbHVt
bnMoaW50IGRlc2lyZWRDb2x1bW5Db3VudCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAx
NDQzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0Rm9yTGluZShjCiBzdGF0aWMgaW5saW5lIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9jaykKIHsKICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9
IGJsb2NrLT52aWV3KCktPmxheW91dFN0YXRlKCktPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OwotICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGJsb2NrLT5pblJlbmRlckZsb3dUaHJlYWQo
KSkgeworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGJsb2NrLT5mbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBibG9jay0+bG9naWNh
bEhlaWdodCgpICsgbG9naWNhbEhlaWdodEZvckxpbmUoYmxvY2ssIGZhbHNlKTsKICAgICAgICAg
UmVuZGVyUmVnaW9uKiByZWdpb24gPSBibG9jay0+cmVnaW9uQXRCbG9ja09mZnNldChvZmZzZXQp
OwogICAgICAgICByZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8oKSA6IDA7CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9j
azo6Y3JlYXRlTGluZUJvCiAvLyBkdXJpbmcgYW4gZW50aXJlIGxpbmVib3ggdHJlZSBsYXlvdXQg
cGFzcyAoYWthIGxheW91dElubGluZUNoaWxkcmVuKS4KIGNsYXNzIExpbmVMYXlvdXRTdGF0ZSB7
CiBwdWJsaWM6Ci0gICAgTGluZUxheW91dFN0YXRlKGJvb2wgZnVsbExheW91dCwgTGF5b3V0VW5p
dCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQor
ICAgIExpbmVMYXlvdXRTdGF0ZShib29sIGZ1bGxMYXlvdXQsIExheW91dFVuaXQmIHJlcGFpbnRM
b2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSwgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCkKICAgICAgICAgOiBtX2xhc3RGbG9hdCgwKQogICAgICAgICAsIG1f
ZW5kTGluZSgwKQogICAgICAgICAsIG1fZmxvYXRJbmRleCgwKQpAQCAtMTM2OCw2ICsxMzY4LDcg
QEAgcHVibGljOgogICAgICAgICAsIG1fcmVwYWludExvZ2ljYWxUb3AocmVwYWludExvZ2ljYWxU
b3ApCiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbEJvdHRvbShyZXBhaW50TG9naWNhbEJvdHRv
bSkKICAgICAgICAgLCBtX3VzZXNSZXBhaW50Qm91bmRzKGZhbHNlKQorICAgICAgICAsIG1fZmxv
d1RocmVhZChmbG93VGhyZWFkKQogICAgIHsgfQogCiAgICAgdm9pZCBtYXJrRm9yRnVsbExheW91
dCgpIHsgbV9pc0Z1bGxMYXlvdXQgPSB0cnVlOyB9CkBAIC0xNDExLDYgKzE0MTIsOSBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgZmxvYXRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRJbmRl
eDsgfQogICAgIHZvaWQgc2V0RmxvYXRJbmRleCh1bnNpZ25lZCBmbG9hdEluZGV4KSB7IG1fZmxv
YXRJbmRleCA9IGZsb2F0SW5kZXg7IH0KICAgICAKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9mbG93VGhyZWFkOyB9CisgICAgdm9pZCBzZXRGbG93
VGhyZWFkKFJlbmRlckZsb3dUaHJlYWQqIHRocmVhZCkgeyBtX2Zsb3dUaHJlYWQgPSB0aHJlYWQ7
IH0KKwogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVuZGVyQmxvY2s6OkZsb2F0V2l0aFJlY3Q+IG1f
ZmxvYXRzOwogICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogbV9sYXN0RmxvYXQ7CkBA
IC0xNDI4LDYgKzE0MzIsOCBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQmIG1fcmVwYWludExv
Z2ljYWxCb3R0b207CiAKICAgICBib29sIG1fdXNlc1JlcGFpbnRCb3VuZHM7CisgICAgCisgICAg
UmVuZGVyRmxvd1RocmVhZCogbV9mbG93VGhyZWFkOwogfTsKIAogc3RhdGljIHZvaWQgZGVsZXRl
TGluZVJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIFJlbmRlckFyZW5hKiBhcmVu
YSwgUm9vdElubGluZUJveCogc3RhcnRMaW5lLCBSb290SW5saW5lQm94KiBzdG9wTGluZSA9IDAp
CkBAIC0xNTc1LDcgKzE1ODEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxv
YXRzSW5SCiAjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQogICAgICAgICAvLyBGSVhNRTogQnVn
IDk1MzYxOiBJdCBpcyBwb3NzaWJsZSBmb3IgYSBsaW5lIHRvIGdyb3cgYmV5b25kIGxpbmVIZWln
aHQsIGluIHdoaWNoCiAgICAgICAgIC8vIGNhc2UgdGhlc2Ugc2VnbWVudHMgbWF5IGJlIGluY29y
cmVjdC4KLSAgICAgICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICBpZiAobGF5
b3V0U3RhdGUuZmxvd1RocmVhZCgpKQogICAgICAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKHRoaXMpOwogICAgICAgICBpZiAo
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVU
b3AgPSBsb2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0ZUxvZ2ljYWxUb3A7CkBAIC0xNjQ0LDcgKzE2
NTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SCiAKICAgICAg
ICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgYWRqdXN0bWVudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlv
bkZvclBhZ2luYXRpb24obGluZUJveCwgYWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgICAg
IGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZUJveCwgYWRqdXN0bWVudCwgbGF5
b3V0U3RhdGUuZmxvd1RocmVhZCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1l
bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTGluZVdpZHRoID0g
YXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0LCBsYXlvdXRTdGF0
ZS5saW5lSW5mbygpLmlzRmlyc3RMaW5lKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZUJveC0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50KTsKQEAgLTE2NjEs
NyArMTY2Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblIKICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobGluZUJveC0+bGluZUJvdHRv
bVdpdGhMZWFkaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
bGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJv
eC0+c2V0Q29udGFpbmluZ1JlZ2lvbihyZWdpb25BdEJsb2NrT2Zmc2V0KGxpbmVCb3gtPmxpbmVU
b3BXaXRoTGVhZGluZygpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MTc3MCwxMyArMTc3NiwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVk
ZWQoCiAgICAgICAgICAgICAgICAgbGluZS0+YXR0YWNoTGluZSgpOwogICAgICAgICAgICAgICAg
IGlmIChwYWdpbmF0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgZGVsdGEgLT0gbGluZS0+cGFn
aW5hdGlvblN0cnV0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZv
clBhZ2luYXRpb24obGluZSwgZGVsdGEpOworICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5l
UG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmUsIGRlbHRhLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFk
KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKICAg
ICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChs
aW5lLCBkZWx0YSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUtPmFkanVzdEJsb2NrRGlyZWN0
aW9uUG9zaXRpb24oZGVsdGEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRl
LmZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgICAgICAgICAgbGluZS0+c2V0Q29udGFpbmluZ1Jl
Z2lvbihyZWdpb25BdEJsb2NrT2Zmc2V0KGxpbmUtPmxpbmVUb3BXaXRoTGVhZGluZygpKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0g
bGluZS0+ZmxvYXRzUHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJv
eCo+OjppdGVyYXRvciBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOwpAQCAtMTgxNSw3ICsx
ODIxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKAogICAgICAg
ICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsTGF5b3V0T3ZlcmZsb3coMCwgYmxvY2tMb2dpY2FsSGVp
Z2h0LCAxLCBib3R0b21MYXlvdXRPdmVyZmxvdyAtIGJsb2NrTG9naWNhbEhlaWdodCk7CiAgICAg
ICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdygwLCBibG9ja0xvZ2ljYWxI
ZWlnaHQsIDEsIGJvdHRvbVZpc3VhbE92ZXJmbG93IC0gYmxvY2tMb2dpY2FsSGVpZ2h0KTsKICAg
ICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJl
Y3RzKGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92ZXJmbG93LCB0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gtPmxpbmVUb3AoKSwgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lQm90
dG9tKCkpOwotICAgICAgICAgICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAg
ICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgICAgICB0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gtPnNldENvbnRhaW5pbmdSZWdpb24ocmVnaW9uQXRCbG9ja09mZnNldCh0
cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVUb3BXaXRoTGVhZGluZygpKSk7CiAgICAgICAgIH0K
IApAQCAtMTg1NywxMiArMTg2MywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKSAmJiB2aWV3KCktPmxheW91
dFN0YXRlKCktPmxpbmVHcmlkKCkgPT0gdGhpcykKICAgICAgICAgbGF5b3V0TGluZUdyaWRCb3go
KTsKIAotICAgIGJvb2wgY2xlYXJMaW5lc0ZvclBhZ2luYXRpb24gPSBmaXJzdExpbmVCb3goKSAm
JiBpblJlbmRlckZsb3dUaHJlYWQoKSAmJiAhZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5o
YXNSZWdpb25zKCk7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKKyAgICBib29sIGNsZWFyTGluZXNGb3JQYWdpbmF0aW9uID0g
Zmlyc3RMaW5lQm94KCkgJiYgZmxvd1RocmVhZCAmJiAhZmxvd1RocmVhZC0+aGFzUmVnaW9ucygp
OwogCiAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY2xlYXIgb3V0IG91ciBsaW5lIGJv
eGVzLgogICAgIC8vIEZJWE1FOiBIYW5kbGUgcmVzaXplIGV2ZW50dWFsbHkhCiAgICAgYm9vbCBp
c0Z1bGxMYXlvdXQgPSAhZmlyc3RMaW5lQm94KCkgfHwgc2VsZk5lZWRzTGF5b3V0KCkgfHwgcmVs
YXlvdXRDaGlsZHJlbiB8fCBjbGVhckxpbmVzRm9yUGFnaW5hdGlvbjsKLSAgICBMaW5lTGF5b3V0
U3RhdGUgbGF5b3V0U3RhdGUoaXNGdWxsTGF5b3V0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWlu
dExvZ2ljYWxCb3R0b20pOworICAgIExpbmVMYXlvdXRTdGF0ZSBsYXlvdXRTdGF0ZShpc0Z1bGxM
YXlvdXQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSwgZmxvd1RocmVh
ZCk7CiAKICAgICBpZiAoaXNGdWxsTGF5b3V0KQogICAgICAgICBsaW5lQm94ZXMoKS0+ZGVsZXRl
TGluZUJveGVzKHJlbmRlckFyZW5hKCkpOwpAQCAtMTk5NywxMiArMjAwNCwxMiBAQCBSb290SW5s
aW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgIHNpemVfdCBmbG9hdElu
ZGV4ID0gMDsKICAgICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1
cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAg
IGlmIChwYWdpbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZVdpZHRoRm9yUGFnaW5h
dGVkTGluZUNoYW5nZWQoY3VycikpIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZVdpZHRoRm9y
UGFnaW5hdGVkTGluZUNoYW5nZWQoY3VyciwgMCwgbGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKSkg
ewogICAgICAgICAgICAgICAgICAgICBjdXJyLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHBhZ2luYXRp
b25EZWx0YSAtPSBjdXJyLT5wYWdpbmF0aW9uU3RydXQoKTsKLSAgICAgICAgICAgICAgICBhZGp1
c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGN1cnIsIHBhZ2luYXRpb25EZWx0YSk7CisgICAg
ICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyLCBwYWdpbmF0
aW9uRGVsdGEsIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KHBhZ2luYXRpb25EZWx0YSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbnNGbG9h
dHMoKSB8fCAhbGF5b3V0U3RhdGUuZmxvYXRzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogRG8gYmV0dGVyIGV2ZW50dWFsbHkuICBGb3Igbm93IGlmIHdl
IGV2ZXIgc2hpZnQgYmVjYXVzZSBvZiBwYWdpbmF0aW9uIGFuZCBmbG9hdHMgYXJlIHByZXNlbnQg
anVzdCBnbyB0byBhIGZ1bGwgbGF5b3V0LgpAQCAtMjAxMyw3ICsyMDIwLDcgQEAgUm9vdElubGlu
ZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgICAgICAgICAgICAgICAgICBsYXlv
dXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VGcm9tQm94KGN1cnIsIHBhZ2luYXRpb25EZWx0YSk7
CiAgICAgICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24o
cGFnaW5hdGlvbkRlbHRhKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KGluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5m
bG93VGhyZWFkKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnItPnNldENvbnRhaW5pbmdSZWdp
b24ocmVnaW9uQXRCbG9ja09mZnNldChjdXJyLT5saW5lVG9wV2l0aExlYWRpbmcoKSkpOwogICAg
ICAgICAgICAgfQogCkBAIC0yMTQ5LDcgKzIxNTYsNyBAQCBib29sIFJlbmRlckJsb2NrOjpjaGVj
a1BhZ2luYXRpb25BbmRGbG9hCiAgICAgTGF5b3V0VW5pdCBsaW5lRGVsdGEgPSBsb2dpY2FsSGVp
Z2h0KCkgLSBsYXlvdXRTdGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgpOwogCiAgICAgYm9vbCBwYWdp
bmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5p
c1BhZ2luYXRlZCgpOwotICAgIGlmIChwYWdpbmF0ZWQgJiYgaW5SZW5kZXJGbG93VGhyZWFkKCkp
IHsKKyAgICBpZiAocGFnaW5hdGVkICYmIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkgewogICAg
ICAgICAvLyBDaGVjayBhbGwgbGluZXMgZnJvbSBoZXJlIHRvIHRoZSBlbmQsIGFuZCBzZWUgaWYg
dGhlIGh5cG90aGV0aWNhbCBuZXcgcG9zaXRpb24gZm9yIHRoZSBsaW5lcyB3aWxsIHJlc3VsdAog
ICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBhdmFpbGFibGUgbGluZSB3aWR0aC4KICAgICAgICAg
Zm9yIChSb290SW5saW5lQm94KiBsaW5lQm94ID0gbGF5b3V0U3RhdGUuZW5kTGluZSgpOyBsaW5l
Qm94OyBsaW5lQm94ID0gbGluZUJveC0+bmV4dFJvb3RCb3goKSkgewpAQCAtMjE1OCwxMCArMjE2
NSwxMCBAQCBib29sIFJlbmRlckJsb2NrOjpjaGVja1BhZ2luYXRpb25BbmRGbG9hCiAgICAgICAg
ICAgICAgICAgLy8gc3RydXQgeWV0LgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkUGFn
aW5hdGlvblN0cnV0ID0gbGluZUJveC0+cGFnaW5hdGlvblN0cnV0KCk7CiAgICAgICAgICAgICAg
ICAgbGluZURlbHRhIC09IG9sZFBhZ2luYXRpb25TdHJ1dDsKLSAgICAgICAgICAgICAgICBhZGp1
c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGxpbmVEZWx0YSk7CisgICAgICAg
ICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBsaW5lRGVs
dGEsIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CiAgICAgICAgICAgICAgICAgbGluZUJveC0+
c2V0UGFnaW5hdGlvblN0cnV0KG9sZFBhZ2luYXRpb25TdHJ1dCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAobGluZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNoYW5nZWQobGluZUJveCwg
bGluZURlbHRhKSkKKyAgICAgICAgICAgIGlmIChsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hh
bmdlZChsaW5lQm94LCBsaW5lRGVsdGEsIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDE0NDM2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
MTEgKzE0NSwxMiBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnCiAK
IHZvaWQgUmVuZGVyQm94OjpjbGVhclJlbmRlckJveFJlZ2lvbkluZm8oKQogewotICAgIGlmICgh
aW5SZW5kZXJGbG93VGhyZWFkKCkgfHwgaXNSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgaWYgKGlz
UmVuZGVyRmxvd1RocmVhZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJGbG93VGhy
ZWFkKiBmbG93VGhyZWFkID0gZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOwotICAgIGZsb3dU
aHJlYWQtPnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8odGhpcyk7CisgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAo
Zmxvd1RocmVhZCkKKyAgICAgICAgZmxvd1RocmVhZC0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5m
byh0aGlzKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OndpbGxCZURlc3Ryb3llZCgpCkBAIC0yMjYz
LDExICsyMjY0LDggQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyQm94OjpyZW5kZXJCbwog
ICAgIC8vIE5vIGNhY2hlZCB2YWx1ZSB3YXMgZm91bmQsIHNvIHdlIGhhdmUgdG8gY29tcHV0ZSBv
dXIgaW5zZXRzIGluIHRoaXMgcmVnaW9uLgogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGxpbWl0
IHRoaXMgY29tcHV0YXRpb24gdG8gbm9ybWFsIFJlbmRlckJsb2Nrcy4gRnV0dXJlIHBhdGNoZXMg
d2lsbCBleHBhbmQKICAgICAvLyBzdXBwb3J0IHRvIGNvdmVyIGFsbCBib3hlcy4KLSAgICBpZiAo
IWluUmVuZGVyRmxvd1RocmVhZCgpIHx8ICFjYW5IYXZlQm94SW5mb0luUmVnaW9uKCkgfHwgaXNS
ZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKTsKLSAgICBpZiAo
Zmxvd1RocmVhZC0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSAhPSBzdHlsZSgpLT53cml0aW5nTW9k
ZSgpKQorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCk7CisgICAgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpIHx8ICFmbG93VGhyZWFk
IHx8ICFjYW5IYXZlQm94SW5mb0luUmVnaW9uKCkgfHwgZmxvd1RocmVhZC0+c3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSAhPSBzdHlsZSgpLT53cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKQEAgLTI4
MjMsNyArMjgyMSw4IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2cK
ICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVk
KGNvbnRhaW5pbmdCbG9jaywgZmFsc2UpOwogCiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNC
b3goKSkgewotICAgICAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwor
ICAgICAgICBpZiAoIWZsb3dUaHJlYWQpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3go
Y29udGFpbmluZ0Jsb2NrKS0+Y2xpZW50TG9naWNhbFdpZHRoKCk7CiAKICAgICAgICAgY29uc3Qg
UmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjb250YWluaW5nQmxvY2spOwpAQCAtMjgz
OSw3ICsyODM4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZwog
ICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY2JS
ZWdpb24sIGNiUGFnZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKHJlZ2lvbiAmJiBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAocmVnaW9uICYmIGZsb3dUaHJl
YWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5p
bmdCbG9ja1JlZ2lvbiA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CiAg
ICAgICAgICAgICBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Js
b2NrUmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlIC0gbG9naWNhbFRvcCgp
KTsKICAgICAgICAgfQpAQCAtMjg4Miw3ICsyODgxLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0xvZwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzQm94KCkpIHsK
ICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5kZXJCbG9jayhjb250YWluaW5n
QmxvY2spOwogICAgICAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLT5jbGllbnRMb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgIGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSAmJiBjb250YWluaW5nQmxv
Y2stPmlzUmVuZGVyRmxvd1RocmVhZCgpICYmIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCisgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIGlmIChmbG93VGhyZWFkICYmIGNv
bnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgZmxvd1RocmVhZC0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJGbG93VGhyZWFkKGNvbnRhaW5p
bmdCbG9jayktPmNvbnRlbnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdFJlZ2lvbigpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMwNzIsNyArMzA3Miw4IEBAIHZvaWQgUmVuZGVyQm94
Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAKICAgICAvLyBBZGp1c3QgbG9naWNhbExl
ZnQgaWYgd2UgbmVlZCB0byBmb3IgdGhlIGZsaXBwZWQgdmVyc2lvbiBvZiBvdXIgd3JpdGluZyBt
b2RlIGluIHJlZ2lvbnMuCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBl
cyBvZiBvYmplY3RzIGFzIGNvbnRhaW5lckJsb2NrLCBub3Qgb25seSBSZW5kZXJCbG9jay4KLSAg
ICBpZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIXJlZ2lvbiAmJiBpc1dyaXRpbmdNb2RlUm9v
dCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgY29udGFpbmVyQmxvY2stPmlzUmVuZGVyQmxvY2soKSkg
eworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgaWYgKGZsb3dUaHJlYWQgJiYgIXJlZ2lvbiAmJiBpc1dyaXRpbmdNb2Rl
Um9vdCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxvY2stPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgY29udGFpbmVyQmxvY2stPmlzUmVuZGVyQmxvY2so
KSkgewogICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdp
b24oKSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRQb3MgPSBjb21wdXRlZFZhbHVl
cy5tX3Bvc2l0aW9uOwogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJs
b2NrKGNvbnRhaW5lckJsb2NrKTsKQEAgLTMzOTIsNyArMzM5Myw4IEBAIHZvaWQgUmVuZGVyQm94
Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAKICAgICAvLyBBZGp1c3QgbG9naWNhbFRv
cCBpZiB3ZSBuZWVkIHRvIGZvciBwZXJwZW5kaWN1bGFyIHdyaXRpbmcgbW9kZXMgaW4gcmVnaW9u
cy4KICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIG9mIG9iamVjdHMg
YXMgY29udGFpbmVyQmxvY2ssIG5vdCBvbmx5IFJlbmRlckJsb2NrLgotICAgIGlmIChpblJlbmRl
ckZsb3dUaHJlYWQoKSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGNvbnRhaW5lckJs
b2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGNvbnRhaW5lckJsb2NrLT5pc1JlbmRl
ckJsb2NrKCkpIHsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpOworICAgIGlmIChmbG93VGhyZWFkICYmIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgIT0gY29udGFpbmVyQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
JiYgY29udGFpbmVyQmxvY2stPmlzUmVuZGVyQmxvY2soKSkgewogICAgICAgICBBU1NFUlQoY29u
dGFpbmVyQmxvY2stPmNhbkhhdmVCb3hJbmZvSW5SZWdpb24oKSk7CiAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbFRvcFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb247CiAgICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmVyQmxvY2spOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDE0NDM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTAsMTIgKzI1MCwxMSBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5
b3V0CiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpOwogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2
aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxl
Y3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKIAotICAg
IGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICAvLyBSZWdpb25zIGNoYW5naW5n
IHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgotICAgICAgICBp
ZiAobG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucygpKQotICAgICAgICAgICAgcmVsYXlvdXRD
aGlsZHJlbiA9IHRydWU7Ci0gICAgfQotICAgIHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9n
aWNhbFNpemUoKTsKKyAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMg
dG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxXaWR0aENo
YW5nZWRJblJlZ2lvbnMoZmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0
cnVlOworICAgIHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9naWNhbFNpemUoZmxvd1RocmVh
ZCk7CiAKICAgICBMYXlvdXRTaXplIHByZXZpb3VzU2l6ZSA9IHNpemUoKTsKIApAQCAtMjg2LDcg
KzI4NSw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXQKIAogICAg
IGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNSb290KCkpOwog
Ci0gICAgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2soKTsKKyAgICBjb21wdXRlUmVnaW9uUmFu
Z2VGb3JCbG9jayhmbG93VGhyZWFkKTsKIAogICAgIGlmICghaXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpICYmIGhlaWdodCgpID09IDApIHsKICAgICAgICAgLy8gV2UgYXJlIGEgYmxv
Y2sgd2l0aCBubyBib3JkZXIgYW5kIHBhZGRpbmcgYW5kIGEgY29tcHV0ZWQgaGVpZ2h0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJl
dmlzaW9uIDE0NDM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJs
ZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSwxMiArMzM1LDExIEBAIHZvaWQgUmVuZGVy
RmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wKIAogICAgIExheW91dFN0YXRlTWFpbnRhaW5l
ciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9y
bSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKTsKIAotICAgIGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICAvLyBS
ZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxk
cmVuLgotICAgICAgICBpZiAobG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucygpKQotICAgICAg
ICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgfQotICAgIHVwZGF0ZVJlZ2lvbnNB
bmRFeGNsdXNpb25zTG9naWNhbFNpemUoKTsKKyAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRo
cyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dU
aHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYg
KGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoZmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5
b3V0Q2hpbGRyZW4gPSB0cnVlOworICAgIHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9naWNh
bFNpemUoZmxvd1RocmVhZCk7CiAKICAgICBtX251bWJlck9mSW5GbG93Q2hpbGRyZW5PbkZpcnN0
TGluZSA9IC0xOwogCkBAIC0zNjYsNyArMzY1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
bGF5b3V0QmxvY2soYm9vbAogCiAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRD
aGlsZHJlbiB8fCBpc1Jvb3QoKSk7CiAKLSAgICBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCbG9jaygp
OworICAgIGNvbXB1dGVSZWdpb25SYW5nZUZvckJsb2NrKGZsb3dUaHJlYWQpOwogCiAgICAgcmVw
YWludENoaWxkcmVuRHVyaW5nTGF5b3V0SWZNb3ZlZChvbGRDaGlsZFJlY3RzKTsKICAgICAvLyBG
SVhNRTogY3NzMy9mbGV4Ym94L3JlcGFpbnQtcnRsLWNvbHVtbi5odG1sIHNlZW1zIHRvIHJlcGFp
bnQgbW9yZSBvdmVyZmxvdyB0aGFuIGl0IG5lZWRzIHRvLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTQ0NDYxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MjcsOSArNzI3LDggQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZs
b3dSZWdpbwogICAgIEFTU0VSVChvYmplY3QpOwogICAgIEFTU0VSVChyZWdpb24pOwogCi0gICAg
aWYgKCFvYmplY3QtPmluUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG9iamVjdC0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpICE9IHRoaXMpCisg
ICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG9iamVjdC0+Zmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpOworICAgIGlmIChmbG93VGhyZWFkICE9IHRoaXMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoIW1fcmVnaW9uTGlzdC5jb250YWlucyhjb25zdF9jYXN0PFJlbmRl
clJlZ2lvbio+KHJlZ2lvbikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCShyZXZpc2lvbiAxNDQzNjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NywxMiArMTQ3LDExIEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW8K
ICAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSk7CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXco
KSwgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpIHx8IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogCi0gICAgaWYg
KGluUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lk
dGhzIGNhbiBmb3JjZSB1cyB0byByZWxheW91dCBvdXIgY2hpbGRyZW4uCi0gICAgICAgIGlmIChs
b2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKCkpCi0gICAgICAgICAgICByZWxheW91dENoaWxk
cmVuID0gdHJ1ZTsKLSAgICB9Ci0gICAgdXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNMb2dpY2Fs
U2l6ZSgpOworICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhzIGNhbiBmb3JjZSB1cyB0byBy
ZWxheW91dCBvdXIgY2hpbGRyZW4uCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9
IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAobG9naWNhbFdpZHRoQ2hhbmdl
ZEluUmVnaW9ucyhmbG93VGhyZWFkKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7
CisgICAgdXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNMb2dpY2FsU2l6ZShmbG93VGhyZWFkKTsK
IAogICAgIExheW91dFNpemUgcHJldmlvdXNTaXplID0gc2l6ZSgpOwogCkBAIC0xNjksNyArMTY4
LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5bwogCiAgICAgbGF5
b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CiAKLSAg
ICBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCbG9jaygpOworICAgIGNvbXB1dGVSZWdpb25SYW5nZUZv
ckJsb2NrKGZsb3dUaHJlYWQpOwogCiAgICAgY29tcHV0ZU92ZXJmbG93KG9sZENsaWVudEFmdGVy
RWRnZSk7CiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTQ0NDYxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwxMyAr
MjEyLDE0IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBwYXJlbnQoKS0+c3R5bGUoKTsKICAgICBSZW5kZXJJ
bmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9IHBhcmVudCgpLT5pc1JlbmRlcklubGluZSgpID8g
dG9SZW5kZXJJbmxpbmUocGFyZW50KCkpIDogMDsKICAgICBib29sIGNoZWNrRm9udHMgPSBkb2N1
bWVudCgpLT5pbk5vUXVpcmtzTW9kZSgpOworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgYm9vbCBhbHdheXNDcmVhdGVM
aW5lQm94ZXMgPSAocGFyZW50UmVuZGVySW5saW5lICYmIHBhcmVudFJlbmRlcklubGluZS0+YWx3
YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJJbmxpbmUgJiYg
cGFyZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKICAgICAgICAgfHwgc3R5
bGUoKS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgIHx8IHN0eWxlKCktPnRl
eHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZQogICAgICAgICB8fCAoY2hl
Y2tGb250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGlj
YWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChzdHlsZSgpLT5mb250KCkuZm9udE1ldHJpY3MoKSkK
ICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBzdHlsZSgpLT5saW5lSGVp
Z2h0KCkpKQotICAgICAgICB8fCAoaW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgZW5jbG9zaW5nUmVu
ZGVyRmxvd1RocmVhZCgpLT5oYXNSZWdpb25zV2l0aFN0eWxpbmcoKSk7CisgICAgICAgIHx8IChm
bG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmhhc1JlZ2lvbnNXaXRoU3R5bGluZygpKTsKIAogICAg
IGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNoZWNrRm9udHMgJiYgZG9jdW1lbnQoKS0+
c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAg
Ly8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHlsZSBhcyB3ZWxsLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxNDQzNzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODM2LDEyICsxODM2LDkgQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXllciog
YWNjdW11bAogICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9IHJlbmRlcmVyLT5zdHlsZSgpLT5wb3Np
dGlvbigpOwogCiAgICAgLy8gRklYTUU6IFNwZWNpYWwgY2FzaW5nIFJlbmRlckZsb3dUaHJlYWQg
c28gbXVjaCBmb3IgZml4ZWQgcG9zaXRpb25pbmcgaGVyZSBpcyBub3QgZ3JlYXQuCi0gICAgUmVu
ZGVyRmxvd1RocmVhZCogZml4ZWRGbG93VGhyZWFkQ29udGFpbmVyID0gMDsKLSAgICBpZiAocG9z
aXRpb24gPT0gRml4ZWRQb3NpdGlvbiAmJiByZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkp
IHsKLSAgICAgICAgZml4ZWRGbG93VGhyZWFkQ29udGFpbmVyID0gcmVuZGVyZXItPmVuY2xvc2lu
Z1JlbmRlckZsb3dUaHJlYWQoKTsKLSAgICAgICAgaWYgKCFmaXhlZEZsb3dUaHJlYWRDb250YWlu
ZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgZml4ZWRGbG93VGhyZWFk
Q29udGFpbmVyID0gMDsKLSAgICB9CisgICAgUmVuZGVyRmxvd1RocmVhZCogZml4ZWRGbG93VGhy
ZWFkQ29udGFpbmVyID0gcG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbiA/IHJlbmRlcmVyLT5mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgOiAwOworICAgIGlmIChmaXhlZEZsb3dUaHJlYWRDb250
YWluZXIgJiYgIWZpeGVkRmxvd1RocmVhZENvbnRhaW5lci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCisgICAgICAgIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7CiAKICAgICAvLyBGSVhN
RTogUG9zaXRpb25pbmcgb2Ygb3V0LW9mLWZsb3coZml4ZWQsIGFic29sdXRlKSBlbGVtZW50cyBj
b2xsZWN0ZWQgaW4gYSBSZW5kZXJGbG93VGhyZWFkCiAgICAgLy8gbWF5IG5lZWQgdG8gYmUgcmV2
aXNpdGVkIGluIGEgZnV0dXJlIHBhdGNoLgpAQCAtMTkxMiw3ICsxOTA5LDcgQEAgc3RhdGljIGlu
bGluZSBjb25zdCBSZW5kZXJMYXllciogYWNjdW11bAogCiAgICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgcmVhY2ggUmVuZGVyVmlldyBsYXllciBwYXN0IHRoZSBSZW5kZXJGbG93VGhyZWFkIGxheWVy
IGZvciBhbnkKICAgICAgICAgLy8gY2hpbGRyZW4gb2YgdGhlIFJlbmRlckZsb3dUaHJlYWQuCi0g
ICAgICAgIGlmIChyZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIWxheWVyLT5pc091
dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5mbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgIWxheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJl
YWQoKSkKICAgICAgICAgICAgIEFTU0VSVChwYXJlbnRMYXllciAhPSByZW5kZXJlci0+dmlldygp
LT5sYXllcigpKTsKIAogICAgICAgICBpZiAoZm91bmRBbmNlc3RvckZpcnN0KSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAkocmV2aXNpb24gMTQ0MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzAsNyArMTY3MCw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5CZUNvbXBvc2kKIHsKICAgICAvLyBGSVhNRTog
V2UgZGlzYWJsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBmb3IgZWxlbWVudHMgaW4gYSBSZW5k
ZXJGbG93VGhyZWFkIGFzIGl0IGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KICAgICAvLyBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi84NDkwMCB0byByZS1lbmFibGUgaXQuCi0gICAgcmV0dXJuIG1faGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyAmJiBsYXllci0+aXNTZWxmUGFpbnRpbmdMYXllcigpICYm
ICFsYXllci0+cmVuZGVyZXIoKS0+aW5SZW5kZXJGbG93VGhyZWFkKCk7CisgICAgcmV0dXJuIG1f
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyAmJiBsYXllci0+aXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmIGxheWVyLT5yZW5kZXJlcigpLT5mbG93VGhyZWFkU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6
Ok5vdEluc2lkZUZsb3dUaHJlYWQ7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc093bkJhY2tpbmdTdG9yZShjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IFJl
bmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yTGF5ZXIpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHJldmlzaW9uIDE0NDM2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDkgKzcwLDggQEAgdm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKICAgICBib29sIGNvbnRy
b2xzTmVlZExheW91dCA9IGNvbnRyb2xzUmVuZGVyZXItPm5lZWRzTGF5b3V0KCk7CiAgICAgLy8g
SWYgdGhlIHJlZ2lvbiBjaGFpbiBoYXMgY2hhbmdlZCB3ZSBhbHNvIG5lZWQgdG8gcmVsYXlvdXQg
dGhlIGNvbnRyb2xzIHRvIHVwZGF0ZSB0aGUgcmVnaW9uIGJveCBpbmZvLgogICAgIC8vIEZJWE1F
OiBXZSBjYW4gZG8gYmV0dGVyIG9uY2Ugd2UgY29tcHV0ZSByZWdpb24gYm94IGluZm8gZm9yIFJl
bmRlclJlcGxhY2VkLCBub3Qgb25seSBmb3IgUmVuZGVyQmxvY2suCi0gICAgaWYgKGluUmVuZGVy
Rmxvd1RocmVhZCgpICYmICFjb250cm9sc05lZWRMYXlvdXQpIHsKLSAgICAgICAgY29uc3QgUmVu
ZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKTsK
LSAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQpOworICAgIGNvbnN0IFJlbmRlckZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGZsb3dU
aHJlYWQgJiYgIWNvbnRyb2xzTmVlZExheW91dCkgewogICAgICAgICBpZiAoZmxvd1RocmVhZC0+
cGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCgpKQogICAgICAgICAgICAgY29udHJvbHNOZWVkTGF5b3V0
ID0gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTQ0NDYxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MywxMSArNTkzLDEwIEBAIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmVuY2wKICAgICByZXR1cm4gMDsKIH0KIAot
UmVuZGVyRmxvd1RocmVhZCogUmVuZGVyT2JqZWN0OjplbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFk
KCkgY29uc3QKLXsgICAKLSAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICAKK1JlbmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6bG9jYXRlRmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGZsb3dUaHJlYWRT
dGF0ZSgpICE9IE5vdEluc2lkZUZsb3dUaHJlYWQpOworCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUg
dGhlIHRocmVhZCBjYWNoZWQgYmVjYXVzZSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dC4K
ICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gdmlldygpLT5mbG93VGhyZWFkQ29u
dHJvbGxlcigpLT5jdXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOwogICAgIGlmIChmbG93VGhyZWFk
KQpAQCAtNjA4LDcgKzYwNyw3IEBAIFJlbmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6ZW5j
bG9zaW4KICAgICB3aGlsZSAoY3VycikgewogICAgICAgICBpZiAoY3Vyci0+aXNSZW5kZXJGbG93
VGhyZWFkKCkpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJGbG93VGhyZWFkKGN1cnIpOwot
ICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7CisgICAgICAgIGN1cnIgPSBjdXJyLT5jb250
YWluaW5nQmxvY2soKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMjk3LDE1ICsxMjk2
LDE2IEBAIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIFJlbmRlck9iamVjdDo6Y28KICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgZmxvdyB0aHJlYWQsIHRoZW4gd2UgbmVlZCB0byBkbyBpbmRpdmlkdWFsIHJl
cGFpbnRzIHdpdGhpbiB0aGUgUmVuZGVyUmVnaW9ucyBpbnN0ZWFkLgogICAgIC8vIFJldHVybiB0
aGUgZmxvdyB0aHJlYWQgYXMgYSByZXBhaW50IGNvbnRhaW5lciBpbiBvcmRlciB0byBjcmVhdGUg
YSBjaG9rZXBvaW50IHRoYXQgYWxsb3dzIHVzIHRvIGNoYW5nZQogICAgIC8vIHJlcGFpbnRpbmcg
dG8gZG8gaW5kaXZpZHVhbCByZWdpb24gcmVwYWludHMuCi0gICAgaWYgKGluUmVuZGVyRmxvd1Ro
cmVhZCgpKSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIHBhcmVudFJlbmRlckZsb3dUaHJl
YWQgPSBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgUmVuZGVyRmxvd1RocmVhZCog
cGFyZW50UmVuZGVyRmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAg
ICBpZiAocGFyZW50UmVuZGVyRmxvd1RocmVhZCkgewogICAgICAgICAvLyBUaGUgYW5jZXN0b3Ig
ZG9jdW1lbnQgd2lsbCBkbyB0aGUgcmVwYXJlbnRpbmcgd2hlbiB0aGUgcmVwYWludCBwcm9wYWdh
dGVzIGZ1cnRoZXIgdXAuCiAgICAgICAgIC8vIFdlJ3JlIGp1c3QgYSBzZWFtbGVzcyBjaGlsZCBk
b2N1bWVudCwgYW5kIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGhhY2tpbmcuCiAgICAgICAgIGlm
IChwYXJlbnRSZW5kZXJGbG93VGhyZWFkICYmIHBhcmVudFJlbmRlckZsb3dUaHJlYWQtPmRvY3Vt
ZW50KCkgIT0gZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiByZXBhaW50Q29udGFpbmVy
OwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgZm91bmQgYSByZXBhaW50IGNvbnRhaW5l
ciB0aGVuIHdlIHdpbGwgcmVwYWludCBpbnRvIHRoYXQgY29udGFpbmVyIG9ubHkgaWYgaXQgaXMg
cGFydCBvZiB0aGUgc2FtZQogICAgICAgICAvLyBmbG93IHRocmVhZC4gT3RoZXJ3aXNlIHdlIHdp
bGwgbmVlZCB0byBjYXRjaCB0aGUgcmVwYWludCBjYWxsIGFuZCBzZW5kIGl0IHRvIHRoZSBmbG93
IHRocmVhZC4KLSAgICAgICAgaWYgKCEocmVwYWludENvbnRhaW5lciAmJiByZXBhaW50Q29udGFp
bmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKSAmJiByZXBhaW50Q29udGFpbmVyLT5lbmNsb3NpbmdS
ZW5kZXJGbG93VGhyZWFkKCkgPT0gcGFyZW50UmVuZGVyRmxvd1RocmVhZCkpCisgICAgICAgIFJl
bmRlckZsb3dUaHJlYWQqIHJlcGFpbnRDb250YWluZXJGbG93VGhyZWFkID0gcmVwYWludENvbnRh
aW5lciA/IHJlcGFpbnRDb250YWluZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSA6IDA7
CisgICAgICAgIGlmICghcmVwYWludENvbnRhaW5lckZsb3dUaHJlYWQgfHwgcmVwYWludENvbnRh
aW5lckZsb3dUaHJlYWQgIT0gcGFyZW50UmVuZGVyRmxvd1RocmVhZCkKICAgICAgICAgICAgIHJl
cGFpbnRDb250YWluZXIgPSBwYXJlbnRSZW5kZXJGbG93VGhyZWFkOwogICAgIH0KICAgICByZXR1
cm4gcmVwYWludENvbnRhaW5lcjsKQEAgLTI0NzcsOCArMjQ3Nyw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUKICAgICBpZiAoaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgcGFyZW50KCktPmNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgIHBhcmVudCgpLT5kaXJ0
eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCh0aGlzKTsKIAotICAgIGlmIChpblJlbmRlckZsb3dUaHJl
YWQoKSkKLSAgICAgICAgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWQoKTsKKyAgICByZW1vdmVG
cm9tUmVuZGVyRmxvd1RocmVhZCgpOwogCiAgICAgaWYgKFJlbmRlck5hbWVkRmxvd1RocmVhZCog
Y29udGFpbmVyRmxvd1RocmVhZCA9IHBhcmVudCgpLT5yZW5kZXJOYW1lZEZsb3dUaHJlYWRXcmFw
cGVyKCkpCiAgICAgICAgIGNvbnRhaW5lckZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGlsZCh0aGlz
KTsKQEAgLTI0OTEsMTMgKzI0OTAsMTQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZVJlbW92
ZWRGcm9tVHJlZQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJl
YWQoKQogewotICAgIFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dUaHJlYWQgPSBlbmNsb3Np
bmdSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAgQVNTRVJUKHJlbmRlckZsb3dUaHJlYWQpOwotICAg
IC8vIFNvbWV0aW1lcyB3ZSByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZmxvdywgYnV0IGl0
J3Mgbm90IGRlc3Ryb3llZCBhdCB0aGF0IHRpbWUuIAorICAgIGlmIChmbG93VGhyZWFkU3RhdGUo
KSA9PSBOb3RJbnNpZGVGbG93VGhyZWFkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
U29tZXRpbWVzIHdlIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBmbG93LCBidXQgaXQncyBu
b3QgZGVzdHJveWVkIGF0IHRoYXQgdGltZS4KICAgICAvLyBJdCdzIG9ubHkgdW50aWwgbGF0ZXIg
d2hlbiB3ZSBhY3R1YWxseSBkZXN0cm95IGl0IGFuZCByZW1vdmUgYWxsIHRoZSBjaGlsZHJlbiBm
cm9tIGl0LiAKICAgICAvLyBDdXJyZW50bHksIHRoYXQgaGFwcGVucyBmb3IgZmlyc3RMZXR0ZXIg
ZWxlbWVudHMgYW5kIGxpc3QgbWFya2Vycy4KICAgICAvLyBQYXNzIGluIHRoZSBmbG93IHRocmVh
ZCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbG9vayBpdCB1cCBmb3IgYWxsIHRoZSBjaGlsZHJl
bi4KLSAgICByZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShyZW5kZXJGbG93VGhy
ZWFkKTsKKyAgICByZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCkpOwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJl
bmRlckZsb3dUaHJlYWRSZWN1cnNpdmUoUmVuZGVyRmxvd1RocmVhZCogcmVuZGVyRmxvd1RocmVh
ZCkKQEAgLTI1MDYsNyArMjUwNiwxMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJl
bmRlckZsb3dUCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNoaWxkcmVuLT5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAg
ICAgICAgY2hpbGQtPnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKHJlbmRlckZs
b3dUaHJlYWQpOwogICAgIH0KLSAgICByZW5kZXJGbG93VGhyZWFkLT5yZW1vdmVGbG93Q2hpbGRJ
bmZvKHRoaXMpOworICAgIAorICAgIFJlbmRlckZsb3dUaHJlYWQqIGxvY2FsRmxvd1RocmVhZCA9
IHJlbmRlckZsb3dUaHJlYWQ7CisgICAgaWYgKGZsb3dUaHJlYWRTdGF0ZSgpID09IEluc2lkZUlu
Rmxvd1RocmVhZCkKKyAgICAgICAgbG9jYWxGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpOyAvLyBXZSBoYXZlIHRvIGFzay4gV2UgY2FuJ3QganVzdCBhc3N1bWUgd2UgYXJl
IGluIHRoZSBzYW1lIGZsb3cgdGhyZWFkLgorICAgIGlmIChsb2NhbEZsb3dUaHJlYWQpCisgICAg
ICAgIGxvY2FsRmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkSW5mbyh0aGlzKTsKICAgICBzZXRG
bG93VGhyZWFkU3RhdGUoTm90SW5zaWRlRmxvd1RocmVhZCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0NDQ2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3
LDggKzIxNywxNCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyQm94KiBlbmNsb3NpbmdCb3goKSBjb25z
dDsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogZW5jbG9zaW5nQm94TW9kZWxPYmplY3QoKSBj
b25zdDsKIAotICAgIC8vIEZ1bmN0aW9uIHRvIHJldHVybiBvdXIgZW5jbG9zaW5nIGZsb3cgdGhy
ZWFkIGlmIHdlIGFyZSBjb250YWluZWQgaW5zaWRlIG9uZS4KLSAgICBSZW5kZXJGbG93VGhyZWFk
KiBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCkgY29uc3Q7CisgICAgLy8gRnVuY3Rpb24gdG8g
cmV0dXJuIG91ciBlbmNsb3NpbmcgZmxvdyB0aHJlYWQgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNp
ZGUgb25lLiBUaGlzCisgICAgLy8gZnVuY3Rpb24gZm9sbG93cyB0aGUgY29udGFpbmluZyBibG9j
ayBjaGFpbi4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChmbG93VGhyZWFkU3RhdGUoKSA9PSBOb3RJbnNp
ZGVGbG93VGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBsb2Nh
dGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgfQogCiAgICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkKiByZW5kZXJOYW1lZEZsb3dUaHJlYWRXcmFwcGVyKCkgY29uc3Q7CiAKQEAgLTQ0
MiwxMiArNDQ4LDYgQEAgcHVibGljOgogICAgICAgICBJbnNpZGVJbkZsb3dUaHJlYWQgPSAyLAog
ICAgIH07CiAKLSAgICBib29sIGluUmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBGbG93VGhyZWFkU3RhdGUgc3RhdGUgPSBmbG93VGhyZWFkU3RhdGUoKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRlICE9IE5vdEluc2lkZUZsb3dUaHJlYWQ7Ci0gICAgfQotCiAgICAgdm9pZCBz
ZXRGbG93VGhyZWFkU3RhdGVJbmNsdWRpbmdEZXNjZW5kYW50cyhGbG93VGhyZWFkU3RhdGUpOwog
CiAgICAgRmxvd1RocmVhZFN0YXRlIGZsb3dUaHJlYWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0ZmllbGRzLmZsb3dUaHJlYWRTdGF0ZSgpOyB9CkBAIC0xMDE4LDYgKzEwMTgsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBzZXREb2N1bWVudEZvckFub255bW91cyhEb2N1bWVudCogZG9jdW1l
bnQpIHsgQVNTRVJUKGlzQW5vbnltb3VzKCkpOyBtX25vZGUgPSBkb2N1bWVudDsgfQogCiBwcml2
YXRlOgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGxvY2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCk7CiAgICAg
dm9pZCByZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShSZW5kZXJGbG93VGhyZWFk
Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCShy
ZXZpc2lvbiAxNDQzNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU3LDkgKzU1Nyw3IEBAIHZvaWQgUmVuZGVyUmVnaW9u
Ojpjb21wdXRlQ2hpbGRyZW5TdHlsZUkKIAogdm9pZCBSZW5kZXJSZWdpb246OnNldE9iamVjdFN0
eWxlSW5SZWdpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlSW5SZWdpb24sIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQpCiB7Ci0gICAgQVNT
RVJUKG9iamVjdC0+aW5SZW5kZXJGbG93VGhyZWFkKCkpOwotICAgIGlmICghb2JqZWN0LT5pblJl
bmRlckZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChvYmplY3QtPmZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9i
amVjdE9yaWdpbmFsU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CiAgICAgb2JqZWN0LT5zZXRTdHls
ZUludGVybmFsKHN0eWxlSW5SZWdpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gMTQ0NDYxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9p
ZCBSZW5kZXJWaWV3OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIAogICAgIC8vIHVwIHJlZ2lvbnMg
aW4gdGhlIHBhcmVudCBkb2N1bWVudCBkdXJpbmcgbGF5b3V0LgogICAgIGlmIChuZXdDaGlsZCAm
JiAhbmV3Q2hpbGQtPmlzUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgIFJlbmRlckJveCog
c2VhbWxlc3NCb3ggPSBlbmNsb3NpbmdTZWFtbGVzc1JlbmRlcmVyKGRvY3VtZW50KCkpOwotICAg
ICAgICBpZiAoc2VhbWxlc3NCb3ggJiYgc2VhbWxlc3NCb3gtPmluUmVuZGVyRmxvd1RocmVhZCgp
KQorICAgICAgICBpZiAoc2VhbWxlc3NCb3ggJiYgc2VhbWxlc3NCb3gtPmZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKSkKICAgICAgICAgICAgIG5ld0NoaWxkLT5zZXRGbG93VGhyZWFkU3RhdGUo
c2VhbWxlc3NCb3gtPmZsb3dUaHJlYWRTdGF0ZSgpKTsKICAgICB9CiAgICAgUmVuZGVyQmxvY2s6
OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CkBAIC0yMDAsNyArMjAwLDcgQEAgYm9v
bCBSZW5kZXJWaWV3Ojppbml0aWFsaXplTGF5b3V0U3RhdGUoTAogICAgICAgICAKICAgICAgICAg
Ly8gU2V0IHRoZSBjdXJyZW50IHJlbmRlciBmbG93IHRocmVhZCB0byBwb2ludCB0byBvdXIgYW5j
ZXN0b3IuIFRoaXMgd2lsbCBhbGxvdyB0aGUgc2VhbWxlc3MgZG9jdW1lbnQgdG8gbG9jYXRlIHRo
ZSBjb3JyZWN0CiAgICAgICAgIC8vIHJlZ2lvbnMgd2hlbiBkb2luZyBhIGxheW91dC4KLSAgICAg
ICAgaWYgKHNlYW1sZXNzQW5jZXN0b3ItPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgICAg
IGlmIChzZWFtbGVzc0FuY2VzdG9yLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKICAg
ICAgICAgICAgIGZsb3dUaHJlYWRDb250cm9sbGVyKCktPnNldEN1cnJlbnRSZW5kZXJGbG93VGhy
ZWFkKHNlYW1sZXNzQW5jZXN0b3ItPnZpZXcoKS0+Zmxvd1RocmVhZENvbnRyb2xsZXIoKS0+Y3Vy
cmVudFJlbmRlckZsb3dUaHJlYWQoKSk7CiAgICAgICAgICAgICBpc1NlYW1sZXNzQW5jZXN0b3JJ
bkZsb3dUaHJlYWQgPSB0cnVlOwogICAgICAgICB9CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBS
ZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZQogICAgICAgICBtX3NlbGVjdGlvbkVu
ZCA9PSBlbmQgJiYgbV9zZWxlY3Rpb25FbmRQb3MgPT0gZW5kUG9zKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoKHN0YXJ0ICYmIGVuZCkgJiYgKHN0YXJ0LT5lbmNsb3NpbmdSZW5kZXJGbG93
VGhyZWFkKCkgIT0gZW5kLT5lbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCkpKQorICAgIGlmICgo
c3RhcnQgJiYgZW5kKSAmJiAoc3RhcnQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAhPSBl
bmQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIFJlY29yZCB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMuICBUaGVzZSB3aWxsIGJlIHVzZWQg
bGF0ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24g
MTQ0MzY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBMYXlv
dXRVbml0IHBhZ2VIZWlnaHQgPSAwLCBib29sIHBhZ2VIZWlnaHRDaGFuZ2VkID0gZmFsc2UsIENv
bHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsKICAgICAgICAgLy8gV2UgcHVzaCBMYXlvdXRT
dGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxh
eW91dERlbHRhIHRvby4KLSAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgbV9sYXlv
dXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IHJlbmRl
cmVyLT5pblJlbmRlckZsb3dUaHJlYWQoKQorICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQo
KSB8fCBtX2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5z
KCkgfHwgcmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKQogICAgICAgICAgICAg
fHwgbV9sYXlvdXRTdGF0ZS0+bGluZUdyaWQoKSB8fCAocmVuZGVyZXItPnN0eWxlKCktPmxpbmVH
cmlkKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZCgpICYmIHJlbmRlcmVyLT5pc0Js
b2NrRmxvdygpKQogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKICAgICAgICAgICAgIHx8IChy
ZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5leGNs
dXNpb25TaGFwZUluc2lkZUluZm8oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE0NDM2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3
IEBAIFJlbmRlclJlZ2lvbiogUm9vdElubGluZUJveDo6Y29udGFpbmluZ1IKIAogI2lmbmRlZiBO
REVCVUcKICAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBibG9jaygpLT5lbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7CisgICAgICAgIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBibG9jaygpLT5mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3QgPSBm
bG93VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCk7CiAgICAgICAgIEFTU0VSVChyZWdpb25MaXN0
LmNvbnRhaW5zKHJlZ2lvbikpOwogICAgIH0KQEAgLTI2OCw3ICsyNjgsNyBAQCBSZW5kZXJSZWdp
b24qIFJvb3RJbmxpbmVCb3g6OmNvbnRhaW5pbmdSCiB2b2lkIFJvb3RJbmxpbmVCb3g6OnNldENv
bnRhaW5pbmdSZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24pCiB7CiAgICAgQVNTRVJUKCFpc0Rp
cnR5KCkpOwotICAgIEFTU0VSVChibG9jaygpLT5pblJlbmRlckZsb3dUaHJlYWQoKSk7CisgICAg
QVNTRVJUKGJsb2NrKCktPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7CiAgICAgTGluZUZy
YWdtZW50YXRpb25EYXRhKiBmcmFnbWVudGF0aW9uRGF0YSAgPSBlbnN1cmVMaW5lRnJhZ21lbnRh
dGlvbkRhdGEoKTsKICAgICBmcmFnbWVudGF0aW9uRGF0YS0+bV9jb250YWluaW5nUmVnaW9uID0g
cmVnaW9uOwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ0NDc4KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDMtMDEgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtOZXcgTXVsdGljb2x1bW5dIENo
YW5nZSBpblJlbmRlckZsb3dUaHJlYWQgdG8gZm9sbG93IGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTIwNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9t
dWx0aWNvbC9wb3NpdGlvbmVkLW91dHNpZGUtb2YtY29sdW1ucy1leHBlY3RlZC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1vZi1jb2x1bW5z
Lmh0bWw6IEFkZGVkLgorCiAyMDEzLTAzLTAxICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1hcmsgcnRsLWlmcmFtZS1hYnNvbHV0ZS1v
dmVyZmxvdy1zY3JvbGxlZCBhcyBmbGFreS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGlj
b2wvcG9zaXRpb25lZC1vdXRzaWRlLW9mLWNvbHVtbnMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1vZi1jb2x1
bW5zLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRp
Y29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1vZi1jb2x1bW5zLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIgQEAKKzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyBib3Jk
ZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6MjAwcHg7IHdpZHRoOjQxMHB4Ij4KKzxkaXYgc3R5
bGU9ImhlaWdodDoyMDBweDtiYWNrZ3JvdW5kLWNvbG9yOmxpbWU7cG9zaXRpb246YWJzb2x1dGU7
bGVmdDowO3RvcDowO3dpZHRoOjIwMHB4Ij48L2Rpdj4KKzxkaXYgc3R5bGU9ImhlaWdodDoyMDBw
eDtiYWNrZ3JvdW5kLWNvbG9yOmxpbWU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3
aWR0aDoyMDBweCI+PC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6
MjAwcHg7d2lkdGg6MzAwcHg7YmFja2dyb3VuZC1jb2xvcjpsaWdodGdyYXk7IGxlZnQ6MjAwcHg7
IHRvcDoyMDBweDsiPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBvdXRzaWRlIHRoZSBjb2x1bW5zLjxi
cj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgb3V0c2lkZSB0aGUgY29sdW1ucy48YnI+CitUaGlzIHRl
eHQgc2hvdWxkIGJlIG91dHNpZGUgdGhlIGNvbHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBi
ZSBvdXRzaWRlIHRoZSBjb2x1bW5zLjxicj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgb3V0c2lkZSB0
aGUgY29sdW1ucy48YnI+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1vZi1jb2x1bW5zLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLW91dHNpZGUtb2Yt
Y29sdW1ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9w
b3NpdGlvbmVkLW91dHNpZGUtb2YtY29sdW1ucy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACis8c2NyaXB0PgoraW50ZXJuYWxzLnNldHRpbmdzLnNldFJlZ2lvbkJhc2VkQ29sdW1u
c0VuYWJsZWQodHJ1ZSkKKzwvc2NyaXB0PgorPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7
IC13ZWJraXQtY29sdW1uLWNvdW50OjI7IC13ZWJraXQtY29sdW1uLXdpZHRoOjIwMHB4OyB3aWR0
aDo0MTBweDsgLXdlYmtpdC1jb2x1bW4tZ2FwOjEwcHg7IGJvcmRlcjoycHggc29saWQgYmxhY2s7
IGhlaWdodDoyMDBweCI+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6NDAwcHg7YmFja2dyb3VuZC1jb2xv
cjpsaW1lIj48L2Rpdj4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyMDBw
eDt3aWR0aDozMDBweDtiYWNrZ3JvdW5kLWNvbG9yOmxpZ2h0Z3JheTsgbGVmdDoyMDBweDsgdG9w
OjIwMHB4OyI+CitUaGlzIHRleHQgc2hvdWxkIGJlIG91dHNpZGUgdGhlIGNvbHVtbnMuPGJyPgor
VGhpcyB0ZXh0IHNob3VsZCBiZSBvdXRzaWRlIHRoZSBjb2x1bW5zLjxicj4KK1RoaXMgdGV4dCBz
aG91bGQgYmUgb3V0c2lkZSB0aGUgY29sdW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIGJlIG91
dHNpZGUgdGhlIGNvbHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBvdXRzaWRlIHRoZSBj
b2x1bW5zLjxicj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191023</attachid>
            <date>2013-03-01 13:12:56 -0800</date>
            <delta_ts>2013-03-01 13:37:56 -0800</delta_ts>
            <desc>Updated patch to ToT</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>67672</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMy0wMy0wMSAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gQ2hh
bmdlIGluUmVuZGVyRmxvd1RocmVhZCB0byBmb2xsb3cgY29udGFpbmluZyBibG9jayBjaGFpbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMjA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCByZW1vdmVzIGluUmVuZGVyRmxvd1RocmVhZCBhbmQgY2hhbmdlcyBlbmNsb3NpbmdSZW5kZXJG
bG93VGhyZWFkKCkKKyAgICAgICAgdG8gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpLiBmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgbm93IGZvbGxvd3MKKyAgICAgICAgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgY2hhaW4gaW5zdGVhZCBvZiB0aGUgcGFyZW50IGNoYWluIHdoZW4gb3V0c2lkZSBv
ZiBsYXlvdXQuCisgICAgICAgIChJdCBhbHJlYWR5IGRpZCB0aGUgcmlnaHQgdGhpbmcgd2hlbiBj
YWxsZWQgZHVyaW5nIGxheW91dC4pCisgICAgICAgIAorICAgICAgICBCeSByZW1vdmluZyBpblJl
bmRlckZsb3dUaHJlYWQgKHdoaWNoIHdhcyBmb2xsb3dpbmcgdGhlIHBhcmVudCBjaGFpbiksIGFs
bAorICAgICAgICBjb2RlIHRoYXQgaXMgY2hlY2tpbmcgZm9yIGZsb3cgdGhyZWFkIGNvbnRhaW5t
ZW50IG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUKKyAgICAgICAgY29udGFpbmluZyBibG9jayBjaGFp
bi4gVGhpcyBhbGxvd3MgZm9yIGNvbnRlbnQgdG8gZXNjYXBlIGluLWZsb3cgZmxvdyB0aHJlYWRz
CisgICAgICAgIGFuZCBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCBhc3NlcnRpbmcuCisgICAg
ICAgIAorICAgICAgICBUZXN0OiBmYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1vZi1j
b2x1bW5zLmh0bWwKKworICAgICAgICAqIGRvbS9XZWJLaXROYW1lZEZsb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aW5GbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE5hbWVk
Rmxvdzo6Z2V0UmVnaW9uc0J5Q29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFu
b255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZUFu
b255bW91c0JveENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVS
ZWdpb25zQW5kRXhjbHVzaW9uc0xvZ2ljYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjb21wdXRlUmVnaW9uUmFuZ2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNvbXB1dGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGV0ZXJt
aW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzTmV4dFBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExp
bmVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZWdp
b25BdEJsb2NrT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRTdGF0
aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxheW91dEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3Rh
dGU6OkxpbmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6
OmZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpzZXRGbG93
VGhyZWFkKToKKyAgICAgICAgKExpbmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnJlbmRlckJveFJlZ2lvbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNh
bEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6Omxh
eW91dEJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dEJs
b2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11
bGF0ZU9mZnNldFRvd2FyZHNBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNhbkJlQ29tcG9zaXRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpsYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRPYmplY3RTdHlsZUluUmVnaW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojph
ZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojppbml0aWFsaXplTGF5b3V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpjb250YWluaW5nUmVnaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNldENvbnRhaW5pbmdSZWdpb24p
OgorCiAyMDEzLTAzLTAxICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAg
ICAgICBbY3NzIGV4Y2x1c2lvbnNdIHNldHRpbmcgc2hhcGUtaW5zaWRlIG9uIGEgcGFyZW50IGRv
ZXMgbm90IHJlbGF5b3V0IGNoaWxkIGJsb2NrcycgaW5saW5lIGNvbnRlbnQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TmFtZWRGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMs
OSArNzMsMTggQEAgYm9vbCBXZWJLaXROYW1lZEZsb3c6Om92ZXJzZXQoKSBjb25zdAogICAgIHJl
dHVybiBtX3BhcmVudEZsb3dUaHJlYWQgPyBtX3BhcmVudEZsb3dUaHJlYWQtPm92ZXJzZXQoKSA6
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlSW5GbG93VGhyZWFkKE5vZGUqIGNv
bnRlbnROb2RlLCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCitzdGF0aWMgaW5s
aW5lIGJvb2wgaW5GbG93VGhyZWFkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKLSAgICByZXR1cm4gY29udGVudE5vZGUtPnJlbmRl
cmVyKCkgJiYgY29udGVudE5vZGUtPnJlbmRlcmVyKCktPmluUmVuZGVyRmxvd1RocmVhZCgpICYm
IGZsb3dUaHJlYWQgPT0gY29udGVudE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ1JlbmRlckZs
b3dUaHJlYWQoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgUmVuZGVyRmxvd1RocmVhZCogY3VycmVudEZsb3dUaHJlYWQgPSByZW5kZXJlci0+Zmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgIGlmIChmbG93VGhyZWFkID09IGN1cnJlbnRGbG93
VGhyZWFkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmVuZGVyZXItPmZsb3dUaHJl
YWRTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SW5zaWRlSW5GbG93VGhyZWFkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gQW4gaW4tZmxvdyBmbG93IHRocmVhZCBjYW4gYmUg
bmVzdGVkIGluc2lkZSBhbiBvdXQtb2YtZmxvdyBvbmUsIHNvIHdlIGhhdmUgdG8gcmVjdXIgdXAg
dG8gY2hlY2suCisgICAgcmV0dXJuIGluRmxvd1RocmVhZChjdXJyZW50Rmxvd1RocmVhZC0+Y29u
dGFpbmluZ0Jsb2NrKCksIGZsb3dUaHJlYWQpOwogfQogCiBpbnQgV2ViS2l0TmFtZWRGbG93Ojpm
aXJzdEVtcHR5UmVnaW9uSW5kZXgoKSBjb25zdApAQCAtMTEzLDcgKzEyMiw3IEBAIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IFdlYktpdE5hbWVkRmxvdzo6Z2UKICAgICBpZiAoIW1fcGFyZW50Rmxvd1Ro
cmVhZCkKICAgICAgICAgcmV0dXJuIFN0YXRpY05vZGVMaXN0OjphZG9wdChyZWdpb25Ob2Rlcyk7
CiAKLSAgICBpZiAobm9kZUluRmxvd1RocmVhZChjb250ZW50Tm9kZSwgbV9wYXJlbnRGbG93VGhy
ZWFkKSkgeworICAgIGlmIChpbkZsb3dUaHJlYWQoY29udGVudE5vZGUtPnJlbmRlcmVyKCksIG1f
cGFyZW50Rmxvd1RocmVhZCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgcmVn
aW9uTGlzdCA9IG1fcGFyZW50Rmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgpOwogICAgICAg
ICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSByZWdpb25MaXN0
LmJlZ2luKCk7IGl0ZXIgIT0gcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAg
ICBjb25zdCBSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbiA9ICppdGVyOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTE2LDggKzExMTYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFub255
bW91CiAgICAgY2hpbGQtPm1fbmV4dCA9IDA7CiAKICAgICAvLyBSZW1vdmUgYWxsIHRoZSBpbmZv
cm1hdGlvbiBpbiB0aGUgZmxvdyB0aHJlYWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBsZWZ0b3ZlciBh
bm9ueW1vdXMgYmxvY2suCi0gICAgaWYgKGNoaWxkLT5pblJlbmRlckZsb3dUaHJlYWQoKSkKLSAg
ICAgICAgY2hpbGQtPnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCk7CisgICAgY2hpbGQtPnJl
bW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCk7CiAKICAgICBjaGlsZC0+c2V0UGFyZW50KDApOwog
ICAgIGNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CkBAIC0xMTU3LDcgKzExNTYsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZUFub255bW91c0JveENoCiAgICAgcGFyZW50LT5zZXRD
aGlsZHJlbklubGluZShjaGlsZC0+Y2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgUmVuZGVyT2JqZWN0
KiBuZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOwogCi0gICAgUmVuZGVyRmxvd1Ro
cmVhZCogY2hpbGRGbG93VGhyZWFkID0gY2hpbGQtPmVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQo
KTsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBjaGlsZEZsb3dUaHJlYWQgPSBjaGlsZC0+Zmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIEN1cnJlbnRSZW5kZXJGbG93VGhyZWFkTWFpbnRh
aW5lciBmbG93VGhyZWFkTWFpbnRhaW5lcihjaGlsZEZsb3dUaHJlYWQpOwogICAgIAogICAgIFJl
bmRlckJsb2NrKiBhbm9uQmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudC0+Y2hpbGRyZW4oKS0+
cmVtb3ZlQ2hpbGROb2RlKHBhcmVudCwgY2hpbGQsIGNoaWxkLT5oYXNMYXllcigpKSk7CkBAIC0x
NDI4LDEyICsxNDI3LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBleGNsdXNpb25JbmZvUmVxdWly
ZXMKICNlbmRpZgogfQogCi1ib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVz
aW9uc0xvZ2ljYWxTaXplKCkKK2Jvb2wgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNs
dXNpb25zTG9naWNhbFNpemUoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKICNpZiBF
TkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSAmJiAh
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkpCisgICAgaWYgKCFmbG93VGhyZWFkICYmICFleGNs
dXNpb25TaGFwZUluc2lkZUluZm8oKSkKICNlbHNlCi0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJl
YWQoKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQpCiAjZW5kaWYKICAgICAgICAgcmV0dXJuIGV4Y2x1
c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOwogCkBAIC0xNDUxLDcgKzE0NTAsNyBAQCBi
b29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzCiAKICAgICAvLyBTZXQgb3Vy
IHN0YXJ0IGFuZCBlbmQgcmVnaW9ucy4gTm8gcmVnaW9ucyBhYm92ZSBvciBiZWxvdyB1cyB3aWxs
IGJlIGNvbnNpZGVyZWQgYnkgb3VyIGNoaWxkcmVuLiBUaGV5IGFyZQogICAgIC8vIGVmZmVjdGl2
ZWx5IGNsYW1wZWQgdG8gb3VyIHJlZ2lvbiByYW5nZS4KLSAgICBjb21wdXRlUmVnaW9uUmFuZ2VG
b3JCbG9jaygpOworICAgIGNvbXB1dGVSZWdpb25SYW5nZUZvckJsb2NrKGZsb3dUaHJlYWQpOwog
CiAgICAgc2V0TG9naWNhbEhlaWdodChvbGRIZWlnaHQpOwogICAgIHNldExvZ2ljYWxUb3Aob2xk
VG9wKTsKQEAgLTE0NzAsMTAgKzE0NjksMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUV4
Y2x1c2lvblNoYXBlUwogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWdp
b25SYW5nZUZvckJsb2NrKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWdpb25SYW5nZUZv
ckJsb2NrKFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7Ci0gICAgaWYgKGluUmVuZGVy
Rmxvd1RocmVhZCgpKQotICAgICAgICBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPnNldFJl
Z2lvblJhbmdlRm9yQm94KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSk7
CisgICAgaWYgKGZsb3dUaHJlYWQpCisgICAgICAgIGZsb3dUaHJlYWQtPnNldFJlZ2lvblJhbmdl
Rm9yQm94KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSk7CiB9CiAKIGJv
b2wgUmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCkKQEAgLTE1
NTAsMTMgKzE1NDksMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eQogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBMYXlvdXRTdGF0
ZU1haW50YWluZXIgc3RhdGVQdXNoZXIocmVuZGVyVmlldywgdGhpcywgbG9jYXRpb25PZmZzZXQo
KSwgaGFzQ29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBz
dHlsZVRvVXNlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpLCBwYWdlTG9naWNhbEhlaWdo
dCwgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkLCBjb2x1bW5JbmZvKCkpOwogCi0gICAgaWYgKGlu
UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhz
IGNhbiBmb3JjZSB1cyB0byByZWxheW91dCBvdXIgY2hpbGRyZW4uCi0gICAgICAgIGlmIChsb2dp
Y2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKCkpCi0gICAgICAgICAgICByZWxheW91dENoaWxkcmVu
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNMb2dp
Y2FsU2l6ZSgpKQorICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhzIGNhbiBmb3JjZSB1cyB0
byByZWxheW91dCBvdXIgY2hpbGRyZW4uCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAobG9naWNhbFdpZHRoQ2hh
bmdlZEluUmVnaW9ucyhmbG93VGhyZWFkKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRy
dWU7CisgICAgaWYgKHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9naWNhbFNpemUoZmxvd1Ro
cmVhZCkpCiAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCiAgICAgLy8gV2UgdXNl
IGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90dG9tUG9zLCBhbmQgbWF4
Qm90dG9tTmVnLCB0byB0cmFjawpAQCAtMTYxOSw3ICsxNjE2LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMo
cmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CiAKLSAgICBjb21wdXRlUmVnaW9uUmFuZ2VG
b3JCbG9jaygpOworICAgIGNvbXB1dGVSZWdpb25SYW5nZUZvckJsb2NrKGZsb3dUaHJlYWQpOwog
CiAgICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVubGVzcyB3ZSdyZSBtdWx0aS1j
b2x1bW4sIHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxkIG92ZXJmbG93IGlzIGNsaXBw
ZWQgYW55d2F5KS4KICAgICBjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKQEAg
LTE3NDIsNyArMTczOSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhMYXlv
dXQKICAgICBhZGRWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZSgpOwogCiAgICAgaWYgKGlzUmVuZGVy
Rmxvd1RocmVhZCgpKQotICAgICAgICBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPmNvbXB1
dGVPdmVyZmxvd1N0YXRlRm9yUmVnaW9ucyhvbGRDbGllbnRBZnRlckVkZ2UpOworICAgICAgICB0
b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmNvbXB1dGVPdmVyZmxvd1N0YXRlRm9yUmVnaW9ucyhv
bGRDbGllbnRBZnRlckVkZ2UpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zy
b21CbG9ja0NoaWxkcmVuKCkKQEAgLTIzNDEsNyArMjMzOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmRldGVybWluZUxvZ2ljYWxMZWZ0UG8KICAgICAgICAgCiAgICAgLy8gU29tZSBvYmplY3RzIChl
LmcuLCB0YWJsZXMsIGhvcml6b250YWwgcnVsZXMsIG92ZXJmbG93OmF1dG8gYmxvY2tzKSBhdm9p
ZCBmbG9hdHMuICBUaGV5IG5lZWQKICAgICAvLyB0byBzaGlmdCBvdmVyIGFzIG5lY2Vzc2FyeSB0
byBkb2RnZSBhbnkgZmxvYXRzIHRoYXQgbWlnaHQgZ2V0IGluIHRoZSB3YXkuCi0gICAgaWYgKGNo
aWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjb250YWluc0Zsb2F0cygpICYmICFpblJlbmRlckZsb3dU
aHJlYWQoKSkKKyAgICBpZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNvbnRhaW5zRmxvYXRz
KCkgJiYgIWZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgbmV3UG9zaXRpb24g
Kz0gY29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoY2hpbGQs
IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpKTsKIAogICAgIHNldExvZ2ljYWxMZWZ0Rm9yQ2hp
bGQoY2hpbGQsIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG5ld1Bvc2l0aW9u
IDogdG90YWxBdmFpbGFibGVMb2dpY2FsV2lkdGggLSBuZXdQb3NpdGlvbiAtIGxvZ2ljYWxXaWR0
aEZvckNoaWxkKGNoaWxkKSwgQXBwbHlMYXlvdXREZWx0YSk7CkBAIC00MDA1LDYgKzQwMDIsOCBA
QCBMYXlvdXRQb2ludCBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxMCiAKICAgICBMYXlvdXRV
bml0IGZsb2F0TG9naWNhbExlZnQ7CiAKKyAgICBib29sIGluc2lkZUZsb3dUaHJlYWQgPSBmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisKICAgICBpZiAoY2hpbGRCb3gtPnN0eWxlKCktPmZs
b2F0aW5nKCkgPT0gTGVmdEZsb2F0KSB7CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWlu
aW5nTGVmdCA9IDE7CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWluaW5nUmlnaHQgPSAx
OwpAQCAtNDAxMiw3ICs0MDExLDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmNvbXB1dGVM
b2dpY2FsTAogICAgICAgICB3aGlsZSAobG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2Fs
VG9wT2Zmc2V0LCBsb2dpY2FsUmlnaHRPZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nUmln
aHQpIC0gZmxvYXRMb2dpY2FsTGVmdCA8IGZsb2F0TG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAg
ICBsb2dpY2FsVG9wT2Zmc2V0ICs9IG1pbihoZWlnaHRSZW1haW5pbmdMZWZ0LCBoZWlnaHRSZW1h
aW5pbmdSaWdodCk7CiAgICAgICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRP
ZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBmYWxzZSwg
JmhlaWdodFJlbWFpbmluZ0xlZnQpOwotICAgICAgICAgICAgaWYgKGluUmVuZGVyRmxvd1RocmVh
ZCgpKSB7CisgICAgICAgICAgICBpZiAoaW5zaWRlRmxvd1RocmVhZCkgewogICAgICAgICAgICAg
ICAgIC8vIEhhdmUgdG8gcmUtZXZhbHVhdGUgYWxsIG9mIG91ciBvZmZzZXRzLCBzaW5jZSB0aGV5
IG1heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ID0g
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3Rh
bnQgcGFydCBvZiByaWdodCBvZmZzZXQuCiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRPZmZz
ZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENv
bnN0YW50IHBhcnQgb2YgbGVmdCBvZmZzZXQuCkBAIC00MDI3LDcgKzQwMjYsNyBAQCBMYXlvdXRQ
b2ludCBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxMCiAgICAgICAgIHdoaWxlIChmbG9hdExv
Z2ljYWxMZWZ0IC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BPZmZzZXQsIGxv
Z2ljYWxMZWZ0T2Zmc2V0LCBmYWxzZSwgJmhlaWdodFJlbWFpbmluZ0xlZnQpIDwgZmxvYXRMb2dp
Y2FsV2lkdGgpIHsKICAgICAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgKz0gbWluKGhlaWdodFJl
bWFpbmluZ0xlZnQsIGhlaWdodFJlbWFpbmluZ1JpZ2h0KTsKICAgICAgICAgICAgIGZsb2F0TG9n
aWNhbExlZnQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3BPZmZzZXQsIGxv
Z2ljYWxSaWdodE9mZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCk7Ci0gICAgICAg
ICAgICBpZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgICAgIGlmIChpbnNpZGVG
bG93VGhyZWFkKSB7CiAgICAgICAgICAgICAgICAgLy8gSGF2ZSB0byByZS1ldmFsdWF0ZSBhbGwg
b2Ygb3VyIG9mZnNldHMsIHNpbmNlIHRoZXkgbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAg
ICAgICBsb2dpY2FsUmlnaHRPZmZzZXQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KGxv
Z2ljYWxUb3BPZmZzZXQpOyAvLyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4KICAgICAg
ICAgICAgICAgICBsb2dpY2FsTGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiBsZWZ0IG9mZnNldC4KQEAg
LTQyOTUsNyArNDI5NCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnRleHRJbmRlbnRPZmZz
ZXQKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChS
ZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RQYWdlKSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSBzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xl
ZnQoKSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGlmICghaW5SZW5kZXJGbG93
VGhyZWFkKCkpCisgICAgaWYgKCFyZWdpb24pCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9m
ZnNldDsKICAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVn
aW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKICAgICByZXR1cm4gbG9naWNh
bExlZnRPZmZzZXQgKyAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJveFJlY3QueCgpIDog
Ym94UmVjdC55KCkpOwpAQCAtNDMwNSw3ICs0MzA0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6bG9naWNhbFJpZ2h0T2ZmcwogewogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0
ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBsb2dpY2FsUmln
aHRPZmZzZXQgKz0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgaWYgKCFpblJlbmRlckZs
b3dUaHJlYWQoKSkKKyAgICBpZiAoIXJlZ2lvbikKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxSaWdo
dE9mZnNldDsKICAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24o
cmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKTsKICAgICByZXR1cm4gbG9n
aWNhbFJpZ2h0T2Zmc2V0IC0gKGxvZ2ljYWxXaWR0aCgpIC0gKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBib3hSZWN0Lm1heFgoKSA6IGJveFJlY3QubWF4WSgpKSk7CkBAIC03MTk1LDEyICs3
MTk0LDEzIEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc05leHRQYWdlKExheW91dFVuaXQKIHsKICAg
ICBBU1NFUlQodmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
aXNQYWdpbmF0ZWQoKSk7CiAKLSAgICBpZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7
CisgICAgaWYgKCFmbG93VGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUHJpbnRpbmcg
YW5kIG11bHRpLWNvbHVtbiBib3RoIG1ha2UgbmV3IHBhZ2VzIHRvIGFjY29tbW9kYXRlIGNvbnRl
bnQuCiAKICAgICAvLyBTZWUgaWYgd2UncmUgaW4gdGhlIGxhc3QgcmVnaW9uLgogICAgIExheW91
dFVuaXQgcGFnZU9mZnNldCA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxv
Z2ljYWxPZmZzZXQ7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBlbmNsb3NpbmdSZW5kZXJG
bG93VGhyZWFkKCktPnJlZ2lvbkF0QmxvY2tPZmZzZXQocGFnZU9mZnNldCwgdGhpcyk7CisgICAg
UmVuZGVyUmVnaW9uKiByZWdpb24gPSBmbG93VGhyZWFkLT5yZWdpb25BdEJsb2NrT2Zmc2V0KHBh
Z2VPZmZzZXQsIHRoaXMpOwogICAgIGlmICghcmVnaW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKHJlZ2lvbi0+aXNMYXN0UmVnaW9uKCkpCkBAIC03MjQ2LDcgKzcyNDYsOCBAQCBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrCiAgICAgLy8gRklYTUU6IEFk
ZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAg
IGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5h
dGluZ0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJy
ZWFrcyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJ
WE1FOiBPbmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KLSAgICBi
b29sIGNoZWNrUmVnaW9uQnJlYWtzID0gaW5SZW5kZXJGbG93VGhyZWFkKCk7CisgICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAg
ICBib29sIGNoZWNrUmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5pc1Jl
bmRlck5hbWVkRmxvd1RocmVhZCgpOwogICAgIGJvb2wgY2hlY2tCZWZvcmVBbHdheXMgPSAoY2hl
Y2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVMpIHx8IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVh
a0JlZm9yZSgpID09IFBCQUxXQVlTKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAo
Y2hlY2tSZWdpb25CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnJlZ2lvbkJyZWFrQmVmb3JlKCkg
PT0gUEJBTFdBWVMpOwogICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cyAmJiBpbk5vcm1hbEZsb3co
Y2hpbGQpICYmIGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkp
KSB7CkBAIC03MjU0LDcgKzcyNTUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUJl
Zm9yZUJyZWFrCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZvcmNlZENv
bHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNrUmVnaW9u
QnJlYWtzKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9
IDA7Ci0gICAgICAgICAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5hZGRGb3Jj
ZWRSZWdpb25CcmVhayhvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBsb2dpY2Fs
T2Zmc2V0LCBjaGlsZCwgdHJ1ZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCisgICAgICAgICAg
ICBpZiAoZmxvd1RocmVhZC0+YWRkRm9yY2VkUmVnaW9uQnJlYWsob2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCwgY2hpbGQsIHRydWUsICZvZmZzZXRCcmVh
a0FkanVzdG1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgb2Zm
c2V0QnJlYWtBZGp1c3RtZW50OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXh0UGFnZUxv
Z2ljYWxUb3AobG9naWNhbE9mZnNldCwgSW5jbHVkZVBhZ2VCb3VuZGFyeSk7CkBAIC03MjY3LDcg
KzcyNjgsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWsoCiAgICAg
Ly8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHBy
aW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRl
KCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFj
aGVja0NvbHVtbkJyZWFrcyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxI
ZWlnaHQ7IC8vIEZJWE1FOiBPbmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sg
dGhpcy4KLSAgICBib29sIGNoZWNrUmVnaW9uQnJlYWtzID0gaW5SZW5kZXJGbG93VGhyZWFkKCk7
CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKTsKKyAgICBib29sIGNoZWNrUmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93
VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpOwogICAgIGJvb2wgY2hlY2tBZnRlckFs
d2F5cyA9IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtB
ZnRlcigpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgp
LT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cmVnaW9uQnJlYWtB
ZnRlcigpID09IFBCQUxXQVlTKTsKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cyAmJiBpbk5vcm1h
bEZsb3coY2hpbGQpICYmIGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIEluY2x1ZGVQYWdlQm91
bmRhcnkpKSB7CkBAIC03MjgwLDcgKzcyODIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjph
cHBseUFmdGVyQnJlYWsoCiAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFkZEZv
cmNlZENvbHVtbkJyZWFrKGNoaWxkLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgaWYgKGNoZWNr
UmVnaW9uQnJlYWtzKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFrQWRqdXN0
bWVudCA9IDA7Ci0gICAgICAgICAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5h
ZGRGb3JjZWRSZWdpb25CcmVhayhvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgKyBs
b2dpY2FsT2Zmc2V0ICsgbWFyZ2luT2Zmc2V0LCBjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0Fk
anVzdG1lbnQpKQorICAgICAgICAgICAgaWYgKGZsb3dUaHJlYWQtPmFkZEZvcmNlZFJlZ2lvbkJy
ZWFrKG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBt
YXJnaW5PZmZzZXQsIGNoaWxkLCBmYWxzZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5leHRQYWdlTG9naWNhbFRvcChsb2dpY2FsT2Zm
c2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KTsKQEAgLTcyOTUsMjEgKzcyOTcsMjMgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9jazo6cGFnZUxvZ2ljYWxUb3BGbwogICAgIExheW91dFVuaXQgYmxvY2tM
b2dpY2FsVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlbmRlclZpZXctPmxheW91
dFN0YXRlKCktPm1fbGF5b3V0T2Zmc2V0LmhlaWdodCgpIDogcmVuZGVyVmlldy0+bGF5b3V0U3Rh
dGUoKS0+bV9sYXlvdXRPZmZzZXQud2lkdGgoKTsKIAogICAgIExheW91dFVuaXQgY3VtdWxhdGl2
ZU9mZnNldCA9IG9mZnNldCArIGJsb2NrTG9naWNhbFRvcDsKLSAgICBpZiAoIWluUmVuZGVyRmxv
d1RocmVhZCgpKSB7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoIWZsb3dUaHJlYWQpIHsKICAgICAgICAgTGF5
b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IHJlbmRlclZpZXctPmxheW91dFN0YXRlKCktPnBh
Z2VMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGN1bXVsYXRpdmVPZmZzZXQgLSByb3Vu
ZFRvSW50KGN1bXVsYXRpdmVPZmZzZXQgLSBmaXJzdFBhZ2VMb2dpY2FsVG9wKSAlIHJvdW5kVG9J
bnQocGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICByZXR1cm4gZW5jbG9zaW5nUmVuZGVy
Rmxvd1RocmVhZCgpLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChjdW11bGF0aXZlT2Zmc2V0KTsK
KyAgICByZXR1cm4gZmxvd1RocmVhZC0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoY3VtdWxhdGl2
ZU9mZnNldCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OnBhZ2VMb2dpY2FsSGVpZ2h0
Rm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHJl
bmRlclZpZXcgPSB2aWV3KCk7Ci0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygp
OworICAgIGlmICghZmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuIHJlbmRlclZpZXctPmxheW91
dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0ICsgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKKyAgICByZXR1cm4gZmxvd1RocmVhZC0+cGFn
ZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0ICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6cGFnZVJlbWFpbmluZ0xv
Z2ljYWxIZWlnaHRGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUg
cGFnZUJvdW5kYXJ5UnVsZSkgY29uc3QKQEAgLTczMTcsNyArNzMyMSw4IEBAIExheW91dFVuaXQg
UmVuZGVyQmxvY2s6OnBhZ2VSZW1haW5pbmdMb2cKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gdmlldygpOwogICAgIG9mZnNldCArPSBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdl
KCk7CiAgICAgCi0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkgeworICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAg
aWYgKCFmbG93VGhyZWFkKSB7CiAgICAgICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSByZW5kZXJWaWV3LT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0OwogICAgICAg
ICBMYXlvdXRVbml0IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0IC0gaW50TW9k
KG9mZnNldCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgICAgICBpZiAocGFnZUJvdW5kYXJ5UnVs
ZSA9PSBJbmNsdWRlUGFnZUJvdW5kYXJ5KSB7CkBAIC03MzI4LDE0ICs3MzMzLDE1IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6OnBhZ2VSZW1haW5pbmdMb2cKICAgICAgICAgcmV0dXJuIHJlbWFp
bmluZ0hlaWdodDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGVuY2xvc2luZ1JlbmRlckZsb3dU
aHJlYWQoKS0+cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0LCBwYWdl
Qm91bmRhcnlSdWxlKTsKKyAgICByZXR1cm4gZmxvd1RocmVhZC0+cGFnZVJlbWFpbmluZ0xvZ2lj
YWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0LCBwYWdlQm91bmRhcnlSdWxlKTsKIH0KIAogTGF5b3V0
VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBib29sIGluY2x1ZGVNYXJnaW5zKQogewog
ICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFn
aW5hdGluZ0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVt
bkJyZWFrcyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0g
ICAgYm9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGluUmVuZGVyRmxvd1RocmVhZCgpOworICAgIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7
CisgICAgYm9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+
aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKTsKICAgICBib29sIGlzVW5zcGxpdHRhYmxlID0gY2hp
bGQtPmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAm
JiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtJbnNpZGUoKSA9PSBQQkFWT0lEKQogICAgICAg
ICB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtJbnNpZGUo
KSA9PSBQQkFWT0lEKQogICAgICAgICB8fCAoY2hlY2tSZWdpb25CcmVha3MgJiYgY2hpbGQtPnN0
eWxlKCktPnJlZ2lvbkJyZWFrSW5zaWRlKCkgPT0gUEJBVk9JRCk7CkBAIC03MzQ2LDcgKzczNTIs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0CiAgICAgaWYgKGxh
eW91dFN0YXRlLT5tX2NvbHVtbkluZm8pCiAgICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbklu
Zm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQoY2hpbGRMb2dpY2FsSGVpZ2h0KTsKICAgICBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQo
bG9naWNhbE9mZnNldCk7Ci0gICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxvZ2ljYWxIZWlnaHQgPSAh
aW5SZW5kZXJGbG93VGhyZWFkKCkgfHwgZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpLT5yZWdp
b25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0KCk7CisgICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxv
Z2ljYWxIZWlnaHQgPSAhZmxvd1RocmVhZCB8fCBmbG93VGhyZWFkLT5yZWdpb25zSGF2ZVVuaWZv
cm1Mb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCB8fCAoaGFzVW5p
Zm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGNoaWxkTG9naWNhbEhlaWdodCA+IHBhZ2VMb2dpY2Fs
SGVpZ2h0KQogICAgICAgICB8fCAhaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCkpCiAgICAgICAg
IHJldHVybiBsb2dpY2FsT2Zmc2V0OwpAQCAtNzM3NCw3ICs3MzgwLDcgQEAgYm9vbCBSZW5kZXJC
bG9jazo6cHVzaFRvTmV4dFBhZ2VXaXRoTWluaQogICAgIHJldHVybiAhY2hlY2tSZWdpb247CiB9
CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9v
dElubGluZUJveCogbGluZUJveCwgTGF5b3V0VW5pdCYgZGVsdGEpCit2b2lkIFJlbmRlckJsb2Nr
OjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gs
IExheW91dFVuaXQmIGRlbHRhLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogewogICAg
IC8vIEZJWE1FOiBGb3Igbm93IHdlIHBhZ2luYXRlIHVzaW5nIGxpbmUgb3ZlcmZsb3cuICBUaGlz
IGVuc3VyZXMgdGhhdCBsaW5lcyBkb24ndCBvdmVybGFwIGF0IGFsbCB3aGVuIHdlCiAgICAgLy8g
cHV0IGEgc3RydXQgYmV0d2VlbiB0aGVtIGZvciBwYWdpbmF0aW9uIHB1cnBvc2VzLiAgSG93ZXZl
ciwgdGhpcyByZWFsbHkgaXNuJ3QgdGhlIGRlc2lyZWQgcmVuZGVyaW5nLCBzaW5jZQpAQCAtNzQw
Niw3ICs3NDEyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUAog
ICAgIGxpbmVCb3gtPnNldFBhZ2luYXRpb25TdHJ1dCgwKTsKICAgICBsaW5lQm94LT5zZXRJc0Zp
cnN0QWZ0ZXJQYWdlQnJlYWsoZmFsc2UpOwogICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsT2Zmc2V0KTsKLSAgICBib29s
IGhhc1VuaWZvcm1QYWdlTG9naWNhbEhlaWdodCA9ICFpblJlbmRlckZsb3dUaHJlYWQoKSB8fCBl
bmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCktPnJlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWln
aHQoKTsKKyAgICBib29sIGhhc1VuaWZvcm1QYWdlTG9naWNhbEhlaWdodCA9ICFmbG93VGhyZWFk
IHx8IGZsb3dUaHJlYWQtPnJlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQoKTsKICAgICAv
LyBJZiBsaW5lSGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiBwYWdlTG9naWNhbEhlaWdodCwgYnV0IGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdy5oZWlnaHQoKSBzdGlsbCBmaXRzLCB3ZSBhcmUKICAgICAvLyBz
dGlsbCBnb2luZyB0byBhZGQgYSBzdHJ1dCwgc28gdGhhdCB0aGUgdmlzaWJsZSBvdmVyZmxvdyBm
aXRzIG9uIGEgc2luZ2xlIHBhZ2UuCiAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCB8fCAoaGFz
VW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5oZWlnaHQo
KSA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQpAQCAtNzUwNCw5ICs3NTEwLDkgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0QmxvY2tDaGlsZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJv
b2wgUmVuZGVyQmxvY2s6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKFJvb3RJbmxp
bmVCb3gqIHJvb3RCb3gsIExheW91dFVuaXQgbGluZURlbHRhKSBjb25zdAorYm9vbCBSZW5kZXJC
bG9jazo6bGluZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNoYW5nZWQoUm9vdElubGluZUJveCogcm9v
dEJveCwgTGF5b3V0VW5pdCBsaW5lRGVsdGEsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQp
IGNvbnN0CiB7Ci0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICBpZiAoIWZsb3dU
aHJlYWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlbmRlclJlZ2lvbiogY3VycmVu
dFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQocm9vdEJveC0+bGluZVRvcFdpdGhMZWFkaW5n
KCkgKyBsaW5lRGVsdGEpOwpAQCAtNzUzNSw3ICs3NTQxLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6b2Zmc2V0RnJvbUxvZ2ljYQogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBzbG93ZXIg
cGF0aCB0aGF0IGRvZXNuJ3QgdXNlIGxheW91dCBzdGF0ZSBhbmQgcmVsaWVzIG9uIGdldHRpbmcg
eW91ciBsb2dpY2FsIHRvcCBpbnNpZGUgdGhlIGVuY2xvc2luZyBmbG93IHRocmVhZC4gSXQgZG9l
c24ndAogICAgIC8vIHdvcmsgd2l0aCBjb2x1bW5zIG9yIHBhZ2VzIGN1cnJlbnRseSwgYnV0IGl0
IHNob3VsZCBvbmNlIHRoZXkgaGF2ZSBiZWVuIHN3aXRjaGVkIG92ZXIgdG8gdXNpbmcgZmxvdyB0
aHJlYWRzLgotICAgIGlmICghaW5SZW5kZXJGbG93VGhyZWFkKCkpCisgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAo
IWZsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgY29uc3QgUmVuZGVyQmxvY2sq
IGN1cnJlbnRCbG9jayA9IHRoaXM7CkBAIC03NTY3LDEwICs3NTc0LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxvZ2ljYQogCiBSZW5kZXJSZWdpb24qIFJlbmRlckJsb2Nr
OjpyZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgp
OworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNWYWxpZFJl
Z2lvbkluZm8oKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTc1ODcsMjggKzc1OTEsMjYgQEAg
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU3RhdGljSW5saW5lUG9zaQogCiB2b2lkIFJlbmRlckJs
b2NrOjpzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExh
eW91dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pCiB7Ci0gICAg
aWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKSB7CisgICAgaWYgKGZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSkgewogICAgICAgICAvLyBTaGlmdCB0aGUgaW5saW5lIHBvc2l0aW9uIHRvIGV4Y2x1
ZGUgdGhlIHJlZ2lvbiBvZmZzZXQuCiAgICAgICAgIGlubGluZVBvc2l0aW9uICs9IHN0YXJ0T2Zm
c2V0Rm9yQ29udGVudCgpIC0gc3RhcnRPZmZzZXRGb3JDb250ZW50KGJsb2NrT2Zmc2V0KTsKICAg
ICB9CiAgICAgY2hpbGQtPmxheWVyKCktPnNldFN0YXRpY0lubGluZVBvc2l0aW9uKGlubGluZVBv
c2l0aW9uKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVn
aW9ucygpIGNvbnN0Citib29sIFJlbmRlckJsb2NrOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdp
b25zKFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpIGNvbnN0CiB7Ci0gICAgaWYgKCFpblJl
bmRlckZsb3dUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7CiAg
ICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNWYWxpZFJlZ2lvbkluZm8oKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICByZXR1
cm4gZmxvd1RocmVhZC0+bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyh0aGlzLCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkpOwogfQogCiBSZW5kZXJSZWdpb24qIFJlbmRlckJs
b2NrOjpjbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25z
dAogewotICAgIEFTU0VSVChpc1JlbmRlclZpZXcoKSB8fCAocmVnaW9uICYmIGluUmVuZGVyRmxv
d1RocmVhZCgpKSk7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKKworICAgIEFTU0VSVChpc1JlbmRlclZpZXcoKSB8fCAocmVn
aW9uICYmIGZsb3dUaHJlYWQpKTsKICAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJl
dHVybiByZWdpb247CiAKQEAgLTc2MTgsNyArNzYyMCw3IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVy
QmxvY2s6OmNsYW1wVG9TdGFydEEKICAgICAvLyB0aGV5IG92ZXJmbG93IGludG8sIHdoaWNoIG1h
a2VzIG5vIHNlbnNlIHdoZW4gdGhpcyBibG9jayBkb2Vzbid0IGV4aXN0IGluIHxyZWdpb258IGF0
IGFsbC4KICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uOwogICAgIFJlbmRlclJlZ2lvbiog
ZW5kUmVnaW9uOwotICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+Z2V0UmVnaW9uUmFu
Z2VGb3JCb3godGhpcywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CisgICAgZmxvd1RocmVhZC0+
Z2V0UmVnaW9uUmFuZ2VGb3JCb3godGhpcywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CiAgICAg
CiAgICAgaWYgKHN0YXJ0UmVnaW9uICYmIHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRD
b250ZW50KCkgPCBzdGFydFJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkp
CiAgICAgICAgIHJldHVybiBzdGFydFJlZ2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTU4LDggKzU1OCw4IEBAIHBy
b3RlY3RlZDoKICAgICB9CiAjZW5kaWYKIAotICAgIGJvb2wgdXBkYXRlUmVnaW9uc0FuZEV4Y2x1
c2lvbnNMb2dpY2FsU2l6ZSgpOwotICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2so
KTsKKyAgICBib29sIHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9naWNhbFNpemUoUmVuZGVy
Rmxvd1RocmVhZCopOworICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2soUmVuZGVy
Rmxvd1RocmVhZCopOwogCiAgICAgdm9pZCB1cGRhdGVCbG9ja0NoaWxkRGlydHlCaXRzQmVmb3Jl
TGF5b3V0KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgUmVuZGVyQm94Kik7CiAKQEAgLTEwODEsNyAr
MTA4MSw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIHB1c2hUb05leHRQYWdlV2l0aE1pbmltdW1M
b2dpY2FsSGVpZ2h0KExheW91dFVuaXQmIGFkanVzdG1lbnQsIExheW91dFVuaXQgbG9naWNhbE9m
ZnNldCwgTGF5b3V0VW5pdCBtaW5pbXVtTG9naWNhbEhlaWdodCkgY29uc3Q7CiAKICAgICBMYXlv
dXRVbml0IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91
dFVuaXQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYg
dGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBh
Z2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgotICAgIHZvaWQgYWRq
dXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgTGF5b3V0VW5pdCYg
ZGVsdGFPZmZzZXQpOyAvLyBDb21wdXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEg
bGluZSBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhl
IGN1cnJlbnQgcGFnZS4KKyAgICB2b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24o
Um9vdElubGluZUJveCosIExheW91dFVuaXQmIGRlbHRhT2Zmc2V0LCBSZW5kZXJGbG93VGhyZWFk
Kik7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBw
YWdlLgogICAgIExheW91dFVuaXQgYWRqdXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24oTGF5b3V0
VW5pdCBsb2dpY2FsVG9wQWZ0ZXJDbGVhciwgTGF5b3V0VW5pdCBlc3RpbWF0ZVdpdGhvdXRQYWdp
bmF0aW9uLCBSZW5kZXJCb3gqIGNoaWxkLCBib29sIGF0QmVmb3JlU2lkZU9mQmxvY2spOwogCiAg
ICAgLy8gQWRqdXN0IGZyb20gcGFpbnRpbmcgb2Zmc2V0cyB0byB0aGUgbG9jYWwgY29vcmRzIG9m
IHRoaXMgcmVuZGVyZXIKQEAgLTEwOTAsOSArMTA5MCw5IEBAIHByb3RlY3RlZDoKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB0ZXN0IGEgbGluZSBib3ggdGhhdCBoYXMgbW92ZWQg
aW4gdGhlIGJsb2NrIGRpcmVjdGlvbiB0byBzZWUgaWYgaXQgaGFzIGVuZGVkIHVwIGluIGEgbmV3
CiAgICAgLy8gcmVnaW9uL3BhZ2UvY29sdW1uIHRoYXQgaGFzIGEgZGlmZmVyZW50IGF2YWlsYWJs
ZSBsaW5lIHdpZHRoIHRoYW4gdGhlIG9sZCBvbmUuIFVzZWQgdG8ga25vdyB3aGVuIHlvdSBoYXZl
IHRvIGRpcnR5IGEKICAgICAvLyBsaW5lLCBpLmUuLCB0aGF0IGl0IGNhbid0IGJlIHJlLXVzZWQu
Ci0gICAgYm9vbCBsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChSb290SW5saW5lQm94
KiwgTGF5b3V0VW5pdCBsaW5lRGVsdGEgPSAwKSBjb25zdDsKKyAgICBib29sIGxpbmVXaWR0aEZv
clBhZ2luYXRlZExpbmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0IGxpbmVEZWx0
YSwgUmVuZGVyRmxvd1RocmVhZCopIGNvbnN0OwogCi0gICAgYm9vbCBsb2dpY2FsV2lkdGhDaGFu
Z2VkSW5SZWdpb25zKCkgY29uc3Q7CisgICAgYm9vbCBsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdp
b25zKFJlbmRlckZsb3dUaHJlYWQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0NvbHVtbnMoaW50IGRlc2lyZWRDb2x1bW5Db3VudCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZp
c2lvbiAxNDQ0ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShjCiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIFJl
bmRlckJsb2NrOjpsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdAogewogICAg
IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygpLT5sYXlv
dXRTdGF0ZSgpLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBpZiAoIXNoYXBlSW5z
aWRlSW5mbyAmJiBpblJlbmRlckZsb3dUaHJlYWQoKSkgeworICAgIGlmICghc2hhcGVJbnNpZGVJ
bmZvICYmIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgewogICAgICAgICBMYXlvdXRVbml0
IG9mZnNldCA9IGxvZ2ljYWxIZWlnaHQoKSArIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKHRoaXMsIGZh
bHNlKTsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0
KG9mZnNldCk7CiAgICAgICAgIHJldHVybiByZWdpb24gPyByZWdpb24tPmV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpIDogMDsKQEAgLTEzNTcsNyArMTM1Nyw3IEBAIFJvb3RJbmxpbmVCb3gqIFJl
bmRlckJsb2NrOjpjcmVhdGVMaW5lQm8KIC8vIGR1cmluZyBhbiBlbnRpcmUgbGluZWJveCB0cmVl
IGxheW91dCBwYXNzIChha2EgbGF5b3V0SW5saW5lQ2hpbGRyZW4pLgogY2xhc3MgTGluZUxheW91
dFN0YXRlIHsKIHB1YmxpYzoKLSAgICBMaW5lTGF5b3V0U3RhdGUoYm9vbCBmdWxsTGF5b3V0LCBM
YXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxC
b3R0b20pCisgICAgTGluZUxheW91dFN0YXRlKGJvb2wgZnVsbExheW91dCwgTGF5b3V0VW5pdCYg
cmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tLCBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogICAgICAgICA6IG1fbGFzdEZsb2F0KDApCiAgICAg
ICAgICwgbV9lbmRMaW5lKDApCiAgICAgICAgICwgbV9mbG9hdEluZGV4KDApCkBAIC0xMzY4LDYg
KzEzNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbFRvcChyZXBhaW50
TG9naWNhbFRvcCkKICAgICAgICAgLCBtX3JlcGFpbnRMb2dpY2FsQm90dG9tKHJlcGFpbnRMb2dp
Y2FsQm90dG9tKQogICAgICAgICAsIG1fdXNlc1JlcGFpbnRCb3VuZHMoZmFsc2UpCisgICAgICAg
ICwgbV9mbG93VGhyZWFkKGZsb3dUaHJlYWQpCiAgICAgeyB9CiAKICAgICB2b2lkIG1hcmtGb3JG
dWxsTGF5b3V0KCkgeyBtX2lzRnVsbExheW91dCA9IHRydWU7IH0KQEAgLTE0MTEsNiArMTQxMiw5
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBmbG9hdEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9m
bG9hdEluZGV4OyB9CiAgICAgdm9pZCBzZXRGbG9hdEluZGV4KHVuc2lnbmVkIGZsb2F0SW5kZXgp
IHsgbV9mbG9hdEluZGV4ID0gZmxvYXRJbmRleDsgfQogICAgIAorICAgIFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7IH0KKyAgICB2b2lk
IHNldEZsb3dUaHJlYWQoUmVuZGVyRmxvd1RocmVhZCogdGhyZWFkKSB7IG1fZmxvd1RocmVhZCA9
IHRocmVhZDsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZW5kZXJCbG9jazo6RmxvYXRXaXRo
UmVjdD4gbV9mbG9hdHM7CiAgICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBtX2xhc3RG
bG9hdDsKQEAgLTE0MjgsNiArMTQzMiw4IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCYgbV9y
ZXBhaW50TG9naWNhbEJvdHRvbTsKIAogICAgIGJvb2wgbV91c2VzUmVwYWludEJvdW5kczsKKyAg
ICAKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBtX2Zsb3dUaHJlYWQ7CiB9OwogCiBzdGF0aWMgdm9p
ZCBkZWxldGVMaW5lUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUmVuZGVyQXJl
bmEqIGFyZW5hLCBSb290SW5saW5lQm94KiBzdGFydExpbmUsIFJvb3RJbmxpbmVCb3gqIHN0b3BM
aW5lID0gMCkKQEAgLTE1NzUsNyArMTU4MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1
bnNBbmRGbG9hdHNJblIKICNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCiAgICAgICAgIC8vIEZJ
WE1FOiBCdWcgOTUzNjE6IEl0IGlzIHBvc3NpYmxlIGZvciBhIGxpbmUgdG8gZ3JvdyBiZXlvbmQg
bGluZUhlaWdodCwgaW4gd2hpY2gKICAgICAgICAgLy8gY2FzZSB0aGVzZSBzZWdtZW50cyBtYXkg
YmUgaW5jb3JyZWN0LgotICAgICAgICBpZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAg
IGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKICAgICAgICAg
aWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBs
aW5lVG9wID0gbG9naWNhbEhlaWdodCgpICsgYWJzb2x1dGVMb2dpY2FsVG9wOwpAQCAtMTY0NCw3
ICsxNjUwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUgogCiAg
ICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgewogICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGFkanVzdG1lbnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9z
aXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAg
ICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQs
IGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1
c3RtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExpbmVXaWR0
aCA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCwgbGF5b3V0
U3RhdGUubGluZUluZm8oKS5pc0ZpcnN0TGluZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVCb3gtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oYWRqdXN0bWVudCk7CkBAIC0x
NjYxLDcgKzE2NjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5S
CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3gtPmxpbmVC
b3R0b21XaXRoTGVhZGluZygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmVCb3gtPnNldENvbnRhaW5pbmdSZWdpb24ocmVnaW9uQXRCbG9ja09mZnNldChsaW5lQm94LT5s
aW5lVG9wV2l0aExlYWRpbmcoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE3NzAsMTMgKzE3NzYsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlm
TmVlZGVkKAogICAgICAgICAgICAgICAgIGxpbmUtPmF0dGFjaExpbmUoKTsKICAgICAgICAgICAg
ICAgICBpZiAocGFnaW5hdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlbHRhIC09IGxpbmUt
PnBhZ2luYXRpb25TdHJ1dCgpOwotICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRp
b25Gb3JQYWdpbmF0aW9uKGxpbmUsIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0
TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSwgbGF5b3V0U3RhdGUuZmxvd1Ro
cmVhZCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7
CiAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnVwZGF0ZVJlcGFpbnRSYW5nZUZyb21C
b3gobGluZSwgZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICBsaW5lLT5hZGp1c3RCbG9ja0Rp
cmVjdGlvblBvc2l0aW9uKGRlbHRhKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgICAgIGlmIChsYXlvdXRT
dGF0ZS5mbG93VGhyZWFkKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpbmUtPnNldENvbnRhaW5p
bmdSZWdpb24ocmVnaW9uQXRCbG9ja09mZnNldChsaW5lLT5saW5lVG9wV2l0aExlYWRpbmcoKSkp
OwogICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0
cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7CiAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5k
ZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKQEAgLTE4MTUs
NyArMTgyMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZCgKICAg
ICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93KDAsIGJsb2NrTG9naWNh
bEhlaWdodCwgMSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOwog
ICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3coMCwgYmxvY2tMb2dp
Y2FsSGVpZ2h0LCAxLCBib3R0b21WaXN1YWxPdmVyZmxvdyAtIGJsb2NrTG9naWNhbEhlaWdodCk7
CiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldE92ZXJmbG93RnJvbUxvZ2lj
YWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdywgdHJh
aWxpbmdGbG9hdHNMaW5lQm94LT5saW5lVG9wKCksIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+bGlu
ZUJvdHRvbSgpKTsKLSAgICAgICAgICAgIGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAg
ICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpCiAgICAgICAgICAgICAgICAgdHJh
aWxpbmdGbG9hdHNMaW5lQm94LT5zZXRDb250YWluaW5nUmVnaW9uKHJlZ2lvbkF0QmxvY2tPZmZz
ZXQodHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lVG9wV2l0aExlYWRpbmcoKSkpOwogICAgICAg
ICB9CiAKQEAgLTE4NTcsMTIgKzE4NjMsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZW4oYgogICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCkgJiYgdmlldygpLT5s
YXlvdXRTdGF0ZSgpLT5saW5lR3JpZCgpID09IHRoaXMpCiAgICAgICAgIGxheW91dExpbmVHcmlk
Qm94KCk7CiAKLSAgICBib29sIGNsZWFyTGluZXNGb3JQYWdpbmF0aW9uID0gZmlyc3RMaW5lQm94
KCkgJiYgaW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgIWVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQo
KS0+aGFzUmVnaW9ucygpOworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgYm9vbCBjbGVhckxpbmVzRm9yUGFnaW5hdGlv
biA9IGZpcnN0TGluZUJveCgpICYmIGZsb3dUaHJlYWQgJiYgIWZsb3dUaHJlYWQtPmhhc1JlZ2lv
bnMoKTsKIAogICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNsZWFyIG91dCBvdXIgbGlu
ZSBib3hlcy4KICAgICAvLyBGSVhNRTogSGFuZGxlIHJlc2l6ZSBldmVudHVhbGx5IQogICAgIGJv
b2wgaXNGdWxsTGF5b3V0ID0gIWZpcnN0TGluZUJveCgpIHx8IHNlbGZOZWVkc0xheW91dCgpIHx8
IHJlbGF5b3V0Q2hpbGRyZW4gfHwgY2xlYXJMaW5lc0ZvclBhZ2luYXRpb247Ci0gICAgTGluZUxh
eW91dFN0YXRlIGxheW91dFN0YXRlKGlzRnVsbExheW91dCwgcmVwYWludExvZ2ljYWxUb3AsIHJl
cGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICBMaW5lTGF5b3V0U3RhdGUgbGF5b3V0U3RhdGUoaXNG
dWxsTGF5b3V0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20sIGZsb3dU
aHJlYWQpOwogCiAgICAgaWYgKGlzRnVsbExheW91dCkKICAgICAgICAgbGluZUJveGVzKCktPmRl
bGV0ZUxpbmVCb3hlcyhyZW5kZXJBcmVuYSgpKTsKQEAgLTE5OTcsMTIgKzIwMDQsMTIgQEAgUm9v
dElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgICAgICBzaXplX3QgZmxv
YXRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyICYm
ICFjdXJyLT5pc0RpcnR5KCk7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAg
ICAgICBpZiAocGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVXaWR0aEZvclBh
Z2luYXRlZExpbmVDaGFuZ2VkKGN1cnIpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVXaWR0
aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKGN1cnIsIDAsIGxheW91dFN0YXRlLmZsb3dUaHJlYWQo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgY3Vyci0+bWFya0RpcnR5KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYWdp
bmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFnaW5hdGlvblN0cnV0KCk7Ci0gICAgICAgICAgICAgICAg
YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyLCBwYWdpbmF0aW9uRGVsdGEpOwor
ICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oY3VyciwgcGFn
aW5hdGlvbkRlbHRhLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpOwogICAgICAgICAgICAgICAg
IGlmIChwYWdpbmF0aW9uRGVsdGEpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5z
RmxvYXRzKCkgfHwgIWxheW91dFN0YXRlLmZsb2F0cygpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiAgRm9yIG5vdyBp
ZiB3ZSBldmVyIHNoaWZ0IGJlY2F1c2Ugb2YgcGFnaW5hdGlvbiBhbmQgZmxvYXRzIGFyZSBwcmVz
ZW50IGp1c3QgZ28gdG8gYSBmdWxsIGxheW91dC4KQEAgLTIwMTMsNyArMjAyMCw3IEBAIFJvb3RJ
bmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAgICAgICAgICAgICAg
bGF5b3V0U3RhdGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChjdXJyLCBwYWdpbmF0aW9uRGVs
dGEpOwogICAgICAgICAgICAgICAgICAgICBjdXJyLT5hZGp1c3RCbG9ja0RpcmVjdGlvblBvc2l0
aW9uKHBhZ2luYXRpb25EZWx0YSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUuZmxvd1RocmVhZCgpKQogICAgICAgICAgICAgICAgICAgICBjdXJyLT5zZXRDb250YWluaW5n
UmVnaW9uKHJlZ2lvbkF0QmxvY2tPZmZzZXQoY3Vyci0+bGluZVRvcFdpdGhMZWFkaW5nKCkpKTsK
ICAgICAgICAgICAgIH0KIApAQCAtMjE0OSw3ICsyMTU2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
Y2hlY2tQYWdpbmF0aW9uQW5kRmxvYQogICAgIExheW91dFVuaXQgbGluZURlbHRhID0gbG9naWNh
bEhlaWdodCgpIC0gbGF5b3V0U3RhdGUuZW5kTGluZUxvZ2ljYWxUb3AoKTsKIAogICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+aXNQYWdpbmF0ZWQoKTsKLSAgICBpZiAocGFnaW5hdGVkICYmIGluUmVuZGVyRmxvd1RocmVh
ZCgpKSB7CisgICAgaWYgKHBhZ2luYXRlZCAmJiBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpIHsK
ICAgICAgICAgLy8gQ2hlY2sgYWxsIGxpbmVzIGZyb20gaGVyZSB0byB0aGUgZW5kLCBhbmQgc2Vl
IGlmIHRoZSBoeXBvdGhldGljYWwgbmV3IHBvc2l0aW9uIGZvciB0aGUgbGluZXMgd2lsbCByZXN1
bHQKICAgICAgICAgLy8gaW4gYSBkaWZmZXJlbnQgYXZhaWxhYmxlIGxpbmUgd2lkdGguCiAgICAg
ICAgIGZvciAoUm9vdElubGluZUJveCogbGluZUJveCA9IGxheW91dFN0YXRlLmVuZExpbmUoKTsg
bGluZUJveDsgbGluZUJveCA9IGxpbmVCb3gtPm5leHRSb290Qm94KCkpIHsKQEAgLTIxNTgsMTAg
KzIxNjUsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6Y2hlY2tQYWdpbmF0aW9uQW5kRmxvYQogICAg
ICAgICAgICAgICAgIC8vIHN0cnV0IHlldC4KICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9s
ZFBhZ2luYXRpb25TdHJ1dCA9IGxpbmVCb3gtPnBhZ2luYXRpb25TdHJ1dCgpOwogICAgICAgICAg
ICAgICAgIGxpbmVEZWx0YSAtPSBvbGRQYWdpbmF0aW9uU3RydXQ7Ci0gICAgICAgICAgICAgICAg
YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBsaW5lRGVsdGEpOworICAg
ICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZUJveCwgbGlu
ZURlbHRhLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpOwogICAgICAgICAgICAgICAgIGxpbmVC
b3gtPnNldFBhZ2luYXRpb25TdHJ1dChvbGRQYWdpbmF0aW9uU3RydXQpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKGxpbmVC
b3gsIGxpbmVEZWx0YSkpCisgICAgICAgICAgICBpZiAobGluZVdpZHRoRm9yUGFnaW5hdGVkTGlu
ZUNoYW5nZWQobGluZUJveCwgbGluZURlbHRhLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ1LDExICsxNDUsMTIgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJl
ZwogCiB2b2lkIFJlbmRlckJveDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvKCkKIHsKLSAgICBp
ZiAoIWluUmVuZGVyRmxvd1RocmVhZCgpIHx8IGlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgIGlm
IChpc1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyRmxv
d1RocmVhZCogZmxvd1RocmVhZCA9IGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKTsKLSAgICBm
bG93VGhyZWFkLT5yZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKHRoaXMpOworICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAg
aWYgKGZsb3dUaHJlYWQpCisgICAgICAgIGZsb3dUaHJlYWQtPnJlbW92ZVJlbmRlckJveFJlZ2lv
bkluZm8odGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp3aWxsQmVEZXN0cm95ZWQoKQpAQCAt
MjI2MywxMSArMjI2NCw4IEBAIFJlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlckJveDo6cmVuZGVy
Qm8KICAgICAvLyBObyBjYWNoZWQgdmFsdWUgd2FzIGZvdW5kLCBzbyB3ZSBoYXZlIHRvIGNvbXB1
dGUgb3VyIGluc2V0cyBpbiB0aGlzIHJlZ2lvbi4KICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBs
aW1pdCB0aGlzIGNvbXB1dGF0aW9uIHRvIG5vcm1hbCBSZW5kZXJCbG9ja3MuIEZ1dHVyZSBwYXRj
aGVzIHdpbGwgZXhwYW5kCiAgICAgLy8gc3VwcG9ydCB0byBjb3ZlciBhbGwgYm94ZXMuCi0gICAg
aWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSB8fCAhY2FuSGF2ZUJveEluZm9JblJlZ2lvbigpIHx8
IGlzUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAg
aWYgKGZsb3dUaHJlYWQtPnN0eWxlKCktPndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+d3JpdGlu
Z01vZGUoKSkKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOworICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSB8fCAhZmxvd1Ro
cmVhZCB8fCAhY2FuSGF2ZUJveEluZm9JblJlZ2lvbigpIHx8IGZsb3dUaHJlYWQtPnN0eWxlKCkt
PndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1ZXM7CkBA
IC0yODIzLDcgKzI4MjEsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2Nr
TG9nCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRp
b25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKIAogICAgIGlmIChjb250YWluaW5nQmxvY2st
PmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKKyAgICAgICAgaWYgKCFmbG93VGhyZWFkKQogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVy
Qm94KGNvbnRhaW5pbmdCbG9jayktPmNsaWVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFpbmluZ0Jsb2NrKTsKQEAg
LTI4MzksNyArMjgzOCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tM
b2cKICAgICAgICAgICAgICAgICAgICAgYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZv
KGNiUmVnaW9uLCBjYlBhZ2VPZmZzZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChyZWdpb24gJiYgZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVh
ZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICB9IGVsc2UgaWYgKHJlZ2lvbiAmJiBmbG93
VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9jay0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBjb250
YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24p
OwogICAgICAgICAgICAgYm94SW5mbyA9IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNvbnRhaW5p
bmdCbG9ja1JlZ2lvbiwgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxvZ2ljYWxU
b3AoKSk7CiAgICAgICAgIH0KQEAgLTI4ODIsNyArMjg4MSw4IEBAIExheW91dFVuaXQgUmVuZGVy
Qm94Ojpjb250YWluaW5nQmxvY2tMb2cKICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5pc0JveCgp
KSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2soY29udGFp
bmluZ0Jsb2NrKTsKICAgICAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+Y2xpZW50TG9naWNh
bEhlaWdodCgpOwotICAgICAgICBpZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgY29udGFpbmlu
Z0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJlYWQoKSAmJiBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFk
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBpZiAoZmxvd1RocmVhZCAm
JiBjb250YWluaW5nQmxvY2stPmlzUmVuZGVyRmxvd1RocmVhZCgpICYmIGZsb3dUaHJlYWQtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjb250
YWluaW5nQmxvY2spLT5jb250ZW50TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zMDcyLDcgKzMwNzIsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgCiAgICAgLy8gQWRqdXN0IGxvZ2lj
YWxMZWZ0IGlmIHdlIG5lZWQgdG8gZm9yIHRoZSBmbGlwcGVkIHZlcnNpb24gb2Ygb3VyIHdyaXRp
bmcgbW9kZSBpbiByZWdpb25zLgogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIg
dHlwZXMgb2Ygb2JqZWN0cyBhcyBjb250YWluZXJCbG9jaywgbm90IG9ubHkgUmVuZGVyQmxvY2su
Ci0gICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpICYmICFyZWdpb24gJiYgaXNXcml0aW5nTW9k
ZVJvb3QoKSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGNvbnRhaW5lckJsb2NrLT5pc1JlbmRlckJsb2Nr
KCkpIHsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpOworICAgIGlmIChmbG93VGhyZWFkICYmICFyZWdpb24gJiYgaXNXcml0aW5n
TW9kZVJvb3QoKSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2Nr
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIGNvbnRhaW5lckJsb2NrLT5pc1JlbmRlckJs
b2NrKCkpIHsKICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0lu
UmVnaW9uKCkpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0gY29tcHV0ZWRW
YWx1ZXMubV9wb3NpdGlvbjsKICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNiID0gdG9SZW5k
ZXJCbG9jayhjb250YWluZXJCbG9jayk7CkBAIC0zMzkyLDcgKzMzOTMsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgCiAgICAgLy8gQWRqdXN0IGxvZ2lj
YWxUb3AgaWYgd2UgbmVlZCB0byBmb3IgcGVycGVuZGljdWxhciB3cml0aW5nIG1vZGVzIGluIHJl
Z2lvbnMuCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBvYmpl
Y3RzIGFzIGNvbnRhaW5lckJsb2NrLCBub3Qgb25seSBSZW5kZXJCbG9jay4KLSAgICBpZiAoaW5S
ZW5kZXJGbG93VGhyZWFkKCkgJiYgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWlu
ZXJCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBjb250YWluZXJCbG9jay0+aXNS
ZW5kZXJCbG9jaygpKSB7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoZmxvd1RocmVhZCAmJiBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpICE9IGNvbnRhaW5lckJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpICYmIGNvbnRhaW5lckJsb2NrLT5pc1JlbmRlckJsb2NrKCkpIHsKICAgICAgICAgQVNTRVJU
KGNvbnRhaW5lckJsb2NrLT5jYW5IYXZlQm94SW5mb0luUmVnaW9uKCkpOwogICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3BQb3MgPSBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwogICAgICAg
ICBjb25zdCBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKGNvbnRhaW5lckJsb2NrKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUwLDEyICsyNTAsMTIgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6
OmxheW91dAogICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKTsKICAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNS
ZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAK
LSAgICBpZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgLy8gUmVnaW9ucyBjaGFu
Z2luZyB3aWR0aHMgY2FuIGZvcmNlIHVzIHRvIHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KLSAgICAg
ICAgaWYgKGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoKSkKLSAgICAgICAgICAgIHJlbGF5
b3V0Q2hpbGRyZW4gPSB0cnVlOwotICAgIH0KLSAgICB1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9u
c0xvZ2ljYWxTaXplKCk7CisgICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3aWR0aHMgY2FuIGZvcmNl
IHVzIHRvIHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgIGlmIChsb2dpY2FsV2lk
dGhDaGFuZ2VkSW5SZWdpb25zKGZsb3dUaHJlYWQpKQorICAgICAgICByZWxheW91dENoaWxkcmVu
ID0gdHJ1ZTsKKyAgICBpZiAodXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNMb2dpY2FsU2l6ZShm
bG93VGhyZWFkKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKICAgICBMYXlv
dXRTaXplIHByZXZpb3VzU2l6ZSA9IHNpemUoKTsKIApAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQg
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXQKIAogICAgIGxheW91dFBvc2l0aW9u
ZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNSb290KCkpOwogCi0gICAgY29tcHV0ZVJl
Z2lvblJhbmdlRm9yQmxvY2soKTsKKyAgICBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCbG9jayhmbG93
VGhyZWFkKTsKIAogICAgIGlmICghaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpICYm
IGhlaWdodCgpID09IDApIHsKICAgICAgICAgLy8gV2UgYXJlIGEgYmxvY2sgd2l0aCBubyBib3Jk
ZXIgYW5kIHBhZGRpbmcgYW5kIGEgY29tcHV0ZWQgaGVpZ2h0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDE0NDQ4NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzNSwxMiArMzM1LDEyIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6Omxh
eW91dEJsb2NrKGJvb2wKIAogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2
aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxl
Y3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKIAotICAg
IGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICAvLyBSZWdpb25zIGNoYW5naW5n
IHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgotICAgICAgICBp
ZiAobG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucygpKQotICAgICAgICAgICAgcmVsYXlvdXRD
aGlsZHJlbiA9IHRydWU7Ci0gICAgfQotICAgIHVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zTG9n
aWNhbFNpemUoKTsKKyAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMg
dG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxXaWR0aENo
YW5nZWRJblJlZ2lvbnMoZmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0
cnVlOworICAgIGlmICh1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0xvZ2ljYWxTaXplKGZsb3dU
aHJlYWQpKQorICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAogICAgIG1fbnVtYmVy
T2ZJbkZsb3dDaGlsZHJlbk9uRmlyc3RMaW5lID0gLTE7CiAKQEAgLTM2Niw3ICszNjYsNyBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sCiAKICAgICBsYXlvdXRQb3Np
dGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKIAotICAgIGNvbXB1
dGVSZWdpb25SYW5nZUZvckJsb2NrKCk7CisgICAgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2so
Zmxvd1RocmVhZCk7CiAKICAgICByZXBhaW50Q2hpbGRyZW5EdXJpbmdMYXlvdXRJZk1vdmVkKG9s
ZENoaWxkUmVjdHMpOwogICAgIC8vIEZJWE1FOiBjc3MzL2ZsZXhib3gvcmVwYWludC1ydGwtY29s
dW1uLmh0bWwgc2VlbXMgdG8gcmVwYWludCBtb3JlIG92ZXJmbG93IHRoYW4gaXQgbmVlZHMgdG8u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
CShyZXZpc2lvbiAxNDQ0ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNyw5ICs3MjcsOCBAQCBib29sIFJlbmRl
ckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1JlZ2lvCiAgICAgQVNTRVJUKG9iamVjdCk7CiAgICAg
QVNTRVJUKHJlZ2lvbik7CiAKLSAgICBpZiAoIW9iamVjdC0+aW5SZW5kZXJGbG93VGhyZWFkKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAob2JqZWN0LT5lbmNsb3NpbmdSZW5kZXJG
bG93VGhyZWFkKCkgIT0gdGhpcykKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0g
b2JqZWN0LT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGZsb3dUaHJlYWQg
IT0gdGhpcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9yZWdpb25MaXN0LmNv
bnRhaW5zKGNvbnN0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4ocmVnaW9uKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAJKHJl
dmlzaW9uIDE0NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgdm9pZCBSZW5kZXJHcmlkOjps
YXlvdXRCbG9jayhib29sIHJlbGF5bwogICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRo
aXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKICAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFu
c2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSk7CiAKLSAgICBpZiAoaW5SZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAg
Ly8gUmVnaW9ucyBjaGFuZ2luZyB3aWR0aHMgY2FuIGZvcmNlIHVzIHRvIHJlbGF5b3V0IG91ciBj
aGlsZHJlbi4KLSAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoKSkKLSAg
ICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwotICAgIH0KLSAgICB1cGRhdGVSZWdp
b25zQW5kRXhjbHVzaW9uc0xvZ2ljYWxTaXplKCk7CisgICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3
aWR0aHMgY2FuIGZvcmNlIHVzIHRvIHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KKyAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAg
IGlmIChsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGZsb3dUaHJlYWQpKQorICAgICAgICBy
ZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKKyAgICBpZiAodXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lv
bnNMb2dpY2FsU2l6ZShmbG93VGhyZWFkKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRy
dWU7CiAKICAgICBMYXlvdXRTaXplIHByZXZpb3VzU2l6ZSA9IHNpemUoKTsKIApAQCAtMTY5LDcg
KzE2OSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW8KIAogICAg
IGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNSb290KCkpOwog
Ci0gICAgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQmxvY2soKTsKKyAgICBjb21wdXRlUmVnaW9uUmFu
Z2VGb3JCbG9jayhmbG93VGhyZWFkKTsKIAogICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRB
ZnRlckVkZ2UpOwogICAgIHN0YXRlUHVzaGVyLnBvcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE0NDQ4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIs
MTMgKzIxMiwxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcGFyZW50KCktPnN0eWxlKCk7CiAgICAgUmVu
ZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBwYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUo
KSA/IHRvUmVuZGVySW5saW5lKHBhcmVudCgpKSA6IDA7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0g
ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGJvb2wgYWx3YXlzQ3Jl
YXRlTGluZUJveGVzID0gKHBhcmVudFJlbmRlcklubGluZSAmJiBwYXJlbnRSZW5kZXJJbmxpbmUt
PmFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQogICAgICAgICB8fCAocGFyZW50UmVuZGVySW5saW5l
ICYmIHBhcmVudFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUpCiAgICAgICAgIHx8
IHN0eWxlKCktPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgp
LT50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUKICAgICAgICAgfHwg
KGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRl
bnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5bGUoKS0+bGlu
ZUhlaWdodCgpKSkKLSAgICAgICAgfHwgKGluUmVuZGVyRmxvd1RocmVhZCgpICYmIGVuY2xvc2lu
Z1JlbmRlckZsb3dUaHJlYWQoKS0+aGFzUmVnaW9uc1dpdGhTdHlsaW5nKCkpOworICAgICAgICB8
fCAoZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5oYXNSZWdpb25zV2l0aFN0eWxpbmcoKSk7CiAK
ICAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcyAmJiBjaGVja0ZvbnRzICYmIGRvY3VtZW50
KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAg
ICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTQ0NDg3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgzNywxMiArMTgzNyw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5
ZXIqIGFjY3VtdWwKICAgICBFUG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJlci0+c3R5bGUoKS0+
cG9zaXRpb24oKTsKIAogICAgIC8vIEZJWE1FOiBTcGVjaWFsIGNhc2luZyBSZW5kZXJGbG93VGhy
ZWFkIHNvIG11Y2ggZm9yIGZpeGVkIHBvc2l0aW9uaW5nIGhlcmUgaXMgbm90IGdyZWF0LgotICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IDA7Ci0gICAgaWYg
KHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgcmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVh
ZCgpKSB7Ci0gICAgICAgIGZpeGVkRmxvd1RocmVhZENvbnRhaW5lciA9IHJlbmRlcmVyLT5lbmNs
b3NpbmdSZW5kZXJGbG93VGhyZWFkKCk7Ci0gICAgICAgIGlmICghZml4ZWRGbG93VGhyZWFkQ29u
dGFpbmVyLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIGZpeGVkRmxvd1Ro
cmVhZENvbnRhaW5lciA9IDA7Ci0gICAgfQorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZpeGVkRmxv
d1RocmVhZENvbnRhaW5lciA9IHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gPyByZW5kZXJlci0+
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIDogMDsKKyAgICBpZiAoZml4ZWRGbG93VGhyZWFk
Q29udGFpbmVyICYmICFmaXhlZEZsb3dUaHJlYWRDb250YWluZXItPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQorICAgICAgICBmaXhlZEZsb3dUaHJlYWRDb250YWluZXIgPSAwOwogCiAgICAgLy8g
RklYTUU6IFBvc2l0aW9uaW5nIG9mIG91dC1vZi1mbG93KGZpeGVkLCBhYnNvbHV0ZSkgZWxlbWVu
dHMgY29sbGVjdGVkIGluIGEgUmVuZGVyRmxvd1RocmVhZAogICAgIC8vIG1heSBuZWVkIHRvIGJl
IHJldmlzaXRlZCBpbiBhIGZ1dHVyZSBwYXRjaC4KQEAgLTE5MTMsNyArMTkxMCw3IEBAIHN0YXRp
YyBpbmxpbmUgY29uc3QgUmVuZGVyTGF5ZXIqIGFjY3VtdWwKIAogICAgICAgICAvLyBXZSBzaG91
bGQgbm90IHJlYWNoIFJlbmRlclZpZXcgbGF5ZXIgcGFzdCB0aGUgUmVuZGVyRmxvd1RocmVhZCBs
YXllciBmb3IgYW55CiAgICAgICAgIC8vIGNoaWxkcmVuIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFk
LgotICAgICAgICBpZiAocmVuZGVyZXItPmluUmVuZGVyRmxvd1RocmVhZCgpICYmICFsYXllci0+
aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+Zmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpICYmICFsYXllci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93
VGhyZWFkKCkpCiAgICAgICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXIgIT0gcmVuZGVyZXItPnZp
ZXcoKS0+bGF5ZXIoKSk7CiAKICAgICAgICAgaWYgKGZvdW5kQW5jZXN0b3JGaXJzdCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHJldmlzaW9uIDE0NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcwLDcgKzE2NzAsNyBA
QCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpCiB7CiAgICAgLy8gRklY
TUU6IFdlIGRpc2FibGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgZm9yIGVsZW1lbnRzIGluIGEg
UmVuZGVyRmxvd1RocmVhZCBhcyBpdCBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCiAgICAgLy8gU2Vl
IGh0dHA6Ly93ZWJraXQub3JnL2IvODQ5MDAgdG8gcmUtZW5hYmxlIGl0LgotICAgIHJldHVybiBt
X2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgJiYgbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIo
KSAmJiAhbGF5ZXItPnJlbmRlcmVyKCktPmluUmVuZGVyRmxvd1RocmVhZCgpOworICAgIHJldHVy
biBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgJiYgbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5
ZXIoKSAmJiBsYXllci0+cmVuZGVyZXIoKS0+Zmxvd1RocmVhZFN0YXRlKCkgPT0gUmVuZGVyT2Jq
ZWN0OjpOb3RJbnNpZGVGbG93VGhyZWFkOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNPd25CYWNraW5nU3RvcmUoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25z
dCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvckxheWVyKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAxNDQ0ODcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw5ICs3MCw4IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiAgICAgYm9vbCBj
b250cm9sc05lZWRMYXlvdXQgPSBjb250cm9sc1JlbmRlcmVyLT5uZWVkc0xheW91dCgpOwogICAg
IC8vIElmIHRoZSByZWdpb24gY2hhaW4gaGFzIGNoYW5nZWQgd2UgYWxzbyBuZWVkIHRvIHJlbGF5
b3V0IHRoZSBjb250cm9scyB0byB1cGRhdGUgdGhlIHJlZ2lvbiBib3ggaW5mby4KICAgICAvLyBG
SVhNRTogV2UgY2FuIGRvIGJldHRlciBvbmNlIHdlIGNvbXB1dGUgcmVnaW9uIGJveCBpbmZvIGZv
ciBSZW5kZXJSZXBsYWNlZCwgbm90IG9ubHkgZm9yIFJlbmRlckJsb2NrLgotICAgIGlmIChpblJl
bmRlckZsb3dUaHJlYWQoKSAmJiAhY29udHJvbHNOZWVkTGF5b3V0KSB7Ci0gICAgICAgIGNvbnN0
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFk
KCk7Ci0gICAgICAgIEFTU0VSVChmbG93VGhyZWFkKTsKKyAgICBjb25zdCBSZW5kZXJGbG93VGhy
ZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgIGlmIChm
bG93VGhyZWFkICYmICFjb250cm9sc05lZWRMYXlvdXQpIHsKICAgICAgICAgaWYgKGZsb3dUaHJl
YWQtPnBhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoKSkKICAgICAgICAgICAgIGNvbnRyb2xzTmVlZExh
eW91dCA9IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDE0NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTMsMTEgKzU5MywxMCBAQCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogUmVuZGVyT2JqZWN0OjplbmNsCiAgICAgcmV0dXJuIDA7CiB9
CiAKLVJlbmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6ZW5jbG9zaW5nUmVuZGVyRmxvd1Ro
cmVhZCgpIGNvbnN0Ci17ICAgCi0gICAgaWYgKCFpblJlbmRlckZsb3dUaHJlYWQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCitSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0
ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSBjb25zdAoreworICAgIEFTU0VSVChmbG93VGhy
ZWFkU3RhdGUoKSAhPSBOb3RJbnNpZGVGbG93VGhyZWFkKTsKKwogICAgIC8vIFNlZSBpZiB3ZSBo
YXZlIHRoZSB0aHJlYWQgY2FjaGVkIGJlY2F1c2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlv
dXQuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHZpZXcoKS0+Zmxvd1RocmVh
ZENvbnRyb2xsZXIoKS0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKICAgICBpZiAoZmxvd1Ro
cmVhZCkKQEAgLTYwOCw3ICs2MDcsNyBAQCBSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6
OmVuY2xvc2luCiAgICAgd2hpbGUgKGN1cnIpIHsKICAgICAgICAgaWYgKGN1cnItPmlzUmVuZGVy
Rmxvd1RocmVhZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRvUmVuZGVyRmxvd1RocmVhZChjdXJy
KTsKLSAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgICAgICBjdXJyID0gY3Vyci0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTI5NywxNSAr
MTI5NiwxNiBAQCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNvCiAgICAg
Ly8gSWYgd2UgaGF2ZSBhIGZsb3cgdGhyZWFkLCB0aGVuIHdlIG5lZWQgdG8gZG8gaW5kaXZpZHVh
bCByZXBhaW50cyB3aXRoaW4gdGhlIFJlbmRlclJlZ2lvbnMgaW5zdGVhZC4KICAgICAvLyBSZXR1
cm4gdGhlIGZsb3cgdGhyZWFkIGFzIGEgcmVwYWludCBjb250YWluZXIgaW4gb3JkZXIgdG8gY3Jl
YXRlIGEgY2hva2Vwb2ludCB0aGF0IGFsbG93cyB1cyB0byBjaGFuZ2UKICAgICAvLyByZXBhaW50
aW5nIHRvIGRvIGluZGl2aWR1YWwgcmVnaW9uIHJlcGFpbnRzLgotICAgIGlmIChpblJlbmRlckZs
b3dUaHJlYWQoKSkgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBwYXJlbnRSZW5kZXJGbG93
VGhyZWFkID0gZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAgIFJlbmRlckZsb3dUaHJl
YWQqIHBhcmVudFJlbmRlckZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7
CisgICAgaWYgKHBhcmVudFJlbmRlckZsb3dUaHJlYWQpIHsKICAgICAgICAgLy8gVGhlIGFuY2Vz
dG9yIGRvY3VtZW50IHdpbGwgZG8gdGhlIHJlcGFyZW50aW5nIHdoZW4gdGhlIHJlcGFpbnQgcHJv
cGFnYXRlcyBmdXJ0aGVyIHVwLgogICAgICAgICAvLyBXZSdyZSBqdXN0IGEgc2VhbWxlc3MgY2hp
bGQgZG9jdW1lbnQsIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoZSBoYWNraW5nLgogICAgICAg
ICBpZiAocGFyZW50UmVuZGVyRmxvd1RocmVhZCAmJiBwYXJlbnRSZW5kZXJGbG93VGhyZWFkLT5k
b2N1bWVudCgpICE9IGRvY3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVwYWludENvbnRh
aW5lcjsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGZvdW5kIGEgcmVwYWludCBjb250
YWluZXIgdGhlbiB3ZSB3aWxsIHJlcGFpbnQgaW50byB0aGF0IGNvbnRhaW5lciBvbmx5IGlmIGl0
IGlzIHBhcnQgb2YgdGhlIHNhbWUKICAgICAgICAgLy8gZmxvdyB0aHJlYWQuIE90aGVyd2lzZSB3
ZSB3aWxsIG5lZWQgdG8gY2F0Y2ggdGhlIHJlcGFpbnQgY2FsbCBhbmQgc2VuZCBpdCB0byB0aGUg
ZmxvdyB0aHJlYWQuCi0gICAgICAgIGlmICghKHJlcGFpbnRDb250YWluZXIgJiYgcmVwYWludENv
bnRhaW5lci0+aW5SZW5kZXJGbG93VGhyZWFkKCkgJiYgcmVwYWludENvbnRhaW5lci0+ZW5jbG9z
aW5nUmVuZGVyRmxvd1RocmVhZCgpID09IHBhcmVudFJlbmRlckZsb3dUaHJlYWQpKQorICAgICAg
ICBSZW5kZXJGbG93VGhyZWFkKiByZXBhaW50Q29udGFpbmVyRmxvd1RocmVhZCA9IHJlcGFpbnRD
b250YWluZXIgPyByZXBhaW50Q29udGFpbmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkg
OiAwOworICAgICAgICBpZiAoIXJlcGFpbnRDb250YWluZXJGbG93VGhyZWFkIHx8IHJlcGFpbnRD
b250YWluZXJGbG93VGhyZWFkICE9IHBhcmVudFJlbmRlckZsb3dUaHJlYWQpCiAgICAgICAgICAg
ICByZXBhaW50Q29udGFpbmVyID0gcGFyZW50UmVuZGVyRmxvd1RocmVhZDsKICAgICB9CiAgICAg
cmV0dXJuIHJlcGFpbnRDb250YWluZXI7CkBAIC0yNDc3LDggKzI0NzcsNyBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlCiAgICAgaWYgKGlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpICYmIHBhcmVudCgpLT5jaGlsZHJlbklubGluZSgpKQogICAgICAgICBwYXJlbnQoKS0+
ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcyk7CiAKLSAgICBpZiAoaW5SZW5kZXJGbG93
VGhyZWFkKCkpCi0gICAgICAgIHJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkKCk7CisgICAgcmVt
b3ZlRnJvbVJlbmRlckZsb3dUaHJlYWQoKTsKIAogICAgIGlmIChSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSBwYXJlbnQoKS0+cmVuZGVyTmFtZWRGbG93VGhyZWFk
V3JhcHBlcigpKQogICAgICAgICBjb250YWluZXJGbG93VGhyZWFkLT5yZW1vdmVGbG93Q2hpbGQo
dGhpcyk7CkBAIC0yNDkxLDEzICsyNDkwLDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUKIAogdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93
VGhyZWFkKCkKIHsKLSAgICBSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJGbG93VGhyZWFkID0gZW5j
bG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOwotICAgIEFTU0VSVChyZW5kZXJGbG93VGhyZWFkKTsK
LSAgICAvLyBTb21ldGltZXMgd2UgcmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gdGhlIGZsb3csIGJ1
dCBpdCdzIG5vdCBkZXN0cm95ZWQgYXQgdGhhdCB0aW1lLiAKKyAgICBpZiAoZmxvd1RocmVhZFN0
YXRlKCkgPT0gTm90SW5zaWRlRmxvd1RocmVhZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IC8vIFNvbWV0aW1lcyB3ZSByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZmxvdywgYnV0IGl0
J3Mgbm90IGRlc3Ryb3llZCBhdCB0aGF0IHRpbWUuCiAgICAgLy8gSXQncyBvbmx5IHVudGlsIGxh
dGVyIHdoZW4gd2UgYWN0dWFsbHkgZGVzdHJveSBpdCBhbmQgcmVtb3ZlIGFsbCB0aGUgY2hpbGRy
ZW4gZnJvbSBpdC4gCiAgICAgLy8gQ3VycmVudGx5LCB0aGF0IGhhcHBlbnMgZm9yIGZpcnN0TGV0
dGVyIGVsZW1lbnRzIGFuZCBsaXN0IG1hcmtlcnMuCiAgICAgLy8gUGFzcyBpbiB0aGUgZmxvdyB0
aHJlYWQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGxvb2sgaXQgdXAgZm9yIGFsbCB0aGUgY2hp
bGRyZW4uCi0gICAgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUocmVuZGVyRmxv
d1RocmVhZCk7CisgICAgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUoZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpKTsKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZy
b21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJlbmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dU
aHJlYWQpCkBAIC0yNTA2LDcgKzI1MDYsMTIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZy
b21SZW5kZXJGbG93VAogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZHJl
bi0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAg
ICAgICAgICAgIGNoaWxkLT5yZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShyZW5k
ZXJGbG93VGhyZWFkKTsKICAgICB9Ci0gICAgcmVuZGVyRmxvd1RocmVhZC0+cmVtb3ZlRmxvd0No
aWxkSW5mbyh0aGlzKTsKKyAgICAKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBsb2NhbEZsb3dUaHJl
YWQgPSByZW5kZXJGbG93VGhyZWFkOworICAgIGlmIChmbG93VGhyZWFkU3RhdGUoKSA9PSBJbnNp
ZGVJbkZsb3dUaHJlYWQpCisgICAgICAgIGxvY2FsRmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsgLy8gV2UgaGF2ZSB0byBhc2suIFdlIGNhbid0IGp1c3QgYXNzdW1lIHdl
IGFyZSBpbiB0aGUgc2FtZSBmbG93IHRocmVhZC4KKyAgICBpZiAobG9jYWxGbG93VGhyZWFkKQor
ICAgICAgICBsb2NhbEZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGlsZEluZm8odGhpcyk7CiAgICAg
c2V0Rmxvd1RocmVhZFN0YXRlKE5vdEluc2lkZUZsb3dUaHJlYWQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxNyw4ICsyMTcsMTQgQEAgcHVibGljOgogICAgIFJlbmRlckJveCogZW5jbG9zaW5nQm94KCkg
Y29uc3Q7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGVuY2xvc2luZ0JveE1vZGVsT2JqZWN0
KCkgY29uc3Q7CiAKLSAgICAvLyBGdW5jdGlvbiB0byByZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93
IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBvbmUuCi0gICAgUmVuZGVyRmxvd1Ro
cmVhZCogZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0OworICAgIC8vIEZ1bmN0aW9u
IHRvIHJldHVybiBvdXIgZW5jbG9zaW5nIGZsb3cgdGhyZWFkIGlmIHdlIGFyZSBjb250YWluZWQg
aW5zaWRlIG9uZS4gVGhpcworICAgIC8vIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIGNvbnRhaW5pbmcg
YmxvY2sgY2hhaW4uCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0gTm90
SW5zaWRlRmxvd1RocmVhZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAgIH0KIAogICAgIFJlbmRlck5h
bWVkRmxvd1RocmVhZCogcmVuZGVyTmFtZWRGbG93VGhyZWFkV3JhcHBlcigpIGNvbnN0OwogCkBA
IC00NDIsMTIgKzQ0OCw2IEBAIHB1YmxpYzoKICAgICAgICAgSW5zaWRlSW5GbG93VGhyZWFkID0g
MiwKICAgICB9OwogCi0gICAgYm9vbCBpblJlbmRlckZsb3dUaHJlYWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgRmxvd1RocmVhZFN0YXRlIHN0YXRlID0gZmxvd1RocmVhZFN0YXRlKCk7Ci0gICAg
ICAgIHJldHVybiBzdGF0ZSAhPSBOb3RJbnNpZGVGbG93VGhyZWFkOwotICAgIH0KLQogICAgIHZv
aWQgc2V0Rmxvd1RocmVhZFN0YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMoRmxvd1RocmVhZFN0YXRl
KTsKIAogICAgIEZsb3dUaHJlYWRTdGF0ZSBmbG93VGhyZWFkU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2JpdGZpZWxkcy5mbG93VGhyZWFkU3RhdGUoKTsgfQpAQCAtMTAxOCw2ICsxMDE4LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgc2V0RG9jdW1lbnRGb3JBbm9ueW1vdXMoRG9jdW1lbnQqIGRv
Y3VtZW50KSB7IEFTU0VSVChpc0Fub255bW91cygpKTsgbV9ub2RlID0gZG9jdW1lbnQ7IH0KIAog
cHJpdmF0ZToKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBsb2NhdGVGbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCkgY29uc3Q7CiAgICAgdm9pZCByZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZCgpOwog
ICAgIHZvaWQgcmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUoUmVuZGVyRmxvd1Ro
cmVhZCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAkocmV2aXNpb24gMTQ0NDg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Nyw5ICs1NTcsNyBAQCB2b2lkIFJlbmRlclJl
Z2lvbjo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJCiAKIHZvaWQgUmVuZGVyUmVnaW9uOjpzZXRPYmpl
Y3RTdHlsZUluUmVnaW9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZUluUmVnaW9uLCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKQogewotICAg
IEFTU0VSVChvYmplY3QtPmluUmVuZGVyRmxvd1RocmVhZCgpKTsKLSAgICBpZiAoIW9iamVjdC0+
aW5SZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQob2JqZWN0
LT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBvYmplY3RPcmlnaW5hbFN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwogICAgIG9iamVjdC0+c2V0
U3R5bGVJbnRlcm5hbChzdHlsZUluUmVnaW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE0NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiAKICAgICAvLyB1cCByZWdp
b25zIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQgZHVyaW5nIGxheW91dC4KICAgICBpZiAobmV3Q2hp
bGQgJiYgIW5ld0NoaWxkLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAgICBSZW5kZXJC
b3gqIHNlYW1sZXNzQm94ID0gZW5jbG9zaW5nU2VhbWxlc3NSZW5kZXJlcihkb2N1bWVudCgpKTsK
LSAgICAgICAgaWYgKHNlYW1sZXNzQm94ICYmIHNlYW1sZXNzQm94LT5pblJlbmRlckZsb3dUaHJl
YWQoKSkKKyAgICAgICAgaWYgKHNlYW1sZXNzQm94ICYmIHNlYW1sZXNzQm94LT5mbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgICAgICBuZXdDaGlsZC0+c2V0Rmxvd1RocmVhZFN0
YXRlKHNlYW1sZXNzQm94LT5mbG93VGhyZWFkU3RhdGUoKSk7CiAgICAgfQogICAgIFJlbmRlckJs
b2NrOjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwpAQCAtMjAwLDcgKzIwMCw3IEBA
IGJvb2wgUmVuZGVyVmlldzo6aW5pdGlhbGl6ZUxheW91dFN0YXRlKEwKICAgICAgICAgCiAgICAg
ICAgIC8vIFNldCB0aGUgY3VycmVudCByZW5kZXIgZmxvdyB0aHJlYWQgdG8gcG9pbnQgdG8gb3Vy
IGFuY2VzdG9yLiBUaGlzIHdpbGwgYWxsb3cgdGhlIHNlYW1sZXNzIGRvY3VtZW50IHRvIGxvY2F0
ZSB0aGUgY29ycmVjdAogICAgICAgICAvLyByZWdpb25zIHdoZW4gZG9pbmcgYSBsYXlvdXQuCi0g
ICAgICAgIGlmIChzZWFtbGVzc0FuY2VzdG9yLT5pblJlbmRlckZsb3dUaHJlYWQoKSkgeworICAg
ICAgICBpZiAoc2VhbWxlc3NBbmNlc3Rvci0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7
CiAgICAgICAgICAgICBmbG93VGhyZWFkQ29udHJvbGxlcigpLT5zZXRDdXJyZW50UmVuZGVyRmxv
d1RocmVhZChzZWFtbGVzc0FuY2VzdG9yLT52aWV3KCktPmZsb3dUaHJlYWRDb250cm9sbGVyKCkt
PmN1cnJlbnRSZW5kZXJGbG93VGhyZWFkKCkpOwogICAgICAgICAgICAgaXNTZWFtbGVzc0FuY2Vz
dG9ySW5GbG93VGhyZWFkID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNjc2LDcgKzY3Niw3IEBAIHZv
aWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamUKICAgICAgICAgbV9zZWxlY3Rp
b25FbmQgPT0gZW5kICYmIG1fc2VsZWN0aW9uRW5kUG9zID09IGVuZFBvcykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKChzdGFydCAmJiBlbmQpICYmIChzdGFydC0+ZW5jbG9zaW5nUmVuZGVy
Rmxvd1RocmVhZCgpICE9IGVuZC0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpKSkKKyAgICBp
ZiAoKHN0YXJ0ICYmIGVuZCkgJiYgKHN0YXJ0LT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkg
IT0gZW5kLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBSZWNvcmQgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzLiAgVGhlc2Ugd2lsbCBiZSB1
c2VkIGxhdGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlz
aW9uIDE0NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcHVzaExh
eW91dFN0YXRlKFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwg
TGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMCwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdlZCA9IGZhbHNl
LCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7CiAgICAgICAgIC8vIFdlIHB1c2ggTGF5
b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IHN0b3Jl
cyBsYXlvdXREZWx0YSB0b28uCi0gICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IG1f
bGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKSB8fCBy
ZW5kZXJlci0+aW5SZW5kZXJGbG93VGhyZWFkKCkKKyAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBh
aW50KCkgfHwgbV9sYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci0+aGFzQ29s
dW1ucygpIHx8IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAg
ICAgIHx8IG1fbGF5b3V0U3RhdGUtPmxpbmVHcmlkKCkgfHwgKHJlbmRlcmVyLT5zdHlsZSgpLT5s
aW5lR3JpZCgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUdyaWQoKSAmJiByZW5kZXJlci0+
aXNCbG9ja0Zsb3coKSkKICNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCiAgICAgICAgICAgICB8
fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNDQ0ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsy
NTYsNyBAQCBSZW5kZXJSZWdpb24qIFJvb3RJbmxpbmVCb3g6OmNvbnRhaW5pbmdSCiAKICNpZm5k
ZWYgTkRFQlVHCiAgICAgaWYgKHJlZ2lvbikgewotICAgICAgICBSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkID0gYmxvY2soKS0+ZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCgpOworICAgICAg
ICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gYmxvY2soKS0+Zmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0
ID0gZmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgpOwogICAgICAgICBBU1NFUlQocmVnaW9u
TGlzdC5jb250YWlucyhyZWdpb24pKTsKICAgICB9CkBAIC0yNjgsNyArMjY4LDcgQEAgUmVuZGVy
UmVnaW9uKiBSb290SW5saW5lQm94Ojpjb250YWluaW5nUgogdm9pZCBSb290SW5saW5lQm94Ojpz
ZXRDb250YWluaW5nUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uKQogewogICAgIEFTU0VSVCgh
aXNEaXJ0eSgpKTsKLSAgICBBU1NFUlQoYmxvY2soKS0+aW5SZW5kZXJGbG93VGhyZWFkKCkpOwor
ICAgIEFTU0VSVChibG9jaygpLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwogICAgIExp
bmVGcmFnbWVudGF0aW9uRGF0YSogZnJhZ21lbnRhdGlvbkRhdGEgID0gZW5zdXJlTGluZUZyYWdt
ZW50YXRpb25EYXRhKCk7CiAgICAgZnJhZ21lbnRhdGlvbkRhdGEtPm1fY29udGFpbmluZ1JlZ2lv
biA9IHJlZ2lvbjsKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDQ4NykKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAzLTAxICBE
YXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbTmV3IE11bHRpY29sdW1u
XSBDaGFuZ2UgaW5SZW5kZXJGbG93VGhyZWFkIHRvIGZvbGxvdyBjb250YWluaW5nIGJsb2NrIGNo
YWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEy
MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZh
c3QvbXVsdGljb2wvcG9zaXRpb25lZC1vdXRzaWRlLW9mLWNvbHVtbnMtZXhwZWN0ZWQuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLW91dHNpZGUtb2YtY29s
dW1ucy5odG1sOiBBZGRlZC4KKwogMjAxMy0wMy0wMSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0Bh
ZG9iZS5jb20+CiAKICAgICAgICAgW2NzcyBleGNsdXNpb25zXSBzZXR0aW5nIHNoYXBlLWluc2lk
ZSBvbiBhIHBhcmVudCBkb2VzIG5vdCByZWxheW91dCBjaGlsZCBibG9ja3MnIGlubGluZSBjb250
ZW50CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtb3V0c2lkZS1v
Zi1jb2x1bW5zLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9t
dWx0aWNvbC9wb3NpdGlvbmVkLW91dHNpZGUtb2YtY29sdW1ucy1leHBlY3RlZC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLW91dHNpZGUt
b2YtY29sdW1ucy1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8
ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVp
Z2h0OjIwMHB4OyB3aWR0aDo0MTBweCI+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6MjAwcHg7YmFja2dy
b3VuZC1jb2xvcjpsaW1lO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoyMDBw
eCI+PC9kaXY+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6MjAwcHg7YmFja2dyb3VuZC1jb2xvcjpsaW1l
O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MjAwcHgiPjwvZGl2PgorPGRp
diBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjIwMHB4O3dpZHRoOjMwMHB4O2JhY2tn
cm91bmQtY29sb3I6bGlnaHRncmF5OyBsZWZ0OjIwMHB4OyB0b3A6MjAwcHg7Ij4KK1RoaXMgdGV4
dCBzaG91bGQgYmUgb3V0c2lkZSB0aGUgY29sdW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIGJl
IG91dHNpZGUgdGhlIGNvbHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBvdXRzaWRlIHRo
ZSBjb2x1bW5zLjxicj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgb3V0c2lkZSB0aGUgY29sdW1ucy48
YnI+CitUaGlzIHRleHQgc2hvdWxkIGJlIG91dHNpZGUgdGhlIGNvbHVtbnMuPGJyPgorPC9kaXY+
Cis8L2Rpdj4KKzwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9wb3NpdGlv
bmVkLW91dHNpZGUtb2YtY29sdW1ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvcG9zaXRpb25lZC1vdXRzaWRlLW9mLWNvbHVtbnMuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvcG9zaXRpb25lZC1vdXRzaWRlLW9mLWNv
bHVtbnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPHNjcmlwdD4KK2ludGVy
bmFscy5zZXR0aW5ncy5zZXRSZWdpb25CYXNlZENvbHVtbnNFbmFibGVkKHRydWUpCis8L3Njcmlw
dD4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyAtd2Via2l0LWNvbHVtbi1jb3VudDoy
OyAtd2Via2l0LWNvbHVtbi13aWR0aDoyMDBweDsgd2lkdGg6NDEwcHg7IC13ZWJraXQtY29sdW1u
LWdhcDoxMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6MjAwcHgiPgorPGRpdiBz
dHlsZT0iaGVpZ2h0OjQwMHB4O2JhY2tncm91bmQtY29sb3I6bGltZSI+PC9kaXY+Cis8ZGl2IHN0
eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MjAwcHg7d2lkdGg6MzAwcHg7YmFja2dyb3Vu
ZC1jb2xvcjpsaWdodGdyYXk7IGxlZnQ6MjAwcHg7IHRvcDoyMDBweDsiPgorVGhpcyB0ZXh0IHNo
b3VsZCBiZSBvdXRzaWRlIHRoZSBjb2x1bW5zLjxicj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgb3V0
c2lkZSB0aGUgY29sdW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIGJlIG91dHNpZGUgdGhlIGNv
bHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBvdXRzaWRlIHRoZSBjb2x1bW5zLjxicj4K
K1RoaXMgdGV4dCBzaG91bGQgYmUgb3V0c2lkZSB0aGUgY29sdW1ucy48YnI+Cis8L2Rpdj4KKzwv
ZGl2PgorPC9kaXY+Cg==
</data>
<flag name="review"
          id="211876"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>