<?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>69882</bug_id>
          
          <creation_ts>2011-10-11 16:53:41 -0700</creation_ts>
          <short_desc>Move selectionStartStyle and selectionHasStyle to EditingStyle</short_desc>
          <delta_ts>2011-10-14 10:59:33 -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>HTML Editing</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>54932</blocked>
    
    <blocked>70114</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>leviw</cc>
    
    <cc>morrita</cc>
    
    <cc>sullivan</cc>
    
    <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>482042</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-11 16:53:41 -0700</bug_when>
    <thetext>Some functions in EditingStyle are exposed globally because of selectionStartStyle and selectionHasStyle. We should move these functions to EditingStyle to better encapsulate style-related editing functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482569</commentid>
    <comment_count>1</comment_count>
      <attachid>110713</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-12 11:41:38 -0700</bug_when>
    <thetext>Created attachment 110713
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482571</commentid>
    <comment_count>2</comment_count>
      <attachid>110714</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-12 11:42:30 -0700</bug_when>
    <thetext>Created attachment 110714
Fixed changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483276</commentid>
    <comment_count>3</comment_count>
      <attachid>110714</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-10-13 10:22:25 -0700</bug_when>
    <thetext>Comment on attachment 110714
Fixed changelog

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

&gt; Source/WebCore/editing/Editor.cpp:557
&gt; +#endif

I thought you wanted to move this to EditorMac. Why did you change your mind?

&gt; Source/WebCore/editing/Editor.cpp:2833
&gt; +#endif

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483293</commentid>
    <comment_count>4</comment_count>
      <attachid>110714</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-13 10:42:57 -0700</bug_when>
    <thetext>Comment on attachment 110714
Fixed changelog

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

&gt;&gt; Source/WebCore/editing/Editor.cpp:557
&gt;&gt; +#endif
&gt; 
&gt; I thought you wanted to move this to EditorMac. Why did you change your mind?

That&apos;ll be done in a follow up patch :) These functions are exported to WebKit layer and updating symbols and all is a bit troublesome since this patch is already pretty big.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484027</commentid>
    <comment_count>5</comment_count>
      <attachid>110714</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-10-14 09:51:48 -0700</bug_when>
    <thetext>Comment on attachment 110714
Fixed changelog

Thanks for the explanation. Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484032</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 09:55:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 110714 [details])
&gt; Thanks for the explanation. Looks good to me.

Great! Filed the bug 70114 to move the said functions to EditorMac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484069</commentid>
    <comment_count>7</comment_count>
      <attachid>110714</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 10:59:30 -0700</bug_when>
    <thetext>Comment on attachment 110714
Fixed changelog

Clearing flags on attachment: 110714

Committed r97480: &lt;http://trac.webkit.org/changeset/97480&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484070</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 10:59:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110713</attachid>
            <date>2011-10-12 11:41:38 -0700</date>
            <delta_ts>2011-10-12 11:42:27 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-69882-20111012114137.patch</filename>
            <type>text/plain</type>
            <size>25551</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3Mjc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMTAtMTIgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb25TdGFydFN0
