<?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>83497</bug_id>
          
          <creation_ts>2012-04-09 12:28:42 -0700</creation_ts>
          <short_desc>Replace numeric_limits&lt;LayoutUnit&gt;::min/max with constants</short_desc>
          <delta_ts>2012-04-09 19:54:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>598516</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-04-09 12:28:42 -0700</bug_when>
    <thetext>As came up in the original review of the FractionalLayoutUnit code we should not register numeric_limits for the FractionalLayoutUnit in the std namespace and instead use constants for the min/max value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598580</commentid>
    <comment_count>1</comment_count>
      <attachid>136298</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-04-09 13:43:45 -0700</bug_when>
    <thetext>Created attachment 136298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598593</commentid>
    <comment_count>2</comment_count>
      <attachid>136298</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-04-09 13:55:32 -0700</bug_when>
    <thetext>Comment on attachment 136298
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Replace all uses of numeric_limits&lt;LayoutUnit&gt;::min/max with
&gt; +        MIN_LAYOUT_UNIT and MAX_LAYOUT_UNIT respectively in preparation for the
&gt; +        switch to subpixel layout.

Why does this make the switch easier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598599</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-04-09 14:01:18 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 136298 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136298&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Replace all uses of numeric_limits&lt;LayoutUnit&gt;::min/max with
&gt; &gt; +        MIN_LAYOUT_UNIT and MAX_LAYOUT_UNIT respectively in preparation for the
&gt; &gt; +        switch to subpixel layout.
&gt; 
&gt; Why does this make the switch easier?

It allows us to use an abstraction to represent the min/max values for ints (for now) and FractionalLayoutUnits (after the switch). We originally planed to just leave it as is and define numeric_limits for FractionalLayoutUnit but that was shoot down during the initial review of FractionalLayoutUnit.h as it would involve declaring it in the std namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598623</commentid>
    <comment_count>4</comment_count>
      <attachid>136298</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-04-09 14:41:03 -0700</bug_when>
    <thetext>Comment on attachment 136298
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt;&gt; +        switch to subpixel layout.
&gt;&gt; 
&gt;&gt; Why does this make the switch easier?
&gt; 
&gt; It allows us to use an abstraction to represent the min/max values for ints (for now) and FractionalLayoutUnits (after the switch). We originally planed to just leave it as is and define numeric_limits for FractionalLayoutUnit but that was shoot down during the initial review of FractionalLayoutUnit.h as it would involve declaring it in the std namespace.

OK.

I think I might prefer LayoutUnit::maxValue and LayoutUnit::zeroValue, etc.  But I understand that&apos;s impractical at this juncture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598628</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-09 14:43:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 136298 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136298&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:10
&gt; &gt;&gt;&gt; +        switch to subpixel layout.
&gt; &gt;&gt; 
&gt; &gt;&gt; Why does this make the switch easier?
&gt; &gt; 
&gt; &gt; It allows us to use an abstraction to represent the min/max values for ints (for now) and FractionalLayoutUnits (after the switch). We originally planed to just leave it as is and define numeric_limits for FractionalLayoutUnit but that was shoot down during the initial review of FractionalLayoutUnit.h as it would involve declaring it in the std namespace.
&gt; 
&gt; OK.
&gt; 
&gt; I think I might prefer LayoutUnit::maxValue and LayoutUnit::zeroValue, etc.  But I understand that&apos;s impractical at this juncture.

We have FractionalLayoutUnit::max and min, and would be happy to add a ::zero. That&apos;ll definitely be part of our cleanup pass once we&apos;ve flipped the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598878</commentid>
    <comment_count>6</comment_count>
      <attachid>136298</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-04-09 19:02:53 -0700</bug_when>
    <thetext>Comment on attachment 136298
Patch

Will do a cleanup pass once we&apos;ve made the switch to make it LayoutUnit::max/min/zero as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598927</commentid>
    <comment_count>7</comment_count>
      <attachid>136298</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 19:54:46 -0700</bug_when>
    <thetext>Comment on attachment 136298
Patch

Clearing flags on attachment: 136298

Committed r113665: &lt;http://trac.webkit.org/changeset/113665&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598928</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 19:54:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136298</attachid>
            <date>2012-04-09 13:43:45 -0700</date>
            <delta_ts>2012-04-09 19:54:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83497-20120409134344.patch</filename>
            <type>text/plain</type>
            <size>58956</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMi0wNC0wOSAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBudW1lcmljX2xp
