<?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>82578</bug_id>
          
          <creation_ts>2012-03-29 00:44:39 -0700</creation_ts>
          <short_desc>Pack bitfields in InlineBox for Windows</short_desc>
          <delta_ts>2012-03-29 14:08:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>krit</cc>
    
    <cc>mitz</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590917</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 00:44:39 -0700</bug_when>
    <thetext>Pack bitfields in InlineBox for Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590922</commentid>
    <comment_count>1</comment_count>
      <attachid>134519</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 00:55:24 -0700</bug_when>
    <thetext>Created attachment 134519
Initial attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590962</commentid>
    <comment_count>2</comment_count>
      <attachid>134519</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-29 02:07:20 -0700</bug_when>
    <thetext>Comment on attachment 134519
Initial attempt

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590991</commentid>
    <comment_count>3</comment_count>
      <attachid>134519</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 02:49:01 -0700</bug_when>
    <thetext>Comment on attachment 134519
Initial attempt

Clearing flags on attachment: 134519

Committed r112512: &lt;http://trac.webkit.org/changeset/112512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590992</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 02:49:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591429</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 12:20:32 -0700</bug_when>
    <thetext>Sadly, this change appears to have had no effect on page cycler results:
http://build.chromium.org/p/chromium.webkit/builders/Vista%20Perf/builds/9443</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591448</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-29 12:39:12 -0700</bug_when>
    <thetext>Do we know from COMPILE_ASSERTS that we definitely made these smaller on Win?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591527</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 13:54:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Do we know from COMPILE_ASSERTS that we definitely made these smaller on Win?

Yes. The InlineBox&apos;s size was reduced from 40 bytes to 36 bytes. So that&apos;s about 10% reduction in its size. Maybe the size of InlineBox doesn&apos;t matter as much. It&apos;s possible that we&apos;re over-optimzing in this area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591539</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-29 14:08:58 -0700</bug_when>
    <thetext>Of course, it might also mean that we don&apos;t have good tests.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134519</attachid>
            <date>2012-03-29 00:55:24 -0700</date>
            <delta_ts>2012-03-29 02:49:01 -0700</delta_ts>
            <desc>Initial attempt</desc>
            <filename>bug-82578-20120329005523.patch</filename>
            <type>text/plain</type>
            <size>60789</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBAQAorMjAxMi0wMy0yOSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBQYWNrIGJpdGZpZWxkcyBpbiBJ