eWxlIGFuZCBzZWxlY3Rpb25IYXNTdHlsZSB0byBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODgyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgc2VsZWN0aW9uSGFzU3R5bGUg
YW5kIHNlbGVjdGlvblN0YXJ0U3R5bGUgZnJvbSBFZGl0b3IgdG8gRWRpdGluZ1N0eWxlLgorICAg
ICAgICBBbHNvIG1vdmVkIG11Y2ggb2YgY29kZSBpbiBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NT
UHJvcGVydHlWYWx1ZSB0byBtZXRob2Qgb2YgRWRpdGluZ1N0eWxlLgorCisgICAgICAgIEluIGFk
ZGl0aW9uLCBtb3ZlZCBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24gdG8gaHRtbGVkaXRpbmcg
d2hlcmUgaXQgYmVsb25ncworICAgICAgICBhbmQgcmVuYW1lZCBpdCB0byBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbi4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgICogZG9tL1JhbmdlLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUpOiBF
eHRyYWN0ZWQgZnJvbSBzZWxlY3Rpb25IYXNTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6bGVnYWN5Rm9udFNpemUpOiBFeHRyYWN0ZWQgZnJvbSBzZWxlY3Rpb25TdGFydENT
U1Byb3BlcnR5VmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnN0eWxlQXRT
ZWxlY3Rpb25TdGFydCk6IE1vdmVkIGZyb20gRWRpdG9yOjpzZWxlY3Rpb25TdGFydFN0eWxlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QpOgorICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRTZWxlY3Rpb25T
dGFydEZvclN0eWxlQ29tcHV0YXRpb24pOiBNb3ZlZCBmcm9tIFJhbmdlOjplZGl0aW5nU3RhcnRQ
b3NpdGlvbi4KKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisKKzIwMTEtMTAtMTIg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rp
b25TdGFydFN0eWxlIGFuZCBzZWxlY3Rpb25IYXNTdHlsZSB0byBFZGl0aW5nU3R5bGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODgyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAqIGRvbS9SYW5nZS5o
OgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6bGVnYWN5Rm9udFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxl
OjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxl
Lmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhh
c1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9w
ZXJ0eVZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlVG9nZ2xlU3R5
bGVJbkxpc3QpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKwogMjAxMS0xMC0wNiAgUm9iZXJ0IEhvZ2Fu
ICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ1NTIDIuMSBmYWlsdXJlOiBib3JkZXIt
Y29uZmxpY3Qtc3R5bGUtMDc5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDk3Mjc1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1
MSwzMSArMTY1MSw2IEBAIE5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBjb25zdAogICAgIHJldHVy
biBtX3N0YXJ0LmNvbnRhaW5lcigpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CiB9CiAKLVBvc2l0
aW9uIFJhbmdlOjplZGl0aW5nU3RhcnRQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBm
dW5jdGlvbiBpcyB1c2VkIGJ5IHJhbmdlIHN0eWxlIGNvbXB1dGF0aW9ucyB0byBhdm9pZCBidWdz
IGxpa2U6Ci0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQwMTc2NDE+IFJFR1JFU1NJT04gKE1haWwp
OiB5b3UgY2FuIG9ubHkgYm9sZC91bmJvbGQgYSBzZWxlY3Rpb24gc3RhcnRpbmcgZnJvbSBlbmQg
b2YgbGluZSBvbmNlCi0gICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHNraXAgY2VydGFpbiBpcnJl
bGV2YW50IGNvbnRlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIHNvIHdlIGRvIG5v
dCB3aW5kIHVwIAotICAgIC8vIHdpdGggYSBzcHVyaW91cyAibWl4ZWQiIHN0eWxlLgotICAgIAot
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBQb3NpdGlvbihtX3N0YXJ0LmNv
bnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKTsKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKLQotICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gaXMgYSBjYXJldCwganVz
dCByZXR1cm4gdGhlIHBvc2l0aW9uLCBzaW5jZSB0aGUgc3R5bGUKLSAgICAvLyBiZWhpbmQgdXMg
aXMgcmVsZXZhbnQKLSAgICBpZiAoY29sbGFwc2VkKCkpCi0gICAgICAgIHJldHVybiB2aXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLQotICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gc3Rh
cnRzIGp1c3QgYmVmb3JlIGEgcGFyYWdyYXBoIGJyZWFrLCBza2lwIG92ZXIgaXQKLSAgICBpZiAo
aXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zaXRpb24pKQotICAgICAgICByZXR1cm4gdmlzaWJs
ZVBvc2l0aW9uLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKLQotICAgIC8v
IG90aGVyd2lzZSwgbWFrZSBzdXJlIHRvIGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2Vs
ZWN0ZWQgbm9kZSwKLSAgICAvLyBpbnN0ZWFkIG9mIHBvc3NpYmx5IGF0IHRoZSBlbmQgb2YgdGhl
IGxhc3Qgbm9kZSBiZWZvcmUgdGhlIHNlbGVjdGlvbgotICAgIHJldHVybiB2aXNpYmxlUG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7Ci19Ci0KIE5vZGUqIFJhbmdlOjpzaGFk
b3dUcmVlUm9vdE5vZGUoKSBjb25zdAogewogICAgIHJldHVybiBzdGFydENvbnRhaW5lcigpID8g
c3RhcnRDb250YWluZXIoKS0+c2hhZG93VHJlZVJvb3ROb2RlKCkgOiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmgJKHJldmlzaW9uIDk3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMSw4ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogZmlyc3RO
b2RlKCkgY29uc3Q7CiAgICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7CiAKLSAgICBQb3Np
dGlvbiBlZGl0aW5nU3RhcnRQb3NpdGlvbigpIGNvbnN0OwotCiAgICAgTm9kZSogc2hhZG93VHJl
ZVJvb3ROb2RlKCkgY29uc3Q7CiAKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiA5NzI3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5
bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAidmlzaWJs
ZV91bml0cy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTEwMiw2ICsxMDMsMTAgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYQogfQogCiBzdGF0aWMgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBn
ZXRQcm9wZXJ0aWVzTm90SW4oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVXaXRoUmVkdW5kYW50
UHJvcGVydGllcywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogYmFzZVN0eWxlKTsKK2VudW0gTGVnYWN5
Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUsIFVzZUxlZ2FjeUZvbnRTaXpl
T25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9Oworc3RhdGljIGludCBsZWdhY3lGb250U2l6ZUZyb21D
U1NWYWx1ZShEb2N1bWVudCosIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBzaG91bGRVc2VGaXhl
ZEZvbnREZWZhdWx0U2l6ZSwgTGVnYWN5Rm9udFNpemVNb2RlKTsKK3N0YXRpYyBib29sIGhhc1Ry
YW5zcGFyZW50QmFja2dyb3VuZENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKK3N0YXRpYyBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChOb2RlKik7CiAKIGNs
YXNzIEhUTUxFbGVtZW50RXF1aXZhbGVudCB7CiBwdWJsaWM6CkBAIC01ODUsOSArNTkwLDE1IEBA
IHN0YXRpYyBjb25zdCBpbnQgdGV4dE9ubHlQcm9wZXJ0aWVzW10gPSAKICAgICBDU1NQcm9wZXJ0
eUNvbG9yLAogfTsKIAorVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoRWRp
dGluZ1N0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bV9t
dXRhYmxlU3R5bGUpCisgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOworICAgIHJldHVybiB0
cmlTdGF0ZU9mU3R5bGUoc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpLCBEb05vdElnbm9yZVRl
eHRPbmx5UHJvcGVydGllcyk7Cit9CisKIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVP
ZlN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVU
ZXh0T25seVByb3BlcnRpZXMgc2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiB0YWtlIGNhcmUgb2YgYmFja2dyb3VuZC1jb2xvciBpbiBlZmZlY3QK
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRpZmZlcmVuY2UgPSBnZXRQ
cm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlVG9Db21wYXJlKTsKIAog
ICAgIGlmIChzaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgPT0gSWdub3JlVGV4dE9ubHlQ
cm9wZXJ0aWVzKQpAQCAtNjAxLDYgKzYxMiwzMyBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRy
aVN0YXRlT2ZTdHlsZShDCiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKK1RyaVN0YXRl
IEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKQor
ICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKKworICAgIGlmIChzZWxlY3Rpb24uaXNDYXJl
dCgpKQorICAgICAgICByZXR1cm4gdHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZTo6c3R5bGVB
dFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvbikuZ2V0KCkpOworCisgICAgVHJpU3RhdGUgc3RhdGUg
PSBGYWxzZVRyaVN0YXRlOworICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKKyAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxl
ID0gY29tcHV0ZWRTdHlsZShub2RlKTsKKyAgICAgICAgaWYgKG5vZGVTdHlsZSkgeworICAgICAg
ICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKG5vZGVTdHlsZS5nZXQo
KSwgbm9kZS0+aXNUZXh0Tm9kZSgpID8gRWRpdGluZ1N0eWxlOjpEb05vdElnbm9yZVRleHRPbmx5
UHJvcGVydGllcyA6IEVkaXRpbmdTdHlsZTo6SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgIGlmIChub2RlID09IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkp
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBub2RlU3RhdGU7CisgICAgICAgICAgICBlbHNlIGlm
IChzdGF0ZSAhPSBub2RlU3RhdGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAg
ICAgICAgc3RhdGUgPSBNaXhlZFRyaVN0YXRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChub2RlID09IHNlbGVjdGlvbi5lbmQo
KS5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0
dXJuIHN0YXRlOworfQorCiBib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0aElubGluZVN0
eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogZXh0cmFj
dGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBj
b25zdAogewogICAgIEFTU0VSVChlbGVtZW50KTsKQEAgLTEwNjksNyArMTEwNyw1MCBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6Zm9yY2VJbmxpbmUoKQogICAgIGNvbnN0IGJvb2wgcHJvcGVydHlJc0lt
cG9ydGFudCA9IHRydWU7CiAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5RGlzcGxheSwgQ1NTVmFsdWVJbmxpbmUsIHByb3BlcnR5SXNJbXBvcnRhbnQpOwogfQotICAg
IAorCitpbnQgRWRpdGluZ1N0eWxlOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQp
IGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IG1fbXV0YWJsZVN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpOworICAgIGlmICghY3Nz
VmFsdWUgfHwgIWNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwgc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihjc3NWYWx1ZS5nZXQoKSksCisgICAgICAgIG1fc2hv
dWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUsIEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplKTsKK30K
KworUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlv
blN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBzaG91bGRVc2VC
YWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCkKK3sKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24oc2VsZWN0aW9uKTsKKworICAgIC8vIElmIHRo
ZSBwb3MgaXMgYXQgdGhlIGVuZCBvZiBhIHRleHQgbm9kZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90
IGZ1bGx5IHNlbGVjdGVkLiAKKyAgICAvLyBNb3ZlIGl0IHRvIHRoZSBuZXh0IGRlZXAgZXF1aXZh
bGVudCBwb3NpdGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUu
IAorICAgIC8vIGUuZy4gaWYgcG9zIHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5o
ZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGlu
c3RlYWQuIAorICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgcmFuZ2UgYmVjYXVzZSBjYXJldCBh
dCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzwvYj53b3JsZCBzaG91bGQgZ2l2ZSB5
b3UgZm9udC13ZWlnaHQ6IGJvbGQuIAorICAgIE5vZGUqIHBvc2l0aW9uTm9kZSA9IHBvc2l0aW9u
LmNvbnRhaW5lck5vZGUoKTsgCisgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgcG9zaXRp
b25Ob2RlICYmIHBvc2l0aW9uTm9kZS0+aXNUZXh0Tm9kZSgpICYmIHBvc2l0aW9uLmNvbXB1dGVP
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwb3NpdGlvbk5vZGUtPm1heENoYXJhY3Rlck9mZnNl
dCgpKSAKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShw
b3NpdGlvbik7IAorCisgICAgRWxlbWVudCogZWxlbWVudCA9IHBvc2l0aW9uLmVsZW1lbnQoKTsK
KyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LCBFZGl0aW5nU3R5
bGU6OkFsbFByb3BlcnRpZXMpOworICAgIHN0eWxlLT5tZXJnZVR5cGluZ1N0eWxlKGVsZW1lbnQt
PmRvY3VtZW50KCkpOworCisgICAgLy8gSWYgYmFja2dyb3VuZCBjb2xvciBpcyB0cmFuc3BhcmVu
dCwgdHJhdmVyc2UgcGFyZW50IG5vZGVzIHVudGlsIHdlIGhpdCBhIGRpZmZlcmVudCB2YWx1ZSBv
ciBkb2N1bWVudCByb290CisgICAgLy8gQWxzbywgaWYgdGhlIHNlbGVjdGlvbiBpcyBhIHJhbmdl
LCBpZ25vcmUgdGhlIGJhY2tncm91bmQgY29sb3IgYXQgdGhlIHN0YXJ0IG9mIHNlbGVjdGlvbiwK
KyAgICAvLyBhbmQgZmluZCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY29tbW9uIGFuY2Vz
dG9yLgorICAgIGlmIChzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCAmJiAoc2VsZWN0
aW9uLmlzUmFuZ2UoKSB8fCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihzdHlsZS0+bV9t
dXRhYmxlU3R5bGUuZ2V0KCkpKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlKHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgIGlmIChQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGJhY2tncm91bmRDb2xv
ckluRWZmZWN0KHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYykpKQorICAgICAgICAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2YWx1ZS0+
Y3NzVGV4dCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CiAKIHN0YXRpYyB2b2lk
IHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiB7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5oCShyZXZpc2lvbiA5NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgY2xhc3MgUG9zaXRpb247CiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHlsZWRFbGVt
ZW50OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAogZW51bSBUcmlTdGF0ZSB7IEZhbHNlVHJp
U3RhdGUsIFRydWVUcmlTdGF0ZSwgTWl4ZWRUcmlTdGF0ZSB9OwogCkBAIC0xMDcsNyArMTA4LDgg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoKTsKICAgICB2
b2lkIGNvbGxhcHNlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKCk7CiAgICAgZW51bSBTaG91bGRJ
Z25vcmVUZXh0T25seVByb3BlcnRpZXMgeyBJZ25vcmVUZXh0T25seVByb3BlcnRpZXMsIERvTm90
SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIH07Ci0gICAgVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgPSBE
b05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CisgICAgVHJpU3RhdGUgdHJpU3Rh
dGVPZlN0eWxlKEVkaXRpbmdTdHlsZSopIGNvbnN0OworICAgIFRyaVN0YXRlIHRyaVN0YXRlT2ZT
dHlsZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNX
aXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyBy
ZXR1cm4gY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQsIDAsIDApOyB9
CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVu
dCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3Bl
cnR5SUQ+JiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0CiAgICAgewpAQCAtMTMxLDExICsx
MzMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0
KFN0eWxlZEVsZW1lbnQqLCBOb2RlKiBjb250ZXh0KTsKICAgICB2b2lkIHJlbW92ZVByb3BlcnRp
ZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoRWxlbWVudCopOwogICAgIHZvaWQgZm9yY2VJbmxpbmUo
KTsKKyAgICBpbnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqKSBjb25zdDsKIAogICAgIGZsb2F0
IGZvbnRTaXplRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplRGVsdGE7IH0KICAgICBi
b29sIGhhc0ZvbnRTaXplRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplRGVsdGEgIT0g
Tm9Gb250RGVsdGE7IH0KICAgICBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsgfQogCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZl
Y3QgPSBmYWxzZSk7CiBwcml2YXRlOgogICAgIEVkaXRpbmdTdHlsZSgpOwogICAgIEVkaXRpbmdT
dHlsZShOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7CkBAIC0xNDcsNiArMTUxLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIHJlcGxhY2VGb250U2l6
ZUJ5S2V5d29yZElmUG9zc2libGUoUmVuZGVyU3R5bGUqLCBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24qKTsKICAgICB2b2lkIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7CisgICAgVHJpU3RhdGUg
dHJpU3RhdGVPZlN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlVG9Db21wYXJlLCBTaG91
bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0OwogICAgIGJvb2wgY29uZmxpY3RzV2l0
aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqIGV4dHJh
Y3RlZFN0eWxlLCBWZWN0b3I8Q1NTUHJvcGVydHlJRD4qIGNvbmZsaWN0aW5nUHJvcGVydGllcykg
Y29uc3Q7CiAgICAgdm9pZCBtZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5
bGVkRWxlbWVudCosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRl
KTsKICAgICB2b2lkIG1lcmdlU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBDU1NQ
cm9wZXJ0eU92ZXJyaWRlTW9kZSk7CkBAIC0yMTIsMTAgKzIxNyw2IEBAIHByaXZhdGU6CiAKIC8v
IEZJWE1FOiBSZW1vdmUgdGhlc2UgZnVuY3Rpb25zIG9yIG1ha2UgdGhlbSBub24tZ2xvYmFsIHRv
IGRpc2NvdXJhZ2UgdXNpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbiBkaXJlY3RseS4KIGludCBnZXRJ
ZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wZXJ0eUlEKTsKLWVu
dW0gTGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUsIFVzZUxlZ2Fj
eUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9OwotaW50IGxlZ2FjeUZvbnRTaXplRnJv
bUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIHNob3VsZFVzZUZp
eGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwotYm9vbCBoYXNUcmFuc3Bh
cmVudEJhY2tncm91bmRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci1QYXNzUmVmUHRyPENT
U1ZhbHVlPiBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChOb2RlKik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gOTcy
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwOSw5ICs1MDksOSBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KGNvCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKIH0KIAor
I2lmIFBMQVRGT1JNKE1BQykKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKIHsKLSNpZiAhUExBVEZPUk0o
UVQpCiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCiAgICAgaWYgKCFtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CkBAIC01MzIsMTMgKzUzMiwxMSBAQCBjb25zdCBTaW1w
bGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgfQogCiAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnQgPSAwOwotCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUt
PnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9
IHJhbmdlLT5lZGl0aW5nU3RhcnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYg
KHN0YXJ0Tm9kZSkgeworICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlv
blN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkpLmRlcHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgTm9kZSogcGFzdEVuZCA9IHJhbmdlLT5w
YXN0TGFzdE5vZGUoKTsKICAgICAgICAgLy8gSW4gdGhlIGxvb3AgYmVsb3csIG4gc2hvdWxkIGV2
ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29tZSBuaWwsIGJ1dCB3ZSd2ZSBzZWVu
IGF0IGxlYXN0IG9uZQotICAgICAgICAvLyB1bnJlcHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRoaXMg
ZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG5pbCBhbHNvLgorICAgICAgICAvLyB1bnJlcHJv
ZHVjaWJsZSBjYXNlIHdoZXJlIHRoaXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwg
YWxzby4KICAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2RlOyBuICYmIG4gIT0gcGFzdEVu
ZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG4tPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQpA
QCAtNTU1LDEwICs1NTMsOCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9y
U2VsCiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnQ7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2Vu
ZGlmCiB9CisjZW5kaWYKIAogV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHREaXJlY3Rpb25G
b3JTZWxlY3Rpb24oYm9vbCYgaGFzTmVzdGVkT3JNdWx0aXBsZUVtYmVkZGluZ3MpIGNvbnN0CiB7
CkBAIC04NzUsNzIgKzg3MSwyNSBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRv
U2VsZWN0CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKGludCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpOwotICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uU3RhcnRTdHls
ZSgpOwotICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0eWxlLT50cmlTdGF0ZU9mU3R5
bGUoc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpID09IFRydWVUcmlTdGF0ZTsKKyAgICByZXR1cm4g
RWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50cmlTdGF0ZU9mU3R5bGUo
CisgICAgICAgIEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuZ2V0KCkpOwogfQogCiBUcmlTdGF0ZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxl
KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewotICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwg
dmFsdWUpOwotICAgIGlmICghbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ2FyZXRPclJhbmdlKCkp
Ci0gICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotCi0gICAgaWYgKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NhcmV0KCkpIHsKLSAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0
aW9uU3R5bGUgPSBzZWxlY3Rpb25TdGFydFN0eWxlKCk7Ci0gICAgICAgIGlmICghc2VsZWN0aW9u
U3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQotICAgICAgICAgICAgcmV0dXJuIEZh
bHNlVHJpU3RhdGU7Ci0gICAgICAgIHJldHVybiBzdHlsZS0+dHJpU3RhdGVPZlN0eWxlKHNlbGVj
dGlvblN0eWxlLT5zdHlsZSgpKTsKLSAgICB9Ci0KLSAgICBUcmlTdGF0ZSBzdGF0ZSA9IEZhbHNl
VHJpU3RhdGU7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgewotICAgICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBub2Rl
U3R5bGUgPSBjb21wdXRlZFN0eWxlKG5vZGUpOwotICAgICAgICBpZiAobm9kZVN0eWxlKSB7Ci0g
ICAgICAgICAgICBUcmlTdGF0ZSBub2RlU3RhdGUgPSBzdHlsZS0+dHJpU3RhdGVPZlN0eWxlKG5v
ZGVTdHlsZS5nZXQoKSwgbm9kZS0+aXNUZXh0Tm9kZSgpID8gRWRpdGluZ1N0eWxlOjpEb05vdEln
bm9yZVRleHRPbmx5UHJvcGVydGllcyA6IEVkaXRpbmdTdHlsZTo6SWdub3JlVGV4dE9ubHlQcm9w
ZXJ0aWVzKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
dGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUgPSBub2RlU3Rh
dGU7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSAhPSBub2RlU3RhdGUgJiYgbm9kZS0+aXNU
ZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBNaXhlZFRyaVN0YXRlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChub2RlID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRlOworICAgIHJldHVy
biBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCB2YWx1ZSktPnRyaVN0YXRlT2ZTdHls
ZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwogfQogCiBTdHJpbmcgRWRpdG9y
OjpzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpCiB7Ci0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25TdGFydFN0eWxl
KCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5
bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCksCisgICAgICAgIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwog
ICAgIGlmICghc2VsZWN0aW9uU3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgdmFsdWUgPSBzZWxlY3Rpb25TdHls
ZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKLQotICAgIC8vIElmIGJh
Y2tncm91bmQgY29sb3IgaXMgdHJhbnNwYXJlbnQsIHRyYXZlcnNlIHBhcmVudCBub2RlcyB1bnRp
bCB3ZSBoaXQgYSBkaWZmZXJlbnQgdmFsdWUgb3IgZG9jdW1lbnQgcm9vdAotICAgIC8vIEFsc28s
IGlmIHRoZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwgaWdub3JlIHRoZSBiYWNrZ3JvdW5kIGNvbG9y
IGF0IHRoZSBzdGFydCBvZiBzZWxlY3Rpb24sCi0gICAgLy8gYW5kIGZpbmQgdGhlIGJhY2tncm91
bmQgY29sb3Igb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KLSAgICBpZiAocHJvcGVydHlJRCA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciAmJiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFu
Z2UoKSB8fCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihzZWxlY3Rpb25TdHlsZS0+c3R5
bGUoKSkpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICAgICAgaWYgKFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gYmFja2dyb3VuZENvbG9y
SW5FZmZlY3QocmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWUtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eUZvbnRTaXplKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRTaXplKTsKLSAgICAgICAgaWYgKGNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nOjpudW1iZXIobGVnYWN5Rm9udFNpemVGcm9t
Q1NTVmFsdWUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihjc3NWYWx1ZS5nZXQoKSksCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uU3R5bGUtPnNo
b3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKCksIEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHByb3BlcnR5
SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVy
KHNlbGVjdGlvblN0eWxlLT5sZWdhY3lGb250U2l6ZShtX2ZyYW1lLT5kb2N1bWVudCgpKSk7Cisg
ICAgcmV0dXJuIHNlbGVjdGlvblN0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5SUQpOwogfQogCiB2b2lkIEVkaXRvcjo6aW5kZW50KCkKQEAgLTI3ODEsMzEgKzI3MzAsNiBA
QCB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTCiAgICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNldFR5cGluZ1N0eWxlKHR5cGluZ1N0eWxlKTsKIH0KIAotUGFzc1JlZlB0
cjxFZGl0aW5nU3R5bGU+IEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlKG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKLSAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IHJhbmdlLT5lZGl0aW5nU3Rh
cnRQb3NpdGlvbigpOwotCi0gICAgLy8gSWYgdGhlIHBvcyBpcyBhdCB0aGUgZW5kIG9mIGEgdGV4
dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBpcyBub3QgZnVsbHkgc2VsZWN0ZWQuIAotICAgIC8vIE1v
dmUgaXQgdG8gdGhlIG5leHQgZGVlcCBlcXVpdmFsZW50IHBvc2l0aW9uIHRvIGF2b2lkIHJlbW92
aW5nIHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9kZS4gCi0gICAgLy8gZS5nLiBpZiBwb3Mgd2FzIGF0
IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGluIDxiPmhlbGxvPGRpdj53b3JsZDwvZGl2PjwvYj4sIHdl
IHdhbnQgUG9zaXRpb24oIndvcmxkIiwgMCkgaW5zdGVhZC4gCi0gICAgLy8gV2Ugb25seSBkbyB0
aGlzIGZvciByYW5nZSBiZWNhdXNlIGNhcmV0IGF0IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGluIDxi
PmhlbGxvPC9iPndvcmxkIHNob3VsZCBnaXZlIHlvdSBmb250LXdlaWdodDogYm9sZC4gCi0gICAg
Tm9kZSogcG9zaXRpb25Ob2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOyAKLSAgICBpZiAo
bV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiBwb3NpdGlvbk5vZGUgJiYgcG9zaXRp
b25Ob2RlLT5pc1RleHROb2RlKCkgJiYgcG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpID09IHBvc2l0aW9uTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIAotICAgICAgICBw
b3NpdGlvbiA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHBvc2l0aW9uKTsgCi0KLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gcG9zaXRpb24uZWxlbWVudCgpOwotICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9
IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQsIEVkaXRpbmdTdHlsZTo6QWxsUHJvcGVydGll
cyk7Ci0gICAgc3R5bGUtPm1lcmdlVHlwaW5nU3R5bGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIHN0eWxlOwotfQotCiB2b2lkIEVkaXRvcjo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0
aW5nKEVsZW1lbnQqIGUpCiB7CiAgICAgaWYgKGNsaWVudCgpKQpAQCAtMjg3Miw2ICsyNzk2LDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KAogICAgIEFTU0VSVCgh
ZWMpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQogUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVG
b3JTZWxlY3Rpb25TdGFydChOb2RlICombm9kZVRvUmVtb3ZlKSBjb25zdAogewogICAgIG5vZGVU
b1JlbW92ZSA9IDA7CkBAIC0yOTA1LDYgKzI4MzAsNyBAQCBSZW5kZXJTdHlsZSogRWRpdG9yOjpz
dHlsZUZvclNlbGVjdGlvblN0CiAgICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LmdldCgp
OwogICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyBzdHlsZUVsZW1lbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCkgOiAwOwogfQorI2VuZGlmCiAKIC8vIFNlYXJjaGVzIGZyb20gdGhl
IGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQgaWYgbm90aGluZyBpcyBzZWxlY3RlZC4KIGJvb2wg
RWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJv
b2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gOTcyNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDkgQEAgcHVi
bGljOgogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShpbnQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7CiAgICAgVHJpU3RhdGUgc2VsZWN0aW9uSGFzU3R5bGUo
aW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0OwogICAgIFN0cmluZyBz
ZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpOworI2lmIFBMQVRG
T1JNKE1BQykKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udEZvclNlbGVjdGlvbihib29s
JikgY29uc3Q7CisjZW5kaWYKICAgICBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb25Gb3JT
ZWxlY3Rpb24oYm9vbCYpIGNvbnN0OwogICAgIAogICAgIFRyaVN0YXRlIHNlbGVjdGlvblVub3Jk
ZXJlZExpc3RTdGF0ZSgpIGNvbnN0OwpAQCAtMzQ4LDE2ICszNTAsMTQgQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlvbnMpOwogICAg
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotCisjaWYgUExBVEZPUk0oTUFDKQogICAgIFJl
bmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KE5vZGUqJiBub2RlVG9SZW1vdmUpIGNv
bnN0OwotCisjZW5kaWYKICAgICB1bnNpZ25lZCBjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0
cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcyk7CiAg
ICAgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcyk7CiAgICAgYm9vbCBt
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOwogCi0gICAgUGFzc1JlZlB0cjxFZGl0
aW5nU3R5bGU+IHNlbGVjdGlvblN0YXJ0U3R5bGUoKSBjb25zdDsKLQogICAgIHZvaWQgdGV4dEZp
ZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKTsKICAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVk
aXRpbmcoRWxlbWVudCopOwogICAgIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1l
bnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2
aXNpb24gOTcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUFw
cGx5U3R5bGUoRnJhbWUqIGZyYQogc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0
KEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0
aW9uLCBpbnQgcHJvcGVydHlJRCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gZnJh
bWUtPmVkaXRvcigpLT5zZWxlY3Rpb25TdGFydFN0eWxlKCk7CisgICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFy
dChmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICBpZiAoIXNlbGVjdGlvblN0
eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gOTcy
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE5NSw0ICsxMTk1LDI5IEBAIFZpc2libGVTZWxlY3Rpb24gYXZvaWRJbnRlcnNl
Y3Rpb25XaXRoTm8KICAgICByZXR1cm4gdXBkYXRlZFNlbGVjdGlvbjsKIH0KIAorUG9zaXRpb24g
YWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBy
YW5nZSBzdHlsZSBjb21wdXRhdGlvbnMgdG8gYXZvaWQgYnVncyBsaWtlOgorICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS80MDE3NjQxPiBSRUdSRVNTSU9OIChNYWlsKTogeW91IGNhbiBvbmx5IGJvbGQv
dW5ib2xkIGEgc2VsZWN0aW9uIHN0YXJ0aW5nIGZyb20gZW5kIG9mIGxpbmUgb25jZQorICAgIC8v
IEl0IGlzIGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4gaXJyZWxldmFudCBjb250ZW50IGF0IHRo
ZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBkbyBub3Qgd2luZCB1cCAKKyAgICAvLyB3
aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KKworICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb24gPSBzZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9u
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKKworICAgIC8vIGlmIHRoZSBz
ZWxlY3Rpb24gaXMgYSBjYXJldCwganVzdCByZXR1cm4gdGhlIHBvc2l0aW9uLCBzaW5jZSB0aGUg
c3R5bGUKKyAgICAvLyBiZWhpbmQgdXMgaXMgcmVsZXZhbnQKKyAgICBpZiAoc2VsZWN0aW9uLmlz
Q2FyZXQoKSkKKyAgICAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
OworCisgICAgLy8gaWYgdGhlIHNlbGVjdGlvbiBzdGFydHMganVzdCBiZWZvcmUgYSBwYXJhZ3Jh
cGggYnJlYWssIHNraXAgb3ZlciBpdAorICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQ
b3NpdGlvbikpCisgICAgICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24ubmV4dCgpLmRlZXBFcXVp
dmFsZW50KCkuZG93bnN0cmVhbSgpOworCisgICAgLy8gb3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8g
YmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzZWxlY3RlZCBub2RlLAorICAgIC8vIGluc3Rl
YWQgb2YgcG9zc2libHkgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBub2RlIGJlZm9yZSB0aGUgc2Vs
ZWN0aW9uCisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25z
dHJlYW0oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2aXNpb24gOTcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsOCBAQCBi
b29sIGNhbk1lcmdlTGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFCiAvLyBGdW5jdGlvbnMgcmV0
dXJuaW5nIFZpc2libGVTZWxlY3Rpb24KIFZpc2libGVTZWxlY3Rpb24gYXZvaWRJbnRlcnNlY3Rp
b25XaXRoTm9kZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgTm9kZSopOwogVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpOworCitQb3NpdGlvbiBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgCiAKIC8vIE1pc2NlbGxhbmVvdXMgZnVu
Y3Rpb25zIG9uIFRleHQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110714</attachid>
            <date>2011-10-12 11:42:30 -0700</date>
            <delta_ts>2011-10-14 10:59:30 -0700</delta_ts>
            <desc>Fixed changelog</desc>
            <filename>bug-69882-20111012114229.patch</filename>
            <type>text/plain</type>
            <size>24538</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3Mjc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTAtMTIgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb25TdGFydFN0
