<?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>136784</bug_id>
          
          <creation_ts>2014-09-12 09:52:55 -0700</creation_ts>
          <short_desc>Make all CSSSelector data members private</short_desc>
          <delta_ts>2014-09-12 12:24:23 -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>CSS</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034882</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-12 09:52:55 -0700</bug_when>
    <thetext>Make all CSSSelector data members private. Previously, some of the data members such as m_relation / m_match / m_pseudoType were public and accessed directly from outside the class. The new approach is better because:
- Those members are bit fields so by using getters, we can hide the casts inside the getters. The setters can now also check that the bitfield is big enough to actually store the enum value.
- When using those in switch() statements, the compiler now complains if we fail to test some of the enum values as the value is now an enum, and not merely an unsigned integer.
- Some of these members already has getters (e.g. relation(), pseudoType()).
- Better encapsulation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034883</commentid>
    <comment_count>1</comment_count>
      <attachid>238036</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-12 10:06:53 -0700</bug_when>
    <thetext>Created attachment 238036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034893</commentid>
    <comment_count>2</comment_count>
      <attachid>238036</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 11:24:52 -0700</bug_when>
    <thetext>Comment on attachment 238036
Patch

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

Really neat. That is something I wanted for a while but I was too lazy to fix everything :)

It is a little sad we need the public setters for the parser. I guess in the future we could refactor those out.

&gt; Source/WebCore/css/CSSSelector.cpp:87
&gt;      // FIXME: Pseudo-elements and pseudo-classes do not have the same specificity. This function
&gt;      // isn&apos;t quite correct.

Hum, we should fix that at some point.

&gt; Source/WebCore/css/CSSSelector.h:211
&gt; +            ASSERT(m_pseudoType == pseudoElementType);

I assume you are asserting in case the type become larger than the bit field?

&gt; Source/WebCore/css/CSSSelector.h:214
&gt; +        void setPagePseudoType(PagePseudoClassType pagePseudoType)

You could move this one next to its getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034897</commentid>
    <comment_count>3</comment_count>
      <attachid>238036</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-12 11:32:03 -0700</bug_when>
    <thetext>Comment on attachment 238036
Patch

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

&gt;&gt; Source/WebCore/css/CSSSelector.h:211
&gt;&gt; +            ASSERT(m_pseudoType == pseudoElementType);
&gt; 
&gt; I assume you are asserting in case the type become larger than the bit field?

Yes, I explained it in the Changelog.

&gt;&gt; Source/WebCore/css/CSSSelector.h:214
&gt;&gt; +        void setPagePseudoType(PagePseudoClassType pagePseudoType)
&gt; 
&gt; You could move this one next to its getter.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034902</commentid>
    <comment_count>4</comment_count>
      <attachid>238041</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-12 11:42:52 -0700</bug_when>
    <thetext>Created attachment 238041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034903</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-12 11:44:07 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 238036 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238036&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/css/CSSSelector.h:211
&gt; &gt;&gt; +            ASSERT(m_pseudoType == pseudoElementType);
&gt; &gt; 
&gt; &gt; I assume you are asserting in case the type become larger than the bit field?
&gt; 
&gt; Yes, I explained it in the Changelog.

You are assuming I can read properly ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034912</commentid>
    <comment_count>6</comment_count>
      <attachid>238041</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-12 12:24:19 -0700</bug_when>
    <thetext>Comment on attachment 238041
Patch

Clearing flags on attachment: 238041

Committed r173569: &lt;http://trac.webkit.org/changeset/173569&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034913</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-12 12:24:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238036</attachid>
            <date>2014-09-12 10:06:53 -0700</date>
            <delta_ts>2014-09-12 11:42:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136784-20140912100650.patch</filename>
            <type>text/plain</type>
            <size>42169</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTI4NzNiYTJhZjBkN2I2
