<?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>97924</bug_id>
          
          <creation_ts>2012-09-28 11:00:00 -0700</creation_ts>
          <short_desc>[Chromium] WebFrameImpl.cpp could use a style cleanup</short_desc>
          <delta_ts>2012-09-28 11:31:00 -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>New Bugs</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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>730803</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-28 11:00:00 -0700</bug_when>
    <thetext>[Chromium] WebFrameImpl.cpp could use a style cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730805</commentid>
    <comment_count>1</comment_count>
      <attachid>166280</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-28 11:01:17 -0700</bug_when>
    <thetext>Created attachment 166280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730810</commentid>
    <comment_count>2</comment_count>
      <attachid>166280</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-28 11:03:44 -0700</bug_when>
    <thetext>Comment on attachment 166280
Patch

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

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2147
&gt; +    return IntRect(frame()-&gt;selection()-&gt;bounds(false));

Would ternary if be good here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730815</commentid>
    <comment_count>3</comment_count>
      <attachid>166280</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-28 11:06:21 -0700</bug_when>
    <thetext>Comment on attachment 166280
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:2147
&gt;&gt; +    return IntRect(frame()-&gt;selection()-&gt;bounds(false));
&gt; 
&gt; Would ternary if be good here?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730817</commentid>
    <comment_count>4</comment_count>
      <attachid>166282</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-28 11:08:45 -0700</bug_when>
    <thetext>Created attachment 166282
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730834</commentid>
    <comment_count>5</comment_count>
      <attachid>166282</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-28 11:30:57 -0700</bug_when>
    <thetext>Comment on attachment 166282
Patch for landing

Clearing flags on attachment: 166282

Committed r129927: &lt;http://trac.webkit.org/changeset/129927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730836</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-28 11:31:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166280</attachid>
            <date>2012-09-28 11:01:17 -0700</date>
            <delta_ts>2012-09-28 11:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97924-20120928110033.patch</filename>
            <type>text/plain</type>
            <size>71864</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY2NWU1ZDZjZjI0MDhhYTJiNGZlZTY4OGY0OWRiZWUzMTY1YmU4MzMuLjZkYjdmYTc3MjdmZThm