bmxpbmVCb3ggZm9yIFdpbmRvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgyNTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVW5saWtlIGdjYyBhbmQgY2xhbmcsIE1TVkMgcGFkcyBlYWNoIGNvbnNlY3V0
aXZlIG1lbWJlciB2YXJpYWJsZXMgb2YgdGhlIHNhbWUgdHlwZSBpbiBiaXRmaWVsZHMuIGUuZy4g
aWYgeW91IGhhdmU6CisgICAgICAgIHN0dXJjdCBBQiB7CisgICAgICAgIHVuc2lnbmVkIG1fMSA6
IDMxOworICAgICAgICBib29sIG1fMiA6IDE7CisgICAgICAgIH0KKyAgICAgICAgdGhlbiBNU1ZD
IHBhZHMgbV8xIGFuZCBhbGxvY2F0ZXMgc2l6ZW9mKHVuc2lnbmVkKSAqIDIgZm9yIEFCIHdoZXJl
YXMgZ2NjIGFuZCBjbGFuZyBvbmx5IGFsbG9jYXRlCisgICAgICAgIHNpemVvZih1bnNpZ25lZCkg
KiAxIGZvciBBQi4KKworICAgICAgICBGaXhlZCB0aGUgYnVnIGJ5IHBhY2tpbmcgYWxsIGJpdGZp
ZWxkcyBpbiBJbmxpbmVCb3ggaW50byBJbmxpbmVCb3hCaXRmaWVsZHMgYW5kIGFsd2F5cyB1c2lu
ZyBlaXRoZXIgdW5zaWduZWQgb3IgaW50LgorCisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTYW1lU2l6ZUFzSW5saW5lQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6bG9naWNhbEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVCb3g6OmJhc2VsaW5lUG9zaXRpb24pOiBNb3ZlZCBmcm9tIHRoZSBo
ZWFkZXIgZmlsZSBzaW5jZSBpdCdzIGEgdmlydHVhbCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUJveDo6bGluZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lQm94OjpkZWxldGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6ZXh0cmFj
dExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjphdHRhY2hMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUJveDo6bmV4dE9uTGluZUV4aXN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVCb3g6OmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGlu
ZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmlzVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVCb3g6OnNldElzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVC
b3g6Omhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJv
eDo6c2V0SGFzVmlydHVhbExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Qm94Ojppc0hvcml6b250YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpzZXRJc0hv
cml6b250YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojppc0NvbnN0cnVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2V0Q29uc3RydWN0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94OjpzZXRFeHRyYWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lQm94OjpzZXRGaXJzdExpbmVTdHlsZUJpdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVC
b3g6OmlzRmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoSW5saW5lQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUJveDo6YmlkaUxldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJv
eDo6c2V0QmlkaUxldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6ZGlyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6aXNEaXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVCb3g6Om1hcmtEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6
OmV4cGFuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnZlcnRpY2FsQWxpZ24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojprbm93blRvSGF2ZU5vT3ZlcmZsb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpkaXJPdmVycmlkZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVCb3g6OnNldERpck92ZXJyaWRlKToKKyAgICAgICAgKElubGluZUJveEJpdGZp
ZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJveEJpdGZpZWxkczo6
SW5saW5lQm94Qml0ZmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6SW5saW5l
Qm94Qml0ZmllbGRzOjpiaWRpRW1iZWRkaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lQm94OjpJbmxpbmVCb3hCaXRmaWVsZHM6OnNldEJpZGlFbWJlZGRpbmdMZXZlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJveEJpdGZpZWxkczo6ZGV0ZXJtaW5lZElm
TmV4dE9uTGluZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJv
eEJpdGZpZWxkczo6c2V0RGV0ZXJtaW5lZElmTmV4dE9uTGluZUV4aXN0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJveEJpdGZpZWxkczo6bmV4dE9uTGluZUV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJveEJpdGZpZWxkczo6c2V0TmV4
dE9uTGluZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OklubGluZUJveEJp
dGZpZWxkczo6ZXhwYW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6SW5saW5l
Qm94Qml0ZmllbGRzOjpzZXRFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94
OjplbmRzV2l0aEJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2V0RW5kc1dp
dGhCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6Omhhc0VsbGlwc2lzQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6aGFzU2VsZWN0ZWRDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lQm94OjpzZXRIYXNFbGxpcHNpc0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVCb3g6Omhhc0h5cGhlbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6
OnNldEhhc0h5cGhlbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmNhbkhhdmVMZWFk
aW5nRXhwYW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2V0Q2FuSGF2ZUxl
YWRpbmdFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpzZXRFeHBhbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpleHRyYWN0ZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OmFkZFRvTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpyZW1v
dmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpleHRyYWN0TGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphdHRhY2hMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tE
aXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRkQm94U2hhZG93
VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRkQm9y
ZGVyT3V0c2V0VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0Jv
eDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxv
d0JveDo6Y29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVGbG93Qm94Ojpjb21wdXRlVW5kZXJBbm5vdGF0aW9uQWRqdXN0bWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojps
b2dpY2FsT3ZlcmZsb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNl
dExvZ2ljYWxPdmVyZmxvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpsaW5l
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9u
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpleHRyYWN0TGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjphdHRhY2hMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oOgorICAgICAgICAoSW5saW5lVGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpzZXRFeHBhbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
ZXhwYW5zaW9uQmVoYXZpb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVjdExpbmUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YmFzZWxpbmVQb3NpdGlvbik6
IE1vdmVkIGZyb20gdGhlIGhlYWRlciBmaWxlIHNpbmNlIGl0J3MgYSB2aXJ0dWFsIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGluZUhlaWdodCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Um9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckJveCk6CisgICAgICAgIChXZWJD
b3JlOjpSb290SW5saW5lQm94Ojp2ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgorICAgICAgICAoUm9vdElubGluZUJveCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR0lubGluZVRleHRCb3gpOgorCiAyMDEyLTAzLTI5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MTEyNTAwLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShy
ZXZpc2lvbiAxMTI0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tKQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RM
aW5lKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZShpc0ZpcnN0
TGluZVN0eWxlKCkpOwogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgaWYgKHRleHRDb2xvciAhPSBjb250ZXh0
LT5maWxsQ29sb3IoKSkKICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwg
c3R5bGUtPmNvbG9yU3BhY2UoKSk7CkBAIC02OCwxNCArNjgsMTQgQEAgdm9pZCBFbGxpcHNpc0Jv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICAvLyBQYWludCB0aGUgbWFya3VwIGJv
eAogICAgICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7
CiAgICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQubW92ZSh4KCkgKyBtX2xvZ2ljYWxXaWR0aCAt
IG1fbWFya3VwQm94LT54KCksCi0gICAgICAgICAgICB5KCkgKyBzdHlsZS0+Zm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCkt
PnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOworICAgICAgICAg
ICAgeSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gtPnko
KSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5m
b250TWV0cmljcygpLmFzY2VudCgpKSk7CiAgICAgICAgIG1fbWFya3VwQm94LT5wYWludChwYWlu
dEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogICAgIH0K
IH0KIAogSW50UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiB7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpOworICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAg
ICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CiAgICAgLy8gRklYTUU6IFdoeSBp
cyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3Mg
YmVsb3cuCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9y
VGV4dChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0
ciwgc3R5bGUsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCks
IHkoKSArIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpLCByb290KCktPnNlbGVjdGlvbkhlaWdodCgp
KSk7CkBAIC0xMDgsOSArMTA4LDkgQEAgYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VAogCiAgICAgLy8gSGl0IHRlc3QgdGhlIG1hcmt1cCBib3guCiAgICAgaWYgKG1fbWFy
a3VwQm94KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxl
KG1fZmlyc3RMaW5lKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+
c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBtdHggPSBhZGp1
c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBtdHkgPSBhZGp1c3RlZExvY2F0aW9uLnkoKSArIHN0eWxlLT5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVu
ZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAg
ICAgICAgTGF5b3V0VW5pdCBtdHkgPSBhZGp1c3RlZExvY2F0aW9uLnkoKSArIHN0eWxlLT5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVu
ZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQo
KSk7CiAgICAgICAgIGlmIChtX21hcmt1cEJveC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBMYXlvdXRQb2ludChtdHgsIG10eSksIGxpbmVUb3AsIGxpbmVC
b3R0b20pKSB7CiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIExheW91dFNpemUobXR4LCBtdHkpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAJKHJldmlzaW9uIDExMjQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyMiArMzcsMTggQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIUNPTVBJTEVSKE1TVkMpCi0vLyBG
SVhNRTogRmlndXJlIG91dCB3aHkgdGhpcyBkb2Vzbid0IHdvcmsgb24gTVNWQy4KIGNsYXNzIFNh
bWVTaXplQXNJbmxpbmVCb3ggewogICAgIHZpcnR1YWwgflNhbWVTaXplQXNJbmxpbmVCb3goKSB7
IH0KICAgICB2b2lkKiBhWzRdOwogICAgIEZsb2F0UG9pbnQgYjsKICAgICBmbG9hdCBjOwotICAg
IHVpbnQzMl90IGQgOiAzMTsKLSAgICBib29sIGUgOiAxOworICAgIHVpbnQzMl90IGQgOiAzMjsK
ICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBmOwogI2VuZGlmCiB9OwogCiBDT01QSUxFX0FTU0VS
VChzaXplb2YoSW5saW5lQm94KSA9PSBzaXplb2YoU2FtZVNpemVBc0lubGluZUJveCksIElubGlu
ZUJveF9zaXplX2d1YXJkKTsKLSNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwogc3RhdGljIGJvb2wg
aW5JbmxpbmVCb3hEZXRhY2g7CkBAIC0xNDksMTkgKzE0NSwyOSBAQCBmbG9hdCBJbmxpbmVCb3g6
OmxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgICAgICByZXR1cm4gdmlydHVhbExvZ2ljYWxIZWln
aHQoKTsKICAgICAKICAgICBpZiAocmVuZGVyZXIoKS0+aXNUZXh0KCkpCi0gICAgICAgIHJldHVy
biBtX2lzVGV4dCA/IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3Mo
KS5oZWlnaHQoKSA6IDA7CisgICAgICAgIHJldHVybiBtX2JpdGZpZWxkcy5pc1RleHQoKSA/IHJl
bmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCkuaGVpZ2h0
KCkgOiAwOwogICAgIGlmIChyZW5kZXJlcigpLT5pc0JveCgpICYmIHBhcmVudCgpKQogICAgICAg
ICByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB0b1JlbmRlckJveChtX3JlbmRlcmVyKS0+aGVpZ2h0
KCkgOiB0b1JlbmRlckJveChtX3JlbmRlcmVyKS0+d2lkdGgoKTsKIAogICAgIEFTU0VSVChpc0lu
bGluZUZsb3dCb3goKSk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZsb3dPYmplY3QgPSBi
b3hNb2RlbE9iamVjdCgpOwotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IHJl
bmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKTsKKyAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0
eWxlKCkpLT5mb250TWV0cmljcygpOwogICAgIGZsb2F0IHJlc3VsdCA9IGZvbnRNZXRyaWNzLmhl
aWdodCgpOwogICAgIGlmIChwYXJlbnQoKSkKICAgICAgICAgcmVzdWx0ICs9IGZsb3dPYmplY3Qt
PmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorTGF5b3V0VW5pdCBJbmxpbmVCb3g6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJh
c2VsaW5lVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+YmFzZWxp
bmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIG1fYml0ZmllbGRzLmZpcnN0TGluZSgpLCBpc0hvcml6
b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFp
bmluZ0xpbmUpOworfQorCitMYXlvdXRVbml0IElubGluZUJveDo6bGluZUhlaWdodCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGJveE1vZGVsT2JqZWN0KCktPmxpbmVIZWlnaHQobV9iaXRmaWVsZHMu
Zmlyc3RMaW5lKCksIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExp
bmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7Cit9CisKIGludCBJbmxpbmVCb3g6OmNhcmV0
TWluT2Zmc2V0KCkgY29uc3QgCiB7IAogICAgIHJldHVybiBtX3JlbmRlcmVyLT5jYXJldE1pbk9m
ZnNldCgpOyAKQEAgLTE4MSwyMSArMTg3LDIxIEBAIHZvaWQgSW5saW5lQm94OjpkaXJ0eUxpbmVC
b3hlcygpCiAKIHZvaWQgSW5saW5lQm94OjpkZWxldGVMaW5lKFJlbmRlckFyZW5hKiBhcmVuYSkK
IHsKLSAgICBpZiAoIW1fZXh0cmFjdGVkICYmIG1fcmVuZGVyZXItPmlzQm94KCkpCisgICAgaWYg
KCFtX2JpdGZpZWxkcy5leHRyYWN0ZWQoKSAmJiBtX3JlbmRlcmVyLT5pc0JveCgpKQogICAgICAg
ICB0b1JlbmRlckJveChtX3JlbmRlcmVyKS0+c2V0SW5saW5lQm94V3JhcHBlcigwKTsKICAgICBk
ZXN0cm95KGFyZW5hKTsKIH0KIAogdm9pZCBJbmxpbmVCb3g6OmV4dHJhY3RMaW5lKCkKIHsKLSAg
ICBtX2V4dHJhY3RlZCA9IHRydWU7CisgICAgbV9iaXRmaWVsZHMuc2V0RXh0cmFjdGVkKHRydWUp
OwogICAgIGlmIChtX3JlbmRlcmVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChtX3Jl
bmRlcmVyKS0+c2V0SW5saW5lQm94V3JhcHBlcigwKTsKIH0KIAogdm9pZCBJbmxpbmVCb3g6OmF0
dGFjaExpbmUoKQogewotICAgIG1fZXh0cmFjdGVkID0gZmFsc2U7CisgICAgbV9iaXRmaWVsZHMu
c2V0RXh0cmFjdGVkKGZhbHNlKTsKICAgICBpZiAobV9yZW5kZXJlci0+aXNCb3goKSkKICAgICAg
ICAgdG9SZW5kZXJCb3gobV9yZW5kZXJlciktPnNldElubGluZUJveFdyYXBwZXIodGhpcyk7CiB9
CkBAIC0yNjIsMTcgKzI2OCwxNyBAQCBSb290SW5saW5lQm94KiBJbmxpbmVCb3g6OnJvb3QoKQog
CiBib29sIElubGluZUJveDo6bmV4dE9uTGluZUV4aXN0cygpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2RldGVybWluZWRJZk5leHRPbkxpbmVFeGlzdHMpIHsKLSAgICAgICAgbV9kZXRlcm1pbmVkSWZO
ZXh0T25MaW5lRXhpc3RzID0gdHJ1ZTsKKyAgICBpZiAoIW1fYml0ZmllbGRzLmRldGVybWluZWRJ
Zk5leHRPbkxpbmVFeGlzdHMoKSkgeworICAgICAgICBtX2JpdGZpZWxkcy5zZXREZXRlcm1pbmVk
SWZOZXh0T25MaW5lRXhpc3RzKHRydWUpOwogCiAgICAgICAgIGlmICghcGFyZW50KCkpCi0gICAg
ICAgICAgICBtX25leHRPbkxpbmVFeGlzdHMgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fYml0Zmll
bGRzLnNldE5leHRPbkxpbmVFeGlzdHMoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChuZXh0T25M
aW5lKCkpCi0gICAgICAgICAgICBtX25leHRPbkxpbmVFeGlzdHMgPSB0cnVlOworICAgICAgICAg
ICAgbV9iaXRmaWVsZHMuc2V0TmV4dE9uTGluZUV4aXN0cyh0cnVlKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9uZXh0T25MaW5lRXhpc3RzID0gcGFyZW50KCktPm5leHRPbkxpbmVFeGlz
dHMoKTsKKyAgICAgICAgICAgIG1fYml0ZmllbGRzLnNldE5leHRPbkxpbmVFeGlzdHMocGFyZW50
KCktPm5leHRPbkxpbmVFeGlzdHMoKSk7CiAgICAgfQotICAgIHJldHVybiBtX25leHRPbkxpbmVF
eGlzdHM7CisgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5leHRPbkxpbmVFeGlzdHMoKTsKIH0KIAog
SW5saW5lQm94KiBJbmxpbmVCb3g6Om5leHRMZWFmQ2hpbGQoKSBjb25zdApAQCAtMzM1LDcgKzM0
MSw3IEBAIGZsb2F0IElubGluZUJveDo6cGxhY2VFbGxpcHNpc0JveChib29sLCAKIAogdm9pZCBJ
bmxpbmVCb3g6OmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCkKIHsgCi0gICAgbV9rbm93blRv
SGF2ZU5vT3ZlcmZsb3cgPSBmYWxzZTsKKyAgICBtX2JpdGZpZWxkcy5zZXRLbm93blRvSGF2ZU5v
T3ZlcmZsb3coZmFsc2UpOwogICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+a25vd25Ub0hh
dmVOb092ZXJmbG93KCkpCiAgICAgICAgIHBhcmVudCgpLT5jbGVhcktub3duVG9IYXZlTm9PdmVy
ZmxvdygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNp
b24gMTEyNDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwyMiArNDAsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9wYXJlbnQo
MCkKICAgICAgICAgLCBtX3JlbmRlcmVyKG9iaikKICAgICAgICAgLCBtX2xvZ2ljYWxXaWR0aCgw
KQotICAgICAgICAsIG1fZmlyc3RMaW5lKGZhbHNlKQotICAgICAgICAsIG1fY29uc3RydWN0ZWQo
ZmFsc2UpCi0gICAgICAgICwgbV9iaWRpRW1iZWRkaW5nTGV2ZWwoMCkKLSAgICAgICAgLCBtX2Rp
cnR5KGZhbHNlKQotICAgICAgICAsIG1fZXh0cmFjdGVkKGZhbHNlKQotICAgICAgICAsIG1faGFz
VmlydHVhbExvZ2ljYWxIZWlnaHQoZmFsc2UpCi0gICAgICAgICwgbV9pc0hvcml6b250YWwodHJ1
ZSkKLSAgICAgICAgLCBtX2VuZHNXaXRoQnJlYWsoZmFsc2UpCi0gICAgICAgICwgbV9oYXNTZWxl
Y3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbihmYWxzZSkKLSAgICAgICAgLCBt
X2tub3duVG9IYXZlTm9PdmVyZmxvdyh0cnVlKQotICAgICAgICAsIG1faGFzRWxsaXBzaXNCb3hP
ckh5cGhlbihmYWxzZSkKLSAgICAgICAgLCBtX2Rpck92ZXJyaWRlKGZhbHNlKQotICAgICAgICAs
IG1faXNUZXh0KGZhbHNlKQotICAgICAgICAsIG1fZGV0ZXJtaW5lZElmTmV4dE9uTGluZUV4aXN0
cyhmYWxzZSkKLSAgICAgICAgLCBtX25leHRPbkxpbmVFeGlzdHMoZmFsc2UpCi0gICAgICAgICwg
bV9leHBhbnNpb24oMCkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9oYXNCYWRQYXJlbnQo
ZmFsc2UpCiAjZW5kaWYKQEAgLTcwLDIyICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3Jl
bmRlcmVyKG9iaikKICAgICAgICAgLCBtX3RvcExlZnQodG9wTGVmdCkKICAgICAgICAgLCBtX2xv
Z2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpCi0gICAgICAgICwgbV9maXJzdExpbmUoZmlyc3RMaW5l
KQotICAgICAgICAsIG1fY29uc3RydWN0ZWQoY29uc3RydWN0ZWQpCi0gICAgICAgICwgbV9iaWRp
RW1iZWRkaW5nTGV2ZWwoMCkKLSAgICAgICAgLCBtX2RpcnR5KGRpcnR5KQotICAgICAgICAsIG1f
ZXh0cmFjdGVkKGV4dHJhY3RlZCkKLSAgICAgICAgLCBtX2hhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0
KGZhbHNlKQotICAgICAgICAsIG1faXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCkKLSAgICAgICAg
LCBtX2VuZHNXaXRoQnJlYWsoZmFsc2UpCi0gICAgICAgICwgbV9oYXNTZWxlY3RlZENoaWxkcmVu
T3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbihmYWxzZSkKLSAgICAgICAgLCBtX2tub3duVG9IYXZl
Tm9PdmVyZmxvdyh0cnVlKSAgCi0gICAgICAgICwgbV9oYXNFbGxpcHNpc0JveE9ySHlwaGVuKGZh
bHNlKQotICAgICAgICAsIG1fZGlyT3ZlcnJpZGUoZmFsc2UpCi0gICAgICAgICwgbV9pc1RleHQo
ZmFsc2UpCi0gICAgICAgICwgbV9kZXRlcm1pbmVkSWZOZXh0T25MaW5lRXhpc3RzKGZhbHNlKQot
ICAgICAgICAsIG1fbmV4dE9uTGluZUV4aXN0cyhmYWxzZSkKLSAgICAgICAgLCBtX2V4cGFuc2lv
bigwKQorICAgICAgICAsIG1fYml0ZmllbGRzKGZpcnN0TGluZSwgY29uc3RydWN0ZWQsIGRpcnR5
LCBleHRyYWN0ZWQsIGlzSG9yaXpvbnRhbCkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9o
YXNCYWRQYXJlbnQoZmFsc2UpCiAjZW5kaWYKQEAgLTE0Myw4ICsxMTIsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBib3hOYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJv
b2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc1RleHQ7IH0KLSAgICB2b2lkIHNldElzVGV4
dChib29sIGIpIHsgbV9pc1RleHQgPSBiOyB9CisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJl
dHVybiBtX2JpdGZpZWxkcy5pc1RleHQoKTsgfQorICAgIHZvaWQgc2V0SXNUZXh0KGJvb2wgaXNU
ZXh0KSB7IG1fYml0ZmllbGRzLnNldElzVGV4dChpc1RleHQpOyB9CiAgCiAgICAgdmlydHVhbCBi
b29sIGlzSW5saW5lRmxvd0JveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzSW5saW5lVGV4dEJveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNTUs
MTYgKzEyNCwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUm9vdElubGluZUJv
eCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgaGFzVmlydHVh
bExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0
OyB9Ci0gICAgdm9pZCBzZXRIYXNWaXJ0dWFsTG9naWNhbEhlaWdodCgpIHsgbV9oYXNWaXJ0dWFs
TG9naWNhbEhlaWdodCA9IHRydWU7IH0KKyAgICBib29sIGhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzVmlydHVhbExvZ2ljYWxIZWlnaHQoKTsg
fQorICAgIHZvaWQgc2V0SGFzVmlydHVhbExvZ2ljYWxIZWlnaHQoKSB7IG1fYml0ZmllbGRzLnNl
dEhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KHRydWUpOyB9CiAgICAgdmlydHVhbCBmbG9hdCB2aXJ0
dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgYm9vbCBpc0hvcml6b250YWwo
KSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbDsgfQotICAgIHZvaWQgc2V0SXNIb3Jpem9u
dGFsKGJvb2wgaG9yaXpvbnRhbCkgeyBtX2lzSG9yaXpvbnRhbCA9IGhvcml6b250YWw7IH0KKyAg
ICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzSG9yaXpv
bnRhbCgpOyB9CisgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsg
bV9iaXRmaWVsZHMuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCk7IH0KIAogICAgIHZpcnR1
YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAogICAgIHsKQEAgLTE3Miwx
MyArMTQxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogICAgIH0K
IAotICAgIGJvb2wgaXNDb25zdHJ1Y3RlZCgpIHsgcmV0dXJuIG1fY29uc3RydWN0ZWQ7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29uc3RydWN0ZWQoKSB7IG1fY29uc3RydWN0ZWQgPSB0cnVlOyB9
CisgICAgYm9vbCBpc0NvbnN0cnVjdGVkKCkgeyByZXR1cm4gbV9iaXRmaWVsZHMuY29uc3RydWN0
ZWQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb25zdHJ1Y3RlZCgpIHsgbV9iaXRmaWVsZHMu
c2V0Q29uc3RydWN0ZWQodHJ1ZSk7IH0KIAotICAgIHZvaWQgc2V0RXh0cmFjdGVkKGJvb2wgYiA9
IHRydWUpIHsgbV9leHRyYWN0ZWQgPSBiOyB9CisgICAgdm9pZCBzZXRFeHRyYWN0ZWQoYm9vbCBl
eHRyYWN0ZWQgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEV4dHJhY3RlZChleHRyYWN0ZWQpOyB9
CiAgICAgCi0gICAgdm9pZCBzZXRGaXJzdExpbmVTdHlsZUJpdChib29sIGYpIHsgbV9maXJzdExp
bmUgPSBmOyB9Ci0gICAgYm9vbCBpc0ZpcnN0TGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9m
aXJzdExpbmU7IH0KKyAgICB2b2lkIHNldEZpcnN0TGluZVN0eWxlQml0KGJvb2wgZmlyc3RMaW5l
KSB7IG1fYml0ZmllbGRzLnNldEZpcnN0TGluZShmaXJzdExpbmUpOyB9CisgICAgYm9vbCBpc0Zp
cnN0TGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZmlyc3RMaW5lKCk7IH0K
IAogICAgIHZvaWQgcmVtb3ZlKCk7CiAKQEAgLTI3MiwyMyArMjQxLDIzIEBAIHB1YmxpYzoKIAog
ICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsKCkgPyBGbG9hdFJlY3QobV90b3BMZWZ0LngoKSwgbV90b3BMZWZ0LnkoKSwgbV9sb2dpY2Fs
V2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSkgOiBGbG9hdFJlY3QobV90b3BMZWZ0LnkoKSwgbV90b3BM
ZWZ0LngoKSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7IH0KIAotICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUp
IGNvbnN0IHsgcmV0dXJuIGJveE1vZGVsT2JqZWN0KCktPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxp
bmVUeXBlLCBtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsgfQotICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+bGlu
ZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsgfQotICAgIAorICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KCkgY29uc3Q7CisKICAg
ICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNh
cmV0TWF4T2Zmc2V0KCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmlkaUVtYmVkZGluZ0xldmVsOyB9Ci0gICAgdm9pZCBzZXRCaWRpTGV2
ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpZGlFbWJlZGRpbmdMZXZlbCA9IGxldmVsOyB9
Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2JpZGlFbWJl
ZGRpbmdMZXZlbCAlIDIgPyBSVEwgOiBMVFI7IH0KKyAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmJpZGlFbWJlZGRpbmdMZXZlbCgpOyB9Cisg
ICAgdm9pZCBzZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpdGZpZWxkcy5z
ZXRCaWRpRW1iZWRkaW5nTGV2ZWwobGV2ZWwpOyB9CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBSVEwgOiBMVFI7IH0KICAgICBi
b29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9
PSBMVFI7IH0KICAgICBpbnQgY2FyZXRMZWZ0bW9zdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9mZnNl
dCgpOyB9CiAgICAgaW50IGNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY2FyZXRNYXhPZmZzZXQoKSA6IGNhcmV0TWluT2Zmc2V0
KCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhclRydW5jYXRpb24oKSB7IH0KIAotICAgIGJv
b2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHk7IH0KLSAgICB2b2lkIG1hcmtEaXJ0
eShib29sIGRpcnR5ID0gdHJ1ZSkgeyBtX2RpcnR5ID0gZGlydHk7IH0KKyAgICBib29sIGlzRGly
dHkoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5kaXJ0eSgpOyB9CisgICAgdm9pZCBtYXJr
RGlydHkoYm9vbCBkaXJ0eSA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0RGlydHkoZGlydHkpOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlydHlMaW5lQm94ZXMoKTsKICAgICAKQEAgLTMwMCwxMSAr
MjY5LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SGFzQmFkUGFyZW50KCk7CiAKLSAgICBp
bnQgZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb247IH0KLSAgICAKKyAgICBp
bnQgZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZXhwYW5zaW9uKCk7IH0K
KwogICAgIGJvb2wgdmlzaWJsZVRvSGl0VGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVy
KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIHJlbmRlcmVyKCktPnN0eWxl
KCktPnBvaW50ZXJFdmVudHMoKSAhPSBQRV9OT05FOyB9CiAgICAgCi0gICAgRVZlcnRpY2FsQWxp
Z24gdmVydGljYWxBbGlnbigpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKG1fZmly
c3RMaW5lKS0+dmVydGljYWxBbGlnbigpOyB9CisgICAgRVZlcnRpY2FsQWxpZ24gdmVydGljYWxB
bGlnbigpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKG1fYml0ZmllbGRzLmZpcnN0
TGluZSgpKS0+dmVydGljYWxBbGlnbigpOyB9CiAKICAgICAvLyBVc2Ugd2l0aCBjYXV0aW9uISBU
aGUgdHlwZSBpcyBub3QgY2hlY2tlZCEKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94TW9k
ZWxPYmplY3QoKSBjb25zdApAQCAtMzIwLDkgKzI4OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
bGlwRm9yV3JpdGluZ01vZGUoTGF5b3V0UmVjdCYpOwogICAgIExheW91dFBvaW50IGZsaXBGb3JX
cml0aW5nTW9kZShjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgYm9vbCBrbm93blRvSGF2ZU5v
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2tub3duVG9IYXZlTm9PdmVyZmxvdzsgfQorICAg
IGJvb2wga25vd25Ub0hhdmVOb092ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMu
a25vd25Ub0hhdmVOb092ZXJmbG93KCk7IH0KICAgICB2b2lkIGNsZWFyS25vd25Ub0hhdmVOb092
ZXJmbG93KCk7CiAKKyAgICBib29sIGRpck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRm
aWVsZHMuZGlyT3ZlcnJpZGUoKTsgfQorICAgIHZvaWQgc2V0RGlyT3ZlcnJpZGUoYm9vbCBkaXJP
dmVycmlkZSkgeyBtX2JpdGZpZWxkcy5zZXREaXJPdmVycmlkZShkaXJPdmVycmlkZSk7IH0KKwog
cHJpdmF0ZToKICAgICBJbmxpbmVCb3gqIG1fbmV4dDsgLy8gVGhlIG5leHQgZWxlbWVudCBvbiB0
aGUgc2FtZSBsaW5lIGFzIHVzLgogICAgIElubGluZUJveCogbV9wcmV2OyAvLyBUaGUgcHJldmlv
dXMgZWxlbWVudCBvbiB0aGUgc2FtZSBsaW5lIGFzIHVzLgpAQCAtMzM0LDM3ICszMDYsMTA3IEBA
IHB1YmxpYzoKIAogICAgIEZsb2F0UG9pbnQgbV90b3BMZWZ0OwogICAgIGZsb2F0IG1fbG9naWNh
bFdpZHRoOwotICAgIAotICAgIC8vIFNvbWUgb2YgdGhlc2UgYml0cyBhcmUgYWN0dWFsbHkgZm9y
IHN1YmNsYXNzZXMgYW5kIG1vdmVkIGhlcmUgdG8gY29tcGFjdCB0aGUgc3RydWN0dXJlcy4KIAot
ICAgIC8vIGZvciB0aGlzIGNsYXNzCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2ZpcnN0TGluZSA6
IDE7CisjZGVmaW5lIEFERF9CT09MRUFOX0JJVEZJRUxEKG5hbWUsIE5hbWUpIFwKKyAgICBwcml2
YXRlOlwKKyAgICB1bnNpZ25lZCBtXyMjbmFtZSA6IDE7XAorICAgIHB1YmxpYzpcCisgICAgYm9v
bCBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV8jI25hbWU7IH1cCisgICAgdm9pZCBzZXQjI05hbWUo
Ym9vbCBuYW1lKSB7IG1fIyNuYW1lID0gbmFtZTsgfVwKKworICAgIGNsYXNzIElubGluZUJveEJp
dGZpZWxkcyB7CisgICAgcHVibGljOgorICAgICAgICBJbmxpbmVCb3hCaXRmaWVsZHMoYm9vbCBm
aXJzdExpbmUgPSBmYWxzZSwgYm9vbCBjb25zdHJ1Y3RlZCA9IGZhbHNlLCBib29sIGRpcnR5ID0g
ZmFsc2UsIGJvb2wgZXh0cmFjdGVkID0gZmFsc2UsIGJvb2wgaXNIb3Jpem9udGFsID0gdHJ1ZSkK
KyAgICAgICAgICAgIDogbV9maXJzdExpbmUoZmlyc3RMaW5lKQorICAgICAgICAgICAgLCBtX2Nv
bnN0cnVjdGVkKGNvbnN0cnVjdGVkKQorICAgICAgICAgICAgLCBtX2JpZGlFbWJlZGRpbmdMZXZl
bCgwKQorICAgICAgICAgICAgLCBtX2RpcnR5KGRpcnR5KQorICAgICAgICAgICAgLCBtX2V4dHJh
Y3RlZChleHRyYWN0ZWQpCisgICAgICAgICAgICAsIG1faGFzVmlydHVhbExvZ2ljYWxIZWlnaHQo
ZmFsc2UpCisgICAgICAgICAgICAsIG1faXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCkKKyAgICAg
ICAgICAgICwgbV9lbmRzV2l0aEJyZWFrKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hhc1NlbGVj
dGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKGZhbHNlKQorICAgICAgICAgICAg
LCBtX2tub3duVG9IYXZlTm9PdmVyZmxvdyh0cnVlKSAgCisgICAgICAgICAgICAsIG1faGFzRWxs
aXBzaXNCb3hPckh5cGhlbihmYWxzZSkKKyAgICAgICAgICAgICwgbV9kaXJPdmVycmlkZShmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9pc1RleHQoZmFsc2UpCisgICAgICAgICAgICAsIG1fZGV0ZXJt
aW5lZElmTmV4dE9uTGluZUV4aXN0cyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9uZXh0T25MaW5l
RXhpc3RzKGZhbHNlKQorICAgICAgICAgICAgLCBtX2V4cGFuc2lvbigwKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBTb21lIG9mIHRoZXNlIGJpdHMgYXJlIGFjdHVhbGx5IGZv
ciBzdWJjbGFzc2VzIGFuZCBtb3ZlZCBoZXJlIHRvIGNvbXBhY3QgdGhlIHN0cnVjdHVyZXMuCisg
ICAgICAgIC8vIGZvciB0aGlzIGNsYXNzCisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGZp
cnN0TGluZSwgRmlyc3RMaW5lKTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoY29uc3Ry
dWN0ZWQsIENvbnN0cnVjdGVkKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1f
YmlkaUVtYmVkZGluZ0xldmVsIDogNjsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdW5zaWduZWQg
Y2hhciBiaWRpRW1iZWRkaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2JpZGlFbWJlZGRpbmdM
ZXZlbDsgfQorICAgICAgICB2b2lkIHNldEJpZGlFbWJlZGRpbmdMZXZlbCh1bnNpZ25lZCBjaGFy
IGJpZGlFbWJlZGRpbmdMZXZlbCkgeyBtX2JpZGlFbWJlZGRpbmdMZXZlbCA9IGJpZGlFbWJlZGRp
bmdMZXZlbDsgfQorCisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGRpcnR5LCBEaXJ0eSk7
CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGV4dHJhY3RlZCwgRXh0cmFjdGVkKTsKKyAg
ICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoaGFzVmlydHVhbExvZ2ljYWxIZWlnaHQsIEhhc1Zp
cnR1YWxMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoaXNIb3Jp
em9udGFsLCBJc0hvcml6b250YWwpOworICAgICAgICAvLyBmb3IgUm9vdElubGluZUJveAorICAg
ICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChlbmRzV2l0aEJyZWFrLCBFbmRzV2l0aEJyZWFrKTsg
Ly8gV2hldGhlciB0aGUgbGluZSBlbmRzIHdpdGggYSA8YnI+LgorICAgICAgICAvLyBzaGFyZWQg
YmV0d2VlbiBSb290SW5saW5lQm94IGFuZCBJbmxpbmVUZXh0Qm94CisgICAgICAgIEFERF9CT09M
RUFOX0JJVEZJRUxEKGhhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9u
LCBIYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbik7CisgICAgICAg
IEFERF9CT09MRUFOX0JJVEZJRUxEKGtub3duVG9IYXZlTm9PdmVyZmxvdywgS25vd25Ub0hhdmVO
b092ZXJmbG93KTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoaGFzRWxsaXBzaXNCb3hP
ckh5cGhlbiwgSGFzRWxsaXBzaXNCb3hPckh5cGhlbik7CisgICAgICAgIC8vIGZvciBJbmxpbmVU
ZXh0Qm94CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGRpck92ZXJyaWRlLCBEaXJPdmVy
cmlkZSk7CisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGlzVGV4dCwgSXNUZXh0KTsgLy8g
V2hldGhlciBvciBub3QgdGhpcyBvYmplY3QgcmVwcmVzZW50cyB0ZXh0IHdpdGggYSBub24temVy
byBoZWlnaHQuIEluY2x1ZGVzIG5vbi1pbWFnZSBsaXN0IG1hcmtlcnMsIHRleHQgYm94ZXMuCisK
KyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGV0ZXJtaW5lZElmTmV4
dE9uTGluZUV4aXN0cyA6IDE7CisKKyAgICBwdWJsaWM6CisgICAgICAgIGJvb2wgZGV0ZXJtaW5l
ZElmTmV4dE9uTGluZUV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGV0ZXJtaW5lZElmTmV4dE9u
TGluZUV4aXN0czsgfQorICAgICAgICB2b2lkIHNldERldGVybWluZWRJZk5leHRPbkxpbmVFeGlz
dHMoYm9vbCBkZXRlcm1pbmVkSWZOZXh0T25MaW5lRXhpc3RzKSBjb25zdCB7IG1fZGV0ZXJtaW5l
ZElmTmV4dE9uTGluZUV4aXN0cyA9IGRldGVybWluZWRJZk5leHRPbkxpbmVFeGlzdHM7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9uZXh0T25MaW5lRXhpc3Rz
IDogMTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBib29sIG5leHRPbkxpbmVFeGlz
dHMoKSBjb25zdCB7IHJldHVybiBtX25leHRPbkxpbmVFeGlzdHM7IH0KKyAgICAgICAgdm9pZCBz
ZXROZXh0T25MaW5lRXhpc3RzKGJvb2wgbmV4dE9uTGluZUV4aXN0cykgY29uc3QgeyBtX25leHRP
bkxpbmVFeGlzdHMgPSBuZXh0T25MaW5lRXhpc3RzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBzaWduZWQgbV9leHBhbnNpb24gOiAxMjsgLy8gZm9yIGp1c3RpZmllZCB0ZXh0CisgICAgICAg
IAorICAgIHB1YmxpYzoKKyAgICAgICAgc2lnbmVkIGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwYW5zaW9uOyB9CisgICAgICAgIHZvaWQgc2V0RXhwYW5zaW9uKHNpZ25lZCBleHBhbnNp
b24pIHsgbV9leHBhbnNpb24gPSBleHBhbnNpb247IH0KKyAgICB9OworI3VuZGVmIEFERF9CT09M
RUFOX0JJVEZJRUxECisKIHByaXZhdGU6Ci0gICAgYm9vbCBtX2NvbnN0cnVjdGVkIDogMTsKLSAg
ICB1bnNpZ25lZCBjaGFyIG1fYmlkaUVtYmVkZGluZ0xldmVsIDogNjsKLXByb3RlY3RlZDoKLSAg
ICBib29sIG1fZGlydHkgOiAxOwotICAgIGJvb2wgbV9leHRyYWN0ZWQgOiAxOwotICAgIGJvb2wg
bV9oYXNWaXJ0dWFsTG9naWNhbEhlaWdodCA6IDE7Ci0KLSAgICBib29sIG1faXNIb3Jpem9udGFs
IDogMTsKLQotICAgIC8vIGZvciBSb290SW5saW5lQm94Ci0gICAgYm9vbCBtX2VuZHNXaXRoQnJl
YWsgOiAxOyAgLy8gV2hldGhlciB0aGUgbGluZSBlbmRzIHdpdGggYSA8YnI+LgotICAgIC8vIHNo
YXJlZCBiZXR3ZWVuIFJvb3RJbmxpbmVCb3ggYW5kIElubGluZVRleHRCb3gKLSAgICBib29sIG1f
aGFzU2VsZWN0ZWRDaGlsZHJlbk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24gOiAxOyAvLyBXaGV0
aGVyIHdlIGhhdmUgYW55IGNoaWxkcmVuIHNlbGVjdGVkICh0aGlzIGJpdCB3aWxsIGFsc28gYmUg
c2V0IGlmIHRoZSA8YnI+IHRoYXQgdGVybWluYXRlcyBvdXIgbGluZSBpcyBzZWxlY3RlZCkuCi0g
ICAgYm9vbCBtX2tub3duVG9IYXZlTm9PdmVyZmxvdyA6IDE7Ci0gICAgYm9vbCBtX2hhc0VsbGlw
c2lzQm94T3JIeXBoZW4gOiAxOworICAgIElubGluZUJveEJpdGZpZWxkcyBtX2JpdGZpZWxkczsK
IAotICAgIC8vIGZvciBJbmxpbmVUZXh0Qm94Ci1wdWJsaWM6Ci0gICAgYm9vbCBtX2Rpck92ZXJy
aWRlIDogMTsKLSAgICBib29sIG1faXNUZXh0IDogMTsgLy8gV2hldGhlciBvciBub3QgdGhpcyBv
YmplY3QgcmVwcmVzZW50cyB0ZXh0IHdpdGggYSBub24temVybyBoZWlnaHQuIEluY2x1ZGVzIG5v
bi1pbWFnZSBsaXN0IG1hcmtlcnMsIHRleHQgYm94ZXMuCiBwcm90ZWN0ZWQ6Ci0gICAgbXV0YWJs
ZSBib29sIG1fZGV0ZXJtaW5lZElmTmV4dE9uTGluZUV4aXN0cyA6IDE7Ci0gICAgbXV0YWJsZSBi
b29sIG1fbmV4dE9uTGluZUV4aXN0cyA6IDE7Ci0gICAgc2lnbmVkIG1fZXhwYW5zaW9uIDogMTI7
IC8vIGZvciBqdXN0aWZpZWQgdGV4dAorICAgIC8vIEZvciBSb290SW5saW5lQm94CisgICAgYm9v
bCBlbmRzV2l0aEJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZW5kc1dpdGhCcmVh
aygpOyB9CisgICAgdm9pZCBzZXRFbmRzV2l0aEJyZWFrKGJvb2wgZW5kc1dpdGhCcmVhaykgeyBt
X2JpdGZpZWxkcy5zZXRFbmRzV2l0aEJyZWFrKGVuZHNXaXRoQnJlYWspOyB9CisgICAgYm9vbCBo
YXNFbGxpcHNpc0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc0VsbGlwc2lzQm94
T3JIeXBoZW4oKTsgfQorICAgIGJvb2wgaGFzU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1fYml0ZmllbGRzLmhhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5z
aW9uKCk7IH0KKyAgICB2b2lkIHNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oYm9vbCBoYXNTZWxlY3Rl
ZENoaWxkcmVuKSB7IG1fYml0ZmllbGRzLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVM
ZWFkaW5nRXhwYW5zaW9uKGhhc1NlbGVjdGVkQ2hpbGRyZW4pOyB9CisgICAgdm9pZCBzZXRIYXNF
bGxpcHNpc0JveChib29sIGhhc0VsbGlwc2lzQm94KSB7IG1fYml0ZmllbGRzLnNldEhhc0VsbGlw
c2lzQm94T3JIeXBoZW4oaGFzRWxsaXBzaXNCb3gpOyB9CisKKyAgICAvLyBGb3IgSW5saW5lVGV4
dEJveAorICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaGFz
RWxsaXBzaXNCb3hPckh5cGhlbigpOyB9CisgICAgdm9pZCBzZXRIYXNIeXBoZW4oYm9vbCBoYXNI
eXBoZW4pIHsgbV9iaXRmaWVsZHMuc2V0SGFzRWxsaXBzaXNCb3hPckh5cGhlbihoYXNIeXBoZW4p
OyB9ICAgIAorICAgIGJvb2wgY2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24oKSBjb25zdCB7IHJldHVy
biBtX2JpdGZpZWxkcy5oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lv
bigpOyB9CisgICAgdm9pZCBzZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbihib29sIGNhbkhhdmVM
ZWFkaW5nRXhwYW5zaW9uKSB7IG1fYml0ZmllbGRzLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW5PckNh
bkhhdmVMZWFkaW5nRXhwYW5zaW9uKGNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKTsgfQorICAgIHNp
Z25lZCBleHBhbnNpb24oKSB7IHJldHVybiBtX2JpdGZpZWxkcy5leHBhbnNpb24oKTsgfQorICAg
IHZvaWQgc2V0RXhwYW5zaW9uKHNpZ25lZCBleHBhbnNpb24pIHsgbV9iaXRmaWVsZHMuc2V0RXhw
YW5zaW9uKGV4cGFuc2lvbik7IH0KKyAgICAKKyAgICAvLyBGb3IgSW5saW5lRmxvd0JveCBhbmQg
SW5saW5lVGV4dEJveAorICAgIGJvb2wgZXh0cmFjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9iaXRm
aWVsZHMuZXh0cmFjdGVkKCk7IH0KIAogI2lmbmRlZiBOREVCVUcKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxMTI0
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGlu
ZShJbmxpbmVCb3gqCiAgICAgICAgIGNoaWxkLT5zZXRQcmV2T25MaW5lKG1fbGFzdENoaWxkKTsK
ICAgICAgICAgbV9sYXN0Q2hpbGQgPSBjaGlsZDsKICAgICB9Ci0gICAgY2hpbGQtPnNldEZpcnN0
TGluZVN0eWxlQml0KG1fZmlyc3RMaW5lKTsKKyAgICBjaGlsZC0+c2V0Rmlyc3RMaW5lU3R5bGVC
aXQoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICBjaGlsZC0+c2V0SXNIb3Jpem9udGFsKGlzSG9y
aXpvbnRhbCgpKTsKICAgICBpZiAoY2hpbGQtPmlzVGV4dCgpKSB7CiAgICAgICAgIGlmIChjaGls
ZC0+cmVuZGVyZXIoKS0+cGFyZW50KCkgPT0gcmVuZGVyZXIoKSkKQEAgLTExNCw4ICsxMTQsOCBA
QCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGluZShJbmxpbmVCb3gqCiAgICAgfQogCiAgICAg
aWYgKGRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSAmJiAhY2hpbGQt
PnJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKLSAgICAgICAgUmVuZGVy
U3R5bGUqIGNoaWxkU3R5bGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUp
OworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZShp
c0ZpcnN0TGluZVN0eWxlKCkpOworICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNo
aWxkLT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgICAgICBib29s
IHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IGZh
bHNlOwogICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSkKICAgICAg
ICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGlu
ZSA9IHRydWU7CkBAIC0xNTIsMTYgKzE1MiwxNiBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRv
TGluZShJbmxpbmVCb3gqCiAKICAgICBpZiAoIWNoaWxkLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9u
ZWQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBSZW5k
ZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGlu
ZSk7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5yZW5kZXJl
cigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgICAgICAgICAgaWYgKGNoaWxkU3R5
bGUtPmxldHRlclNwYWNpbmcoKSA8IDAgfHwgY2hpbGRTdHlsZS0+dGV4dFNoYWRvdygpIHx8IGNo
aWxkU3R5bGUtPnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSB8fCBj
aGlsZFN0eWxlLT50ZXh0U3Ryb2tlV2lkdGgoKSkKICAgICAgICAgICAgICAgICBjaGlsZC0+Y2xl
YXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+cmVu
ZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRv
UmVuZGVyQm94KGNoaWxkLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmIChib3gtPmhhc1Jl
bmRlck92ZXJmbG93KCkgfHwgYm94LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAg
ICAgICAgIGNoaWxkLT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwotICAgICAgICB9IGVs
c2UgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+aXNCUigpICYmIChjaGlsZC0+cmVuZGVyZXIoKS0+
c3R5bGUobV9maXJzdExpbmUpLT5ib3hTaGFkb3coKSB8fCBjaGlsZC0+Ym94TW9kZWxPYmplY3Qo
KS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKQorICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZC0+cmVu
ZGVyZXIoKS0+aXNCUigpICYmIChjaGlsZC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVT
dHlsZSgpKS0+Ym94U2hhZG93KCkgfHwgY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQ
YWludGluZ0xheWVyKCkKICAgICAgICAgICAgICAgICAgICB8fCAoY2hpbGQtPnJlbmRlcmVyKCkt
PmlzTGlzdE1hcmtlcigpICYmICF0b1JlbmRlckxpc3RNYXJrZXIoY2hpbGQtPnJlbmRlcmVyKCkp
LT5pc0luc2lkZSgpKQotICAgICAgICAgICAgICAgICAgIHx8IGNoaWxkLT5yZW5kZXJlcigpLT5z
dHlsZShtX2ZpcnN0TGluZSktPmhhc0JvcmRlckltYWdlT3V0c2V0cygpKSkKKyAgICAgICAgICAg
ICAgICAgICB8fCBjaGlsZC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+
aGFzQm9yZGVySW1hZ2VPdXRzZXRzKCkpKQogICAgICAgICAgICAgY2hpbGQtPmNsZWFyS25vd25U
b0hhdmVOb092ZXJmbG93KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoa25vd25Ub0hhdmVOb092
ZXJmbG93KCkgJiYgY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpICYmICF0b0lubGluZUZsb3dCb3go
Y2hpbGQpLT5rbm93blRvSGF2ZU5vT3ZlcmZsb3coKSkKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lk
IElubGluZUZsb3dCb3g6OnJlbW92ZUNoaWxkKElubGluZUJvCiB7CiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogCi0gICAgaWYgKCFtX2RpcnR5KQorICAgIGlmICghaXNEaXJ0eSgpKQogICAgICAg
ICBkaXJ0eUxpbmVCb3hlcygpOwogCiAgICAgcm9vdCgpLT5jaGlsZFJlbW92ZWQoY2hpbGQpOwpA
QCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cmVtb3ZlTGluZUJveEZyb21S
ZW4KIAogdm9pZCBJbmxpbmVGbG93Qm94OjpleHRyYWN0TGluZSgpCiB7Ci0gICAgaWYgKCFtX2V4
dHJhY3RlZCkKKyAgICBpZiAoIWV4dHJhY3RlZCgpKQogICAgICAgICBleHRyYWN0TGluZUJveEZy
b21SZW5kZXJPYmplY3QoKTsKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpCiAgICAgICAgIGNoaWxkLT5l
eHRyYWN0TGluZSgpOwpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6ZXh0
cmFjdExpbmVCb3hGcm9tUmUKIAogdm9pZCBJbmxpbmVGbG93Qm94OjphdHRhY2hMaW5lKCkKIHsK
LSAgICBpZiAobV9leHRyYWN0ZWQpCisgICAgaWYgKGV4dHJhY3RlZCgpKQogICAgICAgICBhdHRh
Y2hMaW5lQm94VG9SZW5kZXJPYmplY3QoKTsKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpCiAgICAgICAg
IGNoaWxkLT5hdHRhY2hMaW5lKCk7CkBAIC0zNjUsNyArMzY1LDcgQEAgZmxvYXQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc0luSW5saW5lRAogICAgICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSB0
b1JlbmRlclRleHQodGV4dC0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAocnQtPnRleHRM
ZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYmIGlzU3Bh
Y2VPck5ld2xpbmUocnQtPmNoYXJhY3RlcnMoKVt0ZXh0LT5zdGFydCgpXSkpCi0gICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHJ0LT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKS53
b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBydC0+c3R5
bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAg
ICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJ0LT5jaGFyYWN0ZXJz
KClbdGV4dC0+ZW5kKCldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRleHQtPnNldExv
Z2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KTsKQEAgLTQyNCw4ICs0MjQsOCBAQCBib29sIElubGluZUZs
b3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKG1fZmly
c3RMaW5lKS0+Zm9udERlc2NyaXB0aW9uKCkudGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9yaWVu
dGF0aW9uVXByaWdodAotICAgICAgICB8fCByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSkt
PmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgIGlmIChyZW5k
ZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250RGVzY3JpcHRpb24oKS50ZXh0
T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0CisgICAgICAgIHx8IHJlbmRl
cmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5o
YXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoSW5s
aW5lQm94KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGlu
ZSgpKSB7CkBAIC00MzYsNyArNDM2LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lk
ZW9ncmFwaGljQgogICAgICAgICAgICAgaWYgKHRvSW5saW5lRmxvd0JveChjdXJyKS0+cmVxdWly
ZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT5yZW5k
ZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0
aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCktPnN0eWxlKGlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0aWNhbEdseXBo
cygpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsK
QEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2Nr
RGlyCiB7CiAgICAgYm9vbCBpc1Jvb3RCb3ggPSBpc1Jvb3RJbmxpbmVCb3goKTsKICAgICBpZiAo
aXNSb290Qm94KSB7Ci0gICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IHJl
bmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKTsKKyAgICAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExp
bmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKTsKICAgICAgICAgc2V0TG9naWNhbFRvcCh0b3AgKyBt
YXhBc2NlbnQgLSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKSk7CiAgICAgfQogCkBA
IC02MjYsMTEgKzYyNiwxMSBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2Nr
RGlyCiAgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0SW5jbHVkaW5nTWFyZ2lucyA9IGJveEhl
aWdodDsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoY3Vyci0+aXNUZXh0KCkgfHwgY3Vyci0+
aXNJbmxpbmVGbG93Qm94KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcyA9IGN1cnItPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJp
Y3MoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGN1cnIt
PnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCk7CiAg
ICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9IGN1cnItPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxp
bmVUeXBlKSAtIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpOwogICAgICAgICAgICAg
aWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGJveE9iamVjdCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3Vyci0+cmVu
ZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgbmV3TG9naWNhbFRvcCAtPSBib3hPYmplY3QtPnN0
eWxlKG1fZmlyc3RMaW5lKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJveE9iamVjdC0+
Ym9yZGVyVG9wKCkgKyBib3hPYmplY3QtPnBhZGRpbmdUb3AoKSA6IAorICAgICAgICAgICAgICAg
IG5ld0xvZ2ljYWxUb3AgLT0gYm94T2JqZWN0LT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm94T2JqZWN0LT5ib3JkZXJUb3AoKSArIGJveE9i
amVjdC0+cGFkZGluZ1RvcCgpIDogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3hPYmplY3QtPmJvcmRlclJpZ2h0KCkgKyBib3hPYmplY3QtPnBhZGRpbmdSaWdodCgpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbmV3TG9naWNhbFRvcEluY2x1ZGluZ01hcmdpbnMgPSBu
ZXdMb2dpY2FsVG9wOwpAQCAtNjY1LDkgKzY2NSw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxh
Y2VCb3hlc0luQmxvY2tEaXIKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjdXJyLT5p
c0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIFRleHRFbXBoYXNpc1Bvc2l0aW9u
IGVtcGhhc2lzTWFya1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgIGlmICh0b0lubGluZVRleHRC
b3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGN1cnItPnJlbmRlcmVyKCktPnN0eWxl
KG1fZmlyc3RMaW5lKSwgZW1waGFzaXNNYXJrUG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRvSW5saW5lVGV4dEJveChjdXJyKS0+Z2V0RW1waGFzaXNNYXJrUG9zaXRpb24oY3Vyci0+
cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKSwgZW1waGFzaXNNYXJrUG9zaXRp
b24pKSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW1waGFzaXNNYXJrSXNPdmVyID0gZW1w
aGFzaXNNYXJrUG9zaXRpb24gPT0gVGV4dEVtcGhhc2lzUG9zaXRpb25PdmVyOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZW1waGFzaXNNYXJrSXNPdmVyICE9IGN1cnItPnJlbmRlcmVyKCktPnN0
eWxlKG1fZmlyc3RMaW5lKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoZW1waGFzaXNNYXJrSXNPdmVyICE9IGN1cnItPnJlbmRlcmVyKCktPnN0
eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc0Fubm90YXRpb25zQmVmb3JlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzQW5ub3RhdGlv
bnNBZnRlciA9IHRydWU7CkBAIC03MzQsNyArNzM0LDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxv
d0JveDo6YWRkQm94U2hhZG93VgogICAgIGlmICghcGFyZW50KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5l
KTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGlu
ZVN0eWxlKCkpOwogICAgIGlmICghc3R5bGUtPmJveFNoYWRvdygpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTc2Nyw3ICs3NjcsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3Jk
ZXJPdXRzCiAgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkp
OwogICAgIGlmICghc3R5bGUtPmhhc0JvcmRlckltYWdlT3V0c2V0cygpKQogICAgICAgICByZXR1
cm47CiAgICAgCkBAIC04MDIsNyArODAyLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6
YWRkVGV4dEJveFZpcwogICAgIGlmICh0ZXh0Qm94LT5rbm93blRvSGF2ZU5vT3ZlcmZsb3coKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+cmVu
ZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRl
eHRCb3gtPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgCiAgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERh
dGFNYXAuZmluZCh0ZXh0Qm94KTsKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0g
aXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOwpAQCAt
MTIwOCw4ICsxMjA4LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25z
KAogICAgIAogICAgIC8vIFlvdSBjYW4gdXNlIHA6OmZpcnN0LWxpbmUgdG8gc3BlY2lmeSBhIGJh
Y2tncm91bmQuIElmIHNvLCB0aGUgcm9vdCBsaW5lIGJveGVzIGZvcgogICAgIC8vIGEgbGluZSBt
YXkgYWN0dWFsbHkgaGF2ZSB0byBwYWludCBhIGJhY2tncm91bmQuCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSk7Ci0gICAgaWYgKCgh
cGFyZW50KCkgJiYgbV9maXJzdExpbmUgJiYgc3R5bGVUb1VzZSAhPSByZW5kZXJlcigpLT5zdHls
ZSgpKSB8fCAocGFyZW50KCkgJiYgcmVuZGVyZXIoKS0+aGFzQm94RGVjb3JhdGlvbnMoKSkpIHsK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RM
aW5lU3R5bGUoKSk7CisgICAgaWYgKCghcGFyZW50KCkgJiYgaXNGaXJzdExpbmVTdHlsZSgpICYm
IHN0eWxlVG9Vc2UgIT0gcmVuZGVyZXIoKS0+c3R5bGUoKSkgfHwgKHBhcmVudCgpICYmIHJlbmRl
cmVyKCktPmhhc0JveERlY29yYXRpb25zKCkpKSB7CiAgICAgICAgIExheW91dFJlY3QgcGFpbnRS
ZWN0ID0gTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50b2Zmc2V0LCBmcmFtZVJlY3Quc2l6ZSgpKTsK
ICAgICAgICAgLy8gU2hhZG93IGNvbWVzIGZpcnN0IGFuZCBpcyBiZWhpbmQgdGhlIGJhY2tncm91
bmQgYW5kIGJvcmRlci4KICAgICAgICAgaWYgKCFib3hNb2RlbE9iamVjdCgpLT5ib3hTaGFkb3dT
aG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoQmFja2dyb3VuZEJsZWVkTm9uZSwgdGhpcykpCkBA
IC0xNDMxLDcgKzE0MzEsNyBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVy
QW5uCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpIHsK
LSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGN1cnItPnJlbmRlcmVyKCktPnN0eWxl
KG1fZmlyc3RMaW5lKTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGN1cnItPnJl
bmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgICAgICAgICBUZXh0RW1w
aGFzaXNQb3NpdGlvbiBlbXBoYXNpc01hcmtQb3NpdGlvbjsKICAgICAgICAgICAgIGlmIChzdHls
ZS0+dGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYmIHRvSW5saW5l
VGV4dEJveChjdXJyKS0+Z2V0RW1waGFzaXNNYXJrUG9zaXRpb24oc3R5bGUsIGVtcGhhc2lzTWFy
a1Bvc2l0aW9uKSAmJiBlbXBoYXNpc01hcmtQb3NpdGlvbiA9PSBUZXh0RW1waGFzaXNQb3NpdGlv
bk92ZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRp
bmdNb2RlKCkpIHsKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0Jv
eDo6Y29tcHV0ZVVuZGVyQW4KICAgICAgICAgICAgIHJlc3VsdCA9IG1heChyZXN1bHQsIHRvSW5s
aW5lRmxvd0JveChjdXJyKS0+Y29tcHV0ZVVuZGVyQW5ub3RhdGlvbkFkanVzdG1lbnQoYWxsb3dl
ZFBvc2l0aW9uKSk7CiAKICAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lVGV4dEJveCgpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBjdXJyLT5yZW5kZXJlcigpLT5zdHlsZSht
X2ZpcnN0TGluZSk7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBjdXJyLT5yZW5k
ZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxl
LT50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgJiYgc3R5bGUtPnRl
eHRFbXBoYXNpc1Bvc2l0aW9uKCkgPT0gVGV4dEVtcGhhc2lzUG9zaXRpb25VbmRlcikgewogICAg
ICAgICAgICAgICAgIGlmICghc3R5bGUtPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY3Vy
ci0+bG9naWNhbEJvdHRvbSgpICsgc3R5bGUtPmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoc3R5
bGUtPnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxMTI0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDIx
ICs1OSwyMSBAQCBzdGF0aWMgSW5saW5lVGV4dEJveE92ZXJmbG93TWFwKiBnVGV4dEJvCiAKIHZv
aWQgSW5saW5lVGV4dEJveDo6ZGVzdHJveShSZW5kZXJBcmVuYSogYXJlbmEpCiB7Ci0gICAgaWYg
KCFtX2tub3duVG9IYXZlTm9PdmVyZmxvdyAmJiBnVGV4dEJveGVzV2l0aE92ZXJmbG93KQorICAg
IGlmICgha25vd25Ub0hhdmVOb092ZXJmbG93KCkgJiYgZ1RleHRCb3hlc1dpdGhPdmVyZmxvdykK
ICAgICAgICAgZ1RleHRCb3hlc1dpdGhPdmVyZmxvdy0+cmVtb3ZlKHRoaXMpOwogICAgIElubGlu
ZUJveDo6ZGVzdHJveShhcmVuYSk7CiB9CiAKIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9n
aWNhbE92ZXJmbG93UmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fa25vd25Ub0hhdmVOb092ZXJm
bG93IHx8ICFnVGV4dEJveGVzV2l0aE92ZXJmbG93KQorICAgIGlmIChrbm93blRvSGF2ZU5vT3Zl
cmZsb3coKSB8fCAhZ1RleHRCb3hlc1dpdGhPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QobG9naWNhbEZyYW1lUmVjdCgpKTsKICAgICByZXR1cm4gZ1RleHRCb3hlc1dp
dGhPdmVyZmxvdy0+Z2V0KHRoaXMpOwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnNldExvZ2lj
YWxPdmVyZmxvd1JlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoIW1f
a25vd25Ub0hhdmVOb092ZXJmbG93KTsKKyAgICBBU1NFUlQoIWtub3duVG9IYXZlTm9PdmVyZmxv
dygpKTsKICAgICBpZiAoIWdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3cpCiAgICAgICAgIGdUZXh0Qm94
ZXNXaXRoT3ZlcmZsb3cgPSBuZXcgSW5saW5lVGV4dEJveE92ZXJmbG93TWFwOwogICAgIGdUZXh0
Qm94ZXNXaXRoT3ZlcmZsb3ctPmFkZCh0aGlzLCByZWN0KTsKQEAgLTg1LDcgKzg1LDcgQEAgTGF5
b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpiYXNlbGluZVBvc2l0aQogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAocGFyZW50KCktPnJlbmRlcmVyKCkgPT0gcmVuZGVyZXIoKS0+cGFyZW50KCkpCiAg
ICAgICAgIHJldHVybiBwYXJlbnQoKS0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUpOwot
ICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCktPnBhcmVudCgpKS0+
YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwo
KSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpOworICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCktPnBhcmVu
dCgpKS0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIGlzRmlyc3RMaW5lU3R5bGUoKSwg
aXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKTsKIH0KIAogTGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpsaW5lSGVp
Z2h0KCkgY29uc3QKQEAgLTkzLDEwICs5MywxMCBAQCBMYXlvdXRVbml0IElubGluZVRleHRCb3g6
OmxpbmVIZWlnaHQoKSBjCiAgICAgaWYgKCFpc1RleHQoKSB8fCAhcmVuZGVyZXIoKS0+cGFyZW50
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX3JlbmRlcmVyLT5pc0JSKCkpCi0gICAg
ICAgIHJldHVybiB0b1JlbmRlckJSKG1fcmVuZGVyZXIpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5l
KTsKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVyQlIobV9yZW5kZXJlciktPmxpbmVIZWlnaHQoaXNG
aXJzdExpbmVTdHlsZSgpKTsKICAgICBpZiAocGFyZW50KCktPnJlbmRlcmVyKCkgPT0gcmVuZGVy
ZXIoKS0+cGFyZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQoKS0+bGluZUhlaWdodCgpOwot
ICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCktPnBhcmVudCgpKS0+
bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6
IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsKKyAgICByZXR1cm4gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcigpLT5wYXJlbnQoKSktPmxpbmVIZWlnaHQoaXNG
aXJzdExpbmVTdHlsZSgpLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGlj
YWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOwogfQogCiBMYXlvdXRVbml0IElubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblRvcCgpCkBAIC0xODcsNyArMTg3LDcgQEAgTGF5b3V0UmVjdCBJ
bmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogICAgIFJlbmRlclRleHQqIHRleHRPYmogPSB0
ZXh0UmVuZGVyZXIoKTsKICAgICBMYXlvdXRVbml0IHNlbFRvcCA9IHNlbGVjdGlvblRvcCgpOwog
ICAgIExheW91dFVuaXQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlVG9Vc2UgPSB0ZXh0T2JqLT5zdHlsZShtX2ZpcnN0TGluZSk7CisgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSB0ZXh0T2JqLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkp
OwogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZVRvVXNlLT5mb250KCk7CiAKICAgICBCdWZm
ZXJGb3JBcHBlbmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47CkBAIC0yMTksNyArMjE5
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpkZWxldGVMaW5lKFJlbmRlckFyZQogCiB2b2lkIElu
bGluZVRleHRCb3g6OmV4dHJhY3RMaW5lKCkKIHsKLSAgICBpZiAobV9leHRyYWN0ZWQpCisgICAg
aWYgKGV4dHJhY3RlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB0b1JlbmRlclRleHQocmVu
ZGVyZXIoKSktPmV4dHJhY3RUZXh0Qm94KHRoaXMpOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6ZXh0cmFjdExpbmUoKQogCiB2b2lkIElubGluZVRleHRCb3g6OmF0dGFj
aExpbmUoKQogewotICAgIGlmICghbV9leHRyYWN0ZWQpCisgICAgaWYgKCFleHRyYWN0ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+YXR0
YWNoVGV4dEJveCh0aGlzKTsKQEAgLTI4Myw3ICsyODMsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94
OjpwbGFjZUVsbGlwc2lzQm94KGJvCiAKICAgICAgICAgLy8gSWYgd2UgZ290IGhlcmUgdGhhdCBt
ZWFucyB0aGF0IHdlIHdlcmUgb25seSBwYXJ0aWFsbHkgdHJ1bmNhdGVkIGFuZCB3ZSBuZWVkIHRv
IHJldHVybiB0aGUgcGl4ZWwgb2Zmc2V0IGF0IHdoaWNoCiAgICAgICAgIC8vIHRvIHBsYWNlIHRo
ZSBlbGxpcHNpcy4KLSAgICAgICAgZmxvYXQgd2lkdGhPZlZpc2libGVUZXh0ID0gdG9SZW5kZXJU
ZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0LCBvZmZzZXQsIHRleHRQb3MoKSwgbV9maXJz
dExpbmUpOworICAgICAgICBmbG9hdCB3aWR0aE9mVmlzaWJsZVRleHQgPSB0b1JlbmRlclRleHQo
cmVuZGVyZXIoKSktPndpZHRoKG1fc3RhcnQsIG9mZnNldCwgdGV4dFBvcygpLCBpc0ZpcnN0TGlu
ZVN0eWxlKCkpOwogCiAgICAgICAgIC8vIFRoZSBlbGxpcHNpcyBuZWVkcyB0byBiZSBwbGFjZWQg
anVzdCBhZnRlciB0aGUgbGFzdCB2aXNpYmxlIGNoYXJhY3Rlci4KICAgICAgICAgLy8gV2hlcmUg
ImFmdGVyIiBpcyBkZWZpbmVkIGJ5IHRoZSBmbG93IGRpcmVjdGlvbmFsaXR5LCBub3QgdGhlIGlu
bGluZQpAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWkKICAgICAgICAgICAgIC8vIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LgogICAgICAgICAg
ICAgLy8gTk9URTogV2ViS2l0J3MgYmVoYXZpb3IgZGlmZmVycyBmcm9tIHRoYXQgb2YgSUUgd2hp
Y2ggYXBwZWFycyB0byBqdXN0IG92ZXJsYXkgdGhlIGVsbGlwc2lzIG9uIHRvcCBvZiB0aGUKICAg
ICAgICAgICAgIC8vIHRydW5jYXRlZCBzdHJpbmcgaS5lLiAgfEhlbGxvfENCQXwgLT4gfC4uLmxv
fENCQXwKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0ID0gdG9SZW5k
ZXJUZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0LCBtX3RydW5jYXRpb24sIHRleHRQb3Mo
KSwgbV9maXJzdExpbmUpOworICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRl
eHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPndpZHRoKG1fc3RhcnQsIG1fdHJ1bmNhdGlv
biwgdGV4dFBvcygpLCBpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgICAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aE9mSGlkZGVuVGV4dCA9IG1fbG9naWNhbFdpZHRoIC0gd2lkdGhPZlZpc2libGVUZXh0
OwogICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBoaXQgdGVzdGluZyBsb2dpYyBhbHNvIG5lZWRz
IHRvIHRha2UgdGhpcyB0cmFuc2xhdGlvbiBpbnRvIGFjY291bnQuCiAgICAgICAgICAgICBMYXlv
dXRTaXplIHRydW5jYXRpb25PZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gd2lkdGhP
ZkhpZGRlblRleHQgOiAtd2lkdGhPZkhpZGRlblRleHQsIDApOwpAQCAtNTE2LDcgKzUxNiw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwogCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSk7CisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlVG9Vc2UgPSByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkp
OwogICAgIAogICAgIGFkanVzdGVkUGFpbnRPZmZzZXQubW92ZSgwLCBzdHlsZVRvVXNlLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gMCA6IC1sb2dpY2FsSGVpZ2h0KCkpOwogCkBAIC05MDQs
NyArOTA0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcAogCiAg
ICAgZmxvYXQgd2lkdGggPSBtX2xvZ2ljYWxXaWR0aDsKICAgICBpZiAobV90cnVuY2F0aW9uICE9
IGNOb1RydW5jYXRpb24pIHsKLSAgICAgICAgd2lkdGggPSB0b1JlbmRlclRleHQocmVuZGVyZXIo
KSktPndpZHRoKG1fc3RhcnQsIG1fdHJ1bmNhdGlvbiwgdGV4dFBvcygpLCBtX2ZpcnN0TGluZSk7
CisgICAgICAgIHdpZHRoID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0
LCBtX3RydW5jYXRpb24sIHRleHRQb3MoKSwgaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICAgICAg
aWYgKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICBsb2NhbE9yaWdpbi5t
b3ZlKG1fbG9naWNhbFdpZHRoIC0gd2lkdGgsIDApOwogICAgIH0KQEAgLTkxOSw3ICs5MTksNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAKICAgICBib29sIGxp
bmVzQXJlT3BhcXVlID0gIWlzUHJpbnRpbmcgJiYgKCEoZGVjbyAmIFVOREVSTElORSkgfHwgdW5k
ZXJsaW5lLmFscGhhKCkgPT0gMjU1KSAmJiAoIShkZWNvICYgT1ZFUkxJTkUpIHx8IG92ZXJsaW5l
LmFscGhhKCkgPT0gMjU1KSAmJiAoIShkZWNvICYgTElORV9USFJPVUdIKSB8fCBsaW5ldGhyb3Vn
aC5hbHBoYSgpID09IDI1NSk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRl
cmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9
IHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgaW50IGJhc2VsaW5l
ID0gc3R5bGVUb1VzZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKIAogICAgIGJvb2wgc2V0Q2xp
cCA9IGZhbHNlOwpAQCAtMTA1Myw3ICsxMDUzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dFNwZWxsaW5nT3JHcmFtbQogICAgIC8vIFNvLCB3ZSBnZW5lcmFsbHkgcGxhY2UgdGhlIHVuZGVy
bGluZSBhdCB0aGUgYm90dG9tIG9mIHRoZSB0ZXh0LCBidXQgaW4gbGFyZ2VyIGZvbnRzIHRoYXQn
cyBub3Qgc28gZ29vZCBzbwogICAgIC8vIHdlIHBpbiB0byB0d28gcGl4ZWxzIHVuZGVyIHRoZSBi
YXNlbGluZS4KICAgICBpbnQgbGluZVRoaWNrbmVzcyA9IGNNaXNzcGVsbGluZ0xpbmVUaGlja25l
c3M7Ci0gICAgaW50IGJhc2VsaW5lID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5m
b250TWV0cmljcygpLmFzY2VudCgpOworICAgIGludCBiYXNlbGluZSA9IHJlbmRlcmVyKCktPnN0
eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiAgICAgaW50
IGRlc2NlbnQgPSBsb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZTsKICAgICBpbnQgdW5kZXJsaW5l
T2Zmc2V0OwogICAgIGlmIChkZXNjZW50IDw9ICgyICsgbGluZVRoaWNrbmVzcykpIHsKQEAgLTEx
ODcsNyArMTE4Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGUK
ICAgICBpZiAocGFpbnRTdGFydCA8PSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQpIHsKICAgICAgICAg
cGFpbnRTdGFydCA9IHVuZGVybGluZS5zdGFydE9mZnNldDsKICAgICAgICAgdXNlV2hvbGVXaWR0
aCA9IGZhbHNlOwotICAgICAgICBzdGFydCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lk
dGgobV9zdGFydCwgcGFpbnRTdGFydCAtIG1fc3RhcnQsIHRleHRQb3MoKSwgbV9maXJzdExpbmUp
OworICAgICAgICBzdGFydCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgobV9zdGFy
dCwgcGFpbnRTdGFydCAtIG1fc3RhcnQsIHRleHRQb3MoKSwgaXNGaXJzdExpbmVTdHlsZSgpKTsK
ICAgICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZzZXQpIHsgICAgICAv
LyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CiAgICAgICAgIHBhaW50
RW5kID0gbWluKHBhaW50RW5kLCAodW5zaWduZWQpdW5kZXJsaW5lLmVuZE9mZnNldCk7CkBAIC0x
MTk4LDE0ICsxMTk4LDE0IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVu
ZGUKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwogICAgIH0KICAgICBpZiAoIXVzZVdo
b2xlV2lkdGgpIHsKLSAgICAgICAgd2lkdGggPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPndp
ZHRoKHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgdGV4dFBvcygpICsgc3RhcnQs
IG1fZmlyc3RMaW5lKTsKKyAgICAgICAgd2lkdGggPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSkt
PndpZHRoKHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgdGV4dFBvcygpICsgc3Rh
cnQsIGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgfQogCiAgICAgLy8gVGhpY2sgbWFya2VkIHRl
eHQgdW5kZXJsaW5lcyBhcmUgMnB4IHRoaWNrIGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBmb3Ig
dGhlIDJweCBsaW5lIHVuZGVyIHRoZSBiYXNlbGluZS4KICAgICAvLyBBbGwgb3RoZXIgbWFya2Vk
IHRleHQgdW5kZXJsaW5lcyBhcmUgMXB4IHRoaWNrLgogICAgIC8vIElmIHRoZXJlJ3Mgbm90IGVu
b3VnaCBzcGFjZSB0aGUgdW5kZXJsaW5lIHdpbGwgdG91Y2ggb3Igb3ZlcmxhcCBjaGFyYWN0ZXJz
LgogICAgIGludCBsaW5lVGhpY2tuZXNzID0gMTsKLSAgICBpbnQgYmFzZWxpbmUgPSByZW5kZXJl
cigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CisgICAgaW50
IGJhc2VsaW5lID0gcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1l
dHJpY3MoKS5hc2NlbnQoKTsKICAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIGxvZ2ljYWxIZWln
aHQoKSAtIGJhc2VsaW5lID49IDIpCiAgICAgICAgIGxpbmVUaGlja25lc3MgPSAyOwogCkBAIC0x
MjUxLDcgKzEyNTEsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxv
CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAK
ICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpOwotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOwogICAgIHJldHVybiBmb250Lm9mZnNldEZvclBv
c2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpLCBsaW5lT2Zmc2V0IC0gbG9naWNh
bExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAg
ZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaQogICAgIEZvbnRDYWNoZVB1
cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCiAgICAgUmVuZGVyVGV4dCog
dGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVU
b1VzZSA9IHRleHQtPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVU
b1VzZSA9IHRleHQtPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgQVNTRVJUKHN0eWxl
VG9Vc2UpOwogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZVRvVXNlLT5mb250KCk7CiAgICAg
aW50IGZyb20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0gbV9zdGFydCA6
IDA7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVj
dFRleHRSdW4oCiAKICAgICBBU1NFUlQobWF4aW11bUxlbmd0aCA+PSBsZW5ndGgpOwogCi0gICAg
VGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoLCB0ZXh0UmVuZGVyZXItPmFsbG93VGFicygp
LCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24o
KSwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcik7
CisgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoLCB0ZXh0UmVuZGVyZXItPmFsbG93
VGFicygpLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJl
Y3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxP
cmRlcik7CiAgICAgaWYgKHRleHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRleHQoZm9udCkpCiAgICAg
ICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUodGV4dFJlbmRlcmVyKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkocmV2aXNpb24gMTEyNDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDEwIEBAIHB1
YmxpYzoKIAogICAgIHVuc2lnbmVkIHNob3J0IHRydW5jYXRpb24oKSB7IHJldHVybiBtX3RydW5j
YXRpb247IH0KIAotICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNFbGxp
cHNpc0JveE9ySHlwaGVuOyB9Ci0gICAgdm9pZCBzZXRIYXNIeXBoZW4oYm9vbCBoYXNIeXBoZW4p
IHsgbV9oYXNFbGxpcHNpc0JveE9ySHlwaGVuID0gaGFzSHlwaGVuOyB9Ci0KLSAgICBib29sIGNh
bkhhdmVMZWFkaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxk
cmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbjsgfQotICAgIHZvaWQgc2V0Q2FuSGF2ZUxlYWRp
bmdFeHBhbnNpb24oYm9vbCBjYW5IYXZlTGVhZGluZ0V4cGFuc2lvbikgeyBtX2hhc1NlbGVjdGVk
Q2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uID0gY2FuSGF2ZUxlYWRpbmdFeHBhbnNp
b247IH0KKyAgICB1c2luZyBJbmxpbmVCb3g6Omhhc0h5cGhlbjsKKyAgICB1c2luZyBJbmxpbmVC
b3g6OnNldEhhc0h5cGhlbjsKKyAgICB1c2luZyBJbmxpbmVCb3g6OmNhbkhhdmVMZWFkaW5nRXhw
YW5zaW9uOworICAgIHVzaW5nIElubGluZUJveDo6c2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb247
CiAKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUJ5U3RhcnQoY29uc3QgSW5saW5lVGV4
dEJveCogZmlyc3QsIGNvbnN0IElubGluZVRleHRCb3gqIHNlY29uZCkgeyByZXR1cm4gZmlyc3Qt
PnN0YXJ0KCkgPCBzZWNvbmQtPnN0YXJ0KCk7IH0KIApAQCAtMTM2LDcgKzEzNSwxMiBAQCBwcml2
YXRlOgogcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0OwogCi0g
ICAgdm9pZCBzZXRFeHBhbnNpb24oaW50IGV4cGFuc2lvbikgeyBtX2xvZ2ljYWxXaWR0aCAtPSBt
X2V4cGFuc2lvbjsgbV9leHBhbnNpb24gPSBleHBhbnNpb247IG1fbG9naWNhbFdpZHRoICs9IG1f
ZXhwYW5zaW9uOyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb24oaW50IG5ld0V4cGFuc2lvbikKKyAg
ICB7CisgICAgICAgIG1fbG9naWNhbFdpZHRoIC09IGV4cGFuc2lvbigpOworICAgICAgICBJbmxp
bmVCb3g6OnNldEV4cGFuc2lvbihuZXdFeHBhbnNpb24pOworICAgICAgICBtX2xvZ2ljYWxXaWR0
aCArPSBuZXdFeHBhbnNpb247CisgICAgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c0lubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIApAQCAtMTg1LDcgKzE4
OSw3IEBAIHByaXZhdGU6CiAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9u
QmVoYXZpb3IoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChjYW5IYXZlTGVhZGluZ0V4
cGFuc2lvbigpID8gVGV4dFJ1bjo6QWxsb3dMZWFkaW5nRXhwYW5zaW9uIDogVGV4dFJ1bjo6Rm9y
YmlkTGVhZGluZ0V4cGFuc2lvbikKLSAgICAgICAgICAgIHwgKG1fZXhwYW5zaW9uICYmIG5leHRM
ZWFmQ2hpbGQoKSA/IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gOiBUZXh0UnVuOjpG
b3JiaWRUcmFpbGluZ0V4cGFuc2lvbik7CisgICAgICAgICAgICB8IChleHBhbnNpb24oKSAmJiBu
ZXh0TGVhZkNoaWxkKCkgPyBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIDogVGV4dFJ1
bjo6Rm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZp
c2lvbiAxMTI0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDcgKzUyMiw3IEBAIFJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW4KICAgICAgICAgICAgIElubGluZVRleHRCb3gq
IHRleHQgPSB0b0lubGluZVRleHRCb3goYm94KTsKICAgICAgICAgICAgIHRleHQtPnNldFN0YXJ0
KHItPm1fc3RhcnQpOwogICAgICAgICAgICAgdGV4dC0+c2V0TGVuKHItPm1fc3RvcCAtIHItPm1f
c3RhcnQpOwotICAgICAgICAgICAgdGV4dC0+bV9kaXJPdmVycmlkZSA9IHItPmRpck92ZXJyaWRl
KHZpc3VhbGx5T3JkZXJlZCk7CisgICAgICAgICAgICB0ZXh0LT5zZXREaXJPdmVycmlkZShyLT5k
aXJPdmVycmlkZSh2aXN1YWxseU9yZGVyZWQpKTsKICAgICAgICAgICAgIGlmIChyLT5tX2hhc0h5
cGhlbikKICAgICAgICAgICAgICAgICB0ZXh0LT5zZXRIYXNIeXBoZW4odHJ1ZSk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHJldmlzaW9uIDExMjQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDkgKzUwMCw5IEBAIHN0YXRpYyB2
b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywKICAgICAgICAgeSAtPSB0b1JlbmRlclRh
YmxlQ2VsbChvLmNvbnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ0JlZm9yZSgpOwog
ICAgICAgICAKICAgICB0cyA8PCAidGV4dCBydW4gYXQgKCIgPDwgeCA8PCAiLCIgPDwgeSA8PCAi
KSB3aWR0aCAiIDw8IGxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoIXJ1bi5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgfHwgcnVuLm1fZGlyT3ZlcnJpZGUpIHsKKyAgICBpZiAoIXJ1bi5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgfHwgcnVuLmRpck92ZXJyaWRlKCkpIHsKICAgICAgICAgdHMgPDwgKCFy
dW4uaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gIiBSVEwiIDogIiBMVFIiKTsKLSAgICAgICAg
aWYgKHJ1bi5tX2Rpck92ZXJyaWRlKQorICAgICAgICBpZiAocnVuLmRpck92ZXJyaWRlKCkpCiAg
ICAgICAgICAgICB0cyA8PCAiIG92ZXJyaWRlIjsKICAgICB9CiAgICAgdHMgPDwgIjogIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24g
MTEyNDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDE2IEBAIGJvb2wgUm9vdElubGluZUJveDo6aXNI
eXBoZW5hdGVkKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0xheW91dFVuaXQgUm9v
dElubGluZUJveDo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBj
b25zdAoreworICAgIHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJh
c2VsaW5lVHlwZSwgaXNGaXJzdExpbmVTdHlsZSgpLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250
YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOworfQor
CitMYXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OmxpbmVIZWlnaHQoKSBjb25zdAoreworICAgIHJl
dHVybiBib3hNb2RlbE9iamVjdCgpLT5saW5lSGVpZ2h0KGlzRmlyc3RMaW5lU3R5bGUoKSwgaXNI
b3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZklu
dGVyaW9yTGluZUJveGVzKTsKK30KKwogYm9vbCBSb290SW5saW5lQm94OjpsaW5lQ2FuQWNjb21t
b2RhdGVFbGxpcHNpcyhib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGxpbmVCb3hFZGdlLCBp
bnQgZWxsaXBzaXNXaWR0aCkKIHsKICAgICAvLyBGaXJzdCBzYW5pdHktY2hlY2sgdGhlIHVub3Zl
cmZsb3dlZCB3aWR0aCBvZiB0aGUgd2hvbGUgbGluZSB0byBzZWUgaWYgdGhlcmUgaXMgc3VmZmlj
aWVudCByb29tLgpAQCAtMTk2LDcgKzIwNiw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWkKICAgICBJbmxpbmVGbG93Qm94OjpwYWludChwYWludEluZm8sIHBhaW50
T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKICAgICBwYWludEVsbGlwc2lzQm94KHBhaW50
SW5mbywgcGFpbnRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmly
c3RMaW5lKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyKCktPnN0eWxl
KGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgaWYgKHN0eWxlVG9Vc2UtPmhpZ2hsaWdodCgpICE9
IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWludEluZm8sIHBhaW50T2Zmc2V0LCBzdHlsZVRv
VXNlLT5oaWdobGlnaHQoKSk7CiAjZW5kaWYKQEAgLTY5NSw3ICs3MDUsNyBAQCB2b2lkIFJvb3RJ
bmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAgICAgLy8gUmVwbGFjZWQgYm94ZXMgd2ls
bCByZXR1cm4gMCBmb3IgdGhlIGxpbmUtaGVpZ2h0IGlmIGxpbmUtYm94LWNvbnRhaW4gc2F5cyB0
aGV5IGFyZQogICAgIC8vIG5vdCB0byBiZSBpbmNsdWRlZC4KICAgICBpZiAoYm94LT5yZW5kZXJl
cigpLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKG1fZmly
c3RMaW5lKS0+bGluZUJveENvbnRhaW4oKSAmIExpbmVCb3hDb250YWluUmVwbGFjZWQpIHsKKyAg
ICAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmxpbmVCb3hD
b250YWluKCkgJiBMaW5lQm94Q29udGFpblJlcGxhY2VkKSB7CiAgICAgICAgICAgICBhc2NlbnQg
PSBib3gtPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlKCkpOwogICAgICAgICAgICAgZGVz
Y2VudCA9IGJveC0+bGluZUhlaWdodCgpIC0gYXNjZW50OwogICAgICAgICAgICAgCkBAIC03MjAs
OCArNzMwLDggQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogICAg
IGJvb2wgc2V0VXNlZEZvbnQgPSBmYWxzZTsKICAgICBib29sIHNldFVzZWRGb250V2l0aExlYWRp
bmcgPSBmYWxzZTsKIAotICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgp
ICYmIChpbmNsdWRlRm9udCB8fCAoYm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSkt
PmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAg
ICB1c2VkRm9udHMtPmFwcGVuZChib3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+
Zm9udCgpLnByaW1hcnlGb250KCkpOworICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+
aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8fCAoYm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0Zp
cnN0TGluZVN0eWxlKCkpLT5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFk
aW5nKSkpIHsKKyAgICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoYm94LT5yZW5kZXJlcigpLT5zdHls
ZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9u
dE1ldHJpY3MoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgdXNlZEZvbnRBc2NlbnQgPSBmb250
TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKCkpOwpAQCAtNzU5LDggKzc2OSw4IEBAIHZvaWQg
Um9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKICAgICB9CiAgICAgCiAgICAgaWYg
KGluY2x1ZGVGb250Rm9yQm94KGJveCkgJiYgIXNldFVzZWRGb250KSB7Ci0gICAgICAgIGludCBm
b250QXNjZW50ID0gYm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRy
aWNzKCkuYXNjZW50KCk7Ci0gICAgICAgIGludCBmb250RGVzY2VudCA9IGJveC0+cmVuZGVyZXIo
KS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKKyAgICAgICAg
aW50IGZvbnRBc2NlbnQgPSBib3gtPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CisgICAgICAgIGludCBmb250RGVzY2VudCA9IGJv
eC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKS5k
ZXNjZW50KCk7CiAgICAgICAgIHNldEFzY2VudEFuZERlc2NlbnQoYXNjZW50LCBkZXNjZW50LCBm
b250QXNjZW50LCBmb250RGVzY2VudCwgYXNjZW50RGVzY2VudFNldCk7CiAgICAgICAgIGFmZmVj
dHNBc2NlbnQgPSBmb250QXNjZW50IC0gYm94LT5sb2dpY2FsVG9wKCkgPiAwOwogICAgICAgICBh
ZmZlY3RzRGVzY2VudCA9IGZvbnREZXNjZW50ICsgYm94LT5sb2dpY2FsVG9wKCkgPiAwOyAKQEAg
LTc3MCwxMyArNzgwLDEzIEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZv
ckIKICAgICAgICAgc2V0QXNjZW50QW5kRGVzY2VudChhc2NlbnQsIGRlc2NlbnQsIGdseXBoT3Zl
cmZsb3ctPnRvcCwgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tLCBhc2NlbnREZXNjZW50U2V0KTsKICAg
ICAgICAgYWZmZWN0c0FzY2VudCA9IGdseXBoT3ZlcmZsb3ctPnRvcCAtIGJveC0+bG9naWNhbFRv
cCgpID4gMDsKICAgICAgICAgYWZmZWN0c0Rlc2NlbnQgPSBnbHlwaE92ZXJmbG93LT5ib3R0b20g
KyBib3gtPmxvZ2ljYWxUb3AoKSA+IDA7IAotICAgICAgICBnbHlwaE92ZXJmbG93LT50b3AgPSBt
aW4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBtYXgoMCwgZ2x5cGhPdmVyZmxvdy0+dG9wIC0gYm94LT5y
ZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsK
LSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gbWluKGdseXBoT3ZlcmZsb3ctPmJvdHRv
bSwgbWF4KDAsIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSAtIGJveC0+cmVuZGVyZXIoKS0+c3R5bGUo
bV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmRlc2NlbnQoKSkpOworICAgICAgICBnbHlwaE92
ZXJmbG93LT50b3AgPSBtaW4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBtYXgoMCwgZ2x5cGhPdmVyZmxv
dy0+dG9wIC0gYm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
TWV0cmljcygpLmFzY2VudCgpKSk7CisgICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA9IG1p
bihnbHlwaE92ZXJmbG93LT5ib3R0b20sIG1heCgwLCBnbHlwaE92ZXJmbG93LT5ib3R0b20gLSBi
b3gtPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCku
ZGVzY2VudCgpKSk7CiAgICAgfQogCiAgICAgaWYgKGluY2x1ZGVNYXJnaW5Gb3JCb3goYm94KSkg
ewotICAgICAgICBpbnQgYXNjZW50V2l0aE1hcmdpbiA9IGJveC0+cmVuZGVyZXIoKS0+c3R5bGUo
bV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2VudCgpOwotICAgICAgICBpbnQgZGVzY2Vu
dFdpdGhNYXJnaW4gPSBib3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1l
dHJpY3MoKS5kZXNjZW50KCk7CisgICAgICAgIGludCBhc2NlbnRXaXRoTWFyZ2luID0gYm94LT5y
ZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250TWV0cmljcygpLmFzY2Vu
dCgpOworICAgICAgICBpbnQgZGVzY2VudFdpdGhNYXJnaW4gPSBib3gtPnJlbmRlcmVyKCktPnN0
eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpOwogICAgICAg
ICBpZiAoYm94LT5wYXJlbnQoKSAmJiAhYm94LT5yZW5kZXJlcigpLT5pc1RleHQoKSkgewogICAg
ICAgICAgICAgYXNjZW50V2l0aE1hcmdpbiArPSBib3gtPmJveE1vZGVsT2JqZWN0KCktPmJvcmRl
ckJlZm9yZSgpICsgYm94LT5ib3hNb2RlbE9iamVjdCgpLT5wYWRkaW5nQmVmb3JlKCkgKyBib3gt
PmJveE1vZGVsT2JqZWN0KCktPm1hcmdpbkJlZm9yZSgpOwogICAgICAgICAgICAgZGVzY2VudFdp
dGhNYXJnaW4gKz0gYm94LT5ib3hNb2RlbE9iamVjdCgpLT5ib3JkZXJBZnRlcigpICsgYm94LT5i
b3hNb2RlbE9iamVjdCgpLT5wYWRkaW5nQWZ0ZXIoKSArIGJveC0+Ym94TW9kZWxPYmplY3QoKS0+
bWFyZ2luQWZ0ZXIoKTsKQEAgLTgwMCw3ICs4MTAsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxpbmVC
b3g6OnZlcnRpY2FsUG9zaXRpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhpcyBtZXRo
b2QgZGV0ZXJtaW5lcyB0aGUgdmVydGljYWwgcG9zaXRpb24gZm9yIGlubGluZSBlbGVtZW50cy4K
LSAgICBib29sIGZpcnN0TGluZSA9IG1fZmlyc3RMaW5lOworICAgIGJvb2wgZmlyc3RMaW5lID0g
aXNGaXJzdExpbmVTdHlsZSgpOwogICAgIGlmIChmaXJzdExpbmUgJiYgIXJlbmRlcmVyLT5kb2N1
bWVudCgpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSkKICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNp
b24gMTEyNDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGlu
ZUJyZWFrUG9zKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtQb3M7IH0KICAgICB2b2lkIHNl
dExpbmVCcmVha1Bvcyh1bnNpZ25lZCBwKSB7IG1fbGluZUJyZWFrUG9zID0gcDsgfQogCi0gICAg
Ym9vbCBlbmRzV2l0aEJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9lbmRzV2l0aEJyZWFrOyB9Ci0g
ICAgdm9pZCBzZXRFbmRzV2l0aEJyZWFrKGJvb2wgYikgeyBtX2VuZHNXaXRoQnJlYWsgPSBiOyB9
CisgICAgdXNpbmcgSW5saW5lQm94OjplbmRzV2l0aEJyZWFrOworICAgIHVzaW5nIElubGluZUJv
eDo6c2V0RW5kc1dpdGhCcmVhazsKIAogICAgIHZvaWQgY2hpbGRSZW1vdmVkKElubGluZUJveCog
Ym94KTsKIApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwbGFjZUVsbGlwc2lz
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxsaXBzaXNTdHIsIGJvb2wgbHRyLCBmbG9hdCBibG9ja0xl
ZnRFZGdlLCBmbG9hdCBibG9ja1JpZ2h0RWRnZSwgZmxvYXQgZWxsaXBzaXNXaWR0aCwgSW5saW5l
Qm94KiBtYXJrdXBCb3ggPSAwKTsKICAgICB2aXJ0dWFsIGZsb2F0IHBsYWNlRWxsaXBzaXNCb3go
Ym9vbCBsdHIsIGZsb2F0IGJsb2NrTGVmdEVkZ2UsIGZsb2F0IGJsb2NrUmlnaHRFZGdlLCBmbG9h
dCBlbGxpcHNpc1dpZHRoLCBib29sJiBmb3VuZEJveCk7CiAKLSAgICBib29sIGhhc0VsbGlwc2lz
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9oYXNFbGxpcHNpc0JveE9ySHlwaGVuOyB9CisgICAgdXNp
bmcgSW5saW5lQm94OjpoYXNFbGxpcHNpc0JveDsKICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXNC
b3goKSBjb25zdDsKIAogICAgIHZvaWQgcGFpbnRFbGxpcHNpc0JveChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
KSBjb25zdDsKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzSHlwaGVu
YXRlZCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3Qo
KS0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250
YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JM
aW5lQm94ZXMpOyB9Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IGxpbmVIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBpc0hvcml6
b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJp
b3JMaW5lQm94ZXMpOyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IGxpbmVIZWlnaHQoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIGFkZEhp
Z2hsaWdodE92ZXJmbG93KCk7CkBAIC0xMTIsOCArMTEyLDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwogCi0gICAg
Ym9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENo
aWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbjsgfQotICAgIHZvaWQgc2V0SGFzU2VsZWN0
ZWRDaGlsZHJlbihib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4pIHsgbV9oYXNTZWxlY3RlZENoaWxk
cmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbiA9IGhhc1NlbGVjdGVkQ2hpbGRyZW47IH0KKyAg
ICB1c2luZyBJbmxpbmVCb3g6Omhhc1NlbGVjdGVkQ2hpbGRyZW47CisgICAgdXNpbmcgSW5saW5l
Qm94OjpzZXRIYXNTZWxlY3RlZENoaWxkcmVuOwogCiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCk7CiAgICAgSW5saW5lQm94KiBmaXJzdFNl
bGVjdGVkQm94KCk7CkBAIC0xODEsOCArMTgxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogYm94TmFtZSgpIGNvbnN0OwogI2VuZGlmCiBwcml2YXRlOgotICAgIHZvaWQgc2V0
SGFzRWxsaXBzaXNCb3goYm9vbCBoYXNFbGxpcHNpc0JveCkgeyBtX2hhc0VsbGlwc2lzQm94T3JI
eXBoZW4gPSBoYXNFbGxpcHNpc0JveDsgfQotICAgIAorCiAgICAgTGF5b3V0VW5pdCBsaW5lU25h
cEFkanVzdG1lbnQoTGF5b3V0VW5pdCBkZWx0YSA9IDApIGNvbnN0OwogCiAgICAgaW50IGJlZm9y
ZUFubm90YXRpb25zQWRqdXN0bWVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxMTI0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjcsNyArNDI3LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94
Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgMCAvKiBwYWRkaW5nLCBvbmx5IHJl
bGV2YW50IGZvciBqdXN0aWZpZWQgdGV4dCwgbm90IHJlbGV2YW50IGZvciBTVkcgKi8KICAgICAg
ICAgICAgICAgICAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24KICAgICAgICAgICAg
ICAgICAsIGRpcmVjdGlvbigpCi0gICAgICAgICAgICAgICAgLCBtX2Rpck92ZXJyaWRlIHx8IHN0
eWxlLT5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUg
Ki8pOworICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRsT3JkZXJp
bmcoKSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAogICAgIGlm
ICh0ZXh0UnVuTmVlZHNSZW5kZXJpbmdDb250ZXh0KHN0eWxlLT5mb250KCkpKQogICAgICAgICBy
dW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KHRleHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTEyNDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQzLDkgKzQ0Myw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNWR0lubGluZVRleHRC
b3gKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdHMgPDwgIiB3aWR0aCAiIDw8IGZyYWdtZW50
LndpZHRoOwogCi0gICAgICAgIGlmICghdGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
IHx8IHRleHRCb3gtPm1fZGlyT3ZlcnJpZGUpIHsKKyAgICAgICAgaWYgKCF0ZXh0Qm94LT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgfHwgdGV4dEJveC0+ZGlyT3ZlcnJpZGUoKSkgewogICAgICAg
ICAgICAgdHMgPDwgKHRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/ICIgTFRSIiA6
ICIgUlRMIik7Ci0gICAgICAgICAgICBpZiAodGV4dEJveC0+bV9kaXJPdmVycmlkZSkKKyAgICAg
ICAgICAgIGlmICh0ZXh0Qm94LT5kaXJPdmVycmlkZSgpKQogICAgICAgICAgICAgICAgIHRzIDw8
ICIgb3ZlcnJpZGUiOwogICAgICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>