ZWY0OWU5ZDkzYjZlZmIwMDQ3ZjMxNzU3ZS4uMmUwNDA2MTA5N2Y1ZmEyZDJlNWFlNWYzZjZhOTIw
ZTM4NTc1MGJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDE0LTA5LTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBhbGwgQ1NTU2VsZWN0
b3IgZGF0YSBtZW1iZXJzIHByaXZhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgYWxsIENTU1NlbGVjdG9yIGRhdGEgbWVtYmVycyBwcml2YXRl
LiBQcmV2aW91c2x5LCBzb21lIG9mIHRoZSBkYXRhCisgICAgICAgIG1lbWJlcnMgc3VjaCBhcyBt
X3JlbGF0aW9uIC8gbV9tYXRjaCAvIG1fcHNldWRvVHlwZSB3ZXJlIHB1YmxpYyBhbmQKKyAgICAg
ICAgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIHRoZSBjbGFzcy4gVGhlIG5ldyBhcHBy
b2FjaCBpcyBiZXR0ZXIKKyAgICAgICAgYmVjYXVzZToKKyAgICAgICAgLSBUaG9zZSBtZW1iZXJz
IGFyZSBiaXQgZmllbGRzIHNvIGJ5IHVzaW5nIGdldHRlcnMsIHdlIGNhbiBoaWRlIHRoZQorICAg
ICAgICAgIGNhc3RzIGluc2lkZSB0aGUgZ2V0dGVycy4gVGhlIHNldHRlcnMgY2FuIG5vdyBhbHNv
IGNoZWNrIHRoYXQgdGhlCisgICAgICAgICAgYml0ZmllbGQgaXMgYmlnIGVub3VnaCB0byBhY3R1
YWxseSBzdG9yZSB0aGUgZW51bSB2YWx1ZS4KKyAgICAgICAgLSBXaGVuIHVzaW5nIHRob3NlIGlu
IHN3aXRjaCgpIHN0YXRlbWVudHMsIHRoZSBjb21waWxlciBub3cgY29tcGxhaW5zCisgICAgICAg
ICAgaWYgd2UgZmFpbCB0byB0ZXN0IHNvbWUgb2YgdGhlIGVudW0gdmFsdWVzIGFzIHRoZSB2YWx1
ZSBpcyBub3cgYW4KKyAgICAgICAgICBlbnVtLCBhbmQgbm90IG1lcmVseSBhbiB1bnNpZ25lZCBp
bnRlZ2VyLgorICAgICAgICAtIFNvbWUgb2YgdGhlc2UgbWVtYmVycyBhbHJlYWR5IGhhcyBnZXR0
ZXJzIChlLmcuIHJlbGF0aW9uKCkpLgorICAgICAgICAtIEJldHRlciBlbmNhcHN1bGF0aW9uLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
Y3NzL0NTU1BhcnNlclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxl
Y3Rvcjo6cGFyc2VQYWdlUHNldWRvU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0VsZW1lbnRDdWVGdW5jdGlvblNlbGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0Ns
YXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXJTZWxlY3Rvcjo6c2V0UHNldWRvQ2xhc3NWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXJTZWxlY3Rvcjo6aXNTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyU2VsZWN0b3I6OnByZXBlbmRUYWdTZWxlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1BhcnNl
clZhbHVlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnNldE1hdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRSZWxhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxlY3Rvcjo6aXNQc2V1ZG9FbGVtZW50Q3VlRnVu
Y3Rpb24pOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTZWxlY3Rvcjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2Vs
ZWN0b3I6OnNwZWNpZmljaXR5Rm9yT25lU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3I6OnNwZWNpZmljaXR5Rm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2VsZWN0
b3JUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yOjpzZXRQc2V1ZG9FbGVtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTZWxlY3Rvcjo6c2V0UGFnZVBzZXVkb1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2Vs
ZWN0b3I6OnBzZXVkb0NsYXNzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6
c2V0UHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpwc2V1
ZG9FbGVtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6cGFnZVBzZXVk
b0NsYXNzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0UmVsYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6Om1hdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpzZXRNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6bWF0Y2hlc1BzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6
OmlzVW5rbm93blBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6
OmlzQ3VzdG9tUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6
aXNTaWJsaW5nU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OmlzQXR0
cmlidXRlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpDU1NTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6fkNTU1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yOjp0YWdRTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6
dmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvckxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JOZWVkc05hbWVzcGFjZVJlc29sdXRpb25GdW5jdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKiBjc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2hlY2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKToKKyAgICAgICAgKiBjc3MvUnVsZUZlYXR1
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RGZWF0dXJl
c0Zyb21TZWxlY3Rvcik6CisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpkZXRlcm1pbmVQcm9wZXJ0eVdoaXRlbGlzdFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6YW55QXR0cmlidXRlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKToKKyAgICAgICAgKiBjc3MvU2Vs
ZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmlzQ29t
bW9uUHNldWRvQ2xhc3NTZWxlY3Rvcik6CisgICAgICAgICogY3NzL1NlbGVjdG9yRmlsdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVy
SGFzaGVzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpjb25zdHJ1Y3RGcmFnbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUVsZW1lbnRBdHRyaWJ1dGVNYXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0
ZVZhbHVlTWF0Y2hpbmcpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzU2luZ2xlVGFnTmFtZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzU2luZ2xlQ2xhc3NOYW1lU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZElkTWF0
Y2hpbmdUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OlNlbGVjdG9y
RGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0b3JGb3JJZExvb2t1cCk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWx0ZXJSb290QnlJZCk6CisKIDIwMTQtMDktMTIgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3
MzQ0MSk6IFtHVEtdIEFsbCBidXR0b25zIGFwcGVhciBpbnNlbnNpdGl2ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAppbmRleCBkNDJlZDA4ZDg3MWM5MDg2ZTczNmI1MzA3OGZk
MmViYmJiOTU0N2MwLi5jMjM2YzczOGQxM2Y3YjlkYjgzYjEwYTFlZmY1MDczYjU5ZmE5ODcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBA
IENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQYWdlUHNldWRvU2Vs
ZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
YXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0g
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPm1fbWF0Y2ggPSBDU1NTZWxlY3Rvcjo6UGFnZVBzZXVk
b0NsYXNzOworICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6
UGFnZVBzZXVkb0NsYXNzKTsKICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UGFnZVBzZXVk
b1R5cGUocHNldWRvVHlwZSk7CiAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKIH0KQEAg
LTE4Miw3ICsxODIsNyBAQCBDU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBh
cnNlUHNldWRvRWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNl
clNlbGVjdG9yPigpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5tX21hdGNoID0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnQ7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNo
KENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+
c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZSk7CiAgICAgc2VsZWN0b3ItPm1fc2VsZWN0
b3ItPnNldFZhbHVlKG5hbWUpOwogICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7CkBAIC0x
OTksNyArMTk5LDcgQEAgQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJz
ZVBzZXVkb0VsZW1lbnRDdWVGdW5jdGlvblNlbGVjdG9yKGNvbnMKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJT
ZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+bV9tYXRjaCA9IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50OworICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCk7CiAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNl
dFBzZXVkb0VsZW1lbnRUeXBlKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlKTsKICAgICBz
ZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JWZWN0b3IpOwogICAgIHJldHVy
biBzZWxlY3Rvci5yZWxlYXNlKCk7CkBAIC0yMTEsMTMgKzIxMSwxMyBAQCBDU1NQYXJzZXJTZWxl
Y3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5
RWxlbWVudFNlbAogICAgIFBzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCBw
c2V1ZG9UeXBlID0gcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5n
KHBzZXVkb1R5cGVTdHJpbmcpOwogICAgIGlmIChwc2V1ZG9UeXBlLnBzZXVkb0NsYXNzICE9IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd24pIHsKICAgICAgICAgYXV0byBzZWxlY3RvciA9
IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0gICAgICAgIHNlbGVjdG9y
LT5tX3NlbGVjdG9yLT5tX21hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOwotICAgICAg
ICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+bV9wc2V1ZG9UeXBlID0gcHNldWRvVHlwZS5wc2V1ZG9D
bGFzczsKKyAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzcyk7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9D
bGFzc1R5cGUocHNldWRvVHlwZS5wc2V1ZG9DbGFzcyk7CiAgICAgICAgIHJldHVybiBzZWxlY3Rv
ci5yZWxlYXNlKCk7CiAgICAgfQogICAgIGlmIChwc2V1ZG9UeXBlLmNvbXBhdGliaWxpdHlQc2V1
ZG9FbGVtZW50ICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bikgewogICAgICAg
ICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsK
LSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPm1fbWF0Y2ggPSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudDsKKyAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKICAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNl
dFBzZXVkb0VsZW1lbnRUeXBlKHBzZXVkb1R5cGUuY29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQp
OwogICAgICAgICBBdG9taWNTdHJpbmcgbmFtZSA9IHBzZXVkb1R5cGVTdHJpbmc7CiAgICAgICAg
IHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsKQEAgLTI2MCwxMCArMjYwLDEw
IEBAIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OmFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlCiAKIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OnNl
dFBzZXVkb0NsYXNzVmFsdWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9DbGFzc1N0cmlu
ZykKIHsKLSAgICBBU1NFUlQobV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3MpOworICAgIEFTU0VSVChtX3NlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzcyk7CiAKICAgICBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0Vs
ZW1lbnQgcHNldWRvVHlwZSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVu
dFN0cmluZyhwc2V1ZG9DbGFzc1N0cmluZyk7Ci0gICAgbV9zZWxlY3Rvci0+bV9wc2V1ZG9UeXBl
ID0gcHNldWRvVHlwZS5wc2V1ZG9DbGFzczsKKyAgICBtX3NlbGVjdG9yLT5zZXRQc2V1ZG9DbGFz
c1R5cGUocHNldWRvVHlwZS5wc2V1ZG9DbGFzcyk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyU2VsZWN0
b3I6OmlzU2ltcGxlKCkgY29uc3QKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIENTU1BhcnNlclNl
bGVjdG9yOjppc1NpbXBsZSgpIGNvbnN0CiAgICAgaWYgKCFtX3RhZ0hpc3RvcnkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgaWYgKG1fc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OlRhZykgeworICAgIGlmIChtX3NlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpU
YWcpIHsKICAgICAgICAgLy8gV2UgY2FuJ3QgY2hlY2sgYWdhaW5zdCBhbnlRTmFtZSgpIGhlcmUg
YmVjYXVzZSBuYW1lc3BhY2UgbWF5IG5vdCBiZSBudWxsQXRvbS4KICAgICAgICAgLy8gRXhhbXBs
ZToKICAgICAgICAgLy8gICAgIEBuYW1lc3BhY2UgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IjsKQEAgLTMxMiw3ICszMTIsNyBAQCB2b2lkIENTU1BhcnNlclNlbGVjdG9yOjpwcmVwZW5kVGFn
U2VsZWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnUU5hbWUsIGJvb2wgdAogICAgIG1fdGFn
SGlzdG9yeSA9IFdURjo6bW92ZShzZWNvbmQpOwogCiAgICAgbV9zZWxlY3RvciA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q1NTU2VsZWN0b3I+KHRhZ1FOYW1lLCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUpOwot
ICAgIG1fc2VsZWN0b3ItPm1fcmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I7Cisg
ICAgbV9zZWxlY3Rvci0+c2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCmluZGV4IGI0ZjkyNmZlZmUxZjU0
MjA1MWYyMzM2NGZlOTQ5ZGY1MzIwMTAzOWEuLmQ1MjRhMDU3ODg3Zjg0ODExMjllYTI3NWE3MTJi
YTQwM2I0YjNlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKQEAgLTE5NSw4
ICsxOTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0QXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGlzQ2FzZUluc2Vuc2l0aXZl
KSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZSh2YWx1ZSwgaXNDYXNlSW5zZW5zaXRpdmUpOyB9
CiAgICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fc2Vs
ZWN0b3ItPnNldEFyZ3VtZW50KHZhbHVlKTsgfQotICAgIHZvaWQgc2V0TWF0Y2goQ1NTU2VsZWN0
b3I6Ok1hdGNoIHZhbHVlKSB7IG1fc2VsZWN0b3ItPm1fbWF0Y2ggPSB2YWx1ZTsgfQotICAgIHZv
aWQgc2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHZhbHVlKSB7IG1fc2VsZWN0b3It
Pm1fcmVsYXRpb24gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0TWF0Y2goQ1NTU2VsZWN0b3I6Ok1h
dGNoIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldE1hdGNoKHZhbHVlKTsgfQorICAgIHZvaWQgc2V0
UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFJl
bGF0aW9uKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0Rm9yUGFnZSgpIHsgbV9zZWxlY3Rvci0+c2V0
Rm9yUGFnZSgpOyB9CiAKIApAQCAtMjA5LDcgKzIwOSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
UHNldWRvRWxlbWVudEN1ZUZ1bmN0aW9uKCkgY29uc3QKICAgICB7CiAjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotICAgICAgICByZXR1cm4gbV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCAmJiBtX3NlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlOworICAgICAgICByZXR1cm4gbV9zZWxlY3Rvci0+
bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBtX3NlbGVjdG9yLT5wc2V1
ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlOwogI2Vsc2UK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNw
cAppbmRleCA2Y2VjNDM5NzYwMDhhNTM4NGMxZmVhZjhjMzVkYWE0NmQ5NjgzOWJiLi4yMTM1NmY5
MDJjY2Y3Zjc4MWU1MDdlNTBlMjg0YjU3N2Y0NTBjODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxl
Y3Rvci5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
dm9pZCBDU1NTZWxlY3Rvcjo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIEFTU0VSVChtX21hdGNo
ICE9IFRhZyk7CisgICAgQVNTRVJUKG1hdGNoKCkgIT0gVGFnKTsKICAgICBpZiAobV9oYXNSYXJl
RGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIE1vdmUgdGhlIHZhbHVlIHRvIHRoZSByYXJl
IGRhdGEgc3R1Y3R1cmUuCkBAIC04NSwxMCArODUsMTIgQEAgaW5saW5lIHVuc2lnbmVkIENTU1Nl
bGVjdG9yOjpzcGVjaWZpY2l0eUZvck9uZVNlbGVjdG9yKCkgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogUHNldWRvLWVsZW1lbnRzIGFuZCBwc2V1ZG8tY2xhc3NlcyBkbyBub3QgaGF2ZSB0aGUgc2Ft
ZSBzcGVjaWZpY2l0eS4gVGhpcyBmdW5jdGlvbgogICAgIC8vIGlzbid0IHF1aXRlIGNvcnJlY3Qu
Ci0gICAgc3dpdGNoIChtX21hdGNoKSB7CisgICAgc3dpdGNoIChtYXRjaCgpKSB7CiAgICAgY2Fz
ZSBJZDoKICAgICAgICAgcmV0dXJuIDB4MTAwMDA7CiAKKyAgICBjYXNlIFBhZ2VQc2V1ZG9DbGFz
czoKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQc2V1ZG9DbGFzczoKICAgICAgICAgLy8gRklY
TUU6IFBzdWVkb0FueSBzaG91bGQgYmFzZSB0aGUgc3BlY2lmaWNpdHkgb24gdGhlIHN1Yi1zZWxl
Y3RvcnMuCiAgICAgICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1Ymxp
Yy93d3ctc3R5bGUvMjAxMFNlcC8wNTMwLmh0bWwKQEAgLTEwNSw3ICsxMDcsNiBAQCBpbmxpbmUg
dW5zaWduZWQgQ1NTU2VsZWN0b3I6OnNwZWNpZmljaXR5Rm9yT25lU2VsZWN0b3IoKSBjb25zdAog
ICAgIGNhc2UgQmVnaW46CiAgICAgY2FzZSBFbmQ6CiAgICAgICAgIHJldHVybiAweDEwMDsKLQog
ICAgIGNhc2UgVGFnOgogICAgICAgICByZXR1cm4gKHRhZ1FOYW1lKCkubG9jYWxOYW1lKCkgIT0g
c3RhckF0b20pID8gMSA6IDA7CiAgICAgY2FzZSBVbmtub3duOgpAQCAtMTIxLDcgKzEyMiw3IEBA
IHVuc2lnbmVkIENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eUZvclBhZ2UoKSBjb25zdAogICAgIHVu
c2lnbmVkIHMgPSAwOwogCiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogY29tcG9uZW50ID0g
dGhpczsgY29tcG9uZW50OyBjb21wb25lbnQgPSBjb21wb25lbnQtPnRhZ0hpc3RvcnkoKSkgewot
ICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudC0+bV9tYXRjaCkgeworICAgICAgICBzd2l0Y2ggKGNv
bXBvbmVudC0+bWF0Y2goKSkgewogICAgICAgICBjYXNlIFRhZzoKICAgICAgICAgICAgIHMgKz0g
dGFnUU5hbWUoKS5sb2NhbE5hbWUoKSA9PSBzdGFyQXRvbSA/IDAgOiA0OwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0yMDgsMTMgKzIwOSwxMyBAQCBib29sIENTU1NlbGVjdG9yOjpvcGVyYXRvcj09
KGNvbnN0IENTU1NlbGVjdG9yJiBvdGhlcikgY29uc3QKICAgICB3aGlsZSAoc2VsMSAmJiBzZWwy
KSB7CiAgICAgICAgIGlmIChzZWwxLT5hdHRyaWJ1dGUoKSAhPSBzZWwyLT5hdHRyaWJ1dGUoKQog
ICAgICAgICAgICAgfHwgc2VsMS0+cmVsYXRpb24oKSAhPSBzZWwyLT5yZWxhdGlvbigpCi0gICAg
ICAgICAgICB8fCBzZWwxLT5tX21hdGNoICE9IHNlbDItPm1fbWF0Y2gKKyAgICAgICAgICAgIHx8
IHNlbDEtPm1hdGNoKCkgIT0gc2VsMi0+bWF0Y2goKQogICAgICAgICAgICAgfHwgc2VsMS0+dmFs
dWUoKSAhPSBzZWwyLT52YWx1ZSgpCiAgICAgICAgICAgICB8fCBzZWwxLT5tX3BzZXVkb1R5cGUg
IT0gc2VsMi0+bV9wc2V1ZG9UeXBlCiAgICAgICAgICAgICB8fCBzZWwxLT5hcmd1bWVudCgpICE9
IHNlbDItPmFyZ3VtZW50KCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQotICAgICAgICBpZiAoc2VsMS0+bV9tYXRjaCA9PSBUYWcpIHsKKyAgICAgICAgaWYgKHNlbDEt
Pm1hdGNoKCkgPT0gVGFnKSB7CiAgICAgICAgICAgICBpZiAoc2VsMS0+dGFnUU5hbWUoKSAhPSBz
ZWwyLT50YWdRTmFtZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpAQCAtMjQ5LDcgKzI1MCw3IEBAIFN0cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KGNv
bnN0IFN0cmluZyYgcmlnaHRTaWRlKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyOwog
Ci0gICAgaWYgKG1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhbV90YWdJc0Zvck5hbWVz
cGFjZVJ1bGUpIHsKKyAgICBpZiAobWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFtX3Rh
Z0lzRm9yTmFtZXNwYWNlUnVsZSkgewogICAgICAgICBpZiAodGFnUU5hbWUoKS5wcmVmaXgoKS5p
c051bGwoKSkKICAgICAgICAgICAgIHN0ci5hcHBlbmQodGFnUU5hbWUoKS5sb2NhbE5hbWUoKSk7
CiAgICAgICAgIGVsc2UgewpAQCAtMjYxLDEzICsyNjIsMTMgQEAgU3RyaW5nIENTU1NlbGVjdG9y
OjpzZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiByaWdodFNpZGUpIGNvbnN0CiAKICAgICBjb25z
dCBDU1NTZWxlY3RvciogY3MgPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlm
IChjcy0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKKyAgICAgICAgaWYgKGNzLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpJZCkgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgnIycpOwog
ICAgICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+dmFsdWUoKSwgc3RyKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChjcy0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChjcy0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKICAgICAg
ICAgICAgIHN0ci5hcHBlbmQoJy4nKTsKICAgICAgICAgICAgIHNlcmlhbGl6ZUlkZW50aWZpZXIo
Y3MtPnZhbHVlKCksIHN0cik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3MtPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgICAgIH0gZWxzZSBpZiAoY3MtPm1hdGNoKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5w
c2V1ZG9DbGFzc1R5cGUoKSkgewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5z
aXRpb246CkBAIC00NjksNyArNDcwLDcgQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRl
eHQoY29uc3QgU3RyaW5nJiByaWdodFNpZGUpIGNvbnN0CiAgICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd246CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3MtPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjcy0+
bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgewogICAgICAgICAgICAgc3Ry
LmFwcGVuZExpdGVyYWwoIjo6Iik7CiAgICAgICAgICAgICBzdHIuYXBwZW5kKGNzLT52YWx1ZSgp
KTsKICAgICAgICAgfSBlbHNlIGlmIChjcy0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CkBAIC00
ODAsNyArNDgxLDcgQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQoY29uc3QgU3Ry
aW5nJiByaWdodFNpZGUpIGNvbnN0CiAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgnfCcpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RyLmFwcGVuZChjcy0+YXR0cmlidXRlKCkubG9j
YWxOYW1lKCkpOwotICAgICAgICAgICAgc3dpdGNoIChjcy0+bV9tYXRjaCkgeworICAgICAgICAg
ICAgc3dpdGNoIChjcy0+bWF0Y2goKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkV4YWN0OgogICAgICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCc9Jyk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA2LDExICs1MDcsMTEgQEAgU3RyaW5nIENTU1NlbGVj
dG9yOjpzZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiByaWdodFNpZGUpIGNvbnN0CiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoY3MtPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OlNldCkgewor
ICAgICAgICAgICAgaWYgKGNzLT5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpTZXQpIHsKICAgICAg
ICAgICAgICAgICBzZXJpYWxpemVTdHJpbmcoY3MtPnZhbHVlKCksIHN0cik7CiAgICAgICAgICAg
ICAgICAgc3RyLmFwcGVuZCgnXScpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KGNzLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3MpIHsKKyAgICAgICAg
fSBlbHNlIGlmIChjcy0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UGFnZVBzZXVkb0NsYXNzKSB7
CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5wYWdlUHNldWRvQ2xhc3NUeXBlKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgUGFnZVBzZXVkb0NsYXNzRmlyc3Q6CiAgICAgICAgICAgICAgICAgc3RyLmFw
cGVuZExpdGVyYWwoIjpmaXJzdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAppbmRleCAzMWM1
M2IwNGJjYjRkYTFiMWY3YzI5Y2ZiNjA3YjQ2OTZmOGFjMTRiLi43ZTBmZDAzZDc2M2JhNjc2MGY5
NWIzMDg3OWNhYmUzODU2NmE0M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaApAQCAtMjA1
LDggKzIwNSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1JhcmVEYXRhID8gbV9kYXRhLm1f
cmFyZURhdGEtPm1fYXJndW1lbnQgOiBudWxsQXRvbTsgfQogICAgICAgICBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QqIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBt
X2RhdGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QuZ2V0KCkgOiAwOyB9CiAKLSAgICAgICAg
dm9pZCBzZXRQc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9FbGVtZW50
VHlwZSkgeyBtX3BzZXVkb1R5cGUgPSBwc2V1ZG9FbGVtZW50VHlwZTsgfQotICAgICAgICB2b2lk
IHNldFBhZ2VQc2V1ZG9UeXBlKFBhZ2VQc2V1ZG9DbGFzc1R5cGUgcGFnZVBzZXVkb1R5cGUpIHsg
bV9wc2V1ZG9UeXBlID0gcGFnZVBzZXVkb1R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRQc2V1ZG9F
bGVtZW50VHlwZShQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9FbGVtZW50VHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9wc2V1ZG9UeXBlID0gcHNldWRvRWxlbWVudFR5cGU7CisgICAgICAg
ICAgICBBU1NFUlQobV9wc2V1ZG9UeXBlID09IHBzZXVkb0VsZW1lbnRUeXBlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgc2V0UGFnZVBzZXVkb1R5cGUoUGFnZVBzZXVkb0NsYXNzVHlwZSBw
YWdlUHNldWRvVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9wc2V1ZG9UeXBlID0gcGFn
ZVBzZXVkb1R5cGU7CisgICAgICAgICAgICBBU1NFUlQobV9wc2V1ZG9UeXBlID09IHBhZ2VQc2V1
ZG9UeXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWlj
U3RyaW5nJik7CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBib29sIGlzQ2FzZUluc2Vuc2l0aXZlKTsKICAgICAgICAgdm9pZCBzZXRBcmd1bWVudChjb25z
dCBBdG9taWNTdHJpbmcmKTsKQEAgLTIxOSwxOSArMjI5LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBQc2V1ZG9DbGFzc1R5cGUgcHNldWRvQ2xhc3NUeXBlKCkgY29uc3QKICAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fbWF0Y2ggPT0gUHNldWRvQ2xhc3MpOworICAg
ICAgICAgICAgQVNTRVJUKG1hdGNoKCkgPT0gUHNldWRvQ2xhc3MpOwogICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFBzZXVkb0NsYXNzVHlwZT4obV9wc2V1ZG9UeXBlKTsKICAgICAgICAg
fQorICAgICAgICB2b2lkIHNldFBzZXVkb0NsYXNzVHlwZShQc2V1ZG9DbGFzc1R5cGUgcHNldWRv
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9wc2V1ZG9UeXBlID0gcHNldWRvVHlwZTsK
KyAgICAgICAgICAgIEFTU0VSVChtX3BzZXVkb1R5cGUgPT0gcHNldWRvVHlwZSk7CisgICAgICAg
IH0KIAogICAgICAgICBQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9FbGVtZW50VHlwZSgpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX21hdGNoID09IFBzZXVkb0VsZW1lbnQp
OworICAgICAgICAgICAgQVNTRVJUKG1hdGNoKCkgPT0gUHNldWRvRWxlbWVudCk7CiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHNldWRvRWxlbWVudFR5cGU+KG1fcHNldWRvVHlwZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBQYWdlUHNldWRvQ2xhc3NUeXBlIHBhZ2VQc2V1ZG9DbGFz
c1R5cGUoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9tYXRjaCA9PSBQ
YWdlUHNldWRvQ2xhc3MpOworICAgICAgICAgICAgQVNTRVJUKG1hdGNoKCkgPT0gUGFnZVBzZXVk
b0NsYXNzKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWdlUHNldWRvQ2xhc3NU
eXBlPihtX3BzZXVkb1R5cGUpOwogICAgICAgICB9CiAKQEAgLTI0Miw2ICsyNTcsMTggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGlzQXR0cmlidXRlU2VsZWN0b3IoKSBjb25z
dDsKIAogICAgICAgICBSZWxhdGlvbiByZWxhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbGF0aW9uPihtX3JlbGF0aW9uKTsgfQorICAgICAgICB2b2lkIHNldFJlbGF0aW9uKFJl
bGF0aW9uIHJlbGF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtX3JlbGF0aW9uID0gcmVs
YXRpb247CisgICAgICAgICAgICBBU1NFUlQobV9yZWxhdGlvbiA9PSByZWxhdGlvbik7CisgICAg
ICAgIH0KKworICAgICAgICBNYXRjaCBtYXRjaCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PE1hdGNoPihtX21hdGNoKTsgfQorICAgICAgICB2b2lkIHNldE1hdGNoKE1hdGNoIG1hdGNoKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX21hdGNoID0gbWF0Y2g7CisgICAgICAgICAgICBBU1NF
UlQobV9tYXRjaCA9PSBtYXRjaCk7CisgICAgICAgIH0KIAogICAgICAgICBib29sIGlzTGFzdElu
U2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RJblNlbGVjdG9yTGlzdDsgfQog
ICAgICAgICB2b2lkIHNldExhc3RJblNlbGVjdG9yTGlzdCgpIHsgbV9pc0xhc3RJblNlbGVjdG9y
TGlzdCA9IHRydWU7IH0KQEAgLTI1MywxMSArMjgwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBpc0ZvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzRm9yUGFnZTsgfQog
ICAgICAgICB2b2lkIHNldEZvclBhZ2UoKSB7IG1faXNGb3JQYWdlID0gdHJ1ZTsgfQogCisgICAg
cHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbV9yZWxhdGlvbiAgICAgICAgICAgOiAzOyAvLyBl
bnVtIFJlbGF0aW9uCiAgICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9tYXRjaCAgICAgIDogNDsg
Ly8gZW51bSBNYXRjaAogICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fcHNldWRvVHlwZSA6IDg7
IC8vIFBzZXVkb1R5cGUKLQotICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgYm9vbCBtX3Bh
cnNlZE50aCAgICAgIDogMTsgLy8gVXNlZCBmb3IgOm50aC0qCiAgICAgICAgIGJvb2wgbV9pc0xh
c3RJblNlbGVjdG9yTGlzdCAgIDogMTsKICAgICAgICAgYm9vbCBtX2lzTGFzdEluVGFnSGlzdG9y
eSAgICAgOiAxOwpAQCAtMzE1LDE3ICszNDEsMTcgQEAgaW5saW5lIGNvbnN0IEF0b21pY1N0cmlu
ZyYgQ1NTU2VsZWN0b3I6OmF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSgpIGNvbnN0CiAKIGlu
bGluZSBib29sIENTU1NlbGVjdG9yOjptYXRjaGVzUHNldWRvRWxlbWVudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fbWF0Y2ggPT0gUHNldWRvRWxlbWVudDsKKyAgICByZXR1cm4gbWF0Y2goKSA9
PSBQc2V1ZG9FbGVtZW50OwogfQogCiBpbmxpbmUgYm9vbCBDU1NTZWxlY3Rvcjo6aXNVbmtub3du
UHNldWRvRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWF0Y2ggPT0gUHNldWRvRWxl
bWVudCAmJiBtX3BzZXVkb1R5cGUgPT0gUHNldWRvRWxlbWVudFVua25vd247CisgICAgcmV0dXJu
IG1hdGNoKCkgPT0gUHNldWRvRWxlbWVudCAmJiBwc2V1ZG9FbGVtZW50VHlwZSgpID09IFBzZXVk
b0VsZW1lbnRVbmtub3duOwogfQogCiBpbmxpbmUgYm9vbCBDU1NTZWxlY3Rvcjo6aXNDdXN0b21Q
c2V1ZG9FbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tYXRjaCA9PSBQc2V1ZG9FbGVt
ZW50ICYmIChtX3BzZXVkb1R5cGUgPT0gUHNldWRvRWxlbWVudFVzZXJBZ2VudEN1c3RvbSB8fCBt
X3BzZXVkb1R5cGUgPT0gUHNldWRvRWxlbWVudFdlYktpdEN1c3RvbSk7CisgICAgcmV0dXJuIG1h
dGNoKCkgPT0gUHNldWRvRWxlbWVudCAmJiAocHNldWRvRWxlbWVudFR5cGUoKSA9PSBQc2V1ZG9F
bGVtZW50VXNlckFnZW50Q3VzdG9tIHx8IHBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gUHNldWRvRWxl
bWVudFdlYktpdEN1c3RvbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2V1ZG9DbGFzc0lz
UmVsYXRpdmVUb1NpYmxpbmdzKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgdHlwZSkKQEAg
LTM0NSwyNSArMzcxLDI1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2V1ZG9DbGFzc0lzUmVsYXRp
dmVUb1NpYmxpbmdzKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUKIAogaW5saW5lIGJvb2wg
Q1NTU2VsZWN0b3I6OmlzU2libGluZ1NlbGVjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9y
ZWxhdGlvbiA9PSBEaXJlY3RBZGphY2VudAotICAgICAgICB8fCBtX3JlbGF0aW9uID09IEluZGly
ZWN0QWRqYWNlbnQKLSAgICAgICAgfHwgKG1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzICYmIHBzZXVkb0NsYXNzSXNSZWxhdGl2ZVRvU2libGluZ3MocHNldWRvQ2xhc3NUeXBlKCkp
KTsKKyAgICByZXR1cm4gcmVsYXRpb24oKSA9PSBEaXJlY3RBZGphY2VudAorICAgICAgICB8fCBy
ZWxhdGlvbigpID09IEluZGlyZWN0QWRqYWNlbnQKKyAgICAgICAgfHwgKG1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmIHBzZXVkb0NsYXNzSXNSZWxhdGl2ZVRvU2libGluZ3Mo
cHNldWRvQ2xhc3NUeXBlKCkpKTsKIH0KIAogaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6OmlzQXR0
cmlidXRlU2VsZWN0b3IoKSBjb25zdAogewotICAgIHJldHVybiBtX21hdGNoID09IENTU1NlbGVj
dG9yOjpFeGFjdAotICAgICAgICB8fCBtX21hdGNoID09ICBDU1NTZWxlY3Rvcjo6U2V0Ci0gICAg
ICAgIHx8IG1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Okxpc3QKLSAgICAgICAgfHwgbV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6SHlwaGVuCi0gICAgICAgIHx8IG1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OkNvbnRhaW4KLSAgICAgICAgfHwgbV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6QmVnaW4KLSAgICAg
ICAgfHwgbV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RW5kOworICAgIHJldHVybiBtYXRjaCgpID09
IENTU1NlbGVjdG9yOjpFeGFjdAorICAgICAgICB8fCBtYXRjaCgpID09ICBDU1NTZWxlY3Rvcjo6
U2V0CisgICAgICAgIHx8IG1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6Okxpc3QKKyAgICAgICAgfHwg
bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6SHlwaGVuCisgICAgICAgIHx8IG1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OkNvbnRhaW4KKyAgICAgICAgfHwgbWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6QmVn
aW4KKyAgICAgICAgfHwgbWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6RW5kOwogfQogCiBpbmxpbmUg
dm9pZCBDU1NTZWxlY3Rvcjo6c2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBBU1NFUlQobV9tYXRjaCAhPSBUYWcpOworICAgIEFTU0VSVChtYXRjaCgpICE9IFRhZyk7
CiAgICAgLy8gTmVlZCB0byBkbyByZWYgY291bnRpbmcgbWFudWFsbHkgZm9yIHRoZSB1bmlvbi4K
ICAgICBpZiAobV9oYXNSYXJlRGF0YSkgewogICAgICAgICBpZiAobV9kYXRhLm1fcmFyZURhdGEt
Pm1fdmFsdWUpCkBAIC00MTcsNyArNDQzLDcgQEAgaW5saW5lIENTU1NlbGVjdG9yOjpDU1NTZWxl
Y3Rvcihjb25zdCBDU1NTZWxlY3RvciYgbykKICAgICAsIG1faXNGb3JQYWdlKG8ubV9pc0ZvclBh
Z2UpCiAgICAgLCBtX3RhZ0lzRm9yTmFtZXNwYWNlUnVsZShvLm1fdGFnSXNGb3JOYW1lc3BhY2VS
dWxlKQogewotICAgIGlmIChvLm1fbWF0Y2ggPT0gVGFnKSB7CisgICAgaWYgKG8ubWF0Y2goKSA9
PSBUYWcpIHsKICAgICAgICAgbV9kYXRhLm1fdGFnUU5hbWUgPSBvLm1fZGF0YS5tX3RhZ1FOYW1l
OwogICAgICAgICBtX2RhdGEubV90YWdRTmFtZS0+cmVmKCk7CiAgICAgfSBlbHNlIGlmIChvLm1f
aGFzUmFyZURhdGEpIHsKQEAgLTQzMSw3ICs0NTcsNyBAQCBpbmxpbmUgQ1NTU2VsZWN0b3I6OkNT
U1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yJiBvKQogCiBpbmxpbmUgQ1NTU2VsZWN0b3I6On5D
U1NTZWxlY3RvcigpCiB7Ci0gICAgaWYgKG1fbWF0Y2ggPT0gVGFnKQorICAgIGlmIChtYXRjaCgp
ID09IFRhZykKICAgICAgICAgbV9kYXRhLm1fdGFnUU5hbWUtPmRlcmVmKCk7CiAgICAgZWxzZSBp
ZiAobV9oYXNSYXJlRGF0YSkKICAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPmRlcmVmKCk7CkBA
IC00NDEsMTMgKzQ2NywxMyBAQCBpbmxpbmUgQ1NTU2VsZWN0b3I6On5DU1NTZWxlY3RvcigpCiAK
IGlubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NTZWxlY3Rvcjo6dGFnUU5hbWUoKSBjb25z
dAogewotICAgIEFTU0VSVChtX21hdGNoID09IFRhZyk7CisgICAgQVNTRVJUKG1hdGNoKCkgPT0g
VGFnKTsKICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUXVhbGlmaWVkTmFtZSo+
KCZtX2RhdGEubV90YWdRTmFtZSk7CiB9CiAKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIENT
U1NlbGVjdG9yOjp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fbWF0Y2ggIT0gVGFnKTsK
KyAgICBBU1NFUlQobWF0Y2goKSAhPSBUYWcpOwogICAgIC8vIEF0b21pY1N0cmluZyBpcyByZWFs
bHkganVzdCBhbiBBdG9taWNTdHJpbmdJbXBsKiBzbyB0aGUgY2FzdCBiZWxvdyBpcyBzYWZlLgog
ICAgIC8vIEZJWE1FOiBQZXJoYXBzIGNhbGwgc2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBhY2Nl
cHQgQXRvbWljU3RyaW5nSW1wbD8KICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
QXRvbWljU3RyaW5nKj4obV9oYXNSYXJlRGF0YSA/ICZtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1
ZSA6ICZtX2RhdGEubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U2VsZWN0b3JMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3Bw
CmluZGV4IDAzNzY0MWM2MmNmMmExNGYyNGM5ZDk4M2VjYzRkZWNkNTgzYzM4N2IuLjRlMmI3Yjkz
MGQwZDNlYmQ2MjhiZGU3NDNkNTVjZmZhYWQ3YTNiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWxlY3Rvckxpc3QuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgY2xhc3MgU2VsZWN0b3JOZWVkc05h
bWVzcGFjZVJlc29sdXRpb25GdW5jdG9yIHsKIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yKCko
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogICAgIHsKLSAgICAgICAgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgc2VsZWN0b3ItPnRhZ1FOYW1lKCkucHJl
Zml4KCkgIT0gbnVsbEF0b20gJiYgc2VsZWN0b3ItPnRhZ1FOYW1lKCkucHJlZml4KCkgIT0gc3Rh
ckF0b20pCisgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6VGFn
ICYmIHNlbGVjdG9yLT50YWdRTmFtZSgpLnByZWZpeCgpICE9IG51bGxBdG9tICYmIHNlbGVjdG9y
LT50YWdRTmFtZSgpLnByZWZpeCgpICE9IHN0YXJBdG9tKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYmIHNlbGVj
dG9yLT5hdHRyaWJ1dGUoKS5wcmVmaXgoKSAhPSBudWxsQXRvbSAmJiBzZWxlY3Rvci0+YXR0cmli
dXRlKCkucHJlZml4KCkgIT0gc3RhckF0b20pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IDM2MmNkN2VhYzc0NmI0
NTJmZGIwZTVhYmRiMjkxZWIwNzc1YzI3YWEuLjgzOWU4NzhmMjk1MjA1ZTE0ZGJlMGFiYjhkODEw
YzIwZDEzMGY5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcApA
QCAtOTIsMTEgKzkyLDExIEBAIHZvaWQgUGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVz
KFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGCiBzdGF0aWMgYm9vbCBj
aGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBi
b29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUp
CiB7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogY29tcG9uZW50ID0gc2VsZWN0b3I7IGNv
bXBvbmVudDsgY29tcG9uZW50ID0gY29tcG9uZW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAg
aWYgKGNvbXBvbmVudC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnKSB7CisgICAgICAgIGlm
IChjb21wb25lbnQtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlRhZykgewogICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBjb21wb25lbnQtPnRhZ1FOYW1lKCkubG9j
YWxOYW1lKCk7CiAgICAgICAgICAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2Fs
TmFtZSAhPSBwYWdlTmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0gZWxzZSBpZiAoY29tcG9uZW50LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQYWdlUHNldWRv
Q2xhc3MpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnQtPm1hdGNoKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzcykgewogICAgICAgICAgICAgQ1NTU2VsZWN0b3I6OlBhZ2VQ
c2V1ZG9DbGFzc1R5cGUgcHNldWRvVHlwZSA9IGNvbXBvbmVudC0+cGFnZVBzZXVkb0NsYXNzVHlw
ZSgpOwogICAgICAgICAgICAgaWYgKChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQYWdlUHNl
dWRvQ2xhc3NMZWZ0ICYmICFpc0xlZnRQYWdlKQogICAgICAgICAgICAgICAgIHx8IChwc2V1ZG9U
eXBlID09IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NSaWdodCAmJiBpc0xlZnRQYWdlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAKaW5kZXggNWM0OWJhZmVhOTI2Njc5NTA5YmU2NmUz
ZTc5ZjEwNzc5YmMzMGFkZC4uNThkZTVkNWFhMmVkMmM2MDNkZmM0NGFmY2U5NmFiZTQ4MDQzYzRh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFJ1bGVGZWF0dXJlU2V0Ojpjb2xsZWN0RmVhdHVyZXNG
cm9tU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewotICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgaWYgKHNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpJZCkKICAgICAgICAgaWRzSW5SdWxlcy5hZGQoc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpKTsKLSAgICBlbHNlIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6Q2xhc3MpCisgICAgZWxzZSBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2Vs
ZWN0b3I6OkNsYXNzKQogICAgICAgICBjbGFzc2VzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVl
KCkuaW1wbCgpKTsKICAgICBlbHNlIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3Rvcigp
KSB7CiAgICAgICAgIGF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZXNJblJ1bGVzLmFkZChzZWxl
Y3Rvci0+YXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICAgICAgYXR0
cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuYWRkKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5h
bWUoKS5pbXBsKCkpOwotICAgIH0gZWxzZSBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLT5tYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgIHN3aXRjaCAoc2VsZWN0
b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudEZpcnN0TGluZToKICAgICAgICAgICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKaW5kZXggZWU0MTc1ZGViMDZiNjlmMDY5YmVjOTQzMDk1
YzZiNjhiNzg3YmYwYy4uYjcxZTk5NjNkYmQ5MDQ5ODkzMGQzNzFjODUwNDg5OTA2ZTVmMzM3NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAtNTgsMTMgKzU4LDEzIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlCiAgICAgaWYgKHNlbGVjdG9yLnRhZ0hpc3RvcnkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKHNlbGVjdG9yLm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZykg
eworICAgIGlmIChzZWxlY3Rvci5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpUYWcpIHsKICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3Rvck5hbWVzcGFjZSA9IHNlbGVjdG9yLnRhZ1FO
YW1lKCkubmFtZXNwYWNlVVJJKCk7CiAgICAgICAgIHJldHVybiBzZWxlY3Rvck5hbWVzcGFjZSA9
PSBzdGFyQXRvbSB8fCBzZWxlY3Rvck5hbWVzcGFjZSA9PSB4aHRtbE5hbWVzcGFjZVVSSTsKICAg
ICB9CiAgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9y
KCZzZWxlY3RvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBzZWxlY3Rvci5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpDbGFzczsKKyAgICByZXR1cm4gc2VsZWN0b3IubWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
SWQgfHwgc2VsZWN0b3IubWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7CiB9CiAKIHN0YXRp
YyBib29sIHNlbGVjdG9yQ2FuTWF0Y2hQc2V1ZG9FbGVtZW50KGNvbnN0IENTU1NlbGVjdG9yJiBy
b290U2VsZWN0b3IpCkBAIC0xMzUsNyArMTM1LDcgQEAgc3RhdGljIGlubGluZSBQcm9wZXJ0eVdo
aXRlbGlzdFR5cGUgZGV0ZXJtaW5lUHJvcGVydHlXaGl0ZWxpc3RUeXBlKGNvbnN0IEFkZFJ1bGUK
ICAgICAgICAgcmV0dXJuIFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uOwogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBjb21wb25lbnQgPSBzZWxlY3Rv
cjsgY29tcG9uZW50OyBjb21wb25lbnQgPSBjb21wb25lbnQtPnRhZ0hpc3RvcnkoKSkgewotICAg
ICAgICBpZiAoY29tcG9uZW50LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50
ICYmIChjb21wb25lbnQtPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRDdWUgfHwgY29tcG9uZW50LT52YWx1ZSgpID09IFRleHRUcmFja0N1ZTo6Y3VlU2hh
ZG93UHNldWRvSWQoKSkpCisgICAgICAgIGlmIChjb21wb25lbnQtPm1hdGNoKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgKGNvbXBvbmVudC0+cHNldWRvRWxlbWVudFR5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSB8fCBjb21wb25lbnQtPnZhbHVlKCkgPT0g
VGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1ZG9JZCgpKSkKICAgICAgICAgICAgIHJldHVybiBQ
cm9wZXJ0eVdoaXRlbGlzdEN1ZTsKICAgICB9CiAjZWxzZQpAQCAtMjE0LDEzICsyMTQsMTMgQEAg
dm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJ
bmRleCwgQWRkUnVsZUZsYWdzIGFkZFIKICAgICBjb25zdCBDU1NTZWxlY3RvciogZm9jdXNTZWxl
Y3RvciA9IG51bGxwdHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURh
dGEuc2VsZWN0b3IoKTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6SWQpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENT
U1NlbGVjdG9yOjpJZCkgewogICAgICAgICAgICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1
ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBydWxlRGF0YSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICYmIHNlbGVjdG9yLT5wc2V1
ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlKSB7CisgICAg
ICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAm
JiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudEN1ZSkgewogICAgICAgICAgICAgbV9jdWVQc2V1ZG9SdWxlcy5hcHBlbmQocnVsZURhdGEp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMzEsNyArMjMxLDcgQEAgdm9p
ZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgQWRkUnVsZUZsYWdzIGFkZFIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAg
ICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpDbGFzcykgewogICAg
ICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogY2xhc3NOYW1lID0gc2VsZWN0b3ItPnZhbHVlKCku
aW1wbCgpOwogICAgICAgICAgICAgaWYgKCFjbGFzc1NlbGVjdG9yKSB7CiAgICAgICAgICAgICAg
ICAgY2xhc3NTZWxlY3RvciA9IHNlbGVjdG9yOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgUnVs
ZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFk
ZFJ1bGVGbGFncyBhZGRSCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
c2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiBzZWxlY3Rvci0+dGFnUU5h
bWUoKS5sb2NhbE5hbWUoKSAhPSBzdGFyQXRvbSkKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpUYWcgJiYgc2VsZWN0b3ItPnRhZ1FOYW1lKCkubG9jYWxOYW1l
KCkgIT0gc3RhckF0b20pCiAgICAgICAgICAgICB0YWdTZWxlY3RvciA9IHNlbGVjdG9yOwogCiAg
ICAgICAgIGlmIChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihz
ZWxlY3RvcikpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZWU2
MjNjNjI3YWY3NjQ3ODA0ZTk4N2ZlODRlMTZhNjA3YzJjMmFkNy4uYmU3NDIwN2JlZjViNDc4NGZl
ZjY0YzEzMzUyMzg0ZTNlNjcwYzZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTIyNCw3ICsyMjQsNyBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9y
Q2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaQogICAgIGlm
ICghY2hlY2tPbmUoY29udGV4dCkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxs
eTsKIAotICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbGVtZW50KSB7CisgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVs
IDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMg
dW5kZWZpbmVkIChpc3N1ZSA3KS4KICAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWls
dXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCiAgICAgICAgIGlmIChjb250
ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQpAQCAtMzM3LDcgKzMzNyw3IEBAIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENo
ZWNraW5nQ29udGV4dFdpCiAgICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9
IGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OOwogICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVu
dFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMp
ICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8KICAgICAgICAgICAgICYmICFuZXh0Q29udGV4
dC5oYXNTZWxlY3Rpb25Qc2V1ZG8KLSAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Ny
b2xsYmFyUHNldWRvICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAgICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9s
bGJhclBzZXVkbyAmJiBuZXh0Q29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5OwogICAgICAgICByZXR1cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1p
Y1BzZXVkbyk7CiAKQEAgLTQyNyw3ICs0MjcsNyBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVN
YXRjaGVzKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYwog
ICAgICAgICBpZiAoIWF0dHJpYnV0ZS5tYXRjaGVzKHNlbGVjdG9yQXR0ci5wcmVmaXgoKSwgZWxl
bWVudC0+aXNIVE1MRWxlbWVudCgpID8gc2VsZWN0b3ItPmF0dHJpYnV0ZUNhbm9uaWNhbExvY2Fs
TmFtZSgpIDogc2VsZWN0b3JBdHRyLmxvY2FsTmFtZSgpLCBzZWxlY3RvckF0dHIubmFtZXNwYWNl
VVJJKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZh
bHVlTWF0Y2hlcyhhdHRyaWJ1dGUsIHN0YXRpY19jYXN0PENTU1NlbGVjdG9yOjpNYXRjaD4oc2Vs
ZWN0b3ItPm1fbWF0Y2gpLCBzZWxlY3Rvci0+dmFsdWUoKSwgY2FzZVNlbnNpdGl2ZSkpCisgICAg
ICAgIGlmIChhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoYXR0cmlidXRlLCBzZWxlY3Rvci0+bWF0Y2go
KSwgc2VsZWN0b3ItPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC00NTEsNyArNDUxLDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hI
b3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdD
b24KICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciA9IGNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQ7IHNlbGVjdG9yOyBz
ZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgc3dpdGNoIChzZWxl
Y3Rvci0+bV9tYXRjaCkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tYXRjaCgpKSB7CiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoKICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+
dGFnUU5hbWUoKSAhPSBhbnlRTmFtZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNDk2LDEzICs0OTYsMTMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgQVNTRVJUKGVs
ZW1lbnQpOwogICAgIEFTU0VSVChzZWxlY3Rvcik7CiAKLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZykKKyAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OlRhZykKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hl
cyhlbGVtZW50LCBzZWxlY3Rvci0+dGFnUU5hbWUoKSk7CiAKLSAgICBpZiAoc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQorICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9
PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCiAgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygp
ICYmIGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxlY3Rvci0+dmFsdWUoKSk7CiAK
LSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQorICAgIGlmIChz
ZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6SWQpCiAgICAgICAgIHJldHVybiBlbGVt
ZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0
b3ItPnZhbHVlKCk7CiAKICAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkg
ewpAQCAtNTE2LDcgKzUxNiw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25z
dCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKKyAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZyb250
LgogICAgICAgICBpZiAoc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc05vdCkgewogICAgICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBz
ZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7CkBAIC01MjksNyArNTI5LDcg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdp
dGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBzdWJDb250ZXh0LmluRnVuY3Rp
b25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKICAgICAgICAgICAgIHN1YkNvbnRleHQuZmlyc3RTZWxl
Y3Rvck9mVGhlRnJhZ21lbnQgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7CiAgICAgICAgICAgICBm
b3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YkNvbnRl
eHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzdWJDb250ZXh0LnNlbGVjdG9yLT50
YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3MpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCBy
ZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCiAgICAgICAgICAgICAgICAgICAgIC8vIHJlc3RyaWN0
aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9ub3IgaXQuCiAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3VycwpAQCAt
ODY4LDcgKzg2OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBlbHNlIGlmIChzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNl
dWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgeworICAg
IGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBz
ZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dEN1ZSkgewogICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29u
dGV4dCk7CiAKICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURP
OwpAQCAtODg4LDcgKzg4OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25z
dCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogCiBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzJiBjb250ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzcyk7CisgICAgQVNTRVJUKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzcyk7CiAKICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkgewog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU6CkBAIC05MzMs
NyArOTMzLDcgQEAgdW5zaWduZWQgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hU
eXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKICAgICAvLyBTdGF0aWNhbGx5IGRldGVy
bWluZSBpZiB0aGlzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYSBsaW5rIGluIHZpc2l0ZWQsIHVudmlz
aXRlZCBvciBhbnkgc3RhdGUsIG9yIG5ldmVyLgogICAgIC8vIDp2aXNpdGVkIG5ldmVyIG1hdGNo
ZXMgb3RoZXIgZWxlbWVudHMgdGhhbiB0aGUgaW5uZXJtb3N0IGxpbmsgZWxlbWVudC4KICAgICBm
b3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAg
ICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7
CisgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3MpIHsKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdDoKICAgICAgICAg
ICAgICAgICB7CkBAIC05NDMsNyArOTQzLDcgQEAgdW5zaWduZWQgU2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJT
ZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBzdWJTZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3ViU2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViU2VsZWN0
b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBzdWJUeXBlID0gc3Vi
U2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdWJUeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgJj0gflNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hWaXNpdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDg4
NmYzNjNiOGFkOTNjMmViNjAzZmEzMWU5Mzk5YWMyMWRlMmE1NDYuLjQ3YzFjOTA5YTIwMWNlZjc4
NTMxNzJkOGU2MzcwZGM5YTM0ZTcyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQogewotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3MpCisgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c1R5cGUgcHNldWRvVHlwZSA9IHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKTsKICAgICByZXR1
cm4gcHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NMaW5rCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yRmlsdGVyLmNwcAppbmRleCAyZmE1ZDAzYWU0NDNiYTNmMjdmZTI3NzY0YzA4
ZDcxMDEzZDY5Y2U4Li43OTljZjNiNjc1NTJmMDAxN2Q3ZDgxMTEyZmFhMGE2NmRjOTA1NTkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckZpbHRlci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCB2
b2lkIFNlbGVjdG9yRmlsdGVyOjpwdXNoUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKIAogc3RhdGlj
IGlubGluZSB2b2lkIGNvbGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQqJiBoYXNoKQogewotICAgIHN3aXRj
aCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tYXRjaCgpKSB7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6CiAgICAgICAgIGlmICghc2VsZWN0b3ItPnZhbHVl
KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgKCpoYXNoKyspID0gc2VsZWN0b3ItPnZhbHVlKCku
aW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIElkQXR0cmlidXRlU2FsdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAppbmRleCA5OWE1MDM3ZjQ1NjA1Njc5OWY2YzEy
YTE1YmYyZTdmNTFlNWMyN2Q1Li4yYzMwYTAzNjMxZmRlNmI3ZTY2MzMzYjcxMTA0ZmM2NTE5MmYz
YmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCkBAIC03
MDUsNyArNzA1LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29u
c3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIHJldHVy
biBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiAgICAgICAgIH0KIAotICAgICAg
ICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3It
Pm1hdGNoKCkpIHsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgogICAgICAgICAgICAg
QVNTRVJUKCFmcmFnbWVudC50YWdOYW1lKTsKICAgICAgICAgICAgIGZyYWdtZW50LnRhZ05hbWUg
PSAmKHNlbGVjdG9yLT50YWdRTmFtZSgpKTsKQEAgLTIxNzcsNyArMjE3Nyw3IEBAIHZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVNYXRjaGluZyhBc3Nl
bWJsZXI6Okp1bXBMaXN0CiAKICAgICBzdWNjZXNzQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOwog
Ci0gICAgaWYgKGF0dHJpYnV0ZVNlbGVjdG9yLm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OlNldCkg
eworICAgIGlmIChhdHRyaWJ1dGVTZWxlY3Rvci5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpTZXQp
IHsKICAgICAgICAgLy8gV2UgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IG5hbWUgbWF0Y2hpbmcg
ZmFpbHMgaW4gbW9zdCBjYXNlcyBhbmQgd2Uga2VlcCB2YWx1ZSBtYXRjaGluZyBvdXRzaWRlCiAg
ICAgICAgIC8vIG9mIHRoZSBsb29wLiBXZSByZS1lbnRlciB0aGUgbG9vcCBpZiBuZWVkZWQuCiAg
ICAgICAgIC8vIEZJWE1FOiBleGFjdCBjYXNlIHNlbnNpdGl2ZSB2YWx1ZSBtYXRjaGluZyBpcyBz
byBzaW1wbGUgdGhhdCBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgbG9vcC4KQEAgLTIyNjksNyAr
MjI2OSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRy
aWJ1dGVWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtCiAgICAgQVNTRVJUKCFleHBlY3RlZFZh
bHVlLmlzTnVsbCgpKTsKICAgICBib29sIGRlZmF1bHRUb0Nhc2VTZW5zaXRpdmVWYWx1ZU1hdGNo
ID0gYXR0cmlidXRlSW5mby5jYW5EZWZhdWx0VG9DYXNlU2Vuc2l0aXZlVmFsdWVNYXRjaCgpOwog
Ci0gICAgc3dpdGNoIChhdHRyaWJ1dGVTZWxlY3Rvci5tX21hdGNoKSB7CisgICAgc3dpdGNoIChh
dHRyaWJ1dGVTZWxlY3Rvci5tYXRjaCgpKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6QmVnaW46
CiAgICAgICAgIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hp
bmcoZmFpbHVyZUNhc2VzLCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1ZSwg
ZGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2gsIGF0dHJpYnV0ZVZhbHVlQmVnaW5zV2l0
aDxDYXNlU2Vuc2l0aXZlPiwgYXR0cmlidXRlVmFsdWVCZWdpbnNXaXRoPENhc2VJbnNlbnNpdGl2
ZT4pOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRl
eCBjOWRkNjBlOGY2Y2ZiYWQ3YjM1NjRmZWRkYWI1NTRjOWVlOWFhOGE0Li5mMTU3ZDE4NmNiMjVi
YjI3NjIwNjZkYTgzZWM5MTQxMzNjZWY5NDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCkBAIC0zNywxMiArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmICFBU1NF
UlRfRElTQUJMRUQKIHN0YXRpYyBib29sIGlzU2luZ2xlVGFnTmFtZVNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yJiBzZWxlY3RvcikKIHsKLSAgICByZXR1cm4gc2VsZWN0b3IuaXNMYXN0SW5UYWdI
aXN0b3J5KCkgJiYgc2VsZWN0b3IubV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnOworICAgIHJl
dHVybiBzZWxlY3Rvci5pc0xhc3RJblRhZ0hpc3RvcnkoKSAmJiBzZWxlY3Rvci5tYXRjaCgpID09
IENTU1NlbGVjdG9yOjpUYWc7CiB9CiAKIHN0YXRpYyBib29sIGlzU2luZ2xlQ2xhc3NOYW1lU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQogewotICAgIHJldHVybiBzZWxlY3Rv
ci5pc0xhc3RJblRhZ0hpc3RvcnkoKSAmJiBzZWxlY3Rvci5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpDbGFzczsKKyAgICByZXR1cm4gc2VsZWN0b3IuaXNMYXN0SW5UYWdIaXN0b3J5KCkgJiYgc2Vs
ZWN0b3IubWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7CiB9CiAjZW5kaWYKIApAQCAtNTYs
NyArNTYsNyBAQCBzdGF0aWMgSWRNYXRjaGluZ1R5cGUgZmluZElkTWF0Y2hpbmdUeXBlKGNvbnN0
IENTU1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9yKQogewogICAgIGJvb2wgaW5SaWdodG1vc3QgPSB0
cnVlOwogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gJmZpcnN0U2VsZWN0
b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAg
ICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBp
ZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAgICAgICBp
ZiAoaW5SaWdodG1vc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIElkTWF0Y2hpbmdUeXBlOjpS
aWdodG1vc3Q7CiAgICAgICAgICAgICByZXR1cm4gSWRNYXRjaGluZ1R5cGU6OkZpbHRlcjsKQEAg
LTgwLDcgKzgwLDcgQEAgU2VsZWN0b3JEYXRhTGlzdDo6U2VsZWN0b3JEYXRhTGlzdChjb25zdCBD
U1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKICAgICBpZiAoc2VsZWN0b3JDb3VudCA9PSAx
KSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciA9ICptX3NlbGVjdG9ycy5m
aXJzdCgpLnNlbGVjdG9yOwogICAgICAgICBpZiAoc2VsZWN0b3IuaXNMYXN0SW5UYWdIaXN0b3J5
KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3IubV9tYXRjaCkgeworICAgICAgICAg
ICAgc3dpdGNoIChzZWxlY3Rvci5tYXRjaCgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpUYWc6CiAgICAgICAgICAgICAgICAgbV9tYXRjaFR5cGUgPSBUYWdOYW1lTWF0Y2g7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjgsNyArMTY4LDcgQEAgc3RhdGljIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvckZvcklkTG9va3VwKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3RO
b2RlLCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9ICZmaXJzdFNlbGVjdG9yOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBz
ZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NT
ZWxlY3Rvcjo6SWQpCiAgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3I7CiAgICAgICAgIGlmIChz
ZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgQ29udGFpbmVyTm9kZSYgZmls
dGVyUm9vdEJ5SWQoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IENTU1NlbGVjdG9yJgog
ICAgIC8vIFRodXMgd2UgY2FuIHNraXAgdGhlIHJpZ2h0bW9zdCBtYXRjaC4KICAgICBjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IgPSAmZmlyc3RTZWxlY3RvcjsKICAgICBkbyB7Ci0gICAgICAg
IEFTU0VSVChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6SWQpOworICAgICAgICBB
U1NFUlQoc2VsZWN0b3ItPm1hdGNoKCkgIT0gQ1NTU2VsZWN0b3I6OklkKTsKICAgICAgICAgaWYg
KHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7
CkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIENvbnRhaW5lck5vZGUmIGZpbHRlclJvb3RCeUlk
KENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBDU1NTZWxlY3RvciYKIAogICAgIGJvb2wg
aW5BZGphY2VudENoYWluID0gZmFsc2U7CiAgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9
IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0g
Q1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVG9N
YXRjaCA9IHNlbGVjdG9yLT52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKENvbnRhaW5lck5vZGUq
IHNlYXJjaFJvb3QgPSByb290Tm9kZS50cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChpZFRvTWF0
Y2gpKSB7CiAgICAgICAgICAgICAgICAgaWYgKExJS0VMWSghcm9vdE5vZGUudHJlZVNjb3BlKCku
Y29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGlkVG9NYXRjaCkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238041</attachid>
            <date>2014-09-12 11:42:52 -0700</date>
            <delta_ts>2014-09-12 12:24:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136784-20140912114249.patch</filename>
            <type>text/plain</type>
            <size>42256</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTI4NzNiYTJhZjBkN2I2