Y2QwOTg0OGIzYzc1ZGIwYjgzOGY3NDVlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTI3IEBACisyMDEyLTA5LTI4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBXZWJGcmFtZUltcGwuY3BwIGNvdWxkIHVzZSBhIHN0
eWxlIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk3OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBmaWxlIGlzIHZlcnkgb2xkIGFuZCBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZiBz
dHlsZSBlcnJvcnMgdGhhdAorICAgICAgICBhcmUgY29uZnVzaW5nIGZvbGtzIGNvbnRyaWJ1dGlu
ZyBuZXcgY29kZSB0byB0aGlzIGZpbGUuIE1vc3Qgb2YgdGhlc2UKKyAgICAgICAgc3R5bGVzIGFy
ZSBDaHJvbWl1bS1pc21zIHRoYXQgY3JlcHQgaW4gd2hlbiB0aGUgZmlsZSB3YXMgZm9ya2VkIGlu
IHRoZQorICAgICAgICBDaHJvbWl1bSByZXBvc2l0b3J5LgorCisgICAgICAgICogc3JjL1dlYkZy
YW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpmcmFtZUNv
bnRlbnRBc1BsYWluVGV4dCk6CisgICAgICAgIChDaHJvbWVQcmludENvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OnNwb29sUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZVByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKToKKyAg
ICAgICAgKENocm9tZVBsdWdpblByaW50Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9t
ZVBsdWdpblByaW50Q29udGV4dDo6c3Bvb2xQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlczo6RGVmZXJyZWRTY29wZVN0cmluZ01h
dGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OkRlZmVycmVkU2NvcGVTdHJp
bmdNYXRjaGVzOjpkb1RpbWVvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6ZnJvbUZy
YW1lT3duZXJFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjp1bmlxdWVO
YW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjphc3NpZ25lZE5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNldE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6Omljb25VUkxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpz
Y3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Om1pbmltdW1TY3Jv
bGxPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Om1heGltdW1TY3JvbGxP
ZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNvbnRlbnRzUHJlZmVycmVk
V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRvY3VtZW50RWxlbWVudFNj
cm9sbEhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aGFzSG9yaXpvbnRh
bFNjcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Om9wZW5lcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0T3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnRv
cCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Zmlyc3RDaGlsZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
cHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjp0cmF2ZXJz
ZU5leHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnRyYXZlcnNlUHJldmlvdXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5TmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZmluZENoaWxkQnlFeHByZXNzaW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6cGVyZm9ybWFuY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OndpbmRvd09iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6YmluZFRvV2lu
ZG93T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNvbGxlY3RH
YXJiYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjaGVja0lmUnVuSW5zZWN1
cmVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0
QW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNhbGxGdW5j
dGlvbkV2ZW5JZlNjcmlwdERpc2FibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjptYWluV29ybGRTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjpjcmVhdGVGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjcmVh
dGVTZXJpYWxpemFibGVGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjpjcmVhdGVGaWxlRW50cnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnJlbG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cmVsb2FkV2l0aE92ZXJyaWRlVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpsb2FkUmVxdWVzdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bG9hZEhpc3RvcnlJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjpsb2FkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6bG9hZEhUTUxTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmlzTG9h
ZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c3RvcExvYWRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnByb3Zpc2lvbmFsRGF0YVNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6cHJldmlvdXNIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6Y3VycmVudEhpc3RvcnlJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjplbmFibGVWaWV3U291cmNlTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6aXNWaWV3U291cmNlTW9kZUVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OnNldFJlZmVycmVyRm9yUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OmNvbW1pdERvY3VtZW50RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0TWFya2Vk
VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFj
dGVyUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5k
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpyZXF1ZXN0VGV4dENoZWNraW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3RXb3JkQXJvdW5kUG9zaXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjp2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6Z2V0UHJpbnRQYWdlU2hyaW5rKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpwcmludFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OnByaW50RW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjppc1ByaW50U2NhbGlu
Z0Rpc2FibGVkRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwYWdl
U2l6ZUFuZE1hcmdpbnNJblBpeGVscyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
cGFnZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaW5kKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01hdGNoZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnJlcG9ydEZpbmRJblBhZ2VTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNlbmRPcmllbnRhdGlvbkNoYW5nZUV2ZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpkaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aXNBY3RpdmVNYXRjaEZyYW1lVmFsaWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRlbGl2ZXJJbnRlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OmNvbnRlbnRBc1RleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6OmNvbnRlbnRBc01hcmt1cCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6cmVuZGVyVHJlZUFzVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJp
bnRQYWdlc1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpz
ZWxlY3Rpb25Cb3VuZHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxl
Y3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpsYXllclRyZWVBc1RleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OmluaXRpYWxpemVBc01haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
Y3JlYXRlQ2hpbGRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y3JlYXRl
RnJhbWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxlbWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OnNldENhbkhhdmVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpzZXRNYXJrZXJBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6Om9yZGluYWxPZkZpcnN0TWF0Y2hGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzU29vbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6Y2FsbFNjb3BlU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6aW52YWxpZGF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpsb2FkSmF2YVNjcmlwdFVSTCk6CisKIDIwMTItMDktMjggIExlYW5kcm8gR3Jh
Y2lhIEdpbCAgPGxlYW5kcm9ncmFjaWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gRml4IHRoZSBmaW5kLWluLXBhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGRldGFjaGluZyBmcmFt
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCAz
MzAwMWJjZmUxNmRkNTZhNTZmYzcxNzliYjBkNmVkOTZhODM4OGU3Li5jNThmNmRiZTYyZTM5ZGJj
MjNhNjZlZDBjODYxZWM1OGMxODUxMzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAKQEAgLTcyLDE1ICs3MiwxOSBAQAogI2luY2x1ZGUgIldlYkZyYW1l
SW1wbC5oIgogCiAjaW5jbHVkZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgorI2luY2x1ZGUgIkFz
eW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgiCiAj
aW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDb25zb2xl
LmgiCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkRPTVV0aWxpdGllc1By
aXZhdGUuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJET01XaW5kb3dJbnRl
bnRzLmgiCiAjaW5jbHVkZSAiRGVsaXZlcmVkSW50ZW50LmgiCiAjaW5jbHVkZSAiRGVsaXZlcmVk
SW50ZW50Q2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TWFya2VyLmgiCkBAIC04OCw2ICs5Miw3IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldyYXBwZXIu
aCIKKyNpbmNsdWRlICJGaWxlRW50cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtVHlwZS5oIgog
I2luY2x1ZGUgIkZpbmRJblBhZ2VDb29yZGluYXRlcy5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgpAQCAtMTQ0LDYgKzE0OSwxMCBAQAogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgog
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9y
LmgiCisjaW5jbHVkZSAiVjhET01GaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVjhEaXJlY3RvcnlF
bnRyeS5oIgorI2luY2x1ZGUgIlY4RmlsZUVudHJ5LmgiCisjaW5jbHVkZSAiVjhHQ0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUg
IldlYkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKQEAgLTE4MSwy
MyArMTkwLDExIEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMRXJyb3IuaCIKICNpbmNsdWRl
IDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVi
bGljL1dlYkZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAotI2lm
IFVTRShWOCkKLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5LmgiCi0jaW5jbHVk
ZSAiRE9NRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkZpbGVFbnRyeS5oIgotI2luY2x1ZGUgIlY4
RGlyZWN0b3J5RW50cnkuaCIKLSNpbmNsdWRlICJWOERPTUZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRl
ICJWOEZpbGVFbnRyeS5oIgotI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8
cHVibGljL1dlYkZpbGVTeXN0ZW0uaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yMTIsMTEgKzIwOSwxMiBAQCBzdGF0aWMgY29u
c3QgY2hhciogY29uc3Qgd2ViRnJhbWVBY3RpdmVDb3VudCA9ICJXZWJGcmFtZUFjdGl2ZUNvdW50
IjsKIC8vIHRoZSB0ZXh0IG9mIGVhY2ggZnJhbWUgaW4gdHVybiB0byB0aGUgfG91dHB1dHwgdXAg
dG8gfG1heENoYXJzfCBsZW5ndGguCiAvLwogLy8gVGhlIHxmcmFtZXwgbXVzdCBiZSBub24tbnVs
bC4KLXN0YXRpYyB2b2lkIGZyYW1lQ29udGVudEFzUGxhaW5UZXh0KHNpemVfdCBtYXhDaGFycywg
RnJhbWUqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PFVDaGFyPiogb3V0cHV0KQorLy8KKy8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIFN0cmluZ0J1aWxk
ZXIgcmF0aGVyIHRoYW4gVmVjdG9yPFVDaGFyPi4KK3N0YXRpYyB2b2lkIGZyYW1lQ29udGVudEFz
UGxhaW5UZXh0KHNpemVfdCBtYXhDaGFycywgRnJhbWUqIGZyYW1lLCBWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlm
ICghZG9jKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAg
IGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZnJhbWUtPnZpZXco
KSkKQEAgLTIyOCw5ICsyMjYsOSBAQCBzdGF0aWMgdm9pZCBmcmFtZUNvbnRlbnRBc1BsYWluVGV4
dChzaXplX3QgbWF4Q2hhcnMsIEZyYW1lKiBmcmFtZSwKICAgICAgICAgZnJhbWUtPnZpZXcoKS0+
bGF5b3V0KCk7CiAKICAgICAvLyBTZWxlY3QgdGhlIGRvY3VtZW50IGJvZHkuCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZShkb2MtPmNyZWF0ZVJhbmdlKCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UoZG9jdW1lbnQtPmNyZWF0ZVJhbmdlKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9u
ID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGRvYy0+Ym9keSgpLCBleGNlcHRp
b24pOworICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoZG9jdW1lbnQtPmJvZHkoKSwgZXhj
ZXB0aW9uKTsKIAogICAgIGlmICghZXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIFRoZSB0ZXh0IGl0
ZXJhdG9yIHdpbGwgd2FsayBub2RlcyBnaXZpbmcgdXMgdGV4dC4gVGhpcyBpcyBzaW1pbGFyIHRv
CkBAIC0zNjIsMzQgKzM2MCwzMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ByaW50ZWRQ
YWdlV2lkdGggLyBwYWdlUmVjdC53aWR0aCgpOwogICAgIH0KIAotICAgIC8vIFNwb29scyB0aGUg
cHJpbnRlZCBwYWdlLCBhIHN1YnJlY3Qgb2YgbV9mcmFtZS4gU2tpcCB0aGUgc2NhbGUgc3RlcC4K
KyAgICAvLyBTcG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIGZyYW1lKCkuIFNr
aXAgdGhlIHNjYWxlIHN0ZXAuCiAgICAgLy8gTmF0aXZlVGhlbWUgZG9lc24ndCBwbGF5IHdlbGwg
d2l0aCBzY2FsaW5nLiBTY2FsaW5nIGlzIGRvbmUgYnJvd3NlciBzaWRlCiAgICAgLy8gaW5zdGVh
ZC4gUmV0dXJucyB0aGUgc2NhbGUgdG8gYmUgYXBwbGllZC4KICAgICAvLyBPbiBMaW51eCwgd2Ug
ZG9uJ3QgaGF2ZSB0aGUgcHJvYmxlbSB3aXRoIE5hdGl2ZVRoZW1lLCBoZW5jZSB3ZSBsZXQgV2Vi
S2l0CiAgICAgLy8gZG8gdGhlIHNjYWxpbmcgYW5kIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgot
ICAgIHZpcnR1YWwgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dCYgY3R4LCBpbnQgcGFn
ZU51bWJlcikKKyAgICB2aXJ0dWFsIGZsb2F0IHNwb29sUGFnZShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGludCBwYWdlTnVtYmVyKQogICAgIHsKICAgICAgICAgSW50UmVjdCBwYWdlUmVjdCA9
IG1fcGFnZVJlY3RzW3BhZ2VOdW1iZXJdOwogICAgICAgICBmbG9hdCBzY2FsZSA9IG1fcHJpbnRl
ZFBhZ2VXaWR0aCAvIHBhZ2VSZWN0LndpZHRoKCk7CiAKLSAgICAgICAgY3R4LnNhdmUoKTsKKyAg
ICAgICAgY29udGV4dC5zYXZlKCk7CiAjaWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKLSAgICAg
ICAgY3R4LnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZSwgc2NhbGUpKTsKKyAgICAgICAg
Y29udGV4dC5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGUsIHNjYWxlKSk7CiAjZW5kaWYK
LSAgICAgICAgY3R4LnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oLXBhZ2VSZWN0LngoKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KC1wYWdlUmVjdC55KCkp
KTsKLSAgICAgICAgY3R4LmNsaXAocGFnZVJlY3QpOwotICAgICAgICBtX2ZyYW1lLT52aWV3KCkt
PnBhaW50Q29udGVudHMoJmN0eCwgcGFnZVJlY3QpOwotICAgICAgICBjdHgucmVzdG9yZSgpOwor
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oLXBhZ2VSZWN0Lngo
KSksIHN0YXRpY19jYXN0PGZsb2F0PigtcGFnZVJlY3QueSgpKSk7CisgICAgICAgIGNvbnRleHQu
Y2xpcChwYWdlUmVjdCk7CisgICAgICAgIGZyYW1lKCktPnZpZXcoKS0+cGFpbnRDb250ZW50cygm
Y29udGV4dCwgcGFnZVJlY3QpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICAgICAg
cmV0dXJuIHNjYWxlOwogICAgIH0KIAogICAgIHZvaWQgc3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFy
aWVzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIHBh
Z2VTaXplSW5QaXhlbHMpCiAgICAgewotICAgICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkg
fHwgIW1fZnJhbWUtPnZpZXcoKSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgaWYgKCFmcmFtZSgpLT5kb2N1bWVudCgpIHx8ICFmcmFtZSgpLT52aWV3KCkgfHwg
IWZyYW1lKCktPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgICAgIGZy
YW1lKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogCiAgICAgICAgIGZsb2F0IHBhZ2VI
ZWlnaHQ7CiAgICAgICAgIGNvbXB1dGVQYWdlUmVjdHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwg
MCksIHBhZ2VTaXplSW5QaXhlbHMpLCAwLCAwLCAxLCBwYWdlSGVpZ2h0KTsKQEAgLTQxMSw4ICs0
MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsK
ICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwg
MCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLCAwLCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKLSAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwg
Y3VycmVudEhlaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludFBvaW50KHBhZ2VXaWR0aCwgY3VycmVudEhlaWdodCkpOworICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5kcmF3TGluZShJbnRQb2ludCgwLCBjdXJyZW50SGVpZ2h0KSwgSW50UG9p
bnQocGFnZVdpZHRoLCBjdXJyZW50SGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0KIApAQCAtNDkyLDEyICs0ODgsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9wYWdlQ291bnQ7CiAgICAgfQogCi0gICAgLy8gU3Bv
b2xzIHRoZSBwcmludGVkIHBhZ2UsIGEgc3VicmVjdCBvZiBtX2ZyYW1lLiAgU2tpcCB0aGUgc2Nh
bGUgc3RlcC4KKyAgICAvLyBTcG9vbHMgdGhlIHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIGZy
YW1lKCkuIFNraXAgdGhlIHNjYWxlIHN0ZXAuCiAgICAgLy8gTmF0aXZlVGhlbWUgZG9lc24ndCBw
bGF5IHdlbGwgd2l0aCBzY2FsaW5nLiBTY2FsaW5nIGlzIGRvbmUgYnJvd3NlciBzaWRlCi0gICAg
Ly8gaW5zdGVhZC4gIFJldHVybnMgdGhlIHNjYWxlIHRvIGJlIGFwcGxpZWQuCi0gICAgdmlydHVh
bCBmbG9hdCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjdHgsIGludCBwYWdlTnVtYmVyKQor
ICAgIC8vIGluc3RlYWQuIFJldHVybnMgdGhlIHNjYWxlIHRvIGJlIGFwcGxpZWQuCisgICAgdmly
dHVhbCBmbG9hdCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBpbnQgcGFnZU51
bWJlcikKICAgICB7Ci0gICAgICAgIG1fcGx1Z2luLT5wcmludFBhZ2UocGFnZU51bWJlciwgJmN0
eCk7CisgICAgICAgIG1fcGx1Z2luLT5wcmludFBhZ2UocGFnZU51bWJlciwgJmNvbnRleHQpOwog
ICAgICAgICByZXR1cm4gMS4wOwogICAgIH0KIApAQCAtNTI3LDExICs1MjMsNyBAQCBXZWJGcmFt
ZUltcGw6OkZpbmRNYXRjaDo6RmluZE1hdGNoKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlLCBpbnQg
b3JkaW5hbCkKIAogY2xhc3MgV2ViRnJhbWVJbXBsOjpEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hl
cyB7CiBwdWJsaWM6Ci0gICAgRGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXMoV2ViRnJhbWVJbXBs
KiB3ZWJGcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWRlbnRpZmll
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNlYXJj
aFRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViRmluZE9wdGlv
bnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNldCkK
KyAgICBEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcyhXZWJGcmFtZUltcGwqIHdlYkZyYW1lLCBp
bnQgaWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LCBjb25zdCBXZWJGaW5k
T3B0aW9ucyYgb3B0aW9ucywgYm9vbCByZXNldCkKICAgICAgICAgOiBtX3RpbWVyKHRoaXMsICZE
ZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlczo6ZG9UaW1lb3V0KQogICAgICAgICAsIG1fd2ViRnJh
bWUod2ViRnJhbWUpCiAgICAgICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCkBAIC01NDUs
OCArNTM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGRvVGltZW91dChUaW1lcjxE
ZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcz4qKQogICAgIHsKLSAgICAgICAgbV93ZWJGcmFtZS0+
Y2FsbFNjb3BlU3RyaW5nTWF0Y2hlcygKLSAgICAgICAgICAgIHRoaXMsIG1faWRlbnRpZmllciwg
bV9zZWFyY2hUZXh0LCBtX29wdGlvbnMsIG1fcmVzZXQpOworICAgICAgICBtX3dlYkZyYW1lLT5j
YWxsU2NvcGVTdHJpbmdNYXRjaGVzKHRoaXMsIG1faWRlbnRpZmllciwgbV9zZWFyY2hUZXh0LCBt
X29wdGlvbnMsIG1fcmVzZXQpOwogICAgIH0KIAogICAgIFRpbWVyPERlZmVycmVkU2NvcGVTdHJp
bmdNYXRjaGVzPiBtX3RpbWVyOwpAQCAtNTg5LDIzICs1ODAsMjIgQEAgV2ViRnJhbWUqIFdlYkZy
YW1lOjpmcmFtZUZvckNvbnRleHQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKIAog
V2ViRnJhbWUqIFdlYkZyYW1lOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoY29uc3QgV2ViRWxlbWVu
dCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVs
ZW1lbnQoCi0gICAgICAgIFBhc3NSZWZQdHI8RWxlbWVudD4oZWxlbWVudCkuZ2V0KCkpOworICAg
IHJldHVybiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxlbWVudChQYXNzUmVmUHRyPEVs
ZW1lbnQ+KGVsZW1lbnQpLmdldCgpKTsKIH0KIAogV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6dW5p
cXVlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFt
ZSgpOworICAgIHJldHVybiBmcmFtZSgpLT50cmVlKCktPnVuaXF1ZU5hbWUoKTsKIH0KIAogV2Vi
U3RyaW5nIFdlYkZyYW1lSW1wbDo6YXNzaWduZWROYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9mcmFtZS0+dHJlZSgpLT5uYW1lKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPnRyZWUoKS0+bmFt
ZSgpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6c2V0TmFtZShjb25zdCBXZWJTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgbV9mcmFtZS0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOworICAgIGZyYW1lKCkt
PnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKIH0KIAogbG9uZyBsb25nIFdlYkZyYW1lSW1wbDo6aWRl
bnRpZmllcigpIGNvbnN0CkBAIC02MTUsMzkgKzYwNSwzNSBAQCBsb25nIGxvbmcgV2ViRnJhbWVJ
bXBsOjppZGVudGlmaWVyKCkgY29uc3QKIAogV2ViVmVjdG9yPFdlYkljb25VUkw+IFdlYkZyYW1l
SW1wbDo6aWNvblVSTHMoaW50IGljb25UeXBlcykgY29uc3QKIHsKLSAgICBGcmFtZUxvYWRlciog
ZnJhbWVMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKICAgICAvLyBUaGUgVVJMIHRvIHRoZSBp
Y29uIG1heSBiZSBpbiB0aGUgaGVhZGVyLiBBcyBzdWNoLCBvbmx5CiAgICAgLy8gYXNrIHRoZSBs
b2FkZXIgZm9yIHRoZSBpY29uIGlmIGl0J3MgZmluaXNoZWQgbG9hZGluZy4KLSAgICBpZiAoZnJh
bWVMb2FkZXItPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZUNvbXBsZXRlKQotICAgICAgICByZXR1cm4g
ZnJhbWVMb2FkZXItPmljb24oKS0+dXJsc0ZvclR5cGVzKGljb25UeXBlcyk7CisgICAgaWYgKGZy
YW1lKCktPmxvYWRlcigpLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVDb21wbGV0ZSkKKyAgICAgICAg
cmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5pY29uKCktPnVybHNGb3JUeXBlcyhpY29uVHlwZXMp
OwogICAgIHJldHVybiBXZWJWZWN0b3I8V2ViSWNvblVSTD4oKTsKIH0KIAogV2ViU2l6ZSBXZWJG
cmFtZUltcGw6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWVWaWV3KCk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIHJldHVybiB2aWV3LT5zY3JvbGxP
ZmZzZXQoKTsKLQotICAgIHJldHVybiBXZWJTaXplKCk7CisgICAgaWYgKCF2aWV3KQorICAgICAg
ICByZXR1cm4gV2ViU2l6ZSgpOworICAgIHJldHVybiB2aWV3LT5zY3JvbGxPZmZzZXQoKTsKIH0K
IAogV2ViU2l6ZSBXZWJGcmFtZUltcGw6Om1pbmltdW1TY3JvbGxPZmZzZXQoKSBjb25zdAogewog
ICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lVmlldygpOwotICAgIGlmICh2aWV3KQotICAgICAg
ICByZXR1cm4gdmlldy0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgLSBJbnRQb2ludCgpOwotCi0g
ICAgcmV0dXJuIFdlYlNpemUoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBXZWJT
aXplKCk7CisgICAgcmV0dXJuIHZpZXctPm1pbmltdW1TY3JvbGxQb3NpdGlvbigpIC0gSW50UG9p
bnQoKTsKIH0KIAogV2ViU2l6ZSBXZWJGcmFtZUltcGw6Om1heGltdW1TY3JvbGxPZmZzZXQoKSBj
b25zdAogewogICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lVmlldygpOwotICAgIGlmICh2aWV3
KQotICAgICAgICByZXR1cm4gdmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBJbnRQb2lu
dCgpOwotCi0gICAgcmV0dXJuIFdlYlNpemUoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybiBXZWJTaXplKCk7CisgICAgcmV0dXJuIHZpZXctPm1heGltdW1TY3JvbGxQb3NpdGlvbigp
IC0gSW50UG9pbnQoKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnNldFNjcm9sbE9mZnNldChj
b25zdCBXZWJTaXplJiBvZmZzZXQpCkBAIC02NjMsMTggKzY0OSwxNyBAQCBXZWJTaXplIFdlYkZy
YW1lSW1wbDo6Y29udGVudHNTaXplKCkgY29uc3QKIAogaW50IFdlYkZyYW1lSW1wbDo6Y29udGVu
dHNQcmVmZXJyZWRXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkg
JiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKSB7CisgICAgaWYgKGZyYW1lKCkt
PmRvY3VtZW50KCkgJiYgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKSB7CiAgICAg
ICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCi0g
ICAgICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPm1pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpOworICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
cmVuZGVyVmlldygpLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKICAgICB9CiAgICAgcmV0
dXJuIDA7CiB9CiAKIGludCBXZWJGcmFtZUltcGw6OmRvY3VtZW50RWxlbWVudFNjcm9sbEhlaWdo
dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgaWYgKGZyYW1l
KCktPmRvY3VtZW50KCkgJiYgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkp
CisgICAgICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+
c2Nyb2xsSGVpZ2h0KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTY4NSwxMiArNjcwLDEyIEBA
IGJvb2wgV2ViRnJhbWVJbXBsOjpoYXNWaXNpYmxlQ29udGVudCgpIGNvbnN0CiAKIGJvb2wgV2Vi
RnJhbWVJbXBsOjpoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9mcmFtZSAmJiBtX2ZyYW1lLT52aWV3KCkgJiYgbV9mcmFtZS0+dmlldygpLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCk7CisgICAgcmV0dXJuIGZyYW1lKCkgJiYgZnJhbWUoKS0+dmlldygpICYmIGZy
YW1lKCktPnZpZXcoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogfQogCiBib29sIFdlYkZyYW1l
SW1wbDo6aGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1l
ICYmIG1fZnJhbWUtPnZpZXcoKSAmJiBtX2ZyYW1lLT52aWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFy
KCk7CisgICAgcmV0dXJuIGZyYW1lKCkgJiYgZnJhbWUoKS0+dmlldygpICYmIGZyYW1lKCktPnZp
ZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKTsKIH0KIAogV2ViVmlldyogV2ViRnJhbWVJbXBsOjp2
aWV3KCkgY29uc3QKQEAgLTcwMCw2NiArNjg1LDc2IEBAIFdlYlZpZXcqIFdlYkZyYW1lSW1wbDo6
dmlldygpIGNvbnN0CiAKIFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6Om9wZW5lcigpIGNvbnN0CiB7
Ci0gICAgRnJhbWUqIG9wZW5lciA9IDA7Ci0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG9wZW5l
ciA9IG1fZnJhbWUtPmxvYWRlcigpLT5vcGVuZXIoKTsKLSAgICByZXR1cm4gZnJvbUZyYW1lKG9w
ZW5lcik7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
ZnJvbUZyYW1lKGZyYW1lKCktPmxvYWRlcigpLT5vcGVuZXIoKSk7CiB9CiAKLXZvaWQgV2ViRnJh
bWVJbXBsOjpzZXRPcGVuZXIoY29uc3QgV2ViRnJhbWUqIGZyYW1lKQordm9pZCBXZWJGcmFtZUlt
cGw6OnNldE9wZW5lcihjb25zdCBXZWJGcmFtZSogd2ViRnJhbWUpCiB7Ci0gICAgbV9mcmFtZS0+
bG9hZGVyKCktPnNldE9wZW5lcihmcmFtZSA/Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFdl
YkZyYW1lSW1wbCo+KGZyYW1lKS0+bV9mcmFtZSA6IDApOworICAgIGZyYW1lKCktPmxvYWRlcigp
LT5zZXRPcGVuZXIod2ViRnJhbWUgPyBzdGF0aWNfY2FzdDxjb25zdCBXZWJGcmFtZUltcGwqPih3
ZWJGcmFtZSktPmZyYW1lKCkgOiAwKTsKIH0KIAogV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6cGFy
ZW50KCkgY29uc3QKIHsKLSAgICBGcmFtZSogcGFyZW50ID0gMDsKLSAgICBpZiAobV9mcmFtZSkK
LSAgICAgICAgcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKLSAgICByZXR1cm4g
ZnJvbUZyYW1lKHBhcmVudCk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1lKCktPnRyZWUoKS0+cGFyZW50KCkpOwogfQogCiBX
ZWJGcmFtZSogV2ViRnJhbWVJbXBsOjp0b3AoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lKQot
ICAgICAgICByZXR1cm4gZnJvbUZyYW1lKG1fZnJhbWUtPnRyZWUoKS0+dG9wKCkpOwotCi0gICAg
cmV0dXJuIDA7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gZnJvbUZyYW1lKGZyYW1lKCktPnRyZWUoKS0+dG9wKCkpOwogfQogCiBXZWJGcmFtZSogV2Vi
RnJhbWVJbXBsOjpmaXJzdENoaWxkKCkgY29uc3QKIHsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgpLT5maXJz
dENoaWxkKCkpOwogfQogCiBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpsYXN0Q2hpbGQoKSBjb25z
dAogeworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZy
b21GcmFtZShmcmFtZSgpLT50cmVlKCktPmxhc3RDaGlsZCgpKTsKIH0KIAogV2ViRnJhbWUqIFdl
YkZyYW1lSW1wbDo6bmV4dFNpYmxpbmcoKSBjb25zdAogeworICAgIGlmICghZnJhbWUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZSgpLT50cmVlKCktPm5l
eHRTaWJsaW5nKCkpOwogfQogCiBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpwcmV2aW91c1NpYmxp
bmcoKSBjb25zdAogeworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
cmV0dXJuIGZyb21GcmFtZShmcmFtZSgpLT50cmVlKCktPnByZXZpb3VzU2libGluZygpKTsKIH0K
IAogV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6dHJhdmVyc2VOZXh0KGJvb2wgd3JhcCkgY29uc3QK
IHsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBmcm9t
RnJhbWUoZnJhbWUoKS0+dHJlZSgpLT50cmF2ZXJzZU5leHRXaXRoV3JhcCh3cmFwKSk7CiB9CiAK
IFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6OnRyYXZlcnNlUHJldmlvdXMoYm9vbCB3cmFwKSBjb25z
dAogeworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZy
b21GcmFtZShmcmFtZSgpLT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcCh3cmFwKSk7
CiB9CiAKIFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5TmFtZShjb25zdCBXZWJT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1lKCktPnRyZWUoKS0+Y2hpbGQobmFtZSkpOwog
fQogCkBAIC03NjgsMzMgKzc2MywyNSBAQCBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpmaW5kQ2hp
bGRCeUV4cHJlc3Npb24oY29uc3QgV2ViU3RyaW5nJiB4cGF0aCkgY29uc3QKICAgICBpZiAoeHBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUo
KS0+ZG9jdW1lbnQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBhc3NSZWZQ
dHI8WFBhdGhSZXN1bHQ+IHhwYXRoUmVzdWx0ID0KLSAgICAgICAgZG9jdW1lbnQtPmV2YWx1YXRl
KHhwYXRoLAotICAgICAgICBkb2N1bWVudCwKLSAgICAgICAgMCwgLy8gbmFtZXNwYWNlCi0gICAg
ICAgIFhQYXRoUmVzdWx0OjpPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSwKLSAgICAgICAgMCwg
Ly8gWFBhdGhSZXN1bHQgb2JqZWN0Ci0gICAgICAgIGVjKTsKKyAgICBSZWZQdHI8WFBhdGhSZXN1
bHQ+IHhwYXRoUmVzdWx0ID0gZG9jdW1lbnQtPmV2YWx1YXRlKHhwYXRoLCBkb2N1bWVudCwgMCwg
WFBhdGhSZXN1bHQ6Ok9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFLCAwLCBlYyk7CiAgICAgaWYg
KCF4cGF0aFJlc3VsdCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBOb2RlKiBub2RlID0geHBh
dGhSZXN1bHQtPml0ZXJhdGVOZXh0KGVjKTsKLQogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNG
cmFtZU93bmVyRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIGZyYW1lRWxlbWVudCA9Ci0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxGcmFtZU93
bmVyRWxlbWVudCo+KG5vZGUpOworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAgcmV0
dXJuIGZyb21GcmFtZShmcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpKTsKIH0KIAogV2ViRG9j
dW1lbnQgV2ViRnJhbWVJbXBsOjpkb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1l
IHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghZnJhbWUoKSB8fCAhZnJhbWUoKS0+
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFdlYkRvY3VtZW50KCk7Ci0gICAgcmV0dXJuIFdl
YkRvY3VtZW50KG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBXZWJEb2N1bWVudChm
cmFtZSgpLT5kb2N1bWVudCgpKTsKIH0KIAogV2ViQW5pbWF0aW9uQ29udHJvbGxlciogV2ViRnJh
bWVJbXBsOjphbmltYXRpb25Db250cm9sbGVyKCkKQEAgLTgwNCw1OSArNzkxLDQ5IEBAIFdlYkFu
aW1hdGlvbkNvbnRyb2xsZXIqIFdlYkZyYW1lSW1wbDo6YW5pbWF0aW9uQ29udHJvbGxlcigpCiAK
IFdlYlBlcmZvcm1hbmNlIFdlYkZyYW1lSW1wbDo6cGVyZm9ybWFuY2UoKSBjb25zdAogewotICAg
IGlmICghbV9mcmFtZSkKKyAgICBpZiAoIWZyYW1lKCkpCiAgICAgICAgIHJldHVybiBXZWJQZXJm
b3JtYW5jZSgpOwotCi0gICAgcmV0dXJuIFdlYlBlcmZvcm1hbmNlKG1fZnJhbWUtPmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLT5wZXJmb3JtYW5jZSgpKTsKKyAgICByZXR1cm4gV2ViUGVyZm9ybWFu
Y2UoZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnBlcmZvcm1hbmNlKCkpOwogfQog
CiBOUE9iamVjdCogV2ViRnJhbWVJbXBsOjp3aW5kb3dPYmplY3QoKSBjb25zdAogewotICAgIGlm
ICghbV9mcmFtZSkKKyAgICBpZiAoIWZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1fZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworICAgIHJl
dHVybiBmcmFtZSgpLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZUltcGw6OmJpbmRUb1dpbmRvd09iamVjdChjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IE5QT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKG1fZnJhbWUpOwotICAgIGlmICghbV9m
cmFtZSB8fCAhbV9mcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9F
eGVjdXRlU2NyaXB0KSkKKyAgICBpZiAoIWZyYW1lKCkgfHwgIWZyYW1lKCktPnNjcmlwdCgpLT5j
YW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyBrZXkgPSBuYW1lOwotI2lmIFVTRShWOCkKLSAgICBtX2ZyYW1lLT5z
Y3JpcHQoKS0+YmluZFRvV2luZG93T2JqZWN0KG1fZnJhbWUsIGtleSwgb2JqZWN0KTsKLSNlbHNl
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgorICAgIGZyYW1lKCktPnNjcmlwdCgpLT5i
aW5kVG9XaW5kb3dPYmplY3QoZnJhbWUoKSwgU3RyaW5nKG5hbWUpLCBvYmplY3QpOwogfQogCiB2
b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBXZWJTY3JpcHRTb3VyY2UmIHNv
dXJjZSkKIHsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CiAgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9u
KE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRMaW5lKSwgT3JkaW5h
bE51bWJlcjo6Zmlyc3QoKSk7Ci0gICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQo
Ci0gICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0
aW9uKSk7CisgICAgZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNl
Q29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKTsKIH0KIAotdm9pZCBXZWJG
cmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCi0gICAgaW50IHdvcmxkSUQs
IGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNpZ25lZCBudW1Tb3VyY2VzLAot
ICAgIGludCBleHRlbnNpb25Hcm91cCkKK3ZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJj
ZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIFZl
Y3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2VzOworICAgIEFTU0VSVChmcmFtZSgpKTsKIAor
ICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2VzOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKICAgICAgICAgVGV4dFBvc2l0aW9uIHBvc2l0
aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5l
KSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSk7Ci0gICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlw
dFNvdXJjZUNvZGUoCi0gICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291cmNlc0luW2ld
LnVybCwgcG9zaXRpb24pKTsKKyAgICAgICAgc291cmNlcy5hcHBlbmQoU2NyaXB0U291cmNlQ29k
ZShzb3VyY2VzSW5baV0uY29kZSwgc291cmNlc0luW2ldLnVybCwgcG9zaXRpb24pKTsKICAgICB9
CiAKLSAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJ
RCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsIDApOworICAgIGZyYW1lKCktPnNjcmlwdCgpLT5l
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCwg
MCk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmln
aW4oaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikK
IHsKLSAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
KHdvcmxkSUQsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKyAgICBBU1NFUlQoZnJhbWUoKSk7Cisg
ICAgZnJhbWUoKS0+c2NyaXB0KCktPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbih3b3Js
ZElELCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjphZGRN
ZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdlJiBtZXNzYWdlKQpAQCAtODg3
LDI3ICs4NjQsMjMgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoY29u
c3QgV2ViQ29uc29sZU1lc3NhZ2UmIG1lc3NhZ2UpCiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpjb2xs
ZWN0R2FyYmFnZSgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghZnJhbWUoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghbV9mcmFtZS0+c2V0dGluZ3MoKS0+aXNTY3JpcHRFbmFi
bGVkKCkpCisgICAgaWYgKCFmcmFtZSgpLT5zZXR0aW5ncygpLT5pc1NjcmlwdEVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gdGhlIFNjcmlwdENv
bnRyb2xsZXIgYW5kIG1ha2UgaXQgSlMgbmV1dHJhbC4KLSNpZiBVU0UoVjgpCiAgICAgVjhHQ0Nv
bnRyb2xsZXI6OmNvbGxlY3RHYXJiYWdlKCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0jZW5kaWYKIH0KIAogYm9vbCBXZWJGcmFtZUltcGw6OmNoZWNrSWZSdW5JbnNlY3VyZUNvbnRl
bnQoY29uc3QgV2ViVVJMJiB1cmwpIGNvbnN0CiB7Ci0gICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9h
ZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0gICAgcmV0dXJuIGZyYW1lTG9hZGVyLT5jaGVja0lm
UnVuSW5zZWN1cmVDb250ZW50KG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCks
IHVybCk7CisgICAgQVNTRVJUKGZyYW1lKCkpOworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIo
KS0+Y2hlY2tJZlJ1bkluc2VjdXJlQ29udGVudChmcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLCB1cmwpOwogfQogCi0jaWYgVVNFKFY4KQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKGNvbnN0IFdlYlNjcmlw
dFNvdXJjZSYgc291cmNlKQogeworICAgIEFTU0VSVChmcmFtZSgpKTsKKwogICAgIC8vIEZJWE1F
OiBUaGlzIGZha2UgdXNlciBnZXN0dXJlIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBidW5jaCBvZiBw
eWF1dG8KICAgICAvLyB0ZXN0cyBwYXNzLiBJZiB0aGlzIGlzbid0IG5lZWRlZCBpbiBub24tdGVz
dCBzaXR1YXRpb25zLCB3ZSBzaG91bGQKICAgICAvLyBjb25zaWRlciByZW1vdmluZyB0aGlzIGNv
ZGUgYW5kIGNoYW5naW5nIHRoZSB0ZXN0cy4KQEAgLTkxNSwxMyArODg4LDEzIEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZShj
b25zdCBXZWJTY3JpcHRTCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKIAogICAgIFRleHRQb3NpdGlvbiBw
b3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSks
IE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpOwotICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+
ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBw
b3NpdGlvbikpLnY4VmFsdWUoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRp
b24pKS52OFZhbHVlKCk7CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKAotICAgIGludCB3b3JsZElELCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNv
dXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywKLSAgICBpbnQgZXh0ZW5zaW9uR3JvdXAsIFdl
YlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+KiByZXN1bHRzKQordm9pZCBXZWJGcmFtZUlt
cGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNj
cmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNpZ25lZCBudW1Tb3VyY2VzLCBpbnQgZXh0ZW5zaW9u
R3JvdXAsIFdlYlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+KiByZXN1bHRzKQogeworICAg
IEFTU0VSVChmcmFtZSgpKTsKKwogICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2Vz
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNvdXJjZXM7ICsraSkgewpAQCAt
OTMxLDc2ICs5MDQsNjkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xh
dGVkV29ybGQoCiAKICAgICBpZiAocmVzdWx0cykgewogICAgICAgICBWZWN0b3I8U2NyaXB0VmFs
dWU+IHNjcmlwdFJlc3VsdHM7Ci0gICAgICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCwgJnNjcmlwdFJl
c3VsdHMpOworICAgICAgICBmcmFtZSgpLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsICZzY3JpcHRSZXN1bHRzKTsKICAg
ICAgICAgV2ViVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4gdjhSZXN1bHRzKHNjcmlwdFJl
c3VsdHMuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjcmlwdFJl
c3VsdHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB2OFJlc3VsdHNbaV0gPSB2ODo6TG9jYWw8
djg6OlZhbHVlPjo6TmV3KHNjcmlwdFJlc3VsdHNbaV0udjhWYWx1ZSgpKTsKICAgICAgICAgcmVz
dWx0cy0+c3dhcCh2OFJlc3VsdHMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5zY3Jp
cHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9u
R3JvdXAsIDApOworICAgICAgICBmcmFtZSgpLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVk
V29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsIDApOwogfQogCi0vLyBDYWxs
IHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiByZWNlaXZlciBhbmQgYXJndW1lbnRzLCBieXBh
c3NpbmcgY2FuRXhlY3V0ZVNjcmlwdHMuCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJ
bXBsOjpjYWxsRnVuY3Rpb25FdmVuSWZTY3JpcHREaXNhYmxlZCh2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlY2Vp
dmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGFyZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gYXJndltdKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1lSW1wbDo6Y2FsbEZ1
bmN0aW9uRXZlbklmU2NyaXB0RGlzYWJsZWQodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0
aW9uLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlY2VpdmVyLCBpbnQgYXJnYywgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGFyZ3ZbXSkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCktPmNh
bGxGdW5jdGlvbkV2ZW5JZlNjcmlwdERpc2FibGVkKGZ1bmN0aW9uLCByZWNlaXZlciwgYXJnYywg
YXJndikudjhWYWx1ZSgpOworICAgIEFTU0VSVChmcmFtZSgpKTsKKyAgICByZXR1cm4gZnJhbWUo
KS0+c2NyaXB0KCktPmNhbGxGdW5jdGlvbkV2ZW5JZlNjcmlwdERpc2FibGVkKGZ1bmN0aW9uLCBy
ZWNlaXZlciwgYXJnYywgYXJndikudjhWYWx1ZSgpOwogfQogCi0vLyBSZXR1cm5zIHRoZSBWOCBj
b250ZXh0IGZvciB0aGlzIGZyYW1lLCBvciBhbiBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9u
ZS4KIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gV2ViRnJhbWVJbXBsOjptYWluV29ybGRTY3JpcHRD
b250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFmcmFtZSgpKQog
ICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwotCi0gICAgcmV0dXJuIFNj
cmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQobV9mcmFtZSk7CisgICAgcmV0dXJuIFNj
cmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQoZnJhbWUoKSk7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmNyZWF0ZUZpbGVTeXN0ZW0oV2ViRmlsZVN5c3Rl
bTo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgcGF0aCkKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmNyZWF0ZUZpbGVTeXN0ZW0oV2ViRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgcGF0aCkKIHsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CiAgICAgcmV0dXJuIHRvVjgoRE9NRmls
ZVN5c3RlbTo6Y3JlYXRlKGZyYW1lKCktPmRvY3VtZW50KCksIG5hbWUsIHN0YXRpY19jYXN0PFdl
YkNvcmU6OkZpbGVTeXN0ZW1UeXBlPih0eXBlKSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHBhdGgu
dXRmOCgpLmRhdGEoKSksIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUoKSkpOwogfQog
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpjcmVhdGVTZXJpYWxpemFibGVG
aWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHBhdGgpCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpjcmVhdGVTZXJpYWxpemFibGVGaWxlU3lzdGVtKFdlYkZp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJp
bmcmIHBhdGgpCiB7Ci0gICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZzID0gRE9NRmlsZVN5c3Rl
bTo6Y3JlYXRlKGZyYW1lKCktPmRvY3VtZW50KCksIG5hbWUsIHN0YXRpY19jYXN0PFdlYkNvcmU6
OkZpbGVTeXN0ZW1UeXBlPih0eXBlKSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHBhdGgudXRmOCgp
LmRhdGEoKSksIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUoKSk7Ci0gICAgZnMtPm1h
a2VDbG9uYWJsZSgpOwotICAgIHJldHVybiB0b1Y4KGZzLnJlbGVhc2UoKSk7CisgICAgQVNTRVJU
KGZyYW1lKCkpOworICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtID0gRE9NRmls
ZVN5c3RlbTo6Y3JlYXRlKGZyYW1lKCktPmRvY3VtZW50KCksIG5hbWUsIHN0YXRpY19jYXN0PFdl
YkNvcmU6OkZpbGVTeXN0ZW1UeXBlPih0eXBlKSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHBhdGgu
dXRmOCgpLmRhdGEoKSksIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUoKSk7CisgICAg
ZmlsZVN5c3RlbS0+bWFrZUNsb25hYmxlKCk7CisgICAgcmV0dXJuIHRvVjgoZmlsZVN5c3RlbS5y
ZWxlYXNlKCkpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpjcmVh
dGVGaWxlRW50cnkoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZmlsZVN5
c3RlbU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiBmaWxlU3lzdGVtUGF0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZpbGVQ
YXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaXNEaXJlY3RvcnkpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpj
cmVhdGVGaWxlRW50cnkoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBXZWJTdHJpbmcm
IGZpbGVTeXN0ZW1OYW1lLCBjb25zdCBXZWJTdHJpbmcmIGZpbGVTeXN0ZW1QYXRoLCBjb25zdCBX
ZWJTdHJpbmcmIGZpbGVQYXRoLCBib29sIGlzRGlyZWN0b3J5KQogeworICAgIEFTU0VSVChmcmFt
ZSgpKTsKKwogICAgIFJlZlB0cjxET01GaWxlU3lzdGVtQmFzZT4gZmlsZVN5c3RlbSA9IERPTUZp
bGVTeXN0ZW06OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBmaWxlU3lzdGVtTmFtZSwgc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6RmlsZVN5c3RlbVR5cGU+KHR5cGUpLCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgZmlsZVN5c3RlbVBhdGgudXRmOCgpLmRhdGEoKSksIEFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtOjpjcmVhdGUoKSk7CiAgICAgaWYgKGlzRGlyZWN0b3J5KQogICAgICAgICByZXR1cm4gdG9W
OChEaXJlY3RvcnlFbnRyeTo6Y3JlYXRlKGZpbGVTeXN0ZW0sIGZpbGVQYXRoKSk7CiAgICAgcmV0
dXJuIHRvVjgoRmlsZUVudHJ5OjpjcmVhdGUoZmlsZVN5c3RlbSwgZmlsZVBhdGgpKTsKIH0KLSNl
bmRpZgogCiB2b2lkIFdlYkZyYW1lSW1wbDo6cmVsb2FkKGJvb2wgaWdub3JlQ2FjaGUpCiB7Ci0g
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3Rh
dGUoKTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKGlnbm9yZUNhY2hlKTsKKyAgICBB
U1NFUlQoZnJhbWUoKSk7CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2F2ZURv
Y3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+cmVsb2FkKGln
bm9yZUNhY2hlKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnJlbG9hZFdpdGhPdmVycmlkZVVS
TChjb25zdCBXZWJVUkwmIG92ZXJyaWRlVXJsLCBib29sIGlnbm9yZUNhY2hlKQogewotICAgIG1f
ZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKCk7
Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZVVSTChvdmVycmlkZVVy
bCwgaWdub3JlQ2FjaGUpOworICAgIEFTU0VSVChmcmFtZSgpKTsKKyAgICBmcmFtZSgpLT5sb2Fk
ZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgIGZyYW1l
KCktPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVVUkwob3ZlcnJpZGVVcmwsIGlnbm9yZUNh
Y2hlKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRSZXF1ZXN0KGNvbnN0IFdlYlVSTFJl
cXVlc3QmIHJlcXVlc3QpCiB7CisgICAgQVNTRVJUKGZyYW1lKCkpOwogICAgIEFTU0VSVCghcmVx
dWVzdC5pc051bGwoKSk7CiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QgPSByZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCk7CiAKQEAgLTEwMDksMjkgKzk3NSwyNSBA
QCB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZFJlcXVlc3QoY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVx
dWVzdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5s
b2FkKHJlc291cmNlUmVxdWVzdCwgZmFsc2UpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2Fk
KHJlc291cmNlUmVxdWVzdCwgZmFsc2UpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhp
c3RvcnlJdGVtKGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBpdGVtKQogeworICAgIEFTU0VSVChmcmFt
ZSgpKTsKICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGhpc3RvcnlJdGVtID0gUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4oaXRlbSk7CiAgICAgQVNTRVJUKGhpc3RvcnlJdGVtKTsKIAotICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5wcmVwYXJlRm9ySGlzdG9yeU5hdmlnYXRpb24oKTsKLSAgICBSZWZQdHI8
SGlzdG9yeUl0ZW0+IGN1cnJlbnRJdGVtID0gbV9mcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+
Y3VycmVudEl0ZW0oKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+cHJlcGFyZUZvckhpc3RvcnlO
YXZpZ2F0aW9uKCk7CisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IGZyYW1l
KCktPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCk7CiAgICAgbV9pblNhbWVEb2N1
bWVudEhpc3RvcnlMb2FkID0gY3VycmVudEl0ZW0gJiYgY3VycmVudEl0ZW0tPnNob3VsZERvU2Ft
ZURvY3VtZW50TmF2aWdhdGlvblRvKGhpc3RvcnlJdGVtLmdldCgpKTsKLSAgICBtX2ZyYW1lLT5w
YWdlKCktPmdvVG9JdGVtKGhpc3RvcnlJdGVtLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgZnJhbWUoKS0+
cGFnZSgpLT5nb1RvSXRlbShoaXN0b3J5SXRlbS5nZXQoKSwgRnJhbWVMb2FkVHlwZUluZGV4ZWRC
YWNrRm9yd2FyZCk7CiAgICAgbV9pblNhbWVEb2N1bWVudEhpc3RvcnlMb2FkID0gZmFsc2U7CiB9
CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB0ZXh0RW5jb2RpbmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJMJiBiYXNlVVJMLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlVSTCYgdW5yZWFjaGFibGVVUkwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlKQordm9pZCBXZWJGcmFtZUltcGw6
OmxvYWREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEsIGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IFdlYlN0cmluZyYgdGV4dEVuY29kaW5nLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwsIGNv
bnN0IFdlYlVSTCYgdW5yZWFjaGFibGVVUkwsIGJvb2wgcmVwbGFjZSkKIHsKKyAgICBBU1NFUlQo
ZnJhbWUoKSk7CiAgICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRhKGRhdGEsIG1pbWVUeXBlLCB0
ZXh0RW5jb2RpbmcsIHVucmVhY2hhYmxlVVJMKTsKICAgICBBU1NFUlQoc3Vic3REYXRhLmlzVmFs
aWQoKSk7CiAKQEAgLTEwNDMsNzggKzEwMDUsNzQgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRE
YXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEsCiAgICAgLy8gaW5zdGVhZCBvZiB0aGUgY3VycmVudGx5
IGxvYWRlZCBVUkwuCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CiAgICAgaWYgKHJlcGxh
Y2UgJiYgIXVucmVhY2hhYmxlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmVxdWVzdCA9IG1fZnJh
bWUtPmxvYWRlcigpLT5vcmlnaW5hbFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdCA9IGZyYW1l
KCktPmxvYWRlcigpLT5vcmlnaW5hbFJlcXVlc3QoKTsKICAgICByZXF1ZXN0LnNldFVSTChiYXNl
VVJMKTsKIAotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIHN1YnN0RGF0YSwg
ZmFsc2UpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIHN1YnN0RGF0YSwg
ZmFsc2UpOwogICAgIGlmIChyZXBsYWNlKSB7CiAgICAgICAgIC8vIERvIHRoaXMgdG8gZm9yY2Ug
V2ViS2l0IHRvIHRyZWF0IHRoZSBsb2FkIGFzIHJlcGxhY2luZyB0aGUgY3VycmVudGx5CiAgICAg
ICAgIC8vIGxvYWRlZCBwYWdlLgotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+c2V0UmVwbGFj
aW5nKCk7CisgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5zZXRSZXBsYWNpbmcoKTsKICAgICB9
CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkSFRNTFN0cmluZyhjb25zdCBXZWJEYXRhJiBk
YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlVSTCYgYmFz
ZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJVUkwmIHVu
cmVhY2hhYmxlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVw
bGFjZSkKK3ZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkSFRNTFN0cmluZyhjb25zdCBXZWJEYXRhJiBk
YXRhLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwsIGNvbnN0IFdlYlVSTCYgdW5yZWFjaGFibGVVUkws
IGJvb2wgcmVwbGFjZSkKIHsKLSAgICBsb2FkRGF0YShkYXRhLAotICAgICAgICAgICAgIFdlYlN0
cmluZzo6ZnJvbVVURjgoInRleHQvaHRtbCIpLAotICAgICAgICAgICAgIFdlYlN0cmluZzo6ZnJv
bVVURjgoIlVURi04IiksCi0gICAgICAgICAgICAgYmFzZVVSTCwKLSAgICAgICAgICAgICB1bnJl
YWNoYWJsZVVSTCwKLSAgICAgICAgICAgICByZXBsYWNlKTsKKyAgICBBU1NFUlQoZnJhbWUoKSk7
CisgICAgbG9hZERhdGEoZGF0YSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9odG1sIiksIFdl
YlN0cmluZzo6ZnJvbVVURjgoIlVURi04IiksIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJMLCByZXBs
YWNlKTsKIH0KIAogYm9vbCBXZWJGcmFtZUltcGw6OmlzTG9hZGluZygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX2ZyYW1lKQorICAgIGlmICghZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+aXNMb2FkaW5nKCk7CisgICAgcmV0dXJuIGZy
YW1lKCktPmxvYWRlcigpLT5pc0xvYWRpbmcoKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnN0
b3BMb2FkaW5nKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICByZXR1cm47Ci0KKyAgICBp
ZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3
aGF0IHdlIHNob3VsZCByZWFsbHkgZG8gaGVyZS4gIEl0IHNlZW1zIGxpa2UgYSBidWcKICAgICAv
LyB0aGF0IEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyBkb2Vzbid0IGNhbGwgc3RvcEFsbExvYWRl
cnMuCi0gICAgbV9mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7Ci0gICAgbV9mcmFt
ZS0+bG9hZGVyKCktPnN0b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9saWN5Tm9uZSk7CisgICAgZnJh
bWUoKS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7CisgICAgZnJhbWUoKS0+bG9hZGVyKCkt
PnN0b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9saWN5Tm9uZSk7CiB9CiAKIFdlYkRhdGFTb3VyY2Uq
IFdlYkZyYW1lSW1wbDo6cHJvdmlzaW9uYWxEYXRhU291cmNlKCkgY29uc3QKIHsKLSAgICBGcmFt
ZUxvYWRlciogZnJhbWVMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKKyAgICBBU1NFUlQoZnJh
bWUoKSk7CiAKICAgICAvLyBXZSByZWdhcmQgdGhlIHBvbGljeSBkb2N1bWVudCBsb2FkZXIgYXMg
c3RpbGwgcHJvdmlzaW9uYWwuCi0gICAgRG9jdW1lbnRMb2FkZXIqIGRvY0xvYWRlciA9IGZyYW1l
TG9hZGVyLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCk7Ci0gICAgaWYgKCFkb2NMb2FkZXIp
Ci0gICAgICAgIGRvY0xvYWRlciA9IGZyYW1lTG9hZGVyLT5wb2xpY3lEb2N1bWVudExvYWRlcigp
OworICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lKCktPmxvYWRlcigp
LT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFkb2N1bWVudExvYWRlcikK
KyAgICAgICAgZG9jdW1lbnRMb2FkZXIgPSBmcmFtZSgpLT5sb2FkZXIoKS0+cG9saWN5RG9jdW1l
bnRMb2FkZXIoKTsKIAotICAgIHJldHVybiBEYXRhU291cmNlRm9yRG9jTG9hZGVyKGRvY0xvYWRl
cik7CisgICAgcmV0dXJuIERhdGFTb3VyY2VGb3JEb2NMb2FkZXIoZG9jdW1lbnRMb2FkZXIpOwog
fQogCiBXZWJEYXRhU291cmNlKiBXZWJGcmFtZUltcGw6OmRhdGFTb3VyY2UoKSBjb25zdAogewot
ICAgIHJldHVybiBEYXRhU291cmNlRm9yRG9jTG9hZGVyKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpKTsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisgICAgcmV0dXJuIERhdGFTb3Vy
Y2VGb3JEb2NMb2FkZXIoZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogfQog
CiBXZWJIaXN0b3J5SXRlbSBXZWJGcmFtZUltcGw6OnByZXZpb3VzSGlzdG9yeUl0ZW0oKSBjb25z
dAogeworICAgIEFTU0VSVChmcmFtZSgpKTsKICAgICAvLyBXZSB1c2UgdGhlIHByZXZpb3VzIGl0
ZW0gaGVyZSBiZWNhdXNlIGRvY3VtZW50U3RhdGUgKGZpbGxlZC1vdXQgZm9ybXMpCiAgICAgLy8g
b25seSBnZXQgc2F2ZWQgdG8gaGlzdG9yeSB3aGVuIGl0IGJlY29tZXMgdGhlIHByZXZpb3VzIGl0
ZW0uICBUaGUgY2FsbGVyCiAgICAgLy8gaXMgZXhwZWN0ZWQgdG8gcXVlcnkgdGhlIGhpc3Rvcnkg
aXRlbSBhZnRlciBhIG5hdmlnYXRpb24gb2NjdXJzLCBhZnRlcgogICAgIC8vIHRoZSBkZXNpcmVk
IGhpc3RvcnkgaXRlbSBoYXMgYmVjb21lIHRoZSBwcmV2aW91cyBlbnRyeS4KLSAgICByZXR1cm4g
V2ViSGlzdG9yeUl0ZW0obV9mcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+cHJldmlvdXNJdGVt
KCkpOworICAgIHJldHVybiBXZWJIaXN0b3J5SXRlbShmcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9y
eSgpLT5wcmV2aW91c0l0ZW0oKSk7CiB9CiAKIFdlYkhpc3RvcnlJdGVtIFdlYkZyYW1lSW1wbDo6
Y3VycmVudEhpc3RvcnlJdGVtKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisKICAg
ICAvLyBXZSdyZSBzaHV0dGluZyBkb3duLgotICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCkpCisgICAgaWYgKCFmcmFtZSgpLT5sb2FkZXIoKS0+YWN0aXZl
RG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgcmV0dXJuIFdlYkhpc3RvcnlJdGVtKCk7CiAKICAg
ICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGNsb2Ji
ZXIgdGhlIGN1cnJlbnQKQEAgLTExMjIsMzUgKzEwODAsMzAgQEAgV2ViSGlzdG9yeUl0ZW0gV2Vi
RnJhbWVJbXBsOjpjdXJyZW50SGlzdG9yeUl0ZW0oKSBjb25zdAogICAgIC8vIGRvY3VtZW50IHN0
YXRlLiAgSG93ZXZlciwgaXQgaXMgT0sgZm9yIG5ldyBuYXZpZ2F0aW9ucy4KICAgICAvLyBGSVhN
RTogQ2FuIHdlIG1ha2UgdGhpcyBhIHBsYWluIG9sZCBnZXR0ZXIsIGluc3RlYWQgb2Ygd29ycnlp
bmcgYWJvdXQKICAgICAvLyBjbG9iYmVyaW5nIGhlcmU/Ci0gICAgaWYgKCFtX2luU2FtZURvY3Vt
ZW50SGlzdG9yeUxvYWQgJiYgKG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1l
TG9hZFR5cGVTdGFuZGFyZAotICAgICAgICB8fCAhbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkpCi0gICAgICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKCk7CisgICAg
aWYgKCFtX2luU2FtZURvY3VtZW50SGlzdG9yeUxvYWQgJiYgKGZyYW1lKCktPmxvYWRlcigpLT5s
b2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVTdGFuZGFyZAorICAgICAgICB8fCAhZnJhbWUoKS0+
bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkp
CisgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVEb2N1bWVudEFuZFNj
cm9sbFN0YXRlKCk7CiAKLSAgICByZXR1cm4gV2ViSGlzdG9yeUl0ZW0obV9mcmFtZS0+cGFnZSgp
LT5iYWNrRm9yd2FyZCgpLT5jdXJyZW50SXRlbSgpKTsKKyAgICByZXR1cm4gV2ViSGlzdG9yeUl0
ZW0oZnJhbWUoKS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jdXJyZW50SXRlbSgpKTsKIH0KIAog
dm9pZCBXZWJGcmFtZUltcGw6OmVuYWJsZVZpZXdTb3VyY2VNb2RlKGJvb2wgZW5hYmxlKQogewot
ICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5zZXRJblZpZXdTb3VyY2VNb2RlKGVu
YWJsZSk7CisgICAgaWYgKGZyYW1lKCkpCisgICAgICAgIGZyYW1lKCktPnNldEluVmlld1NvdXJj
ZU1vZGUoZW5hYmxlKTsKIH0KIAogYm9vbCBXZWJGcmFtZUltcGw6OmlzVmlld1NvdXJjZU1vZGVF
bmFibGVkKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgcmV0dXJuIG1fZnJh
bWUtPmluVmlld1NvdXJjZU1vZGUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZy
YW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZnJhbWUoKS0+aW5WaWV3
U291cmNlTW9kZSgpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6c2V0UmVmZXJyZXJGb3JSZXF1
ZXN0KFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYlVSTCYgcmVmZXJyZXJVUkwpCiB7
Ci0gICAgU3RyaW5nIHJlZmVycmVyOwotICAgIGlmIChyZWZlcnJlclVSTC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJlZmVycmVyID0gbV9mcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKTsK
LSAgICBlbHNlCi0gICAgICAgIHJlZmVycmVyID0gcmVmZXJyZXJVUkwuc3BlYygpLnV0ZjE2KCk7
Ci0gICAgcmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlciht
X2ZyYW1lLT5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCByZXF1ZXN0LnVybCgpLCByZWZl
cnJlcik7CisgICAgU3RyaW5nIHJlZmVycmVyID0gcmVmZXJyZXJVUkwuaXNFbXB0eSgpID8gZnJh
bWUoKS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSA6IFN0cmluZyhyZWZlcnJlclVSTC5z
cGVjKCkudXRmMTYoKSk7CisgICAgcmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVS
ZWZlcnJlckhlYWRlcihmcmFtZSgpLT5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCByZXF1
ZXN0LnVybCgpLCByZWZlcnJlcik7CiAgICAgaWYgKHJlZmVycmVyLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFdlYlN0cmluZzo6ZnJv
bVVURjgoIlJlZmVyZXIiKSwgcmVmZXJyZXIpOwpAQCAtMTE1OSw4ICsxMTEyLDcgQEAgdm9pZCBX
ZWJGcmFtZUltcGw6OnNldFJlZmVycmVyRm9yUmVxdWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBXZWJVUkwmIHIKIHZvaWQgV2ViRnJhbWVJbXBsOjpkaXNwYXRjaFdpbGxTZW5kUmVx
dWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIFJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2U7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaFdpbGxTZW5k
UmVxdWVzdCgKLSAgICAgICAgMCwgMCwgcmVxdWVzdC50b011dGFibGVSZXNvdXJjZVJlcXVlc3Qo
KSwgcmVzcG9uc2UpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hX
aWxsU2VuZFJlcXVlc3QoMCwgMCwgcmVxdWVzdC50b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwg
cmVzcG9uc2UpOwogfQogCiBXZWJVUkxMb2FkZXIqIFdlYkZyYW1lSW1wbDo6Y3JlYXRlQXNzb2Np
YXRlZFVSTExvYWRlcihjb25zdCBXZWJVUkxMb2FkZXJPcHRpb25zJiBvcHRpb25zKQpAQCAtMTE3
MCw3ICsxMTIyLDcgQEAgV2ViVVJMTG9hZGVyKiBXZWJGcmFtZUltcGw6OmNyZWF0ZUFzc29jaWF0
ZWRVUkxMb2FkZXIoY29uc3QgV2ViVVJMTG9hZGVyT3B0aW9ucyYKIAogdm9pZCBXZWJGcmFtZUlt
cGw6OmNvbW1pdERvY3VtZW50RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQog
ewotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5jb21taXREYXRhKGRh
dGEsIGxlbmd0aCk7CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmNv
bW1pdERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KIAogdW5zaWduZWQgV2ViRnJhbWVJbXBsOjp1bmxv
YWRMaXN0ZW5lckNvdW50KCkgY29uc3QKQEAgLTEyMDIsMjEgKzExNTQsMTYgQEAgdm9pZCBXZWJG
cmFtZUltcGw6OnJlcGxhY2VTZWxlY3Rpb24oY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogCiB2b2lk
IFdlYkZyYW1lSW1wbDo6aW5zZXJ0VGV4dChjb25zdCBXZWJTdHJpbmcmIHRleHQpCiB7Ci0gICAg
RWRpdG9yKiBlZGl0b3IgPSBmcmFtZSgpLT5lZGl0b3IoKTsKLQotICAgIGlmIChlZGl0b3ItPmhh
c0NvbXBvc2l0aW9uKCkpCi0gICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKHRleHQp
OworICAgIGlmIChmcmFtZSgpLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAg
ZnJhbWUoKS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0KTsKICAgICBlbHNlCi0g
ICAgICAgIGVkaXRvci0+aW5zZXJ0VGV4dCh0ZXh0LCAwKTsKKyAgICAgICAgZnJhbWUoKS0+ZWRp
dG9yKCktPmluc2VydFRleHQodGV4dCwgMCk7CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpzZXRN
YXJrZWRUZXh0KAotICAgIGNvbnN0IFdlYlN0cmluZyYgdGV4dCwgdW5zaWduZWQgbG9jYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgV2ViRnJhbWVJbXBsOjpzZXRNYXJrZWRUZXh0KGNvbnN0
IFdlYlN0cmluZyYgdGV4dCwgdW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICBFZGl0b3IqIGVkaXRvciA9IGZyYW1lKCktPmVkaXRvcigpOwotCiAgICAgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW5lPiBkZWNvcmF0aW9uczsKLSAgICBlZGl0b3ItPnNldENvbXBvc2l0
aW9uKHRleHQsIGRlY29yYXRpb25zLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICBmcmFtZSgpLT5l
ZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24odGV4dCwgZGVjb3JhdGlvbnMsIGxvY2F0aW9uLCBsZW5n
dGgpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6dW5tYXJrVGV4dCgpCkBAIC0xMjQ1LDcgKzEx
OTIsNiBAQCBib29sIFdlYkZyYW1lSW1wbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodW5z
aWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aAogICAgIEludFJlY3QgaW50UmVjdCA9IGZy
YW1lKCktPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAgICAgcmVj
dCA9IFdlYlJlY3QoaW50UmVjdCk7CiAgICAgcmVjdCA9IGZyYW1lKCktPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0KTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjkzLDM4ICsx
MjM5LDI5IEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIGNvbnN0IFdlYk5vZGUmIG5vZGUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBi
b29sIHJ2ID0gdHJ1ZTsKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKICAgICAvLyBTcGVjaWFs
bHkgaGFuZGxpbmcgY29tbWFuZHMgdGhhdCBFZGl0b3I6OmV4ZWNDb21tYW5kIGRvZXMgbm90IGRp
cmVjdGx5CiAgICAgLy8gc3VwcG9ydC4KICAgICBpZiAoY29tbWFuZCA9PSAiRGVsZXRlVG9FbmRP
ZlBhcmFncmFwaCIpIHsKLSAgICAgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZSgpLT5lZGl0b3Io
KTsKLSAgICAgICAgaWYgKCFlZGl0b3ItPmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uRm9y
d2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdyYXBo
Qm91bmRhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSkgewotICAg
ICAgICAgICAgZWRpdG9yLT5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkZvcndhcmQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyR3JhbnVsYXJp
dHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rp
b25Gb3J3YXJkLCBQYXJhZ3JhcGhCb3VuZGFyeSwgdHJ1ZSwgZmFsc2UpKQorICAgICAgICAgICAg
ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uRm9yd2FyZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUsIGZhbHNlKTsKICAgICB9IGVsc2UgaWYgKGNvbW1h
bmQgPT0gIkluZGVudCIpCiAgICAgICAgIGZyYW1lKCktPmVkaXRvcigpLT5pbmRlbnQoKTsKICAg
ICBlbHNlIGlmIChjb21tYW5kID09ICJPdXRkZW50IikKICAgICAgICAgZnJhbWUoKS0+ZWRpdG9y
KCktPm91dGRlbnQoKTsKICAgICBlbHNlIGlmIChjb21tYW5kID09ICJEZWxldGVCYWNrd2FyZCIp
Ci0gICAgICAgIHJ2ID0gZnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoQXRvbWljU3RyaW5nKCJC
YWNrd2FyZERlbGV0ZSIpKS5leGVjdXRlKCk7CisgICAgICAgIHJlc3VsdCA9IGZyYW1lKCktPmVk
aXRvcigpLT5jb21tYW5kKEF0b21pY1N0cmluZygiQmFja3dhcmREZWxldGUiKSkuZXhlY3V0ZSgp
OwogICAgIGVsc2UgaWYgKGNvbW1hbmQgPT0gIkRlbGV0ZUZvcndhcmQiKQotICAgICAgICBydiA9
IGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKEF0b21pY1N0cmluZygiRm9yd2FyZERlbGV0ZSIp
KS5leGVjdXRlKCk7CisgICAgICAgIHJlc3VsdCA9IGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5k
KEF0b21pY1N0cmluZygiRm9yd2FyZERlbGV0ZSIpKS5leGVjdXRlKCk7CiAgICAgZWxzZSBpZiAo
Y29tbWFuZCA9PSAiQWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nIikgewotICAgICAgICAvLyBGYWxz
ZSBtdXN0IGJlIHBhc3NlZCBoZXJlLCBvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHdvcmQgd2ls
bCBuZXZlciBiZQotICAgICAgICAvLyBza2lwcGVkLgorICAgICAgICAvLyBXZWUgbmVlZCB0byBw
YXNzIGZhbHNlIGhlcmUgb3IgZWxzZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHdvcmQgd2lsbCBu
ZXZlciBiZSBza2lwcGVkLgogICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKGZhbHNlKTsKICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gIlRvZ2dsZVNw
ZWxsUGFuZWwiKQogICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+c2hvd1NwZWxsaW5nR3Vlc3NQ
YW5lbCgpOwogICAgIGVsc2UKLSAgICAgICAgcnYgPSBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFu
ZChjb21tYW5kKS5leGVjdXRlKCk7Ci0gICAgcmV0dXJuIHJ2OworICAgICAgICByZXN1bHQgPSBm
cmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kKS5leGVjdXRlKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogYm9vbCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkKQEAgLTEzMzIsOCArMTI2OSw3
IEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZChjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCiAgICAgQVNTRVJUKGZyYW1lKCkpOwogICAgIFN0
cmluZyB3ZWJOYW1lID0gbmFtZTsKIAotICAgIC8vIG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQg
YW5kIG1vdmVUb0VuZGZEb2N1bWVudCBhcmUgb25seSBoYW5kbGVkIGJ5IFdlYktpdAotICAgIC8v
IGZvciBlZGl0YWJsZSBub2Rlcy4KKyAgICAvLyBtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IGFu
ZCBtb3ZlVG9FbmRmRG9jdW1lbnQgYXJlIG9ubHkgaGFuZGxlZCBieSBXZWJLaXQgZm9yIGVkaXRh
YmxlIG5vZGVzLgogICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPmNhbkVkaXQoKSAmJiB3ZWJO
YW1lID09ICJtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IikKICAgICAgICAgcmV0dXJuIHZpZXdJ
bXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7CiAKQEAg
LTEzNjEsMTMgKzEyOTcsMTEgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUoKS0+ZWRpdG9yKCktPmlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBs
OjpyZXF1ZXN0VGV4dENoZWNraW5nKGNvbnN0IFdlYkVsZW1lbnQmIHdlYkVsZW0pCit2b2lkIFdl
YkZyYW1lSW1wbDo6cmVxdWVzdFRleHRDaGVja2luZyhjb25zdCBXZWJFbGVtZW50JiB3ZWJFbGVt
ZW50KQogewotICAgIGlmICh3ZWJFbGVtLmlzTnVsbCgpKQorICAgIGlmICh3ZWJFbGVtZW50Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9DaGVj
ayA9IHJhbmdlT2ZDb250ZW50cyhjb25zdF9jYXN0PEVsZW1lbnQqPih3ZWJFbGVtLmNvbnN0VW53
cmFwPEVsZW1lbnQ+KCkpKTsKLQorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0NoZWNrID0gcmFu
Z2VPZkNvbnRlbnRzKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHdlYkVsZW1lbnQuY29uc3RVbndyYXA8
RWxlbWVudD4oKSkpOwogICAgIGZyYW1lKCktPmVkaXRvcigpLT5zcGVsbENoZWNrZXIoKS0+cmVx
dWVzdENoZWNraW5nRm9yKFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUoVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIsIFRleHRDaGVja2luZ1Byb2Nlc3NC
YXRjaCwgcmFuZ2VUb0NoZWNrLCByYW5nZVRvQ2hlY2spKTsKIH0KIApAQCAtMTQzNSw5ICsxMzY5
LDkgQEAgV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6c2VsZWN0aW9uQXNNYXJrdXAoKSBjb25zdAog
ICAgIHJldHVybiBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIEFubm90YXRlRm9ySW50ZXJj
aGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKTsKIH0KIAotdm9pZCBXZWJGcmFtZUlt
cGw6OnNlbGVjdFdvcmRBcm91bmRQb3NpdGlvbihGcmFtZSogZnJhbWUsIFZpc2libGVQb3NpdGlv
biBwb3MpCit2b2lkIFdlYkZyYW1lSW1wbDo6c2VsZWN0V29yZEFyb3VuZFBvc2l0aW9uKEZyYW1l
KiBmcmFtZSwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uKQogewotICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uKHBvcyk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24ocG9zaXRp
b24pOwogICAgIHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0
eSk7CiAKICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
c2VsZWN0aW9uKSkgewpAQCAtMTQ1OCw0MiArMTM5MiwzMyBAQCBib29sIFdlYkZyYW1lSW1wbDo6
c2VsZWN0V29yZEFyb3VuZENhcmV0KCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdl
KGNvbnN0IFdlYlBvaW50JiBiYXNlLCBjb25zdCBXZWJQb2ludCYgZXh0ZW50KQogewotICAgIFZp
c2libGVQb3NpdGlvbiBiYXNlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yV2luZG93UG9pbnQoYmFz
ZSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGV4dGVudFBvcyA9IHZpc2libGVQb3NpdGlvbkZvcldp
bmRvd1BvaW50KGV4dGVudCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKGJhc2VQb3MsIGV4dGVudFBvcyk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IGJhc2VQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGJhc2UpOworICAg
IFZpc2libGVQb3NpdGlvbiBleHRlbnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRv
d1BvaW50KGV4dGVudCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNp
YmxlU2VsZWN0aW9uKGJhc2VQb3NpdGlvbiwgZXh0ZW50UG9zaXRpb24pOwogICAgIGlmIChmcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAg
ICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBD
aGFyYWN0ZXJHcmFudWxhcml0eSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5n
ZShjb25zdCBXZWJSYW5nZSYgd2ViUmFuZ2UpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8UmFuZ2U+ID4od2ViUmFuZ2UpOwotICAgIGlmIChyYW5n
ZSkKKyAgICBpZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8
UmFuZ2U+ID4od2ViUmFuZ2UpKQogICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklUWSwgZmFs
c2UpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gV2ViRnJhbWVJbXBsOjp2aXNpYmxlUG9zaXRpb25G
b3JXaW5kb3dQb2ludChjb25zdCBXZWJQb2ludCYgcG9pbnQpCiB7Ci0gICAgSGl0VGVzdFJlcXVl
c3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmU7Ci0g
ICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHk7Ci0gICAgaGl0VHlwZSB8PSBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlOwotICAgIGhpdFR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6Okln
bm9yZUNsaXBwaW5nOwotICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoaGl0VHlwZSk7Ci0gICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUoKS0+dmlldygpOwotICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0KHZpZXctPndpbmRvd1RvQ29udGVudHMoSW50UG9pbnQocG9pbnQueCwgcG9pbnQueSkpKTsK
KyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0ID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmUgfCBIaXRU
ZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJl
cXVlc3Q6Oklnbm9yZUNsaXBwaW5nOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGZyYW1lKCkt
PnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhJbnRQb2ludChwb2ludCkpKTsKIAogICAgIGZyYW1l
KCktPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCBy
ZXN1bHQpOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0KICAgICByZXR1cm4g
bm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKTsK
IH0KIAotaW50IFdlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbihjb25zdCBXZWJQcmludFBhcmFtcyYg
cHJpbnRQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk5vZGUm
IGNvbnN0cmFpblRvTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogdXNl
QnJvd3Nlck92ZXJsYXlzKQoraW50IFdlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbihjb25zdCBXZWJQ
cmludFBhcmFtcyYgcHJpbnRQYXJhbXMsIGNvbnN0IFdlYk5vZGUmIGNvbnN0cmFpblRvTm9kZSwg
Ym9vbCogdXNlQnJvd3Nlck92ZXJsYXlzKQogewogICAgIEFTU0VSVCghZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+aXNGcmFtZVNldCgpKTsKICAgICBXZWJQbHVnaW5Db250YWluZXJJbXBsKiBwbHVnaW5D
b250YWluZXIgPSAwOwpAQCAtMTUxMSw4ICsxNDM2LDcgQEAgaW50IFdlYkZyYW1lSW1wbDo6cHJp
bnRCZWdpbihjb25zdCBXZWJQcmludFBhcmFtcyYgcHJpbnRQYXJhbXMsCiAgICAgZWxzZQogICAg
ICAgICBtX3ByaW50Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBDaHJvbWVQcmludENvbnRleHQoZnJh
bWUoKSkpOwogCi0gICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBy
aW50UGFyYW1zLnByaW50Q29udGVudEFyZWEud2lkdGgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGZsb2F0PihwcmludFBhcmFtcy5wcmludENvbnRlbnRBcmVhLmhlaWdo
dCkpOworICAgIEZsb2F0UmVjdCByZWN0KDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0PihwcmludFBh
cmFtcy5wcmludENvbnRlbnRBcmVhLndpZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaW50UGFy
YW1zLnByaW50Q29udGVudEFyZWEuaGVpZ2h0KSk7CiAgICAgbV9wcmludENvbnRleHQtPmJlZ2lu
KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgZmxvYXQgcGFnZUhlaWdodDsKICAg
ICAvLyBXZSBpZ25vcmUgdGhlIG92ZXJsYXlzIGNhbGN1bGF0aW9uIGZvciBub3cgc2luY2UgdGhl
eSBhcmUgZ2VuZXJhdGVkIGluIHRoZQpAQCAtMTUyNiwyOSArMTQ1MCwxOSBAQCBpbnQgV2ViRnJh
bWVJbXBsOjpwcmludEJlZ2luKGNvbnN0IFdlYlByaW50UGFyYW1zJiBwcmludFBhcmFtcywKIAog
ZmxvYXQgV2ViRnJhbWVJbXBsOjpnZXRQcmludFBhZ2VTaHJpbmsoaW50IHBhZ2UpCiB7Ci0gICAg
Ly8gRW5zdXJlIGNvcnJlY3Qgc3RhdGUuCi0gICAgaWYgKCFtX3ByaW50Q29udGV4dCB8fCBwYWdl
IDwgMCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCisgICAgQVNTRVJUKG1fcHJpbnRDb250ZXh0ICYmIHBhZ2UgPj0gMCk7CiAgICAg
cmV0dXJuIG1fcHJpbnRDb250ZXh0LT5nZXRQYWdlU2hyaW5rKHBhZ2UpOwogfQogCiBmbG9hdCBX
ZWJGcmFtZUltcGw6OnByaW50UGFnZShpbnQgcGFnZSwgV2ViQ2FudmFzKiBjYW52YXMpCiB7CiAj
aWYgRU5BQkxFKFBSSU5USU5HKQotICAgIC8vIEVuc3VyZSBjb3JyZWN0IHN0YXRlLgotICAgIGlm
ICghbV9wcmludENvbnRleHQgfHwgcGFnZSA8IDAgfHwgIWZyYW1lKCkgfHwgIWZyYW1lKCktPmRv
Y3VtZW50KCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KKyAgICBBU1NFUlQobV9wcmludENvbnRleHQgJiYgcGFnZSA+PSAwICYmIGZy
YW1lKCkgJiYgZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHRCdWls
ZGVyIGJ1aWxkZXIoY2FudmFzKTsKLSAgICBHcmFwaGljc0NvbnRleHQmIGdjID0gYnVpbGRlci5j
b250ZXh0KCk7Ci0gICAgZ2MucGxhdGZvcm1Db250ZXh0KCktPnNldFByaW50aW5nKHRydWUpOwot
Ci0gICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoZ2MsIHBhZ2UpOworICAgIEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gYnVpbGRlci5jb250ZXh0KCk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5zZXRQcmludGluZyh0cnVlKTsKKyAg
ICByZXR1cm4gbV9wcmludENvbnRleHQtPnNwb29sUGFnZShncmFwaGljc0NvbnRleHQsIHBhZ2Up
OwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpAQCAtMTU1NywxOCArMTQ3MSwxMyBAQCBm
bG9hdCBXZWJGcmFtZUltcGw6OnByaW50UGFnZShpbnQgcGFnZSwgV2ViQ2FudmFzKiBjYW52YXMp
CiB2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRFbmQoKQogewogICAgIEFTU0VSVChtX3ByaW50Q29u
dGV4dCk7Ci0gICAgaWYgKG1fcHJpbnRDb250ZXh0KQotICAgICAgICBtX3ByaW50Q29udGV4dC0+
ZW5kKCk7CisgICAgbV9wcmludENvbnRleHQtPmVuZCgpOwogICAgIG1fcHJpbnRDb250ZXh0LmNs
ZWFyKCk7CiB9CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjppc1ByaW50U2NhbGluZ0Rpc2FibGVkRm9y
UGx1Z2luKGNvbnN0IFdlYk5vZGUmIG5vZGUpCiB7Ci0gICAgV2ViUGx1Z2luQ29udGFpbmVySW1w
bCogcGx1Z2luQ29udGFpbmVyID0gMDsKLSAgICBpZiAobm9kZS5pc051bGwoKSkKLSAgICAgICAg
cGx1Z2luQ29udGFpbmVyID0gcGx1Z2luQ29udGFpbmVyRnJvbUZyYW1lKGZyYW1lKCkpOwotICAg
IGVsc2UKLSAgICAgICAgcGx1Z2luQ29udGFpbmVyID0gcGx1Z2luQ29udGFpbmVyRnJvbU5vZGUo
bm9kZSk7CisgICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbCogcGx1Z2luQ29udGFpbmVyID0gIG5v
ZGUuaXNOdWxsKCkgPyBwbHVnaW5Db250YWluZXJGcm9tRnJhbWUoZnJhbWUoKSkgOiBwbHVnaW5D
b250YWluZXJGcm9tTm9kZShub2RlKTsKIAogICAgIGlmICghcGx1Z2luQ29udGFpbmVyIHx8ICFw
bHVnaW5Db250YWluZXItPnN1cHBvcnRzUGFnaW5hdGVkUHJpbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTU4NiwzNCArMTQ5NSwyMCBAQCBib29sIFdlYkZyYW1lSW1wbDo6aXNQYWdl
Qm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgp
LT5pc1BhZ2VCb3hWaXNpYmxlKHBhZ2VJbmRleCk7CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpw
YWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNpemUmIHBhZ2VTaXplLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWFyZ2luVG9wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWFyZ2lu
UmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
JiBtYXJnaW5Cb3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50JiBtYXJnaW5MZWZ0KQotewotICAgIEludFNpemUgc2l6ZShwYWdlU2l6ZS53aWR0
aCwgcGFnZVNpemUuaGVpZ2h0KTsKLSAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5wYWdlU2l6ZUFu
ZE1hcmdpbnNJblBpeGVscyhwYWdlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3AsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdp
bkxlZnQpOwordm9pZCBXZWJGcmFtZUltcGw6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGlu
dCBwYWdlSW5kZXgsIFdlYlNpemUmIHBhZ2VTaXplLCBpbnQmIG1hcmdpblRvcCwgaW50JiBtYXJn
aW5SaWdodCwgaW50JiBtYXJnaW5Cb3R0b20sIGludCYgbWFyZ2luTGVmdCkKK3sKKyAgICBJbnRT
aXplIHNpemUgPSBwYWdlU2l6ZTsKKyAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5wYWdlU2l6ZUFu
ZE1hcmdpbnNJblBpeGVscyhwYWdlSW5kZXgsIHNpemUsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQs
IG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCk7CiAgICAgcGFnZVNpemUgPSBzaXplOwogfQogCiBX
ZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpwYWdlUHJvcGVydHkoY29uc3QgV2ViU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGludCBwYWdlSW5kZXgpCiB7CiAgICAgQVNTRVJUKG1fcHJpbnRDb250ZXh0KTsK
LSAgICByZXR1cm4gbV9wcmludENvbnRleHQtPnBhZ2VQcm9wZXJ0eShtX2ZyYW1lLCBwcm9wZXJ0
eU5hbWUudXRmOCgpLmRhdGEoKSwgcGFnZUluZGV4KTsKKyAgICByZXR1cm4gbV9wcmludENvbnRl
eHQtPnBhZ2VQcm9wZXJ0eShmcmFtZSgpLCBwcm9wZXJ0eU5hbWUudXRmOCgpLmRhdGEoKSwgcGFn
ZUluZGV4KTsKIH0KIAotYm9vbCBXZWJGcmFtZUltcGw6OmZpbmQoaW50IGlkZW50aWZpZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNlYXJjaFRleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJGaW5kT3B0aW9ucyYgb3B0aW9ucywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgd3JhcFdpdGhpbkZyYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViUmVjdCogc2VsZWN0aW9uUmVjdCkKK2Jvb2wgV2ViRnJhbWVJbXBsOjpmaW5k
KGludCBpZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIHNlYXJjaFRleHQsIGNvbnN0IFdlYkZp
bmRPcHRpb25zJiBvcHRpb25zLCBib29sIHdyYXBXaXRoaW5GcmFtZSwgV2ViUmVjdCogc2VsZWN0
aW9uUmVjdCkKIHsKICAgICBpZiAoIWZyYW1lKCkgfHwgIWZyYW1lKCktPnBhZ2UoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcxMSwxMCArMTYwNiw3IEBAIHZvaWQgV2ViRnJhbWVJbXBs
OjpzdG9wRmluZGluZyhib29sIGNsZWFyU2VsZWN0aW9uKQogICAgIGludmFsaWRhdGVBcmVhKElu
dmFsaWRhdGVBbGwpOwogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVz
KGludCBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIHNlYXJjaFRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYkZpbmRPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc2V0KQordm9pZCBXZWJGcmFtZUltcGw6OnNj
b3BlU3RyaW5nTWF0Y2hlcyhpbnQgaWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hU
ZXh0LCBjb25zdCBXZWJGaW5kT3B0aW9ucyYgb3B0aW9ucywgYm9vbCByZXNldCkKIHsKICAgICBp
ZiAocmVzZXQpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIGJyYW5kIG5ldyBzZWFyY2gsIHNvIHdl
IG5lZWQgdG8gcmVzZXQgZXZlcnl0aGluZy4KQEAgLTE3NDMsMTEgKzE2MzUsNyBAQCB2b2lkIFdl
YkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzKGludCBpZGVudGlmaWVyLAogICAgICAgICAg
ICAgdmlld0ltcGwoKS0+bWFpbkZyYW1lSW1wbCgpLT5tX2ZyYW1lc1Njb3BpbmdDb3VudCsrOwog
CiAgICAgICAgIC8vIE5vdywgZGVmZXIgc2NvcGluZyB1bnRpbCBsYXRlciB0byBhbGxvdyBmaW5k
IG9wZXJhdGlvbiB0byBmaW5pc2ggcXVpY2tseS4KLSAgICAgICAgc2NvcGVTdHJpbmdNYXRjaGVz
U29vbigKLSAgICAgICAgICAgIGlkZW50aWZpZXIsCi0gICAgICAgICAgICBzZWFyY2hUZXh0LAot
ICAgICAgICAgICAgb3B0aW9ucywKLSAgICAgICAgICAgIGZhbHNlKTsgLy8gZmFsc2U9d2UganVz
dCByZXNldCwgc28gZG9uJ3QgZG8gaXQgYWdhaW4uCisgICAgICAgIHNjb3BlU3RyaW5nTWF0Y2hl
c1Nvb24oaWRlbnRpZmllciwgc2VhcmNoVGV4dCwgb3B0aW9ucywgZmFsc2UpOyAvLyBmYWxzZSBt
ZWFucyBqdXN0IHJlc2V0LCBzbyBkb24ndCBkbyBpdCBhZ2Fpbi4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTk0Niw5ICsxODM0LDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmluY3JlYXNl
TWF0Y2hDb3VudChpbnQgY291bnQsIGludCBpZGVudGlmaWVyKQogICAgICAgICBjbGllbnQoKS0+
cmVwb3J0RmluZEluUGFnZU1hdGNoQ291bnQoaWRlbnRpZmllciwgbV90b3RhbE1hdGNoQ291bnQs
ICFtX2ZyYW1lc1Njb3BpbmdDb3VudCk7CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpyZXBvcnRG
aW5kSW5QYWdlU2VsZWN0aW9uKGNvbnN0IFdlYlJlY3QmIHNlbGVjdGlvblJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWN0aXZlTWF0Y2hPcmRp
bmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlk
ZW50aWZpZXIpCit2b2lkIFdlYkZyYW1lSW1wbDo6cmVwb3J0RmluZEluUGFnZVNlbGVjdGlvbihj
b25zdCBXZWJSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgYWN0aXZlTWF0Y2hPcmRpbmFsLCBpbnQg
aWRlbnRpZmllcikKIHsKICAgICAvLyBVcGRhdGUgdGhlIFVJIHdpdGggdGhlIGxhdGVzdCBzZWxl
Y3Rpb24gcmVjdC4KICAgICBpZiAoY2xpZW50KCkpCkBAIC0xOTY3LDIxICsxODUzLDIxIEBAIHZv
aWQgV2ViRnJhbWVJbXBsOjpyZXNldE1hdGNoQ291bnQoKQogdm9pZCBXZWJGcmFtZUltcGw6OnNl
bmRPcmllbnRhdGlvbkNoYW5nZUV2ZW50KGludCBvcmllbnRhdGlvbikKIHsKICNpZiBFTkFCTEUo
T1JJRU5UQVRJT05fRVZFTlRTKQotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5z
ZW5kT3JpZW50YXRpb25DaGFuZ2VFdmVudChvcmllbnRhdGlvbik7CisgICAgaWYgKGZyYW1lKCkp
CisgICAgICAgIGZyYW1lKCktPnNlbmRPcmllbnRhdGlvbkNoYW5nZUV2ZW50KG9yaWVudGF0aW9u
KTsKICNlbmRpZgogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6YWRkRXZlbnRMaXN0ZW5lcihjb25z
dCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJv
b2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmRvbVdpbmRvdygpOworICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUoKS0+ZG9j
dW1lbnQoKS0+ZG9tV2luZG93KCk7CiAgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVy
V3JhcHBlciA9IGxpc3RlbmVyLT5jcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUs
IHVzZUNhcHR1cmUsIHdpbmRvdyk7CiAgICAgd2luZG93LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50
VHlwZSwgYWRvcHRSZWYobGlzdGVuZXJXcmFwcGVyKSwgdXNlQ2FwdHVyZSk7CiB9CiAKIHZvaWQg
V2ViRnJhbWVJbXBsOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewot
ICAgIERPTVdpbmRvdyogd2luZG93ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7
CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5kb21XaW5kb3co
KTsKICAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0gbGlzdGVuZXIt
PmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgd2luZG93KTsK
ICAgICB3aW5kb3ctPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcldyYXBw
ZXIsIHVzZUNhcHR1cmUpOwogfQpAQCAtMTk4OSwxNCArMTg3NSwxMyBAQCB2b2lkIFdlYkZyYW1l
SW1wbDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2Vi
RE9NRXZlbnRMaQogYm9vbCBXZWJGcmFtZUltcGw6OmRpc3BhdGNoRXZlbnQoY29uc3QgV2ViRE9N
RXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVCghZXZlbnQuaXNOdWxsKCkpOwotICAgIHJldHVy
biBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChldmVudCk7
CisgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2
ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmRpc3BhdGNoTWVzc2FnZUV2ZW50
V2l0aE9yaWdpbkNoZWNrKGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBpbnRlbmRlZFRhcmdldE9y
aWdpbiwgY29uc3QgV2ViRE9NRXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVCghZXZlbnQuaXNO
dWxsKCkpOwotICAgIC8vIFBhc3MgYW4gZW1wdHkgY2FsbCBzdGFjaywgc2luY2Ugd2UgZG9uJ3Qg
aGF2ZSB0aGUgb25lIGZyb20gdGhlIG90aGVyIHByb2Nlc3MuCi0gICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCktPmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKGlu
dGVuZGVkVGFyZ2V0T3JpZ2luLmdldCgpLCBldmVudCwgMCk7CisgICAgZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCktPmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKGlu
dGVuZGVkVGFyZ2V0T3JpZ2luLmdldCgpLCBldmVudCwgMCk7CiB9CiAKIGludCBXZWJGcmFtZUlt
cGw6OmZpbmRNYXRjaE1hcmtlcnNWZXJzaW9uKCkgY29uc3QKQEAgLTIwMTgsOCArMTkwMyw3IEBA
IGJvb2wgV2ViRnJhbWVJbXBsOjppc0FjdGl2ZU1hdGNoRnJhbWVWYWxpZCgpIGNvbnN0CiB7CiAg
ICAgV2ViRnJhbWVJbXBsKiBtYWluRnJhbWVJbXBsID0gdmlld0ltcGwoKS0+bWFpbkZyYW1lSW1w
bCgpOwogICAgIFdlYkZyYW1lSW1wbCogYWN0aXZlTWF0Y2hGcmFtZSA9IG1haW5GcmFtZUltcGwt
PmFjdGl2ZU1hdGNoRnJhbWUoKTsKLSAgICByZXR1cm4gYWN0aXZlTWF0Y2hGcmFtZSAmJiBhY3Rp
dmVNYXRjaEZyYW1lLT5tX2FjdGl2ZU1hdGNoCi0gICAgICAgICYmIGFjdGl2ZU1hdGNoRnJhbWUt
PmZyYW1lKCktPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YobWFpbkZyYW1lSW1wbC0+ZnJhbWUoKSk7
CisgICAgcmV0dXJuIGFjdGl2ZU1hdGNoRnJhbWUgJiYgYWN0aXZlTWF0Y2hGcmFtZS0+bV9hY3Rp
dmVNYXRjaCAmJiBhY3RpdmVNYXRjaEZyYW1lLT5mcmFtZSgpLT50cmVlKCktPmlzRGVzY2VuZGFu
dE9mKG1haW5GcmFtZUltcGwtPmZyYW1lKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6dXBk
YXRlRmluZE1hdGNoUmVjdHMoKQpAQCAtMjIwMyw0NCArMjA4Nyw0MSBAQCB2b2lkIFdlYkZyYW1l
SW1wbDo6ZGVsaXZlckludGVudChjb25zdCBXZWJJbnRlbnQmIGludGVudCwgV2ViTWVzc2FnZVBv
cnRDaGFubmVsQQogICAgICAgICAgICAgKCpjaGFubmVscylbaV0gPSBNZXNzYWdlUG9ydENoYW5u
ZWw6OmNyZWF0ZShwbGF0Zm9ybUNoYW5uZWwpOwogICAgICAgICB9CiAgICAgfQotICAgIE93blB0
cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0QXJyYXkgPSBXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZW50
YW5nbGVQb3J0cygqKG1fZnJhbWUtPmRvY3VtZW50KCkpLCBjaGFubmVscy5yZWxlYXNlKCkpOwor
ICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0QXJyYXkgPSBXZWJDb3JlOjpNZXNzYWdl
UG9ydDo6ZW50YW5nbGVQb3J0cygqKGZyYW1lKCktPmRvY3VtZW50KCkpLCBjaGFubmVscy5yZWxl
YXNlKCkpOwogCi0gICAgUmVmUHRyPERlbGl2ZXJlZEludGVudD4gZGVsaXZlcmVkSW50ZW50ID0g
RGVsaXZlcmVkSW50ZW50OjpjcmVhdGUobV9mcmFtZSwgY2xpZW50LnJlbGVhc2UoKSwgaW50ZW50
LmFjdGlvbigpLCBpbnRlbnQudHlwZSgpLCBpbnRlbnREYXRhLCBwb3J0QXJyYXkucmVsZWFzZSgp
LCB3ZWJjb3JlSW50ZW50LT5leHRyYXMoKSk7CisgICAgUmVmUHRyPERlbGl2ZXJlZEludGVudD4g
ZGVsaXZlcmVkSW50ZW50ID0gRGVsaXZlcmVkSW50ZW50OjpjcmVhdGUoZnJhbWUoKSwgY2xpZW50
LnJlbGVhc2UoKSwgaW50ZW50LmFjdGlvbigpLCBpbnRlbnQudHlwZSgpLCBpbnRlbnREYXRhLCBw
b3J0QXJyYXkucmVsZWFzZSgpLCB3ZWJjb3JlSW50ZW50LT5leHRyYXMoKSk7CiAKLSAgICBET01X
aW5kb3dJbnRlbnRzOjpmcm9tKG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKS0+ZGVs
aXZlcihkZWxpdmVyZWRJbnRlbnQucmVsZWFzZSgpKTsKKyAgICBET01XaW5kb3dJbnRlbnRzOjpm
cm9tKGZyYW1lKCktPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKS0+ZGVsaXZlcihkZWxpdmVyZWRJ
bnRlbnQucmVsZWFzZSgpKTsKICNlbmRpZgogfQogCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpj
b250ZW50QXNUZXh0KHNpemVfdCBtYXhDaGFycykgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUp
CisgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0KICAgICBW
ZWN0b3I8VUNoYXI+IHRleHQ7Ci0gICAgZnJhbWVDb250ZW50QXNQbGFpblRleHQobWF4Q2hhcnMs
IG1fZnJhbWUsICZ0ZXh0KTsKKyAgICBmcmFtZUNvbnRlbnRBc1BsYWluVGV4dChtYXhDaGFycywg
ZnJhbWUoKSwgJnRleHQpOwogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHRleHQpOwogfQogCiBX
ZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpjb250ZW50QXNNYXJrdXAoKSBjb25zdAogewotICAgIHJl
dHVybiBjcmVhdGVGdWxsTWFya3VwKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIGlmICghZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIHJldHVybiBjcmVhdGVGdWxs
TWFya3VwKGZyYW1lKCktPmRvY3VtZW50KCkpOwogfQogCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBs
OjpyZW5kZXJUcmVlQXNUZXh0KFJlbmRlckFzVGV4dENvbnRyb2xzIHRvU2hvdykgY29uc3QKIHsK
ICAgICBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvciA9IFJlbmRlckFzVGV4dEJlaGF2aW9y
Tm9ybWFsOwogCi0gICAgaWYgKHRvU2hvdyAmIFJlbmRlckFzVGV4dERlYnVnKSB7Ci0gICAgICAg
IGJlaGF2aW9yIHw9IFJlbmRlckFzVGV4dFNob3dDb21wb3NpdGVkTGF5ZXJzCi0gICAgICAgICAg
ICB8IFJlbmRlckFzVGV4dFNob3dBZGRyZXNzZXMKLSAgICAgICAgICAgIHwgUmVuZGVyQXNUZXh0
U2hvd0lEQW5kQ2xhc3MKLSAgICAgICAgICAgIHwgUmVuZGVyQXNUZXh0U2hvd0xheWVyTmVzdGlu
ZzsKLSAgICB9CisgICAgaWYgKHRvU2hvdyAmIFJlbmRlckFzVGV4dERlYnVnKQorICAgICAgICBi
ZWhhdmlvciB8PSBSZW5kZXJBc1RleHRTaG93Q29tcG9zaXRlZExheWVycyB8IFJlbmRlckFzVGV4
dFNob3dBZGRyZXNzZXMgfCBSZW5kZXJBc1RleHRTaG93SURBbmRDbGFzcyB8IFJlbmRlckFzVGV4
dFNob3dMYXllck5lc3Rpbmc7CiAKICAgICBpZiAodG9TaG93ICYgUmVuZGVyQXNUZXh0UHJpbnRp
bmcpCiAgICAgICAgIGJlaGF2aW9yIHw9IFJlbmRlckFzVGV4dFByaW50aW5nTW9kZTsKIAotICAg
IHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fZnJhbWUsIGJlaGF2aW9yKTsKKyAgICBy
ZXR1cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihmcmFtZSgpLCBiZWhhdmlvcik7CiB9CiAKIFdl
YlN0cmluZyBXZWJGcmFtZUltcGw6Om1hcmtlclRleHRGb3JMaXN0SXRlbShjb25zdCBXZWJFbGVt
ZW50JiB3ZWJFbGVtZW50KSBjb25zdApAQCAtMjI1MCwzNiArMjEzMSwzNCBAQCBXZWJTdHJpbmcg
V2ViRnJhbWVJbXBsOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgV2ViRWxlbWVudCYgd2Vi
RWxlbWVudCkgY29ucwogCiB2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRQYWdlc1dpdGhCb3VuZGFy
aWVzKFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQog
ewotICAgIEFTU0VSVChtX3ByaW50Q29udGV4dC5nZXQoKSk7CisgICAgQVNTRVJUKG1fcHJpbnRD
b250ZXh0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMpOwog
ICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gYnVpbGRlci5jb250ZXh0KCk7
CiAgICAgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5zZXRQcmludGluZyh0cnVl
KTsKIAotICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoZ3Jh
cGhpY3NDb250ZXh0LAotICAgICAgICBGbG9hdFNpemUocGFnZVNpemVJblBpeGVscy53aWR0aCwg
cGFnZVNpemVJblBpeGVscy5oZWlnaHQpKTsKKyAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xBbGxQ
YWdlc1dpdGhCb3VuZGFyaWVzKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRTaXplKHBhZ2VTaXplSW5Q
aXhlbHMud2lkdGgsIHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KSk7CiB9CiAKIFdlYlJlY3QgV2Vi
RnJhbWVJbXBsOjpzZWxlY3Rpb25Cb3VuZHNSZWN0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzU2Vs
ZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KGZyYW1lKCktPnNlbGVjdGlvbigpLT5i
b3VuZHMoZmFsc2UpKTsKLQotICAgIHJldHVybiBXZWJSZWN0KCk7CisgICAgaWYgKCFoYXNTZWxl
Y3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChm
cmFtZSgpLT5zZWxlY3Rpb24oKS0+Ym91bmRzKGZhbHNlKSk7CiB9CiAKIGJvb2wgV2ViRnJhbWVJ
bXBsOjpzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGludCBmcm9tLCBpbnQgbGVu
Z3RoKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIWZyYW1lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlv
blN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgZnJvbSwgbGVuZ3Ro
KTsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzTWFya2Vy
Rm9yKERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgZnJvbSwgbGVuZ3RoKTsKIH0KIAogV2ViU3Ry
aW5nIFdlYkZyYW1lSW1wbDo6bGF5ZXJUcmVlQXNUZXh0KGJvb2wgc2hvd0RlYnVnSW5mbykgY29u
c3QKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1
cm4gV2ViU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFdlYlN0cmluZyhtX2ZyYW1lLT5sYXllclRyZWVB
c1RleHQoc2hvd0RlYnVnSW5mbykpOworICAgIHJldHVybiBXZWJTdHJpbmcoZnJhbWUoKS0+bGF5
ZXJUcmVlQXNUZXh0KHNob3dEZWJ1Z0luZm8pKTsKIH0KIAogLy8gV2ViRnJhbWVJbXBsIHB1Ymxp
YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KQEAgLTIzMzIsOCArMjIxMSw4IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpzZXRXZWJDb3JlRnJh
bWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6aW5pdGlhbGl6
ZUFzTWFpbkZyYW1lKFdlYkNvcmU6OlBhZ2UqIHBhZ2UpCiB7Ci0gICAgUmVmUHRyPEZyYW1lPiBm
cmFtZSA9IEZyYW1lOjpjcmVhdGUocGFnZSwgMCwgJm1fZnJhbWVMb2FkZXJDbGllbnQpOwotICAg
IHNldFdlYkNvcmVGcmFtZShmcmFtZS5nZXQoKSk7CisgICAgUmVmUHRyPEZyYW1lPiBtYWluRnJh
bWUgPSBGcmFtZTo6Y3JlYXRlKHBhZ2UsIDAsICZtX2ZyYW1lTG9hZGVyQ2xpZW50KTsKKyAgICBz
ZXRXZWJDb3JlRnJhbWUobWFpbkZyYW1lLmdldCgpKTsKIAogICAgIC8vIEFkZCByZWZlcmVuY2Ug
b24gYmVoYWxmIG9mIEZyYW1lTG9hZGVyLiAgU2VlIGNvbW1lbnRzIGluCiAgICAgLy8gV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkIGZvciBtb3JlIGluZm8uCkBAIC0y
MzQxLDExICsyMjIwLDEwIEBAIHZvaWQgV2ViRnJhbWVJbXBsOjppbml0aWFsaXplQXNNYWluRnJh
bWUoV2ViQ29yZTo6UGFnZSogcGFnZSkKIAogICAgIC8vIFdlIG11c3QgY2FsbCBpbml0KCkgYWZ0
ZXIgbV9mcmFtZSBpcyBhc3NpZ25lZCBiZWNhdXNlIGl0IGlzIHJlZmVyZW5jZWQKICAgICAvLyBk
dXJpbmcgaW5pdCgpLgotICAgIG1fZnJhbWUtPmluaXQoKTsKKyAgICBmcmFtZSgpLT5pbml0KCk7
CiB9CiAKLVBhc3NSZWZQdHI8RnJhbWU+IFdlYkZyYW1lSW1wbDo6Y3JlYXRlQ2hpbGRGcmFtZSgK
LSAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyRWxlbWVudCkKK1Bhc3NSZWZQdHI8RnJhbWU+IFdlYkZyYW1lSW1wbDo6Y3JlYXRl
Q2hpbGRGcmFtZShjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyRWxlbWVudCkKIHsKICAgICBSZWZQdHI8V2ViRnJhbWVJbXBsPiB3ZWJm
cmFtZShhZG9wdFJlZihuZXcgV2ViRnJhbWVJbXBsKG1fY2xpZW50KSkpOwogCkBAIC0yMzU0LDEz
ICsyMjMyLDEyIEBAIFBhc3NSZWZQdHI8RnJhbWU+IFdlYkZyYW1lSW1wbDo6Y3JlYXRlQ2hpbGRG
cmFtZSgKICAgICAvLyBvZiB0aGlzIGZpbGUgZm9yIG1vcmUgaW5mby4KICAgICB3ZWJmcmFtZS0+
cmVmKCk7CiAKLSAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKAot
ICAgICAgICBtX2ZyYW1lLT5wYWdlKCksIG93bmVyRWxlbWVudCwgJndlYmZyYW1lLT5tX2ZyYW1l
TG9hZGVyQ2xpZW50KTsKKyAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3Jl
YXRlKGZyYW1lKCktPnBhZ2UoKSwgb3duZXJFbGVtZW50LCAmd2ViZnJhbWUtPm1fZnJhbWVMb2Fk
ZXJDbGllbnQpOwogICAgIHdlYmZyYW1lLT5zZXRXZWJDb3JlRnJhbWUoY2hpbGRGcmFtZS5nZXQo
KSk7CiAKICAgICBjaGlsZEZyYW1lLT50cmVlKCktPnNldE5hbWUocmVxdWVzdC5mcmFtZU5hbWUo
KSk7CiAKLSAgICBtX2ZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOworICAg
IGZyYW1lKCktPnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7CiAKICAgICAvLyBGcmFt
ZTo6aW5pdCgpIGNhbiB0cmlnZ2VyIG9ubG9hZCBldmVudCBpbiB0aGUgcGFyZW50IGZyYW1lLAog
ICAgIC8vIHdoaWNoIG1heSBkZXRhY2ggdGhpcyBmcmFtZSBhbmQgdHJpZ2dlciBhIG51bGwtcG9p
bnRlciBhY2Nlc3MKQEAgLTIzNzUsMTAgKzIyNTIsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBXZWJG
cmFtZUltcGw6OmNyZWF0ZUNoaWxkRnJhbWUoCiAgICAgaWYgKCFjaGlsZEZyYW1lLT50cmVlKCkt
PnBhcmVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5s
b2FkVVJMSW50b0NoaWxkRnJhbWUoCi0gICAgICAgIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCksCi0gICAgICAgIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCks
Ci0gICAgICAgIGNoaWxkRnJhbWUuZ2V0KCkpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2Fk
VVJMSW50b0NoaWxkRnJhbWUocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSwgcmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKSwgY2hpbGRGcmFtZS5nZXQoKSk7CiAK
ICAgICAvLyBBIHN5bmNocm9ub3VzIG5hdmlnYXRpb24gKGFib3V0OmJsYW5rKSB3b3VsZCBoYXZl
IGFscmVhZHkgcHJvY2Vzc2VkCiAgICAgLy8gb25sb2FkLCBzbyBpdCBpcyBwb3NzaWJsZSBmb3Ig
dGhlIGZyYW1lIHRvIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCBieQpAQCAtMjQwMywxMyAr
MjI3NywxMyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0
IEludFNpemUmIHNpemUpCiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpjcmVhdGVGcmFtZVZpZXcoKQog
ewotICAgIEFTU0VSVChtX2ZyYW1lKTsgLy8gSWYgbV9mcmFtZSBkb2Vzbid0IGV4aXN0LCB3ZSBw
cm9iYWJseSBkaWRuJ3QgaW5pdCBwcm9wZXJseS4KKyAgICBBU1NFUlQoZnJhbWUoKSk7IC8vIElm
IGZyYW1lKCkgZG9lc24ndCBleGlzdCwgd2UgcHJvYmFibHkgZGlkbid0IGluaXQgcHJvcGVybHku
CiAKICAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHZpZXdJbXBsKCk7Ci0gICAgYm9vbCBpc01h
aW5GcmFtZSA9IHdlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lOwot
ICAgIG1fZnJhbWUtPmNyZWF0ZVZpZXcod2ViVmlldy0+c2l6ZSgpLCBDb2xvcjo6d2hpdGUsIHdl
YlZpZXctPmlzVHJhbnNwYXJlbnQoKSwgIHdlYlZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpLCBpc01h
aW5GcmFtZSA/IHdlYlZpZXctPmlzRml4ZWRMYXlvdXRNb2RlRW5hYmxlZCgpIDogMCk7CisgICAg
Ym9vbCBpc01haW5GcmFtZSA9IHdlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKSA9PSBm
cmFtZSgpOworICAgIGZyYW1lKCktPmNyZWF0ZVZpZXcod2ViVmlldy0+c2l6ZSgpLCBDb2xvcjo6
d2hpdGUsIHdlYlZpZXctPmlzVHJhbnNwYXJlbnQoKSwgIHdlYlZpZXctPmZpeGVkTGF5b3V0U2l6
ZSgpLCBpc01haW5GcmFtZSA/IHdlYlZpZXctPmlzRml4ZWRMYXlvdXRNb2RlRW5hYmxlZCgpIDog
MCk7CiAgICAgaWYgKHdlYlZpZXctPnNob3VsZEF1dG9SZXNpemUoKSAmJiBpc01haW5GcmFtZSkK
LSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5lbmFibGVBdXRvU2l6ZU1vZGUodHJ1ZSwgd2ViVmll
dy0+bWluQXV0b1NpemUoKSwgd2ViVmlldy0+bWF4QXV0b1NpemUoKSk7CisgICAgICAgIGZyYW1l
KCktPnZpZXcoKS0+ZW5hYmxlQXV0b1NpemVNb2RlKHRydWUsIHdlYlZpZXctPm1pbkF1dG9TaXpl
KCksIHdlYlZpZXctPm1heEF1dG9TaXplKCkpOwogCiAgICAgaWYgKGlzTWFpbkZyYW1lICYmIHdl
YlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpCiAgICAgICAgIHdlYlZpZXctPmRldlRvb2xz
QWdlbnRQcml2YXRlKCktPm1haW5GcmFtZVZpZXdDcmVhdGVkKHRoaXMpOwpAQCAtMjQxOSwyOSAr
MjI5MywyMyBAQCBXZWJGcmFtZUltcGwqIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBm
cmFtZSkKIHsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEltcGwqPihmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpKS0+d2ViRnJhbWUoKTsKIH0KIAogV2ViRnJhbWVJbXBsKiBXZWJGcmFtZUltcGw6OmZy
b21GcmFtZU93bmVyRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghZWxlbWVu
dAotICAgICAgICB8fCAhZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpCi0gICAgICAgIHx8
ICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykKLSAgICAgICAgICAg
ICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpKSkKKyAgICAvLyBG
SVhNRTogV2h5IGRvIHdlIGNoZWNrIHNwZWNpZmljYWxseSBmb3IgPGlmcmFtZT4gYW5kIDxmcmFt
ZT4gaGVyZT8gV2h5IGNhbid0IHdlIGdldCB0aGUgV2ViRnJhbWVJbXBsIGZyb20gYW4gPG9iamVj
dD4gZWxlbWVudCwgZm9yIGV4YW1wbGUuCisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5p
c0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aWZyYW1lVGFnKSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkp
CiAgICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZUVs
ZW1lbnQgPQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lRWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOwogICAgIHJldHVybiBmcm9tRnJh
bWUoZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUoKSk7CiB9CiAKIFdlYlZpZXdJbXBsKiBXZWJG
cmFtZUltcGw6OnZpZXdJbXBsKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYg
KCFmcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBXZWJWaWV3SW1wbDo6
ZnJvbVBhZ2UobV9mcmFtZS0+cGFnZSgpKTsKKyAgICByZXR1cm4gV2ViVmlld0ltcGw6OmZyb21Q
YWdlKGZyYW1lKCktPnBhZ2UoKSk7CiB9CiAKIFdlYkRhdGFTb3VyY2VJbXBsKiBXZWJGcmFtZUlt
cGw6OmRhdGFTb3VyY2VJbXBsKCkgY29uc3QKQEAgLTI1MjcsMTEgKzIzOTUsOSBAQCB2b2lkIFdl
YkZyYW1lSW1wbDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgYm9vbCB3YXNQ
cm92aXNpb25hbCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OnNldENhbkhhdmVTY3JvbGxiYXJzKGJv
b2wgY2FuSGF2ZVNjcm9sbGJhcnMpCiB7Ci0gICAgbV9mcmFtZS0+dmlldygpLT5zZXRDYW5IYXZl
U2Nyb2xsYmFycyhjYW5IYXZlU2Nyb2xsYmFycyk7CisgICAgZnJhbWUoKS0+dmlldygpLT5zZXRD
YW5IYXZlU2Nyb2xsYmFycyhjYW5IYXZlU2Nyb2xsYmFycyk7CiB9CiAKLS8vIFdlYkZyYW1lSW1w
bCBwcml2YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KIHZvaWQgV2ViRnJhbWVJbXBsOjpjbG9zaW5nKCkKIHsKICAgICBtX2ZyYW1l
ID0gMDsKQEAgLTI1NzIsNyArMjQzOCw2IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpzZXRNYXJrZXJB
Y3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkKICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjOwogICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZChlYykpCiAgICAgICAg
IHJldHVybjsKLQogICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+c2V0TWFya2Vy
c0FjdGl2ZShyYW5nZSwgYWN0aXZlKTsKIH0KIApAQCAtMjU4Miw5ICsyNDQ3LDcgQEAgaW50IFdl
YkZyYW1lSW1wbDo6b3JkaW5hbE9mRmlyc3RNYXRjaEZvckZyYW1lKFdlYkZyYW1lSW1wbCogZnJh
bWUpIGNvbnN0CiAgICAgV2ViRnJhbWVJbXBsKiBtYWluRnJhbWVJbXBsID0gdmlld0ltcGwoKS0+
bWFpbkZyYW1lSW1wbCgpOwogICAgIC8vIEl0ZXJhdGUgZnJvbSB0aGUgbWFpbiBmcmFtZSB1cCB0
byAoYnV0IG5vdCBpbmNsdWRpbmcpIHxmcmFtZXwgYW5kCiAgICAgLy8gYWRkIHVwIHRoZSBudW1i
ZXIgb2YgbWF0Y2hlcyBmb3VuZCBzbyBmYXIuCi0gICAgZm9yIChXZWJGcmFtZUltcGwqIGl0ID0g
bWFpbkZyYW1lSW1wbDsKLSAgICAgICAgIGl0ICE9IGZyYW1lOwotICAgICAgICAgaXQgPSBzdGF0
aWNfY2FzdDxXZWJGcmFtZUltcGwqPihpdC0+dHJhdmVyc2VOZXh0KHRydWUpKSkgeworICAgIGZv
ciAoV2ViRnJhbWVJbXBsKiBpdCA9IG1haW5GcmFtZUltcGw7IGl0ICE9IGZyYW1lOyBpdCA9IHN0
YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGl0LT50cmF2ZXJzZU5leHQodHJ1ZSkpKSB7CiAgICAg
ICAgIGlmIChpdC0+bV9sYXN0TWF0Y2hDb3VudCA+IDApCiAgICAgICAgICAgICBvcmRpbmFsICs9
IGl0LT5tX2xhc3RNYXRjaENvdW50OwogICAgIH0KQEAgLTI2MTYsMTkgKzI0NzksMTQgQEAgYm9v
bCBXZWJGcmFtZUltcGw6OnNob3VsZFNjb3BlTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHNlYXJjaFRl
eHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpzY29wZVN0cmlu
Z01hdGNoZXNTb29uKGludCBpZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIHNlYXJjaFRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJGaW5k
T3B0aW9ucyYgb3B0aW9ucywgYm9vbCByZXNldCkKK3ZvaWQgV2ViRnJhbWVJbXBsOjpzY29wZVN0
cmluZ01hdGNoZXNTb29uKGludCBpZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIHNlYXJjaFRl
eHQsIGNvbnN0IFdlYkZpbmRPcHRpb25zJiBvcHRpb25zLCBib29sIHJlc2V0KQogewotICAgIG1f
ZGVmZXJyZWRTY29waW5nV29yay5hcHBlbmQobmV3IERlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVz
KAotICAgICAgICB0aGlzLCBpZGVudGlmaWVyLCBzZWFyY2hUZXh0LCBvcHRpb25zLCByZXNldCkp
OworICAgIG1fZGVmZXJyZWRTY29waW5nV29yay5hcHBlbmQobmV3IERlZmVycmVkU2NvcGVTdHJp
bmdNYXRjaGVzKHRoaXMsIGlkZW50aWZpZXIsIHNlYXJjaFRleHQsIG9wdGlvbnMsIHJlc2V0KSk7
CiB9CiAKLXZvaWQgV2ViRnJhbWVJbXBsOjpjYWxsU2NvcGVTdHJpbmdNYXRjaGVzKERlZmVycmVk
U2NvcGVTdHJpbmdNYXRjaGVzKiBjYWxsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViRmlu
ZE9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgcmVzZXQpCit2b2lkIFdlYkZyYW1lSW1wbDo6Y2FsbFNj
b3BlU3RyaW5nTWF0Y2hlcyhEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcyogY2FsbGVyLCBpbnQg
aWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LCBjb25zdCBXZWJGaW5kT3B0
aW9ucyYgb3B0aW9ucywgYm9vbCByZXNldCkKIHsKICAgICBtX2RlZmVycmVkU2NvcGluZ1dvcmsu
cmVtb3ZlKG1fZGVmZXJyZWRTY29waW5nV29yay5maW5kKGNhbGxlcikpOwotCiAgICAgc2NvcGVT
dHJpbmdNYXRjaGVzKGlkZW50aWZpZXIsIHNlYXJjaFRleHQsIG9wdGlvbnMsIHJlc2V0KTsKIAog
ICAgIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGxhc3Qgc2luY2Ugc2VhcmNoVGV4dCBpcyBwYXNz
ZWQgYnkgcmVmZXJlbmNlLgpAQCAtMjYzNywyMSArMjQ5NSwyMiBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6Y2FsbFNjb3BlU3RyaW5nTWF0Y2hlcyhEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcyogY2Fs
bGVyLAogCiB2b2lkIFdlYkZyYW1lSW1wbDo6aW52YWxpZGF0ZUlmTmVjZXNzYXJ5KCkKIHsKLSAg
ICBpZiAobV9sYXN0TWF0Y2hDb3VudCA+IG1fbmV4dEludmFsaWRhdGVBZnRlcikgewotICAgICAg
ICAvLyBGSVhNRTogKGh0dHA6Ly9iLzEwODgxNjUpIE9wdGltaXplIHRoZSBkcmF3aW5nIG9mIHRo
ZSB0aWNrbWFya3MgYW5kCi0gICAgICAgIC8vIHJlbW92ZSB0aGlzLiBUaGlzIGNhbGN1bGF0aW9u
IHNldHMgYSBtaWxlc3RvbmUgZm9yIHdoZW4gbmV4dCB0bwotICAgICAgICAvLyBpbnZhbGlkYXRl
IHRoZSBzY3JvbGxiYXIgYW5kIHRoZSBjb250ZW50IGFyZWEuIFdlIGRvIHRoaXMgc28gdGhhdCB3
ZQotICAgICAgICAvLyBkb24ndCBzcGVuZCB0b28gbXVjaCB0aW1lIGRyYXdpbmcgdGhlIHNjcm9s
bGJhciBvdmVyIGFuZCBvdmVyIGFnYWluLgotICAgICAgICAvLyBCYXNpY2FsbHksIHVwIHVudGls
IHRoZSBmaXJzdCA1MDAgbWF0Y2hlcyB0aGVyZSBpcyBubyB0aHJvdHRsZS4KLSAgICAgICAgLy8g
QWZ0ZXIgdGhlIGZpcnN0IDUwMCBtYXRjaGVzLCB3ZSBzZXQgc2V0IHRoZSBtaWxlc3RvbmUgZnVy
dGhlciBhbmQKLSAgICAgICAgLy8gZnVydGhlciBvdXQgKDc1MCwgMTEyNSwgMTY4OCwgMkssIDNL
KS4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBzdGFydFNsb3dpbmdEb3duQWZ0ZXIgPSA1MDA7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2xvd2Rvd24gPSA3NTA7Ci0gICAgICAgIGludCBp
ID0gKG1fbGFzdE1hdGNoQ291bnQgLyBzdGFydFNsb3dpbmdEb3duQWZ0ZXIpOwotICAgICAgICBt
X25leHRJbnZhbGlkYXRlQWZ0ZXIgKz0gaSAqIHNsb3dkb3duOwotCi0gICAgICAgIGludmFsaWRh
dGVBcmVhKEludmFsaWRhdGVTY3JvbGxiYXIpOwotICAgIH0KKyAgICBpZiAobV9sYXN0TWF0Y2hD
b3VudCA8PSBtX25leHRJbnZhbGlkYXRlQWZ0ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEZJWE1FOiAoaHR0cDovL2IvMTA4ODE2NSkgT3B0aW1pemUgdGhlIGRyYXdpbmcgb2YgdGhlIHRp
Y2ttYXJrcyBhbmQKKyAgICAvLyByZW1vdmUgdGhpcy4gVGhpcyBjYWxjdWxhdGlvbiBzZXRzIGEg
bWlsZXN0b25lIGZvciB3aGVuIG5leHQgdG8KKyAgICAvLyBpbnZhbGlkYXRlIHRoZSBzY3JvbGxi
YXIgYW5kIHRoZSBjb250ZW50IGFyZWEuIFdlIGRvIHRoaXMgc28gdGhhdCB3ZQorICAgIC8vIGRv
bid0IHNwZW5kIHRvbyBtdWNoIHRpbWUgZHJhd2luZyB0aGUgc2Nyb2xsYmFyIG92ZXIgYW5kIG92
ZXIgYWdhaW4uCisgICAgLy8gQmFzaWNhbGx5LCB1cCB1bnRpbCB0aGUgZmlyc3QgNTAwIG1hdGNo
ZXMgdGhlcmUgaXMgbm8gdGhyb3R0bGUuCisgICAgLy8gQWZ0ZXIgdGhlIGZpcnN0IDUwMCBtYXRj
aGVzLCB3ZSBzZXQgc2V0IHRoZSBtaWxlc3RvbmUgZnVydGhlciBhbmQKKyAgICAvLyBmdXJ0aGVy
IG91dCAoNzUwLCAxMTI1LCAxNjg4LCAySywgM0spLgorICAgIHN0YXRpYyBjb25zdCBpbnQgc3Rh
cnRTbG93aW5nRG93bkFmdGVyID0gNTAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgc2xvd2Rvd24g
PSA3NTA7CisKKyAgICBpbnQgaSA9IG1fbGFzdE1hdGNoQ291bnQgLyBzdGFydFNsb3dpbmdEb3du
QWZ0ZXI7CisgICAgbV9uZXh0SW52YWxpZGF0ZUFmdGVyICs9IGkgKiBzbG93ZG93bjsKKyAgICBp
bnZhbGlkYXRlQXJlYShJbnZhbGlkYXRlU2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBXZWJGcmFtZUlt
cGw6OmxvYWRKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCkKQEAgLTI2NjQsMjQgKzI1MjMs
MjQgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVy
bCkKICAgICAvLyBsb2NhdGlvbiBjaGFuZ2UuICBXZSBhbHNvIGFsbG93IGEgSlMgVVJMIHRvIGJl
IGxvYWRlZCBldmVuIGlmIHNjcmlwdHMgb24KICAgICAvLyB0aGUgcGFnZSBhcmUgb3RoZXJ3aXNl
IGRpc2FibGVkLgogCi0gICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT5w
YWdlKCkpCisgICAgaWYgKCFmcmFtZSgpLT5kb2N1bWVudCgpIHx8ICFmcmFtZSgpLT5wYWdlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQo
ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAKICAgICAvLyBQcm90ZWN0IHByaXZpbGVnZWQgcGFnZXMg
YWdhaW5zdCBib29rbWFya2xldHMgYW5kIG90aGVyIGphdmFzY3JpcHQgbWFuaXB1bGF0aW9ucy4K
LSAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNOb3RBbGxvd2lu
Z0phdmFzY3JpcHRVUkxzKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnByb3RvY29sKCkpKQor
ICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc05vdEFsbG93aW5n
SmF2YXNjcmlwdFVSTHMoZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJvdG9jb2woKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBzY3JpcHQgPSBkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZyhzdHJsZW4oImphdmFzY3JpcHQ6IikpKTsKLSAg
ICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChz
Y3JpcHQsIHRydWUpOworICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IGZyYW1lKCktPnNjcmlwdCgp
LT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSk7CiAKICAgICBTdHJpbmcgc2NyaXB0UmVzdWx0
OwogICAgIGlmICghcmVzdWx0LmdldFN0cmluZyhzY3JpcHRSZXN1bHQpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIW1fZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+bG9jYXRpb25D
aGFuZ2VQZW5kaW5nKCkpCi0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmxvYWRlcigpLT53
cml0ZXIoKS0+cmVwbGFjZURvY3VtZW50KHNjcmlwdFJlc3VsdCwgb3duZXJEb2N1bWVudC5nZXQo
KSk7CisgICAgaWYgKCFmcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPmxvY2F0aW9uQ2hh
bmdlUGVuZGluZygpKQorICAgICAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3Jp
dGVyKCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQsIG93bmVyRG9jdW1lbnQuZ2V0KCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6d2lsbERldGFjaFBhZ2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166282</attachid>
            <date>2012-09-28 11:08:45 -0700</date>
            <delta_ts>2012-09-28 11:30:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97924-20120928110802.patch</filename>
            <type>text/plain</type>
            <size>71850</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGY2NWU1ZDZjZjI0MDhhYTJiNGZlZTY4OGY0OWRiZWUzMTY1YmU4MzMuLjhjNjIzODY1ZTI0OWU5
