<?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>28852</bug_id>
          
          <creation_ts>2009-08-31 13:04:51 -0700</creation_ts>
          <short_desc>Rename KURL single argument constructor to avoid confusion</short_desc>
          <delta_ts>2009-08-31 15:07:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>143704</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-31 13:04:51 -0700</bug_when>
    <thetext>KURL(urlString) feels like something one should use by default, but it really isn&apos;t. This form can only be used with strings that are normalized in KURL sense - most notably, with strings that are returned by KURL::string() and stored as String objects to reduce memory usage as compared to KURL objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143707</commentid>
    <comment_count>1</comment_count>
      <attachid>38830</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-31 13:25:42 -0700</bug_when>
    <thetext>Created attachment 38830
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143715</commentid>
    <comment_count>2</comment_count>
      <attachid>38830</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-31 13:49:13 -0700</bug_when>
    <thetext>Comment on attachment 38830
proposed patch

Maybe the name of this should tie in with the name of the function that lets you get the string out of the KURL in the first place.

I wish there was a comment mentioning that it&apos;s usually a design mistake to be re-creating the KURL from an already parsed string unless we want to save storage by storing a string instead of a KURL. Is that true? If so, where should we say it.

&gt; -        KURL completedURL = url.isEmpty() ? KURL(&quot;&quot;) : completeURL(exec, url);
&gt; +        KURL completedURL = url.isEmpty() ? KURL(ParsedURLString, &quot;&quot;) : completeURL(exec, url);

I think a function named emptyURL() in KURL.h would be even better for cases like this.

&gt; -    KURL base(getAttribute(baseAttr));
&gt; +    KURL base(ParsedURLString, getAttribute(baseAttr));

Can this possibly be right? Can&apos;t the attribute be set to anything? What guarantees that it&apos;s a parsed URL string?

r=me on the mechanical change, clearly correct, but I think we still have a ways to go to make this clear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143729</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-31 14:46:57 -0700</bug_when>
    <thetext>&gt; I wish there was a comment mentioning that it&apos;s usually a design mistake to be
&gt; re-creating the KURL from an already parsed string unless we want to save
&gt; storage by storing a string instead of a KURL. Is that true? If so, where
&gt; should we say it.

I think I said something similar in ChangeLog, but having a comment in code seems fine. I&apos;m going to add the following before the constructor declaration: &quot;It is usually best to avoid repeatedly parsing a string, unless memory saving outweigh the possible slow-downs.&quot;

&gt; &gt; -    KURL base(getAttribute(baseAttr));
&gt; &gt; +    KURL base(ParsedURLString, getAttribute(baseAttr));
&gt; 
&gt; Can this possibly be right? Can&apos;t the attribute be set to anything? What
&gt; guarantees that it&apos;s a parsed URL string?

Yes, this is wrong. Looks like document base should serve as base for this one. I&apos;ll file a bug.

This only affects xml:base.

&gt; r=me on the mechanical change, clearly correct, but I think we still have a
&gt; ways to go to make this clear

I think that the main shortcoming here is that this is not enforced by the compiler in any way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143731</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-31 14:51:42 -0700</bug_when>
    <thetext>Filed bug 28858 for xml:base and baseURI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143736</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-31 15:07:53 -0700</bug_when>
    <thetext>Committed revision 47907.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38830</attachid>
            <date>2009-08-31 13:25:42 -0700</date>
            <delta_ts>2009-08-31 13:49:12 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>KURLString.txt</filename>
            <type>text/plain</type>
            <size>45019</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzkwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE0IEBACisyMDA5LTA4LTMxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg4NTIKKyAgICAgICAg