bWl0czxMYXlvdXRVbml0Pjo6bWluL21heCB3aXRoIGNvbnN0YW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM0OTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIG51bWVy
aWNfbGltaXRzPExheW91dFVuaXQ+OjptaW4vbWF4IHdpdGgKKyAgICAgICAgTUlOX0xBWU9VVF9V
TklUIGFuZCBNQVhfTEFZT1VUX1VOSVQgcmVzcGVjdGl2ZWx5IGluIHByZXBhcmF0aW9uIGZvciB0
aGUKKyAgICAgICAgc3dpdGNoIHRvIHN1YnBpeGVsIGxheW91dC4KKworICAgICAgICBBbHNvIHJl
bmFtZSB6ZXJvTGF5b3V0VW5pdCB0byBaRVJPX0xBWU9VVF9VTklUIHRvIGJlIGNvbnNpc3RlbnQg
YW5kCisgICAgICAgIGNoYW5nZSBpdCB0byBiZSBhIGRlZmluZSBhcyB0byBhdm9pZCBnbG9iYWwg
aW5pdGlhbGl6ZXIgd2FybmluZ3Mgb25jZSB3ZQorICAgICAgICBjaGFuZ2UgdGhlIGRlZmluaXRp
b24gb2YgTGF5b3V0VW5pdCBmcm9tIGludCB0byBGcmFjdGlvbmFsTGF5b3V0VW5pdC4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdE1pbmlt
dW1TaXplRm9yUmVzaXppbmcpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Tm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRy
aXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBFZGdlVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6OmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXV0b1RhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lRmxvd0JveDo6YWRkQm9yZGVyT3V0c2V0VmlzdWFsT3ZlcmZsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudCk6CisgICAgICAgICog
cmVuZGVyaW5nL0xheW91dFR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNvbXB1dGVJbml0aWFsUmVnaW9uUmFuZ2VGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cmVtb3ZlRmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0
Q2xlYXJEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGlu
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGVpZ2h0Rm9y
TGluZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpib3JkZXJGaXRBZGp1
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3BsaXR0YWJs
ZUNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwYWdpbmF0aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBhZ2VMb2dpY2FsT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0
ZTo6dXBkYXRlUmVwYWludFJhbmdlRnJvbUJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzaHJpbmtMb2dp
Y2FsV2lkdGhUb0F2b2lkRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9z
aXRpb25Gb3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjptaW5ZVmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptaW5YVmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoUmVuZGVyQm94
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldExlZnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldFRvcCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWxC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlv
dXRWZXJ0aWNhbEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNldDo6cGFpbnRNYXNrKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxleGlibGVCb3g6OnJlcG9zaXRpb25Mb2dpY2FsSGVpZ2h0RGVwZW5kZW50
RmxleEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpsaW5lQnJl
YWtMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFsaWduQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRj
aEFsaWdubWVudFRvQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlTG9naWNhbFdpZHRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6bGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnJlc2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5
b3V0SWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjb252ZXJ0U3R5bGVMb2dpY2FsV2lkdGhUb0Nv
bXB1dGVkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmxheW91dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6Ym9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nSW5Sb3dEaXJlY3Rpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCk6CisKIDIwMTItMDQtMDkgIFZpY3Rv
ciBDYXJidW5lICA8dmNhcmJ1bmVAYWRvYmUuY29tPgogCiAgICAgICAgIFNpbXBsaWZpZWQgdm9s
dW1lIHNsaWRlciByZW5kZXJpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJh
cmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0
YS5oCShyZXZpc2lvbiAxMTM1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogCiBpbmxpbmUg
SW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCiB7Ci0gICAgcmV0dXJuIElu
dFNpemUoc3RkOjpudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCksIHN0ZDo6bnVtZXJp
Y19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpKTsKKyAgICByZXR1cm4gSW50U2l6ZShNQVhfTEFZ
T1VUX1VOSVQsIE1BWF9MQVlPVVRfVU5JVCk7CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGE6
OkVsZW1lbnRSYXJlRGF0YSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGlubGluZSBMYXlvdXRVbml0IE5vWFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkKIHsKLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxMYXlvdXRVbml0Pjo6bWluKCk7CisgICAgcmV0dXJuIE1JTl9MQVlPVVRfVU5JVDsKIH0K
IAogQ2FyZXRCYXNlOjpDYXJldEJhc2UoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0
aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkocmV2aXNpb24gMTEzNTc3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OCw3ICs1ODgsNyBAQCBGbG9h
dFF1YWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RRCiBzdGF0aWMgZmxvYXQgY2xhbXBF
ZGdlVmFsdWUoZmxvYXQgZikKIHsKICAgICBBU1NFUlQoIWlzbmFuKGYpKTsKLSAgICByZXR1cm4g
bWluPGZsb2F0PihtYXg8ZmxvYXQ+KGYsIC1udW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4
KCkgLyAyKSwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpIC8gMik7CisgICAgcmV0
dXJuIG1pbjxmbG9hdD4obWF4PGZsb2F0PihmLCAtTUFYX0xBWU9VVF9VTklUIC8gMiksIE1BWF9M
QVlPVVRfVU5JVCAvIDIpOwogfQogCiBMYXlvdXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpj
bGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKQEAg
LTYwMCwxMyArNjAwLDEzIEBAIExheW91dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmNsYW1w
ZWQKIAogICAgIGZsb2F0IHJpZ2h0OwogICAgIGlmIChpc2luZihtYXBwZWRRdWFkQm91bmRzLngo
KSkgJiYgaXNpbmYobWFwcGVkUXVhZEJvdW5kcy53aWR0aCgpKSkKLSAgICAgICAgcmlnaHQgPSBu
dW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkgLyAyOworICAgICAgICByaWdodCA9IE1B
WF9MQVlPVVRfVU5JVCAvIDI7CiAgICAgZWxzZQogICAgICAgICByaWdodCA9IGNsYW1wRWRnZVZh
bHVlKGNlaWxmKG1hcHBlZFF1YWRCb3VuZHMubWF4WCgpKSk7CiAKICAgICBmbG9hdCBib3R0b207
CiAgICAgaWYgKGlzaW5mKG1hcHBlZFF1YWRCb3VuZHMueSgpKSAmJiBpc2luZihtYXBwZWRRdWFk
Qm91bmRzLmhlaWdodCgpKSkKLSAgICAgICAgYm90dG9tID0gbnVtZXJpY19saW1pdHM8TGF5b3V0
VW5pdD46Om1heCgpIC8gMjsKKyAgICAgICAgYm90dG9tID0gTUFYX0xBWU9VVF9VTklUIC8gMjsK
ICAgICBlbHNlCiAgICAgICAgIGJvdHRvbSA9IGNsYW1wRWRnZVZhbHVlKGNlaWxmKG1hcHBlZFF1
YWRCb3VuZHMubWF4WSgpKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw4
ICsyNTEsOCBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6Y29tcHV0ZVByZWZlcnJlZExvCiAKICAg
ICBpZiAoc2NhbGVDb2x1bW5zKSB7CiAgICAgICAgIG1heE5vblBlcmNlbnQgPSBtYXhOb25QZXJj
ZW50ICogMTAwIC8gbWF4KHJlbWFpbmluZ1BlcmNlbnQsIGVwc2lsb24pOwotICAgICAgICBtYXhX
aWR0aCA9IG1heDxpbnQ+KG1heFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KG1pbihtYXhOb25QZXJj
ZW50LCBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkgLyAyLjBmKSkpOwotICAgICAg
ICBtYXhXaWR0aCA9IG1heDxpbnQ+KG1heFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KG1pbihtYXhQ
ZXJjZW50LCBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCkgLyAyLjBmKSkpOworICAg
ICAgICBtYXhXaWR0aCA9IG1heDxpbnQ+KG1heFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KG1pbiht
YXhOb25QZXJjZW50LCBNQVhfTEFZT1VUX1VOSVQgLyAyLjBmKSkpOworICAgICAgICBtYXhXaWR0
aCA9IG1heDxpbnQ+KG1heFdpZHRoLCBzdGF0aWNfY2FzdDxpbnQ+KG1pbihtYXhQZXJjZW50LCBN
QVhfTEFZT1VUX1VOSVQgLyAyLjBmKSkpOwogICAgIH0KIAogICAgIG1heFdpZHRoID0gbWF4PGlu
dD4obWF4V2lkdGgsIHNwYW5NYXhMb2dpY2FsV2lkdGgpOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIHZv
aWQgQXV0b1RhYmxlTGF5b3V0Ojpjb21wdXRlUHJlZmVycmVkTG8KICAgICAgICAgbWF4V2lkdGgg
PSBtaW5XaWR0aDsKICAgICB9IGVsc2UgaWYgKCFyZW1haW5pbmdQZXJjZW50ICYmIG1heE5vblBl
cmNlbnQpIHsKICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vIHJlbWFpbmluZyBwZXJjZW50LCBt
YXhXaWR0aCBpcyBpbnZhbGlkCi0gICAgICAgIG1heFdpZHRoID0gc3RkOjpudW1lcmljX2xpbWl0
czxMYXlvdXRVbml0Pjo6bWF4KCk7CisgICAgICAgIG1heFdpZHRoID0gTUFYX0xBWU9VVF9VTklU
OwogICAgIH0KIAogICAgIExlbmd0aCB0YWJsZUxvZ2ljYWxNaW5XaWR0aCA9IG1fdGFibGUtPnN0
eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsOCArNjY0
LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcgogCiAgICAgICAg
ICAgICAgICAgUmVuZGVyUnVieVJ1biogcnVieVJ1biA9IHRvUmVuZGVyUnVieVJ1bihjdXJyLT5y
ZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyUnVieUJhc2UqIHJ1YnlCYXNl
ID0gcnVieVJ1bi0+cnVieUJhc2UoKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGJvdHRvbVJ1YnlCYXNlTGVhZGluZyA9IChjdXJyLT5sb2dpY2FsSGVpZ2h0KCkgLSBydWJ5QmFz
ZS0+bG9naWNhbEJvdHRvbSgpKSArIHJ1YnlCYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSAocnVieUJh
c2UtPmxhc3RSb290Qm94KCkgPyBydWJ5QmFzZS0+bGFzdFJvb3RCb3goKS0+bGluZUJvdHRvbSgp
IDogemVyb0xheW91dFVuaXQpOwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJ1
YnlCYXNlTGVhZGluZyA9IHJ1YnlCYXNlLT5sb2dpY2FsVG9wKCkgKyAocnVieUJhc2UtPmZpcnN0
Um9vdEJveCgpID8gcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkgOiB6ZXJvTGF5
b3V0VW5pdCk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9tUnVieUJhc2VM
ZWFkaW5nID0gKGN1cnItPmxvZ2ljYWxIZWlnaHQoKSAtIHJ1YnlCYXNlLT5sb2dpY2FsQm90dG9t
KCkpICsgcnVieUJhc2UtPmxvZ2ljYWxIZWlnaHQoKSAtIChydWJ5QmFzZS0+bGFzdFJvb3RCb3go
KSA/IHJ1YnlCYXNlLT5sYXN0Um9vdEJveCgpLT5saW5lQm90dG9tKCkgOiBaRVJPX0xBWU9VVF9V
TklUKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BSdWJ5QmFzZUxlYWRpbmcg
PSBydWJ5QmFzZS0+bG9naWNhbFRvcCgpICsgKHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKSA/IHJ1
YnlCYXNlLT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDogWkVST19MQVlPVVRfVU5JVCk7CiAg
ICAgICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gIXJlbmRlcmVyKCktPnN0eWxlKCkt
PmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHRvcFJ1YnlCYXNlTGVhZGluZyA6IGJvdHRv
bVJ1YnlCYXNlTGVhZGluZzsKICAgICAgICAgICAgICAgICAgICAgYm94SGVpZ2h0IC09ICh0b3BS
dWJ5QmFzZUxlYWRpbmcgKyBib3R0b21SdWJ5QmFzZUxlYWRpbmcpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTc5NCw4ICs3OTQsOCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3Jk
ZXJPdXRzCiAgICAgTGF5b3V0VW5pdCBib3JkZXJPdXRzZXRMb2dpY2FsUmlnaHQ7CiAgICAgc3R5
bGUtPmdldEJvcmRlckltYWdlSW5saW5lRGlyZWN0aW9uT3V0c2V0cyhib3JkZXJPdXRzZXRMb2dp
Y2FsTGVmdCwgYm9yZGVyT3V0c2V0TG9naWNhbFJpZ2h0KTsKIAotICAgIExheW91dFVuaXQgb3V0
c2V0TG9naWNhbExlZnQgPSBpbmNsdWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRM
b2dpY2FsTGVmdCA6IHplcm9MYXlvdXRVbml0OwotICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNh
bFJpZ2h0ID0gaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSA/IGJvcmRlck91dHNldExvZ2ljYWxS
aWdodCA6IHplcm9MYXlvdXRVbml0OworICAgIExheW91dFVuaXQgb3V0c2V0TG9naWNhbExlZnQg
PSBpbmNsdWRlTG9naWNhbExlZnRFZGdlKCkgPyBib3JkZXJPdXRzZXRMb2dpY2FsTGVmdCA6IFpF
Uk9fTEFZT1VUX1VOSVQ7CisgICAgTGF5b3V0VW5pdCBvdXRzZXRMb2dpY2FsUmlnaHQgPSBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSgpID8gYm9yZGVyT3V0c2V0TG9naWNhbFJpZ2h0IDogWkVST19M
QVlPVVRfVU5JVDsKIAogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdyA9
IG1pbihwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdCgpIC0gb3V0c2V0TG9naWNhbExlZnQsIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdy54KCkpOwogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3cgPSBtYXgocGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0KCkgKyBvdXRzZXRMb2dpY2Fs
UmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhYKCkpOwpAQCAtMTEyMyw4ICsxMTIzLDgg
QEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcihjb25zdAogICAgICAgICAgICAg
Zm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPnByZXZM
aW5lQm94KCkpCiAgICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gY3Vyci0+bG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSByZWN0
LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiB6ZXJvTGF5b3V0
VW5pdCk7Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gcmVjdC55KCkgLSAoaXNIb3Jpem9u
dGFsKCkgPyB6ZXJvTGF5b3V0VW5pdCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOworICAgICAgICBM
YXlvdXRVbml0IHN0cmlwWCA9IHJlY3QueCgpIC0gKGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbE9m
ZnNldE9uTGluZSA6IFpFUk9fTEFZT1VUX1VOSVQpOworICAgICAgICBMYXlvdXRVbml0IHN0cmlw
WSA9IHJlY3QueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gWkVST19MQVlPVVRfVU5JVCA6IGxvZ2lj
YWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBMYXlvdXRVbml0IHN0cmlwV2lkdGggPSBpc0hvcml6
b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4od2lk
dGgoKSk7CiAgICAgICAgIExheW91dFVuaXQgc3RyaXBIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGhlaWdodCgpKSA6IHRvdGFsTG9naWNhbFdpZHRoOwog
CkBAIC0xMjU0LDggKzEyNTQsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3Jh
dGlvbnMoCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxv
Z2ljYWxPZmZzZXRPbkxpbmU7CiAgICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBj
dXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwotICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWludG9mZnNldC54KCkg
LSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogemVyb0xheW91dFVuaXQp
OwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBZID0gYWRqdXN0ZWRQYWludG9mZnNl
dC55KCkgLSAoaXNIb3Jpem9udGFsKCkgPyB6ZXJvTGF5b3V0VW5pdCA6IGxvZ2ljYWxPZmZzZXRP
bkxpbmUpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0ZWRQYWlu
dG9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5lIDogWkVS
T19MQVlPVVRfVU5JVCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1
c3RlZFBhaW50b2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IFpFUk9fTEFZT1VUX1VOSVQg
OiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHN0cmlw
V2lkdGggPSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogZnJhbWVSZWN0Lndp
ZHRoKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcEhlaWdodCA9IGlzSG9yaXpv
bnRhbCgpID8gZnJhbWVSZWN0LmhlaWdodCgpIDogdG90YWxMb2dpY2FsV2lkdGg7CiAKQEAgLTEz
MjUsOCArMTMyNSw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYK
ICAgICAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxPZmZzZXRPbkxp
bmU7CiAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0g
Y3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIExheW91dFVuaXQgc3RyaXBYID0gYWRqdXN0
ZWRQYWludE9mZnNldC54KCkgLSAoaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsT2Zmc2V0T25MaW5l
IDogemVyb0xheW91dFVuaXQpOwotICAgICAgICBMYXlvdXRVbml0IHN0cmlwWSA9IGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpIC0gKGlzSG9yaXpvbnRhbCgpID8gemVyb0xheW91dFVuaXQgOiBsb2dp
Y2FsT2Zmc2V0T25MaW5lKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFggPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSAtIChpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxPZmZzZXRPbkxpbmUgOiBa
RVJPX0xBWU9VVF9VTklUKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFkgPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSAtIChpc0hvcml6b250YWwoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dp
Y2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgTGF5b3V0VW5pdCBzdHJpcFdpZHRoID0gaXNIb3Jp
em9udGFsKCkgPyB0b3RhbExvZ2ljYWxXaWR0aCA6IGZyYW1lUmVjdC53aWR0aCgpOwogICAgICAg
ICBMYXlvdXRVbml0IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBmcmFtZVJlY3QuaGVp
Z2h0KCkgOiB0b3RhbExvZ2ljYWxXaWR0aDsKIApAQCAtMTQyMyw3ICsxNDIzLDcgQEAgTGF5b3V0
VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3ZlckFubgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIXJ1YnlSdW4tPnN0eWxlKCktPmlz
RmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQg
dG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRl
eHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkg
OiB6ZXJvTGF5b3V0VW5pdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkZpcnN0
UnVieVRleHRMaW5lID0gcnVieVRleHQtPmxvZ2ljYWxUb3AoKSArIChydWJ5VGV4dC0+Zmlyc3RS
b290Qm94KCkgPyBydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IFpFUk9fTEFZ
T1VUX1VOSVQpOwogICAgICAgICAgICAgICAgIGlmICh0b3BPZkZpcnN0UnVieVRleHRMaW5lID49
IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHRvcE9m
Rmlyc3RSdWJ5VGV4dExpbmUgKz0gY3Vyci0+bG9naWNhbFRvcCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHJldmlzaW9uIDExMzU3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw5IEBAIHR5cGVkZWYgSW50UG9pbnQgTGF5b3V0UG9pbnQ7CiB0eXBlZGVmIEludFNpemUgTGF5
b3V0U2l6ZTsKIHR5cGVkZWYgSW50UmVjdCBMYXlvdXRSZWN0OwogCi1jb25zdCBMYXlvdXRVbml0
IHplcm9MYXlvdXRVbml0ID0gMDsKKyNkZWZpbmUgTUFYX0xBWU9VVF9VTklUIElOVF9NQVgKKyNk
ZWZpbmUgTUlOX0xBWU9VVF9VTklUIElOVF9NSU4KKyNkZWZpbmUgWkVST19MQVlPVVRfVU5JVCAw
CiAKIGlubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CShyZXZpc2lvbiAxMTM1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsOCArMTkwLDggQEAgUmVuZGVyQmxvY2s6Ok1h
cmdpbkluZm86Ok1hcmdpbkluZm8oUmVuZAogICAgIG1fcXVpcmtDb250YWluZXIgPSBibG9jay0+
aXNUYWJsZUNlbGwoKSB8fCBibG9jay0+aXNCb2R5KCkgfHwgYmxvY2tTdHlsZS0+bWFyZ2luQmVm
b3JlQ29sbGFwc2UoKSA9PSBNRElTQ0FSRAogICAgICAgICB8fCBibG9ja1N0eWxlLT5tYXJnaW5B
ZnRlckNvbGxhcHNlKCkgPT0gTURJU0NBUkQ7CiAKLSAgICBtX3Bvc2l0aXZlTWFyZ2luID0gbV9j
YW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiA/IGJsb2NrLT5tYXhQb3NpdGl2ZU1h
cmdpbkJlZm9yZSgpIDogemVyb0xheW91dFVuaXQ7Ci0gICAgbV9uZWdhdGl2ZU1hcmdpbiA9IG1f
Y2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4TmVnYXRpdmVN
YXJnaW5CZWZvcmUoKSA6IHplcm9MYXlvdXRVbml0OworICAgIG1fcG9zaXRpdmVNYXJnaW4gPSBt
X2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuID8gYmxvY2stPm1heFBvc2l0aXZl
TWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9VTklUOworICAgIG1fbmVnYXRpdmVNYXJnaW4g
PSBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuID8gYmxvY2stPm1heE5lZ2F0
aXZlTWFyZ2luQmVmb3JlKCkgOiBaRVJPX0xBWU9VVF9VTklUOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDQ3LDcgKzE0NDcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5pdGlhbFJlZ2lvblJhCiAgICAgICAgIC8vIGVm
ZmVjdGl2ZWx5IGNsYW1wZWQgdG8gb3VyIHJlZ2lvbiByYW5nZS4KICAgICAgICAgTGF5b3V0VW5p
dCBvbGRIZWlnaHQgPSAgbG9naWNhbEhlaWdodCgpOwogICAgICAgICBMYXlvdXRVbml0IG9sZExv
Z2ljYWxUb3AgPSBsb2dpY2FsVG9wKCk7Ci0gICAgICAgIHNldExvZ2ljYWxIZWlnaHQobnVtZXJp
Y19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpIC8gMik7CisgICAgICAgIHNldExvZ2ljYWxIZWln
aHQoTUFYX0xBWU9VVF9VTklUIC8gMik7CiAgICAgICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7
CiAgICAgICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+c2V0UmVnaW9uUmFuZ2VGb3JC
b3godGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpKTsKICAgICAgICAgc2V0
TG9naWNhbEhlaWdodChvbGRIZWlnaHQpOwpAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwogICAgIC8vIGZvciBieSBzaW1wbHkgY2Fs
bGluZyBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUuICBTZWUKICAgICAvLyBodHRwOi8vd3d3
LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxvY2svbWFyZ2luLWNvbGxhcHNlLzA0Ni5o
dG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhpcyBzY2VuYXJpby4KLSAgICBMYXlvdXRV
bml0IG1hcmdpbk9mZnNldCA9IG1hcmdpbkluZm8uY2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3Jl
KCkgPyB6ZXJvTGF5b3V0VW5pdCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CisgICAgTGF5b3V0VW5p
dCBtYXJnaW5PZmZzZXQgPSBtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9yZSgp
ID8gWkVST19MQVlPVVRfVU5JVCA6IG1hcmdpbkluZm8ubWFyZ2luKCk7CiAgICAgc2V0TG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBtYXJnaW5PZmZzZXQpOwogICAgIHBvc2l0aW9uTmV3
RmxvYXRzKCk7CiAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgLSBtYXJnaW5P
ZmZzZXQpOwpAQCAtMjcxNyw5ICsyNzE3LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1
bW5SdWxlcyhQYWludAogICAgIGJvb2wgYW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzTGluZXMo
cGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgaWYgKGNvbEluZm8tPnByb2dyZXNzaW9uQXhpcygp
ID09IENvbHVtbkluZm86OklubGluZUF4aXMpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBjdXJyTG9n
aWNhbExlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB6ZXJv
TGF5b3V0VW5pdCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBj
dXJyTG9naWNhbExlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBaRVJPX0xBWU9VVF9VTklUIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlv
dXRVbml0IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKLSAgICAgICAg
TGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyB6ZXJvTGF5b3V0VW5pdCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
TGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBaRVJPX0xBWU9VVF9VTklUIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogICAgICAg
ICBMYXlvdXRVbml0IGlubGluZURpcmVjdGlvblNpemUgPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1u
V2lkdGgoKTsKICAgICAgICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKQogICAgICAgICAgICAgPyBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBC
U0xlZnQgOiBCU1JpZ2h0CkBAIC0zNjM0LDggKzM2MzQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpy
ZW1vdmVGbG9hdGluZ09iamVjdChSCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
Qm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOwogCiAgICAgICAgICAgICAgICAgLy8g
Rml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5OTUuCi0g
ICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b20gPCAwIHx8IGxvZ2ljYWxCb3R0b20gPCBs
b2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1h
eCgpKQotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gbnVtZXJpY19saW1pdHM8
TGF5b3V0VW5pdD46Om1heCgpOworICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tIDwg
MCB8fCBsb2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IE1BWF9MQVlP
VVRfVU5JVCkKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbEJvdHRvbSA9IE1BWF9MQVlPVVRf
VU5JVDsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU3Bl
Y2lhbC1jYXNlIHplcm8tIGFuZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRzOiB0aG9zZSBk
b24ndCB0b3VjaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUg
b24sIGJ1dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCkBAIC00MDc5LDcg
KzQwNzksNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsCiAgICAg
aWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHQ7CiAK
LSAgICBMYXlvdXRVbml0IGJvdHRvbSA9IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgo
KTsKKyAgICBMYXlvdXRVbml0IGJvdHRvbSA9IE1BWF9MQVlPVVRfVU5JVDsKICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTQwODksNyArNDA4
OSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWwKICAgICAgICAg
ICAgIGJvdHRvbSA9IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKICAgICB9CiAKLSAgICByZXR1
cm4gYm90dG9tID09IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSA/IHplcm9MYXlv
dXRVbml0IDogYm90dG9tOworICAgIHJldHVybiBib3R0b20gPT0gTUFYX0xBWU9VVF9VTklUID8g
WkVST19MQVlPVVRfVU5JVCA6IGJvdHRvbTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkg
Y29uc3QKQEAgLTQxMTQsNyArNDExNCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0Rp
cnR5SW5CbG9ja1IKIAogICAgIFJvb3RJbmxpbmVCb3gqIGxvd2VzdERpcnR5TGluZSA9IGxhc3RS
b290Qm94KCk7CiAgICAgUm9vdElubGluZUJveCogYWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxp
bmU7Ci0gICAgd2hpbGUgKGxvd2VzdERpcnR5TGluZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmxpbmVC
b3R0b21XaXRoTGVhZGluZygpID49IGxvZ2ljYWxCb3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IG51
bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkgeworICAgIHdoaWxlIChsb3dlc3REaXJ0
eUxpbmUgJiYgbG93ZXN0RGlydHlMaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSA+PSBsb2dp
Y2FsQm90dG9tICYmIGxvZ2ljYWxCb3R0b20gPCBNQVhfTEFZT1VUX1VOSVQpIHsKICAgICAgICAg
YWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxpbmU7CiAgICAgICAgIGxvd2VzdERpcnR5TGluZSA9
IGxvd2VzdERpcnR5TGluZS0+cHJldlJvb3RCb3goKTsKICAgICB9CkBAIC00MjQwLDggKzQyNDAs
OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91CiAgICAgICAgIGFk
ZEludHJ1ZGluZ0Zsb2F0cyhibG9jaywgbG9naWNhbExlZnRPZmZzZXQsIGxvZ2ljYWxUb3BPZmZz
ZXQpOwogCiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBj
aGFuZ2VMb2dpY2FsVG9wID0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpOwotICAg
ICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxMYXlv
dXRVbml0Pjo6bWluKCk7CisgICAgICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IE1B
WF9MQVlPVVRfVU5JVDsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0g
TUlOX0xBWU9VVF9VTklUOwogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CkBAIC00MzE4LDcgKzQzMTgsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0ZsCiAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
ZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGls
ZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7
ICsrY2hpbGRJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwotICAg
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdCA9IG1pbih0aGlzLT5sb2dpY2Fs
Qm90dG9tRm9yRmxvYXQociksIG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSAtIGNo
aWxkTG9naWNhbFRvcCk7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb2F0
ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSwgTUFYX0xBWU9VVF9VTklUIC0g
Y2hpbGRMb2dpY2FsVG9wKTsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gY2hp
bGRMb2dpY2FsVG9wICsgbG9naWNhbEJvdHRvbUZvckZsb2F0OwogICAgICAgICBsb3dlc3RGbG9h
dExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90
dG9tKTsKIApAQCAtNDUwOSw3ICs0NTA5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0
Q2xlYXJEZWx0YShSZQogICAgIH0KIAogICAgIC8vIFdlIGFsc28gY2xlYXIgZmxvYXRzIGlmIHdl
IGFyZSB0b28gYmlnIHRvIHNpdCBvbiB0aGUgc2FtZSBsaW5lIGFzIGEgZmxvYXQgKGFuZCB3aXNo
IHRvIGF2b2lkIGZsb2F0cyBieSBkZWZhdWx0KS4KLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNs
ZWFyU2V0ID8gbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxCb3R0b20gLSBsb2dpY2FsVG9wKSA6
IHplcm9MYXlvdXRVbml0OworICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2xlYXJTZXQgPyBtYXg8
TGF5b3V0VW5pdD4oMCwgbG9naWNhbEJvdHRvbSAtIGxvZ2ljYWxUb3ApIDogWkVST19MQVlPVVRf
VU5JVDsKICAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKICAgICAg
ICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsVG9wID0gbG9naWNhbFRvcDsKICAgICAgICAgd2hpbGUg
KHRydWUpIHsKQEAgLTU0OTgsNyArNTQ5OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJ
bmxpbmVQcmVmZXJyZWQKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsK
ICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9j
ay0+Y29udGVudExvZ2ljYWxXaWR0aCgpIDogemVyb0xheW91dFVuaXQ7CisgICAgTGF5b3V0VW5p
dCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9jay0+Y29udGVudExvZ2ljYWxX
aWR0aCgpIDogWkVST19MQVlPVVRfVU5JVDsKIAogICAgIC8vIElmIHdlIGFyZSBhdCB0aGUgc3Rh
cnQgb2YgYSBsaW5lLCB3ZSB3YW50IHRvIGlnbm9yZSBhbGwgd2hpdGUtc3BhY2UuCiAgICAgLy8g
QWxzbyBzdHJpcCBzcGFjZXMgaWYgd2UgcHJldmlvdXNseSBoYWQgdGV4dCB0aGF0IGVuZGVkIGlu
IGEgdHJhaWxpbmcgc3BhY2UuCkBAIC02Mjc4LDcgKzYyNzgsNyBAQCBzdGF0aWMgaW50IGdldEhl
aWdodEZvckxpbmVDb3VudChSZW5kZXJCCiAgICAgICAgIGlmIChibG9jay0+Y2hpbGRyZW5Jbmxp
bmUoKSkgewogICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBib3ggPSBibG9jay0+Zmly
c3RSb290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCsrY291bnQgPT0gbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+
bGluZUJvdHRvbSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJvdHRvbSgpICsg
YmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiB6ZXJvTGF5b3V0VW5pdCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBib3gtPmxpbmVCb3R0b20oKSArIChpbmNsdWRlQm90dG9tID8gKGJsb2Nr
LT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogWkVST19MQVlPVVRf
VU5JVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC02Mjg3
LDcgKzYyODcsNyBAQCBzdGF0aWMgaW50IGdldEhlaWdodEZvckxpbmVDb3VudChSZW5kZXJCCiAg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkgewogICAgICAgICAgICAg
ICAgICAgICBpbnQgcmVzdWx0ID0gZ2V0SGVpZ2h0Rm9yTGluZUNvdW50KHRvUmVuZGVyQmxvY2so
b2JqKSwgbCwgZmFsc2UsIGNvdW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBvYmotPnkoKSAr
IChpbmNsdWRlQm90dG9tID8gKGJsb2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5n
Qm90dG9tKCkpIDogemVyb0xheW91dFVuaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdCArIG9iai0+eSgpICsgKGluY2x1ZGVCb3R0b20gPyAoYmxvY2stPmJvcmRlckJv
dHRvbSgpICsgYmxvY2stPnBhZGRpbmdCb3R0b20oKSkgOiBaRVJPX0xBWU9VVF9VTklUKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW9iai0+aXNGbG9hdGlu
Z09yUG9zaXRpb25lZCgpICYmICFvYmotPmlzUnVuSW4oKSkKICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsRmxvd0NoaWxkV2l0aG91dExpbmVzID0gb2JqOwpAQCAtNjM3NywxMSArNjM3NywxMSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpib3JkZXJGaXRBZGp1c3QoTGF5b3V0CiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFdhbGsgYW55IG5vcm1hbCBmbG93IGxpbmVzIHRvIHNudWdseSBmaXQuCi0g
ICAgTGF5b3V0VW5pdCBsZWZ0ID0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpOwot
ICAgIExheW91dFVuaXQgcmlnaHQgPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWluKCk7
CisgICAgTGF5b3V0VW5pdCBsZWZ0ID0gTUFYX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQg
cmlnaHQgPSBNSU5fTEFZT1VUX1VOSVQ7CiAgICAgTGF5b3V0VW5pdCBvbGRXaWR0aCA9IHJlY3Qu
d2lkdGgoKTsKICAgICBhZGp1c3RGb3JCb3JkZXJGaXQoMCwgbGVmdCwgcmlnaHQpOwotICAgIGlm
IChsZWZ0ICE9IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkgeworICAgIGlmIChs
ZWZ0ICE9IE1BWF9MQVlPVVRfVU5JVCkgewogICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIG9sZFdp
ZHRoIC0gKGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSkpOwogCiAgICAgICAgIGxlZnQg
LT0gKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwpAQCAtNjM5MCw3ICs2MzkwLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0KExheW91dAogICAgICAgICAgICAgcmVj
dC5leHBhbmQoLWxlZnQsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChyaWdodCAhPSBu
dW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWluKCkpIHsKKyAgICBpZiAocmlnaHQgIT0gTUlO
X0xBWU9VVF9VTklUKSB7CiAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpKTsKIAogICAgICAgICByaWdodCArPSAoYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdSaWdodCgpKTsKQEAgLTY4MjAsNyArNjgyMCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmFkanVzdEZvclVuc3BsaXQKICAgICAgICAgfHwgKGNoZWNrUmVnaW9uQnJlYWtzICYmIGNo
aWxkLT5zdHlsZSgpLT5yZWdpb25CcmVha0luc2lkZSgpID09IFBCQVZPSUQpOwogICAgIGlmICgh
aXNVbnNwbGl0dGFibGUpCiAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwotICAgIExheW91
dFVuaXQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSAr
IChpbmNsdWRlTWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFm
dGVyRm9yQ2hpbGQoY2hpbGQpIDogemVyb0xheW91dFVuaXQpOworICAgIExheW91dFVuaXQgY2hp
bGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChpbmNsdWRl
TWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hp
bGQoY2hpbGQpIDogWkVST19MQVlPVVRfVU5JVCk7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0
YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1
bW5JbmZvKQogICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVt
Q29sdW1uSGVpZ2h0KGNoaWxkTG9naWNhbEhlaWdodCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NywxMiArMjU3LDEy
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudChDb2x1bW5JbmZvKikgY29uc3Q7
CiAgICAgTGF5b3V0UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyosIHVuc2lnbmVkKSBjb25z
dDsKIAotICAgIExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9y
YXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogemVyb0xheW91dFVuaXQ7
IH0KKyAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA6IFpFUk9fTEFZT1VUX1VOSVQ7
IH0KICAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsKICAgICAKICAgICAv
LyBUaGUgcGFnZSBsb2dpY2FsIG9mZnNldCBpcyB0aGUgb2JqZWN0J3Mgb2Zmc2V0IGZyb20gdGhl
IHRvcCBvZiB0aGUgcGFnZSBpbiB0aGUgcGFnZSBwcm9ncmVzc2lvbgogICAgIC8vIGRpcmVjdGlv
biAoc28gYW4geC1vZmZzZXQgaW4gdmVydGljYWwgdGV4dCBhbmQgYSB5LW9mZnNldCBmb3IgaG9y
aXpvbnRhbCB0ZXh0KS4KLSAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnZUxvZ2ljYWxPZmZzZXQgOiB6
ZXJvTGF5b3V0VW5pdDsgfQorICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdlTG9naWNhbE9mZnNldCA6
IFpFUk9fTEFZT1VUX1VOSVQ7IH0KICAgICB2b2lkIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KExheW91
dFVuaXQpOwogCiAgICAgUm9vdElubGluZUJveCogbGluZUdyaWRCb3goKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9saW5lR3JpZEJveCA6IDA7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
CShyZXZpc2lvbiAxMTM1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Niw4ICsxMDk2LDggQEAgcHVi
bGljOgogICAgIHZvaWQgdXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChSb290SW5saW5lQm94KiBi
b3gsIExheW91dFVuaXQgcGFnaW5hdGlvbkRlbHRhID0gMCkKICAgICB7CiAgICAgICAgIG1fdXNl
c1JlcGFpbnRCb3VuZHMgPSB0cnVlOwotICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbWlu
KG1fcmVwYWludExvZ2ljYWxUb3AsIGJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgKyBt
aW4ocGFnaW5hdGlvbkRlbHRhLCB6ZXJvTGF5b3V0VW5pdCkpOwotICAgICAgICBtX3JlcGFpbnRM
b2dpY2FsQm90dG9tID0gbWF4KG1fcmVwYWludExvZ2ljYWxCb3R0b20sIGJveC0+bG9naWNhbEJv
dHRvbVZpc3VhbE92ZXJmbG93KCkgKyBtYXgocGFnaW5hdGlvbkRlbHRhLCB6ZXJvTGF5b3V0VW5p
dCkpOworICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbWluKG1fcmVwYWludExvZ2ljYWxU
b3AsIGJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgKyBtaW4ocGFnaW5hdGlvbkRlbHRh
LCBaRVJPX0xBWU9VVF9VTklUKSk7CisgICAgICAgIG1fcmVwYWludExvZ2ljYWxCb3R0b20gPSBt
YXgobV9yZXBhaW50TG9naWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZs
b3coKSArIG1heChwYWdpbmF0aW9uRGVsdGEsIFpFUk9fTEFZT1VUX1VOSVQpKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBlbmRMaW5lTWF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZU1h
dGNoZWQ7IH0KQEAgLTE1NTYsNyArMTU1Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrRmxv
YXRzSW5DbGVhbkxpbmUKICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRUb3AgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QueSgpIDogZmxvYXRz
W2Zsb2F0SW5kZXhdLnJlY3QueCgpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdEhlaWdo
dCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXgoZmxvYXRzW2Zsb2F0SW5kZXhdLnJl
Y3QuaGVpZ2h0KCksIG5ld1NpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWF4KGZsb2F0c1tmbG9h
dEluZGV4XS5yZWN0LndpZHRoKCksIG5ld1NpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBmbG9h
dEhlaWdodCA9IG1pbihmbG9hdEhlaWdodCwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1h
eCgpIC0gZmxvYXRUb3ApOworICAgICAgICAgICAgZmxvYXRIZWlnaHQgPSBtaW4oZmxvYXRIZWln
aHQsIE1BWF9MQVlPVVRfVU5JVCAtIGZsb2F0VG9wKTsKICAgICAgICAgICAgIGxpbmUtPm1hcmtE
aXJ0eSgpOwogICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UobGluZS0+bGlu
ZUJvdHRvbVdpdGhMZWFkaW5nKCksIGZsb2F0VG9wICsgZmxvYXRIZWlnaHQsIGxpbmUpOwogICAg
ICAgICAgICAgZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Quc2V0U2l6ZShuZXdTaXplKTsKQEAgLTI2
NjUsNyArMjY2NSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjoK
IAogdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKQogewot
ICAgIExheW91dFVuaXQgZW5kUGFkZGluZyA9IGhhc092ZXJmbG93Q2xpcCgpID8gcGFkZGluZ0Vu
ZCgpIDogemVyb0xheW91dFVuaXQ7CisgICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5nID0gaGFzT3Zl
cmZsb3dDbGlwKCkgPyBwYWRkaW5nRW5kKCkgOiBaRVJPX0xBWU9VVF9VTklUOwogICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFy
cyBjb3VsZCBzaG93IHdoZW4gd2UgZG9uJ3Qgd2FudCB0aGVtIHRvLgogICAgIGlmIChoYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhZW5kUGFkZGluZyAmJiBub2RlKCkgJiYgbm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKSAmJiBub2RlKCkgPT0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgJiYg
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBlbmRQYWRkaW5nID0g
MTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAx
MTM1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyNiw3ICsxMzI2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNocmlu
a0xvZ2ljYWxXaWR0aAogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNh
bFRvcCgpOwogICAgIExheW91dFVuaXQgYWRqdXN0ZWRQYWdlT2Zmc2V0Rm9yQ29udGFpbmluZ0Js
b2NrID0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSAtIGxvZ2ljYWxUb3AoKTsKICAg
ICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZlJlZ2lvbiA9IHJlZ2lvbiA/IHJlZ2lvbi0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSA6IHplcm9MYXlvdXRVbml0Owor
ICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24g
PyByZWdpb24tPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSAtIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UgOiBaRVJPX0xBWU9VVF9VTklUOwogICAgICAgICBsb2dpY2Fs
VG9wUG9zaXRpb24gPSBtYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9wUG9zaXRpb24g
KyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9uKTsKICAgICAgICAgY29udGFpbmluZ0Jsb2Nr
UmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKICAgICB9CkBA
IC0zNTQzLDcgKzM1NDMsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZv
clBvCiAgICAgfQogCiAgICAgLy8gUGFzcyBvZmYgdG8gdGhlIGNsb3Nlc3QgY2hpbGQuCi0gICAg
TGF5b3V0VW5pdCBtaW5EaXN0ID0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpOwor
ICAgIExheW91dFVuaXQgbWluRGlzdCA9IE1BWF9MQVlPVVRfVU5JVDsKICAgICBSZW5kZXJCb3gq
IGNsb3Nlc3RSZW5kZXJlciA9IDA7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQb2ludCA9IHBv
aW50OwogICAgIGlmIChpc1RhYmxlUm93KCkpCkBAIC0zNTU5LDkgKzM1NTksOSBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIAogICAgICAgICBSZW5k
ZXJCb3gqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3gocmVuZGVyT2JqZWN0KTsKIAotICAgICAgICBM
YXlvdXRVbml0IHRvcCA9IHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5n
VG9wKCkgKyAoaXNUYWJsZVJvdygpID8gemVyb0xheW91dFVuaXQgOiByZW5kZXJlci0+eSgpKTsK
KyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJl
ci0+cGFkZGluZ1RvcCgpICsgKGlzVGFibGVSb3coKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5k
ZXJlci0+eSgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+
Y29udGVudEhlaWdodCgpOwotICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9y
ZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gemVy
b0xheW91dFVuaXQgOiByZW5kZXJlci0+eCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0g
cmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgKGlzVGFi
bGVSb3coKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5kZXJlci0+eCgpKTsKICAgICAgICAgTGF5
b3V0VW5pdCByaWdodCA9IGxlZnQgKyByZW5kZXJlci0+Y29udGVudFdpZHRoKCk7CiAgICAgICAg
IAogICAgICAgICBpZiAocG9pbnQueCgpIDw9IHJpZ2h0ICYmIHBvaW50LngoKSA+PSBsZWZ0ICYm
IHBvaW50LnkoKSA8PSB0b3AgJiYgcG9pbnQueSgpID49IGJvdHRvbSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOSArMTY3
LDkgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3co
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4
WExheW91dE92ZXJmbG93KCkgOiBtYXhZTGF5b3V0T3ZlcmZsb3coKTsgfQogICAgIAogICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25zdCB7IHJldHVybiBtX292
ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkgOiBib3JkZXJCb3hSZWN0
KCk7IH0KLSAgICBMYXlvdXRVbml0IG1pbllWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1fb3ZlcmZsb3c/IG1fb3ZlcmZsb3ctPm1pbllWaXN1YWxPdmVyZmxvdygpIDogemVyb0xheW91
dFVuaXQ7IH0KKyAgICBMYXlvdXRVbml0IG1pbllWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0
dXJuIG1fb3ZlcmZsb3c/IG1fb3ZlcmZsb3ctPm1pbllWaXN1YWxPdmVyZmxvdygpIDogWkVST19M
QVlPVVRfVU5JVDsgfQogICAgIExheW91dFVuaXQgbWF4WVZpc3VhbE92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPm1heFlWaXN1YWxPdmVyZmxvdygpIDog
aGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IG1pblhWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5taW5YVmlzdWFsT3ZlcmZsb3coKSA6IHpl
cm9MYXlvdXRVbml0OyB9CisgICAgTGF5b3V0VW5pdCBtaW5YVmlzdWFsT3ZlcmZsb3coKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bWluWFZpc3VhbE92ZXJmbG93KCkg
OiBaRVJPX0xBWU9VVF9VTklUOyB9CiAgICAgTGF5b3V0VW5pdCBtYXhYVmlzdWFsT3ZlcmZsb3co
KSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bWF4WFZpc3VhbE92ZXJm
bG93KCkgOiB3aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IG1pblhWaXN1YWxPdmVyZmxvdygpIDogbWluWVZpc3VhbE92ZXJmbG93KCk7IH0KICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1heFhWaXN1YWxPdmVyZmxvdygpIDogbWF4
WVZpc3VhbE92ZXJmbG93KCk7IH0KQEAgLTMyMCw3ICszMjAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAKICAgICBSZW5kZXJCb3hSZWdpb25J
bmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlclJlZ2lvbiosIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2Fj
aGVSZW5kZXJCb3hSZWdpb25JbmZvKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvbihSZW5kZXJSZWdpb24qID0gMCwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNh
bFRvcE9mRmlyc3RQYWdlID0gemVyb0xheW91dFVuaXQpOworICAgIHZvaWQgY29tcHV0ZUxvZ2lj
YWxXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiogPSAwLCBMYXlvdXRVbml0IG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UgPSBaRVJPX0xBWU9VVF9VTklUKTsKIAogICAgIGJvb2wgc3Ry
ZXRjaGVzVG9WaWV3cG9ydCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMTM1Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODYsNyArNDg2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6b2Zmc2V0TAogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50KCk7Ci0gICAgTGF5b3V0VW5pdCB4
UG9zID0gKGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+bGVmdCgpIDogemVyb0xheW91dFVu
aXQpOworICAgIExheW91dFVuaXQgeFBvcyA9IChpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcykt
PmxlZnQoKSA6IFpFUk9fTEFZT1VUX1VOSVQpOwogICAgIAogICAgIC8vIElmIHRoZSBvZmZzZXRQ
YXJlbnQgb2YgdGhlIGVsZW1lbnQgaXMgbnVsbCwgb3IgaXMgdGhlIEhUTUwgYm9keSBlbGVtZW50
LAogICAgIC8vIHJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2FudmFzIG9yaWdpbiBh
bmQgdGhlIGxlZnQgYm9yZGVyIGVkZ2UgCkBAIC01MjAsNyArNTIwLDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0VAogICAgICAgICByZXR1cm4gMDsKICAgICAKICAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50KCk7Ci0gICAg
TGF5b3V0VW5pdCB5UG9zID0gKGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+dG9wKCkgOiB6
ZXJvTGF5b3V0VW5pdCk7CisgICAgTGF5b3V0VW5pdCB5UG9zID0gKGlzQm94KCkgPyB0b1JlbmRl
ckJveCh0aGlzKS0+dG9wKCkgOiBaRVJPX0xBWU9VVF9VTklUKTsKICAgICAKICAgICAvLyBJZiB0
aGUgb2Zmc2V0UGFyZW50IG9mIHRoZSBlbGVtZW50IGlzIG51bGwsIG9yIGlzIHRoZSBIVE1MIGJv
ZHkgZWxlbWVudCwKICAgICAvLyByZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNhbnZh
cyBvcmlnaW4gYW5kIHRoZSB0b3AgYm9yZGVyIGVkZ2UgCkBAIC03NjMsOCArNzYzLDggQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgIAogICAgIGludCBiTGVm
dCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJvcmRlckxlZnQoKSA6IDA7CiAgICAgaW50IGJSaWdodCA9
IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDogMDsKLSAgICBMYXlvdXRVbml0IHBM
ZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6IHplcm9MYXlvdXRVbml0Owot
ICAgIExheW91dFVuaXQgcFJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IHBhZGRpbmdSaWdodCgp
IDogemVyb0xheW91dFVuaXQ7CisgICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1ZGVMZWZ0RWRn
ZSA/IHBhZGRpbmdMZWZ0KCkgOiBaRVJPX0xBWU9VVF9VTklUOworICAgIExheW91dFVuaXQgcFJp
Z2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IHBhZGRpbmdSaWdodCgpIDogWkVST19MQVlPVVRfVU5J
VDsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgY2xpcFdpdGhTY3JvbGxpbmdTdGF0
ZVNhdmVyKCpjb250ZXh0LCBjbGlwcGVkV2l0aExvY2FsU2Nyb2xsaW5nKTsKICAgICBMYXlvdXRS
ZWN0IHNjcm9sbGVkUGFpbnRSZWN0ID0gcmVjdDsKQEAgLTc4NywxMCArNzg3LDEwIEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAgICBpZiAoYmdMYXllci0+Y2xp
cCgpID09IFBhZGRpbmdGaWxsQm94IHx8IGJnTGF5ZXItPmNsaXAoKSA9PSBDb250ZW50RmlsbEJv
eCkgewogICAgICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRlbnQgYm94ZXMgYXMg
bmVjZXNzYXJ5LgogICAgICAgICBib29sIGluY2x1ZGVQYWRkaW5nID0gYmdMYXllci0+Y2xpcCgp
ID09IENvbnRlbnRGaWxsQm94OwotICAgICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gTGF5b3V0
UmVjdChzY3JvbGxlZFBhaW50UmVjdC54KCkgKyBiTGVmdCArIChpbmNsdWRlUGFkZGluZyA/IHBM
ZWZ0IDogemVyb0xheW91dFVuaXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxlZFBhaW50UmVjdC55KCkgKyBib3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/
IHBhZGRpbmdUb3AoKSA6IHplcm9MYXlvdXRVbml0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJpZ2h0IC0g
KGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBwUmlnaHQgOiB6ZXJvTGF5b3V0VW5pdCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LmhlaWdodCgp
IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIChpbmNsdWRlUGFkZGluZyA/IHBhZGRp
bmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSA6IHplcm9MYXlvdXRVbml0KSk7CisgICAgICAgIExh
eW91dFJlY3QgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KHNjcm9sbGVkUGFpbnRSZWN0LngoKSArIGJM
ZWZ0ICsgKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgOiBaRVJPX0xBWU9VVF9VTklUKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3QueSgpICsgYm9y
ZGVyVG9wKCkgKyAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgOiBaRVJPX0xBWU9VVF9V
TklUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRQYWludFJl
Y3Qud2lkdGgoKSAtIGJMZWZ0IC0gYlJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcExlZnQgKyBw
UmlnaHQgOiBaRVJPX0xBWU9VVF9VTklUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Nyb2xsZWRQYWludFJlY3QuaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJv
dHRvbSgpIC0gKGluY2x1ZGVQYWRkaW5nID8gcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgp
IDogWkVST19MQVlPVVRfVU5JVCkpOwogICAgICAgICBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIu
c2F2ZSgpOwogICAgICAgICBjb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICB9IGVsc2UgaWYg
KGJnTGF5ZXItPmNsaXAoKSA9PSBUZXh0RmlsbEJveCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJ
KHJldmlzaW9uIDExMzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNyArNTE3LDcgQEAg
dm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAgICAgICAg
ICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOyBjaGlsZDsgY2hp
bGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgYWxsb3dlZEZsZXggPSBhbGxvd2VkQ2hpbGRGbGV4KGNoaWxkLCBleHBhbmRpbmcsIGkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRGbGV4KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4ID09
IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkgPyBhbGxvd2VkRmxleCA6IExheW91
dFVuaXQoYWxsb3dlZEZsZXggKiAodG90YWxGbGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZsZXgo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgcHJvamVjdGVkRmxl
eCA9IChhbGxvd2VkRmxleCA9PSBNQVhfTEFZT1VUX1VOSVQpID8gYWxsb3dlZEZsZXggOiBMYXlv
dXRVbml0KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxkLT5zdHlsZSgpLT5ib3hGbGV4
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUF2YWlsYWJsZVRoaXNQYXNz
ID0gZXhwYW5kaW5nID8gbWluKHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2plY3RlZEZsZXgp
IDogbWF4KHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MsIHByb2plY3RlZEZsZXgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC03NzEsNyArNzcxLDcg
QEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAgICAg
ICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBpdGVyYXRvci5maXJzdCgpOyBjaGlsZDsg
Y2hpbGQgPSBpdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYWxsb3dlZEZsZXggPSBhbGxvd2VkQ2hpbGRGbGV4KGNoaWxkLCBleHBhbmRpbmcsIGkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRGbGV4KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRGbGV4ID0gKGFsbG93ZWRGbGV4
ID09IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkgPyBhbGxvd2VkRmxleCA6IHN0
YXRpY19jYXN0PExheW91dFVuaXQ+KGFsbG93ZWRGbGV4ICogKHRvdGFsRmxleCAvIGNoaWxkLT5z
dHlsZSgpLT5ib3hGbGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IHByb2plY3RlZEZsZXggPSAoYWxsb3dlZEZsZXggPT0gTUFYX0xBWU9VVF9VTklUKSA/IGFs
bG93ZWRGbGV4IDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oYWxsb3dlZEZsZXggKiAodG90YWxG
bGV4IC8gY2hpbGQtPnN0eWxlKCktPmJveEZsZXgoKSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwYWNlQXZhaWxhYmxlVGhpc1Bhc3MgPSBleHBhbmRpbmcgPyBtaW4oc3BhY2VBdmFp
bGFibGVUaGlzUGFzcywgcHJvamVjdGVkRmxleCkgOiBtYXgoc3BhY2VBdmFpbGFibGVUaGlzUGFz
cywgcHJvamVjdGVkRmxleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTEwMDAsNyArMTAwMCw3IEBAIExheW91dFVuaXQgUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94OjoKICAgICBpZiAoZXhwYW5kaW5nKSB7CiAgICAgICAgIGlmIChpc0hv
cml6b250YWwoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5kbGUg
Zml4ZWQgdmFsdWVzLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhXaWR0aCA9IG51bWVyaWNf
bGltaXRzPExheW91dFVuaXQ+OjptYXgoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWF4V2lk
dGggPSBNQVhfTEFZT1VUX1VOSVQ7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoID0gY2hp
bGQtPm92ZXJyaWRlV2lkdGgoKSAtIGNoaWxkLT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAg
ICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSAm
JiBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAg
bWF4V2lkdGggPSBjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpOwpAQCAtMTAwOCwx
NiArMTAwOCwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6CiAg
ICAgICAgICAgICAgICAgbWF4V2lkdGggPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+bWF4V2lkdGgoKS50eXBl
KCkgPT0gTWluSW50cmluc2ljKQogICAgICAgICAgICAgICAgIG1heFdpZHRoID0gY2hpbGQtPm1p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgaWYgKG1heFdpZHRoID09IG51
bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkKKyAgICAgICAgICAgIGlmIChtYXhXaWR0
aCA9PSBNQVhfTEFZT1VUX1VOSVQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoOwog
ICAgICAgICAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PigwLCBtYXhXaWR0aCAtIHdpZHRoKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGp1c3QgaGFu
ZGxlIGZpeGVkIHZhbHVlcy4KLSAgICAgICAgICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gbnVt
ZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBt
YXhIZWlnaHQgPSBNQVhfTEFZT1VUX1VOSVQ7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGhlaWdo
dCA9IGNoaWxkLT5vdmVycmlkZUhlaWdodCgpIC0gY2hpbGQtPmJvcmRlckFuZFBhZGRpbmdIZWln
aHQoKTsKICAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5k
ZWZpbmVkKCkgJiYgY2hpbGQtPnN0eWxlKCktPm1heEhlaWdodCgpLmlzRml4ZWQoKSkKICAgICAg
ICAgICAgICAgICBtYXhIZWlnaHQgPSBjaGlsZC0+c3R5bGUoKS0+bWF4SGVpZ2h0KCkudmFsdWUo
KTsKLSAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPT0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5p
dD46Om1heCgpKQorICAgICAgICAgICAgaWYgKG1heEhlaWdodCA9PSBNQVhfTEFZT1VUX1VOSVQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1heEhlaWdodDsKICAgICAgICAgICAgIHJldHVybiBt
YXg8TGF5b3V0VW5pdD4oMCwgbWF4SGVpZ2h0IC0gaGVpZ2h0KTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiAx
MTM1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsMTEgKzEzMiwxMSBAQCB2b2lkIFJlbmRlckZpZWxkc2V0Ojpw
YWludEJveERlY29yYXRpb25zCiAgICAgLy8gY2FzZXMgdGhlIGxlZ2VuZCBpcyBlbWJlZGRlZCBp
biB0aGUgcmlnaHQgYW5kIGJvdHRvbSBib3JkZXJzIHJlc3BlY3RpdmVseS4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMzYKICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICBMYXlvdXRVbml0IHlPZmYg
PSAobGVnZW5kLT55KCkgPiAwKSA/IHplcm9MYXlvdXRVbml0IDogKGxlZ2VuZC0+aGVpZ2h0KCkg
LSBib3JkZXJUb3AoKSkgLyAyOworICAgICAgICBMYXlvdXRVbml0IHlPZmYgPSAobGVnZW5kLT55
KCkgPiAwKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRlclRv
cCgpKSAvIDI7CiAgICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0LmhlaWdodCgp
IC0geU9mZik7CiAgICAgICAgIHBhaW50UmVjdC5zZXRZKHBhaW50UmVjdC55KCkgKyB5T2ZmKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAw
KSA/IHplcm9MYXlvdXRVbml0IDogKGxlZ2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAy
OworICAgICAgICBMYXlvdXRVbml0IHhPZmYgPSAobGVnZW5kLT54KCkgPiAwKSA/IFpFUk9fTEFZ
T1VUX1VOSVQgOiAobGVnZW5kLT53aWR0aCgpIC0gYm9yZGVyTGVmdCgpKSAvIDI7CiAgICAgICAg
IHBhaW50UmVjdC5zZXRXaWR0aChwYWludFJlY3Qud2lkdGgoKSAtIHhPZmYpOwogICAgICAgICBw
YWludFJlY3Quc2V0WChwYWludFJlY3QueCgpICsgeE9mZik7CiAgICAgfQpAQCAtMTgzLDExICsx
ODMsMTEgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRNYXNrKFBhaW50SW5mbwogICAgIC8v
IGNhc2VzIHRoZSBsZWdlbmQgaXMgZW1iZWRkZWQgaW4gdGhlIHJpZ2h0IGFuZCBib3R0b20gYm9y
ZGVycyByZXNwZWN0aXZlbHkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MjM2CiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyB6ZXJv
TGF5b3V0VW5pdCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKKyAgICAg
ICAgTGF5b3V0VW5pdCB5T2ZmID0gKGxlZ2VuZC0+eSgpID4gMCkgPyBaRVJPX0xBWU9VVF9VTklU
IDogKGxlZ2VuZC0+aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSkgLyAyOwogICAgICAgICBwYWludFJl
Y3QuZXhwYW5kKDAsIC15T2ZmKTsKICAgICAgICAgcGFpbnRSZWN0Lm1vdmUoMCwgeU9mZik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgTGF5b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkg
PyB6ZXJvTGF5b3V0VW5pdCA6IChsZWdlbmQtPndpZHRoKCkgLSBib3JkZXJMZWZ0KCkpIC8gMjsK
KyAgICAgICAgTGF5b3V0VW5pdCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkgPyBaRVJPX0xBWU9V
VF9VTklUIDogKGxlZ2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAgICBw
YWludFJlY3QuZXhwYW5kKC14T2ZmLCAwKTsKICAgICAgICAgcGFpbnRSZWN0Lm1vdmUoeE9mZiwg
MCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwCShyZXZpc2lvbiAxMTM1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcg
QEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbAogCiB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpyZXBvc2l0aW9uTG9naWNhbEhlaWdodERlcGVuZGVudEZsZXhJdGVtcyhG
bGV4T3JkZXJJdGVyYXRvciYgaXRlcmF0b3IsIFdURjo6VmVjdG9yPExpbmVDb250ZXh0PiYgbGlu
ZUNvbnRleHRzLCBMYXlvdXRVbml0JiBvbGRDbGllbnRBZnRlckVkZ2UpCiB7Ci0gICAgTGF5b3V0
VW5pdCBjcm9zc0F4aXNTdGFydEVkZ2UgPSBsaW5lQ29udGV4dHMuaXNFbXB0eSgpID8gemVyb0xh
eW91dFVuaXQgOiBsaW5lQ29udGV4dHNbMF0uY3Jvc3NBeGlzT2Zmc2V0OworICAgIExheW91dFVu
aXQgY3Jvc3NBeGlzU3RhcnRFZGdlID0gbGluZUNvbnRleHRzLmlzRW1wdHkoKSA/IFpFUk9fTEFZ
T1VUX1VOSVQgOiBsaW5lQ29udGV4dHNbMF0uY3Jvc3NBeGlzT2Zmc2V0OwogICAgIHBhY2tGbGV4
TGluZXMoaXRlcmF0b3IsIGxpbmVDb250ZXh0cyk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgc2lu
Z2xlIGxpbmUgZmxleGJveCwgdGhlIGxpbmUgaGVpZ2h0IGlzIGFsbCB0aGUgYXZhaWxhYmxlIHNw
YWNlLgpAQCAtNjkwLDcgKzY5MCw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6Omxp
bmVCcmVha0wKIAogICAgIExheW91dFVuaXQgaGVpZ2h0ID0gY29tcHV0ZUNvbnRlbnRMb2dpY2Fs
SGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKICAgICBpZiAoaGVpZ2h0ID09
IC0xKQotICAgICAgICBoZWlnaHQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+Ojpt
YXgoKTsKKyAgICAgICAgaGVpZ2h0ID0gTUFYX0xBWU9VVF9VTklUOwogICAgIExheW91dFVuaXQg
bWF4SGVpZ2h0ID0gY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9n
aWNhbE1heEhlaWdodCgpKTsKICAgICBpZiAobWF4SGVpZ2h0ICE9IC0xKQogICAgICAgICBoZWln
aHQgPSBzdGQ6Om1pbihoZWlnaHQsIG1heEhlaWdodCk7CkBAIC0xMDM4LDcgKzEwMzgsNyBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVuKEZsCiAKICAgICBSZW5kZXJCb3gq
IGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0g
MDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJlcikgewotICAg
ICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPExheW91dFVuaXQ+OjptYXgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5BZnRl
ckJhc2VsaW5lID0gTUFYX0xBWU9VVF9VTklUOwogICAgICAgICBMYXlvdXRVbml0IGxpbmVDcm9z
c0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0ZW50Owog
ICAgICAgICBMYXlvdXRVbml0IG1heEFzY2VudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5t
YXhBc2NlbnQ7CiAKQEAgLTExMTMsNyArMTExMyw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmFwcGx5U3RyZXRjaEFsaWcKICAgICB9IGVsc2UgaWYgKGlzQ29sdW1uRmxvdygpICYmIGNoaWxk
LT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSAmJiBpc011bHRpbGluZSgpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgbWluLXdpZHRoIGFuZCBtYXgtd2lkdGguCiAgICAgICAg
IExheW91dFVuaXQgY2hpbGRXaWR0aCA9IGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNN
YXJnaW5FeHRlbnRGb3JDaGlsZChjaGlsZCk7Ci0gICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZVdp
ZHRoKHN0ZDo6bWF4KHplcm9MYXlvdXRVbml0LCBjaGlsZFdpZHRoKSk7CisgICAgICAgIGNoaWxk
LT5zZXRPdmVycmlkZVdpZHRoKHN0ZDo6bWF4KFpFUk9fTEFZT1VUX1VOSVQsIGNoaWxkV2lkdGgp
KTsKICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgIGNo
aWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDExMzU3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDEwICsyMDAsMTAgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpsYXlvdXQoKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHJl
Z2lvblJlY3Q7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVnaW9uUmVjdCA9IExheW91dFJlY3Qoc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSID8gemVyb0xheW91dFVuaXQgOiBsb2dpY2FsV2lkdGgoKSAtIHJl
Z2lvbi0+Y29udGVudFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbi0+Y29udGVudFdpZHRo
KCksIHJlZ2lvbi0+Y29udGVudEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaW9u
UmVjdCA9IExheW91dFJlY3Qoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gWkVST19MQVlP
VVRfVU5JVCA6IGxvZ2ljYWxXaWR0aCgpIC0gcmVnaW9uLT5jb250ZW50V2lkdGgoKSwgbG9naWNh
bEhlaWdodCwgcmVnaW9uLT5jb250ZW50V2lkdGgoKSwgcmVnaW9uLT5jb250ZW50SGVpZ2h0KCkp
OwogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ICs9IHJlZ2lvblJlY3QuaGVpZ2h0
KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVnaW9u
UmVjdCA9IExheW91dFJlY3QobG9naWNhbEhlaWdodCwgc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSID8gemVyb0xheW91dFVuaXQgOiBsb2dpY2FsV2lkdGgoKSAtIHJlZ2lvbi0+Y29udGVudEhl
aWdodCgpLCByZWdpb24tPmNvbnRlbnRXaWR0aCgpLCByZWdpb24tPmNvbnRlbnRIZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJlY3QgPSBMYXlvdXRSZWN0KGxvZ2ljYWxIZWln
aHQsIHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dp
Y2FsV2lkdGgoKSAtIHJlZ2lvbi0+Y29udGVudEhlaWdodCgpLCByZWdpb24tPmNvbnRlbnRXaWR0
aCgpLCByZWdpb24tPmNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGxvZ2lj
YWxIZWlnaHQgKz0gcmVnaW9uUmVjdC53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICByZWdpb24tPnNldFJlZ2lvblJlY3QocmVnaW9uUmVjdCk7CkBAIC0yNDYsNyAr
MjQ2LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlTG9naWNhbFdpZAogICAgICAg
ICAKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGggPSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gcmVnaW9uLT5jb250ZW50V2lkdGgoKSA6IHJlZ2lvbi0+Y29udGVudEhl
aWdodCgpOwogICAgICAgICBpZiAocmVnaW9uTG9naWNhbFdpZHRoICE9IGxvZ2ljYWxXaWR0aCkg
ewotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUiA/IHplcm9MYXlvdXRVbml0IDogbG9naWNhbFdpZHRoIC0gcmVnaW9uTG9naWNh
bFdpZHRoOworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUiA/IFpFUk9fTEFZT1VUX1VOSVQgOiBsb2dpY2FsV2lkdGggLSByZWdp
b25Mb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICByZWdpb24tPnNldFJlbmRlckJveFJlZ2lvbklu
Zm8odGhpcywgbG9naWNhbExlZnQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgZmFsc2UpOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAJKHJldmlzaW9uIDExMzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzgsOCArOTc4LDggQEAgTGF5b3V0UmVjdCBS
ZW5kZXJJbmxpbmU6OmxpbmVzVmlzdWFsT3ZlcgogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OwogCiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5k
IHRoZSBtYXhpbWFsIHJpZ2h0IHNpZGUuCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUg
PSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7Ci0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRTaWRlID0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1pbigpOworICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnRTaWRlID0gTUFYX0xBWU9VVF9VTklUOworICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0U2lkZSA9IE1JTl9MQVlPVVRfVU5JVDsKICAgICBmb3IgKElubGluZUZs
b3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5l
Qm94KCkpIHsKICAgICAgICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwg
Y3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgbG9naWNhbFJpZ2h0
U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJyLT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVy
ZmxvdygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
cmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1OCw3ICsxODU4LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIFN0cmluZzo6bnVtYmVy
KHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5SaWdodCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6
b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0
IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gemVy
b0xheW91dFVuaXQgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOworICAgICAg
ICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5n
Qm9yZGVyID8gWkVST19MQVlPVVRfVU5JVCA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nV2lk
dGgoKSk7CiAgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7CiAgICAg
ICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0
aCwgU3RyaW5nOjpudW1iZXIocm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRo
KCkpKSArICJweCIsIGZhbHNlKTsKICAgICB9CkBAIC0xODY5LDcgKzE4NjksNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBTdHJpbmc6
Om51bWJlcihyZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNl
KTsKICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlNYXJnaW5Cb3R0b20sIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0
b20oKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIExh
eW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0Jv
cmRlciA/IHplcm9MYXlvdXRVbml0IDogcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQo
KSk7CisgICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAt
IChpc0JveFNpemluZ0JvcmRlciA/IFpFUk9fTEFZT1VUX1VOSVQgOiByZW5kZXJlci0+Ym9yZGVy
QW5kUGFkZGluZ0hlaWdodCgpKTsKICAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6
b29tRmFjdG9yOwogICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihyb3VuZFRvSW50KGJhc2VIZWlnaHQg
KyBkaWZmZXJlbmNlLmhlaWdodCgpKSkgKyAicHgiLCBmYWxzZSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24g
MTEzNTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJr
ZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAgICAgICAgICAgICBjYXNlIE5vbmVMaXN0U3R5
bGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblN0YXJ0ID0gbV90ZXh0Lmlz
RW1wdHkoKSA/IHplcm9MYXlvdXRVbml0IDogLW1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0g
b2Zmc2V0IC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblN0YXJ0ID0gbV90ZXh0
LmlzRW1wdHkoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAtbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgLSBvZmZzZXQgLyAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG1hcmdpbkVuZCA9IC1tYXJnaW5TdGFydCAtIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAko
cmV2aXNpb24gMTEzNTc3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTMgKzEyNSwxMyBAQCBpbnQgUmVuZGVyTWFy
cXVlZTo6Y29tcHV0ZVBvc2l0aW9uKEVNYXJxCiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpciA9
PSBNUklHSFQpIHsKICAgICAgICAgICAgIGlmIChzdG9wQXRDb250ZW50RWRnZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWF4KHplcm9MYXlvdXRVbml0LCBsdHIgPyAoY29udGVudFdpZHRoIC0g
Y2xpZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1heChaRVJPX0xBWU9VVF9VTklULCBsdHIgPyAoY29udGVudFdpZHRoIC0g
Y2xpZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGx0ciA/IGNvbnRlbnRXaWR0aCA6IGNsaWVu
dFdpZHRoOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0b3BB
dENvbnRlbnRFZGdlKQotICAgICAgICAgICAgICAgIHJldHVybiBtaW4oemVyb0xheW91dFVuaXQs
IGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkgOiAoY2xpZW50V2lkdGggLSBjb250
ZW50V2lkdGgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWluKFpFUk9fTEFZT1VUX1VOSVQs
IGx0ciA/IChjb250ZW50V2lkdGggLSBjbGllbnRXaWR0aCkgOiAoY2xpZW50V2lkdGggLSBjb250
ZW50V2lkdGgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gbHRy
ID8gLWNsaWVudFdpZHRoIDogLWNvbnRlbnRXaWR0aDsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDExMzU3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDQ3LDcgKzE0NDcsNyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5
b3V0SWZOCiAgICAgICAgIHN0eWxlKCktPmdldEJveFNoYWRvd0hvcml6b250YWxFeHRlbnQoc2hh
ZG93TGVmdCwgc2hhZG93UmlnaHQpOwogCiAgICAgICAgIGludCBib3JkZXJSaWdodCA9IGlzQm94
KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+Ym9yZGVyUmlnaHQoKSA6IDA7Ci0gICAgICAgIExheW91
dFVuaXQgYm94V2lkdGggPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPndpZHRoKCkgOiB6
ZXJvTGF5b3V0VW5pdDsKKyAgICAgICAgTGF5b3V0VW5pdCBib3hXaWR0aCA9IGlzQm94KCkgPyB0
b1JlbmRlckJveCh0aGlzKS0+d2lkdGgoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CiAgICAgICAgIExh
eW91dFVuaXQgYm9yZGVyV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oLW91dGxpbmVTdHlsZS0+b3V0
bGluZU9mZnNldCgpLCBtYXg8TGF5b3V0VW5pdD4oYm9yZGVyUmlnaHQsIG1heDxMYXlvdXRVbml0
Pih2YWx1ZUZvckxlbmd0aChzdHlsZSgpLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCks
IGJveFdpZHRoLCB2KSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRS
YWRpdXMoKS53aWR0aCgpLCBib3hXaWR0aCwgdikpKSkgKyBtYXg8TGF5b3V0VW5pdD4ob3csIHNo
YWRvd1JpZ2h0KTsKICAgICAgICAgTGF5b3V0UmVjdCByaWdodFJlY3QobmV3T3V0bGluZUJveC54
KCkgKyBtaW4obmV3T3V0bGluZUJveC53aWR0aCgpLCBvbGRPdXRsaW5lQm94LndpZHRoKCkpIC0g
Ym9yZGVyV2lkdGgsCiAgICAgICAgICAgICBuZXdPdXRsaW5lQm94LnkoKSwKQEAgLTE0NjYsNyAr
MTQ2Niw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAg
ICAgc3R5bGUoKS0+Z2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoc2hhZG93VG9wLCBzaGFkb3dC
b3R0b20pOwogCiAgICAgICAgIGludCBib3JkZXJCb3R0b20gPSBpc0JveCgpID8gdG9SZW5kZXJC
b3godGhpcyktPmJvcmRlckJvdHRvbSgpIDogMDsKLSAgICAgICAgTGF5b3V0VW5pdCBib3hIZWln
aHQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogemVyb0xheW91dFVu
aXQ7CisgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94
KHRoaXMpLT5oZWlnaHQoKSA6IFpFUk9fTEFZT1VUX1VOSVQ7CiAgICAgICAgIExheW91dFVuaXQg
Ym9yZGVySGVpZ2h0ID0gbWF4PExheW91dFVuaXQ+KC1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZz
ZXQoKSwgbWF4PExheW91dFVuaXQ+KGJvcmRlckJvdHRvbSwgbWF4PExheW91dFVuaXQ+KHZhbHVl
Rm9yTGVuZ3RoKHN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKSwgYm94
SGVpZ2h0LCB2KSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRp
dXMoKS5oZWlnaHQoKSwgYm94SGVpZ2h0LCB2KSkpKSArIG1heDxMYXlvdXRVbml0Pihvdywgc2hh
ZG93Qm90dG9tKTsKICAgICAgICAgTGF5b3V0UmVjdCBib3R0b21SZWN0KG5ld091dGxpbmVCb3gu
eCgpLAogICAgICAgICAgICAgbWluKG5ld091dGxpbmVCb3gubWF4WSgpLCBvbGRPdXRsaW5lQm94
Lm1heFkoKSkgLSBib3JkZXJIZWlnaHQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDExMzU3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw3ICsz
NjAsNyBAQCBMYXlvdXRVbml0IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjCiAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBzb2x2ZXMgYWJvdmUgZXF1YXRpb24gZm9yICd3aWR0aCcgKD09IGxv
Z2ljYWxXaWR0aCkuCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCA9IG1p
bmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLT5tYXJnaW5TdGFydCgpLCBsb2dpY2FsV2lkdGgp
OwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2luRW5kID0gbWluaW11bVZhbHVlRm9y
TGVuZ3RoKHN0eWxlKCktPm1hcmdpbkVuZCgpLCBsb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAg
ICAgIGxvZ2ljYWxXaWR0aCA9IG1heCh6ZXJvTGF5b3V0VW5pdCwgbG9naWNhbFdpZHRoIC0gKG1h
cmdpblN0YXJ0ICsgbWFyZ2luRW5kICsgKHdpZHRoKCkgLSBjbGllbnRXaWR0aCgpKSkpOworICAg
ICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1heChaRVJPX0xBWU9VVF9VTklULCBsb2dpY2Fs
V2lkdGggLSAobWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQgKyAod2lkdGgoKSAtIGNsaWVudFdpZHRo
KCkpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpCiAg
ICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHJvdW5kVG9JbnQobG9naWNhbFdpZHRo
ICogaW50cmluc2ljU2l6ZS53aWR0aCgpIC8gMTAwKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGxvZ2ljYWxX
aWR0aCwgaW5jbHVkZU1heFdpZHRoKTsKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIFJlbmRlclJl
cGxhY2VkOjpjb21wdXRlUHJlZmVycmVkTG9nCiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFkZGlu
ZzsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkKLSAgICAgICAgbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW48TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgsIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiB6ZXJvTGF5b3V0VW5p
dCkpOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbjxMYXlvdXRVbml0
PihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgp
ICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGlu
ZyA6IFpFUk9fTEFZT1VUX1VOSVQpKTsKIAogICAgIGlmIChoYXNSZWxhdGl2ZURpbWVuc2lvbnMo
KSkKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAxMTM1NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzIsNyArMjcyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZTo6Y29udmVydFN0eWxlTG9n
aQogICAgIGJvb2wgaXNDU1NUYWJsZSA9ICFub2RlKCkgfHwgIW5vZGUoKS0+aGFzVGFnTmFtZSh0
YWJsZVRhZyk7CiAgICAgaWYgKGlzQ1NTVGFibGUgJiYgc3R5bGVMb2dpY2FsV2lkdGguaXNGaXhl
ZCgpICYmIHN0eWxlTG9naWNhbFdpZHRoLmlzUG9zaXRpdmUoKSkgewogICAgICAgICByZWNhbGNC
b3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsKLSAgICAgICAgYm9yZGVycyA9IGJvcmRlclN0YXJ0KCkg
KyBib3JkZXJFbmQoKSArIChjb2xsYXBzZUJvcmRlcnMoKSA/IHplcm9MYXlvdXRVbml0IDogcGFk
ZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkpOworICAgICAgICBib3JkZXJzID0gYm9yZGVyU3Rh
cnQoKSArIGJvcmRlckVuZCgpICsgKGNvbGxhcHNlQm9yZGVycygpID8gWkVST19MQVlPVVRfVU5J
VCA6IHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1p
bmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZUxvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlV2lkdGgsIHZp
ZXcoKSkgKyBib3JkZXJzOwogfQpAQCAtMzg0LDggKzM4NCw4IEBAIHZvaWQgUmVuZGVyVGFibGU6
OmxheW91dCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUgPSBib3JkZXJCZWZvcmUoKSArIChjb2xsYXBzaW5nID8gemVyb0xheW91dFVu
aXQgOiBwYWRkaW5nQmVmb3JlKCkpOwotICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0Fm
dGVyID0gYm9yZGVyQWZ0ZXIoKSArIChjb2xsYXBzaW5nID8gemVyb0xheW91dFVuaXQgOiBwYWRk
aW5nQWZ0ZXIoKSk7CisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gYm9y
ZGVyQmVmb3JlKCkgKyAoY29sbGFwc2luZyA/IFpFUk9fTEFZT1VUX1VOSVQgOiBwYWRkaW5nQmVm
b3JlKCkpOworICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0FmdGVyID0gYm9yZGVyQWZ0
ZXIoKSArIChjb2xsYXBzaW5nID8gWkVST19MQVlPVVRfVU5JVCA6IHBhZGRpbmdBZnRlcigpKTsK
IAogICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgYm9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSk7CiAKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQo
KQogICAgIExheW91dFVuaXQgY29tcHV0ZWRMb2dpY2FsSGVpZ2h0ID0gMDsKICAgICBpZiAobG9n
aWNhbEhlaWdodExlbmd0aC5pc0ZpeGVkKCkpIHsKICAgICAgICAgLy8gSFRNTCB0YWJsZXMgc2l6
ZSBhcyB0aG91Z2ggQ1NTIGhlaWdodCBpbmNsdWRlcyBib3JkZXIvcGFkZGluZywgQ1NTIHRhYmxl
cyBkbyBub3QuCi0gICAgICAgIExheW91dFVuaXQgYm9yZGVycyA9IG5vZGUoKSAmJiBub2RlKCkt
Pmhhc1RhZ05hbWUodGFibGVUYWcpID8gKGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgKyBib3JkZXJB
bmRQYWRkaW5nQWZ0ZXIpIDogemVyb0xheW91dFVuaXQ7CisgICAgICAgIExheW91dFVuaXQgYm9y
ZGVycyA9IG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUodGFibGVUYWcpID8gKGJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUgKyBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIpIDogWkVST19MQVlPVVRfVU5J
VDsKICAgICAgICAgY29tcHV0ZWRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodExlbmd0aC52
YWx1ZSgpIC0gYm9yZGVyczsKICAgICB9IGVsc2UgaWYgKGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNQ
ZXJjZW50KCkpCiAgICAgICAgIGNvbXB1dGVkTG9naWNhbEhlaWdodCA9IGNvbXB1dGVQZXJjZW50
YWdlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0TGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiAxMTM1NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3
Miw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGJvcmRlcnNQYWRkaW5nQW5kU3BhY2luZ0lu
Um93RGlyZWN0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBib3JkZXJTdGFydCgp
ICsgYm9yZGVyRW5kKCkgKwotICAgICAgICAgICAgICAgKGNvbGxhcHNlQm9yZGVycygpID8gemVy
b0xheW91dFVuaXQgOiAocGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkgKyBzdGF0aWNfY2Fz
dDxMYXlvdXRVbml0PihudW1FZmZDb2xzKCkgKyAxKSAqIGhCb3JkZXJTcGFjaW5nKCkpKTsKKyAg
ICAgICAgICAgICAgIChjb2xsYXBzZUJvcmRlcnMoKSA/IFpFUk9fTEFZT1VUX1VOSVQgOiAocGFk
ZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCkgKyBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihudW1F
ZmZDb2xzKCkgKyAxKSAqIGhCb3JkZXJTcGFjaW5nKCkpKTsKICAgICB9CiAKICAgICBSZW5kZXJU
YWJsZUNvbCogY29sRWxlbWVudCh1bnNpZ25lZCBjb2wsIGJvb2wqIHN0YXJ0RWRnZSA9IDAsIGJv
b2wqIGVuZEVkZ2UgPSAwKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAJKHJldmlzaW9uIDExMzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNSw4ICsxNTE1LDggQEAgTGF5
b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbAogICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCgpOwogCiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0
IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0IHNpZGUuCi0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdFNpZGUgPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7Ci0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1pbigp
OworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRTaWRlID0gTUFYX0xBWU9VVF9VTklUOworICAg
IExheW91dFVuaXQgbG9naWNhbFJpZ2h0U2lkZSA9IE1JTl9MQVlPVVRfVU5JVDsKICAgICBmb3Ig
KElubGluZVRleHRCb3gqIGN1cnIgPSBmaXJzdFRleHRCb3goKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxM
ZWZ0U2lkZSwgY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgbG9n
aWNhbFJpZ2h0U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJyLT5sb2dpY2FsUmlnaHRW
aXN1YWxPdmVyZmxvdygpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>