eWxlIGFuZCBzZWxlY3Rpb25IYXNTdHlsZSB0byBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODgyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgc2VsZWN0aW9uSGFzU3R5bGUg
YW5kIHNlbGVjdGlvblN0YXJ0U3R5bGUgZnJvbSBFZGl0b3IgdG8gRWRpdGluZ1N0eWxlLgorICAg
ICAgICBBbHNvIG1vdmVkIG11Y2ggb2YgY29kZSBpbiBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NT
UHJvcGVydHlWYWx1ZSB0byBtZXRob2Qgb2YgRWRpdGluZ1N0eWxlLgorCisgICAgICAgIEluIGFk
ZGl0aW9uLCBtb3ZlZCBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24gdG8gaHRtbGVkaXRpbmcg
d2hlcmUgaXQgYmVsb25ncworICAgICAgICBhbmQgcmVuYW1lZCBpdCB0byBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbi4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgICogZG9tL1JhbmdlLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUpOiBF
eHRyYWN0ZWQgZnJvbSBzZWxlY3Rpb25IYXNTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6bGVnYWN5Rm9udFNpemUpOiBFeHRyYWN0ZWQgZnJvbSBzZWxlY3Rpb25TdGFydENT
U1Byb3BlcnR5VmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnN0eWxlQXRT
ZWxlY3Rpb25TdGFydCk6IE1vdmVkIGZyb20gRWRpdG9yOjpzZWxlY3Rpb25TdGFydFN0eWxlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QpOgorICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRTZWxlY3Rpb25T
dGFydEZvclN0eWxlQ29tcHV0YXRpb24pOiBNb3ZlZCBmcm9tIFJhbmdlOjplZGl0aW5nU3RhcnRQ
b3NpdGlvbi4KKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisKIDIwMTEtMTAtMDYg
IFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIENTUyAyLjEgZmFp
bHVyZTogYm9yZGVyLWNvbmZsaWN0LXN0eWxlLTA3OQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShy
ZXZpc2lvbiA5NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NTEsMzEgKzE2NTEsNiBAQCBOb2RlKiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29u
c3QKICAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXIoKS0+dHJhdmVyc2VOZXh0U2libGluZygp
OwogfQogCi1Qb3NpdGlvbiBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKSBjb25zdAotewot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSByYW5nZSBzdHlsZSBjb21wdXRhdGlvbnMg
dG8gYXZvaWQgYnVncyBsaWtlOgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80MDE3NjQxPiBSRUdS
RVNTSU9OIChNYWlsKTogeW91IGNhbiBvbmx5IGJvbGQvdW5ib2xkIGEgc2VsZWN0aW9uIHN0YXJ0
aW5nIGZyb20gZW5kIG9mIGxpbmUgb25jZQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBza2lw
IGNlcnRhaW4gaXJyZWxldmFudCBjb250ZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9u
LCBzbyB3ZSBkbyBub3Qgd2luZCB1cCAKLSAgICAvLyB3aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBz
dHlsZS4KLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gUG9zaXRp
b24obV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcik7Ci0gICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7Ci0KLSAgICAvLyBpZiB0aGUgc2VsZWN0aW9uIGlz
IGEgY2FyZXQsIGp1c3QgcmV0dXJuIHRoZSBwb3NpdGlvbiwgc2luY2UgdGhlIHN0eWxlCi0gICAg
Ly8gYmVoaW5kIHVzIGlzIHJlbGV2YW50Ci0gICAgaWYgKGNvbGxhcHNlZCgpKQotICAgICAgICBy
ZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0KLSAgICAvLyBpZiB0aGUg
c2VsZWN0aW9uIHN0YXJ0cyBqdXN0IGJlZm9yZSBhIHBhcmFncmFwaCBicmVhaywgc2tpcCBvdmVy
IGl0Ci0gICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvc2l0aW9uKSkKLSAgICAgICAg
cmV0dXJuIHZpc2libGVQb3NpdGlvbi5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFt
KCk7Ci0KLSAgICAvLyBvdGhlcndpc2UsIG1ha2Ugc3VyZSB0byBiZSBhdCB0aGUgc3RhcnQgb2Yg
dGhlIGZpcnN0IHNlbGVjdGVkIG5vZGUsCi0gICAgLy8gaW5zdGVhZCBvZiBwb3NzaWJseSBhdCB0
aGUgZW5kIG9mIHRoZSBsYXN0IG5vZGUgYmVmb3JlIHRoZSBzZWxlY3Rpb24KLSAgICByZXR1cm4g
dmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwotfQotCiBOb2Rl
KiBSYW5nZTo6c2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RhcnRD
b250YWluZXIoKSA/IHN0YXJ0Q29udGFpbmVyKCktPnNoYWRvd1RyZWVSb290Tm9kZSgpIDogMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lvbiA5NzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTExLDYgQEAgcHVibGljOgogICAg
IE5vZGUqIGZpcnN0Tm9kZSgpIGNvbnN0OwogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSgpIGNvbnN0
OwogCi0gICAgUG9zaXRpb24gZWRpdGluZ1N0YXJ0UG9zaXRpb24oKSBjb25zdDsKLQogICAgIE5v
ZGUqIHNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0OwogCiAgICAgSW50UmVjdCBib3VuZGluZ0Jv
eCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNp
b24gOTcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2lu
Y2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xMDIsNiArMTAzLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmEKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
V2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIENTU1N0eWxlRGVjbGFyYXRpb24qIGJhc2VTdHlsZSk7
CitlbnVtIExlZ2FjeUZvbnRTaXplTW9kZSB7IEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplLCBVc2VM
ZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVsVmFsdWVzTWF0Y2ggfTsKK3N0YXRpYyBpbnQgbGVnYWN5
Rm9udFNpemVGcm9tQ1NTVmFsdWUoRG9jdW1lbnQqLCBDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wg
c2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIExlZ2FjeUZvbnRTaXplTW9kZSk7CitzdGF0
aWMgYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9u
Kik7CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gYmFja2dyb3VuZENvbG9ySW5FZmZlY3Qo
Tm9kZSopOwogCiBjbGFzcyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewogcHVibGljOgpAQCAtNTg1
LDkgKzU5MCwxNSBAQCBzdGF0aWMgY29uc3QgaW50IHRleHRPbmx5UHJvcGVydGllc1tdID0gCiAg
ICAgQ1NTUHJvcGVydHlDb2xvciwKIH07CiAKK1RyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3Rh
dGVPZlN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPm1fbXV0YWJsZVN0eWxlKQorICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsK
KyAgICByZXR1cm4gdHJpU3RhdGVPZlN0eWxlKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSwg
RG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOworfQorCiBUcmlTdGF0ZSBFZGl0aW5nU3R5
bGU6OnRyaVN0YXRlT2ZTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVRvQ29tcGFyZSwg
U2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVy
dGllcykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogdGFrZSBjYXJlIG9mIGJhY2tncm91bmQtY29s
b3IgaW4gZWZmZWN0CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkaWZm
ZXJlbmNlID0gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBzdHlsZVRv
Q29tcGFyZSk7CiAKICAgICBpZiAoc2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzID09IEln
bm9yZVRleHRPbmx5UHJvcGVydGllcykKQEAgLTYwMSw2ICs2MTIsMzMgQEAgVHJpU3RhdGUgRWRp
dGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoQwogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwog
fQogCitUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0Cit7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJl
dE9yUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisKKyAgICBpZiAoc2Vs
ZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAgcmV0dXJuIHRyaVN0YXRlT2ZTdHlsZShFZGl0aW5n
U3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb24pLmdldCgpKTsKKworICAgIFRy
aVN0YXRlIHN0YXRlID0gRmFsc2VUcmlTdGF0ZTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzZWxl
Y3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24+IG5vZGVTdHlsZSA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgICAgIGlmIChub2RlU3R5
bGUpIHsKKyAgICAgICAgICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZShu
b2RlU3R5bGUuZ2V0KCksIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJ
Z25vcmVUZXh0T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJv
cGVydGllcyk7CisgICAgICAgICAgICBpZiAobm9kZSA9PSBzZWxlY3Rpb24uc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlID0gbm9kZVN0YXRlOworICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhdGUgIT0gbm9kZVN0YXRlICYmIG5vZGUtPmlzVGV4dE5vZGUoKSkg
eworICAgICAgICAgICAgICAgIHN0YXRlID0gTWl4ZWRUcmlTdGF0ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobm9kZSA9PSBz
ZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBzdGF0ZTsKK30KKwogYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0
c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBFZGl0aW5n
U3R5bGUqIGV4dHJhY3RlZFN0eWxlLCBWZWN0b3I8Q1NTUHJvcGVydHlJRD4qIGNvbmZsaWN0aW5n
UHJvcGVydGllcykgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CkBAIC0xMDY5LDcgKzEx
MDcsNTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OmZvcmNlSW5saW5lKCkKICAgICBjb25zdCBib29s
IHByb3BlcnR5SXNJbXBvcnRhbnQgPSB0cnVlOwogICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlSW5saW5lLCBwcm9wZXJ0eUlzSW1wb3J0
YW50KTsKIH0KLSAgICAKKworaW50IEVkaXRpbmdTdHlsZTo6bGVnYWN5Rm9udFNpemUoRG9jdW1l
bnQqIGRvY3VtZW50KSBjb25zdAoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBt
X211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKTsK
KyAgICBpZiAoIWNzc1ZhbHVlIHx8ICFjc3NWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9j
dW1lbnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3NzVmFsdWUuZ2V0KCkpLAor
ICAgICAgICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplLCBBbHdheXNVc2VMZWdhY3lG
b250U2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0
eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJv
b2wgc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QpCit7CisgICAgaWYgKHNlbGVjdGlv
bi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9
IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKHNlbGVjdGlvbik7CisK
KyAgICAvLyBJZiB0aGUgcG9zIGlzIGF0IHRoZSBlbmQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhp
cyBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3RlZC4gCisgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4
dCBkZWVwIGVxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxlIGZy
b20gdGhpcyBub2RlLiAKKyAgICAvLyBlLmcuIGlmIHBvcyB3YXMgYXQgUG9zaXRpb24oImhlbGxv
IiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9kaXY+PC9iPiwgd2Ugd2FudCBQb3NpdGlvbigi
d29ybGQiLCAwKSBpbnN0ZWFkLiAKKyAgICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIHJhbmdlIGJl
Y2F1c2UgY2FyZXQgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88L2I+d29ybGQg
c2hvdWxkIGdpdmUgeW91IGZvbnQtd2VpZ2h0OiBib2xkLiAKKyAgICBOb2RlKiBwb3NpdGlvbk5v
ZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7IAorICAgIGlmIChzZWxlY3Rpb24uaXNSYW5n
ZSgpICYmIHBvc2l0aW9uTm9kZSAmJiBwb3NpdGlvbk5vZGUtPmlzVGV4dE5vZGUoKSAmJiBwb3Np
dGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gcG9zaXRpb25Ob2RlLT5tYXhD
aGFyYWN0ZXJPZmZzZXQoKSkgCisgICAgICAgIHBvc2l0aW9uID0gbmV4dFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUocG9zaXRpb24pOyAKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBwb3NpdGlv
bi5lbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVu
dCwgRWRpdGluZ1N0eWxlOjpBbGxQcm9wZXJ0aWVzKTsKKyAgICBzdHlsZS0+bWVyZ2VUeXBpbmdT
dHlsZShlbGVtZW50LT5kb2N1bWVudCgpKTsKKworICAgIC8vIElmIGJhY2tncm91bmQgY29sb3Ig
aXMgdHJhbnNwYXJlbnQsIHRyYXZlcnNlIHBhcmVudCBub2RlcyB1bnRpbCB3ZSBoaXQgYSBkaWZm
ZXJlbnQgdmFsdWUgb3IgZG9jdW1lbnQgcm9vdAorICAgIC8vIEFsc28sIGlmIHRoZSBzZWxlY3Rp
b24gaXMgYSByYW5nZSwgaWdub3JlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGF0IHRoZSBzdGFydCBv
ZiBzZWxlY3Rpb24sCisgICAgLy8gYW5kIGZpbmQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhl
IGNvbW1vbiBhbmNlc3Rvci4KKyAgICBpZiAoc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZl
Y3QgJiYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgfHwgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29s
b3Ioc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKSkpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICBpZiAoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBi
YWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChyYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMp
KSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvciwgdmFsdWUtPmNzc1RleHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0eWxlOworfQog
CiBzdGF0aWMgdm9pZCByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogeyAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gOTcyNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGNsYXNz
IFBvc2l0aW9uOwogY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xh
c3MgU3R5bGVkRWxlbWVudDsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIGVudW0gVHJpU3Rh
dGUgeyBGYWxzZVRyaVN0YXRlLCBUcnVlVHJpU3RhdGUsIE1peGVkVHJpU3RhdGUgfTsKIApAQCAt
MTA3LDcgKzEwOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0
aWVzKCk7CiAgICAgdm9pZCBjb2xsYXBzZVRleHREZWNvcmF0aW9uUHJvcGVydGllcygpOwogICAg
IGVudW0gU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHsgSWdub3JlVGV4dE9ubHlQcm9w
ZXJ0aWVzLCBEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcyB9OwotICAgIFRyaVN0YXRlIHRy
aVN0YXRlT2ZTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgU2hvdWxkSWdub3JlVGV4dE9ubHlQ
cm9wZXJ0aWVzID0gRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0OworICAgIFRy
aVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShFZGl0aW5nU3R5bGUqKSBjb25zdDsKKyAgICBUcmlTdGF0
ZSB0cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwogICAgIGJv
b2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0IHsgcmV0dXJuIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVt
ZW50LCAwLCAwKTsgfQogICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUsIFZl
Y3RvcjxDU1NQcm9wZXJ0eUlEPiYgY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBjb25zdAogICAgIHsK
QEAgLTEzMSwxMSArMTMzLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVN0eWxlRnJvbVJ1
bGVzQW5kQ29udGV4dChTdHlsZWRFbGVtZW50KiwgTm9kZSogY29udGV4dCk7CiAgICAgdm9pZCBy
ZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKEVsZW1lbnQqKTsKICAgICB2b2lk
IGZvcmNlSW5saW5lKCk7CisgICAgaW50IGxlZ2FjeUZvbnRTaXplKERvY3VtZW50KikgY29uc3Q7
CiAKICAgICBmbG9hdCBmb250U2l6ZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2l6ZURl
bHRhOyB9CiAgICAgYm9vbCBoYXNGb250U2l6ZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250
U2l6ZURlbHRhICE9IE5vRm9udERlbHRhOyB9CiAgICAgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1
bHRGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNp
emU7IH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVBdFNlbGVj
dGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNob3VsZFVzZUJhY2tncm91
bmRDb2xvckluRWZmZWN0ID0gZmFsc2UpOwogcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoKTsK
ICAgICBFZGl0aW5nU3R5bGUoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1ZGUpOwpAQCAtMTQ3LDYg
KzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBy
ZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKFJlbmRlclN0eWxlKiwgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwor
ICAgIFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVRv
Q29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25zdDsKICAgICBib29s
IGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgRWRpdGlu
Z1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3BlcnR5SUQ+KiBjb25mbGljdGlu
Z1Byb3BlcnRpZXMpIGNvbnN0OwogICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxl
T2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwgUHJvcGVy
dGllc1RvSW5jbHVkZSk7CiAgICAgdm9pZCBtZXJnZVN0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUpOwpAQCAtMjEyLDEwICsyMTcsNiBAQCBw
cml2YXRlOgogCiAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucyBvciBtYWtlIHRoZW0g
bm9uLWdsb2JhbCB0byBkaXNjb3VyYWdlIHVzaW5nIENTU1N0eWxlRGVjbGFyYXRpb24gZGlyZWN0
bHkuCiBpbnQgZ2V0SWRlbnRpZmllclZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJv
cGVydHlJRCk7Ci1lbnVtIExlZ2FjeUZvbnRTaXplTW9kZSB7IEFsd2F5c1VzZUxlZ2FjeUZvbnRT
aXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVsVmFsdWVzTWF0Y2ggfTsKLWludCBsZWdh
Y3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCosIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9v
bCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgTGVnYWN5Rm9udFNpemVNb2RlKTsKLWJv
b2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwot
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gYmFja2dyb3VuZENvbG9ySW5FZmZlY3QoTm9kZSopOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDk3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDksOSArNTA5LDkgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjbwogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCk7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCiBjb25zdCBTaW1wbGVGb250RGF0YSogRWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7Ci0j
aWYgIVBMQVRGT1JNKFFUKQogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIAogICAgIGlm
ICghbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkgewpAQCAtNTMyLDEzICs1MzIsMTEg
QEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgIH0KIAogICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKLQogICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBOb2Rl
KiBzdGFydE5vZGUgPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKS5kZXByZWNhdGVkTm9k
ZSgpOwotICAgIGlmIChzdGFydE5vZGUpIHsKKyAgICBpZiAoTm9kZSogc3RhcnROb2RlID0gYWRq
dXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RF
bmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93
LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBi
dXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2Fz
ZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBuaWwgYWxzby4KKyAgICAg
ICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNo
ZWNrIGZvciBudWxsIGFsc28uCiAgICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0Tm9kZTsgbiAm
JiBuICE9IHBhc3RFbmQ7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBuLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYg
KCFyZW5kZXJlcikKQEAgLTU1NSwxMCArNTUzLDggQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVk
aXRvcjo6Zm9udEZvclNlbAogICAgIH0KIAogICAgIHJldHVybiBmb250OwotI2Vsc2UKLSAgICBy
ZXR1cm4gMDsKLSNlbmRpZgogfQorI2VuZGlmCiAKIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0
ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGJvb2wmIGhhc05lc3RlZE9yTXVsdGlwbGVFbWJlZGRp
bmdzKSBjb25zdAogewpAQCAtODc1LDcyICs4NzEsMjUgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGVUb1NlbGVjdAogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHls
ZShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQs
IHZhbHVlKTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdHlsZSA9IHNlbGVj
dGlvblN0YXJ0U3R5bGUoKTsKLSAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25T
dHlsZS0+c3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzdHlsZS0+
dHJpU3RhdGVPZlN0eWxlKHNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKSA9PSBUcnVlVHJpU3RhdGU7
CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+dHJp
U3RhdGVPZlN0eWxlKAorICAgICAgICBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFy
dChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCksIHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmdldCgpKTsKIH0KIAogVHJpU3RhdGUgRWRpdG9yOjpzZWxl
Y3Rpb25IYXNTdHlsZShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QK
IHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRl
KHByb3BlcnR5SUQsIHZhbHVlKTsKLSAgICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0Nh
cmV0T3JSYW5nZSgpKQotICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLQotICAgIGlmICht
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpKSB7Ci0gICAgICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IHNlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uU3RhcnRTdHlsZSgpOwotICAgICAgICBp
ZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwotICAgICAgICByZXR1cm4gc3R5bGUtPnRyaVN0YXRl
T2ZTdHlsZShzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKSk7Ci0gICAgfQotCi0gICAgVHJpU3RhdGUg
c3RhdGUgPSBGYWxzZVRyaVN0YXRlOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbj4gbm9kZVN0eWxlID0gY29tcHV0ZWRTdHlsZShub2RlKTsKLSAgICAgICAgaWYgKG5v
ZGVTdHlsZSkgewotICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gc3R5bGUtPnRyaVN0
YXRlT2ZTdHlsZShub2RlU3R5bGUuZ2V0KCksIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdT
dHlsZTo6RG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9y
ZVRleHRPbmx5UHJvcGVydGllcyk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAgICAgICAgIHN0
YXRlID0gbm9kZVN0YXRlOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgIT0gbm9kZVN0YXRl
ICYmIG5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN0YXRlID0gTWl4ZWRU
cmlTdGF0ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAobm9kZSA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkuZGVwcmVj
YXRlZE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0
ZTsKKyAgICByZXR1cm4gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgdmFsdWUpLT50
cmlTdGF0ZU9mU3R5bGUobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKIH0KIAog
U3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0
eUlEKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gc2VsZWN0
aW9uU3RhcnRTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxl
ID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLAorICAgICAgICBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25TdHlsZS0+
c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgU3RyaW5nIHZhbHVlID0g
c2VsZWN0aW9uU3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Ci0K
LSAgICAvLyBJZiBiYWNrZ3JvdW5kIGNvbG9yIGlzIHRyYW5zcGFyZW50LCB0cmF2ZXJzZSBwYXJl
bnQgbm9kZXMgdW50aWwgd2UgaGl0IGEgZGlmZmVyZW50IHZhbHVlIG9yIGRvY3VtZW50IHJvb3QK
LSAgICAvLyBBbHNvLCBpZiB0aGUgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIGlnbm9yZSB0aGUgYmFj
a2dyb3VuZCBjb2xvciBhdCB0aGUgc3RhcnQgb2Ygc2VsZWN0aW9uLAotICAgIC8vIGFuZCBmaW5k
IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5jZXN0b3IuCi0gICAgaWYgKHBy
b3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IgJiYgKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5pc1JhbmdlKCkgfHwgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3Ioc2VsZWN0
aW9uU3R5bGUtPnN0eWxlKCkpKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlKG1fZnJh
bWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpKTsKLSAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgIGlmIChQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGJh
Y2tncm91bmRDb2xvckluRWZmZWN0KHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcihlYykp
KQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgfQotCi0gICAgaWYg
KHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSkgewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNzc1ZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSk7Ci0gICAgICAgIGlmIChjc3NWYWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IFN0cmluZzo6bnVtYmVyKGxlZ2Fj
eUZvbnRTaXplRnJvbUNTU1ZhbHVlKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oY3NzVmFsdWUuZ2V0KCkpLAotICAgICAgICAgICAgICAgIHNlbGVj
dGlvblN0eWxlLT5zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSgpLCBBbHdheXNVc2VMZWdh
Y3lGb250U2l6ZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOworICAg
IGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUpCisgICAgICAgIHJldHVybiBT
dHJpbmc6Om51bWJlcihzZWxlY3Rpb25TdHlsZS0+bGVnYWN5Rm9udFNpemUobV9mcmFtZS0+ZG9j
dW1lbnQoKSkpOworICAgIHJldHVybiBzZWxlY3Rpb25TdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVy
dHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAogdm9pZCBFZGl0b3I6OmluZGVudCgpCkBAIC0yNzgx
LDMxICsyNzMwLDYgQEAgdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDUwog
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZSh0eXBpbmdTdHlsZSk7CiB9
CiAKLVBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0U3R5bGUo
KSBjb25zdAotewotICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZShtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0gICAgUG9zaXRpb24gcG9zaXRpb24gPSByYW5n
ZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKTsKLQotICAgIC8vIElmIHRoZSBwb3MgaXMgYXQgdGhl
IGVuZCBvZiBhIHRleHQgbm9kZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVk
LiAKLSAgICAvLyBNb3ZlIGl0IHRvIHRoZSBuZXh0IGRlZXAgZXF1aXZhbGVudCBwb3NpdGlvbiB0
byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUuIAotICAgIC8vIGUuZy4g
aWYgcG9zIHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29ybGQ8
L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGluc3RlYWQuIAotICAgIC8v
IFdlIG9ubHkgZG8gdGhpcyBmb3IgcmFuZ2UgYmVjYXVzZSBjYXJldCBhdCBQb3NpdGlvbigiaGVs
bG8iLCA1KSBpbiA8Yj5oZWxsbzwvYj53b3JsZCBzaG91bGQgZ2l2ZSB5b3UgZm9udC13ZWlnaHQ6
IGJvbGQuIAotICAgIE5vZGUqIHBvc2l0aW9uTm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KTsgCi0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCkgJiYgcG9zaXRpb25O
b2RlICYmIHBvc2l0aW9uTm9kZS0+aXNUZXh0Tm9kZSgpICYmIHBvc2l0aW9uLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwb3NpdGlvbk5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgp
KSAKLSAgICAgICAgcG9zaXRpb24gPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwb3Np
dGlvbik7IAotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHBvc2l0aW9uLmVsZW1lbnQoKTsKLSAg
ICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LCBFZGl0aW5nU3R5bGU6
OkFsbFByb3BlcnRpZXMpOwotICAgIHN0eWxlLT5tZXJnZVR5cGluZ1N0eWxlKG1fZnJhbWUtPmRv
Y3VtZW50KCkpOwotICAgIHJldHVybiBzdHlsZTsKLX0KLQogdm9pZCBFZGl0b3I6OnRleHRGaWVs
ZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlKQogewogICAgIGlmIChjbGllbnQoKSkKQEAgLTI4
NzIsNiArMjc5Niw3IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCgK
ICAgICBBU1NFUlQoIWVjKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKIFJlbmRlclN0eWxlKiBF
ZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoTm9kZSAqJm5vZGVUb1JlbW92ZSkgY29uc3QK
IHsKICAgICBub2RlVG9SZW1vdmUgPSAwOwpAQCAtMjkwNSw2ICsyODMwLDcgQEAgUmVuZGVyU3R5
bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdAogICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxl
RWxlbWVudC5nZXQoKTsKICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gc3R5
bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogMDsKIH0KKyNlbmRpZgogCiAvLyBTZWFy
Y2hlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50IGlmIG5vdGhpbmcgaXMgc2Vs
ZWN0ZWQuCiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9v
bCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0SW5TZWxl
Y3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDk3Mjc1KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcg
KzEzNCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoaW50IHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0OwogICAgIFRyaVN0YXRlIHNlbGVj
dGlvbkhhc1N0eWxlKGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdDsK
ICAgICBTdHJpbmcgc2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlE
KTsKKyNpZiBQTEFURk9STShNQUMpCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRGb3JT
ZWxlY3Rpb24oYm9vbCYpIGNvbnN0OworI2VuZGlmCiAgICAgV3JpdGluZ0RpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICAKICAgICBUcmlTdGF0ZSBz
ZWxlY3Rpb25Vbm9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdDsKQEAgLTM0OCwxNiArMzUwLDE0IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25P
cHRpb25zKTsKICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlv
biwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKLQorI2lmIFBMQVRGT1JN
KE1BQykKICAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiYgbm9k
ZVRvUmVtb3ZlKSBjb25zdDsKLQorI2VuZGlmCiAgICAgdW5zaWduZWQgY291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFy
a01hdGNoZXMpOwogICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5n
JiwgUmFuZ2UqLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMp
OwogICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKIAotICAgIFBh
c3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25TdGFydFN0eWxlKCkgY29uc3Q7Ci0KICAg
ICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50Kik7CiAgICAgdm9pZCB0ZXh0
RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKICAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRl
eHRGaWVsZChFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDk3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBi
b29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmEKIHN0YXRpYyBib29sIGV4ZWN1dGVUb2dn
bGVTdHlsZUluTGlzdChGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBF
ZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rp
b25TdHlsZSA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uU3RhcnRTdHlsZSgpOworICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0
U2VsZWN0aW9uU3RhcnQoZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgaWYg
KCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJ
KHJldmlzaW9uIDk3Mjc1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTUsNCArMTE5NSwyOSBAQCBWaXNpYmxlU2VsZWN0aW9u
IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vCiAgICAgcmV0dXJuIHVwZGF0ZWRTZWxlY3Rpb247CiB9
CiAKK1Bvc2l0aW9uIGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIHVzZWQgYnkgcmFuZ2Ugc3R5bGUgY29tcHV0YXRpb25zIHRvIGF2b2lkIGJ1Z3MgbGlrZToK
KyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDAxNzY0MT4gUkVHUkVTU0lPTiAoTWFpbCk6IHlvdSBj
YW4gb25seSBib2xkL3VuYm9sZCBhIHNlbGVjdGlvbiBzdGFydGluZyBmcm9tIGVuZCBvZiBsaW5l
IG9uY2UKKyAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gc2tpcCBjZXJ0YWluIGlycmVsZXZhbnQg
Y29udGVudCBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgc28gd2UgZG8gbm90IHdpbmQg
dXAgCisgICAgLy8gd2l0aCBhIHNwdXJpb3VzICJtaXhlZCIgc3R5bGUuCisKKyAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgaWYgKHZp
c2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CisKKyAg
ICAvLyBpZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQsIGp1c3QgcmV0dXJuIHRoZSBwb3NpdGlv
biwgc2luY2UgdGhlIHN0eWxlCisgICAgLy8gYmVoaW5kIHVzIGlzIHJlbGV2YW50CisgICAgaWYg
KHNlbGVjdGlvbi5pc0NhcmV0KCkpCisgICAgICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKTsKKworICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gc3RhcnRzIGp1c3QgYmVm
b3JlIGEgcGFyYWdyYXBoIGJyZWFrLCBza2lwIG92ZXIgaXQKKyAgICBpZiAoaXNFbmRPZlBhcmFn
cmFwaCh2aXNpYmxlUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLm5l
eHQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKKworICAgIC8vIG90aGVyd2lzZSwg
bWFrZSBzdXJlIHRvIGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2VsZWN0ZWQgbm9kZSwK
KyAgICAvLyBpbnN0ZWFkIG9mIHBvc3NpYmx5IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3Qgbm9kZSBi
ZWZvcmUgdGhlIHNlbGVjdGlvbgorICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5kb3duc3RyZWFtKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDk3Mjc1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMs
NiArMjMzLDggQEAgYm9vbCBjYW5NZXJnZUxpc3RzKEVsZW1lbnQqIGZpcnN0TGlzdCwgRQogLy8g
RnVuY3Rpb25zIHJldHVybmluZyBWaXNpYmxlU2VsZWN0aW9uCiBWaXNpYmxlU2VsZWN0aW9uIGF2
b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE5vZGUqKTsK
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKKworUG9zaXRpb24gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0
eWxlQ29tcHV0YXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIAogCiAvLyBNaXNj
ZWxsYW5lb3VzIGZ1bmN0aW9ucyBvbiBUZXh0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>