NzNmNzMwOTc2MDY2MjJiMzMzMGIyMGI3MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTI3IEBACisyMDEyLTA5LTI4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBXZWJGcmFtZUltcGwuY3BwIGNvdWxkIHVzZSBhIHN0
eWxlIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk3OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAg
ICAgIFRoaXMgZmlsZSBpcyB2ZXJ5IG9sZCBhbmQgY29udGFpbnMgYSBsYXJnZSBudW1iZXIgb2Yg
c3R5bGUgZXJyb3JzIHRoYXQKKyAgICAgICAgYXJlIGNvbmZ1c2luZyBmb2xrcyBjb250cmlidXRp
bmcgbmV3IGNvZGUgdG8gdGhpcyBmaWxlLiBNb3N0IG9mIHRoZXNlCisgICAgICAgIHN0eWxlcyBh
cmUgQ2hyb21pdW0taXNtcyB0aGF0IGNyZXB0IGluIHdoZW4gdGhlIGZpbGUgd2FzIGZvcmtlZCBp
biB0aGUKKyAgICAgICAgQ2hyb21pdW0gcmVwb3NpdG9yeS4KKworICAgICAgICAqIHNyYy9XZWJG
cmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6ZnJhbWVD
b250ZW50QXNQbGFpblRleHQpOgorICAgICAgICAoQ2hyb21lUHJpbnRDb250ZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lUHJpbnRDb250ZXh0OjpzcG9vbFBhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpDaHJvbWVQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyk6Cisg
ICAgICAgIChDaHJvbWVQbHVnaW5QcmludENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpDaHJv
bWVQbHVnaW5QcmludENvbnRleHQ6OnNwb29sUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6RGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXM6OkRlZmVycmVkU2NvcGVTdHJpbmdN
YXRjaGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpEZWZlcnJlZFNjb3BlU3Ry
aW5nTWF0Y2hlczo6ZG9UaW1lb3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmZyb21G
cmFtZU93bmVyRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dW5pcXVl
TmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6YXNzaWduZWROYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZXROYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjppY29uVVJMcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjptaW5pbXVtU2Ny
b2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjptYXhpbXVtU2Nyb2xs
T2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjb250ZW50c1ByZWZlcnJl
ZFdpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkb2N1bWVudEVsZW1lbnRT
Y3JvbGxIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Omhhc0hvcml6b250
YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Omhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpvcGVuZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNldE9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6cGFyZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjp0
b3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZpcnN0Q2hpbGQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dHJhdmVy
c2VOZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjp0cmF2ZXJzZVByZXZpb3Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmaW5kQ2hpbGRCeU5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZpbmRDaGlsZEJ5RXhwcmVzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OnBlcmZvcm1hbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojp3aW5kb3dPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmJpbmRUb1dp
bmRvd09iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlw
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0SXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjb2xsZWN0
R2FyYmFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y2hlY2tJZlJ1bkluc2Vj
dXJlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlw
dEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpjYWxsRnVu
Y3Rpb25FdmVuSWZTY3JpcHREaXNhYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6bWFpbldvcmxkU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6Y3JlYXRlRmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y3Jl
YXRlU2VyaWFsaXphYmxlRmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6Y3JlYXRlRmlsZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpyZWxv
YWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnJlbG9hZFdpdGhPdmVycmlkZVVS
TCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bG9hZFJlcXVlc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6bG9hZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmxvYWRIVE1MU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjppc0xv
YWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnN0b3BMb2FkaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwcm92aXNpb25hbERhdGFTb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmRhdGFTb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OnByZXZpb3VzSGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OmN1cnJlbnRIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6ZW5hYmxlVmlld1NvdXJjZU1vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OmlzVmlld1NvdXJjZU1vZGVFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpzZXRSZWZlcnJlckZvclJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpjb21taXREb2N1bWVudERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNldE1hcmtl
ZFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFu
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cmVxdWVzdFRleHRDaGVja2luZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2VsZWN0V29yZEFyb3VuZFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5nZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6dmlzaWJsZVBvc2l0aW9uRm9yV2luZG93UG9pbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnByaW50QmVnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OmdldFByaW50UGFnZVNocmluayk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6cHJpbnRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjpwcmludEVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aXNQcmludFNjYWxp
bmdEaXNhYmxlZEZvclBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cGFn
ZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OnBhZ2VQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZmluZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpyZXBvcnRGaW5kSW5QYWdlU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZW5kT3JpZW50YXRpb25DaGFuZ2VFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2spOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmlzQWN0aXZlTWF0Y2hGcmFtZVZhbGlkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpkZWxpdmVySW50ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVJbXBsOjpjb250ZW50QXNUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVJbXBsOjpjb250ZW50QXNNYXJrdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OnJlbmRlclRyZWVBc1RleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnBy
aW50UGFnZXNXaXRoQm91bmRhcmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
c2VsZWN0aW9uQm91bmRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2Vs
ZWN0aW9uU3RhcnRIYXNTcGVsbGluZ01hcmtlckZvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojppbml0aWFsaXplQXNNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6
OmNyZWF0ZUNoaWxkRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNyZWF0
ZUZyYW1lVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnZpZXdJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjpzZXRDYW5IYXZlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6c2V0TWFya2VyQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpvcmRpbmFsT2ZGaXJzdE1hdGNoRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlc1Nvb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OmNhbGxTY29wZVN0cmluZ01hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OmludmFsaWRhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6bG9hZEphdmFTY3JpcHRVUkwpOgorCiAyMDEyLTA5LTI4ICBMZWFuZHJvIEdy
YWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIEZpeCB0aGUgZmluZC1pbi1wYWdlIGltcGxlbWVudGF0aW9uIGZvciBkZXRhY2hpbmcgZnJh
bWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXgg
MzMwMDFiY2ZlMTZkZDU2YTU2ZmM3MTc5YmIwZDZlZDk2YTgzODhlNy4uY2M3ZjQwNzMzYTY4ZTI5
YmIzMjQyYzQ3NmZmZGE4MTFmMjgwZjE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGcmFtZUltcGwuY3BwCkBAIC03MiwxNSArNzIsMTkgQEAKICNpbmNsdWRlICJXZWJGcmFt
ZUltcGwuaCIKIAogI2luY2x1ZGUgIkFzc29jaWF0ZWRVUkxMb2FkZXIuaCIKKyNpbmNsdWRlICJB
c3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29uc29s
ZS5oIgorI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJET01VdGlsaXRpZXNQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93SW50
ZW50cy5oIgogI2luY2x1ZGUgIkRlbGl2ZXJlZEludGVudC5oIgogI2luY2x1ZGUgIkRlbGl2ZXJl
ZEludGVudENsaWVudEltcGwuaCIKKyNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJE
b2N1bWVudE1hcmtlci5oIgpAQCAtODgsNiArOTIsNyBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFwcGVy
LmgiCisjaW5jbHVkZSAiRmlsZUVudHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVR5cGUuaCIK
ICNpbmNsdWRlICJGaW5kSW5QYWdlQ29vcmRpbmF0ZXMuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKQEAgLTE0NCw2ICsxNDksMTAgQEAKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRv
ci5oIgorI2luY2x1ZGUgIlY4RE9NRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlY4RGlyZWN0b3J5
RW50cnkuaCIKKyNpbmNsdWRlICJWOEZpbGVFbnRyeS5oIgorI2luY2x1ZGUgIlY4R0NDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRl
ICJXZWJDb25zb2xlTWVzc2FnZS5oIgogI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCkBAIC0xODEs
MjMgKzE5MCwxMSBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTEVycm9yLmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1
YmxpYy9XZWJGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKLSNp
ZiBVU0UoVjgpCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgotI2luY2x1
ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGaWxlRW50cnkuaCIKLSNpbmNsdWRlICJW
OERpcmVjdG9yeUVudHJ5LmgiCi0jaW5jbHVkZSAiVjhET01GaWxlU3lzdGVtLmgiCi0jaW5jbHVk
ZSAiVjhGaWxlRW50cnkuaCIKLSNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgotI2luY2x1ZGUg
PHB1YmxpYy9XZWJGaWxlU3lzdGVtLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjEyLDExICsyMDksMTIgQEAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHdlYkZyYW1lQWN0aXZlQ291bnQgPSAiV2ViRnJhbWVBY3RpdmVDb3Vu
dCI7CiAvLyB0aGUgdGV4dCBvZiBlYWNoIGZyYW1lIGluIHR1cm4gdG8gdGhlIHxvdXRwdXR8IHVw
IHRvIHxtYXhDaGFyc3wgbGVuZ3RoLgogLy8KIC8vIFRoZSB8ZnJhbWV8IG11c3QgYmUgbm9uLW51
bGwuCi1zdGF0aWMgdm9pZCBmcmFtZUNvbnRlbnRBc1BsYWluVGV4dChzaXplX3QgbWF4Q2hhcnMs
IEZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxVQ2hhcj4qIG91dHB1dCkKKy8vCisvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBTdHJpbmdCdWls
ZGVyIHJhdGhlciB0aGFuIFZlY3RvcjxVQ2hhcj4uCitzdGF0aWMgdm9pZCBmcmFtZUNvbnRlbnRB
c1BsYWluVGV4dChzaXplX3QgbWF4Q2hhcnMsIEZyYW1lKiBmcmFtZSwgVmVjdG9yPFVDaGFyPiog
b3V0cHV0KQogewotICAgIERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvYykKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAg
ICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWZyYW1lLT52aWV3
KCkpCkBAIC0yMjgsOSArMjI2LDkgQEAgc3RhdGljIHZvaWQgZnJhbWVDb250ZW50QXNQbGFpblRl
eHQoc2l6ZV90IG1heENoYXJzLCBGcmFtZSogZnJhbWUsCiAgICAgICAgIGZyYW1lLT52aWV3KCkt
PmxheW91dCgpOwogCiAgICAgLy8gU2VsZWN0IHRoZSBkb2N1bWVudCBib2R5LgotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UoZG9jLT5jcmVhdGVSYW5nZSgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlKGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpKTsKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlv
biA9IDA7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhkb2MtPmJvZHkoKSwgZXhjZXB0
aW9uKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGRvY3VtZW50LT5ib2R5KCksIGV4
Y2VwdGlvbik7CiAKICAgICBpZiAoIWV4Y2VwdGlvbikgewogICAgICAgICAvLyBUaGUgdGV4dCBp
dGVyYXRvciB3aWxsIHdhbGsgbm9kZXMgZ2l2aW5nIHVzIHRleHQuIFRoaXMgaXMgc2ltaWxhciB0
bwpAQCAtMzYyLDM0ICszNjAsMzMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wcmludGVk
UGFnZVdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsKICAgICB9CiAKLSAgICAvLyBTcG9vbHMgdGhl
IHByaW50ZWQgcGFnZSwgYSBzdWJyZWN0IG9mIG1fZnJhbWUuIFNraXAgdGhlIHNjYWxlIHN0ZXAu
CisgICAgLy8gU3Bvb2xzIHRoZSBwcmludGVkIHBhZ2UsIGEgc3VicmVjdCBvZiBmcmFtZSgpLiBT
a2lwIHRoZSBzY2FsZSBzdGVwLgogICAgIC8vIE5hdGl2ZVRoZW1lIGRvZXNuJ3QgcGxheSB3ZWxs
IHdpdGggc2NhbGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dzZXIgc2lkZQogICAgIC8vIGluc3Rl
YWQuIFJldHVybnMgdGhlIHNjYWxlIHRvIGJlIGFwcGxpZWQuCiAgICAgLy8gT24gTGludXgsIHdl
IGRvbid0IGhhdmUgdGhlIHByb2JsZW0gd2l0aCBOYXRpdmVUaGVtZSwgaGVuY2Ugd2UgbGV0IFdl
YktpdAogICAgIC8vIGRvIHRoZSBzY2FsaW5nIGFuZCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZS4K
LSAgICB2aXJ0dWFsIGZsb2F0IHNwb29sUGFnZShHcmFwaGljc0NvbnRleHQmIGN0eCwgaW50IHBh
Z2VOdW1iZXIpCisgICAgdmlydHVhbCBmbG9hdCBzcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBpbnQgcGFnZU51bWJlcikKICAgICB7CiAgICAgICAgIEludFJlY3QgcGFnZVJlY3Qg
PSBtX3BhZ2VSZWN0c1twYWdlTnVtYmVyXTsKICAgICAgICAgZmxvYXQgc2NhbGUgPSBtX3ByaW50
ZWRQYWdlV2lkdGggLyBwYWdlUmVjdC53aWR0aCgpOwogCi0gICAgICAgIGN0eC5zYXZlKCk7Cisg
ICAgICAgIGNvbnRleHQuc2F2ZSgpOwogI2lmIE9TKFVOSVgpICYmICFPUyhEQVJXSU4pCi0gICAg
ICAgIGN0eC5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGUsIHNjYWxlKSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlLCBzY2FsZSkpOwogI2VuZGlm
Ci0gICAgICAgIGN0eC50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KC1wYWdlUmVjdC54KCkp
LAotICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PigtcGFnZVJlY3QueSgp
KSk7Ci0gICAgICAgIGN0eC5jbGlwKHBhZ2VSZWN0KTsKLSAgICAgICAgbV9mcmFtZS0+dmlldygp
LT5wYWludENvbnRlbnRzKCZjdHgsIHBhZ2VSZWN0KTsKLSAgICAgICAgY3R4LnJlc3RvcmUoKTsK
KyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KC1wYWdlUmVjdC54
KCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oLXBhZ2VSZWN0LnkoKSkpOworICAgICAgICBjb250ZXh0
LmNsaXAocGFnZVJlY3QpOworICAgICAgICBmcmFtZSgpLT52aWV3KCktPnBhaW50Q29udGVudHMo
JmNvbnRleHQsIHBhZ2VSZWN0KTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgICAg
IHJldHVybiBzY2FsZTsKICAgICB9CiAKICAgICB2b2lkIHNwb29sQWxsUGFnZXNXaXRoQm91bmRh
cmllcyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBw
YWdlU2l6ZUluUGl4ZWxzKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgp
IHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkp
CisgICAgICAgIGlmICghZnJhbWUoKS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUoKS0+dmlldygpIHx8
ICFmcmFtZSgpLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgICAgICBm
cmFtZSgpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgICAgICBmbG9hdCBwYWdl
SGVpZ2h0OwogICAgICAgICBjb21wdXRlUGFnZVJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KDAs
IDApLCBwYWdlU2l6ZUluUGl4ZWxzKSwgMCwgMCwgMSwgcGFnZUhlaWdodCk7CkBAIC00MTEsOCAr
NDA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7
CiAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKDAs
IDAsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJH
Qik7Ci0gICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdMaW5lKEludFBvaW50KDAs
IGN1cnJlbnRIZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRQb2ludChwYWdlV2lkdGgsIGN1cnJlbnRIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgY3VycmVudEhlaWdodCksIEludFBv
aW50KHBhZ2VXaWR0aCwgY3VycmVudEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5MiwxMiArNDg4LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcGFnZUNvdW50OwogICAgIH0KIAotICAgIC8vIFNw
b29scyB0aGUgcHJpbnRlZCBwYWdlLCBhIHN1YnJlY3Qgb2YgbV9mcmFtZS4gIFNraXAgdGhlIHNj
YWxlIHN0ZXAuCisgICAgLy8gU3Bvb2xzIHRoZSBwcmludGVkIHBhZ2UsIGEgc3VicmVjdCBvZiBm
cmFtZSgpLiBTa2lwIHRoZSBzY2FsZSBzdGVwLgogICAgIC8vIE5hdGl2ZVRoZW1lIGRvZXNuJ3Qg
cGxheSB3ZWxsIHdpdGggc2NhbGluZy4gU2NhbGluZyBpcyBkb25lIGJyb3dzZXIgc2lkZQotICAg
IC8vIGluc3RlYWQuICBSZXR1cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVkLgotICAgIHZpcnR1
YWwgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dCYgY3R4LCBpbnQgcGFnZU51bWJlcikK
KyAgICAvLyBpbnN0ZWFkLiBSZXR1cm5zIHRoZSBzY2FsZSB0byBiZSBhcHBsaWVkLgorICAgIHZp
cnR1YWwgZmxvYXQgc3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgaW50IHBhZ2VO
dW1iZXIpCiAgICAgewotICAgICAgICBtX3BsdWdpbi0+cHJpbnRQYWdlKHBhZ2VOdW1iZXIsICZj
dHgpOworICAgICAgICBtX3BsdWdpbi0+cHJpbnRQYWdlKHBhZ2VOdW1iZXIsICZjb250ZXh0KTsK
ICAgICAgICAgcmV0dXJuIDEuMDsKICAgICB9CiAKQEAgLTUyNywxMSArNTIzLDcgQEAgV2ViRnJh
bWVJbXBsOjpGaW5kTWF0Y2g6OkZpbmRNYXRjaChQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgaW50
IG9yZGluYWwpCiAKIGNsYXNzIFdlYkZyYW1lSW1wbDo6RGVmZXJyZWRTY29wZVN0cmluZ01hdGNo
ZXMgewogcHVibGljOgotICAgIERlZmVycmVkU2NvcGVTdHJpbmdNYXRjaGVzKFdlYkZyYW1lSW1w
bCogd2ViRnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkZW50aWZp
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzZWFy
Y2hUZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkZpbmRPcHRp
b25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzZXQp
CisgICAgRGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXMoV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSwg
aW50IGlkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgc2VhcmNoVGV4dCwgY29uc3QgV2ViRmlu
ZE9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgcmVzZXQpCiAgICAgICAgIDogbV90aW1lcih0aGlzLCAm
RGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXM6OmRvVGltZW91dCkKICAgICAgICAgLCBtX3dlYkZy
YW1lKHdlYkZyYW1lKQogICAgICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQpAQCAtNTQ1
LDggKzUzNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBkb1RpbWVvdXQoVGltZXI8
RGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXM+KikKICAgICB7Ci0gICAgICAgIG1fd2ViRnJhbWUt
PmNhbGxTY29wZVN0cmluZ01hdGNoZXMoCi0gICAgICAgICAgICB0aGlzLCBtX2lkZW50aWZpZXIs
IG1fc2VhcmNoVGV4dCwgbV9vcHRpb25zLCBtX3Jlc2V0KTsKKyAgICAgICAgbV93ZWJGcmFtZS0+
Y2FsbFNjb3BlU3RyaW5nTWF0Y2hlcyh0aGlzLCBtX2lkZW50aWZpZXIsIG1fc2VhcmNoVGV4dCwg
bV9vcHRpb25zLCBtX3Jlc2V0KTsKICAgICB9CiAKICAgICBUaW1lcjxEZWZlcnJlZFNjb3BlU3Ry
aW5nTWF0Y2hlcz4gbV90aW1lcjsKQEAgLTU4OSwyMyArNTgwLDIyIEBAIFdlYkZyYW1lKiBXZWJG
cmFtZTo6ZnJhbWVGb3JDb250ZXh0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCiAK
IFdlYkZyYW1lKiBXZWJGcmFtZTo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFdlYkVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJF
bGVtZW50KAotICAgICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+KGVsZW1lbnQpLmdldCgpKTsKKyAg
ICByZXR1cm4gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoUGFzc1JlZlB0cjxF
bGVtZW50PihlbGVtZW50KS5nZXQoKSk7CiB9CiAKIFdlYlN0cmluZyBXZWJGcmFtZUltcGw6OnVu
aXF1ZU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLT50cmVlKCktPnVuaXF1ZU5h
bWUoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CiB9CiAKIFdl
YlN0cmluZyBXZWJGcmFtZUltcGw6OmFzc2lnbmVkTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpOworICAgIHJldHVybiBmcmFtZSgpLT50cmVlKCktPm5h
bWUoKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnNldE5hbWUoY29uc3QgV2ViU3RyaW5nJiBu
YW1lKQogewotICAgIG1fZnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKKyAgICBmcmFtZSgp
LT50cmVlKCktPnNldE5hbWUobmFtZSk7CiB9CiAKIGxvbmcgbG9uZyBXZWJGcmFtZUltcGw6Omlk
ZW50aWZpZXIoKSBjb25zdApAQCAtNjE1LDM5ICs2MDUsMzUgQEAgbG9uZyBsb25nIFdlYkZyYW1l
SW1wbDo6aWRlbnRpZmllcigpIGNvbnN0CiAKIFdlYlZlY3RvcjxXZWJJY29uVVJMPiBXZWJGcmFt
ZUltcGw6Omljb25VUkxzKGludCBpY29uVHlwZXMpIGNvbnN0CiB7Ci0gICAgRnJhbWVMb2FkZXIq
IGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7CiAgICAgLy8gVGhlIFVSTCB0byB0aGUg
aWNvbiBtYXkgYmUgaW4gdGhlIGhlYWRlci4gQXMgc3VjaCwgb25seQogICAgIC8vIGFzayB0aGUg
bG9hZGVyIGZvciB0aGUgaWNvbiBpZiBpdCdzIGZpbmlzaGVkIGxvYWRpbmcuCi0gICAgaWYgKGZy
YW1lTG9hZGVyLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJu
IGZyYW1lTG9hZGVyLT5pY29uKCktPnVybHNGb3JUeXBlcyhpY29uVHlwZXMpOworICAgIGlmIChm
cmFtZSgpLT5sb2FkZXIoKS0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlQ29tcGxldGUpCisgICAgICAg
IHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+aWNvbigpLT51cmxzRm9yVHlwZXMoaWNvblR5cGVz
KTsKICAgICByZXR1cm4gV2ViVmVjdG9yPFdlYkljb25VUkw+KCk7CiB9CiAKIFdlYlNpemUgV2Vi
RnJhbWVJbXBsOjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewogICAgIEZyYW1lVmlldyogdmlldyA9
IGZyYW1lVmlldygpOwotICAgIGlmICh2aWV3KQotICAgICAgICByZXR1cm4gdmlldy0+c2Nyb2xs
T2Zmc2V0KCk7Ci0KLSAgICByZXR1cm4gV2ViU2l6ZSgpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuIFdlYlNpemUoKTsKKyAgICByZXR1cm4gdmlldy0+c2Nyb2xsT2Zmc2V0KCk7CiB9
CiAKIFdlYlNpemUgV2ViRnJhbWVJbXBsOjptaW5pbXVtU2Nyb2xsT2Zmc2V0KCkgY29uc3QKIHsK
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKLSAgICBpZiAodmlldykKLSAgICAg
ICAgcmV0dXJuIHZpZXctPm1pbmltdW1TY3JvbGxQb3NpdGlvbigpIC0gSW50UG9pbnQoKTsKLQot
ICAgIHJldHVybiBXZWJTaXplKCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gV2Vi
U2l6ZSgpOworICAgIHJldHVybiB2aWV3LT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKSAtIEludFBv
aW50KCk7CiB9CiAKIFdlYlNpemUgV2ViRnJhbWVJbXBsOjptYXhpbXVtU2Nyb2xsT2Zmc2V0KCkg
Y29uc3QKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKLSAgICBpZiAodmll
dykKLSAgICAgICAgcmV0dXJuIHZpZXctPm1heGltdW1TY3JvbGxQb3NpdGlvbigpIC0gSW50UG9p
bnQoKTsKLQotICAgIHJldHVybiBXZWJTaXplKCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm4gV2ViU2l6ZSgpOworICAgIHJldHVybiB2aWV3LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSAtIEludFBvaW50KCk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpzZXRTY3JvbGxPZmZzZXQo
Y29uc3QgV2ViU2l6ZSYgb2Zmc2V0KQpAQCAtNjYzLDE4ICs2NDksMTcgQEAgV2ViU2l6ZSBXZWJG
cmFtZUltcGw6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CiAKIGludCBXZWJGcmFtZUltcGw6OmNvbnRl
bnRzUHJlZmVycmVkV2lkdGgoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgp
ICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkgeworICAgIGlmIChmcmFtZSgp
LT5kb2N1bWVudCgpICYmIGZyYW1lKCktPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkgewogICAg
ICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQot
ICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpLT5taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCkt
PnJlbmRlclZpZXcoKS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQogCiBpbnQgV2ViRnJhbWVJbXBsOjpkb2N1bWVudEVsZW1lbnRTY3JvbGxIZWln
aHQoKSBjb25zdAogewotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnNjcm9sbEhlaWdodCgpOworICAgIGlmIChmcmFt
ZSgpLT5kb2N1bWVudCgpICYmIGZyYW1lKCktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
KQorICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkt
PnNjcm9sbEhlaWdodCgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC02ODUsMTIgKzY3MCwxMiBA
QCBib29sIFdlYkZyYW1lSW1wbDo6aGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdAogCiBib29sIFdl
YkZyYW1lSW1wbDo6aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZnJhbWUgJiYgbV9mcmFtZS0+dmlldygpICYmIG1fZnJhbWUtPnZpZXcoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpOworICAgIHJldHVybiBmcmFtZSgpICYmIGZyYW1lKCktPnZpZXcoKSAmJiBm
cmFtZSgpLT52aWV3KCktPmhvcml6b250YWxTY3JvbGxiYXIoKTsKIH0KIAogYm9vbCBXZWJGcmFt
ZUltcGw6Omhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFt
ZSAmJiBtX2ZyYW1lLT52aWV3KCkgJiYgbV9mcmFtZS0+dmlldygpLT52ZXJ0aWNhbFNjcm9sbGJh
cigpOworICAgIHJldHVybiBmcmFtZSgpICYmIGZyYW1lKCktPnZpZXcoKSAmJiBmcmFtZSgpLT52
aWV3KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAKIFdlYlZpZXcqIFdlYkZyYW1lSW1wbDo6
dmlldygpIGNvbnN0CkBAIC03MDAsNjYgKzY4NSw3NiBAQCBXZWJWaWV3KiBXZWJGcmFtZUltcGw6
OnZpZXcoKSBjb25zdAogCiBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpvcGVuZXIoKSBjb25zdAog
ewotICAgIEZyYW1lKiBvcGVuZXIgPSAwOwotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBvcGVu
ZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+b3BlbmVyKCk7Ci0gICAgcmV0dXJuIGZyb21GcmFtZShv
cGVuZXIpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGZyb21GcmFtZShmcmFtZSgpLT5sb2FkZXIoKS0+b3BlbmVyKCkpOwogfQogCi12b2lkIFdlYkZy
YW1lSW1wbDo6c2V0T3BlbmVyKGNvbnN0IFdlYkZyYW1lKiBmcmFtZSkKK3ZvaWQgV2ViRnJhbWVJ
bXBsOjpzZXRPcGVuZXIoY29uc3QgV2ViRnJhbWUqIHdlYkZyYW1lKQogewotICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5zZXRPcGVuZXIoZnJhbWUgPwotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBX
ZWJGcmFtZUltcGwqPihmcmFtZSktPm1fZnJhbWUgOiAwKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIo
KS0+c2V0T3BlbmVyKHdlYkZyYW1lID8gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViRnJhbWVJbXBsKj4o
d2ViRnJhbWUpLT5mcmFtZSgpIDogMCk7CiB9CiAKIFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6OnBh
cmVudCgpIGNvbnN0CiB7Ci0gICAgRnJhbWUqIHBhcmVudCA9IDA7Ci0gICAgaWYgKG1fZnJhbWUp
Ci0gICAgICAgIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgcmV0dXJu
IGZyb21GcmFtZShwYXJlbnQpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZSgpLT50cmVlKCktPnBhcmVudCgpKTsKIH0KIAog
V2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6dG9wKCkgY29uc3QKIHsKLSAgICBpZiAobV9mcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZyb21GcmFtZShtX2ZyYW1lLT50cmVlKCktPnRvcCgpKTsKLQotICAg
IHJldHVybiAwOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGZyb21GcmFtZShmcmFtZSgpLT50cmVlKCktPnRvcCgpKTsKIH0KIAogV2ViRnJhbWUqIFdl
YkZyYW1lSW1wbDo6Zmlyc3RDaGlsZCgpIGNvbnN0CiB7CisgICAgaWYgKCFmcmFtZSgpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1lKCktPnRyZWUoKS0+Zmly
c3RDaGlsZCgpKTsKIH0KIAogV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6bGFzdENoaWxkKCkgY29u
c3QKIHsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBm
cm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgpLT5sYXN0Q2hpbGQoKSk7CiB9CiAKIFdlYkZyYW1lKiBX
ZWJGcmFtZUltcGw6Om5leHRTaWJsaW5nKCkgY29uc3QKIHsKKyAgICBpZiAoIWZyYW1lKCkpCisg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBmcm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgpLT5u
ZXh0U2libGluZygpKTsKIH0KIAogV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6cHJldmlvdXNTaWJs
aW5nKCkgY29uc3QKIHsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBmcm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiB9
CiAKIFdlYkZyYW1lKiBXZWJGcmFtZUltcGw6OnRyYXZlcnNlTmV4dChib29sIHdyYXApIGNvbnN0
CiB7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZnJv
bUZyYW1lKGZyYW1lKCktPnRyZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcCkpOwogfQog
CiBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzKGJvb2wgd3JhcCkgY29u
c3QKIHsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBm
cm9tRnJhbWUoZnJhbWUoKS0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAod3JhcCkp
OwogfQogCiBXZWJGcmFtZSogV2ViRnJhbWVJbXBsOjpmaW5kQ2hpbGRCeU5hbWUoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lKSBjb25zdAogeworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGZyb21GcmFtZShmcmFtZSgpLT50cmVlKCktPmNoaWxkKG5hbWUpKTsK
IH0KIApAQCAtNzY4LDMzICs3NjMsMjUgQEAgV2ViRnJhbWUqIFdlYkZyYW1lSW1wbDo6ZmluZENo
aWxkQnlFeHByZXNzaW9uKGNvbnN0IFdlYlN0cmluZyYgeHBhdGgpIGNvbnN0CiAgICAgaWYgKHhw
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
KCktPmRvY3VtZW50KCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVm
UHRyPFhQYXRoUmVzdWx0PiB4cGF0aFJlc3VsdCA9Ci0gICAgICAgIGRvY3VtZW50LT5ldmFsdWF0
ZSh4cGF0aCwKLSAgICAgICAgZG9jdW1lbnQsCi0gICAgICAgIDAsIC8vIG5hbWVzcGFjZQotICAg
ICAgICBYUGF0aFJlc3VsdDo6T1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUsCi0gICAgICAgIDAs
IC8vIFhQYXRoUmVzdWx0IG9iamVjdAotICAgICAgICBlYyk7CisgICAgUmVmUHRyPFhQYXRoUmVz
dWx0PiB4cGF0aFJlc3VsdCA9IGRvY3VtZW50LT5ldmFsdWF0ZSh4cGF0aCwgZG9jdW1lbnQsIDAs
IFhQYXRoUmVzdWx0OjpPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSwgMCwgZWMpOwogICAgIGlm
ICgheHBhdGhSZXN1bHQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgTm9kZSogbm9kZSA9IHhw
YXRoUmVzdWx0LT5pdGVyYXRlTmV4dChlYyk7Ci0KICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RnJhbWVPd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBmcmFtZUVsZW1lbnQgPQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRnJhbWVP
d25lckVsZW1lbnQqPihub2RlKTsKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwogICAgIHJl
dHVybiBmcm9tRnJhbWUoZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUoKSk7CiB9CiAKIFdlYkRv
Y3VtZW50IFdlYkZyYW1lSW1wbDo6ZG9jdW1lbnQoKSBjb25zdAogewotICAgIGlmICghbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIWZyYW1lKCkgfHwgIWZyYW1lKCkt
PmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBXZWJEb2N1bWVudCgpOwotICAgIHJldHVybiBX
ZWJEb2N1bWVudChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gV2ViRG9jdW1lbnQo
ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiB9CiAKIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIqIFdlYkZy
YW1lSW1wbDo6YW5pbWF0aW9uQ29udHJvbGxlcigpCkBAIC04MDQsNTkgKzc5MSw0OSBAQCBXZWJB
bmltYXRpb25Db250cm9sbGVyKiBXZWJGcmFtZUltcGw6OmFuaW1hdGlvbkNvbnRyb2xsZXIoKQog
CiBXZWJQZXJmb3JtYW5jZSBXZWJGcmFtZUltcGw6OnBlcmZvcm1hbmNlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1cm4gV2ViUGVy
Zm9ybWFuY2UoKTsKLQotICAgIHJldHVybiBXZWJQZXJmb3JtYW5jZShtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5kb21XaW5kb3coKS0+cGVyZm9ybWFuY2UoKSk7CisgICAgcmV0dXJuIFdlYlBlcmZvcm1h
bmNlKGZyYW1lKCktPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5wZXJmb3JtYW5jZSgpKTsKIH0K
IAogTlBPYmplY3QqIFdlYkZyYW1lSW1wbDo6d2luZG93T2JqZWN0KCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fZnJhbWUpCisgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKyAgICBy
ZXR1cm4gZnJhbWUoKS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CiB9CiAKIHZv
aWQgV2ViRnJhbWVJbXBsOjpiaW5kVG9XaW5kb3dPYmplY3QoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBOUE9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVChtX2ZyYW1lKTsKLSAgICBpZiAoIW1f
ZnJhbWUgfHwgIW1fZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRv
RXhlY3V0ZVNjcmlwdCkpCisgICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFtZSgpLT5zY3JpcHQoKS0+
Y2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1
cm47Ci0KLSAgICBTdHJpbmcga2V5ID0gbmFtZTsKLSNpZiBVU0UoVjgpCi0gICAgbV9mcmFtZS0+
c2NyaXB0KCktPmJpbmRUb1dpbmRvd09iamVjdChtX2ZyYW1lLCBrZXksIG9iamVjdCk7Ci0jZWxz
ZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKKyAgICBmcmFtZSgpLT5zY3JpcHQoKS0+
YmluZFRvV2luZG93T2JqZWN0KGZyYW1lKCksIFN0cmluZyhuYW1lKSwgb2JqZWN0KTsKIH0KIAog
dm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0U291cmNlJiBz
b3VyY2UpCiB7CisgICAgQVNTRVJUKGZyYW1lKCkpOwogICAgIFRleHRQb3NpdGlvbiBwb3NpdGlv
bihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIE9yZGlu
YWxOdW1iZXI6OmZpcnN0KCkpOwotICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0
KAotICAgICAgICBTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3Np
dGlvbikpOworICAgIGZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSk7CiB9CiAKLXZvaWQgV2Vi
RnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAotICAgIGludCB3b3JsZElE
LCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywK
LSAgICBpbnQgZXh0ZW5zaW9uR3JvdXApCit2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3Vy
Y2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBW
ZWN0b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CiAK
KyAgICBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytpKSB7CiAgICAgICAgIFRleHRQb3NpdGlvbiBwb3Np
dGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0luW2ldLnN0YXJ0TGlu
ZSksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpOwotICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3Jp
cHRTb3VyY2VDb2RlKAotICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltp
XS51cmwsIHBvc2l0aW9uKSk7CisgICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNv
ZGUoc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7CiAgICAg
fQogCi0gICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxk
SUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAwKTsKKyAgICBmcmFtZSgpLT5zY3JpcHQoKS0+
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAs
IDApOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2luKGludCB3b3JsZElELCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4p
CiB7Ci0gICAgbV9mcmFtZS0+c2NyaXB0KCktPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdp
bih3b3JsZElELCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisgICAgQVNTRVJUKGZyYW1lKCkpOwor
ICAgIGZyYW1lKCktPnNjcmlwdCgpLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4od29y
bGRJRCwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6YWRk
TWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSkKQEAgLTg4
NywyNyArODY0LDIzIEBAIHZvaWQgV2ViRnJhbWVJbXBsOjphZGRNZXNzYWdlVG9Db25zb2xlKGNv
bnN0IFdlYkNvbnNvbGVNZXNzYWdlJiBtZXNzYWdlKQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6Y29s
bGVjdEdhcmJhZ2UoKQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIWZyYW1lKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZnJhbWUtPnNldHRpbmdzKCktPmlzU2NyaXB0RW5h
YmxlZCgpKQorICAgIGlmICghZnJhbWUoKS0+c2V0dGluZ3MoKS0+aXNTY3JpcHRFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIHRoZSBTY3JpcHRD
b250cm9sbGVyIGFuZCBtYWtlIGl0IEpTIG5ldXRyYWwuCi0jaWYgVVNFKFY4KQogICAgIFY4R0ND
b250cm9sbGVyOjpjb2xsZWN0R2FyYmFnZSgpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotI2VuZGlmCiB9CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjpjaGVja0lmUnVuSW5zZWN1cmVDb250
ZW50KGNvbnN0IFdlYlVSTCYgdXJsKSBjb25zdAogewotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxv
YWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOwotICAgIHJldHVybiBmcmFtZUxvYWRlci0+Y2hlY2tJ
ZlJ1bkluc2VjdXJlQ29udGVudChtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LCB1cmwpOworICAgIEFTU0VSVChmcmFtZSgpKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVy
KCktPmNoZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQoZnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSwgdXJsKTsKIH0KIAotI2lmIFVTRShWOCkKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZShjb25zdCBXZWJTY3Jp
cHRTb3VyY2UmIHNvdXJjZSkKIHsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisKICAgICAvLyBGSVhN
RTogVGhpcyBmYWtlIHVzZXIgZ2VzdHVyZSBpcyByZXF1aXJlZCB0byBtYWtlIGEgYnVuY2ggb2Yg
cHlhdXRvCiAgICAgLy8gdGVzdHMgcGFzcy4gSWYgdGhpcyBpc24ndCBuZWVkZWQgaW4gbm9uLXRl
c3Qgc2l0dWF0aW9ucywgd2Ugc2hvdWxkCiAgICAgLy8gY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyBj
b2RlIGFuZCBjaGFuZ2luZyB0aGUgdGVzdHMuCkBAIC05MTUsMTMgKzg4OCwxMyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0QW5kUmV0dXJuVmFsdWUo
Y29uc3QgV2ViU2NyaXB0UwogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0
b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAKICAgICBUZXh0UG9zaXRpb24g
cG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUp
LCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKLSAgICByZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCkt
PmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwg
cG9zaXRpb24pKS52OFZhbHVlKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPnNjcmlwdCgpLT5leGVj
dXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0
aW9uKSkudjhWYWx1ZSgpOwogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCgKLSAgICBpbnQgd29ybGRJRCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBz
b3VyY2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCi0gICAgaW50IGV4dGVuc2lvbkdyb3VwLCBX
ZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4gPiogcmVzdWx0cykKK3ZvaWQgV2ViRnJhbWVJ
bXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBXZWJT
Y3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywgaW50IGV4dGVuc2lv
bkdyb3VwLCBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4gPiogcmVzdWx0cykKIHsKKyAg
ICBBU1NFUlQoZnJhbWUoKSk7CisKICAgICBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNl
czsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKQEAg
LTkzMSw3NiArOTA0LDY5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKAogCiAgICAgaWYgKHJlc3VsdHMpIHsKICAgICAgICAgVmVjdG9yPFNjcmlwdFZh
bHVlPiBzY3JpcHRSZXN1bHRzOwotICAgICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsICZzY3JpcHRS
ZXN1bHRzKTsKKyAgICAgICAgZnJhbWUoKS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdv
cmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAmc2NyaXB0UmVzdWx0cyk7CiAg
ICAgICAgIFdlYlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+IHY4UmVzdWx0cyhzY3JpcHRS
ZXN1bHRzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY3JpcHRS
ZXN1bHRzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgdjhSZXN1bHRzW2ldID0gdjg6OkxvY2Fs
PHY4OjpWYWx1ZT46Ok5ldyhzY3JpcHRSZXN1bHRzW2ldLnY4VmFsdWUoKSk7CiAgICAgICAgIHJl
c3VsdHMtPnN3YXAodjhSZXN1bHRzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9mcmFtZS0+c2Ny
aXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lv
bkdyb3VwLCAwKTsKKyAgICAgICAgZnJhbWUoKS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAwKTsKIH0KIAotLy8gQ2Fs
bCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcmVjZWl2ZXIgYW5kIGFyZ3VtZW50cywgYnlw
YXNzaW5nIGNhbkV4ZWN1dGVTY3JpcHRzLgotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1l
SW1wbDo6Y2FsbEZ1bmN0aW9uRXZlbklmU2NyaXB0RGlzYWJsZWQodjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZWNl
aXZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBhcmdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGFyZ3ZbXSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJGcmFtZUltcGw6OmNhbGxG
dW5jdGlvbkV2ZW5JZlNjcmlwdERpc2FibGVkKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5j
dGlvbiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZWNlaXZlciwgaW50IGFyZ2MsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBhcmd2W10pCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnNjcmlwdCgpLT5j
YWxsRnVuY3Rpb25FdmVuSWZTY3JpcHREaXNhYmxlZChmdW5jdGlvbiwgcmVjZWl2ZXIsIGFyZ2Ms
IGFyZ3YpLnY4VmFsdWUoKTsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisgICAgcmV0dXJuIGZyYW1l
KCktPnNjcmlwdCgpLT5jYWxsRnVuY3Rpb25FdmVuSWZTY3JpcHREaXNhYmxlZChmdW5jdGlvbiwg
cmVjZWl2ZXIsIGFyZ2MsIGFyZ3YpLnY4VmFsdWUoKTsKIH0KIAotLy8gUmV0dXJucyB0aGUgVjgg
Y29udGV4dCBmb3IgdGhpcyBmcmFtZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlmIHRoZXJlIGlzIG5v
bmUuCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFdlYkZyYW1lSW1wbDo6bWFpbldvcmxkU2NyaXB0
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghZnJhbWUoKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4oKTsKLQotICAgIHJldHVybiBT
Y3JpcHRDb250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KG1fZnJhbWUpOworICAgIHJldHVybiBT
Y3JpcHRDb250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KGZyYW1lKCkpOwogfQogCi12ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpjcmVhdGVGaWxlU3lzdGVtKFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHBhdGgpCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpjcmVhdGVGaWxlU3lzdGVtKFdlYkZp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJp
bmcmIHBhdGgpCiB7CisgICAgQVNTRVJUKGZyYW1lKCkpOwogICAgIHJldHVybiB0b1Y4KERPTUZp
bGVTeXN0ZW06OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBuYW1lLCBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpGaWxlU3lzdGVtVHlwZT4odHlwZSksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBwYXRo
LnV0ZjgoKS5kYXRhKCkpLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKCkpKTsKIH0K
IAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1lSW1wbDo6Y3JlYXRlU2VyaWFsaXphYmxl
RmlsZVN5c3RlbShXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBwYXRoKQordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFdlYkZyYW1lSW1wbDo6Y3JlYXRlU2VyaWFsaXphYmxlRmlsZVN5c3RlbShXZWJG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBwYXRoKQogewotICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmcyA9IERPTUZpbGVTeXN0
ZW06OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBuYW1lLCBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpGaWxlU3lzdGVtVHlwZT4odHlwZSksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBwYXRoLnV0Zjgo
KS5kYXRhKCkpLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKCkpOwotICAgIGZzLT5t
YWtlQ2xvbmFibGUoKTsKLSAgICByZXR1cm4gdG9WOChmcy5yZWxlYXNlKCkpOworICAgIEFTU0VS
VChmcmFtZSgpKTsKKyAgICBSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5c3RlbSA9IERPTUZp
bGVTeXN0ZW06OmNyZWF0ZShmcmFtZSgpLT5kb2N1bWVudCgpLCBuYW1lLCBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpGaWxlU3lzdGVtVHlwZT4odHlwZSksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBwYXRo
LnV0ZjgoKS5kYXRhKCkpLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKCkpOworICAg
IGZpbGVTeXN0ZW0tPm1ha2VDbG9uYWJsZSgpOworICAgIHJldHVybiB0b1Y4KGZpbGVTeXN0ZW0u
cmVsZWFzZSgpKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1lSW1wbDo6Y3Jl
YXRlRmlsZUVudHJ5KFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGZpbGVT
eXN0ZW1OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZmlsZVN5c3RlbVBhdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBmaWxl
UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzRGlyZWN0b3J5KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZyYW1lSW1wbDo6
Y3JlYXRlRmlsZUVudHJ5KFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgV2ViU3RyaW5n
JiBmaWxlU3lzdGVtTmFtZSwgY29uc3QgV2ViU3RyaW5nJiBmaWxlU3lzdGVtUGF0aCwgY29uc3Qg
V2ViU3RyaW5nJiBmaWxlUGF0aCwgYm9vbCBpc0RpcmVjdG9yeSkKIHsKKyAgICBBU1NFUlQoZnJh
bWUoKSk7CisKICAgICBSZWZQdHI8RE9NRmlsZVN5c3RlbUJhc2U+IGZpbGVTeXN0ZW0gPSBET01G
aWxlU3lzdGVtOjpjcmVhdGUoZnJhbWUoKS0+ZG9jdW1lbnQoKSwgZmlsZVN5c3RlbU5hbWUsIHN0
YXRpY19jYXN0PFdlYkNvcmU6OkZpbGVTeXN0ZW1UeXBlPih0eXBlKSwgS1VSTChQYXJzZWRVUkxT
dHJpbmcsIGZpbGVTeXN0ZW1QYXRoLnV0ZjgoKS5kYXRhKCkpLCBBc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bTo6Y3JlYXRlKCkpOwogICAgIGlmIChpc0RpcmVjdG9yeSkKICAgICAgICAgcmV0dXJuIHRv
VjgoRGlyZWN0b3J5RW50cnk6OmNyZWF0ZShmaWxlU3lzdGVtLCBmaWxlUGF0aCkpOwogICAgIHJl
dHVybiB0b1Y4KEZpbGVFbnRyeTo6Y3JlYXRlKGZpbGVTeXN0ZW0sIGZpbGVQYXRoKSk7CiB9Ci0j
ZW5kaWYKIAogdm9pZCBXZWJGcmFtZUltcGw6OnJlbG9hZChib29sIGlnbm9yZUNhY2hlKQogewot
ICAgIG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0
YXRlKCk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPnJlbG9hZChpZ25vcmVDYWNoZSk7CisgICAg
QVNTRVJUKGZyYW1lKCkpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVE
b2N1bWVudEFuZFNjcm9sbFN0YXRlKCk7CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPnJlbG9hZChp
Z25vcmVDYWNoZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpyZWxvYWRXaXRoT3ZlcnJpZGVV
UkwoY29uc3QgV2ViVVJMJiBvdmVycmlkZVVybCwgYm9vbCBpZ25vcmVDYWNoZSkKIHsKLSAgICBt
X2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgp
OwotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVVUkwob3ZlcnJpZGVV
cmwsIGlnbm9yZUNhY2hlKTsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisgICAgZnJhbWUoKS0+bG9h
ZGVyKCktPmhpc3RvcnkoKS0+c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKKyAgICBmcmFt
ZSgpLT5sb2FkZXIoKS0+cmVsb2FkV2l0aE92ZXJyaWRlVVJMKG92ZXJyaWRlVXJsLCBpZ25vcmVD
YWNoZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkUmVxdWVzdChjb25zdCBXZWJVUkxS
ZXF1ZXN0JiByZXF1ZXN0KQogeworICAgIEFTU0VSVChmcmFtZSgpKTsKICAgICBBU1NFUlQoIXJl
cXVlc3QuaXNOdWxsKCkpOwogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0ID0gcmVxdWVzdC50b1Jlc291cmNlUmVxdWVzdCgpOwogCkBAIC0xMDA5LDI5ICs5NzUsMjUg
QEAgdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRSZXF1ZXN0KGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJl
cXVlc3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
bG9hZChyZXNvdXJjZVJlcXVlc3QsIGZhbHNlKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+bG9h
ZChyZXNvdXJjZVJlcXVlc3QsIGZhbHNlKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRI
aXN0b3J5SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYgaXRlbSkKIHsKKyAgICBBU1NFUlQoZnJh
bWUoKSk7CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBoaXN0b3J5SXRlbSA9IFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+KGl0ZW0pOwogICAgIEFTU0VSVChoaXN0b3J5SXRlbSk7CiAKLSAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+cHJlcGFyZUZvckhpc3RvcnlOYXZpZ2F0aW9uKCk7Ci0gICAgUmVmUHRy
PEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCkt
PmN1cnJlbnRJdGVtKCk7CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPnByZXBhcmVGb3JIaXN0b3J5
TmF2aWdhdGlvbigpOworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY3VycmVudEl0ZW0gPSBmcmFt
ZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOwogICAgIG1faW5TYW1lRG9j
dW1lbnRIaXN0b3J5TG9hZCA9IGN1cnJlbnRJdGVtICYmIGN1cnJlbnRJdGVtLT5zaG91bGREb1Nh
bWVEb2N1bWVudE5hdmlnYXRpb25UbyhoaXN0b3J5SXRlbS5nZXQoKSk7Ci0gICAgbV9mcmFtZS0+
cGFnZSgpLT5nb1RvSXRlbShoaXN0b3J5SXRlbS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyYW1lTG9hZFR5cGVJbmRleGVkQmFja0ZvcndhcmQpOworICAgIGZyYW1lKCkt
PnBhZ2UoKS0+Z29Ub0l0ZW0oaGlzdG9yeUl0ZW0uZ2V0KCksIEZyYW1lTG9hZFR5cGVJbmRleGVk
QmFja0ZvcndhcmQpOwogICAgIG1faW5TYW1lRG9jdW1lbnRIaXN0b3J5TG9hZCA9IGZhbHNlOwog
fQogCi12b2lkIFdlYkZyYW1lSW1wbDo6bG9hZERhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdGV4dEVuY29kaW5nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlVSTCYgYmFzZVVSTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJVUkwmIHVucmVhY2hhYmxlVVJMLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZSkKK3ZvaWQgV2ViRnJhbWVJbXBs
Ojpsb2FkRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhLCBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBXZWJTdHJpbmcmIHRleHRFbmNvZGluZywgY29uc3QgV2ViVVJMJiBiYXNlVVJMLCBj
b25zdCBXZWJVUkwmIHVucmVhY2hhYmxlVVJMLCBib29sIHJlcGxhY2UpCiB7CisgICAgQVNTRVJU
KGZyYW1lKCkpOwogICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0RGF0YShkYXRhLCBtaW1lVHlwZSwg
dGV4dEVuY29kaW5nLCB1bnJlYWNoYWJsZVVSTCk7CiAgICAgQVNTRVJUKHN1YnN0RGF0YS5pc1Zh
bGlkKCkpOwogCkBAIC0xMDQzLDc4ICsxMDA1LDc0IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpsb2Fk
RGF0YShjb25zdCBXZWJEYXRhJiBkYXRhLAogICAgIC8vIGluc3RlYWQgb2YgdGhlIGN1cnJlbnRs
eSBsb2FkZWQgVVJMLgogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwogICAgIGlmIChyZXBs
YWNlICYmICF1bnJlYWNoYWJsZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJlcXVlc3QgPSBtX2Zy
YW1lLT5sb2FkZXIoKS0+b3JpZ2luYWxSZXF1ZXN0KCk7CisgICAgICAgIHJlcXVlc3QgPSBmcmFt
ZSgpLT5sb2FkZXIoKS0+b3JpZ2luYWxSZXF1ZXN0KCk7CiAgICAgcmVxdWVzdC5zZXRVUkwoYmFz
ZVVSTCk7CiAKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBzdWJzdERhdGEs
IGZhbHNlKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBzdWJzdERhdGEs
IGZhbHNlKTsKICAgICBpZiAocmVwbGFjZSkgewogICAgICAgICAvLyBEbyB0aGlzIHRvIGZvcmNl
IFdlYktpdCB0byB0cmVhdCB0aGUgbG9hZCBhcyByZXBsYWNpbmcgdGhlIGN1cnJlbnRseQogICAg
ICAgICAvLyBsb2FkZWQgcGFnZS4KLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPnNldFJlcGxh
Y2luZygpOworICAgICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+c2V0UmVwbGFjaW5nKCk7CiAgICAg
fQogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhUTUxTdHJpbmcoY29uc3QgV2ViRGF0YSYg
ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJVUkwmIGJh
c2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJMJiB1
bnJlYWNoYWJsZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
cGxhY2UpCit2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhUTUxTdHJpbmcoY29uc3QgV2ViRGF0YSYg
ZGF0YSwgY29uc3QgV2ViVVJMJiBiYXNlVVJMLCBjb25zdCBXZWJVUkwmIHVucmVhY2hhYmxlVVJM
LCBib29sIHJlcGxhY2UpCiB7Ci0gICAgbG9hZERhdGEoZGF0YSwKLSAgICAgICAgICAgICBXZWJT
dHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSwKLSAgICAgICAgICAgICBXZWJTdHJpbmc6OmZy
b21VVEY4KCJVVEYtOCIpLAotICAgICAgICAgICAgIGJhc2VVUkwsCi0gICAgICAgICAgICAgdW5y
ZWFjaGFibGVVUkwsCi0gICAgICAgICAgICAgcmVwbGFjZSk7CisgICAgQVNTRVJUKGZyYW1lKCkp
OworICAgIGxvYWREYXRhKGRhdGEsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRleHQvaHRtbCIpLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJVVEYtOCIpLCBiYXNlVVJMLCB1bnJlYWNoYWJsZVVSTCwgcmVw
bGFjZSk7CiB9CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjppc0xvYWRpbmcoKSBjb25zdAogewotICAg
IGlmICghbV9mcmFtZSkKKyAgICBpZiAoIWZyYW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gbV9mcmFtZS0+bG9hZGVyKCktPmlzTG9hZGluZygpOworICAgIHJldHVybiBm
cmFtZSgpLT5sb2FkZXIoKS0+aXNMb2FkaW5nKCk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpz
dG9wTG9hZGluZygpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgcmV0dXJuOwotCisgICAg
aWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
d2hhdCB3ZSBzaG91bGQgcmVhbGx5IGRvIGhlcmUuICBJdCBzZWVtcyBsaWtlIGEgYnVnCiAgICAg
Ly8gdGhhdCBGcmFtZUxvYWRlcjo6c3RvcExvYWRpbmcgZG9lc24ndCBjYWxsIHN0b3BBbGxMb2Fk
ZXJzLgotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOwotICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5zdG9wTG9hZGluZyhVbmxvYWRFdmVudFBvbGljeU5vbmUpOworICAgIGZy
YW1lKCktPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOworICAgIGZyYW1lKCktPmxvYWRlcigp
LT5zdG9wTG9hZGluZyhVbmxvYWRFdmVudFBvbGljeU5vbmUpOwogfQogCiBXZWJEYXRhU291cmNl
KiBXZWJGcmFtZUltcGw6OnByb3Zpc2lvbmFsRGF0YVNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgRnJh
bWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7CisgICAgQVNTRVJUKGZy
YW1lKCkpOwogCiAgICAgLy8gV2UgcmVnYXJkIHRoZSBwb2xpY3kgZG9jdW1lbnQgbG9hZGVyIGFz
IHN0aWxsIHByb3Zpc2lvbmFsLgotICAgIERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIgPSBmcmFt
ZUxvYWRlci0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpOwotICAgIGlmICghZG9jTG9hZGVy
KQotICAgICAgICBkb2NMb2FkZXIgPSBmcmFtZUxvYWRlci0+cG9saWN5RG9jdW1lbnRMb2FkZXIo
KTsKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZSgpLT5sb2FkZXIo
KS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpOworICAgIGlmICghZG9jdW1lbnRMb2FkZXIp
CisgICAgICAgIGRvY3VtZW50TG9hZGVyID0gZnJhbWUoKS0+bG9hZGVyKCktPnBvbGljeURvY3Vt
ZW50TG9hZGVyKCk7CiAKLSAgICByZXR1cm4gRGF0YVNvdXJjZUZvckRvY0xvYWRlcihkb2NMb2Fk
ZXIpOworICAgIHJldHVybiBEYXRhU291cmNlRm9yRG9jTG9hZGVyKGRvY3VtZW50TG9hZGVyKTsK
IH0KIAogV2ViRGF0YVNvdXJjZSogV2ViRnJhbWVJbXBsOjpkYXRhU291cmNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gRGF0YVNvdXJjZUZvckRvY0xvYWRlcihtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKSk7CisgICAgQVNTRVJUKGZyYW1lKCkpOworICAgIHJldHVybiBEYXRhU291
cmNlRm9yRG9jTG9hZGVyKGZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKIH0K
IAogV2ViSGlzdG9yeUl0ZW0gV2ViRnJhbWVJbXBsOjpwcmV2aW91c0hpc3RvcnlJdGVtKCkgY29u
c3QKIHsKKyAgICBBU1NFUlQoZnJhbWUoKSk7CiAgICAgLy8gV2UgdXNlIHRoZSBwcmV2aW91cyBp
dGVtIGhlcmUgYmVjYXVzZSBkb2N1bWVudFN0YXRlIChmaWxsZWQtb3V0IGZvcm1zKQogICAgIC8v
IG9ubHkgZ2V0IHNhdmVkIHRvIGhpc3Rvcnkgd2hlbiBpdCBiZWNvbWVzIHRoZSBwcmV2aW91cyBp
dGVtLiAgVGhlIGNhbGxlcgogICAgIC8vIGlzIGV4cGVjdGVkIHRvIHF1ZXJ5IHRoZSBoaXN0b3J5
IGl0ZW0gYWZ0ZXIgYSBuYXZpZ2F0aW9uIG9jY3VycywgYWZ0ZXIKICAgICAvLyB0aGUgZGVzaXJl
ZCBoaXN0b3J5IGl0ZW0gaGFzIGJlY29tZSB0aGUgcHJldmlvdXMgZW50cnkuCi0gICAgcmV0dXJu
IFdlYkhpc3RvcnlJdGVtKG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnByZXZpb3VzSXRl
bSgpKTsKKyAgICByZXR1cm4gV2ViSGlzdG9yeUl0ZW0oZnJhbWUoKS0+bG9hZGVyKCktPmhpc3Rv
cnkoKS0+cHJldmlvdXNJdGVtKCkpOwogfQogCiBXZWJIaXN0b3J5SXRlbSBXZWJGcmFtZUltcGw6
OmN1cnJlbnRIaXN0b3J5SXRlbSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGZyYW1lKCkpOworCiAg
ICAgLy8gV2UncmUgc2h1dHRpbmcgZG93bi4KLSAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5h
Y3RpdmVEb2N1bWVudExvYWRlcigpKQorICAgIGlmICghZnJhbWUoKS0+bG9hZGVyKCktPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIHJldHVybiBXZWJIaXN0b3J5SXRlbSgpOwogCiAg
ICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBjbG9i
YmVyIHRoZSBjdXJyZW50CkBAIC0xMTIyLDM1ICsxMDgwLDMwIEBAIFdlYkhpc3RvcnlJdGVtIFdl
YkZyYW1lSW1wbDo6Y3VycmVudEhpc3RvcnlJdGVtKCkgY29uc3QKICAgICAvLyBkb2N1bWVudCBz
dGF0ZS4gIEhvd2V2ZXIsIGl0IGlzIE9LIGZvciBuZXcgbmF2aWdhdGlvbnMuCiAgICAgLy8gRklY
TUU6IENhbiB3ZSBtYWtlIHRoaXMgYSBwbGFpbiBvbGQgZ2V0dGVyLCBpbnN0ZWFkIG9mIHdvcnJ5
aW5nIGFib3V0CiAgICAgLy8gY2xvYmJlcmluZyBoZXJlPwotICAgIGlmICghbV9pblNhbWVEb2N1
bWVudEhpc3RvcnlMb2FkICYmIChtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFt
ZUxvYWRUeXBlU3RhbmRhcmQKLSAgICAgICAgfHwgIW1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpKQotICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAg
IGlmICghbV9pblNhbWVEb2N1bWVudEhpc3RvcnlMb2FkICYmIChmcmFtZSgpLT5sb2FkZXIoKS0+
bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQKKyAgICAgICAgfHwgIWZyYW1lKCkt
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkp
KQorICAgICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRT
Y3JvbGxTdGF0ZSgpOwogCi0gICAgcmV0dXJuIFdlYkhpc3RvcnlJdGVtKG1fZnJhbWUtPnBhZ2Uo
KS0+YmFja0ZvcndhcmQoKS0+Y3VycmVudEl0ZW0oKSk7CisgICAgcmV0dXJuIFdlYkhpc3RvcnlJ
dGVtKGZyYW1lKCktPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y3VycmVudEl0ZW0oKSk7CiB9CiAK
IHZvaWQgV2ViRnJhbWVJbXBsOjplbmFibGVWaWV3U291cmNlTW9kZShib29sIGVuYWJsZSkKIHsK
LSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgbV9mcmFtZS0+c2V0SW5WaWV3U291cmNlTW9kZShl
bmFibGUpOworICAgIGlmIChmcmFtZSgpKQorICAgICAgICBmcmFtZSgpLT5zZXRJblZpZXdTb3Vy
Y2VNb2RlKGVuYWJsZSk7CiB9CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjppc1ZpZXdTb3VyY2VNb2Rl
RW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIHJldHVybiBtX2Zy
YW1lLT5pblZpZXdTb3VyY2VNb2RlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFm
cmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZyYW1lKCktPmluVmll
d1NvdXJjZU1vZGUoKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnNldFJlZmVycmVyRm9yUmVx
dWVzdChXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJVUkwmIHJlZmVycmVyVVJMKQog
ewotICAgIFN0cmluZyByZWZlcnJlcjsKLSAgICBpZiAocmVmZXJyZXJVUkwuaXNFbXB0eSgpKQot
ICAgICAgICByZWZlcnJlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7
Ci0gICAgZWxzZQotICAgICAgICByZWZlcnJlciA9IHJlZmVycmVyVVJMLnNwZWMoKS51dGYxNigp
OwotICAgIHJlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIo
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVmZXJyZXJQb2xpY3koKSwgcmVxdWVzdC51cmwoKSwgcmVm
ZXJyZXIpOworICAgIFN0cmluZyByZWZlcnJlciA9IHJlZmVycmVyVVJMLmlzRW1wdHkoKSA/IGZy
YW1lKCktPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCkgOiBTdHJpbmcocmVmZXJyZXJVUkwu
c3BlYygpLnV0ZjE2KCkpOworICAgIHJlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRl
UmVmZXJyZXJIZWFkZXIoZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVmZXJyZXJQb2xpY3koKSwgcmVx
dWVzdC51cmwoKSwgcmVmZXJyZXIpOwogICAgIGlmIChyZWZlcnJlci5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChXZWJTdHJpbmc6OmZy
b21VVEY4KCJSZWZlcmVyIiksIHJlZmVycmVyKTsKQEAgLTExNTksOCArMTExMiw3IEBAIHZvaWQg
V2ViRnJhbWVJbXBsOjpzZXRSZWZlcnJlckZvclJlcXVlc3QoV2ViVVJMUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgV2ViVVJMJiByCiB2b2lkIFdlYkZyYW1lSW1wbDo6ZGlzcGF0Y2hXaWxsU2VuZFJl
cXVlc3QoV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJl
c3BvbnNlOwotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hXaWxsU2Vu
ZFJlcXVlc3QoCi0gICAgICAgIDAsIDAsIHJlcXVlc3QudG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0
KCksIHJlc3BvbnNlKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNo
V2lsbFNlbmRSZXF1ZXN0KDAsIDAsIHJlcXVlc3QudG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCks
IHJlc3BvbnNlKTsKIH0KIAogV2ViVVJMTG9hZGVyKiBXZWJGcmFtZUltcGw6OmNyZWF0ZUFzc29j
aWF0ZWRVUkxMb2FkZXIoY29uc3QgV2ViVVJMTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKQEAgLTEx
NzAsNyArMTEyMiw3IEBAIFdlYlVSTExvYWRlciogV2ViRnJhbWVJbXBsOjpjcmVhdGVBc3NvY2lh
dGVkVVJMTG9hZGVyKGNvbnN0IFdlYlVSTExvYWRlck9wdGlvbnMmCiAKIHZvaWQgV2ViRnJhbWVJ
bXBsOjpjb21taXREb2N1bWVudERhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkK
IHsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+Y29tbWl0RGF0YShk
YXRhLCBsZW5ndGgpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5j
b21taXREYXRhKGRhdGEsIGxlbmd0aCk7CiB9CiAKIHVuc2lnbmVkIFdlYkZyYW1lSW1wbDo6dW5s
b2FkTGlzdGVuZXJDb3VudCgpIGNvbnN0CkBAIC0xMjAyLDIxICsxMTU0LDE2IEBAIHZvaWQgV2Vi
RnJhbWVJbXBsOjpyZXBsYWNlU2VsZWN0aW9uKGNvbnN0IFdlYlN0cmluZyYgdGV4dCkKIAogdm9p
ZCBXZWJGcmFtZUltcGw6Omluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQogewotICAg
IEVkaXRvciogZWRpdG9yID0gZnJhbWUoKS0+ZWRpdG9yKCk7Ci0KLSAgICBpZiAoZWRpdG9yLT5o
YXNDb21wb3NpdGlvbigpKQotICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0
KTsKKyAgICBpZiAoZnJhbWUoKS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAg
IGZyYW1lKCktPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24odGV4dCk7CiAgICAgZWxzZQot
ICAgICAgICBlZGl0b3ItPmluc2VydFRleHQodGV4dCwgMCk7CisgICAgICAgIGZyYW1lKCktPmVk
aXRvcigpLT5pbnNlcnRUZXh0KHRleHQsIDApOwogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6c2V0
TWFya2VkVGV4dCgKLSAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGxvY2F0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFdlYkZyYW1lSW1wbDo6c2V0TWFya2VkVGV4dChjb25z
dCBXZWJTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZSgpLT5lZGl0b3IoKTsKLQogICAgIFZlY3RvcjxD
b21wb3NpdGlvblVuZGVybGluZT4gZGVjb3JhdGlvbnM7Ci0gICAgZWRpdG9yLT5zZXRDb21wb3Np
dGlvbih0ZXh0LCBkZWNvcmF0aW9ucywgbG9jYXRpb24sIGxlbmd0aCk7CisgICAgZnJhbWUoKS0+
ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIGRlY29yYXRpb25zLCBsb2NhdGlvbiwgbGVu
Z3RoKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnVubWFya1RleHQoKQpAQCAtMTI0NSw3ICsx
MTkyLDYgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVu
c2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgKICAgICBJbnRSZWN0IGludFJlY3QgPSBm
cmFtZSgpLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAgIHJl
Y3QgPSBXZWJSZWN0KGludFJlY3QpOwogICAgIHJlY3QgPSBmcmFtZSgpLT52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3cocmVjdCk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTI5MywzOCAr
MTIzOSwyOSBAQCBib29sIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJOb2RlJiBub2RlKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ym9vbCBydiA9IHRydWU7CisgICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCiAgICAgLy8gU3BlY2lh
bGx5IGhhbmRsaW5nIGNvbW1hbmRzIHRoYXQgRWRpdG9yOjpleGVjQ29tbWFuZCBkb2VzIG5vdCBk
aXJlY3RseQogICAgIC8vIHN1cHBvcnQuCiAgICAgaWYgKGNvbW1hbmQgPT0gIkRlbGV0ZVRvRW5k
T2ZQYXJhZ3JhcGgiKSB7Ci0gICAgICAgIEVkaXRvciogZWRpdG9yID0gZnJhbWUoKS0+ZWRpdG9y
KCk7Ci0gICAgICAgIGlmICghZWRpdG9yLT5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkZv
cndhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFncmFw
aEJvdW5kYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkpIHsKLSAg
ICAgICAgICAgIGVkaXRvci0+ZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3RlckdyYW51bGFy
aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwotICAgICAgICB9Cisg
ICAgICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0
aW9uRm9yd2FyZCwgUGFyYWdyYXBoQm91bmRhcnksIHRydWUsIGZhbHNlKSkKKyAgICAgICAgICAg
IGZyYW1lKCktPmVkaXRvcigpLT5kZWxldGVXaXRoRGlyZWN0aW9uKERpcmVjdGlvbkZvcndhcmQs
IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlLCBmYWxzZSk7CiAgICAgfSBlbHNlIGlmIChjb21t
YW5kID09ICJJbmRlbnQiKQogICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+aW5kZW50KCk7CiAg
ICAgZWxzZSBpZiAoY29tbWFuZCA9PSAiT3V0ZGVudCIpCiAgICAgICAgIGZyYW1lKCktPmVkaXRv
cigpLT5vdXRkZW50KCk7CiAgICAgZWxzZSBpZiAoY29tbWFuZCA9PSAiRGVsZXRlQmFja3dhcmQi
KQotICAgICAgICBydiA9IGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKEF0b21pY1N0cmluZygi
QmFja3dhcmREZWxldGUiKSkuZXhlY3V0ZSgpOworICAgICAgICByZXN1bHQgPSBmcmFtZSgpLT5l
ZGl0b3IoKS0+Y29tbWFuZChBdG9taWNTdHJpbmcoIkJhY2t3YXJkRGVsZXRlIikpLmV4ZWN1dGUo
KTsKICAgICBlbHNlIGlmIChjb21tYW5kID09ICJEZWxldGVGb3J3YXJkIikKLSAgICAgICAgcnYg
PSBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChBdG9taWNTdHJpbmcoIkZvcndhcmREZWxldGUi
KSkuZXhlY3V0ZSgpOworICAgICAgICByZXN1bHQgPSBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFu
ZChBdG9taWNTdHJpbmcoIkZvcndhcmREZWxldGUiKSkuZXhlY3V0ZSgpOwogICAgIGVsc2UgaWYg
KGNvbW1hbmQgPT0gIkFkdmFuY2VUb05leHRNaXNzcGVsbGluZyIpIHsKLSAgICAgICAgLy8gRmFs
c2UgbXVzdCBiZSBwYXNzZWQgaGVyZSwgb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB3b3JkIHdp
bGwgbmV2ZXIgYmUKLSAgICAgICAgLy8gc2tpcHBlZC4KKyAgICAgICAgLy8gV2VlIG5lZWQgdG8g
cGFzcyBmYWxzZSBoZXJlIG9yIGVsc2UgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB3b3JkIHdpbGwg
bmV2ZXIgYmUgc2tpcHBlZC4KICAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCktPmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhmYWxzZSk7CiAgICAgfSBlbHNlIGlmIChjb21tYW5kID09ICJUb2dnbGVT
cGVsbFBhbmVsIikKICAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCktPnNob3dTcGVsbGluZ0d1ZXNz
UGFuZWwoKTsKICAgICBlbHNlCi0gICAgICAgIHJ2ID0gZnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1h
bmQoY29tbWFuZCkuZXhlY3V0ZSgpOwotICAgIHJldHVybiBydjsKKyAgICAgICAgcmVzdWx0ID0g
ZnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZCkuZXhlY3V0ZSgpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZChjb25zdCBX
ZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCkBAIC0xMzMyLDggKzEyNjks
NyBAQCBib29sIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQogICAgIEFTU0VSVChmcmFtZSgpKTsKICAgICBT
dHJpbmcgd2ViTmFtZSA9IG5hbWU7CiAKLSAgICAvLyBtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50
IGFuZCBtb3ZlVG9FbmRmRG9jdW1lbnQgYXJlIG9ubHkgaGFuZGxlZCBieSBXZWJLaXQKLSAgICAv
LyBmb3IgZWRpdGFibGUgbm9kZXMuCisgICAgLy8gbW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCBh
bmQgbW92ZVRvRW5kZkRvY3VtZW50IGFyZSBvbmx5IGhhbmRsZWQgYnkgV2ViS2l0IGZvciBlZGl0
YWJsZSBub2Rlcy4KICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2Vi
TmFtZSA9PSAibW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIpCiAgICAgICAgIHJldHVybiB2aWV3
SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOwogCkBA
IC0xMzYxLDEzICsxMjk3LDExIEBAIGJvb2wgV2ViRnJhbWVJbXBsOjppc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5p
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogfQogCi12b2lkIFdlYkZyYW1lSW1w
bDo6cmVxdWVzdFRleHRDaGVja2luZyhjb25zdCBXZWJFbGVtZW50JiB3ZWJFbGVtKQordm9pZCBX
ZWJGcmFtZUltcGw6OnJlcXVlc3RUZXh0Q2hlY2tpbmcoY29uc3QgV2ViRWxlbWVudCYgd2ViRWxl
bWVudCkKIHsKLSAgICBpZiAod2ViRWxlbS5pc051bGwoKSkKKyAgICBpZiAod2ViRWxlbWVudC5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQ2hl
Y2sgPSByYW5nZU9mQ29udGVudHMoY29uc3RfY2FzdDxFbGVtZW50Kj4od2ViRWxlbS5jb25zdFVu
d3JhcDxFbGVtZW50PigpKSk7Ci0KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9DaGVjayA9IHJh
bmdlT2ZDb250ZW50cyhjb25zdF9jYXN0PEVsZW1lbnQqPih3ZWJFbGVtZW50LmNvbnN0VW53cmFw
PEVsZW1lbnQ+KCkpKTsKICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+c3BlbGxDaGVja2VyKCktPnJl
cXVlc3RDaGVja2luZ0ZvcihTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyLCBUZXh0Q2hlY2tpbmdQcm9jZXNz
QmF0Y2gsIHJhbmdlVG9DaGVjaywgcmFuZ2VUb0NoZWNrKSk7CiB9CiAKQEAgLTE0MzUsOSArMTM2
OSw5IEBAIFdlYlN0cmluZyBXZWJGcmFtZUltcGw6OnNlbGVjdGlvbkFzTWFya3VwKCkgY29uc3QK
ICAgICByZXR1cm4gY3JlYXRlTWFya3VwKHJhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZvckludGVy
Y2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CiB9CiAKLXZvaWQgV2ViRnJhbWVJ
bXBsOjpzZWxlY3RXb3JkQXJvdW5kUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBWaXNpYmxlUG9zaXRp
b24gcG9zKQordm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFdvcmRBcm91bmRQb3NpdGlvbihGcmFt
ZSogZnJhbWUsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbikKIHsKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbihwb3MpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKHBvc2l0
aW9uKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJp
dHkpOwogCiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbGVjdGlvbikpIHsKQEAgLTE0NTgsNDIgKzEzOTIsMzMgQEAgYm9vbCBXZWJGcmFtZUltcGw6
OnNlbGVjdFdvcmRBcm91bmRDYXJldCgpCiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5n
ZShjb25zdCBXZWJQb2ludCYgYmFzZSwgY29uc3QgV2ViUG9pbnQmIGV4dGVudCkKIHsKLSAgICBW
aXNpYmxlUG9zaXRpb24gYmFzZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGJh
c2UpOwotICAgIFZpc2libGVQb3NpdGlvbiBleHRlbnRQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JX
aW5kb3dQb2ludChleHRlbnQpOwotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0g
VmlzaWJsZVNlbGVjdGlvbihiYXNlUG9zLCBleHRlbnRQb3MpOworICAgIFZpc2libGVQb3NpdGlv
biBiYXNlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludChiYXNlKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gZXh0ZW50UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JXaW5k
b3dQb2ludChleHRlbnQpOworICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gVmlz
aWJsZVNlbGVjdGlvbihiYXNlUG9zaXRpb24sIGV4dGVudFBvc2l0aW9uKTsKICAgICBpZiAoZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQog
ICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6c2VsZWN0UmFu
Z2UoY29uc3QgV2ViUmFuZ2UmIHdlYlJhbmdlKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRyPFJhbmdlPiA+KHdlYlJhbmdlKTsKLSAgICBpZiAocmFu
Z2UpCisgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRy
PFJhbmdlPiA+KHdlYlJhbmdlKSkKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNl
bGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5JVFksIGZh
bHNlKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFdlYkZyYW1lSW1wbDo6dmlzaWJsZVBvc2l0aW9u
Rm9yV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQogewotICAgIEhpdFRlc3RSZXF1
ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpNb3ZlOwot
ICAgIGhpdFR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5OwotICAgIGhpdFR5cGUgfD0g
SGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKLSAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpJ
Z25vcmVDbGlwcGluZzsKLSAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KGhpdFR5cGUpOwotICAg
IEZyYW1lVmlldyogdmlldyA9IGZyYW1lKCktPnZpZXcoKTsKLSAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKEludFBvaW50KHBvaW50LngsIHBvaW50LnkpKSk7
CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCA9IEhpdFRlc3RSZXF1ZXN0OjpNb3ZlIHwgSGl0
VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RS
ZXF1ZXN0OjpJZ25vcmVDbGlwcGluZzsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChmcmFtZSgp
LT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoSW50UG9pbnQocG9pbnQpKSk7CiAKICAgICBmcmFt
ZSgpLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwg
cmVzdWx0KTsKIAogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOwogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotCiAgICAgcmV0dXJu
IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSk7
CiB9CiAKLWludCBXZWJGcmFtZUltcGw6OnByaW50QmVnaW4oY29uc3QgV2ViUHJpbnRQYXJhbXMm
IHByaW50UGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJOb2Rl
JiBjb25zdHJhaW5Ub05vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHVz
ZUJyb3dzZXJPdmVybGF5cykKK2ludCBXZWJGcmFtZUltcGw6OnByaW50QmVnaW4oY29uc3QgV2Vi
UHJpbnRQYXJhbXMmIHByaW50UGFyYW1zLCBjb25zdCBXZWJOb2RlJiBjb25zdHJhaW5Ub05vZGUs
IGJvb2wqIHVzZUJyb3dzZXJPdmVybGF5cykKIHsKICAgICBBU1NFUlQoIWZyYW1lKCktPmRvY3Vt
ZW50KCktPmlzRnJhbWVTZXQoKSk7CiAgICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbCogcGx1Z2lu
Q29udGFpbmVyID0gMDsKQEAgLTE1MTEsOCArMTQzNiw3IEBAIGludCBXZWJGcmFtZUltcGw6OnBy
aW50QmVnaW4oY29uc3QgV2ViUHJpbnRQYXJhbXMmIHByaW50UGFyYW1zLAogICAgIGVsc2UKICAg
ICAgICAgbV9wcmludENvbnRleHQgPSBhZG9wdFB0cihuZXcgQ2hyb21lUHJpbnRDb250ZXh0KGZy
YW1lKCkpKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0Pihw
cmludFBhcmFtcy5wcmludENvbnRlbnRBcmVhLndpZHRoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocHJpbnRQYXJhbXMucHJpbnRDb250ZW50QXJlYS5oZWln
aHQpKTsKKyAgICBGbG9hdFJlY3QgcmVjdCgwLCAwLCBzdGF0aWNfY2FzdDxmbG9hdD4ocHJpbnRQ
YXJhbXMucHJpbnRDb250ZW50QXJlYS53aWR0aCksIHN0YXRpY19jYXN0PGZsb2F0PihwcmludFBh
cmFtcy5wcmludENvbnRlbnRBcmVhLmhlaWdodCkpOwogICAgIG1fcHJpbnRDb250ZXh0LT5iZWdp
bihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIGZsb2F0IHBhZ2VIZWlnaHQ7CiAg
ICAgLy8gV2UgaWdub3JlIHRoZSBvdmVybGF5cyBjYWxjdWxhdGlvbiBmb3Igbm93IHNpbmNlIHRo
ZXkgYXJlIGdlbmVyYXRlZCBpbiB0aGUKQEAgLTE1MjYsMjkgKzE0NTAsMTkgQEAgaW50IFdlYkZy
YW1lSW1wbDo6cHJpbnRCZWdpbihjb25zdCBXZWJQcmludFBhcmFtcyYgcHJpbnRQYXJhbXMsCiAK
IGZsb2F0IFdlYkZyYW1lSW1wbDo6Z2V0UHJpbnRQYWdlU2hyaW5rKGludCBwYWdlKQogewotICAg
IC8vIEVuc3VyZSBjb3JyZWN0IHN0YXRlLgotICAgIGlmICghbV9wcmludENvbnRleHQgfHwgcGFn
ZSA8IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQorICAgIEFTU0VSVChtX3ByaW50Q29udGV4dCAmJiBwYWdlID49IDApOwogICAg
IHJldHVybiBtX3ByaW50Q29udGV4dC0+Z2V0UGFnZVNocmluayhwYWdlKTsKIH0KIAogZmxvYXQg
V2ViRnJhbWVJbXBsOjpwcmludFBhZ2UoaW50IHBhZ2UsIFdlYkNhbnZhcyogY2FudmFzKQogewog
I2lmIEVOQUJMRShQUklOVElORykKLSAgICAvLyBFbnN1cmUgY29ycmVjdCBzdGF0ZS4KLSAgICBp
ZiAoIW1fcHJpbnRDb250ZXh0IHx8IHBhZ2UgPCAwIHx8ICFmcmFtZSgpIHx8ICFmcmFtZSgpLT5k
b2N1bWVudCgpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKG1fcHJpbnRDb250ZXh0ICYmIHBhZ2UgPj0gMCAmJiBm
cmFtZSgpICYmIGZyYW1lKCktPmRvY3VtZW50KCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0QnVp
bGRlciBidWlsZGVyKGNhbnZhcyk7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBnYyA9IGJ1aWxkZXIu
Y29udGV4dCgpOwotICAgIGdjLnBsYXRmb3JtQ29udGV4dCgpLT5zZXRQcmludGluZyh0cnVlKTsK
LQotICAgIHJldHVybiBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGdjLCBwYWdlKTsKKyAgICBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGJ1aWxkZXIuY29udGV4dCgpOworICAg
IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0UHJpbnRpbmcodHJ1ZSk7Cisg
ICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoZ3JhcGhpY3NDb250ZXh0LCBwYWdl
KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTE1NTcsMTggKzE0NzEsMTMgQEAg
ZmxvYXQgV2ViRnJhbWVJbXBsOjpwcmludFBhZ2UoaW50IHBhZ2UsIFdlYkNhbnZhcyogY2FudmFz
KQogdm9pZCBXZWJGcmFtZUltcGw6OnByaW50RW5kKCkKIHsKICAgICBBU1NFUlQobV9wcmludENv
bnRleHQpOwotICAgIGlmIChtX3ByaW50Q29udGV4dCkKLSAgICAgICAgbV9wcmludENvbnRleHQt
PmVuZCgpOworICAgIG1fcHJpbnRDb250ZXh0LT5lbmQoKTsKICAgICBtX3ByaW50Q29udGV4dC5j
bGVhcigpOwogfQogCiBib29sIFdlYkZyYW1lSW1wbDo6aXNQcmludFNjYWxpbmdEaXNhYmxlZEZv
clBsdWdpbihjb25zdCBXZWJOb2RlJiBub2RlKQogewotICAgIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGwqIHBsdWdpbkNvbnRhaW5lciA9IDA7Ci0gICAgaWYgKG5vZGUuaXNOdWxsKCkpCi0gICAgICAg
IHBsdWdpbkNvbnRhaW5lciA9IHBsdWdpbkNvbnRhaW5lckZyb21GcmFtZShmcmFtZSgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBsdWdpbkNvbnRhaW5lciA9IHBsdWdpbkNvbnRhaW5lckZyb21Ob2Rl
KG5vZGUpOworICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwqIHBsdWdpbkNvbnRhaW5lciA9ICBu
b2RlLmlzTnVsbCgpID8gcGx1Z2luQ29udGFpbmVyRnJvbUZyYW1lKGZyYW1lKCkpIDogcGx1Z2lu
Q29udGFpbmVyRnJvbU5vZGUobm9kZSk7CiAKICAgICBpZiAoIXBsdWdpbkNvbnRhaW5lciB8fCAh
cGx1Z2luQ29udGFpbmVyLT5zdXBwb3J0c1BhZ2luYXRlZFByaW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1ODYsMzQgKzE0OTUsMjAgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmlzUGFn
ZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCkKICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQo
KS0+aXNQYWdlQm94VmlzaWJsZShwYWdlSW5kZXgpOwogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTaXplJiBwYWdlU2l6ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1hcmdpblRvcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1hcmdp
blJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgbWFyZ2luQm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgbWFyZ2luTGVmdCkKLXsKLSAgICBJbnRTaXplIHNpemUocGFnZVNpemUud2lk
dGgsIHBhZ2VTaXplLmhlaWdodCk7Ci0gICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cGFnZVNpemVB
bmRNYXJnaW5zSW5QaXhlbHMocGFnZUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJn
aW5MZWZ0KTsKK3ZvaWQgV2ViRnJhbWVJbXBsOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhp
bnQgcGFnZUluZGV4LCBXZWJTaXplJiBwYWdlU2l6ZSwgaW50JiBtYXJnaW5Ub3AsIGludCYgbWFy
Z2luUmlnaHQsIGludCYgbWFyZ2luQm90dG9tLCBpbnQmIG1hcmdpbkxlZnQpCit7CisgICAgSW50
U2l6ZSBzaXplID0gcGFnZVNpemU7CisgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cGFnZVNpemVB
bmRNYXJnaW5zSW5QaXhlbHMocGFnZUluZGV4LCBzaXplLCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0
LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpOwogICAgIHBhZ2VTaXplID0gc2l6ZTsKIH0KIAog
V2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6cGFnZVByb3BlcnR5KGNvbnN0IFdlYlN0cmluZyYgcHJv
cGVydHlOYW1lLCBpbnQgcGFnZUluZGV4KQogewogICAgIEFTU0VSVChtX3ByaW50Q29udGV4dCk7
Ci0gICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5wYWdlUHJvcGVydHkobV9mcmFtZSwgcHJvcGVy
dHlOYW1lLnV0ZjgoKS5kYXRhKCksIHBhZ2VJbmRleCk7CisgICAgcmV0dXJuIG1fcHJpbnRDb250
ZXh0LT5wYWdlUHJvcGVydHkoZnJhbWUoKSwgcHJvcGVydHlOYW1lLnV0ZjgoKS5kYXRhKCksIHBh
Z2VJbmRleCk7CiB9CiAKLWJvb2wgV2ViRnJhbWVJbXBsOjpmaW5kKGludCBpZGVudGlmaWVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViRmluZE9wdGlvbnMmIG9wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHdyYXBXaXRoaW5GcmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlJlY3QqIHNlbGVjdGlvblJlY3QpCitib29sIFdlYkZyYW1lSW1wbDo6Zmlu
ZChpbnQgaWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LCBjb25zdCBXZWJG
aW5kT3B0aW9ucyYgb3B0aW9ucywgYm9vbCB3cmFwV2l0aGluRnJhbWUsIFdlYlJlY3QqIHNlbGVj
dGlvblJlY3QpCiB7CiAgICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFtZSgpLT5wYWdlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MTEsMTAgKzE2MDYsNyBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6c3RvcEZpbmRpbmcoYm9vbCBjbGVhclNlbGVjdGlvbikKICAgICBpbnZhbGlkYXRlQXJlYShJ
bnZhbGlkYXRlQWxsKTsKIH0KIAotdm9pZCBXZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hl
cyhpbnQgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJGaW5kT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNldCkKK3ZvaWQgV2ViRnJhbWVJbXBsOjpz
Y29wZVN0cmluZ01hdGNoZXMoaW50IGlkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgc2VhcmNo
VGV4dCwgY29uc3QgV2ViRmluZE9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgcmVzZXQpCiB7CiAgICAg
aWYgKHJlc2V0KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBicmFuZCBuZXcgc2VhcmNoLCBzbyB3
ZSBuZWVkIHRvIHJlc2V0IGV2ZXJ5dGhpbmcuCkBAIC0xNzQzLDExICsxNjM1LDcgQEAgdm9pZCBX
ZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlcyhpbnQgaWRlbnRpZmllciwKICAgICAgICAg
ICAgIHZpZXdJbXBsKCktPm1haW5GcmFtZUltcGwoKS0+bV9mcmFtZXNTY29waW5nQ291bnQrKzsK
IAogICAgICAgICAvLyBOb3csIGRlZmVyIHNjb3BpbmcgdW50aWwgbGF0ZXIgdG8gYWxsb3cgZmlu
ZCBvcGVyYXRpb24gdG8gZmluaXNoIHF1aWNrbHkuCi0gICAgICAgIHNjb3BlU3RyaW5nTWF0Y2hl
c1Nvb24oCi0gICAgICAgICAgICBpZGVudGlmaWVyLAotICAgICAgICAgICAgc2VhcmNoVGV4dCwK
LSAgICAgICAgICAgIG9wdGlvbnMsCi0gICAgICAgICAgICBmYWxzZSk7IC8vIGZhbHNlPXdlIGp1
c3QgcmVzZXQsIHNvIGRvbid0IGRvIGl0IGFnYWluLgorICAgICAgICBzY29wZVN0cmluZ01hdGNo
ZXNTb29uKGlkZW50aWZpZXIsIHNlYXJjaFRleHQsIG9wdGlvbnMsIGZhbHNlKTsgLy8gZmFsc2Ug
bWVhbnMganVzdCByZXNldCwgc28gZG9uJ3QgZG8gaXQgYWdhaW4uCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE5NDYsOSArMTgzNCw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjppbmNyZWFz
ZU1hdGNoQ291bnQoaW50IGNvdW50LCBpbnQgaWRlbnRpZmllcikKICAgICAgICAgY2xpZW50KCkt
PnJlcG9ydEZpbmRJblBhZ2VNYXRjaENvdW50KGlkZW50aWZpZXIsIG1fdG90YWxNYXRjaENvdW50
LCAhbV9mcmFtZXNTY29waW5nQ291bnQpOwogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6cmVwb3J0
RmluZEluUGFnZVNlbGVjdGlvbihjb25zdCBXZWJSZWN0JiBzZWxlY3Rpb25SZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjdGl2ZU1hdGNoT3Jk
aW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
ZGVudGlmaWVyKQordm9pZCBXZWJGcmFtZUltcGw6OnJlcG9ydEZpbmRJblBhZ2VTZWxlY3Rpb24o
Y29uc3QgV2ViUmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGFjdGl2ZU1hdGNoT3JkaW5hbCwgaW50
IGlkZW50aWZpZXIpCiB7CiAgICAgLy8gVXBkYXRlIHRoZSBVSSB3aXRoIHRoZSBsYXRlc3Qgc2Vs
ZWN0aW9uIHJlY3QuCiAgICAgaWYgKGNsaWVudCgpKQpAQCAtMTk2NywyMSArMTg1MywyMSBAQCB2
b2lkIFdlYkZyYW1lSW1wbDo6cmVzZXRNYXRjaENvdW50KCkKIHZvaWQgV2ViRnJhbWVJbXBsOjpz
ZW5kT3JpZW50YXRpb25DaGFuZ2VFdmVudChpbnQgb3JpZW50YXRpb24pCiB7CiAjaWYgRU5BQkxF
KE9SSUVOVEFUSU9OX0VWRU5UUykKLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgbV9mcmFtZS0+
c2VuZE9yaWVudGF0aW9uQ2hhbmdlRXZlbnQob3JpZW50YXRpb24pOworICAgIGlmIChmcmFtZSgp
KQorICAgICAgICBmcmFtZSgpLT5zZW5kT3JpZW50YXRpb25DaGFuZ2VFdmVudChvcmllbnRhdGlv
bik7CiAjZW5kaWYKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kb21XaW5kb3coKTsKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lKCktPmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpOwogICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBsaXN0ZW5l
cldyYXBwZXIgPSBsaXN0ZW5lci0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBl
LCB1c2VDYXB0dXJlLCB3aW5kb3cpOwogICAgIHdpbmRvdy0+YWRkRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIGFkb3B0UmVmKGxpc3RlbmVyV3JhcHBlciksIHVzZUNhcHR1cmUpOwogfQogCiB2b2lk
IFdlYkZyYW1lSW1wbDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50
VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsK
LSAgICBET01XaW5kb3cqIHdpbmRvdyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygp
OworICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCk7CiAgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9IGxpc3RlbmVy
LT5nZXRFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIHdpbmRvdyk7
CiAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXJXcmFw
cGVyLCB1c2VDYXB0dXJlKTsKIH0KQEAgLTE5ODksMTQgKzE4NzUsMTMgQEAgdm9pZCBXZWJGcmFt
ZUltcGw6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdl
YkRPTUV2ZW50TGkKIGJvb2wgV2ViRnJhbWVJbXBsOjpkaXNwYXRjaEV2ZW50KGNvbnN0IFdlYkRP
TUV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlQoIWV2ZW50LmlzTnVsbCgpKTsKLSAgICByZXR1
cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQp
OworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hF
dmVudChldmVudCk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpkaXNwYXRjaE1lc3NhZ2VFdmVu
dFdpdGhPcmlnaW5DaGVjayhjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgaW50ZW5kZWRUYXJnZXRP
cmlnaW4sIGNvbnN0IFdlYkRPTUV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlQoIWV2ZW50Lmlz
TnVsbCgpKTsKLSAgICAvLyBQYXNzIGFuIGVtcHR5IGNhbGwgc3RhY2ssIHNpbmNlIHdlIGRvbid0
IGhhdmUgdGhlIG9uZSBmcm9tIHRoZSBvdGhlciBwcm9jZXNzLgotICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhp
bnRlbmRlZFRhcmdldE9yaWdpbi5nZXQoKSwgZXZlbnQsIDApOworICAgIGZyYW1lKCktPmRvY3Vt
ZW50KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhp
bnRlbmRlZFRhcmdldE9yaWdpbi5nZXQoKSwgZXZlbnQsIDApOwogfQogCiBpbnQgV2ViRnJhbWVJ
bXBsOjpmaW5kTWF0Y2hNYXJrZXJzVmVyc2lvbigpIGNvbnN0CkBAIC0yMDE4LDggKzE5MDMsNyBA
QCBib29sIFdlYkZyYW1lSW1wbDo6aXNBY3RpdmVNYXRjaEZyYW1lVmFsaWQoKSBjb25zdAogewog
ICAgIFdlYkZyYW1lSW1wbCogbWFpbkZyYW1lSW1wbCA9IHZpZXdJbXBsKCktPm1haW5GcmFtZUlt
cGwoKTsKICAgICBXZWJGcmFtZUltcGwqIGFjdGl2ZU1hdGNoRnJhbWUgPSBtYWluRnJhbWVJbXBs
LT5hY3RpdmVNYXRjaEZyYW1lKCk7Ci0gICAgcmV0dXJuIGFjdGl2ZU1hdGNoRnJhbWUgJiYgYWN0
aXZlTWF0Y2hGcmFtZS0+bV9hY3RpdmVNYXRjaAotICAgICAgICAmJiBhY3RpdmVNYXRjaEZyYW1l
LT5mcmFtZSgpLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKG1haW5GcmFtZUltcGwtPmZyYW1lKCkp
OworICAgIHJldHVybiBhY3RpdmVNYXRjaEZyYW1lICYmIGFjdGl2ZU1hdGNoRnJhbWUtPm1fYWN0
aXZlTWF0Y2ggJiYgYWN0aXZlTWF0Y2hGcmFtZS0+ZnJhbWUoKS0+dHJlZSgpLT5pc0Rlc2NlbmRh
bnRPZihtYWluRnJhbWVJbXBsLT5mcmFtZSgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnVw
ZGF0ZUZpbmRNYXRjaFJlY3RzKCkKQEAgLTIyMDMsNDQgKzIwODcsNDEgQEAgdm9pZCBXZWJGcmFt
ZUltcGw6OmRlbGl2ZXJJbnRlbnQoY29uc3QgV2ViSW50ZW50JiBpbnRlbnQsIFdlYk1lc3NhZ2VQ
b3J0Q2hhbm5lbEEKICAgICAgICAgICAgICgqY2hhbm5lbHMpW2ldID0gTWVzc2FnZVBvcnRDaGFu
bmVsOjpjcmVhdGUocGxhdGZvcm1DaGFubmVsKTsKICAgICAgICAgfQogICAgIH0KLSAgICBPd25Q
dHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydEFycmF5ID0gV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmVu
dGFuZ2xlUG9ydHMoKihtX2ZyYW1lLT5kb2N1bWVudCgpKSwgY2hhbm5lbHMucmVsZWFzZSgpKTsK
KyAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydEFycmF5ID0gV2ViQ29yZTo6TWVzc2Fn
ZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKihmcmFtZSgpLT5kb2N1bWVudCgpKSwgY2hhbm5lbHMucmVs
ZWFzZSgpKTsKIAotICAgIFJlZlB0cjxEZWxpdmVyZWRJbnRlbnQ+IGRlbGl2ZXJlZEludGVudCA9
IERlbGl2ZXJlZEludGVudDo6Y3JlYXRlKG1fZnJhbWUsIGNsaWVudC5yZWxlYXNlKCksIGludGVu
dC5hY3Rpb24oKSwgaW50ZW50LnR5cGUoKSwgaW50ZW50RGF0YSwgcG9ydEFycmF5LnJlbGVhc2Uo
KSwgd2ViY29yZUludGVudC0+ZXh0cmFzKCkpOworICAgIFJlZlB0cjxEZWxpdmVyZWRJbnRlbnQ+
IGRlbGl2ZXJlZEludGVudCA9IERlbGl2ZXJlZEludGVudDo6Y3JlYXRlKGZyYW1lKCksIGNsaWVu
dC5yZWxlYXNlKCksIGludGVudC5hY3Rpb24oKSwgaW50ZW50LnR5cGUoKSwgaW50ZW50RGF0YSwg
cG9ydEFycmF5LnJlbGVhc2UoKSwgd2ViY29yZUludGVudC0+ZXh0cmFzKCkpOwogCi0gICAgRE9N
V2luZG93SW50ZW50czo6ZnJvbShtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSktPmRl
bGl2ZXIoZGVsaXZlcmVkSW50ZW50LnJlbGVhc2UoKSk7CisgICAgRE9NV2luZG93SW50ZW50czo6
ZnJvbShmcmFtZSgpLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSktPmRlbGl2ZXIoZGVsaXZlcmVk
SW50ZW50LnJlbGVhc2UoKSk7CiAjZW5kaWYKIH0KIAogV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6
Y29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1l
KQorICAgIGlmICghZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotCiAgICAg
VmVjdG9yPFVDaGFyPiB0ZXh0OwotICAgIGZyYW1lQ29udGVudEFzUGxhaW5UZXh0KG1heENoYXJz
LCBtX2ZyYW1lLCAmdGV4dCk7CisgICAgZnJhbWVDb250ZW50QXNQbGFpblRleHQobWF4Q2hhcnMs
IGZyYW1lKCksICZ0ZXh0KTsKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdCh0ZXh0KTsKIH0KIAog
V2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6Y29udGVudEFzTWFya3VwKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRnVsbE1hcmt1cChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBpZiAoIWZy
YW1lKCkpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlRnVs
bE1hcmt1cChmcmFtZSgpLT5kb2N1bWVudCgpKTsKIH0KIAogV2ViU3RyaW5nIFdlYkZyYW1lSW1w
bDo6cmVuZGVyVHJlZUFzVGV4dChSZW5kZXJBc1RleHRDb250cm9scyB0b1Nob3cpIGNvbnN0CiB7
CiAgICAgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IgPSBSZW5kZXJBc1RleHRCZWhhdmlv
ck5vcm1hbDsKIAotICAgIGlmICh0b1Nob3cgJiBSZW5kZXJBc1RleHREZWJ1ZykgewotICAgICAg
ICBiZWhhdmlvciB8PSBSZW5kZXJBc1RleHRTaG93Q29tcG9zaXRlZExheWVycwotICAgICAgICAg
ICAgfCBSZW5kZXJBc1RleHRTaG93QWRkcmVzc2VzCi0gICAgICAgICAgICB8IFJlbmRlckFzVGV4
dFNob3dJREFuZENsYXNzCi0gICAgICAgICAgICB8IFJlbmRlckFzVGV4dFNob3dMYXllck5lc3Rp
bmc7Ci0gICAgfQorICAgIGlmICh0b1Nob3cgJiBSZW5kZXJBc1RleHREZWJ1ZykKKyAgICAgICAg
YmVoYXZpb3IgfD0gUmVuZGVyQXNUZXh0U2hvd0NvbXBvc2l0ZWRMYXllcnMgfCBSZW5kZXJBc1Rl
eHRTaG93QWRkcmVzc2VzIHwgUmVuZGVyQXNUZXh0U2hvd0lEQW5kQ2xhc3MgfCBSZW5kZXJBc1Rl
eHRTaG93TGF5ZXJOZXN0aW5nOwogCiAgICAgaWYgKHRvU2hvdyAmIFJlbmRlckFzVGV4dFByaW50
aW5nKQogICAgICAgICBiZWhhdmlvciB8PSBSZW5kZXJBc1RleHRQcmludGluZ01vZGU7CiAKLSAg
ICByZXR1cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX2ZyYW1lLCBiZWhhdmlvcik7CisgICAg
cmV0dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24oZnJhbWUoKSwgYmVoYXZpb3IpOwogfQogCiBX
ZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29uc3QgV2ViRWxl
bWVudCYgd2ViRWxlbWVudCkgY29uc3QKQEAgLTIyNTAsMzYgKzIxMzEsMzIgQEAgV2ViU3RyaW5n
IFdlYkZyYW1lSW1wbDo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGNvbnN0IFdlYkVsZW1lbnQmIHdl
YkVsZW1lbnQpIGNvbnMKIAogdm9pZCBXZWJGcmFtZUltcGw6OnByaW50UGFnZXNXaXRoQm91bmRh
cmllcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViU2l6ZSYgcGFnZVNpemVJblBpeGVscykK
IHsKLSAgICBBU1NFUlQobV9wcmludENvbnRleHQuZ2V0KCkpOworICAgIEFTU0VSVChtX3ByaW50
Q29udGV4dCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzKTsK
ICAgICBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGJ1aWxkZXIuY29udGV4dCgp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0UHJpbnRpbmcodHJ1
ZSk7CiAKLSAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKGdy
YXBoaWNzQ29udGV4dCwKLSAgICAgICAgRmxvYXRTaXplKHBhZ2VTaXplSW5QaXhlbHMud2lkdGgs
IHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KSk7CisgICAgbV9wcmludENvbnRleHQtPnNwb29sQWxs
UGFnZXNXaXRoQm91bmRhcmllcyhncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6ZShwYWdlU2l6ZUlu
UGl4ZWxzLndpZHRoLCBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCkpOwogfQogCiBXZWJSZWN0IFdl
YkZyYW1lSW1wbDo6c2VsZWN0aW9uQm91bmRzUmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc1Nl
bGVjdGlvbigpKQotICAgICAgICByZXR1cm4gSW50UmVjdChmcmFtZSgpLT5zZWxlY3Rpb24oKS0+
Ym91bmRzKGZhbHNlKSk7Ci0KLSAgICByZXR1cm4gV2ViUmVjdCgpOworICAgIHJldHVybiBoYXNT
ZWxlY3Rpb24oKSA/IFdlYlJlY3QoSW50UmVjdChmcmFtZSgpLT5zZWxlY3Rpb24oKS0+Ym91bmRz
KGZhbHNlKSkpIDogV2ViUmVjdCgpOwogfQogCiBib29sIFdlYkZyYW1lSW1wbDo6c2VsZWN0aW9u
U3RhcnRIYXNTcGVsbGluZ01hcmtlckZvcihpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25TdGFydEhhc01hcmtl
ckZvcihEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIGZyb20sIGxlbmd0aCk7CisgICAgcmV0dXJu
IGZyYW1lKCktPmVkaXRvcigpLT5zZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcsIGZyb20sIGxlbmd0aCk7CiB9CiAKIFdlYlN0cmluZyBXZWJGcmFtZUlt
cGw6OmxheWVyVHJlZUFzVGV4dChib29sIHNob3dEZWJ1Z0luZm8pIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2ZyYW1lKQorICAgIGlmICghZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygp
OwotICAgIHJldHVybiBXZWJTdHJpbmcobV9mcmFtZS0+bGF5ZXJUcmVlQXNUZXh0KHNob3dEZWJ1
Z0luZm8pKTsKKyAgICByZXR1cm4gV2ViU3RyaW5nKGZyYW1lKCktPmxheWVyVHJlZUFzVGV4dChz
aG93RGVidWdJbmZvKSk7CiB9CiAKIC8vIFdlYkZyYW1lSW1wbCBwdWJsaWMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzMyLDgg
KzIyMDksOCBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2V0V2ViQ29yZUZyYW1lKFdlYkNvcmU6OkZy
YW1lKiBmcmFtZSkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmluaXRpYWxpemVBc01haW5GcmFtZShX
ZWJDb3JlOjpQYWdlKiBwYWdlKQogewotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBGcmFtZTo6
Y3JlYXRlKHBhZ2UsIDAsICZtX2ZyYW1lTG9hZGVyQ2xpZW50KTsKLSAgICBzZXRXZWJDb3JlRnJh
bWUoZnJhbWUuZ2V0KCkpOworICAgIFJlZlB0cjxGcmFtZT4gbWFpbkZyYW1lID0gRnJhbWU6OmNy
ZWF0ZShwYWdlLCAwLCAmbV9mcmFtZUxvYWRlckNsaWVudCk7CisgICAgc2V0V2ViQ29yZUZyYW1l
KG1haW5GcmFtZS5nZXQoKSk7CiAKICAgICAvLyBBZGQgcmVmZXJlbmNlIG9uIGJlaGFsZiBvZiBG
cmFtZUxvYWRlci4gIFNlZSBjb21tZW50cyBpbgogICAgIC8vIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpmcmFtZUxvYWRlckRlc3Ryb3llZCBmb3IgbW9yZSBpbmZvLgpAQCAtMjM0MSwxMSArMjIxOCwx
MCBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6aW5pdGlhbGl6ZUFzTWFpbkZyYW1lKFdlYkNvcmU6OlBh
Z2UqIHBhZ2UpCiAKICAgICAvLyBXZSBtdXN0IGNhbGwgaW5pdCgpIGFmdGVyIG1fZnJhbWUgaXMg
YXNzaWduZWQgYmVjYXVzZSBpdCBpcyByZWZlcmVuY2VkCiAgICAgLy8gZHVyaW5nIGluaXQoKS4K
LSAgICBtX2ZyYW1lLT5pbml0KCk7CisgICAgZnJhbWUoKS0+aW5pdCgpOwogfQogCi1QYXNzUmVm
UHRyPEZyYW1lPiBXZWJGcmFtZUltcGw6OmNyZWF0ZUNoaWxkRnJhbWUoCi0gICAgY29uc3QgRnJh
bWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQpCitQYXNzUmVmUHRyPEZyYW1lPiBXZWJGcmFtZUltcGw6OmNyZWF0ZUNoaWxkRnJhbWUoY29u
c3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQpCiB7CiAgICAgUmVmUHRyPFdlYkZyYW1lSW1wbD4gd2ViZnJhbWUoYWRvcHRSZWYo
bmV3IFdlYkZyYW1lSW1wbChtX2NsaWVudCkpKTsKIApAQCAtMjM1NCwxMyArMjIzMCwxMiBAQCBQ
YXNzUmVmUHRyPEZyYW1lPiBXZWJGcmFtZUltcGw6OmNyZWF0ZUNoaWxkRnJhbWUoCiAgICAgLy8g
b2YgdGhpcyBmaWxlIGZvciBtb3JlIGluZm8uCiAgICAgd2ViZnJhbWUtPnJlZigpOwogCi0gICAg
UmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNyZWF0ZSgKLSAgICAgICAgbV9mcmFt
ZS0+cGFnZSgpLCBvd25lckVsZW1lbnQsICZ3ZWJmcmFtZS0+bV9mcmFtZUxvYWRlckNsaWVudCk7
CisgICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNyZWF0ZShmcmFtZSgpLT5w
YWdlKCksIG93bmVyRWxlbWVudCwgJndlYmZyYW1lLT5tX2ZyYW1lTG9hZGVyQ2xpZW50KTsKICAg
ICB3ZWJmcmFtZS0+c2V0V2ViQ29yZUZyYW1lKGNoaWxkRnJhbWUuZ2V0KCkpOwogCiAgICAgY2hp
bGRGcmFtZS0+dHJlZSgpLT5zZXROYW1lKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwogCi0gICAgbV9m
cmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKKyAgICBmcmFtZSgpLT50cmVl
KCktPmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOwogCiAgICAgLy8gRnJhbWU6OmluaXQoKSBjYW4g
dHJpZ2dlciBvbmxvYWQgZXZlbnQgaW4gdGhlIHBhcmVudCBmcmFtZSwKICAgICAvLyB3aGljaCBt
YXkgZGV0YWNoIHRoaXMgZnJhbWUgYW5kIHRyaWdnZXIgYSBudWxsLXBvaW50ZXIgYWNjZXNzCkBA
IC0yMzc1LDEwICsyMjUwLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVJbXBsOjpjcmVh
dGVDaGlsZEZyYW1lKAogICAgIGlmICghY2hpbGRGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFVSTEludG9DaGls
ZEZyYW1lKAotICAgICAgICByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLAotICAgICAg
ICByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBSZWZlcnJlcigpLAotICAgICAgICBjaGls
ZEZyYW1lLmdldCgpKTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFVSTEludG9DaGlsZEZy
YW1lKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIHJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuaHR0cFJlZmVycmVyKCksIGNoaWxkRnJhbWUuZ2V0KCkpOwogCiAgICAgLy8gQSBzeW5j
aHJvbm91cyBuYXZpZ2F0aW9uIChhYm91dDpibGFuaykgd291bGQgaGF2ZSBhbHJlYWR5IHByb2Nl
c3NlZAogICAgIC8vIG9ubG9hZCwgc28gaXQgaXMgcG9zc2libGUgZm9yIHRoZSBmcmFtZSB0byBo
YXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgYnkKQEAgLTI0MDMsMTMgKzIyNzUsMTMgQEAgdm9p
ZCBXZWJGcmFtZUltcGw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6Y3JlYXRlRnJhbWVWaWV3KCkKIHsKLSAgICBBU1NFUlQo
bV9mcmFtZSk7IC8vIElmIG1fZnJhbWUgZG9lc24ndCBleGlzdCwgd2UgcHJvYmFibHkgZGlkbid0
IGluaXQgcHJvcGVybHkuCisgICAgQVNTRVJUKGZyYW1lKCkpOyAvLyBJZiBmcmFtZSgpIGRvZXNu
J3QgZXhpc3QsIHdlIHByb2JhYmx5IGRpZG4ndCBpbml0IHByb3Blcmx5LgogCiAgICAgV2ViVmll
d0ltcGwqIHdlYlZpZXcgPSB2aWV3SW1wbCgpOwotICAgIGJvb2wgaXNNYWluRnJhbWUgPSB3ZWJW
aWV3LT5tYWluRnJhbWVJbXBsKCktPmZyYW1lKCkgPT0gbV9mcmFtZTsKLSAgICBtX2ZyYW1lLT5j
cmVhdGVWaWV3KHdlYlZpZXctPnNpemUoKSwgQ29sb3I6OndoaXRlLCB3ZWJWaWV3LT5pc1RyYW5z
cGFyZW50KCksICB3ZWJWaWV3LT5maXhlZExheW91dFNpemUoKSwgaXNNYWluRnJhbWUgPyB3ZWJW
aWV3LT5pc0ZpeGVkTGF5b3V0TW9kZUVuYWJsZWQoKSA6IDApOworICAgIGJvb2wgaXNNYWluRnJh
bWUgPSB3ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCktPmZyYW1lKCkgPT0gZnJhbWUoKTsKKyAgICBm
cmFtZSgpLT5jcmVhdGVWaWV3KHdlYlZpZXctPnNpemUoKSwgQ29sb3I6OndoaXRlLCB3ZWJWaWV3
LT5pc1RyYW5zcGFyZW50KCksICB3ZWJWaWV3LT5maXhlZExheW91dFNpemUoKSwgaXNNYWluRnJh
bWUgPyB3ZWJWaWV3LT5pc0ZpeGVkTGF5b3V0TW9kZUVuYWJsZWQoKSA6IDApOwogICAgIGlmICh3
ZWJWaWV3LT5zaG91bGRBdXRvUmVzaXplKCkgJiYgaXNNYWluRnJhbWUpCi0gICAgICAgIG1fZnJh
bWUtPnZpZXcoKS0+ZW5hYmxlQXV0b1NpemVNb2RlKHRydWUsIHdlYlZpZXctPm1pbkF1dG9TaXpl
KCksIHdlYlZpZXctPm1heEF1dG9TaXplKCkpOworICAgICAgICBmcmFtZSgpLT52aWV3KCktPmVu
YWJsZUF1dG9TaXplTW9kZSh0cnVlLCB3ZWJWaWV3LT5taW5BdXRvU2l6ZSgpLCB3ZWJWaWV3LT5t
YXhBdXRvU2l6ZSgpKTsKIAogICAgIGlmIChpc01haW5GcmFtZSAmJiB3ZWJWaWV3LT5kZXZUb29s
c0FnZW50UHJpdmF0ZSgpKQogICAgICAgICB3ZWJWaWV3LT5kZXZUb29sc0FnZW50UHJpdmF0ZSgp
LT5tYWluRnJhbWVWaWV3Q3JlYXRlZCh0aGlzKTsKQEAgLTI0MTksMjkgKzIyOTEsMjMgQEAgV2Vi
RnJhbWVJbXBsKiBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShGcmFtZSogZnJhbWUpCiB7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RnJhbWVMb2FkZXJDbGllbnRJbXBsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZy
YW1lKCk7CiB9CiAKIFdlYkZyYW1lSW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWVPd25lckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQKLSAgICAgICAgfHwg
IWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKQotICAgICAgICB8fCAoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpCi0gICAgICAgICAgICAmJiAhZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkpCisgICAgLy8gRklYTUU6IFdoeSBkbyB3
ZSBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIDxpZnJhbWU+IGFuZCA8ZnJhbWU+IGhlcmU/IFdoeSBj
YW4ndCB3ZSBnZXQgdGhlIFdlYkZyYW1lSW1wbCBmcm9tIGFuIDxvYmplY3Q+IGVsZW1lbnQsIGZv
ciBleGFtcGxlLgorICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNGcmFtZU93bmVyRWxl
bWVudCgpIHx8ICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgJiYg
IWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZVRhZykpKQogICAgICAgICByZXR1
cm4gMDsKLQotICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVFbGVtZW50ID0KLSAgICAg
ICAgc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVP
d25lckVsZW1lbnQqPihlbGVtZW50KTsKICAgICByZXR1cm4gZnJvbUZyYW1lKGZyYW1lRWxlbWVu
dC0+Y29udGVudEZyYW1lKCkpOwogfQogCiBXZWJWaWV3SW1wbCogV2ViRnJhbWVJbXBsOjp2aWV3
SW1wbCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghZnJhbWUoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gV2ViVmlld0ltcGw6OmZyb21QYWdlKG1fZnJh
bWUtPnBhZ2UoKSk7CisgICAgcmV0dXJuIFdlYlZpZXdJbXBsOjpmcm9tUGFnZShmcmFtZSgpLT5w
YWdlKCkpOwogfQogCiBXZWJEYXRhU291cmNlSW1wbCogV2ViRnJhbWVJbXBsOjpkYXRhU291cmNl
SW1wbCgpIGNvbnN0CkBAIC0yNTI3LDExICsyMzkzLDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGJvb2wgd2FzUHJvdmlzaW9uYWwpCiAK
IHZvaWQgV2ViRnJhbWVJbXBsOjpzZXRDYW5IYXZlU2Nyb2xsYmFycyhib29sIGNhbkhhdmVTY3Jv
bGxiYXJzKQogewotICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJhcnMoY2Fu
SGF2ZVNjcm9sbGJhcnMpOworICAgIGZyYW1lKCktPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJh
cnMoY2FuSGF2ZVNjcm9sbGJhcnMpOwogfQogCi0vLyBXZWJGcmFtZUltcGwgcHJpdmF0ZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiB2
b2lkIFdlYkZyYW1lSW1wbDo6Y2xvc2luZygpCiB7CiAgICAgbV9mcmFtZSA9IDA7CkBAIC0yNTcy
LDcgKzI0MzYsNiBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2V0TWFya2VyQWN0aXZlKFJhbmdlKiBy
YW5nZSwgYm9vbCBhY3RpdmUpCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYzsKICAgICBp
ZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoZWMpKQogICAgICAgICByZXR1cm47Ci0KICAg
ICBmcmFtZSgpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnNldE1hcmtlcnNBY3RpdmUocmFuZ2Us
IGFjdGl2ZSk7CiB9CiAKQEAgLTI1ODIsOSArMjQ0NSw3IEBAIGludCBXZWJGcmFtZUltcGw6Om9y
ZGluYWxPZkZpcnN0TWF0Y2hGb3JGcmFtZShXZWJGcmFtZUltcGwqIGZyYW1lKSBjb25zdAogICAg
IFdlYkZyYW1lSW1wbCogbWFpbkZyYW1lSW1wbCA9IHZpZXdJbXBsKCktPm1haW5GcmFtZUltcGwo
KTsKICAgICAvLyBJdGVyYXRlIGZyb20gdGhlIG1haW4gZnJhbWUgdXAgdG8gKGJ1dCBub3QgaW5j
bHVkaW5nKSB8ZnJhbWV8IGFuZAogICAgIC8vIGFkZCB1cCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMg
Zm91bmQgc28gZmFyLgotICAgIGZvciAoV2ViRnJhbWVJbXBsKiBpdCA9IG1haW5GcmFtZUltcGw7
Ci0gICAgICAgICBpdCAhPSBmcmFtZTsKLSAgICAgICAgIGl0ID0gc3RhdGljX2Nhc3Q8V2ViRnJh
bWVJbXBsKj4oaXQtPnRyYXZlcnNlTmV4dCh0cnVlKSkpIHsKKyAgICBmb3IgKFdlYkZyYW1lSW1w
bCogaXQgPSBtYWluRnJhbWVJbXBsOyBpdCAhPSBmcmFtZTsgaXQgPSBzdGF0aWNfY2FzdDxXZWJG
cmFtZUltcGwqPihpdC0+dHJhdmVyc2VOZXh0KHRydWUpKSkgewogICAgICAgICBpZiAoaXQtPm1f
bGFzdE1hdGNoQ291bnQgPiAwKQogICAgICAgICAgICAgb3JkaW5hbCArPSBpdC0+bV9sYXN0TWF0
Y2hDb3VudDsKICAgICB9CkBAIC0yNjE2LDE5ICsyNDc3LDE0IEBAIGJvb2wgV2ViRnJhbWVJbXBs
OjpzaG91bGRTY29wZU1hdGNoZXMoY29uc3QgU3RyaW5nJiBzZWFyY2hUZXh0KQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzU29vbihp
bnQgaWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViRmluZE9wdGlvbnMmIG9wdGlv
bnMsIGJvb2wgcmVzZXQpCit2b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzU29v
bihpbnQgaWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiBzZWFyY2hUZXh0LCBjb25zdCBXZWJG
aW5kT3B0aW9ucyYgb3B0aW9ucywgYm9vbCByZXNldCkKIHsKLSAgICBtX2RlZmVycmVkU2NvcGlu
Z1dvcmsuYXBwZW5kKG5ldyBEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcygKLSAgICAgICAgdGhp
cywgaWRlbnRpZmllciwgc2VhcmNoVGV4dCwgb3B0aW9ucywgcmVzZXQpKTsKKyAgICBtX2RlZmVy
cmVkU2NvcGluZ1dvcmsuYXBwZW5kKG5ldyBEZWZlcnJlZFNjb3BlU3RyaW5nTWF0Y2hlcyh0aGlz
LCBpZGVudGlmaWVyLCBzZWFyY2hUZXh0LCBvcHRpb25zLCByZXNldCkpOwogfQogCi12b2lkIFdl
YkZyYW1lSW1wbDo6Y2FsbFNjb3BlU3RyaW5nTWF0Y2hlcyhEZWZlcnJlZFNjb3BlU3RyaW5nTWF0
Y2hlcyogY2FsbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgc2VhcmNoVGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkZpbmRPcHRpb25zJiBvcHRp
b25zLCBib29sIHJlc2V0KQordm9pZCBXZWJGcmFtZUltcGw6OmNhbGxTY29wZVN0cmluZ01hdGNo
ZXMoRGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXMqIGNhbGxlciwgaW50IGlkZW50aWZpZXIsIGNv
bnN0IFdlYlN0cmluZyYgc2VhcmNoVGV4dCwgY29uc3QgV2ViRmluZE9wdGlvbnMmIG9wdGlvbnMs
IGJvb2wgcmVzZXQpCiB7CiAgICAgbV9kZWZlcnJlZFNjb3BpbmdXb3JrLnJlbW92ZShtX2RlZmVy
cmVkU2NvcGluZ1dvcmsuZmluZChjYWxsZXIpKTsKLQogICAgIHNjb3BlU3RyaW5nTWF0Y2hlcyhp
ZGVudGlmaWVyLCBzZWFyY2hUZXh0LCBvcHRpb25zLCByZXNldCk7CiAKICAgICAvLyBUaGlzIG5l
ZWRzIHRvIGhhcHBlbiBsYXN0IHNpbmNlIHNlYXJjaFRleHQgaXMgcGFzc2VkIGJ5IHJlZmVyZW5j
ZS4KQEAgLTI2MzcsMjEgKzI0OTMsMjIgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmNhbGxTY29wZVN0
cmluZ01hdGNoZXMoRGVmZXJyZWRTY29wZVN0cmluZ01hdGNoZXMqIGNhbGxlciwKIAogdm9pZCBX
ZWJGcmFtZUltcGw6OmludmFsaWRhdGVJZk5lY2Vzc2FyeSgpCiB7Ci0gICAgaWYgKG1fbGFzdE1h
dGNoQ291bnQgPiBtX25leHRJbnZhbGlkYXRlQWZ0ZXIpIHsKLSAgICAgICAgLy8gRklYTUU6ICho
dHRwOi8vYi8xMDg4MTY1KSBPcHRpbWl6ZSB0aGUgZHJhd2luZyBvZiB0aGUgdGlja21hcmtzIGFu
ZAotICAgICAgICAvLyByZW1vdmUgdGhpcy4gVGhpcyBjYWxjdWxhdGlvbiBzZXRzIGEgbWlsZXN0
b25lIGZvciB3aGVuIG5leHQgdG8KLSAgICAgICAgLy8gaW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFy
IGFuZCB0aGUgY29udGVudCBhcmVhLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2UKLSAgICAgICAgLy8g
ZG9uJ3Qgc3BlbmQgdG9vIG11Y2ggdGltZSBkcmF3aW5nIHRoZSBzY3JvbGxiYXIgb3ZlciBhbmQg
b3ZlciBhZ2Fpbi4KLSAgICAgICAgLy8gQmFzaWNhbGx5LCB1cCB1bnRpbCB0aGUgZmlyc3QgNTAw
IG1hdGNoZXMgdGhlcmUgaXMgbm8gdGhyb3R0bGUuCi0gICAgICAgIC8vIEFmdGVyIHRoZSBmaXJz
dCA1MDAgbWF0Y2hlcywgd2Ugc2V0IHNldCB0aGUgbWlsZXN0b25lIGZ1cnRoZXIgYW5kCi0gICAg
ICAgIC8vIGZ1cnRoZXIgb3V0ICg3NTAsIDExMjUsIDE2ODgsIDJLLCAzSykuCi0gICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgc3RhcnRTbG93aW5nRG93bkFmdGVyID0gNTAwOwotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHNsb3dkb3duID0gNzUwOwotICAgICAgICBpbnQgaSA9IChtX2xhc3RNYXRj
aENvdW50IC8gc3RhcnRTbG93aW5nRG93bkFmdGVyKTsKLSAgICAgICAgbV9uZXh0SW52YWxpZGF0
ZUFmdGVyICs9IGkgKiBzbG93ZG93bjsKLQotICAgICAgICBpbnZhbGlkYXRlQXJlYShJbnZhbGlk
YXRlU2Nyb2xsYmFyKTsKLSAgICB9CisgICAgaWYgKG1fbGFzdE1hdGNoQ291bnQgPD0gbV9uZXh0
SW52YWxpZGF0ZUFmdGVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogKGh0dHA6
Ly9iLzEwODgxNjUpIE9wdGltaXplIHRoZSBkcmF3aW5nIG9mIHRoZSB0aWNrbWFya3MgYW5kCisg
ICAgLy8gcmVtb3ZlIHRoaXMuIFRoaXMgY2FsY3VsYXRpb24gc2V0cyBhIG1pbGVzdG9uZSBmb3Ig
d2hlbiBuZXh0IHRvCisgICAgLy8gaW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFyIGFuZCB0aGUgY29u
dGVudCBhcmVhLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2UKKyAgICAvLyBkb24ndCBzcGVuZCB0b28g
bXVjaCB0aW1lIGRyYXdpbmcgdGhlIHNjcm9sbGJhciBvdmVyIGFuZCBvdmVyIGFnYWluLgorICAg
IC8vIEJhc2ljYWxseSwgdXAgdW50aWwgdGhlIGZpcnN0IDUwMCBtYXRjaGVzIHRoZXJlIGlzIG5v
IHRocm90dGxlLgorICAgIC8vIEFmdGVyIHRoZSBmaXJzdCA1MDAgbWF0Y2hlcywgd2Ugc2V0IHNl
dCB0aGUgbWlsZXN0b25lIGZ1cnRoZXIgYW5kCisgICAgLy8gZnVydGhlciBvdXQgKDc1MCwgMTEy
NSwgMTY4OCwgMkssIDNLKS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHN0YXJ0U2xvd2luZ0Rvd25B
ZnRlciA9IDUwMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNsb3dkb3duID0gNzUwOworCisgICAg
aW50IGkgPSBtX2xhc3RNYXRjaENvdW50IC8gc3RhcnRTbG93aW5nRG93bkFmdGVyOworICAgIG1f
bmV4dEludmFsaWRhdGVBZnRlciArPSBpICogc2xvd2Rvd247CisgICAgaW52YWxpZGF0ZUFyZWEo
SW52YWxpZGF0ZVNjcm9sbGJhcik7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkSmF2YVNj
cmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCkBAIC0yNjY0LDI0ICsyNTIxLDI0IEBAIHZvaWQgV2Vi
RnJhbWVJbXBsOjpsb2FkSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCiAgICAgLy8gbG9j
YXRpb24gY2hhbmdlLiAgV2UgYWxzbyBhbGxvdyBhIEpTIFVSTCB0byBiZSBsb2FkZWQgZXZlbiBp
ZiBzY3JpcHRzIG9uCiAgICAgLy8gdGhlIHBhZ2UgYXJlIG90aGVyd2lzZSBkaXNhYmxlZC4KIAot
ICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFtZS0+cGFnZSgpKQorICAgIGlm
ICghZnJhbWUoKS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUoKS0+cGFnZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQobV9mcmFtZS0+ZG9jdW1l
bnQoKSk7CisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50KGZyYW1lKCktPmRvY3Vt
ZW50KCkpOwogCiAgICAgLy8gUHJvdGVjdCBwcml2aWxlZ2VkIHBhZ2VzIGFnYWluc3QgYm9va21h
cmtsZXRzIGFuZCBvdGhlciBqYXZhc2NyaXB0IG1hbmlwdWxhdGlvbnMuCi0gICAgaWYgKFNjaGVt
ZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTm90QWxsb3dpbmdKYXZhc2NyaXB0VVJM
cyhtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5wcm90b2NvbCgpKSkKKyAgICBpZiAoU2NoZW1l
UmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNOb3RBbGxvd2luZ0phdmFzY3JpcHRVUkxz
KGZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnByb3RvY29sKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmcgc2NyaXB0ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJp
bmcoKS5zdWJzdHJpbmcoc3RybGVuKCJqYXZhc2NyaXB0OiIpKSk7Ci0gICAgU2NyaXB0VmFsdWUg
cmVzdWx0ID0gbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKTsK
KyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBmcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlw
dChzY3JpcHQsIHRydWUpOwogCiAgICAgU3RyaW5nIHNjcmlwdFJlc3VsdDsKICAgICBpZiAoIXJl
c3VsdC5nZXRTdHJpbmcoc2NyaXB0UmVzdWx0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFtX2ZyYW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPmxvY2F0aW9uQ2hhbmdlUGVuZGluZygp
KQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJlcGxh
Y2VEb2N1bWVudChzY3JpcHRSZXN1bHQsIG93bmVyRG9jdW1lbnQuZ2V0KCkpOworICAgIGlmICgh
ZnJhbWUoKS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5sb2NhdGlvbkNoYW5nZVBlbmRpbmcoKSkK
KyAgICAgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5yZXBsYWNl
RG9jdW1lbnQoc2NyaXB0UmVzdWx0LCBvd25lckRvY3VtZW50LmdldCgpKTsKIH0KIAogdm9pZCBX
ZWJGcmFtZUltcGw6OndpbGxEZXRhY2hQYWdlKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>