UmVuYW1lIEtVUkwgc2luZ2xlIGFyZ3VtZW50IGNvbnN0cnVjdG9yIHRvIGF2b2lkIGNvbmZ1c2lv
bgorCisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOiBUaGUgY29uc3RydWN0b3IgdGhhdCB1c2Vk
IHRvIGJlIHNpbmdsZSBhcmd1bWVudCBzaG91bGQgbm93IGJlIGludm9rZWQKKyAgICAgICAgYXMg
S1VSTChQYXJzZWRVUkxTdHJpbmcsIG15U3RyaW5nKS4KKworICAgICAgICAqIFdlYkNvcmUuYmFz
ZS5leHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpTY3Jp
cHRDYWxsRnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwOgorICAg
ICAgICAoX05QTl9FdmFsdWF0ZUhlbHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdpbmRvdyk6
CisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNTVkdDdXJzb3JJZGVudGlmaWVyKToKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZSk6CisgICAg
ICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0
UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KToKKyAgICAgICAgKiBjc3MvU3R5bGVCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQmFzZTo6YmFzZVVSTCk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppbml0U2VjdXJpdHlDb250
ZXh0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpiYXNlVVJJKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wbGV0ZVVSTHMpOgorICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnVybCk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5SXRlbTo6b3JpZ2luYWxVUkwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNl
OjpjcmVhdGVDYWNoZWQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZTo6cmV2YWxpZGF0ZVJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvRG9j
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6cmVxdWVzdFJlc291cmNl
KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OmdldFN1YnJlc291cmNlcyk6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKToKKyAgICAgICAgKiBsb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlOjpyZXNvdXJjZUZvclVSTCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6YWRkRW50cnkpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVJMcyk6CisgICAgICAgICogbG9h
ZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lXZWJBcmNoaXZlOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKToKKyAgICAgICAgKiBub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbkNlbnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uQ2VudGVy
OjpjcmVhdGVIVE1MTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOgorICAgICAgICAoV2ViQ29yZTo6YmxhbmtV
UkwpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkxIYXNoLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9S
ZXNvdXJjZUVycm9yQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6b3Bl
cmF0b3IgQ0ZFcnJvclJlZik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VS
ZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVx
dWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVl
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6aGVhZGVyQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZUVycm9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6
b3BlcmF0b3IgTlNFcnJvciopOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJj
ZVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmls
ZXN5c3RlbVBhdGhGcm9tVXJsT3JUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRX
aW46OnNldERhdGEpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAqIHhtbC9YU0xJ
bXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OmxvYWRTaGVl
dCk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZG9jTG9hZGVyRnVuYyk6CisgICAgICAgIEFkYXB0IHRvIHRoZSBjaGFuZ2UgZXZlcnl3aGVyZSB0
aGUgc2luZ2xlIGFyZ3VtZW50IGNvbnN0cnVjdG9yIHdhcyB1c2VkLiBJIGRpZCBhIHZlcnkKKyAg
ICAgICAgY3Vyc29yeSBjaGVjayBvZiB3aGV0aGVyIHRoZXNlIGxvY2F0aW9ucyB3ZXJlIHVzaW5n
IHRoaXMgY29uc3RydWN0b3IgcHJvcGVybHksIGFuZCBkaWRuJ3QKKyAgICAgICAgbm90aWNlIGFu
eSBvYnZpb3VzIG1pc3Rha2VzLiBUaGUgbmV3IGV4cGxpY2l0IG5hbWUgd2lsbCBob3BlZnVsbHkg
c3VnZ2VzdCBjaGVja2luZyB0aGlzCisgICAgICAgIGJldHRlciB3aGVuIHJlZmFjdG9yaW5nIGFu
eSBzdWNoIGNvZGUuCisKIDIwMDktMDgtMzEgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4OSw4ICs0ODksOCBAQCBfX1pON1dlYkNvcmU0Rm9udEMxRXYKIF9f
Wk43V2ViQ29yZTRGb250RDFFdgogX19aTjdXZWJDb3JlNEZvbnRhU0VSS1MwXwogX19aTjdXZWJD
b3JlNEtVUkwxMGludmFsaWRhdGVFdgorX19aTjdXZWJDb3JlNEtVUkxDMUVOU18xOFBhcnNlZFVS
TFN0cmluZ1RhZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU0S1VSTEMxRVA1TlNVUkwKLV9f
Wk43V2ViQ29yZTRLVVJMQzFFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlNE5vZGUxN3N0b3BJ
Z25vcmluZ0xlYWtzRXYKIF9fWk43V2ViQ29yZTROb2RlMThzdGFydElnbm9yaW5nTGVha3NFdgog
X19aTjdXZWJDb3JlNFBhZ2UxMnNldEdyb3VwTmFtZUVSS05TXzZTdHJpbmdFCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDc4OTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg4LDcgKzY4OCw3IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0
ZSogZXgKICAgICAgICAgbmV3V2luZG93LT5wdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiZGlh
bG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3MpOwogCiAgICAgaWYgKCFwcm90b2NvbElzSmF2YVNj
cmlwdCh1cmwpIHx8IG5ld1dpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkgewotICAgICAg
ICBLVVJMIGNvbXBsZXRlZFVSTCA9IHVybC5pc0VtcHR5KCkgPyBLVVJMKCIiKSA6IGNvbXBsZXRl
VVJMKGV4ZWMsIHVybCk7CisgICAgICAgIEtVUkwgY29tcGxldGVkVVJMID0gdXJsLmlzRW1wdHko
KSA/IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikgOiBjb21wbGV0ZVVSTChleGVjLCB1cmwpOwog
ICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpOwog
CiAgICAgICAgIGlmIChjcmVhdGVkKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fs
bEZyYW1lLmNwcAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTY3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZShjb25zdCBVU3Ry
aW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQogICAg
IDogbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQotICAgICwgbV9zb3VyY2VVUkwodXJsU3Ry
aW5nKQorICAgICwgbV9zb3VyY2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpCiAgICAg
LCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKIHsKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9
IGFyZ3Muc2l6ZSgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCShyZXZpc2lv
biA0Nzg5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2Myw3ICsyNjMsNyBAQCBib29sIF9OUE5fRXZhbHVhdGVIZWxwZXIoTlBQIG5w
cCwgYm9vbCBwCiAgICAgICAgIGZpbGVuYW1lID0gIm5wc2NyaXB0IjsKIAogICAgIFdlYkNvcmU6
OlN0cmluZyBzY3JpcHQgPSBXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KG5wU2NyaXB0LT5VVEY4
Q2hhcmFjdGVycywgbnBTY3JpcHQtPlVURjhMZW5ndGgpOwotICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHY4cmVzdWx0ID0gcHJveHktPmV2YWx1YXRlKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0LCBXZWJDb3JlOjpLVVJMKGZpbGVuYW1lKSksIDApOworICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHY4cmVzdWx0ID0gcHJveHktPmV2YWx1YXRlKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNv
ZGUoc2NyaXB0LCBXZWJDb3JlOjpLVVJMKFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgZmlsZW5h
bWUpKSwgMCk7CiAKICAgICBpZiAodjhyZXN1bHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwCShyZXZpc2lvbiA0Nzg5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU0LDcgKzU1NCw3
IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEZyYW1lKiBjYWxsaW4KIAogICAgIGlmIChw
cm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IFNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlw
dChuZXdGcmFtZSkpIHsKICAgICAgICAgS1VSTCBjb21wbGV0ZWRVcmwgPQotICAgICAgICAgICAg
dXJsLmlzRW1wdHkoKSA/IEtVUkwoIiIpIDogY29tcGxldGVVUkwodXJsKTsKKyAgICAgICAgICAg
IHVybC5pc0VtcHR5KCkgPyBLVVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwo
dXJsKTsKICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
OwogCiAgICAgICAgIGlmIChjcmVhdGVkKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5jcHAJKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmIEVOQUJMRShTVkcpCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTVkdDdXJzb3JJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIEtVUkwga3VybCh1cmwpOworICAgIEtVUkwg
a3VybChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CiAgICAgcmV0dXJuIGt1cmwuaGFzRnJhZ21lbnRJ
ZGVudGlmaWVyKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiA0Nzg5
NikKKysrIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw3ICs2Myw3IEBAIFN0eWxlQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFsdWU6OmNhY2hlZEkKICAg
ICAgICAgICAgIGNhY2hlZEltYWdlID0gbG9hZGVyLT5yZXF1ZXN0SW1hZ2UodXJsKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGZpbmQgYSB3YXkgdG8gbWFr
ZSB0aGVzZSBpbWFnZXMgc2l0IGluIHRoZWlyIG93biBtZW1vcnkgcGFydGl0aW9uLCBzaW5jZSB0
aGV5IGFyZSB1c2VyIGFnZW50IGltYWdlcy4KLSAgICAgICAgICAgIGNhY2hlZEltYWdlID0gc3Rh
dGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihjYWNoZSgpLT5yZXF1ZXN0UmVzb3VyY2UoMCwgQ2FjaGVk
UmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIEtVUkwodXJsKSwgU3RyaW5nKCkpKTsKKyAgICAgICAg
ICAgIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihjYWNoZSgpLT5yZXF1
ZXN0UmVzb3VyY2UoMCwgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpLCBTdHJpbmcoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNh
Y2hlZEltYWdlKSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gNDc4OTYpCisr
KyBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcg
KzEwMCw3IEBAIHZvaWQgQ1NTSW1wb3J0UnVsZTo6aW5zZXJ0ZWRJbnRvUGFyZW50KCkKICAgICBT
dHJpbmcgYWJzSHJlZiA9IG1fc3RySHJlZjsKICAgICBpZiAoIXBhcmVudFNoZWV0LT5ocmVmKCku
aXNOdWxsKCkpCiAgICAgICAgIC8vIHVzZSBwYXJlbnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRoZSBi
YXNlIFVSTAotICAgICAgICBhYnNIcmVmID0gS1VSTChLVVJMKHBhcmVudFNoZWV0LT5ocmVmKCkp
LCBtX3N0ckhyZWYpLnN0cmluZygpOworICAgICAgICBhYnNIcmVmID0gS1VSTChLVVJMKFBhcnNl
ZFVSTFN0cmluZywgcGFyZW50U2hlZXQtPmhyZWYoKSksIG1fc3RySHJlZikuc3RyaW5nKCk7CiAK
ICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5j
b3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUg
c2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgpJbmRleDogV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuY3BwCShyZXZpc2lvbiA0Nzg5
NikKKysrIFdlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgS1VSTCBTdHlsZUJhc2U6OmJhc2VVUkwoKSBjb25zdAogICAgIGlmICghc2hlZXQp
CiAgICAgICAgIHJldHVybiBLVVJMKCk7CiAgICAgaWYgKCFzaGVldC0+aHJlZigpLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gS1VSTChzaGVldC0+aHJlZigpKTsKKyAgICAgICAgcmV0dXJuIEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCBzaGVldC0+aHJlZigpKTsKICAgICBpZiAoc2hlZXQtPnBhcmVu
dCgpKSAKICAgICAgICAgcmV0dXJuIHNoZWV0LT5wYXJlbnQoKS0+YmFzZVVSTCgpOwogICAgIGlm
ICghc2hlZXQtPm93bmVyTm9kZSgpKSAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ3ODk2KQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQ0LDcgKzQx
NDQsNyBAQCB2b2lkIERvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKICAgICBpZiAoIW1f
ZnJhbWUpIHsKICAgICAgICAgLy8gTm8gc291cmNlIGZvciBhIHNlY3VyaXR5IGNvbnRleHQuCiAg
ICAgICAgIC8vIFRoaXMgY2FuIG9jY3VyIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVh
dGVEb2N1bWVudCgpLgotICAgICAgICBtX2Nvb2tpZVVSTCA9IEtVUkwoIiIpOworICAgICAgICBt
X2Nvb2tpZVVSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIik7CiAgICAgICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVF
bXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0
Nzg5NikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODIs
NyArNjgyLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaQogCiBL
VVJMIEVsZW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogewotICAgIEtVUkwgYmFzZShnZXRBdHRyaWJ1
dGUoYmFzZUF0dHIpKTsKKyAgICBLVVJMIGJhc2UoUGFyc2VkVVJMU3RyaW5nLCBnZXRBdHRyaWJ1
dGUoYmFzZUF0dHIpKTsKICAgICBpZiAoIWJhc2UucHJvdG9jb2woKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBiYXNlOwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNDc4OTYpCisr
KyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ1LDcgKzY0
NSw3IEBAIHN0YXRpYyB2b2lkIGNvbXBsZXRlVVJMcyhOb2RlKiBub2RlLCBjb24KIHsKICAgICBW
ZWN0b3I8QXR0cmlidXRlQ2hhbmdlPiBjaGFuZ2VzOwogCi0gICAgS1VSTCBwYXJzZWRCYXNlVVJM
KGJhc2VVUkwpOworICAgIEtVUkwgcGFyc2VkQmFzZVVSTChQYXJzZWRVUkxTdHJpbmcsIGJhc2VV
UkwpOwogCiAgICAgTm9kZSogZW5kID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAg
IGZvciAoTm9kZSogbiA9IG5vZGU7IG4gIT0gZW5kOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7CkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHJldmlzaW9uIDQ3ODk2KQorKysgV2Vi
Q29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDEyICsx
NzIsMTIgQEAgZG91YmxlIEhpc3RvcnlJdGVtOjpsYXN0VmlzaXRlZFRpbWUoKSBjbwogCiBLVVJM
IEhpc3RvcnlJdGVtOjp1cmwoKSBjb25zdAogewotICAgIHJldHVybiBLVVJMKG1fdXJsU3RyaW5n
KTsKKyAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fdXJsU3RyaW5nKTsKIH0KIAog
S1VSTCBIaXN0b3J5SXRlbTo6b3JpZ2luYWxVUkwoKSBjb25zdAogewotICAgIHJldHVybiBLVVJM
KG1fb3JpZ2luYWxVUkxTdHJpbmcpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywg
bV9vcmlnaW5hbFVSTFN0cmluZyk7CiB9CiAKIGNvbnN0IFN0cmluZyYgSGlzdG9yeUl0ZW06OnJl
ZmVycmVyKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA0Nzg5NikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjYsNyArODI2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyYwogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWlu
UmVzb3VyY2VMb2FkZXIobG9hZGVyLCBLVVJMKGNhY2hlZFJlc291cmNlLT51cmwoKSkpOworICAg
IGJvb2wgaXNNYWluUmVzb3VyY2UgPSBpc01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBjYWNoZWRSZXNvdXJjZS0+dXJsKCkpKTsKICAgICBlbnN1cmVSZXNv
dXJjZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQoKTsKICAgICBpZiAoIWlzTWFpblJlc291cmNlICYm
ICFtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA0Nzg5NikKKysrIFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiBJbnNwZWN0b3JSCiAK
ICAgICByZXNvdXJjZS0+bV9maW5pc2hlZCA9IHRydWU7CiAKLSAgICByZXNvdXJjZS0+bV9yZXF1
ZXN0VVJMID0gS1VSTChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpOworICAgIHJlc291cmNlLT5tX3Jl
cXVlc3RVUkwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgY2FjaGVkUmVzb3VyY2UtPnVybCgpKTsK
ICAgICByZXNvdXJjZS0+dXBkYXRlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkp
OwogCiAgICAgcmVzb3VyY2UtPm1fbGVuZ3RoID0gY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXpl
KCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiA0Nzg5NikKKysrIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgQ2FjaGU6OnJl
dmFsaWRhdGVSZXNvdXJjZShDYWNoZWRSZXMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
b25zdCBTdHJpbmcmIHVybCA9IHJlc291cmNlLT51cmwoKTsKLSAgICBDYWNoZWRSZXNvdXJjZSog
bmV3UmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS0+dHlwZSgpLCBLVVJMKHVybCks
IHJlc291cmNlLT5lbmNvZGluZygpKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogbmV3UmVzb3VyY2Ug
PSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS0+dHlwZSgpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsKSwgcmVzb3VyY2UtPmVuY29kaW5nKCkpOwogICAgIG5ld1Jlc291cmNlLT5zZXRSZXNvdXJj
ZVRvUmV2YWxpZGF0ZShyZXNvdXJjZSk7CiAgICAgZXZpY3QocmVzb3VyY2UpOwogICAgIG1fcmVz
b3VyY2VzLnNldCh1cmwsIG5ld1Jlc291cmNlKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkocmV2
aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIERvY0xvYWRlcjo6cmVxdWVz
dFJlc291cgogICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAvLyBDaGVjayBmaW5hbCBVUkwg
b2YgcmVzb3VyY2UgdG8gY2F0Y2ggcmVkaXJlY3RzLgogICAgICAgICAvLyBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2Mz4uCi0gICAgICAgIGlmICghY2Fu
UmVxdWVzdCh0eXBlLCBLVVJMKHJlc291cmNlLT51cmwoKSkpKQorICAgICAgICBpZiAoIWNhblJl
cXVlc3QodHlwZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSkpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5zZXQocmVz
b3VyY2UtPnVybCgpLCByZXNvdXJjZSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CShyZXZpc2lvbiA0Nzg5NikKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6Omdl
dFN1YnJlc291cmNlcyhWZWMKICAgICBjb25zdCBEb2NMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3Vy
Y2VzKCk7CiAgICAgRG9jTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2NMb2FkZXI6OkRvY3VtZW50
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJyZXNv
dXJjZSA9IHRoaXMtPnN1YnJlc291cmNlKEtVUkwoaXQtPnNlY29uZC0+dXJsKCkpKTsKKyAgICAg
ICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2UgPSB0aGlzLT5zdWJyZXNvdXJj
ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJsKCkpKTsKICAgICAgICAgaWYg
KHN1YnJlc291cmNlKQogICAgICAgICAgICAgc3VicmVzb3VyY2VzLmFwcGVuZChzdWJyZXNvdXJj
ZS5yZWxlYXNlKCkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9u
IDQ3ODk2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6aW5pdCgpCiAgICAgLy8gdGhp
cyBzb21ld2hhdCBvZGQgc2V0IG9mIHN0ZXBzIGlzIG5lZWRlZCB0byBnaXZlIHRoZSBmcmFtZSBh
biBpbml0aWFsIGVtcHR5IGRvY3VtZW50CiAgICAgbV9pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlE
b2N1bWVudCA9IGZhbHNlOwogICAgIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9IHRy
dWU7Ci0gICAgc2V0UG9saWN5RG9jdW1lbnRMb2FkZXIobV9jbGllbnQtPmNyZWF0ZURvY3VtZW50
TG9hZGVyKFJlc291cmNlUmVxdWVzdChLVVJMKCIiKSksIFN1YnN0aXR1dGVEYXRhKCkpLmdldCgp
KTsKKyAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlcihtX2NsaWVudC0+Y3JlYXRlRG9jdW1lbnRM
b2FkZXIoUmVzb3VyY2VSZXF1ZXN0KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikpLCBTdWJzdGl0
dXRlRGF0YSgpKS5nZXQoKSk7CiAgICAgc2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3Bv
bGljeURvY3VtZW50TG9hZGVyLmdldCgpKTsKICAgICBzZXRTdGF0ZShGcmFtZVN0YXRlUHJvdmlz
aW9uYWwpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+c2V0UmVzcG9uc2UoUmVz
b3VyY2VSZXNwb25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkp
KTsKQEAgLTY1OCw3ICs2NTgsNyBAQCBLVVJMIEZyYW1lTG9hZGVyOjppY29uVVJMKCkKIAogICAg
IC8vIElmIHdlIGhhdmUgYW4gaWNvblVSTCBmcm9tIGEgTGluayBlbGVtZW50LCByZXR1cm4gdGhh
dAogICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIEtVUkwobV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNvblVSTCgpKTsKKyAgICAg
ICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5pY29u
VVJMKCkpOwogCiAgICAgLy8gRG9uJ3QgcmV0dXJuIGEgZmF2aWNvbiBpY29uVVJMIHVubGVzcyB3
ZSdyZSBodHRwIG9yIGh0dHBzCiAgICAgaWYgKCFtX1VSTC5wcm90b2NvbEluSFRUUEZhbWlseSgp
KQpAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2NoZWR1bGVMb2NhdGlv
bkNoYW5nZQogCiAgICAgLy8gSWYgdGhlIFVSTCB3ZSdyZSBnb2luZyB0byBuYXZpZ2F0ZSB0byBp
cyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBvbmUsIGV4Y2VwdCBmb3IgdGhlCiAgICAgLy8gZnJh
Z21lbnQgcGFydCwgd2UgZG9uJ3QgbmVlZCB0byBzY2hlZHVsZSB0aGUgbG9jYXRpb24gY2hhbmdl
LgotICAgIEtVUkwgcGFyc2VkVVJMKHVybCk7CisgICAgS1VSTCBwYXJzZWRVUkwoUGFyc2VkVVJM
U3RyaW5nLCB1cmwpOwogICAgIGlmIChwYXJzZWRVUkwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkg
JiYgZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihtX1VSTCwgcGFyc2VkVVJMKSkgewog
ICAgICAgICBjaGFuZ2VMb2NhdGlvbihjb21wbGV0ZVVSTCh1cmwpLCByZWZlcnJlciwgbG9ja0hp
c3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTQ2OSw3ICsxNDY5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVkaXJlY3Rpb25U
aW1lckZpcmVkKAogICAgIHN3aXRjaCAocmVkaXJlY3Rpb24tPnR5cGUpIHsKICAgICAgICAgY2Fz
ZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CiAgICAgICAgIGNhc2UgU2NoZWR1
bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAgICAgICAgY2hhbmdlTG9jYXRp
b24oS1VSTChyZWRpcmVjdGlvbi0+dXJsKSwgcmVkaXJlY3Rpb24tPnJlZmVycmVyLAorICAgICAg
ICAgICAgY2hhbmdlTG9jYXRpb24oS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlZGlyZWN0aW9uLT51
cmwpLCByZWRpcmVjdGlvbi0+cmVmZXJyZXIsCiAgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24t
PmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwgcmVkaXJlY3Rp
b24tPndhc1VzZXJHZXN0dXJlLCByZWRpcmVjdGlvbi0+d2FzUmVmcmVzaCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZp
Z2F0aW9uOgpAQCAtMTUxNSw3ICsxNTE1LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVSTElu
dG9DaGlsZEZyYW1lKAogICAgICAgICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBVUkwgdG8gZW5z
dXJlIHdlIGdldCBhbGwgdGhlIHNpZGUtZWZmZWN0cywgc3VjaCBhcwogICAgICAgICAgICAgLy8g
b25Mb2FkIGhhbmRsZXJzLCBvZiBhbnkgcmVkaXJlY3RzIHRoYXQgaGFwcGVuZWQuIEFuIGV4YW1w
bGUgb2Ygd2hlcmUKICAgICAgICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIGlzIFJhZGFyIDMyMTM1
NTYuCi0gICAgICAgICAgICB3b3JraW5nVVJMID0gS1VSTChjaGlsZEl0ZW0tPm9yaWdpbmFsVVJM
U3RyaW5nKCkpOworICAgICAgICAgICAgd29ya2luZ1VSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5n
LCBjaGlsZEl0ZW0tPm9yaWdpbmFsVVJMU3RyaW5nKCkpOwogICAgICAgICAgICAgY2hpbGRMb2Fk
VHlwZSA9IGxvYWRUeXBlOwogICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPm1fcHJv
dmlzaW9uYWxIaXN0b3J5SXRlbSA9IGNoaWxkSXRlbTsKICAgICAgICAgfQpAQCAtMjEwMyw3ICsy
MTAzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RhcnRSZWRpcmVjdGlvblRpbWVyKAogICAgIHN3
aXRjaCAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSkgewogICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKICAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246Ci0gICAgICAgICAgICBjbGllbnRSZWRpcmVjdGVkKEtV
UkwobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dXJsKSwKKyAgICAgICAgICAgIGNsaWVudFJlZGly
ZWN0ZWQoS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnVybCks
CiAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+ZGVsYXksCiAgICAgICAg
ICAgICAgICAgY3VycmVudFRpbWUoKSArIG1fcmVkaXJlY3Rpb25UaW1lci5uZXh0RmlyZUludGVy
dmFsKCksCiAgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+bG9ja0JhY2tG
b3J3YXJkTGlzdCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29y
ZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZG9jTG9hZGVyLCAKICAgICBSZXF1ZXN0KiByZXF1
ZXN0ID0gbmV3IFJlcXVlc3QoZG9jTG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNraXBD
YW5Mb2FkQ2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogCiAgICAgUmVmUHRyPEhv
c3Q+IGhvc3Q7Ci0gICAgS1VSTCB1cmwocmVzb3VyY2UtPnVybCgpKTsKKyAgICBLVVJMIHVybChQ
YXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSk7CiAgICAgaWYgKHVybC5wcm90b2NvbElu
SFRUUEZhbWlseSgpKSB7CiAgICAgICAgIEF0b21pY1N0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0
KCk7CiAgICAgICAgIGhvc3QgPSBtX2hvc3RzLmdldChob3N0TmFtZS5pbXBsKCkpOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9u
IDQ3ODk2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNh
Y2hlOjpyZW1vdmVSZXNvdXJjCiAgICAgCiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIEFwcGxp
Y2F0aW9uQ2FjaGU6OnJlc291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIEFT
U0VSVCghS1VSTCh1cmwpLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQoIUtV
UkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsKICAgICBy
ZXR1cm4gbV9yZXNvdXJjZXMuZ2V0KHVybCkuZ2V0KCk7CiB9ICAgIAogCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlz
aW9uIDQ3ODk2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdy
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUyLDcgKzg1Miw3IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmcKIAogICAgIEFTU0VSVCghbV9jdXJyZW50SGFuZGxl
KTsKICAgICAKLSAgICBtX2N1cnJlbnRIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZUhhbmRsZShLVVJM
KGl0LT5maXJzdCksIG1fbmV3ZXN0Q2FjaGUgPyBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVS
TChpdC0+Zmlyc3QpIDogMCk7CisgICAgbV9jdXJyZW50SGFuZGxlID0gY3JlYXRlUmVzb3VyY2VI
YW5kbGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5maXJzdCksIG1fbmV3ZXN0Q2FjaGUgPyBt
X25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTChpdC0+Zmlyc3QpIDogMCk7CiB9CiAKIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVsYXllZE1haW5SZXNvdXJjZXMoKQpAQCAt
ODc5LDcgKzg3OSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkZWxpdmVyRGVsYXkK
IHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjphZGRFbnRyeShjb25zdCBTdHJpbmcmIHVybCwg
dW5zaWduZWQgdHlwZSkKIHsKICAgICBBU1NFUlQobV9jYWNoZUJlaW5nVXBkYXRlZCk7Ci0gICAg
QVNTRVJUKCFLVVJMKHVybCkuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpOworICAgIEFTU0VSVCgh
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpOwogICAg
IAogICAgIC8vIERvbid0IGFkZCB0aGUgVVJMIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBtYXN0ZXIg
cmVzb3VyY2UgaW4gdGhlIGNhY2hlCiAgICAgLy8gKGkuZS4sIHRoZSBtYWluIHJlc291cmNlIGZp
bmlzaGVkIGxvYWRpbmcgYmVmb3JlIHRoZSBtYW5pZmVzdCkuCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lv
biA0Nzg5NikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKICAgICAKICAgICBpbnQgcmVzdWx0OwogICAgIHdo
aWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAg
ICAgIEtVUkwgbWFuaWZlc3RVUkwgPSBLVVJMKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKTsK
KyAgICAgICAgS1VSTCBtYW5pZmVzdFVSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBzdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCgxKSk7CiAKICAgICAgICAgaWYgKG1fY2FjaGVzSW5NZW1vcnkuY29u
dGFpbnMobWFuaWZlc3RVUkwpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yODQsNyArMjg0
LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAgIAogICAg
IGludCByZXN1bHQ7CiAgICAgd2hpbGUgKChyZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpKSA9PSBT
UUxSZXN1bHRSb3cpIHsKLSAgICAgICAgS1VSTCBtYW5pZmVzdFVSTCA9IEtVUkwoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworICAgICAgICBLVVJMIG1hbmlmZXN0VVJMID0gS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKTsKIAogICAgICAgICBpZiAo
bV9jYWNoZXNJbk1lbW9yeS5jb250YWlucyhtYW5pZmVzdFVSTCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTgzNSw3ICs4MzUsNyBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFw
cGxpY2F0aW9uCiAgICAgCiAgICAgaW50IHJlc3VsdDsKICAgICB3aGlsZSAoKHJlc3VsdCA9IGNh
Y2hlU3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIEtVUkwgdXJs
KGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgICBLVVJMIHVybChQYXJz
ZWRVUkxTdHJpbmcsIGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwogICAgICAgICAK
ICAgICAgICAgdW5zaWduZWQgdHlwZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWNoZVN0YXRl
bWVudC5nZXRDb2x1bW5JbnQ2NCgxKSk7CiAKQEAgLTg3MSw3ICs4NzEsNyBAQCBQYXNzUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uCiAgICAgCiAgICAgVmVjdG9yPEtVUkw+IHdo
aXRlbGlzdDsKICAgICB3aGlsZSAoKHJlc3VsdCA9IHdoaXRlbGlzdFN0YXRlbWVudC5zdGVwKCkp
ID09IFNRTFJlc3VsdFJvdykgCi0gICAgICAgIHdoaXRlbGlzdC5hcHBlbmQod2hpdGVsaXN0U3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpOworICAgICAgICB3aGl0ZWxpc3QuYXBwZW5kKEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCB3aGl0ZWxpc3RTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOwog
CiAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQogICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBsb2FkIGNhY2hlIG9ubGluZSB3aGl0ZWxpc3QsIGVycm9yIFwiJXNcIiIsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwpAQCAtOTAxLDcgKzkwMSw3IEBAIFBhc3NSZWZQdHI8QXBw
bGljYXRpb25DYWNoZT4gQXBwbGljYXRpb24KICAgICAKICAgICBGYWxsYmFja1VSTFZlY3RvciBm
YWxsYmFja1VSTHM7CiAgICAgd2hpbGUgKChyZXN1bHQgPSBmYWxsYmFja1N0YXRlbWVudC5zdGVw
KCkpID09IFNRTFJlc3VsdFJvdykgCi0gICAgICAgIGZhbGxiYWNrVVJMcy5hcHBlbmQobWFrZV9w
YWlyKGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQoMCksIGZhbGxiYWNrU3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpKTsKKyAgICAgICAgZmFsbGJhY2tVUkxzLmFwcGVuZChtYWtlX3Bh
aXIoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGZhbGxiYWNrU3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgZmFsbGJhY2tTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4
dCgxKSkpKTsKIAogICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKICAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgbG9hZCBmYWxsYmFjayBVUkxzLCBlcnJvciBcIiVzXCIiLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTEwMTYsNyArMTAxNiw3IEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om1hbmlmZXN0VVIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKLSAgICAgICAgdXJs
cy0+YXBwZW5kKHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSk7CisgICAgICAgIHVybHMtPmFw
cGVuZChLVVJMKFBhcnNlZFVSTFN0cmluZywgc2VsZWN0VVJMcy5nZXRDb2x1bW5UZXh0KDApKSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL2xv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzMsNyArMjMzLDcgQEAgUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IExlZ2FjeVdlYkFyYwog
ICAgICAgICByZXNwb25zZSA9IGNyZWF0ZVJlc291cmNlUmVzcG9uc2VGcm9tUHJvcGVydHlMaXN0
RGF0YShyZXNvdXJjZVJlc3BvbnNlRGF0YSwgcmVzb3VyY2VSZXNwb25zZVZlcnNpb24pOwogICAg
IH0KICAgICAKLSAgICByZXR1cm4gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVy
OjpjcmVhdGUoQ0ZEYXRhR2V0Qnl0ZVB0cihyZXNvdXJjZURhdGEpLCBDRkRhdGFHZXRMZW5ndGgo
cmVzb3VyY2VEYXRhKSksIEtVUkwodXJsKSwgbWltZVR5cGUsIHRleHRFbmNvZGluZywgZnJhbWVO
YW1lLCByZXNwb25zZSk7CisgICAgcmV0dXJuIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKENGRGF0YUdldEJ5dGVQdHIocmVzb3VyY2VEYXRhKSwgQ0ZEYXRhR2V0
TGVuZ3RoKHJlc291cmNlRGF0YSkpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZywgZnJhbWVOYW1lLCByZXNwb25zZSk7CiB9CiAKIFBhc3NSZWZQdHI8
TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKCkKQEAgLTQ4OSw3ICs0
ODksNyBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyCiAgICAgLy8g
aXQncyBwb3NzaWJsZSB0byBoYXZlIGEgcmVzcG9uc2Ugd2l0aG91dCBhIFVSTCBoZXJlCiAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ5MzU+CiAgICAgaWYgKHJlc3BvbnNlVVJMLmlzTnVsbCgp
KQotICAgICAgICByZXNwb25zZVVSTCA9IEtVUkwoIiIpOworICAgICAgICByZXNwb25zZVVSTCA9
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIik7CiAgICAgICAgIAogICAgIFBhc3NSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiBtYWluUmVzb3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZSh1dGY4
QnVmZmVyKG1hcmt1cFN0cmluZyksIHJlc3BvbnNlVVJMLCByZXNwb25zZS5taW1lVHlwZSgpLCAi
VVRGLTgiLCBmcmFtZS0+dHJlZSgpLT5uYW1lKCkpOwogCkBAIC01NDgsNyArNTQ4LDcgQEAgUGFz
c1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcgogICAgICAgICBjb25zdCBTdHJp
bmcmIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS0+aWNvblVSTEZvclBhZ2VVUkwocmVzcG9uc2VV
UkwpOwogICAgICAgICBpZiAoIWljb25VUkwuaXNFbXB0eSgpICYmIGljb25EYXRhYmFzZSgpLT5p
Y29uRGF0YUtub3duRm9ySWNvblVSTChpY29uVVJMKSkgewogICAgICAgICAgICAgaWYgKEltYWdl
KiBpY29uSW1hZ2UgPSBpY29uRGF0YWJhc2UoKS0+aWNvbkZvclBhZ2VVUkwocmVzcG9uc2VVUkws
IEludFNpemUoMTYsIDE2KSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPEFyY2hpdmVS
ZXNvdXJjZT4gcmVzb3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShpY29uSW1hZ2UtPmRh
dGEoKSwgS1VSTChpY29uVVJMKSwgImltYWdlL3gtaWNvbiIsICIiLCAiIikpCisgICAgICAgICAg
ICAgICAgaWYgKFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJjaGl2ZVJlc291
cmNlOjpjcmVhdGUoaWNvbkltYWdlLT5kYXRhKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpY29u
VVJMKSwgImltYWdlL3gtaWNvbiIsICIiLCAiIikpCiAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlcy5hcHBlbmQocmVzb3VyY2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpJbmRleDogV2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DZW50ZXIuaAko
cmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2Vu
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAKICAgICAgICAgTm90aWZpY2F0aW9uKiBjcmVhdGVIVE1MTm90aWZpY2F0aW9u
KGNvbnN0IFN0cmluZyYgVVJJLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjo6Y3JlYXRlKEtVUkwoVVJJKSwgY29udGV4dCgpLCBl
YywgcHJlc2VudGVyKCkpOworICAgICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjo6Y3JlYXRl
KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBVUkkpLCBjb250ZXh0KCksIGVjLCBwcmVzZW50ZXIoKSk7
CiAgICAgICAgIH0KIAogICAgICAgICBOb3RpZmljYXRpb24qIGNyZWF0ZU5vdGlmaWNhdGlvbihj
b25zdCBTdHJpbmcmIGljb25VUkksIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYg
Ym9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDQ3ODk2
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDEz
ICszMDIsMTMgQEAgdm9pZCBLVVJMOjppbnZhbGlkYXRlKCkKICAgICBtX2ZyYWdtZW50RW5kID0g
MDsKIH0KIAotS1VSTDo6S1VSTChjb25zdCBjaGFyKiB1cmwpCitLVVJMOjpLVVJMKFBhcnNlZFVS
TFN0cmluZ1RhZywgY29uc3QgY2hhciogdXJsKQogewogICAgIHBhcnNlKHVybCwgMCk7CiAgICAg
QVNTRVJUKHVybCA9PSBtX3N0cmluZyk7CiB9CiAKLUtVUkw6OktVUkwoY29uc3QgU3RyaW5nJiB1
cmwpCitLVVJMOjpLVVJMKFBhcnNlZFVSTFN0cmluZ1RhZywgY29uc3QgU3RyaW5nJiB1cmwpCiB7
CiAgICAgcGFyc2UodXJsKTsKICAgICBBU1NFUlQodXJsID09IG1fc3RyaW5nKTsKQEAgLTE2NDEs
NyArMTY0MSw3IEBAIFN0cmluZyBtaW1lVHlwZUZyb21EYXRhVVJMKGNvbnN0IFN0cmluZyYKIAog
Y29uc3QgS1VSTCYgYmxhbmtVUkwoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoS1VSTCwg
c3RhdGljQmxhbmtVUkwsICgiYWJvdXQ6YmxhbmsiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChLVVJMLCBzdGF0aWNCbGFua1VSTCwgKFBhcnNlZFVSTFN0cmluZywgImFib3V0OmJsYW5rIikp
OwogICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9u
IDQ3ODk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDE1ICs1NSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiBz
dHJ1Y3QgS1VSTEhhc2g7CiAKK2VudW0gUGFyc2VkVVJMU3RyaW5nVGFnIHsgUGFyc2VkVVJMU3Ry
aW5nIH07CisKIGNsYXNzIEtVUkwgewogcHVibGljOgogICAgIC8vIEdlbmVyYXRlcyBhIFVSTCB3
aGljaCBjb250YWlucyBhIG51bGwgc3RyaW5nLgogICAgIEtVUkwoKSB7IGludmFsaWRhdGUoKTsg
fQogCi0gICAgLy8gVGhlIGFyZ3VtZW50IGlzIGFuIGFic29sdXRlIFVSTCBzdHJpbmcuIFRoZSBz
dHJpbmcgaXMgYXNzdW1lZCB0byBiZQotICAgIC8vIGFuIGFscmVhZHkgZW5jb2RlZCAoQVNDSUkt
b25seSkgdmFsaWQgYWJzb2x1dGUgVVJMLgotICAgIGV4cGxpY2l0IEtVUkwoY29uc3QgY2hhciop
OwotICAgIGV4cGxpY2l0IEtVUkwoY29uc3QgU3RyaW5nJik7CisgICAgLy8gVGhlIGFyZ3VtZW50
IGlzIGFuIGFic29sdXRlIFVSTCBzdHJpbmcuIFRoZSBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBv
dXRwdXQgb2YgS1VSTDo6c3RyaW5nKCkKKyAgICAvLyBjYWxsZWQgb24gYSB2YWxpZCBLVVJMIG9i
amVjdCwgb3IgaW5kaXNjZXJuaWJsZSBmcm9tIHN1Y2guCisgICAgS1VSTChQYXJzZWRVUkxTdHJp
bmdUYWcsIGNvbnN0IGNoYXIqKTsKKyAgICBLVVJMKFBhcnNlZFVSTFN0cmluZ1RhZywgY29uc3Qg
U3RyaW5nJik7CiAKICAgICAvLyBSZXNvbHZlcyB0aGUgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGdp
dmVuIGJhc2UgVVJMLiBJZiBwcm92aWRlZCwgdGhlCiAgICAgLy8gVGV4dEVuY29kaW5nIGlzIHVz
ZWQgdG8gZW5jb2RlIG5vbi1BU0NJSSBjaGFyYWNlcnMuIFRoZSBiYXNlIFVSTCBjYW4gYmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTEhhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0tVUkxIYXNoLmgJKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9L
VVJMSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpLVVJMPiA6IEdl
bmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OktVUkw+IHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpLVVJMJiBzbG90KSB7IG5ldyAoJnNsb3QpIFdlYkNvcmU6
OktVUkwoV2ViQ29yZTo6U3RyaW5nKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpOyB9CisgICAgICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpLVVJMJiBzbG90KSB7
IG5ldyAoJnNsb3QpIFdlYkNvcmU6OktVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBXZWJD
b3JlOjpTdHJpbmcoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICAgICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViQ29yZTo6S1VSTCYgc2xvdCkgeyByZXR1cm4gc2xv
dC5zdHJpbmcoKS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAgICAgfTsKIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDQ3ODk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIENsaXBib2Fy
ZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0CiAgICAgQ2xpcGJvYXJkRGF0YVR5cGUgd2luVHlw
ZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7CiAKICAgICBpZiAod2luVHlwZSA9
PSBDbGlwYm9hcmREYXRhVHlwZVVSTCkgewotICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IEtV
UkwoZGF0YSk7CisgICAgICAgIG1fZGF0YU9iamVjdC0+dXJsID0gS1VSTChQYXJzZWRVUkxTdHJp
bmcsIGRhdGEpOwogICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgpOwog
ICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBs
YXllclByaXZhdGUoCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllKGNv
bnN0IFN0cmluZyYgdXJsKQogewotICAgIE5TVVJMICpjb2NvYVVSTCA9IEtVUkwodXJsKTsKKyAg
ICBOU1VSTCAqY29jb2FVUkwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKICAgICBOU0Rp
Y3Rpb25hcnkgKm1vdmllQXR0cmlidXRlcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhP
YmplY3RzQW5kS2V5czoKICAgICAgICAgICAgICAgICAgICAgICAgY29jb2FVUkwsIFFUTW92aWVV
UkxBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDptX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKV0sIFFUTW92aWVSYXRlQ2hhbmdlc1ByZXNl
cnZlUGl0Y2hBdHRyaWJ1dGUsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVz
b3VyY2VFcnJvckNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VFcnJvckNGLmNwcAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VFcnJvckNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5
LDcgKzEyOSw3IEBAIFJlc291cmNlRXJyb3I6Om9wZXJhdG9yIENGRXJyb3JSZWYoKSBjb24KICAg
ICAgICAgaWYgKCFtX2ZhaWxpbmdVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZhaWxpbmdVUkxTdHJpbmcoQWRvcHRDRiwgbV9mYWlsaW5nVVJMLmNy
ZWF0ZUNGU3RyaW5nKCkpOwogICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodXNlcklu
Zm8uZ2V0KCksIGZhaWxpbmdVUkxTdHJpbmdLZXksIGZhaWxpbmdVUkxTdHJpbmcuZ2V0KCkpOwot
ICAgICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwoQWRvcHRDRiwgS1VSTChtX2ZhaWxp
bmdVUkwpLmNyZWF0ZUNGVVJMKCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1
cmwoQWRvcHRDRiwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fZmFpbGluZ1VSTCkuY3JlYXRlQ0ZV
UkwoKSk7CiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSh1c2VySW5mby5nZXQoKSwg
ZmFpbGluZ1VSTEtleSwgdXJsLmdldCgpKTsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA0Nzg5NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0
IFJlc291cmNlUmVxdWVzdCA6IFJlc291cmNlUmVxdWVzdEJhc2UgewogCiAgICAgICAgIFJlc291
cmNlUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkgCi0gICAgICAgICAgICA6IFJlc291cmNlUmVx
dWVzdEJhc2UoS1VSTCh1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAgICAg
OiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQcm90
b2NvbENhY2hlUG9saWN5KQogICAgICAgICB7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAkocmV2
aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3Vy
Y2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB9OwogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBTdHJp
bmcmIHVybCkgCi0gICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCh1cmwpLCBV
c2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQogICAg
ICAgICAgICAgLCBtX3JlcXVlc3RvcklEKDApCiAgICAgICAgICAgICAsIG1fcmVxdWVzdG9yUHJv
Y2Vzc0lEKDApCiAgICAgICAgICAgICAsIG1fYXBwQ2FjaGVDb250ZXh0SUQoMCkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmNwcAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyAr
MTIxLDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UgKAogICAgICBj
b25zdCBjaGFyKiBoZHI7CiAgICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhh
bmRsZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJmhkcik7CiAgICAgIEFTU0VSVChDVVJMRV9P
SyA9PSBlcnIpOwotICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChLVVJMKGhkcikpOworICAgICBk
LT5tX3Jlc3BvbnNlLnNldFVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgaGRyKSk7CiAgICAgIGlm
IChkLT5jbGllbnQoKSkKICAgICAgICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2Uo
am9iLCBkLT5tX3Jlc3BvbnNlKTsKICAgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVk
KHRydWUpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2so
Y2hhciogcHRyLCAKIAogICAgICAgICBjb25zdCBjaGFyKiBoZHI7CiAgICAgICAgIGVyciA9IGN1
cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZoZHIpOwotICAgICAg
ICBkLT5tX3Jlc3BvbnNlLnNldFVSTChLVVJMKGhkcikpOworICAgICAgICBkLT5tX3Jlc3BvbnNl
LnNldFVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgaGRyKSk7CiAKICAgICAgICAgbG9uZyBodHRw
Q29kZSA9IDA7CiAgICAgICAgIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX1JF
U1BPTlNFX0NPREUsICZodHRwQ29kZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IFJlc291cmNl
UmVxdWVzdCA6IFJlc291cmNlUmVxdWVzdEJhc2UgewogCiAgICAgICAgIFJlc291cmNlUmVxdWVz
dChjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShL
VVJMKHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2FjaGVQ
b2xpY3kpCiAgICAgICAgIHsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlRXJyb3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUVycm9yTWFjLm1tCShyZXZpc2lvbiA0Nzg5NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VFcnJvck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBSZXNvdXJjZUVycm9yOjpvcGVyYXRvciBOU0Vycm9y
KigpIGNvbnN0CiAgICAgICAgICAgICBbdXNlckluZm8uZ2V0KCkgc2V0VmFsdWU6bV9sb2NhbGl6
ZWREZXNjcmlwdGlvbiBmb3JLZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV07CiAKICAgICAg
ICAgaWYgKCFtX2ZhaWxpbmdVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOU1VSTCAqY29j
b2FVUkwgPSBLVVJMKG1fZmFpbGluZ1VSTCk7CisgICAgICAgICAgICBOU1VSTCAqY29jb2FVUkwg
PSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbV9mYWlsaW5nVVJMKTsKICAgICAgICAgICAgIFt1c2Vy
SW5mby5nZXQoKSBzZXRWYWx1ZTptX2ZhaWxpbmdVUkwgZm9yS2V5OkAiTlNFcnJvckZhaWxpbmdV
UkxTdHJpbmdLZXkiXTsKICAgICAgICAgICAgIFt1c2VySW5mby5nZXQoKSBzZXRWYWx1ZTpjb2Nv
YVVSTCBmb3JLZXk6QCJOU0Vycm9yRmFpbGluZ1VSTEtleSJdOwogICAgICAgICB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlz
aW9uIDQ3ODk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVl
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0IDogcHVibGljIFJlc291cmNlUmVxdWVzdEJhc2Ug
ewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJs
KSAKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKHVybCksIFVzZVByb3Rv
Y29sQ2FjaGVQb2xpY3kpCisgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTChQ
YXJzZWRVUkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VS
ZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291
cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA0Nzg5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IFJlc291cmNlUmVxdWVzdCA6IFJlc291cmNl
UmVxdWVzdEJhc2UgewogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBTdHJpbmcmIHVy
bCkgCi0gICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCh1cmwpLCBVc2VQcm90
b2NvbENhY2hlUG9saWN5KQorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQogICAgICAgICB7
CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3QgOiBS
ZXNvdXJjZVJlcXVlc3RCYXNlIHsKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3Ry
aW5nJiB1cmwpCi0gICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCh1cmwpLCBV
c2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQogICAg
ICAgICB7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4u
Y3BwCShyZXZpc2lvbiA0Nzg5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgU3RyaW5nIGZp
bGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0CiAgICAgfQogCiAgICAgaWYgKCFsc3RybGVuKGZzUGF0
aEJ1ZmZlcikpIHsKLSAgICAgICAgS1VSTCBrdXJsKHVybCk7CisgICAgICAgIEtVUkwga3VybChQ
YXJzZWRVUkxTdHJpbmcsIHVybCk7CiAgICAgICAgIHVzZWRVUkwgPSB0cnVlOwogICAgICAgICAv
LyBUaGUgZmlsZW5hbWUgZm9yIGFueSBjb250ZW50IGJhc2VkIGRyYWcgb3IgZmlsZSB1cmwgc2hv
dWxkIGJlIHRoZSBsYXN0IGVsZW1lbnQgb2YgCiAgICAgICAgIC8vIHRoZSBwYXRoLiAgSWYgd2Ug
Y2FuJ3QgZmluZCBpdCwgb3Igd2UncmUgY29taW5nIHVwIHdpdGggdGhlIG5hbWUgZm9yIGEgbGlu
awpAQCAtNTE1LDcgKzUxNSw3IEBAIGJvb2wgQ2xpcGJvYXJkV2luOjpzZXREYXRhKGNvbnN0IFN0
cmluZyYKICAgICBDbGlwYm9hcmREYXRhVHlwZSB3aW5UeXBlID0gY2xpcGJvYXJkVHlwZUZyb21N
SU1FVHlwZSh0eXBlKTsKIAogICAgIGlmICh3aW5UeXBlID09IENsaXBib2FyZERhdGFUeXBlVVJM
KQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6d3JpdGVVUkwobV93cml0YWJsZURhdGFPYmplY3Qu
Z2V0KCksIEtVUkwoZGF0YSksIFN0cmluZygpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjp3cml0ZVVSTChtX3dyaXRhYmxlRGF0YU9iamVjdC5nZXQoKSwgS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIGRhdGEpLCBTdHJpbmcoKSwgZmFsc2UsIHRydWUpOwogCiAgICAgaWYgKHdp
blR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0KSB7CiAgICAgICAgIFNUR01FRElVTSBtZWRp
dW0gPSB7MH07CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA0Nzg5
NikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0
YVIKICAgICAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUobV9wYWdlLmdl
dCgpLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKICAgICAgICAgZnJhbWUtPnNldFZpZXco
RnJhbWVWaWV3OjpjcmVhdGUoZnJhbWUuZ2V0KCkpKTsKICAgICAgICAgZnJhbWUtPmluaXQoKTsK
LSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1ZXN0KEtVUkwoIiIpKTsKKyAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1ZXN0KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikpOwog
ICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgICAgICBs
b2FkZXItPmxvYWQoZmFrZVJlcXVlc3QsIGZhbHNlKTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVu
dExvYWRlciBpcyBjcmVhdGVkCiAgICAgICAgIGxvYWRlci0+Y2FuY2VsQ29udGVudFBvbGljeUNo
ZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwpJbmRleDogV2ViQ29yZS94bWwvWFNM
SW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5j
cHAJKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hl
ZXQoKQogICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgp
OwogICAgIGlmICghcGFyZW50U2hlZXQtPmhyZWYoKS5pc051bGwoKSkKICAgICAgICAgLy8gdXNl
IHBhcmVudCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAgIGFic0hyZWYg
PSBLVVJMKEtVUkwocGFyZW50U2hlZXQtPmhyZWYoKSksIG1fc3RySHJlZikuc3RyaW5nKCk7Cisg
ICAgICAgIGFic0hyZWYgPSBLVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBwYXJlbnRTaGVldC0+
aHJlZigpKSwgbV9zdHJIcmVmKS5zdHJpbmcoKTsKICAgICAKICAgICAvLyBDaGVjayBmb3IgYSBj
eWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAog
ICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBi
YWlsLgpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDQ3ODk2KQorKysgV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBA
QCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAgICAgICAgIGNhc2Ug
WFNMVF9MT0FEX0RPQ1VNRU5UOiB7CiAgICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0
ciBjb250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7CiAgICAgICAgICAgICB4
bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29u
dGV4dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVybChLVVJMKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSk7
CisgICAgICAgICAgICBLVVJMIHVybChLVVJMKFBhcnNlZFVSTFN0cmluZywgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1
cmkpKTsKICAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7CiAgICAgICAgICAgICBSZXNvdXJjZUVy
cm9yIGVycm9yOwogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKSW5kZXg6
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzkwMSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMzEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODg1MgorICAgICAg
ICBSZW5hbWUgS1VSTCBzaW5nbGUgYXJndW1lbnQgY29uc3RydWN0b3IgdG8gYXZvaWQgY29uZnVz
aW9uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tOiAodG9OU1VSTCk6
IEFkYXB0IHRvIHRoZSBjaGFuZ2UuCisKIDIwMDktMDgtMjggIENocmlzIEZsZWl6YWNoICA8Y2Zs
ZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJ
bmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24gNDc4
OTYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIE5TVVJMICp0b05TVVJMKGNvbnN0IFVTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBLVVJMKHMpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywgcyk7CiB9
CiAKIHN0YXRpYyBXZWJGcmFtZSAqdG9XZWJGcmFtZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3OTAxKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOC0zMSAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
ODUyCisgICAgICAgIFJlbmFtZSBLVVJMIHNpbmdsZSBhcmd1bWVudCBjb25zdHJ1Y3RvciB0byBh
dm9pZCBjb25mdXNpb24KKworICAgICAgICAqIFdlYlVSTFJlc3BvbnNlLmNwcDogKFdlYlVSTFJl
c3BvbnNlOjpjcmVhdGVJbnN0YW5jZSk6IEFkYXB0IHRvIHRoZSBjaGFuZ2UuCisKIDIwMDktMDgt
MjAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdpdmUgV2ViS2l0
IGNsaWVudHMgYWNjZXNzIHRvIHRoZSB3aW5kb3cgZmVhdHVyZXMgc3BlY2lmaWVkIGluCkluZGV4
OiBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYlVSTFJlc3BvbnNlLmNwcAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJLaXQvd2luL1dlYlVS
TFJlc3BvbnNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDcgKzIyOCw3IEBAIFdlYlVSTFJl
c3BvbnNlKiBXZWJVUkxSZXNwb25zZTo6Y3JlYXRlSW4KIHsKICAgICBXZWJVUkxSZXNwb25zZSog
aW5zdGFuY2UgPSBuZXcgV2ViVVJMUmVzcG9uc2UoKTsKICAgICAvLyBmYWtlIGFuIGh0dHAgcmVz
cG9uc2UgLSBzbyBpdCBoYXMgdGhlIElXZWJIVFRQVVJMUmVzcG9uc2UgaW50ZXJmYWNlCi0gICAg
aW5zdGFuY2UtPm1fcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKEtVUkwoImh0dHA6Ly8iKSwg
U3RyaW5nKCksIDAsIFN0cmluZygpLCBTdHJpbmcoKSk7CisgICAgaW5zdGFuY2UtPm1fcmVzcG9u
c2UgPSBSZXNvdXJjZVJlc3BvbnNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiaHR0cDovLyIpLCBT
dHJpbmcoKSwgMCwgU3RyaW5nKCksIFN0cmluZygpKTsKICAgICBpbnN0YW5jZS0+QWRkUmVmKCk7
CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NzkwMSkKKysrIFdlYktp
dC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOC0z
MSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI4ODUyCisgICAgICAgIFJlbmFtZSBLVVJMIHNpbmdsZSBhcmd1bWVu
dCBjb25zdHJ1Y3RvciB0byBhdm9pZCBjb25mdXNpb24KKworICAgICAgICAqIFdlYkZyYW1lLmNw
cDogKHd4V2ViRnJhbWU6OlNldFBhZ2VTb3VyY2UpOiBBZGFwdCB0byB0aGUgY2hhbmdlLgorCiAy
MDA5LTA4LTI4ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFi
b3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6
IFdlYktpdC93eC9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYkZyYW1l
LmNwcAkocmV2aXNpb24gNDc4OTYpCisrKyBXZWJLaXQvd3gvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCB3eFdlYkZyYW1lOjpTZXRQYWdlU291cmNl
KGNvbnN0IHd4UwogICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50cyA9IGNoYXJCdWZmZXI7CiAK
ICAgICAgICAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVm
ZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudHMsIHN0cmxlbihjb250
ZW50cykpOwotICAgICAgICBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSBzdWJzdGl0dXRlRGF0YShz
aGFyZWRCdWZmZXIsIFdlYkNvcmU6OlN0cmluZygidGV4dC9odG1sIiksIFdlYkNvcmU6OlN0cmlu
ZygiVVRGLTgiKSwgV2ViQ29yZTo6S1VSTCgiYWJvdXQ6YmxhbmsiKSwgdXJsKTsKKyAgICAgICAg
V2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEgc3Vic3RpdHV0ZURhdGEoc2hhcmVkQnVmZmVyLCBXZWJD
b3JlOjpTdHJpbmcoInRleHQvaHRtbCIpLCBXZWJDb3JlOjpTdHJpbmcoIlVURi04IiksIFdlYkNv
cmU6OmJsYW5rVVJMKCksIHVybCk7CiAKICAgICAgICAgbV9pbXBsLT5mcmFtZS0+bG9hZGVyKCkt
PnN0b3AoKTsKICAgICAgICAgbV9pbXBsLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0KHVybCksIHN1YnN0aXR1dGVEYXRhLCBmYWxzZSk7Cg==
</data>
<flag name="review"
          id="19819"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>