ZWY0OWU5ZDkzYjZlZmIwMDQ3ZjMxNzU3ZS4uODEyY2I1ZjE4YjNmN2YxMGQxNzdlM2JhYWMwZjE3
MGUyODgyOTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDE0LTA5LTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBhbGwgQ1NTU2VsZWN0
b3IgZGF0YSBtZW1iZXJzIHByaXZhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjc4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBv
dWxhaW4uCisKKyAgICAgICAgTWFrZSBhbGwgQ1NTU2VsZWN0b3IgZGF0YSBtZW1iZXJzIHByaXZh
dGUuIFByZXZpb3VzbHksIHNvbWUgb2YgdGhlIGRhdGEKKyAgICAgICAgbWVtYmVycyBzdWNoIGFz
IG1fcmVsYXRpb24gLyBtX21hdGNoIC8gbV9wc2V1ZG9UeXBlIHdlcmUgcHVibGljIGFuZAorICAg
ICAgICBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIG91dHNpZGUgdGhlIGNsYXNzLiBUaGUgbmV3IGFw
cHJvYWNoIGlzIGJldHRlcgorICAgICAgICBiZWNhdXNlOgorICAgICAgICAtIFRob3NlIG1lbWJl
cnMgYXJlIGJpdCBmaWVsZHMgc28gYnkgdXNpbmcgZ2V0dGVycywgd2UgY2FuIGhpZGUgdGhlCisg
ICAgICAgICAgY2FzdHMgaW5zaWRlIHRoZSBnZXR0ZXJzLiBUaGUgc2V0dGVycyBjYW4gbm93IGFs
c28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICAgICBiaXRmaWVsZCBpcyBiaWcgZW5vdWdoIHRvIGFj
dHVhbGx5IHN0b3JlIHRoZSBlbnVtIHZhbHVlLgorICAgICAgICAtIFdoZW4gdXNpbmcgdGhvc2Ug
aW4gc3dpdGNoKCkgc3RhdGVtZW50cywgdGhlIGNvbXBpbGVyIG5vdyBjb21wbGFpbnMKKyAgICAg
ICAgICBpZiB3ZSBmYWlsIHRvIHRlc3Qgc29tZSBvZiB0aGUgZW51bSB2YWx1ZXMgYXMgdGhlIHZh
bHVlIGlzIG5vdyBhbgorICAgICAgICAgIGVudW0sIGFuZCBub3QgbWVyZWx5IGFuIHVuc2lnbmVk
IGludGVnZXIuCisgICAgICAgIC0gU29tZSBvZiB0aGVzZSBtZW1iZXJzIGFscmVhZHkgaGFzIGdl
dHRlcnMgKGUuZy4gcmVsYXRpb24oKSkuCisgICAgICAgIC0gQmV0dGVyIGVuY2Fwc3VsYXRpb24u
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNl
bGVjdG9yOjpwYXJzZVBhZ2VQc2V1ZG9TZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50U2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudEN1ZUZ1bmN0aW9uU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRv
Q2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRQc2V1ZG9DbGFzc1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlclNlbGVjdG9yOjppc1NpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXJTZWxlY3Rvcjo6cHJlcGVuZFRhZ1NlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTUGFy
c2VyVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0TWF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnNldFJlbGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjppc1BzZXVkb0VsZW1lbnRDdWVG
dW5jdGlvbik6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpjcmVhdGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6c3BlY2lmaWNpdHlGb3JPbmVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTZWxlY3Rvcjo6c3BlY2lmaWNpdHlGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Nl
bGVjdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZWxl
Y3RvclRleHQpOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VsZWN0b3I6OnNldFBzZXVkb0VsZW1lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yOjpzZXRQYWdlUHNldWRvVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6cHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpzZXRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnBz
ZXVkb0VsZW1lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpwYWdlUHNl
dWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXRSZWxhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6bWF0Y2gpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3I6OnNldE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVj
dG9yOjptYXRjaGVzUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6aXNVbmtub3duUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6aXNDdXN0b21Qc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
Ojppc1NpYmxpbmdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6aXNB
dHRyaWJ1dGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OkNTU1NlbGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjp+Q1NTU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VsZWN0b3I6OnRhZ1FOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
Ojp2YWx1ZSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rvck5lZWRzTmFtZXNwYWNlUmVzb2x1dGlvbkZ1bmN0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGNzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjaGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMpOgorICAgICAgICAqIGNzcy9SdWxlRmVh
dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRmVhdHVyZVNldDo6Y29sbGVjdEZlYXR1
cmVzRnJvbVNlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OmRldGVybWluZVByb3BlcnR5V2hpdGVsaXN0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlU2V0OjphZGRSdWxlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseSk6
CisgICAgICAgIChXZWJDb3JlOjphbnlBdHRyaWJ1dGVNYXRjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUpOgorICAgICAgICAqIGNzcy9T
ZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXND
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JGaWx0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXMpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmNvbnN0cnVjdEZyYWdtZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudEF0dHJpYnV0ZU1hdGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmli
dXRlVmFsdWVNYXRjaGluZyk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNTaW5nbGVUYWdOYW1lU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNTaW5nbGVDbGFzc05hbWVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSWRN
YXRjaGluZ1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6U2VsZWN0
b3JEYXRhTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RvckZvcklkTG9va3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbHRlclJvb3RCeUlkKToKKwogMjAxNC0wOS0xMiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihy
MTczNDQxKTogW0dUS10gQWxsIGJ1dHRvbnMgYXBwZWFyIGluc2Vuc2l0aXZlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCmluZGV4IGQ0MmVkMDhkODcxYzkwODZlNzM2YjUzMDc4
ZmQyZWJiYmI5NTQ3YzAuLmMyMzZjNzM4ZDEzZjdiOWRiODNiMTBhMWVmZjUwNzNiNTlmYTk4NzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCkBAIC0xNjcsNyArMTY3LDcg
QEAgQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBhZ2VQc2V1ZG9T
ZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsK
LSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+bV9tYXRjaCA9IENTU1NlbGVjdG9yOjpQYWdlUHNl
dWRvQ2xhc3M7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpQYWdlUHNldWRvQ2xhc3MpOwogICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQYWdlUHNl
dWRvVHlwZShwc2V1ZG9UeXBlKTsKICAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwogfQpA
QCAtMTgyLDcgKzE4Miw3IEBAIENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6
cGFyc2VQc2V1ZG9FbGVtZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFy
c2VyU2VsZWN0b3I+KCk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPm1fbWF0Y2ggPSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudDsKKyAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0
Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwogICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9y
LT5zZXRQc2V1ZG9FbGVtZW50VHlwZShwc2V1ZG9UeXBlKTsKICAgICBzZWxlY3Rvci0+bV9zZWxl
Y3Rvci0+c2V0VmFsdWUobmFtZSk7CiAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKQEAg
LTE5OSw3ICsxOTksNyBAQCBDU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBh
cnNlUHNldWRvRWxlbWVudEN1ZUZ1bmN0aW9uU2VsZWN0b3IoY29ucwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNl
clNlbGVjdG9yPigpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5tX21hdGNoID0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnQ7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNo
KENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+
c2V0UHNldWRvRWxlbWVudFR5cGUoQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpOwogICAg
IHNlbGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3RvclZlY3Rvcik7CiAgICAgcmV0
dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKQEAgLTIxMSwxMyArMjExLDEzIEBAIENTU1BhcnNlclNl
bGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxp
dHlFbGVtZW50U2VsCiAgICAgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50
IHBzZXVkb1R5cGUgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJp
bmcocHNldWRvVHlwZVN0cmluZyk7CiAgICAgaWYgKHBzZXVkb1R5cGUucHNldWRvQ2xhc3MgIT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93bikgewogICAgICAgICBhdXRvIHNlbGVjdG9y
ID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICAgICAgc2VsZWN0
b3ItPm1fc2VsZWN0b3ItPm1fbWF0Y2ggPSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M7Ci0gICAg
ICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5tX3BzZXVkb1R5cGUgPSBwc2V1ZG9UeXBlLnBzZXVk
b0NsYXNzOworICAgICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzKTsKKyAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVk
b0NsYXNzVHlwZShwc2V1ZG9UeXBlLnBzZXVkb0NsYXNzKTsKICAgICAgICAgcmV0dXJuIHNlbGVj
dG9yLnJlbGVhc2UoKTsKICAgICB9CiAgICAgaWYgKHBzZXVkb1R5cGUuY29tcGF0aWJpbGl0eVBz
ZXVkb0VsZW1lbnQgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duKSB7CiAgICAg
ICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigp
OwotICAgICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+bV9tYXRjaCA9IENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbGVtZW50OworICAgICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwogICAgICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+
c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZS5jb21wYXRpYmlsaXR5UHNldWRvRWxlbWVu
dCk7CiAgICAgICAgIEF0b21pY1N0cmluZyBuYW1lID0gcHNldWRvVHlwZVN0cmluZzsKICAgICAg
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFZhbHVlKG5hbWUpOwpAQCAtMjYwLDEwICsyNjAs
MTAgQEAgdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGUKIAogdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6
c2V0UHNldWRvQ2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3Ry
aW5nKQogewotICAgIEFTU0VSVChtX3NlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzcyk7CisgICAgQVNTRVJUKG1fc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzKTsKIAogICAgIFBzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNldWRv
RWxlbWVudCBwc2V1ZG9UeXBlID0gcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVt
ZW50U3RyaW5nKHBzZXVkb0NsYXNzU3RyaW5nKTsKLSAgICBtX3NlbGVjdG9yLT5tX3BzZXVkb1R5
cGUgPSBwc2V1ZG9UeXBlLnBzZXVkb0NsYXNzOworICAgIG1fc2VsZWN0b3ItPnNldFBzZXVkb0Ns
YXNzVHlwZShwc2V1ZG9UeXBlLnBzZXVkb0NsYXNzKTsKIH0KIAogYm9vbCBDU1NQYXJzZXJTZWxl
Y3Rvcjo6aXNTaW1wbGUoKSBjb25zdApAQCAtMjc0LDcgKzI3NCw3IEBAIGJvb2wgQ1NTUGFyc2Vy
U2VsZWN0b3I6OmlzU2ltcGxlKCkgY29uc3QKICAgICBpZiAoIW1fdGFnSGlzdG9yeSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6VGFnKSB7CisgICAgaWYgKG1fc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6
OlRhZykgewogICAgICAgICAvLyBXZSBjYW4ndCBjaGVjayBhZ2FpbnN0IGFueVFOYW1lKCkgaGVy
ZSBiZWNhdXNlIG5hbWVzcGFjZSBtYXkgbm90IGJlIG51bGxBdG9tLgogICAgICAgICAvLyBFeGFt
cGxlOgogICAgICAgICAvLyAgICAgQG5hbWVzcGFjZSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciOwpAQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OnByZXBlbmRU
YWdTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdRTmFtZSwgYm9vbCB0CiAgICAgbV90
YWdIaXN0b3J5ID0gV1RGOjptb3ZlKHNlY29uZCk7CiAKICAgICBtX3NlbGVjdG9yID0gc3RkOjpt
YWtlX3VuaXF1ZTxDU1NTZWxlY3Rvcj4odGFnUU5hbWUsIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSk7
Ci0gICAgbV9zZWxlY3Rvci0+bV9yZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsK
KyAgICBtX3NlbGVjdG9yLT5zZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKaW5kZXggYjRmOTI2ZmVmZTFm
NTQyMDUxZjIzMzY0ZmU5NDlkZjUzMjAxMDM5YS4uZDUyNGEwNTc4ODdmODQ4MTEyOWVhMjc1YTcx
MmJhNDAzYjRiM2VjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZh
bHVlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaApAQCAtMTk1
LDggKzE5NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpIHsgbV9zZWxlY3Rvci0+c2V0VmFsdWUodmFsdWUpOyB9CiAgICAgdm9pZCBzZXRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUsIGJvb2wgaXNDYXNlSW5zZW5zaXRp
dmUpIHsgbV9zZWxlY3Rvci0+c2V0QXR0cmlidXRlKHZhbHVlLCBpc0Nhc2VJbnNlbnNpdGl2ZSk7
IH0KICAgICB2b2lkIHNldEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgbV9z
ZWxlY3Rvci0+c2V0QXJndW1lbnQodmFsdWUpOyB9Ci0gICAgdm9pZCBzZXRNYXRjaChDU1NTZWxl
Y3Rvcjo6TWF0Y2ggdmFsdWUpIHsgbV9zZWxlY3Rvci0+bV9tYXRjaCA9IHZhbHVlOyB9Ci0gICAg
dm9pZCBzZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gdmFsdWUpIHsgbV9zZWxlY3Rv
ci0+bV9yZWxhdGlvbiA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRNYXRjaChDU1NTZWxlY3Rvcjo6
TWF0Y2ggdmFsdWUpIHsgbV9zZWxlY3Rvci0+c2V0TWF0Y2godmFsdWUpOyB9CisgICAgdm9pZCBz
ZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gdmFsdWUpIHsgbV9zZWxlY3Rvci0+c2V0
UmVsYXRpb24odmFsdWUpOyB9CiAgICAgdm9pZCBzZXRGb3JQYWdlKCkgeyBtX3NlbGVjdG9yLT5z
ZXRGb3JQYWdlKCk7IH0KIAogCkBAIC0yMDksNyArMjA5LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb24oKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgICAgIHJldHVybiBtX3NlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50ICYmIG1fc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWU7CisgICAgICAgIHJldHVybiBtX3NlbGVjdG9y
LT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICYmIG1fc2VsZWN0b3ItPnBz
ZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWU7CiAjZWxz
ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
Y3BwCmluZGV4IDZjZWM0Mzk3NjAwOGE1Mzg0YzFmZWFmOGMzNWRhYTQ2ZDk2ODM5YmIuLjIxMzU2
ZjkwMmNjZjdmNzgxZTUwN2U1MGUyODRiNTc3ZjQ1MGM4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmNwcApAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiB2b2lkIENTU1NlbGVjdG9yOjpjcmVhdGVSYXJlRGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1fbWF0
Y2ggIT0gVGFnKTsKKyAgICBBU1NFUlQobWF0Y2goKSAhPSBUYWcpOwogICAgIGlmIChtX2hhc1Jh
cmVEYXRhKQogICAgICAgICByZXR1cm47CiAgICAgLy8gTW92ZSB0aGUgdmFsdWUgdG8gdGhlIHJh
cmUgZGF0YSBzdHVjdHVyZS4KQEAgLTg1LDEwICs4NSwxMiBAQCBpbmxpbmUgdW5zaWduZWQgQ1NT
U2VsZWN0b3I6OnNwZWNpZmljaXR5Rm9yT25lU2VsZWN0b3IoKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBQc2V1ZG8tZWxlbWVudHMgYW5kIHBzZXVkby1jbGFzc2VzIGRvIG5vdCBoYXZlIHRoZSBz
YW1lIHNwZWNpZmljaXR5LiBUaGlzIGZ1bmN0aW9uCiAgICAgLy8gaXNuJ3QgcXVpdGUgY29ycmVj
dC4KLSAgICBzd2l0Y2ggKG1fbWF0Y2gpIHsKKyAgICBzd2l0Y2ggKG1hdGNoKCkpIHsKICAgICBj
YXNlIElkOgogICAgICAgICByZXR1cm4gMHgxMDAwMDsKIAorICAgIGNhc2UgUGFnZVBzZXVkb0Ns
YXNzOgorICAgICAgICBicmVhazsKICAgICBjYXNlIFBzZXVkb0NsYXNzOgogICAgICAgICAvLyBG
SVhNRTogUHN1ZWRvQW55IHNob3VsZCBiYXNlIHRoZSBzcGVjaWZpY2l0eSBvbiB0aGUgc3ViLXNl
bGVjdG9ycy4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3d3dy1zdHlsZS8yMDEwU2VwLzA1MzAuaHRtbApAQCAtMTA1LDcgKzEwNyw2IEBAIGlubGlu
ZSB1bnNpZ25lZCBDU1NTZWxlY3Rvcjo6c3BlY2lmaWNpdHlGb3JPbmVTZWxlY3RvcigpIGNvbnN0
CiAgICAgY2FzZSBCZWdpbjoKICAgICBjYXNlIEVuZDoKICAgICAgICAgcmV0dXJuIDB4MTAwOwot
CiAgICAgY2FzZSBUYWc6CiAgICAgICAgIHJldHVybiAodGFnUU5hbWUoKS5sb2NhbE5hbWUoKSAh
PSBzdGFyQXRvbSkgPyAxIDogMDsKICAgICBjYXNlIFVua25vd246CkBAIC0xMjEsNyArMTIyLDcg
QEAgdW5zaWduZWQgQ1NTU2VsZWN0b3I6OnNwZWNpZmljaXR5Rm9yUGFnZSgpIGNvbnN0CiAgICAg
dW5zaWduZWQgcyA9IDA7CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBjb21wb25lbnQg
PSB0aGlzOyBjb21wb25lbnQ7IGNvbXBvbmVudCA9IGNvbXBvbmVudC0+dGFnSGlzdG9yeSgpKSB7
Ci0gICAgICAgIHN3aXRjaCAoY29tcG9uZW50LT5tX21hdGNoKSB7CisgICAgICAgIHN3aXRjaCAo
Y29tcG9uZW50LT5tYXRjaCgpKSB7CiAgICAgICAgIGNhc2UgVGFnOgogICAgICAgICAgICAgcyAr
PSB0YWdRTmFtZSgpLmxvY2FsTmFtZSgpID09IHN0YXJBdG9tID8gMCA6IDQ7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTIwOCwxMyArMjA5LDEzIEBAIGJvb2wgQ1NTU2VsZWN0b3I6Om9wZXJhdG9y
PT0oY29uc3QgQ1NTU2VsZWN0b3ImIG90aGVyKSBjb25zdAogICAgIHdoaWxlIChzZWwxICYmIHNl
bDIpIHsKICAgICAgICAgaWYgKHNlbDEtPmF0dHJpYnV0ZSgpICE9IHNlbDItPmF0dHJpYnV0ZSgp
CiAgICAgICAgICAgICB8fCBzZWwxLT5yZWxhdGlvbigpICE9IHNlbDItPnJlbGF0aW9uKCkKLSAg
ICAgICAgICAgIHx8IHNlbDEtPm1fbWF0Y2ggIT0gc2VsMi0+bV9tYXRjaAorICAgICAgICAgICAg
fHwgc2VsMS0+bWF0Y2goKSAhPSBzZWwyLT5tYXRjaCgpCiAgICAgICAgICAgICB8fCBzZWwxLT52
YWx1ZSgpICE9IHNlbDItPnZhbHVlKCkKICAgICAgICAgICAgIHx8IHNlbDEtPm1fcHNldWRvVHlw
ZSAhPSBzZWwyLT5tX3BzZXVkb1R5cGUKICAgICAgICAgICAgIHx8IHNlbDEtPmFyZ3VtZW50KCkg
IT0gc2VsMi0+YXJndW1lbnQoKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzZWwxLT5tX21hdGNoID09IFRhZykgeworICAgICAgICBpZiAoc2Vs
MS0+bWF0Y2goKSA9PSBUYWcpIHsKICAgICAgICAgICAgIGlmIChzZWwxLT50YWdRTmFtZSgpICE9
IHNlbDItPnRhZ1FOYW1lKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CkBAIC0yNDksNyArMjUwLDcgQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQo
Y29uc3QgU3RyaW5nJiByaWdodFNpZGUpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHI7
CiAKLSAgICBpZiAobV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFtX3RhZ0lzRm9yTmFt
ZXNwYWNlUnVsZSkgeworICAgIGlmIChtYXRjaCgpID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIW1f
dGFnSXNGb3JOYW1lc3BhY2VSdWxlKSB7CiAgICAgICAgIGlmICh0YWdRTmFtZSgpLnByZWZpeCgp
LmlzTnVsbCgpKQogICAgICAgICAgICAgc3RyLmFwcGVuZCh0YWdRTmFtZSgpLmxvY2FsTmFtZSgp
KTsKICAgICAgICAgZWxzZSB7CkBAIC0yNjEsMTMgKzI2MiwxMyBAQCBTdHJpbmcgQ1NTU2VsZWN0
b3I6OnNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHJpZ2h0U2lkZSkgY29uc3QKIAogICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBjcyA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
aWYgKGNzLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBpZiAoY3MtPm1h
dGNoKCkgPT0gQ1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAgICAgICBzdHIuYXBwZW5kKCcjJyk7
CiAgICAgICAgICAgICBzZXJpYWxpemVJZGVudGlmaWVyKGNzLT52YWx1ZSgpLCBzdHIpOwotICAg
ICAgICB9IGVsc2UgaWYgKGNzLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgeworICAg
ICAgICB9IGVsc2UgaWYgKGNzLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpDbGFzcykgewogICAg
ICAgICAgICAgc3RyLmFwcGVuZCgnLicpOwogICAgICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmll
cihjcy0+dmFsdWUoKSwgc3RyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjcy0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjcy0+bWF0Y2go
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKICAgICAgICAgICAgIHN3aXRjaCAoY3Mt
PnBzZXVkb0NsYXNzVHlwZSgpKSB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbmltYXRpbmdGdWxsU2NyZWVuVHJh
bnNpdGlvbjoKQEAgLTQ2OSw3ICs0NzAsNyBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9y
VGV4dChjb25zdCBTdHJpbmcmIHJpZ2h0U2lkZSkgY29uc3QKICAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93bjoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjcy0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgeworICAgICAgICB9IGVsc2UgaWYgKGNz
LT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgICAgICBz
dHIuYXBwZW5kTGl0ZXJhbCgiOjoiKTsKICAgICAgICAgICAgIHN0ci5hcHBlbmQoY3MtPnZhbHVl
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNzLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKQEAg
LTQ4MCw3ICs0ODEsNyBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dChjb25zdCBT
dHJpbmcmIHJpZ2h0U2lkZSkgY29uc3QKICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKCd8Jyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHIuYXBwZW5kKGNzLT5hdHRyaWJ1dGUoKS5s
b2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNzLT5tX21hdGNoKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGNzLT5tYXRjaCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6RXhhY3Q6CiAgICAgICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQoJz0nKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MDYsMTEgKzUwNywxMSBAQCBTdHJpbmcgQ1NTU2Vs
ZWN0b3I6OnNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHJpZ2h0U2lkZSkgY29uc3QKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChjcy0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6U2V0KSB7
CisgICAgICAgICAgICBpZiAoY3MtPm1hdGNoKCkgIT0gQ1NTU2VsZWN0b3I6OlNldCkgewogICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZVN0cmluZyhjcy0+dmFsdWUoKSwgc3RyKTsKICAgICAgICAg
ICAgICAgICBzdHIuYXBwZW5kKCddJyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoY3MtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzcykgeworICAgICAg
ICB9IGVsc2UgaWYgKGNzLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3Mp
IHsKICAgICAgICAgICAgIHN3aXRjaCAoY3MtPnBhZ2VQc2V1ZG9DbGFzc1R5cGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBQYWdlUHNldWRvQ2xhc3NGaXJzdDoKICAgICAgICAgICAgICAgICBzdHIu
YXBwZW5kTGl0ZXJhbCgiOmZpcnN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCmluZGV4IDMx
YzUzYjA0YmNiNGRhMWIxZjdjMjljZmI2MDdiNDY5NmY4YWMxNGIuLmI4MTczNjdmNjZiMWM3Zjcw
ZGI3M2NjZTFjMzVhNzliM2MyZGQ2NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCkBAIC0y
MDUsOCArMjA1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGFyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5t
X3JhcmVEYXRhLT5tX2FyZ3VtZW50IDogbnVsbEF0b207IH0KICAgICAgICAgY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QoKSBjb25zdCB7IHJldHVybiBtX2hhc1JhcmVEYXRhID8g
bV9kYXRhLm1fcmFyZURhdGEtPm1fc2VsZWN0b3JMaXN0LmdldCgpIDogMDsgfQogCi0gICAgICAg
IHZvaWQgc2V0UHNldWRvRWxlbWVudFR5cGUoUHNldWRvRWxlbWVudFR5cGUgcHNldWRvRWxlbWVu
dFR5cGUpIHsgbV9wc2V1ZG9UeXBlID0gcHNldWRvRWxlbWVudFR5cGU7IH0KLSAgICAgICAgdm9p
ZCBzZXRQYWdlUHNldWRvVHlwZShQYWdlUHNldWRvQ2xhc3NUeXBlIHBhZ2VQc2V1ZG9UeXBlKSB7
IG1fcHNldWRvVHlwZSA9IHBhZ2VQc2V1ZG9UeXBlOyB9CiAgICAgICAgIHZvaWQgc2V0VmFsdWUo
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBib29sIGlzQ2FzZUluc2Vuc2l0aXZlKTsKICAgICAgICAgdm9pZCBzZXRB
cmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmKTsKQEAgLTIxOSwyMSArMjE3LDM2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBQc2V1ZG9DbGFzc1R5cGUgcHNldWRvQ2xhc3NUeXBl
KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fbWF0Y2ggPT0gUHNldWRv
Q2xhc3MpOworICAgICAgICAgICAgQVNTRVJUKG1hdGNoKCkgPT0gUHNldWRvQ2xhc3MpOwogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBzZXVkb0NsYXNzVHlwZT4obV9wc2V1ZG9UeXBl
KTsKICAgICAgICAgfQorICAgICAgICB2b2lkIHNldFBzZXVkb0NsYXNzVHlwZShQc2V1ZG9DbGFz
c1R5cGUgcHNldWRvVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9wc2V1ZG9UeXBlID0g
cHNldWRvVHlwZTsKKyAgICAgICAgICAgIEFTU0VSVChtX3BzZXVkb1R5cGUgPT0gcHNldWRvVHlw
ZSk7CisgICAgICAgIH0KIAogICAgICAgICBQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9FbGVtZW50
VHlwZSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX21hdGNoID09IFBz
ZXVkb0VsZW1lbnQpOworICAgICAgICAgICAgQVNTRVJUKG1hdGNoKCkgPT0gUHNldWRvRWxlbWVu
dCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHNldWRvRWxlbWVudFR5cGU+KG1f
cHNldWRvVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRQc2V1ZG9FbGVtZW50VHlw
ZShQc2V1ZG9FbGVtZW50VHlwZSBwc2V1ZG9FbGVtZW50VHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9wc2V1ZG9UeXBlID0gcHNldWRvRWxlbWVudFR5cGU7CisgICAgICAgICAgICBBU1NF
UlQobV9wc2V1ZG9UeXBlID09IHBzZXVkb0VsZW1lbnRUeXBlKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIFBhZ2VQc2V1ZG9DbGFzc1R5cGUgcGFnZVBzZXVkb0NsYXNzVHlwZSgpIGNvbnN0CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX21hdGNoID09IFBhZ2VQc2V1ZG9DbGFzcyk7Cisg
ICAgICAgICAgICBBU1NFUlQobWF0Y2goKSA9PSBQYWdlUHNldWRvQ2xhc3MpOwogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhZ2VQc2V1ZG9DbGFzc1R5cGU+KG1fcHNldWRvVHlwZSk7
CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRQYWdlUHNldWRvVHlwZShQYWdlUHNldWRvQ2xh
c3NUeXBlIHBhZ2VQc2V1ZG9UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3BzZXVkb1R5
cGUgPSBwYWdlUHNldWRvVHlwZTsKKyAgICAgICAgICAgIEFTU0VSVChtX3BzZXVkb1R5cGUgPT0g
cGFnZVBzZXVkb1R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgYm9vbCBtYXRjaGVzUHNldWRv
RWxlbWVudCgpIGNvbnN0OwogICAgICAgICBib29sIGlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSBj
b25zdDsKQEAgLTI0Miw2ICsyNTUsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIGlzQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdDsKIAogICAgICAgICBSZWxhdGlvbiByZWxh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbGF0aW9uPihtX3JlbGF0aW9uKTsg
fQorICAgICAgICB2b2lkIHNldFJlbGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICBtX3JlbGF0aW9uID0gcmVsYXRpb247CisgICAgICAgICAgICBBU1NFUlQo
bV9yZWxhdGlvbiA9PSByZWxhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBNYXRjaCBtYXRj
aCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE1hdGNoPihtX21hdGNoKTsgfQorICAgICAg
ICB2b2lkIHNldE1hdGNoKE1hdGNoIG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBtX21h
dGNoID0gbWF0Y2g7CisgICAgICAgICAgICBBU1NFUlQobV9tYXRjaCA9PSBtYXRjaCk7CisgICAg
ICAgIH0KIAogICAgICAgICBib29sIGlzTGFzdEluU2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9pc0xhc3RJblNlbGVjdG9yTGlzdDsgfQogICAgICAgICB2b2lkIHNldExhc3RJblNlbGVj
dG9yTGlzdCgpIHsgbV9pc0xhc3RJblNlbGVjdG9yTGlzdCA9IHRydWU7IH0KQEAgLTI1MywxMSAr
Mjc4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc0ZvclBhZ2UoKSBj
b25zdCB7IHJldHVybiBtX2lzRm9yUGFnZTsgfQogICAgICAgICB2b2lkIHNldEZvclBhZ2UoKSB7
IG1faXNGb3JQYWdlID0gdHJ1ZTsgfQogCisgICAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQg
bV9yZWxhdGlvbiAgICAgICAgICAgOiAzOyAvLyBlbnVtIFJlbGF0aW9uCiAgICAgICAgIG11dGFi
bGUgdW5zaWduZWQgbV9tYXRjaCAgICAgIDogNDsgLy8gZW51bSBNYXRjaAogICAgICAgICBtdXRh
YmxlIHVuc2lnbmVkIG1fcHNldWRvVHlwZSA6IDg7IC8vIFBzZXVkb1R5cGUKLQotICAgIHByaXZh
dGU6CiAgICAgICAgIG11dGFibGUgYm9vbCBtX3BhcnNlZE50aCAgICAgIDogMTsgLy8gVXNlZCBm
b3IgOm50aC0qCiAgICAgICAgIGJvb2wgbV9pc0xhc3RJblNlbGVjdG9yTGlzdCAgIDogMTsKICAg
ICAgICAgYm9vbCBtX2lzTGFzdEluVGFnSGlzdG9yeSAgICAgOiAxOwpAQCAtMzE1LDE3ICszMzks
MTcgQEAgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU2VsZWN0b3I6OmF0dHJpYnV0ZUNh
bm9uaWNhbExvY2FsTmFtZSgpIGNvbnN0CiAKIGlubGluZSBib29sIENTU1NlbGVjdG9yOjptYXRj
aGVzUHNldWRvRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWF0Y2ggPT0gUHNldWRv
RWxlbWVudDsKKyAgICByZXR1cm4gbWF0Y2goKSA9PSBQc2V1ZG9FbGVtZW50OwogfQogCiBpbmxp
bmUgYm9vbCBDU1NTZWxlY3Rvcjo6aXNVbmtub3duUHNldWRvRWxlbWVudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fbWF0Y2ggPT0gUHNldWRvRWxlbWVudCAmJiBtX3BzZXVkb1R5cGUgPT0gUHNl
dWRvRWxlbWVudFVua25vd247CisgICAgcmV0dXJuIG1hdGNoKCkgPT0gUHNldWRvRWxlbWVudCAm
JiBwc2V1ZG9FbGVtZW50VHlwZSgpID09IFBzZXVkb0VsZW1lbnRVbmtub3duOwogfQogCiBpbmxp
bmUgYm9vbCBDU1NTZWxlY3Rvcjo6aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9tYXRjaCA9PSBQc2V1ZG9FbGVtZW50ICYmIChtX3BzZXVkb1R5cGUgPT0gUHNl
dWRvRWxlbWVudFVzZXJBZ2VudEN1c3RvbSB8fCBtX3BzZXVkb1R5cGUgPT0gUHNldWRvRWxlbWVu
dFdlYktpdEN1c3RvbSk7CisgICAgcmV0dXJuIG1hdGNoKCkgPT0gUHNldWRvRWxlbWVudCAmJiAo
cHNldWRvRWxlbWVudFR5cGUoKSA9PSBQc2V1ZG9FbGVtZW50VXNlckFnZW50Q3VzdG9tIHx8IHBz
ZXVkb0VsZW1lbnRUeXBlKCkgPT0gUHNldWRvRWxlbWVudFdlYktpdEN1c3RvbSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBwc2V1ZG9DbGFzc0lzUmVsYXRpdmVUb1NpYmxpbmdzKENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc1R5cGUgdHlwZSkKQEAgLTM0NSwyNSArMzY5LDI1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBwc2V1ZG9DbGFzc0lzUmVsYXRpdmVUb1NpYmxpbmdzKENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1R5cGUKIAogaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6OmlzU2libGluZ1NlbGVj
dG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZWxhdGlvbiA9PSBEaXJlY3RBZGphY2VudAot
ICAgICAgICB8fCBtX3JlbGF0aW9uID09IEluZGlyZWN0QWRqYWNlbnQKLSAgICAgICAgfHwgKG1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmIHBzZXVkb0NsYXNzSXNSZWxhdGl2
ZVRvU2libGluZ3MocHNldWRvQ2xhc3NUeXBlKCkpKTsKKyAgICByZXR1cm4gcmVsYXRpb24oKSA9
PSBEaXJlY3RBZGphY2VudAorICAgICAgICB8fCByZWxhdGlvbigpID09IEluZGlyZWN0QWRqYWNl
bnQKKyAgICAgICAgfHwgKG1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmIHBz
ZXVkb0NsYXNzSXNSZWxhdGl2ZVRvU2libGluZ3MocHNldWRvQ2xhc3NUeXBlKCkpKTsKIH0KIAog
aW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6OmlzQXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdAogewot
ICAgIHJldHVybiBtX21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdAotICAgICAgICB8fCBtX21h
dGNoID09ICBDU1NTZWxlY3Rvcjo6U2V0Ci0gICAgICAgIHx8IG1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6Okxpc3QKLSAgICAgICAgfHwgbV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SHlwaGVuCi0gICAg
ICAgIHx8IG1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNvbnRhaW4KLSAgICAgICAgfHwgbV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6QmVnaW4KLSAgICAgICAgfHwgbV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6RW5kOworICAgIHJldHVybiBtYXRjaCgpID09IENTU1NlbGVjdG9yOjpFeGFjdAorICAgICAg
ICB8fCBtYXRjaCgpID09ICBDU1NTZWxlY3Rvcjo6U2V0CisgICAgICAgIHx8IG1hdGNoKCkgPT0g
Q1NTU2VsZWN0b3I6Okxpc3QKKyAgICAgICAgfHwgbWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6SHlw
aGVuCisgICAgICAgIHx8IG1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OkNvbnRhaW4KKyAgICAgICAg
fHwgbWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6QmVnaW4KKyAgICAgICAgfHwgbWF0Y2goKSA9PSBD
U1NTZWxlY3Rvcjo6RW5kOwogfQogCiBpbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0VmFsdWUo
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQobV9tYXRjaCAhPSBUYWcp
OworICAgIEFTU0VSVChtYXRjaCgpICE9IFRhZyk7CiAgICAgLy8gTmVlZCB0byBkbyByZWYgY291
bnRpbmcgbWFudWFsbHkgZm9yIHRoZSB1bmlvbi4KICAgICBpZiAobV9oYXNSYXJlRGF0YSkgewog
ICAgICAgICBpZiAobV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUpCkBAIC00MTcsNyArNDQxLDcg
QEAgaW5saW5lIENTU1NlbGVjdG9yOjpDU1NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciYgbykK
ICAgICAsIG1faXNGb3JQYWdlKG8ubV9pc0ZvclBhZ2UpCiAgICAgLCBtX3RhZ0lzRm9yTmFtZXNw
YWNlUnVsZShvLm1fdGFnSXNGb3JOYW1lc3BhY2VSdWxlKQogewotICAgIGlmIChvLm1fbWF0Y2gg
PT0gVGFnKSB7CisgICAgaWYgKG8ubWF0Y2goKSA9PSBUYWcpIHsKICAgICAgICAgbV9kYXRhLm1f
dGFnUU5hbWUgPSBvLm1fZGF0YS5tX3RhZ1FOYW1lOwogICAgICAgICBtX2RhdGEubV90YWdRTmFt
ZS0+cmVmKCk7CiAgICAgfSBlbHNlIGlmIChvLm1faGFzUmFyZURhdGEpIHsKQEAgLTQzMSw3ICs0
NTUsNyBAQCBpbmxpbmUgQ1NTU2VsZWN0b3I6OkNTU1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
JiBvKQogCiBpbmxpbmUgQ1NTU2VsZWN0b3I6On5DU1NTZWxlY3RvcigpCiB7Ci0gICAgaWYgKG1f
bWF0Y2ggPT0gVGFnKQorICAgIGlmIChtYXRjaCgpID09IFRhZykKICAgICAgICAgbV9kYXRhLm1f
dGFnUU5hbWUtPmRlcmVmKCk7CiAgICAgZWxzZSBpZiAobV9oYXNSYXJlRGF0YSkKICAgICAgICAg
bV9kYXRhLm1fcmFyZURhdGEtPmRlcmVmKCk7CkBAIC00NDEsMTMgKzQ2NSwxMyBAQCBpbmxpbmUg
Q1NTU2VsZWN0b3I6On5DU1NTZWxlY3RvcigpCiAKIGlubGluZSBjb25zdCBRdWFsaWZpZWROYW1l
JiBDU1NTZWxlY3Rvcjo6dGFnUU5hbWUoKSBjb25zdAogewotICAgIEFTU0VSVChtX21hdGNoID09
IFRhZyk7CisgICAgQVNTRVJUKG1hdGNoKCkgPT0gVGFnKTsKICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgUXVhbGlmaWVkTmFtZSo+KCZtX2RhdGEubV90YWdRTmFtZSk7CiB9CiAK
IGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIENTU1NlbGVjdG9yOjp2YWx1ZSgpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKG1fbWF0Y2ggIT0gVGFnKTsKKyAgICBBU1NFUlQobWF0Y2goKSAhPSBUYWcp
OwogICAgIC8vIEF0b21pY1N0cmluZyBpcyByZWFsbHkganVzdCBhbiBBdG9taWNTdHJpbmdJbXBs
KiBzbyB0aGUgY2FzdCBiZWxvdyBpcyBzYWZlLgogICAgIC8vIEZJWE1FOiBQZXJoYXBzIGNhbGwg
c2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBhY2NlcHQgQXRvbWljU3RyaW5nSW1wbD8KICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nKj4obV9oYXNSYXJlRGF0
YSA/ICZtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSA6ICZtX2RhdGEubV92YWx1ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCmluZGV4IDAzNzY0MWM2MmNmMmExNGYyNGM5
ZDk4M2VjYzRkZWNkNTgzYzM4N2IuLjRlMmI3YjkzMGQwZDNlYmQ2MjhiZGU3NDNkNTVjZmZhYWQ3
YTNiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCkBAIC0xNjYsNyAr
MTY2LDcgQEAgY2xhc3MgU2VsZWN0b3JOZWVkc05hbWVzcGFjZVJlc29sdXRpb25GdW5jdG9yIHsK
IHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
KQogICAgIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpU
YWcgJiYgc2VsZWN0b3ItPnRhZ1FOYW1lKCkucHJlZml4KCkgIT0gbnVsbEF0b20gJiYgc2VsZWN0
b3ItPnRhZ1FOYW1lKCkucHJlZml4KCkgIT0gc3RhckF0b20pCisgICAgICAgIGlmIChzZWxlY3Rv
ci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmIHNlbGVjdG9yLT50YWdRTmFtZSgpLnBy
ZWZpeCgpICE9IG51bGxBdG9tICYmIHNlbGVjdG9yLT50YWdRTmFtZSgpLnByZWZpeCgpICE9IHN0
YXJBdG9tKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChzZWxlY3Rvci0+
aXNBdHRyaWJ1dGVTZWxlY3RvcigpICYmIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5wcmVmaXgoKSAh
PSBudWxsQXRvbSAmJiBzZWxlY3Rvci0+YXR0cmlidXRlKCkucHJlZml4KCkgIT0gc3RhckF0b20p
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xs
ZWN0b3IuY3BwCmluZGV4IDM2MmNkN2VhYzc0NmI0NTJmZGIwZTVhYmRiMjkxZWIwNzc1YzI3YWEu
LjgzOWU4NzhmMjk1MjA1ZTE0ZGJlMGFiYjhkODEwYzIwZDEzMGY5ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcApAQCAtOTIsMTEgKzkyLDExIEBAIHZvaWQgUGFn
ZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVm
dFBhZ2UsIGJvb2wgaXNGCiBzdGF0aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMo
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJz
dFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCiB7CiAgICAgZm9yIChjb25zdCBDU1NTZWxl
Y3RvciogY29tcG9uZW50ID0gc2VsZWN0b3I7IGNvbXBvbmVudDsgY29tcG9uZW50ID0gY29tcG9u
ZW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKGNvbXBvbmVudC0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6VGFnKSB7CisgICAgICAgIGlmIChjb21wb25lbnQtPm1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OlRhZykgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUgPSBjb21wb25lbnQtPnRhZ1FOYW1lKCkubG9jYWxOYW1lKCk7CiAgICAgICAgICAgICBpZiAo
bG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBwYWdlTmFtZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50LT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3MpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChjb21wb25lbnQtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzcykgewog
ICAgICAgICAgICAgQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc1R5cGUgcHNldWRvVHlwZSA9
IGNvbXBvbmVudC0+cGFnZVBzZXVkb0NsYXNzVHlwZSgpOwogICAgICAgICAgICAgaWYgKChwc2V1
ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3NMZWZ0ICYmICFpc0xlZnRQYWdl
KQogICAgICAgICAgICAgICAgIHx8IChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQYWdlUHNl
dWRvQ2xhc3NSaWdodCAmJiBpc0xlZnRQYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1J1bGVGZWF0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAK
aW5kZXggNWM0OWJhZmVhOTI2Njc5NTA5YmU2NmUzZTc5ZjEwNzc5YmMzMGFkZC4uNThkZTVkNWFh
MmVkMmM2MDNkZmM0NGFmY2U5NmFiZTQ4MDQzYzRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVGZWF0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1
cmUuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFJ1
bGVGZWF0dXJlU2V0Ojpjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yKQogewotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6SWQpCisgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpJZCkKICAg
ICAgICAgaWRzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICBlbHNl
IGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCisgICAgZWxzZSBp
ZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgICAgICBjbGFz
c2VzSW5SdWxlcy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKICAgICBlbHNlIGlmIChz
ZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAgICAgICAgIGF0dHJpYnV0ZUNhbm9u
aWNhbExvY2FsTmFtZXNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRlQ2Fub25pY2FsTG9j
YWxOYW1lKCkuaW1wbCgpKTsKICAgICAgICAgYXR0cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuYWRk
KHNlbGVjdG9yLT5hdHRyaWJ1dGUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIH0gZWxzZSBp
ZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKKyAg
ICB9IGVsc2UgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50KSB7CiAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEZpcnN0TGluZToKICAgICAg
ICAgICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKaW5k
ZXggZWU0MTc1ZGViMDZiNjlmMDY5YmVjOTQzMDk1YzZiNjhiNzg3YmYwYy4uYjcxZTk5NjNkYmQ5
MDQ5ODkzMGQzNzFjODUwNDg5OTA2ZTVmMzM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAt
NTgsMTMgKzU4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1M
QmFzZWRPblJ1bGVIYXNoKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlCiAgICAgaWYgKHNlbGVjdG9y
LnRhZ0hpc3RvcnkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHNlbGVjdG9y
Lm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZykgeworICAgIGlmIChzZWxlY3Rvci5tYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpUYWcpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxl
Y3Rvck5hbWVzcGFjZSA9IHNlbGVjdG9yLnRhZ1FOYW1lKCkubmFtZXNwYWNlVVJJKCk7CiAgICAg
ICAgIHJldHVybiBzZWxlY3Rvck5hbWVzcGFjZSA9PSBzdGFyQXRvbSB8fCBzZWxlY3Rvck5hbWVz
cGFjZSA9PSB4aHRtbE5hbWVzcGFjZVVSSTsKICAgICB9CiAgICAgaWYgKFNlbGVjdG9yQ2hlY2tl
cjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKCZzZWxlY3RvcikpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIHJldHVybiBzZWxlY3Rvci5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8
fCBzZWxlY3Rvci5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKKyAgICByZXR1cm4gc2Vs
ZWN0b3IubWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3IubWF0Y2goKSA9PSBD
U1NTZWxlY3Rvcjo6Q2xhc3M7CiB9CiAKIHN0YXRpYyBib29sIHNlbGVjdG9yQ2FuTWF0Y2hQc2V1
ZG9FbGVtZW50KGNvbnN0IENTU1NlbGVjdG9yJiByb290U2VsZWN0b3IpCkBAIC0xMzUsNyArMTM1
LDcgQEAgc3RhdGljIGlubGluZSBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgZGV0ZXJtaW5lUHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKGNvbnN0IEFkZFJ1bGUKICAgICAgICAgcmV0dXJuIFByb3BlcnR5V2hp
dGVsaXN0UmVnaW9uOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBmb3IgKGNvbnN0IENT
U1NlbGVjdG9yKiBjb21wb25lbnQgPSBzZWxlY3RvcjsgY29tcG9uZW50OyBjb21wb25lbnQgPSBj
b21wb25lbnQtPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoY29tcG9uZW50LT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICYmIChjb21wb25lbnQtPnBzZXVkb0VsZW1l
bnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUgfHwgY29tcG9uZW50LT52
YWx1ZSgpID09IFRleHRUcmFja0N1ZTo6Y3VlU2hhZG93UHNldWRvSWQoKSkpCisgICAgICAgIGlm
IChjb21wb25lbnQtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgKGNv
bXBvbmVudC0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dEN1ZSB8fCBjb21wb25lbnQtPnZhbHVlKCkgPT0gVGV4dFRyYWNrQ3VlOjpjdWVTaGFkb3dQc2V1
ZG9JZCgpKSkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eVdoaXRlbGlzdEN1ZTsKICAgICB9
CiAjZWxzZQpAQCAtMjE0LDEzICsyMTQsMTMgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxl
UnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgQWRkUnVsZUZsYWdzIGFkZFIKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogZm9jdXNTZWxlY3RvciA9IG51bGxwdHI7CiAgICAgY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsKICAgICBkbyB7Ci0g
ICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKKyAgICAg
ICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpJZCkgewogICAgICAgICAg
ICAgYWRkVG9SdWxlU2V0KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBydWxl
RGF0YSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbGVtZW50ICYmIHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50Q3VlKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICAgICAgbV9j
dWVQc2V1ZG9SdWxlcy5hcHBlbmQocnVsZURhdGEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVs
ZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgQWRkUnVsZUZsYWdzIGFkZFIKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpDbGFzcykgewogICAgICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCog
Y2xhc3NOYW1lID0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOwogICAgICAgICAgICAgaWYgKCFj
bGFzc1NlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgY2xhc3NTZWxlY3RvciA9IHNlbGVjdG9y
OwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1
bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFkZFJ1bGVGbGFncyBhZGRSCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlRhZyAmJiBzZWxlY3Rvci0+dGFnUU5hbWUoKS5sb2NhbE5hbWUoKSAhPSBzdGFyQXRv
bSkKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpUYWcgJiYg
c2VsZWN0b3ItPnRhZ1FOYW1lKCkubG9jYWxOYW1lKCkgIT0gc3RhckF0b20pCiAgICAgICAgICAg
ICB0YWdTZWxlY3RvciA9IHNlbGVjdG9yOwogCiAgICAgICAgIGlmIChTZWxlY3RvckNoZWNrZXI6
OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZWU2MjNjNjI3YWY3NjQ3ODA0ZTk4N2ZlODRlMTZh
NjA3YzJjMmFkNy4uYmU3NDIwN2JlZjViNDc4NGZlZjY0YzEzMzUyMzg0ZTNlNjcwYzZmMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTIyNCw3ICsyMjQsNyBAQCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShj
b25zdCBDaGVja2luZ0NvbnRleHRXaQogICAgIGlmICghY2hlY2tPbmUoY29udGV4dCkpCiAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKIAotICAgIGlmIChjb250ZXh0LnNlbGVj
dG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CisgICAgaWYgKGNv
bnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsK
ICAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRl
IGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KICAgICAg
ICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmll
cyB0aGlzIGNhc2UuCiAgICAgICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNz
KQpAQCAtMzM3LDcgKzMzNyw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JDaGVj
a2VyOjptYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpCiAgICAgICAgIG5l
eHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9O
OwogICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VV
RE8KICAgICAgICAgICAgICYmICFuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8KLSAgICAg
ICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvICYmIG5leHRDb250ZXh0
LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAg
ICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBuZXh0Q29udGV4dC5z
ZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICByZXR1cm4gbWF0Y2hS
ZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CiAKQEAgLTQyNyw3ICs0Mjcs
NyBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYwogICAgICAgICBpZiAoIWF0dHJpYnV0ZS5tYXRj
aGVzKHNlbGVjdG9yQXR0ci5wcmVmaXgoKSwgZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpID8gc2Vs
ZWN0b3ItPmF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSgpIDogc2VsZWN0b3JBdHRyLmxvY2Fs
TmFtZSgpLCBzZWxlY3RvckF0dHIubmFtZXNwYWNlVVJJKCkpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhhdHRyaWJ1dGUsIHN0YXRp
Y19jYXN0PENTU1NlbGVjdG9yOjpNYXRjaD4oc2VsZWN0b3ItPm1fbWF0Y2gpLCBzZWxlY3Rvci0+
dmFsdWUoKSwgY2FzZVNlbnNpdGl2ZSkpCisgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZU1hdGNo
ZXMoYXR0cmlidXRlLCBzZWxlY3Rvci0+bWF0Y2goKSwgc2VsZWN0b3ItPnZhbHVlKCksIGNhc2VT
ZW5zaXRpdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00NTEsNyAr
NDUxLDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb24KICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IGNvbnRleHQuZmlyc3RTZWxl
Y3Rvck9mVGhlRnJhZ21lbnQ7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCkpIHsKLSAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgICAgICBz
d2l0Y2ggKHNlbGVjdG9yLT5tYXRjaCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRh
ZzoKICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+dGFnUU5hbWUoKSAhPSBhbnlRTmFtZSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDk2LDEzICs0OTYsMTMgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMm
IGNvbnRleHQpIGNvbnN0CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIEFTU0VSVChzZWxlY3Rv
cik7CiAKLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZykKKyAg
ICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlRhZykKICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvci0+dGFnUU5h
bWUoKSk7CiAKLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNz
KQorICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCiAgICAg
ICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5j
b250YWlucyhzZWxlY3Rvci0+dmFsdWUoKSk7CiAKLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OklkKQorICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxl
Y3Rvcjo6SWQpCiAgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CiAKICAgICBpZiAoc2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgewpAQCAtNTE2LDcgKzUxNiw3IEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKKyAg
ICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAg
ICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZyb250LgogICAgICAgICBpZiAoc2VsZWN0b3ItPnBz
ZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdCkgewogICAgICAg
ICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2Vs
ZWN0b3JMaXN0KCk7CkBAIC01MjksNyArNTI5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAg
ICAgICAgICAgICBzdWJDb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKICAg
ICAgICAgICAgIHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7CiAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2Vs
ZWN0b3IgPSBzdWJDb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+bWF0
Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28g
bGV0J3MgaG9ub3IgaXQuCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3Jj
ZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3VycwpAQCAtODY4LDcgKzg2OCw3IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250
ZXh0KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLSAgICBlbHNlIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgeworICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAKICAgICAgICAgUHNldWRvSWQg
aWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwpAQCAtODg4LDcgKzg4OCw3IEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
JiBjb250ZXh0KSBjb25zdAogCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQ
c2V1ZG9DbGFzcyhjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CisgICAgQVNTRVJUKHNlbGVjdG9y
LT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CiAKICAgICBzd2l0Y2ggKHNl
bGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzV2luZG93SW5hY3RpdmU6CkBAIC05MzMsNyArOTMzLDcgQEAgdW5zaWduZWQgU2VsZWN0
b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKICAgICAvLyBTdGF0aWNhbGx5IGRldGVybWluZSBpZiB0aGlzIHNlbGVjdG9yIHdpbGwg
bWF0Y2ggYSBsaW5rIGluIHZpc2l0ZWQsIHVudmlzaXRlZCBvciBhbnkgc3RhdGUsIG9yIG5ldmVy
LgogICAgIC8vIDp2aXNpdGVkIG5ldmVyIG1hdGNoZXMgb3RoZXIgZWxlbWVudHMgdGhhbiB0aGUg
aW5uZXJtb3N0IGxpbmsgZWxlbWVudC4KICAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0g
c2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0
Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc05vdDoKICAgICAgICAgICAgICAgICB7CkBAIC05NDMsNyArOTQzLDcg
QEAgdW5zaWduZWQgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0
IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9y
ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3IgPSBzdWJT
ZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vi
U2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3ViU2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzVHlwZSBzdWJUeXBlID0gc3ViU2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJUeXBlID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtNYXRjaFR5cGUgJj0gflNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDg4NmYzNjNiOGFkOTNjMmViNjAzZmEzMWU5Mzk5
YWMyMWRlMmE1NDYuLjQ3YzFjOTA5YTIwMWNlZjc4NTMxNzJkOGU2MzcwZGM5YTM0ZTcyZjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0
ZToKIAogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewotICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCisgICAgaWYgKHNlbGVjdG9yLT5t
YXRjaCgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgcHNldWRvVHlwZSA9IHNlbGVjdG9y
LT5wc2V1ZG9DbGFzc1R5cGUoKTsKICAgICByZXR1cm4gcHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NMaW5rCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcAppbmRl
eCAyZmE1ZDAzYWU0NDNiYTNmMjdmZTI3NzY0YzA4ZDcxMDEzZDY5Y2U4Li43OTljZjNiNjc1NTJm
MDAxN2Q3ZDgxMTEyZmFhMGE2NmRjOTA1NTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckZp
bHRlci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFNlbGVjdG9yRmlsdGVyOjpwdXNoUGFy
ZW50KEVsZW1lbnQqIHBhcmVudCkKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3REZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rvciwg
dW5zaWduZWQqJiBoYXNoKQogewotICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKKyAg
ICBzd2l0Y2ggKHNlbGVjdG9yLT5tYXRjaCgpKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6
CiAgICAgICAgIGlmICghc2VsZWN0b3ItPnZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
KCpoYXNoKyspID0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSAqIElk
QXR0cmlidXRlU2FsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNw
cAppbmRleCA5OWE1MDM3ZjQ1NjA1Njc5OWY2YzEyYTE1YmYyZTdmNTFlNWMyN2Q1Li4yYzMwYTAz
NjMxZmRlNmI3ZTY2MzMzYjcxMTA0ZmM2NTE5MmYzYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
aml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIEZ1bmN0
aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3Rv
ciwgU2VsZWN0b3IKICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNo
QW55dGhpbmc7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNo
KSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1hdGNoKCkpIHsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6VGFnOgogICAgICAgICAgICAgQVNTRVJUKCFmcmFnbWVudC50YWdOYW1lKTsK
ICAgICAgICAgICAgIGZyYWdtZW50LnRhZ05hbWUgPSAmKHNlbGVjdG9yLT50YWdRTmFtZSgpKTsK
QEAgLTIxNzcsNyArMjE3Nyw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW1lbnRBdHRyaWJ1dGVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0CiAKICAgICBzdWNj
ZXNzQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOwogCi0gICAgaWYgKGF0dHJpYnV0ZVNlbGVjdG9y
Lm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OlNldCkgeworICAgIGlmIChhdHRyaWJ1dGVTZWxlY3Rv
ci5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpTZXQpIHsKICAgICAgICAgLy8gV2UgbWFrZSB0aGUg
YXNzdW1wdGlvbiB0aGF0IG5hbWUgbWF0Y2hpbmcgZmFpbHMgaW4gbW9zdCBjYXNlcyBhbmQgd2Ug
a2VlcCB2YWx1ZSBtYXRjaGluZyBvdXRzaWRlCiAgICAgICAgIC8vIG9mIHRoZSBsb29wLiBXZSBy
ZS1lbnRlciB0aGUgbG9vcCBpZiBuZWVkZWQuCiAgICAgICAgIC8vIEZJWE1FOiBleGFjdCBjYXNl
IHNlbnNpdGl2ZSB2YWx1ZSBtYXRjaGluZyBpcyBzbyBzaW1wbGUgdGhhdCBpdCBzaG91bGQgYmUg
ZG9uZSBpbiB0aGUgbG9vcC4KQEAgLTIyNjksNyArMjI2OSw3IEBAIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZU1hdGNoaW5nKEFzc2VtYmxl
cjo6SnVtCiAgICAgQVNTRVJUKCFleHBlY3RlZFZhbHVlLmlzTnVsbCgpKTsKICAgICBib29sIGRl
ZmF1bHRUb0Nhc2VTZW5zaXRpdmVWYWx1ZU1hdGNoID0gYXR0cmlidXRlSW5mby5jYW5EZWZhdWx0
VG9DYXNlU2Vuc2l0aXZlVmFsdWVNYXRjaCgpOwogCi0gICAgc3dpdGNoIChhdHRyaWJ1dGVTZWxl
Y3Rvci5tX21hdGNoKSB7CisgICAgc3dpdGNoIChhdHRyaWJ1dGVTZWxlY3Rvci5tYXRjaCgpKSB7
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6QmVnaW46CiAgICAgICAgIGdlbmVyYXRlRWxlbWVudEF0
dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBjdXJyZW50QXR0
cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1ZSwgZGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVl
TWF0Y2gsIGF0dHJpYnV0ZVZhbHVlQmVnaW5zV2l0aDxDYXNlU2Vuc2l0aXZlPiwgYXR0cmlidXRl
VmFsdWVCZWdpbnNXaXRoPENhc2VJbnNlbnNpdGl2ZT4pOwogICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRleCBjOWRkNjBlOGY2Y2ZiYWQ3YjM1NjRmZWRk
YWI1NTRjOWVlOWFhOGE0Li5mMTU3ZDE4NmNiMjViYjI3NjIwNjZkYTgzZWM5MTQxMzNjZWY5NDRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCkBAIC0zNywxMiArMzcsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmICFBU1NFUlRfRElTQUJMRUQKIHN0YXRpYyBib29sIGlz
U2luZ2xlVGFnTmFtZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvcikKIHsKLSAg
ICByZXR1cm4gc2VsZWN0b3IuaXNMYXN0SW5UYWdIaXN0b3J5KCkgJiYgc2VsZWN0b3IubV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6VGFnOworICAgIHJldHVybiBzZWxlY3Rvci5pc0xhc3RJblRhZ0hp
c3RvcnkoKSAmJiBzZWxlY3Rvci5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpUYWc7CiB9CiAKIHN0
YXRpYyBib29sIGlzU2luZ2xlQ2xhc3NOYW1lU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3ImIHNl
bGVjdG9yKQogewotICAgIHJldHVybiBzZWxlY3Rvci5pc0xhc3RJblRhZ0hpc3RvcnkoKSAmJiBz
ZWxlY3Rvci5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKKyAgICByZXR1cm4gc2VsZWN0
b3IuaXNMYXN0SW5UYWdIaXN0b3J5KCkgJiYgc2VsZWN0b3IubWF0Y2goKSA9PSBDU1NTZWxlY3Rv
cjo6Q2xhc3M7CiB9CiAjZW5kaWYKIApAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgSWRNYXRjaGlu
Z1R5cGUgZmluZElkTWF0Y2hpbmdUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBmaXJzdFNlbGVjdG9y
KQogewogICAgIGJvb2wgaW5SaWdodG1vc3QgPSB0cnVlOwogICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yID0gJmZpcnN0U2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNl
bGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCkgeworICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OklkKSB7CiAgICAgICAgICAgICBpZiAoaW5SaWdodG1vc3QpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIElkTWF0Y2hpbmdUeXBlOjpSaWdodG1vc3Q7CiAgICAgICAgICAgICByZXR1
cm4gSWRNYXRjaGluZ1R5cGU6OkZpbHRlcjsKQEAgLTgwLDcgKzgwLDcgQEAgU2VsZWN0b3JEYXRh
TGlzdDo6U2VsZWN0b3JEYXRhTGlzdChjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlz
dCkKICAgICBpZiAoc2VsZWN0b3JDb3VudCA9PSAxKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3RvciA9ICptX3NlbGVjdG9ycy5maXJzdCgpLnNlbGVjdG9yOwogICAgICAgICBp
ZiAoc2VsZWN0b3IuaXNMYXN0SW5UYWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
c2VsZWN0b3IubV9tYXRjaCkgeworICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci5tYXRjaCgp
KSB7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpUYWc6CiAgICAgICAgICAgICAgICAg
bV9tYXRjaFR5cGUgPSBUYWdOYW1lTWF0Y2g7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0x
NjgsNyArMTY4LDcgQEAgc3RhdGljIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvckZvcklkTG9v
a3VwKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb24KICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9ICZmaXJzdFNl
bGVjdG9yOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0g
ICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAg
IGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6SWQpCiAgICAgICAgICAgICBy
ZXR1cm4gc2VsZWN0b3I7CiAgICAgICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NT
ZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCiAgICAgICAgICAgICBicmVhazsKQEAgLTIyNCw3ICsyMjQs
NyBAQCBzdGF0aWMgQ29udGFpbmVyTm9kZSYgZmlsdGVyUm9vdEJ5SWQoQ29udGFpbmVyTm9kZSYg
cm9vdE5vZGUsIGNvbnN0IENTU1NlbGVjdG9yJgogICAgIC8vIFRodXMgd2UgY2FuIHNraXAgdGhl
IHJpZ2h0bW9zdCBtYXRjaC4KICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSAmZmly
c3RTZWxlY3RvcjsKICAgICBkbyB7Ci0gICAgICAgIEFTU0VSVChzZWxlY3Rvci0+bV9tYXRjaCAh
PSBDU1NTZWxlY3Rvcjo6SWQpOworICAgICAgICBBU1NFUlQoc2VsZWN0b3ItPm1hdGNoKCkgIT0g
Q1NTU2VsZWN0b3I6OklkKTsKICAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9IENT
U1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBzZWxl
Y3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGlj
IENvbnRhaW5lck5vZGUmIGZpbHRlclJvb3RCeUlkKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBj
b25zdCBDU1NTZWxlY3RvciYKIAogICAgIGJvb2wgaW5BZGphY2VudENoYWluID0gZmFsc2U7CiAg
ICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsK
LSAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgeworICAg
ICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVG9NYXRjaCA9IHNlbGVjdG9yLT52YWx1ZSgpOwog
ICAgICAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHNlYXJjaFJvb3QgPSByb290Tm9kZS50cmVl
U2NvcGUoKS5nZXRFbGVtZW50QnlJZChpZFRvTWF0Y2gpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KExJS0VMWSghcm9vdE5vZGUudHJlZVNjb3BlKCkuY29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0
aElkKGlkVG9NYXRjaCkpKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>