<?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>43293</bug_id>
          
          <creation_ts>2010-07-31 01:05:51 -0700</creation_ts>
          <short_desc>HTMLStyleElement/SVGStyleElement need to share more code</short_desc>
          <delta_ts>2010-07-31 10:31:25 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>krit</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>258570</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-07-31 01:05:51 -0700</bug_when>
    <thetext>HTMLStyleElement and SVGStyleElement share the StyleElement base class. Some years ago the code was perfectly shared between those two classes.
This has been changed since a while, and HTMLStyleElement contains functionality SVGStyleElement lacks (line number reporting for style sheets etc..)

Refactor the code, to save virtual function calls, and to make both classes simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258571</commentid>
    <comment_count>1</comment_count>
      <attachid>63141</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-07-31 01:11:17 -0700</bug_when>
    <thetext>Created attachment 63141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258572</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-31 01:19:37 -0700</bug_when>
    <thetext>Attachment 63141 did not build on qt:
Build output: http://queues.webkit.org/results/3646082</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258573</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-31 01:22:05 -0700</bug_when>
    <thetext>Attachment 63141 did not build on mac:
Build output: http://queues.webkit.org/results/3648073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258574</commentid>
    <comment_count>4</comment_count>
      <attachid>63142</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-07-31 01:22:49 -0700</bug_when>
    <thetext>Created attachment 63142
Patch v2

Oops, a last minute change broke the build, restore m_sheet as protected variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258575</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-31 01:28:01 -0700</bug_when>
    <thetext>Attachment 63142 did not build on mac:
Build output: http://queues.webkit.org/results/3576716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258576</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-31 01:28:22 -0700</bug_when>
    <thetext>Attachment 63142 did not build on qt:
Build output: http://queues.webkit.org/results/3592647</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258577</commentid>
    <comment_count>7</comment_count>
      <attachid>63143</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-07-31 01:31:56 -0700</bug_when>
    <thetext>Created attachment 63143
Patch v3

*sigh* uploaded wrong version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258578</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-31 01:37:17 -0700</bug_when>
    <thetext>Attachment 63141 did not build on chromium:
Build output: http://queues.webkit.org/results/3635170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258579</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-31 01:40:05 -0700</bug_when>
    <thetext>Attachment 63141 did not build on gtk:
Build output: http://queues.webkit.org/results/3640128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258580</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-31 01:43:26 -0700</bug_when>
    <thetext>Attachment 63141 did not build on win:
Build output: http://queues.webkit.org/results/3559720</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258616</commentid>
    <comment_count>11</comment_count>
      <attachid>63143</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-07-31 10:17:28 -0700</bug_when>
    <thetext>Comment on attachment 63143
Patch v3

LGTM. Can you please add ASSERT&apos;s for document in StyleElement::insertedIntoDocument, removedFromDocument and sheetLoaded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258618</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-07-31 10:31:25 -0700</bug_when>
    <thetext>Thanks, also added ASSERT(element) while I was at it. Landed in r64420.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63141</attachid>
            <date>2010-07-31 01:11:17 -0700</date>
            <delta_ts>2010-07-31 01:22:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>StyleRefactor.diff</filename>
            <type>text/plain</type>
            <size>16751</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDQxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDctMzEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSFRNTFN0eWxlRWxlbWVudC9TVkdTdHlsZUVsZW1lbnQgbmVlZCB0byBzaGFyZSBtb3Jl
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
MjkzCisKKyAgICAgICAgU2ltcGxpZnkgSFRNTFN0eWxlRWxlbWVudC9TVkdTdHlsZUVsZW1lbnQu
IFRoZXkgbG9vayBpZGVudGljYWxseSBub3csIGFzIGFsbCBjb2RlIGlzIHNoYXJlZCBpbiBTdHls
ZUVsZW1lbnQuCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0cy4KKworICAgICAgICAq
IGRvbS9TdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpT
dHlsZUVsZW1lbnQpOiBUYWtlIGNyZWF0ZWRCeVBhcnNlciAmIERvY3VtZW50IGFyZ3VtZW50cywg
dG8gc2hhcmUgdGhlIGxpbmUgbnVtYmVyIGV4dHJhY3Rpb24gbG9naWMuIFN0b3JlIGl0IGluIG1f
bGluZU51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQpOiBNb3ZlZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSBoZXJlLCB0byBzaGFy
ZSBjb2RlIGJldHdlZW4gSFRNTC9TVkdTdHlsZUVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBTYW1lIGZvciByZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKTogSW50cm9kdWNlZCBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6cHJvY2Vzcyk6IFVzZSBzdG9yZWQgbV9saW5lTnVt
YmVyLCBhdm9pZHMgYSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6
OmNyZWF0ZVNoZWV0KTogTm8gbmVlZCB0byBjYWxsIHRoZSB2aXJ0dWFsIHNldExvYWRpbmcoKSBm
dW5jdGlvbiwganVzdCBzdG9yZSBtX2xvYWRpbmcgaW4gU3R5bGVFbGVtZW50LCBhbmQgc2V0IGl0
IGZyb20gaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKTog
SW50cm9kdWNlZCBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVF
bGVtZW50OjpzaGVldExvYWRlZCk6IERpdHRvLgorICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudCk6IFBhc3MgRG9jdW1lbnQgJiBj
cmVhdGVkQnlQYXJzZXIgYXJndW1lbnRzIHRvIFN0eWxlRWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6IERlbGVnYXRlIHdv
cmsgdG8gU3R5bGVFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVu
dDo6aXNMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50
OjpzaGVldExvYWRlZCk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVsZW1lbnQpOiBQ
YXNzIERvY3VtZW50ICYgY3JlYXRlZEJ5UGFyc2VyIGFyZ3VtZW50cyB0byBTdHlsZUVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJl
bik6IERlbGVnYXRlIHdvcmsgdG8gU3R5bGVFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
eWxlRWxlbWVudDo6aXNMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKTogRGl0dG8uCisKIDIwMTAtMDctMzAgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI2NDQwOC4KSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MSArMjYsMTcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlRWxlbWVudDo6
U3R5bGVFbGVtZW50KCkKK1N0eWxlRWxlbWVudDo6U3R5bGVFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCisgICAgOiBtX2NyZWF0ZWRCeVBhcnNlcihjcmVh
dGVkQnlQYXJzZXIpCisgICAgLCBtX2xvYWRpbmcoZmFsc2UpCisgICAgLCBtX3N0YXJ0TGluZU51
bWJlcigwKQogeworICAgIGlmIChjcmVhdGVkQnlQYXJzZXIgJiYgZG9jdW1lbnQgJiYgZG9jdW1l
bnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpKQorICAgICAgICBtX3N0YXJ0TGluZU51bWJl
ciA9IGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+bGluZU51bWJlcigpOwog
fQogCiBTdHlsZVNoZWV0KiBTdHlsZUVsZW1lbnQ6OnNoZWV0KEVsZW1lbnQqIGUpCkBAIC00MCwx
MyArNDYsMTkgQEAgU3R5bGVTaGVldCogU3R5bGVFbGVtZW50OjpzaGVldChFbGVtZW50KgogICAg
IHJldHVybiBtX3NoZWV0LmdldCgpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxl
bWVudCkKIHsKLSAgICBwcm9jZXNzKGVsZW1lbnQsIDApOworICAgIGRvY3VtZW50LT5hZGRTdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50LCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgaWYg
KG1fY3JlYXRlZEJ5UGFyc2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKGVsZW1l
bnQpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCit2b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CisgICAgZG9jdW1lbnQtPnJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQpOworCiAgICAgLy8gSWYgd2UncmUgaW4g
ZG9jdW1lbnQgdGVhcmRvd24sIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgbm90aWZpY2F0
aW9uIG9mIG91ciBzaGVldCdzIHJlbW92YWwuCiAgICAgaWYgKCFkb2N1bWVudC0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTYsNyArNjgsMjIgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoRAogICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50KiBlLCBpbnQg
c3RhcnRMaW5lTnVtYmVyKQordm9pZCBTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2NoYW5nZWRCeVBhcnNlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJvY2VzcyhlbGVtZW50KTsKK30KKwordm9pZCBTdHlsZUVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbihFbGVtZW50KiBlbGVtZW50KQoreworICAgIHByb2Nlc3MoZWxl
bWVudCk7CisgICAgc2hlZXQoZWxlbWVudCk7CisgICAgbV9jcmVhdGVkQnlQYXJzZXIgPSBmYWxz
ZTsKK30KKwordm9pZCBTdHlsZUVsZW1lbnQ6OnByb2Nlc3MoRWxlbWVudCogZSkKIHsKICAgICBp
ZiAoIWUgfHwgIWUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIsNyArMTA5
LDcgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6OnByb2Nlc3MoRWxlbWVudCogZSwgaQogICAgIH0KICAg
ICBBU1NFUlQocCA9PSB0ZXh0ICsgcmVzdWx0TGVuZ3RoKTsKIAotICAgIGNyZWF0ZVNoZWV0KGUs
IHN0YXJ0TGluZU51bWJlciwgc2hlZXRUZXh0KTsKKyAgICBjcmVhdGVTaGVldChlLCBtX3N0YXJ0
TGluZU51bWJlciwgc2hlZXRUZXh0KTsKIH0KIAogdm9pZCBTdHlsZUVsZW1lbnQ6OmNyZWF0ZVNo
ZWV0KEVsZW1lbnQqIGUsIGludCBzdGFydExpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgdGV4dCkK
QEAgLTEwMiwxMiArMTI5LDEyIEBAIHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVt
ZW50KiAKICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBwcmludEV2YWwoInByaW50IiwgdHJ1
ZSk7CiAgICAgICAgIGlmIChzY3JlZW5FdmFsLmV2YWwobWVkaWFMaXN0LmdldCgpKSB8fCBwcmlu
dEV2YWwuZXZhbChtZWRpYUxpc3QuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkb2N1bWVudC0+YWRk
UGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpOworICAgICAgICAg
ICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0
OjpjcmVhdGUoZSwgU3RyaW5nKCksIEtVUkwoKSwgZG9jdW1lbnQtPmlucHV0RW5jb2RpbmcoKSk7
CiAgICAgICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZ0F0TGluZSh0ZXh0LCAhZG9jdW1lbnQt
PmluQ29tcGF0TW9kZSgpLCBzdGFydExpbmVOdW1iZXIpOwogICAgICAgICAgICAgbV9zaGVldC0+
c2V0TWVkaWEobWVkaWFMaXN0LmdldCgpKTsKICAgICAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxl
KGUtPnRpdGxlKCkpOwotICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgICAgICAg
ICBtX2xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTE1LDQgKzE0Miwy
MCBAQCB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgICAgIG1f
c2hlZXQtPmNoZWNrTG9hZGVkKCk7CiB9CiAKK2Jvb2wgU3R5bGVFbGVtZW50Ojppc0xvYWRpbmco
KSBjb25zdAoreworICAgIGlmIChtX2xvYWRpbmcpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBtX3NoZWV0ID8gbV9zaGVldC0+aXNMb2FkaW5nKCkgOiBmYWxzZTsKK30KKworYm9v
bCBTdHlsZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBp
ZiAoaXNMb2FkaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvY3VtZW50LT5y
ZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfQpJbmRleDogV2Vi
Q29yZS9kb20vU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVF
bGVtZW50LmgJKHJldmlzaW9uIDY0NDA5KQorKysgV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIFN0eWxlRWxlbWVudF9oCiAjZGVmaW5lIFN0eWxl
RWxlbWVudF9oCiAKQEAgLTI5LDI3ICszMCwzMyBAQCBjbGFzcyBFbGVtZW50OwogCiBjbGFzcyBT
dHlsZUVsZW1lbnQgewogcHVibGljOgotICAgIFN0eWxlRWxlbWVudCgpOworICAgIFN0eWxlRWxl
bWVudChEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIH5TdHls
ZUVsZW1lbnQoKSB7fQogCiBwcm90ZWN0ZWQ6Ci0gICAgU3R5bGVTaGVldCogc2hlZXQoRWxlbWVu
dCopOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExvYWRpbmcoYm9vbCkge30KLQogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpIGNvbnN0ID0gMDsKIAotICAgIHZvaWQgaW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVkRnJvbURv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBwcm9jZXNzKEVsZW1lbnQqLCBpbnQgc3RhcnRM
aW5lTnVtYmVyKTsKKyAgICBTdHlsZVNoZWV0KiBzaGVldChFbGVtZW50Kik7CiAKLSAgICB2b2lk
IGNyZWF0ZVNoZWV0KEVsZW1lbnQqIGUsIGludCBzdGFydExpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgdGV4dCA9IFN0cmluZygpKTsKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OworICAgIGJv
b2wgc2hlZXRMb2FkZWQoRG9jdW1lbnQqKTsKIAotcHJvdGVjdGVkOgorICAgIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KERvY3VtZW50KiwgRWxlbWVudCopOworICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2Vk
KEVsZW1lbnQqKTsKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihFbGVtZW50Kik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVTaGVldChFbGVtZW50KiwgaW50IHN0YXJ0TGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiB0ZXh0ID0gU3RyaW5nKCkpOworICAgIHZvaWQgcHJvY2VzcyhF
bGVtZW50Kik7CisKKyAgICBib29sIG1fY3JlYXRlZEJ5UGFyc2VyOworICAgIGJvb2wgbV9sb2Fk
aW5nOworICAgIGludCBtX3N0YXJ0TGluZU51bWJlcjsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gbV9zaGVldDsKIH07CiAKLX0gLy9uYW1lc3BhY2UKK30KIAogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NDQwOSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDkgQEAgdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogaW5saW5lIEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxT
dHlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KQotICAgICwgbV9sb2FkaW5nKGZhbHNlKQotICAgICwgbV9jcmVhdGVkQnlQYXJzZXIo
Y3JlYXRlZEJ5UGFyc2VyKQotICAgICwgbV9zdGFydExpbmVOdW1iZXIoMCkKKyAgICAsIFN0eWxl
RWxlbWVudChkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKHN0eWxlVGFnKSk7Ci0gICAgaWYgKGNyZWF0ZWRCeVBhcnNlciAmJiBkb2N1bWVudCAmJiBk
b2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpCi0gICAgICAgIG1fc3RhcnRMaW5l
TnVtYmVyID0gZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT5saW5lTnVtYmVy
KCk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTFN0eWxlRWxlbWVudD4gSFRNTFN0eWxlRWxlbWVudDo6
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCkBAIC02MiwzMiArNTgsMjUgQEAgdm9pZCBIVE1MU3R5bGVF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlz
aFBhcnNpbmdDaGlsZHJlbigpCiB7Ci0gICAgU3R5bGVFbGVtZW50Ojpwcm9jZXNzKHRoaXMsIG1f
c3RhcnRMaW5lTnVtYmVyKTsKLSAgICBTdHlsZUVsZW1lbnQ6OnNoZWV0KHRoaXMpOwotICAgIG1f
Y3JlYXRlZEJ5UGFyc2VyID0gZmFsc2U7CisgICAgU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4odGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigp
OwogfQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsK
ICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLQotICAgIGRvY3VtZW50
KCktPmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsK
LSAgICBpZiAoIW1fY3JlYXRlZEJ5UGFyc2VyKQotICAgICAgICBTdHlsZUVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOworICAgIFN0eWxlRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoZG9jdW1lbnQoKSwgdGhpcyk7CiB9CiAKIHZvaWQgSFRNTFN0eWxl
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlk
YXRlTm9kZSh0aGlzKTsKLSAgICBTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoZG9j
dW1lbnQoKSk7CisgICAgU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KGRvY3VtZW50
KCksIHRoaXMpOwogfQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5n
ZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKLSAgICBpZiAoIWNoYW5nZWRCeVBhcnNlcikKLSAg
ICAgICAgU3R5bGVFbGVtZW50Ojpwcm9jZXNzKHRoaXMsIDApOworICAgIFN0eWxlRWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwogICAgIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Y2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVs
dGEpOwogfQogCkBAIC05NiwyNCArODUsNiBAQCBTdHlsZVNoZWV0KiBIVE1MU3R5bGVFbGVtZW50
OjpzaGVldCgpCiAgICAgcmV0dXJuIFN0eWxlRWxlbWVudDo6c2hlZXQodGhpcyk7CiB9CiAKLWJv
b2wgSFRNTFN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKCkgY29uc3QKLXsKLSAgICBpZiAobV9sb2Fk
aW5nKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fc2hlZXQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3No
ZWV0LmdldCgpKS0+aXNMb2FkaW5nKCk7Ci19Ci0KLWJvb2wgSFRNTFN0eWxlRWxlbWVudDo6c2hl
ZXRMb2FkZWQoKQotewotICAgIGlmICghaXNMb2FkaW5nKCkpIHsKLSAgICAgICAgZG9jdW1lbnQo
KS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTFN0eWxlRWxlbWVu
dDo6bWVkaWEoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gNjQ0MDkpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxOSArNTMsMTMg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hlZXRMb2FkZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMb2FkaW5nKGJvb2wgbG9hZGlu
ZykgeyBtX2xvYWRpbmcgPSBsb2FkaW5nOyB9CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygp
IGNvbnN0IHsgcmV0dXJuIFN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKCk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hlZXRMb2FkZWQoKSB7IHJldHVybiBTdHlsZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKGRv
Y3VtZW50KCkpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWVkaWEoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSgpIGNvbnN0OwotCi0gICAgYm9vbCBtX2xvYWRpbmc7Ci0gICAgYm9vbCBtX2NyZWF0ZWRC
eVBhcnNlcjsKLSAgICBpbnQgbV9zdGFydExpbmVOdW1iZXI7CiB9OwogCiB9IC8vbmFtZXNwYWNl
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDY0NDA5KQorKysgV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBN
Y0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+CkBAIC0zNCwxMiArMzQsMTAgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0KLVNWR1N0eWxlRWxlbWVu
dDo6U1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQotICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwg
ZG9jKQotICAgICAsIFNWR0xhbmdTcGFjZSgpCi0gICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoY3Jl
YXRlZEJ5UGFyc2VyKQorU1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBh
cnNlcikKKyAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBTVkdMYW5n
U3BhY2UoKQorICAgICwgU3R5bGVFbGVtZW50KGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCiB7
CiB9CiAKQEAgLTkwLDMxICs4OCwyNiBAQCB2b2lkIFNWR1N0eWxlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
KQogewotICAgIFN0eWxlRWxlbWVudDo6c2hlZXQodGhpcyk7Ci0gICAgbV9jcmVhdGVkQnlQYXJz
ZXIgPSBmYWxzZTsKKyAgICBTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbih0aGlz
KTsKICAgICBTVkdFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIH0KIAogdm9pZCBT
VkdTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBTVkdFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIGRvY3VtZW50KCktPmFkZFN0eWxlU2hlZXRD
YW5kaWRhdGVOb2RlKHRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICBpZiAoIW1fY3JlYXRl
ZEJ5UGFyc2VyKQotICAgICAgICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRv
Y3VtZW50KCksIHRoaXMpOworICAgIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
ZG9jdW1lbnQoKSwgdGhpcyk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKIHsKICAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0g
ICAgaWYgKGRvY3VtZW50KCktPnJlbmRlcmVyKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMpOwotICAgIFN0eWxlRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9t
RG9jdW1lbnQoZG9jdW1lbnQoKSwgdGhpcyk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50Ojpj
aGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwg
Tm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7CisgICAgU3R5bGVFbGVt
ZW50OjpjaGlsZHJlbkNoYW5nZWQodGhpcyk7CiAgICAgU1ZHRWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3Vu
dERlbHRhKTsKLSAgICBTdHlsZUVsZW1lbnQ6OnByb2Nlc3ModGhpcywgMCk7CiB9CiAKIFN0eWxl
U2hlZXQqIFNWR1N0eWxlRWxlbWVudDo6c2hlZXQoKQpAQCAtMTIyLDEzICsxMTUsNiBAQCBTdHls
ZVNoZWV0KiBTVkdTdHlsZUVsZW1lbnQ6OnNoZWV0KCkKICAgICByZXR1cm4gU3R5bGVFbGVtZW50
OjpzaGVldCh0aGlzKTsKIH0KIAotYm9vbCBTVkdTdHlsZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKCkK
LXsKLSAgICBkb2N1bWVudCgpLT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR1N0eWxlRWxlbWVudC5oCShyZXZpc2lvbiA2NDQwOSkKKysrIFdlYkNvcmUvc3ZnL1NW
R1N0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5v
cmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsNDggKzIwLDQzIEBA
CiAKICNpZm5kZWYgU1ZHU3R5bGVFbGVtZW50X2gKICNkZWZpbmUgU1ZHU3R5bGVFbGVtZW50X2gK
LSNpZiBFTkFCTEUoU1ZHKQogCi0jaW5jbHVkZSA8U1ZHRWxlbWVudC5oPgorI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZS5oIgog
I2luY2x1ZGUgIlN0eWxlRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBTVkdTdHlsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTdHlsZUVsZW1lbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHU3R5
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKTsKLQotICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFu
Z2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAs
IE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgICAgICB2aXJ0
dWFsIGJvb2wgc2hlZXRMb2FkZWQoKTsKLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFR5cGUoY29uc3QgQXRvbWljU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtZWRpYSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE1lZGlhKGNvbnN0IEF0b21pY1N0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgp
IGNvbnN0OwotICAgICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCgpOwotICAgICAgICAKLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7Ci0gICAgfTsKK2Ns
YXNzIFNWR1N0eWxlRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50CisgICAgICAgICAgICAgICAg
ICAgICAgLCBwdWJsaWMgU1ZHTGFuZ1NwYWNlCisgICAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgU3R5bGVFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBTVkdTdHlsZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworCisgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5n
ZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNo
YW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKKworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBj
b25zdCB7IHJldHVybiBTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpOyB9CisgICAgdmlydHVhbCBi
b29sIHNoZWV0TG9hZGVkKCkgeyByZXR1cm4gU3R5bGVFbGVtZW50OjpzaGVldExvYWRlZChkb2N1
bWVudCgpKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25z
dDsKKyAgICB2b2lkIHNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRNZWRpYShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qg
QXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgU3R5bGVTaGVldCogc2hlZXQo
KTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcp
CiAjZW5kaWYgLy8gU1ZHU3R5bGVFbGVtZW50X2gKLQotLy8gdmltOnRzPTQ6bm9ldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63142</attachid>
            <date>2010-07-31 01:22:49 -0700</date>
            <delta_ts>2010-07-31 01:31:56 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>StyleRefactor.diff</filename>
            <type>text/plain</type>
            <size>16998</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDQxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDctMzEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSFRNTFN0eWxlRWxlbWVudC9TVkdTdHlsZUVsZW1lbnQgbmVlZCB0byBzaGFyZSBtb3Jl
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
MjkzCisKKyAgICAgICAgU2ltcGxpZnkgSFRNTFN0eWxlRWxlbWVudC9TVkdTdHlsZUVsZW1lbnQu
IFRoZXkgbG9vayBpZGVudGljYWxseSBub3csIGFzIGFsbCBjb2RlIGlzIHNoYXJlZCBpbiBTdHls
ZUVsZW1lbnQuCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0cy4KKworICAgICAgICAq
IGRvbS9TdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpT
dHlsZUVsZW1lbnQpOiBUYWtlIGNyZWF0ZWRCeVBhcnNlciAmIERvY3VtZW50IGFyZ3VtZW50cywg
dG8gc2hhcmUgdGhlIGxpbmUgbnVtYmVyIGV4dHJhY3Rpb24gbG9naWMuIFN0b3JlIGl0IGluIG1f
bGluZU51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQpOiBNb3ZlZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSBoZXJlLCB0byBzaGFy
ZSBjb2RlIGJldHdlZW4gSFRNTC9TVkdTdHlsZUVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBTYW1lIGZvciByZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKTogSW50cm9kdWNlZCBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6cHJvY2Vzcyk6IFVzZSBzdG9yZWQgbV9saW5lTnVt
YmVyLCBhdm9pZHMgYSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6
OmNyZWF0ZVNoZWV0KTogTm8gbmVlZCB0byBjYWxsIHRoZSB2aXJ0dWFsIHNldExvYWRpbmcoKSBm
dW5jdGlvbiwganVzdCBzdG9yZSBtX2xvYWRpbmcgaW4gU3R5bGVFbGVtZW50LCBhbmQgc2V0IGl0
IGZyb20gaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKTog
SW50cm9kdWNlZCBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVF
bGVtZW50OjpzaGVldExvYWRlZCk6IERpdHRvLgorICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudCk6IFBhc3MgRG9jdW1lbnQgJiBj
cmVhdGVkQnlQYXJzZXIgYXJndW1lbnRzIHRvIFN0eWxlRWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6IERlbGVnYXRlIHdv
cmsgdG8gU3R5bGVFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVu
dDo6aXNMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50
OjpzaGVldExvYWRlZCk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVsZW1lbnQpOiBQ
YXNzIERvY3VtZW50ICYgY3JlYXRlZEJ5UGFyc2VyIGFyZ3VtZW50cyB0byBTdHlsZUVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJl
bik6IERlbGVnYXRlIHdvcmsgdG8gU3R5bGVFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
eWxlRWxlbWVudDo6aXNMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKTogRGl0dG8uCisKIDIwMTAtMDctMzAgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI2NDQwOC4KSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MSArMjYsMTcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlRWxlbWVudDo6
U3R5bGVFbGVtZW50KCkKK1N0eWxlRWxlbWVudDo6U3R5bGVFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCisgICAgOiBtX2NyZWF0ZWRCeVBhcnNlcihjcmVh
dGVkQnlQYXJzZXIpCisgICAgLCBtX2xvYWRpbmcoZmFsc2UpCisgICAgLCBtX3N0YXJ0TGluZU51
bWJlcigwKQogeworICAgIGlmIChjcmVhdGVkQnlQYXJzZXIgJiYgZG9jdW1lbnQgJiYgZG9jdW1l
bnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpKQorICAgICAgICBtX3N0YXJ0TGluZU51bWJl
ciA9IGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+bGluZU51bWJlcigpOwog
fQogCiBTdHlsZVNoZWV0KiBTdHlsZUVsZW1lbnQ6OnNoZWV0KEVsZW1lbnQqIGUpCkBAIC00MCwx
MyArNDYsMTkgQEAgU3R5bGVTaGVldCogU3R5bGVFbGVtZW50OjpzaGVldChFbGVtZW50KgogICAg
IHJldHVybiBtX3NoZWV0LmdldCgpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxl
bWVudCkKIHsKLSAgICBwcm9jZXNzKGVsZW1lbnQsIDApOworICAgIGRvY3VtZW50LT5hZGRTdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50LCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgaWYg
KG1fY3JlYXRlZEJ5UGFyc2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKGVsZW1l
bnQpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCit2b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CisgICAgZG9jdW1lbnQtPnJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQpOworCiAgICAgLy8gSWYgd2UncmUgaW4g
ZG9jdW1lbnQgdGVhcmRvd24sIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgbm90aWZpY2F0
aW9uIG9mIG91ciBzaGVldCdzIHJlbW92YWwuCiAgICAgaWYgKCFkb2N1bWVudC0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTYsNyArNjgsMjIgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoRAogICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50KiBlLCBpbnQg
c3RhcnRMaW5lTnVtYmVyKQordm9pZCBTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2NoYW5nZWRCeVBhcnNlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJvY2VzcyhlbGVtZW50KTsKK30KKwordm9pZCBTdHlsZUVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbihFbGVtZW50KiBlbGVtZW50KQoreworICAgIHByb2Nlc3MoZWxl
bWVudCk7CisgICAgc2hlZXQoZWxlbWVudCk7CisgICAgbV9jcmVhdGVkQnlQYXJzZXIgPSBmYWxz
ZTsKK30KKwordm9pZCBTdHlsZUVsZW1lbnQ6OnByb2Nlc3MoRWxlbWVudCogZSkKIHsKICAgICBp
ZiAoIWUgfHwgIWUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIsMTQgKzEw
OSwxNCBAQCB2b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50KiBlLCBpCiAgICAgfQog
ICAgIEFTU0VSVChwID09IHRleHQgKyByZXN1bHRMZW5ndGgpOwogCi0gICAgY3JlYXRlU2hlZXQo
ZSwgc3RhcnRMaW5lTnVtYmVyLCBzaGVldFRleHQpOworICAgIGNyZWF0ZVNoZWV0KGUsIG1fc3Rh
cnRMaW5lTnVtYmVyLCBzaGVldFRleHQpOwogfQogCiB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRl
U2hlZXQoRWxlbWVudCogZSwgaW50IHN0YXJ0TGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKG1f
c2hlZXQpIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihtX3NoZWV0
LmdldCgpKS0+aXNMb2FkaW5nKCkpCisgICAgICAgIGlmIChtX3NoZWV0LT5pc0xvYWRpbmcoKSkK
ICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgbV9z
aGVldCA9IDA7CiAgICAgfQpAQCAtMTAyLDEyICsxMjksMTIgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6
OmNyZWF0ZVNoZWV0KEVsZW1lbnQqIAogICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50
RXZhbCgicHJpbnQiLCB0cnVlKTsKICAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYUxp
c3QuZ2V0KCkpIHx8IHByaW50RXZhbC5ldmFsKG1lZGlhTGlzdC5nZXQoKSkpIHsKICAgICAgICAg
ICAgIGRvY3VtZW50LT5hZGRQZW5kaW5nU2hlZXQoKTsKLSAgICAgICAgICAgIHNldExvYWRpbmco
dHJ1ZSk7CisgICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgbV9zaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBkb2N1bWVudC0+
aW5wdXRFbmNvZGluZygpKTsKICAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nQXRMaW5l
KHRleHQsICFkb2N1bWVudC0+aW5Db21wYXRNb2RlKCksIHN0YXJ0TGluZU51bWJlcik7CiAgICAg
ICAgICAgICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwogICAgICAgICAgICAg
bV9zaGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7Ci0gICAgICAgICAgICBzZXRMb2FkaW5nKGZh
bHNlKTsKKyAgICAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xMTUsNCArMTQyLDIwIEBAIHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVt
ZW50KiAKICAgICAgICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKIH0KIAorYm9vbCBTdHlsZUVs
ZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0Cit7CisgICAgaWYgKG1fbG9hZGluZykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fc2hlZXQgPyBtX3NoZWV0LT5pc0xvYWRpbmcoKSA6
IGZhbHNlOworfQorCitib29sIFN0eWxlRWxlbWVudDo6c2hlZXRMb2FkZWQoRG9jdW1lbnQqIGRv
Y3VtZW50KQoreworICAgIGlmIChpc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZG9jdW1lbnQtPnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gNjQ0MDkpCisrKyBXZWJDb3JlL2Rv
bS9TdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsNiArMTcsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgU3R5bGVFbGVtZW50
X2gKICNkZWZpbmUgU3R5bGVFbGVtZW50X2gKIApAQCAtMjksMjcgKzMwLDM0IEBAIGNsYXNzIEVs
ZW1lbnQ7CiAKIGNsYXNzIFN0eWxlRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgU3R5bGVFbGVtZW50
KCk7CisgICAgU3R5bGVFbGVtZW50KERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwog
ICAgIHZpcnR1YWwgflN0eWxlRWxlbWVudCgpIHt9CiAKIHByb3RlY3RlZDoKLSAgICBTdHlsZVNo
ZWV0KiBzaGVldChFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9hZGluZyhib29s
KSB7fQotCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3QgPSAwOwogCi0g
ICAgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudChEb2N1bWVudCosIEVsZW1lbnQqKTsKLSAgICB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHByb2Nlc3MoRWxl
bWVudCosIGludCBzdGFydExpbmVOdW1iZXIpOworICAgIFN0eWxlU2hlZXQqIHNoZWV0KEVsZW1l
bnQqKTsKIAotICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCogZSwgaW50IHN0YXJ0TGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiB0ZXh0ID0gU3RyaW5nKCkpOworICAgIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3Q7CisgICAgYm9vbCBzaGVldExvYWRlZChEb2N1bWVudCopOworCisgICAgdm9pZCBp
bnNlcnRlZEludG9Eb2N1bWVudChEb2N1bWVudCosIEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92
ZWRGcm9tRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50Kik7CisgICAgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoRWxlbWVudCopOworICAgIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKEVsZW1lbnQq
KTsKIAotcHJvdGVjdGVkOgogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0OworCitw
cml2YXRlOgorICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCosIGludCBzdGFydExpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgdGV4dCA9IFN0cmluZygpKTsKKyAgICB2b2lkIHByb2Nlc3MoRWxl
bWVudCopOworCisgICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsKKyAgICBib29sIG1fbG9hZGlu
ZzsKKyAgICBpbnQgbV9zdGFydExpbmVOdW1iZXI7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9CiAK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDEzICszNiw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGlubGluZSBIVE1M
U3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgOiBIVE1M
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fbG9hZGluZyhmYWxzZSkKLSAgICAs
IG1fY3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcikKLSAgICAsIG1fc3RhcnRMaW5lTnVt
YmVyKDApCisgICAgLCBTdHlsZUVsZW1lbnQoZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikKIHsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShzdHlsZVRhZykpOwotICAgIGlmIChjcmVhdGVkQnlQYXJz
ZXIgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpKQot
ICAgICAgICBtX3N0YXJ0TGluZU51bWJlciA9IGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIoKS0+bGluZU51bWJlcigpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxTdHlsZUVsZW1lbnQ+
IEhUTUxTdHlsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtNjIsMzIgKzU4LDI1
IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKIAogdm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewotICAgIFN0eWxlRWxlbWVu
dDo6cHJvY2Vzcyh0aGlzLCBtX3N0YXJ0TGluZU51bWJlcik7Ci0gICAgU3R5bGVFbGVtZW50Ojpz
aGVldCh0aGlzKTsKLSAgICBtX2NyZWF0ZWRCeVBhcnNlciA9IGZhbHNlOworICAgIFN0eWxlRWxl
bWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRoaXMpOwogICAgIEhUTUxFbGVtZW50OjpmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCk7Ci0KLSAgICBkb2N1bWVudCgpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzLCBt
X2NyZWF0ZWRCeVBhcnNlcik7Ci0gICAgaWYgKCFtX2NyZWF0ZWRCeVBhcnNlcikKLSAgICAgICAg
U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKKyAg
ICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwog
fQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAg
IEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQoKS0+cmVt
b3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUodGhpcyk7Ci0gICAgU3R5bGVFbGVtZW50OjpyZW1v
dmVkRnJvbURvY3VtZW50KGRvY3VtZW50KCkpOworICAgIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5n
ZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7Ci0gICAgaWYgKCFj
aGFuZ2VkQnlQYXJzZXIpCi0gICAgICAgIFN0eWxlRWxlbWVudDo6cHJvY2Vzcyh0aGlzLCAwKTsK
KyAgICBTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKICAgICBIVE1MRWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNo
YW5nZSwgY2hpbGRDb3VudERlbHRhKTsKIH0KIApAQCAtOTYsMjQgKzg1LDYgQEAgU3R5bGVTaGVl
dCogSFRNTFN0eWxlRWxlbWVudDo6c2hlZXQoKQogICAgIHJldHVybiBTdHlsZUVsZW1lbnQ6OnNo
ZWV0KHRoaXMpOwogfQogCi1ib29sIEhUTUxTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fbG9hZGluZykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFt
X3NoZWV0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpOwotfQotCi1ib29sIEhU
TUxTdHlsZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKCkKLXsKLSAgICBpZiAoIWlzTG9hZGluZygpKSB7
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZVBlbmRpbmdTaGVldCgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBjb25zdCBBdG9taWNTdHJp
bmcmIEhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKG1lZGlhQXR0cik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgJKHJldmlzaW9u
IDY0NDA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsMTkgKzUzLDEzIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TG9hZGluZyhib29sIGxvYWRpbmcpIHsgbV9sb2FkaW5nID0gbG9hZGluZzsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBTdHlsZUVsZW1lbnQ6OmlzTG9hZGlu
ZygpOyB9CisgICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCkgeyByZXR1cm4gU3R5bGVFbGVt
ZW50OjpzaGVldExvYWRlZChkb2N1bWVudCgpKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKLQotICAgIGJvb2wgbV9sb2FkaW5nOwot
ICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7Ci0gICAgaW50IG1fc3RhcnRMaW5lTnVtYmVyOwog
fTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NDQwOSkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgpAQCAtMzQsMTIgKzM0
LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVz
OwotCi1TVkdTdHlsZUVsZW1lbnQ6OlNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKLSAgICAgOiBT
VkdFbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAgLCBTVkdMYW5nU3BhY2UoKQotICAgICAsIG1f
Y3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcikKK1NWR1N0eWxlRWxlbWVudDo6U1ZHU3R5
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFN0eWxlRWxlbWVudChkb2N1bWVudCwg
Y3JlYXRlZEJ5UGFyc2VyKQogewogfQogCkBAIC05MCwzMSArODgsMjYgQEAgdm9pZCBTVkdTdHls
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogCiB2b2lkIFNWR1N0eWxlRWxlbWVudDo6Zmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCkKIHsKLSAgICBTdHlsZUVsZW1lbnQ6OnNoZWV0KHRoaXMpOwot
ICAgIG1fY3JlYXRlZEJ5UGFyc2VyID0gZmFsc2U7CisgICAgU3R5bGVFbGVtZW50OjpmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4odGhpcyk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgp
CiB7CiAgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVu
dCgpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzLCBtX2NyZWF0ZWRCeVBhcnNlcik7
Ci0gICAgaWYgKCFtX2NyZWF0ZWRCeVBhcnNlcikKLSAgICAgICAgU3R5bGVFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKKyAgICBTdHlsZUVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogfQogCiB2b2lkIFNWR1N0eWxl
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgU1ZHRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigpKQotICAgICAg
ICBkb2N1bWVudCgpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKLSAgICBT
dHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoZG9jdW1lbnQoKSk7CisgICAgU3R5bGVF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogfQogCiB2b2lk
IFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBO
b2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRh
KQogeworICAgIFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwogICAgIFNWR0Vs
ZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0
ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7Ci0gICAgU3R5bGVFbGVtZW50Ojpwcm9jZXNzKHRo
aXMsIDApOwogfQogCiBTdHlsZVNoZWV0KiBTVkdTdHlsZUVsZW1lbnQ6OnNoZWV0KCkKQEAgLTEy
MiwxMyArMTE1LDYgQEAgU3R5bGVTaGVldCogU1ZHU3R5bGVFbGVtZW50OjpzaGVldCgpCiAgICAg
cmV0dXJuIFN0eWxlRWxlbWVudDo6c2hlZXQodGhpcyk7CiB9CiAKLWJvb2wgU1ZHU3R5bGVFbGVt
ZW50OjpzaGVldExvYWRlZCgpCi17Ci0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlUGVuZGluZ1NoZWV0
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTIwLDQ4ICsyMCw0MyBAQAogCiAjaWZuZGVmIFNWR1N0eWxlRWxlbWVudF9oCiAjZGVmaW5l
IFNWR1N0eWxlRWxlbWVudF9oCi0jaWYgRU5BQkxFKFNWRykKIAotI2luY2x1ZGUgPFNWR0VsZW1l
bnQuaD4KKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTdHlsZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHU3R5bGVFbGVtZW50IDogcHVibGljIFNWR0VsZW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU3R5bGVFbGVtZW50IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7Ci0KLSAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAn
RWxlbWVudCcKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2Rl
KiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50
RGVsdGEgPSAwKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRU
eXBlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRN
ZWRpYShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgdmly
dHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBB
dG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgU3R5bGVTaGVldCogc2hl
ZXQoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBib29sIG1fY3JlYXRlZEJ5
UGFyc2VyOwotICAgIH07CitjbGFzcyBTVkdTdHlsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVu
dAorICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFNWR0xhbmdTcGFjZQorICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIFN0eWxlRWxlbWVudCB7CitwdWJsaWM6CisgICAgU1ZHU3R5
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJl
bkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdl
ID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gU3R5bGVFbGVtZW50Ojppc0xvYWRpbmco
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpIHsgcmV0dXJuIFN0eWxlRWxlbWVu
dDo6c2hlZXRMb2FkZWQoZG9jdW1lbnQoKSk7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBt
ZWRpYSgpIGNvbnN0OworICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICB2
b2lkIHNldFRpdGxlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IFN0eWxlU2hlZXQqIHNoZWV0KCk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNWR1N0eWxlRWxlbWVudF9oCi0KLS8vIHZp
bTp0cz00Om5vZXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63143</attachid>
            <date>2010-07-31 01:31:56 -0700</date>
            <delta_ts>2010-07-31 10:17:28 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>StyleRefactor.diff</filename>
            <type>text/plain</type>
            <size>16998</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDQxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDctMzEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSFRNTFN0eWxlRWxlbWVudC9TVkdTdHlsZUVsZW1lbnQgbmVlZCB0byBzaGFyZSBtb3Jl
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
MjkzCisKKyAgICAgICAgU2ltcGxpZnkgSFRNTFN0eWxlRWxlbWVudC9TVkdTdHlsZUVsZW1lbnQu
IFRoZXkgbG9vayBpZGVudGljYWxseSBub3csIGFzIGFsbCBjb2RlIGlzIHNoYXJlZCBpbiBTdHls
ZUVsZW1lbnQuCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0cy4KKworICAgICAgICAq
IGRvbS9TdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpT
dHlsZUVsZW1lbnQpOiBUYWtlIGNyZWF0ZWRCeVBhcnNlciAmIERvY3VtZW50IGFyZ3VtZW50cywg
dG8gc2hhcmUgdGhlIGxpbmUgbnVtYmVyIGV4dHJhY3Rpb24gbG9naWMuIFN0b3JlIGl0IGluIG1f
bGluZU51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQpOiBNb3ZlZCBhZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSBoZXJlLCB0byBzaGFy
ZSBjb2RlIGJldHdlZW4gSFRNTC9TVkdTdHlsZUVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBTYW1lIGZvciByZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKTogSW50cm9kdWNlZCBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6cHJvY2Vzcyk6IFVzZSBzdG9yZWQgbV9saW5lTnVt
YmVyLCBhdm9pZHMgYSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6
OmNyZWF0ZVNoZWV0KTogTm8gbmVlZCB0byBjYWxsIHRoZSB2aXJ0dWFsIHNldExvYWRpbmcoKSBm
dW5jdGlvbiwganVzdCBzdG9yZSBtX2xvYWRpbmcgaW4gU3R5bGVFbGVtZW50LCBhbmQgc2V0IGl0
IGZyb20gaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKTog
SW50cm9kdWNlZCBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVF
bGVtZW50OjpzaGVldExvYWRlZCk6IERpdHRvLgorICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudCk6IFBhc3MgRG9jdW1lbnQgJiBj
cmVhdGVkQnlQYXJzZXIgYXJndW1lbnRzIHRvIFN0eWxlRWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6IERlbGVnYXRlIHdv
cmsgdG8gU3R5bGVFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVu
dDo6aXNMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50
OjpzaGVldExvYWRlZCk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVsZW1lbnQpOiBQ
YXNzIERvY3VtZW50ICYgY3JlYXRlZEJ5UGFyc2VyIGFyZ3VtZW50cyB0byBTdHlsZUVsZW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJl
bik6IERlbGVnYXRlIHdvcmsgdG8gU3R5bGVFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
eWxlRWxlbWVudDo6aXNMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKTogRGl0dG8uCisKIDIwMTAtMDctMzAgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI2NDQwOC4KSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MSArMjYsMTcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0eWxlRWxlbWVudDo6
U3R5bGVFbGVtZW50KCkKK1N0eWxlRWxlbWVudDo6U3R5bGVFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCisgICAgOiBtX2NyZWF0ZWRCeVBhcnNlcihjcmVh
dGVkQnlQYXJzZXIpCisgICAgLCBtX2xvYWRpbmcoZmFsc2UpCisgICAgLCBtX3N0YXJ0TGluZU51
bWJlcigwKQogeworICAgIGlmIChjcmVhdGVkQnlQYXJzZXIgJiYgZG9jdW1lbnQgJiYgZG9jdW1l
bnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpKQorICAgICAgICBtX3N0YXJ0TGluZU51bWJl
ciA9IGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+bGluZU51bWJlcigpOwog
fQogCiBTdHlsZVNoZWV0KiBTdHlsZUVsZW1lbnQ6OnNoZWV0KEVsZW1lbnQqIGUpCkBAIC00MCwx
MyArNDYsMTkgQEAgU3R5bGVTaGVldCogU3R5bGVFbGVtZW50OjpzaGVldChFbGVtZW50KgogICAg
IHJldHVybiBtX3NoZWV0LmdldCgpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxl
bWVudCkKIHsKLSAgICBwcm9jZXNzKGVsZW1lbnQsIDApOworICAgIGRvY3VtZW50LT5hZGRTdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50LCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgaWYg
KG1fY3JlYXRlZEJ5UGFyc2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKGVsZW1l
bnQpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCit2b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CisgICAgZG9jdW1lbnQtPnJlbW92
ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQpOworCiAgICAgLy8gSWYgd2UncmUgaW4g
ZG9jdW1lbnQgdGVhcmRvd24sIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgbm90aWZpY2F0
aW9uIG9mIG91ciBzaGVldCdzIHJlbW92YWwuCiAgICAgaWYgKCFkb2N1bWVudC0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTYsNyArNjgsMjIgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoRAogICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOwogfQogCi12b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50KiBlLCBpbnQg
c3RhcnRMaW5lTnVtYmVyKQordm9pZCBTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2NyZWF0ZWRCeVBhcnNlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJvY2VzcyhlbGVtZW50KTsKK30KKwordm9pZCBTdHlsZUVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbihFbGVtZW50KiBlbGVtZW50KQoreworICAgIHByb2Nlc3MoZWxl
bWVudCk7CisgICAgc2hlZXQoZWxlbWVudCk7CisgICAgbV9jcmVhdGVkQnlQYXJzZXIgPSBmYWxz
ZTsKK30KKwordm9pZCBTdHlsZUVsZW1lbnQ6OnByb2Nlc3MoRWxlbWVudCogZSkKIHsKICAgICBp
ZiAoIWUgfHwgIWUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIsMTQgKzEw
OSwxNCBAQCB2b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50KiBlLCBpCiAgICAgfQog
ICAgIEFTU0VSVChwID09IHRleHQgKyByZXN1bHRMZW5ndGgpOwogCi0gICAgY3JlYXRlU2hlZXQo
ZSwgc3RhcnRMaW5lTnVtYmVyLCBzaGVldFRleHQpOworICAgIGNyZWF0ZVNoZWV0KGUsIG1fc3Rh
cnRMaW5lTnVtYmVyLCBzaGVldFRleHQpOwogfQogCiB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRl
U2hlZXQoRWxlbWVudCogZSwgaW50IHN0YXJ0TGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB0ZXh0
KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKG1f
c2hlZXQpIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihtX3NoZWV0
LmdldCgpKS0+aXNMb2FkaW5nKCkpCisgICAgICAgIGlmIChtX3NoZWV0LT5pc0xvYWRpbmcoKSkK
ICAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgbV9z
aGVldCA9IDA7CiAgICAgfQpAQCAtMTAyLDEyICsxMjksMTIgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6
OmNyZWF0ZVNoZWV0KEVsZW1lbnQqIAogICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50
RXZhbCgicHJpbnQiLCB0cnVlKTsKICAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYUxp
c3QuZ2V0KCkpIHx8IHByaW50RXZhbC5ldmFsKG1lZGlhTGlzdC5nZXQoKSkpIHsKICAgICAgICAg
ICAgIGRvY3VtZW50LT5hZGRQZW5kaW5nU2hlZXQoKTsKLSAgICAgICAgICAgIHNldExvYWRpbmco
dHJ1ZSk7CisgICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgbV9zaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShlLCBTdHJpbmcoKSwgS1VSTCgpLCBkb2N1bWVudC0+
aW5wdXRFbmNvZGluZygpKTsKICAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nQXRMaW5l
KHRleHQsICFkb2N1bWVudC0+aW5Db21wYXRNb2RlKCksIHN0YXJ0TGluZU51bWJlcik7CiAgICAg
ICAgICAgICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwogICAgICAgICAgICAg
bV9zaGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7Ci0gICAgICAgICAgICBzZXRMb2FkaW5nKGZh
bHNlKTsKKyAgICAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xMTUsNCArMTQyLDIwIEBAIHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVt
ZW50KiAKICAgICAgICAgbV9zaGVldC0+Y2hlY2tMb2FkZWQoKTsKIH0KIAorYm9vbCBTdHlsZUVs
ZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0Cit7CisgICAgaWYgKG1fbG9hZGluZykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fc2hlZXQgPyBtX3NoZWV0LT5pc0xvYWRpbmcoKSA6
IGZhbHNlOworfQorCitib29sIFN0eWxlRWxlbWVudDo6c2hlZXRMb2FkZWQoRG9jdW1lbnQqIGRv
Y3VtZW50KQoreworICAgIGlmIChpc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZG9jdW1lbnQtPnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gNjQ0MDkpCisrKyBXZWJDb3JlL2Rv
bS9TdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsNiArMTcsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgU3R5bGVFbGVtZW50
X2gKICNkZWZpbmUgU3R5bGVFbGVtZW50X2gKIApAQCAtMjksMjcgKzMwLDM0IEBAIGNsYXNzIEVs
ZW1lbnQ7CiAKIGNsYXNzIFN0eWxlRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgU3R5bGVFbGVtZW50
KCk7CisgICAgU3R5bGVFbGVtZW50KERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwog
ICAgIHZpcnR1YWwgflN0eWxlRWxlbWVudCgpIHt9CiAKIHByb3RlY3RlZDoKLSAgICBTdHlsZVNo
ZWV0KiBzaGVldChFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9hZGluZyhib29s
KSB7fQotCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3QgPSAwOwogCi0g
ICAgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudChEb2N1bWVudCosIEVsZW1lbnQqKTsKLSAgICB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHByb2Nlc3MoRWxl
bWVudCosIGludCBzdGFydExpbmVOdW1iZXIpOworICAgIFN0eWxlU2hlZXQqIHNoZWV0KEVsZW1l
bnQqKTsKIAotICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCogZSwgaW50IHN0YXJ0TGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiB0ZXh0ID0gU3RyaW5nKCkpOworICAgIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3Q7CisgICAgYm9vbCBzaGVldExvYWRlZChEb2N1bWVudCopOworCisgICAgdm9pZCBp
bnNlcnRlZEludG9Eb2N1bWVudChEb2N1bWVudCosIEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92
ZWRGcm9tRG9jdW1lbnQoRG9jdW1lbnQqLCBFbGVtZW50Kik7CisgICAgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoRWxlbWVudCopOworICAgIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKEVsZW1lbnQq
KTsKIAotcHJvdGVjdGVkOgogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0OworCitw
cml2YXRlOgorICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCosIGludCBzdGFydExpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgdGV4dCA9IFN0cmluZygpKTsKKyAgICB2b2lkIHByb2Nlc3MoRWxl
bWVudCopOworCisgICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsKKyAgICBib29sIG1fbG9hZGlu
ZzsKKyAgICBpbnQgbV9zdGFydExpbmVOdW1iZXI7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9CiAK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDEzICszNiw5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGlubGluZSBIVE1M
U3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgOiBIVE1M
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fbG9hZGluZyhmYWxzZSkKLSAgICAs
IG1fY3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcikKLSAgICAsIG1fc3RhcnRMaW5lTnVt
YmVyKDApCisgICAgLCBTdHlsZUVsZW1lbnQoZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikKIHsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShzdHlsZVRhZykpOwotICAgIGlmIChjcmVhdGVkQnlQYXJz
ZXIgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpKQot
ICAgICAgICBtX3N0YXJ0TGluZU51bWJlciA9IGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIoKS0+bGluZU51bWJlcigpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxTdHlsZUVsZW1lbnQ+
IEhUTUxTdHlsZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtNjIsMzIgKzU4LDI1
IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKIAogdm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewotICAgIFN0eWxlRWxlbWVu
dDo6cHJvY2Vzcyh0aGlzLCBtX3N0YXJ0TGluZU51bWJlcik7Ci0gICAgU3R5bGVFbGVtZW50Ojpz
aGVldCh0aGlzKTsKLSAgICBtX2NyZWF0ZWRCeVBhcnNlciA9IGZhbHNlOworICAgIFN0eWxlRWxl
bWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRoaXMpOwogICAgIEhUTUxFbGVtZW50OjpmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCk7Ci0KLSAgICBkb2N1bWVudCgpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzLCBt
X2NyZWF0ZWRCeVBhcnNlcik7Ci0gICAgaWYgKCFtX2NyZWF0ZWRCeVBhcnNlcikKLSAgICAgICAg
U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKKyAg
ICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwog
fQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAg
IEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQoKS0+cmVt
b3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUodGhpcyk7Ci0gICAgU3R5bGVFbGVtZW50OjpyZW1v
dmVkRnJvbURvY3VtZW50KGRvY3VtZW50KCkpOworICAgIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5n
ZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7Ci0gICAgaWYgKCFj
aGFuZ2VkQnlQYXJzZXIpCi0gICAgICAgIFN0eWxlRWxlbWVudDo6cHJvY2Vzcyh0aGlzLCAwKTsK
KyAgICBTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKICAgICBIVE1MRWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNo
YW5nZSwgY2hpbGRDb3VudERlbHRhKTsKIH0KIApAQCAtOTYsMjQgKzg1LDYgQEAgU3R5bGVTaGVl
dCogSFRNTFN0eWxlRWxlbWVudDo6c2hlZXQoKQogICAgIHJldHVybiBTdHlsZUVsZW1lbnQ6OnNo
ZWV0KHRoaXMpOwogfQogCi1ib29sIEhUTUxTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fbG9hZGluZykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFt
X3NoZWV0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpOwotfQotCi1ib29sIEhU
TUxTdHlsZUVsZW1lbnQ6OnNoZWV0TG9hZGVkKCkKLXsKLSAgICBpZiAoIWlzTG9hZGluZygpKSB7
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZVBlbmRpbmdTaGVldCgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBjb25zdCBBdG9taWNTdHJp
bmcmIEhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKG1lZGlhQXR0cik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgJKHJldmlzaW9u
IDY0NDA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsMTkgKzUzLDEzIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TG9hZGluZyhib29sIGxvYWRpbmcpIHsgbV9sb2FkaW5nID0gbG9hZGluZzsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBTdHlsZUVsZW1lbnQ6OmlzTG9hZGlu
ZygpOyB9CisgICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCkgeyByZXR1cm4gU3R5bGVFbGVt
ZW50OjpzaGVldExvYWRlZChkb2N1bWVudCgpKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKLQotICAgIGJvb2wgbV9sb2FkaW5nOwot
ICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7Ci0gICAgaW50IG1fc3RhcnRMaW5lTnVtYmVyOwog
fTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NDQwOSkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
ICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA5IENhbWVyb24gTWNDb3JtYWNrIDxjYW1AbWNjLmlkLmF1PgpAQCAtMzQsMTIgKzM0
LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVz
OwotCi1TVkdTdHlsZUVsZW1lbnQ6OlNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKLSAgICAgOiBT
VkdFbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAgLCBTVkdMYW5nU3BhY2UoKQotICAgICAsIG1f
Y3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcikKK1NWR1N0eWxlRWxlbWVudDo6U1ZHU3R5
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFN0eWxlRWxlbWVudChkb2N1bWVudCwg
Y3JlYXRlZEJ5UGFyc2VyKQogewogfQogCkBAIC05MCwzMSArODgsMjYgQEAgdm9pZCBTVkdTdHls
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogCiB2b2lkIFNWR1N0eWxlRWxlbWVudDo6Zmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCkKIHsKLSAgICBTdHlsZUVsZW1lbnQ6OnNoZWV0KHRoaXMpOwot
ICAgIG1fY3JlYXRlZEJ5UGFyc2VyID0gZmFsc2U7CisgICAgU3R5bGVFbGVtZW50OjpmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4odGhpcyk7CiAgICAgU1ZHRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgp
CiB7CiAgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVu
dCgpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzLCBtX2NyZWF0ZWRCeVBhcnNlcik7
Ci0gICAgaWYgKCFtX2NyZWF0ZWRCeVBhcnNlcikKLSAgICAgICAgU3R5bGVFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKKyAgICBTdHlsZUVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogfQogCiB2b2lkIFNWR1N0eWxl
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgU1ZHRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigpKQotICAgICAg
ICBkb2N1bWVudCgpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKLSAgICBT
dHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoZG9jdW1lbnQoKSk7CisgICAgU3R5bGVF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogfQogCiB2b2lk
IFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBO
b2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRh
KQogeworICAgIFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwogICAgIFNWR0Vs
ZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0
ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7Ci0gICAgU3R5bGVFbGVtZW50Ojpwcm9jZXNzKHRo
aXMsIDApOwogfQogCiBTdHlsZVNoZWV0KiBTVkdTdHlsZUVsZW1lbnQ6OnNoZWV0KCkKQEAgLTEy
MiwxMyArMTE1LDYgQEAgU3R5bGVTaGVldCogU1ZHU3R5bGVFbGVtZW50OjpzaGVldCgpCiAgICAg
cmV0dXJuIFN0eWxlRWxlbWVudDo6c2hlZXQodGhpcyk7CiB9CiAKLWJvb2wgU1ZHU3R5bGVFbGVt
ZW50OjpzaGVldExvYWRlZCgpCi17Ci0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlUGVuZGluZ1NoZWV0
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0KIAotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gNjQ0MDkp
CisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTIwLDQ4ICsyMCw0MyBAQAogCiAjaWZuZGVmIFNWR1N0eWxlRWxlbWVudF9oCiAjZGVmaW5l
IFNWR1N0eWxlRWxlbWVudF9oCi0jaWYgRU5BQkxFKFNWRykKIAotI2luY2x1ZGUgPFNWR0VsZW1l
bnQuaD4KKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTdHlsZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHU3R5bGVFbGVtZW50IDogcHVibGljIFNWR0VsZW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU3R5bGVFbGVtZW50IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7Ci0KLSAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAn
RWxlbWVudCcKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2Rl
KiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50
RGVsdGEgPSAwKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRU
eXBlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRN
ZWRpYShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgdmly
dHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBB
dG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgU3R5bGVTaGVldCogc2hl
ZXQoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBib29sIG1fY3JlYXRlZEJ5
UGFyc2VyOwotICAgIH07CitjbGFzcyBTVkdTdHlsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVu
dAorICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFNWR0xhbmdTcGFjZQorICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIFN0eWxlRWxlbWVudCB7CitwdWJsaWM6CisgICAgU1ZHU3R5
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJl
bkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdl
ID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gU3R5bGVFbGVtZW50Ojppc0xvYWRpbmco
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpIHsgcmV0dXJuIFN0eWxlRWxlbWVu
dDo6c2hlZXRMb2FkZWQoZG9jdW1lbnQoKSk7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBt
ZWRpYSgpIGNvbnN0OworICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICB2
b2lkIHNldFRpdGxlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IFN0eWxlU2hlZXQqIHNoZWV0KCk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNWR1N0eWxlRWxlbWVudF9oCi0KLS8vIHZp
bTp0cz00Om5vZXQK
</data>
<flag name="review"
          id="51453"
          type_id="1"
          status="+"
          setter="krit"
    />
    <flag name="commit-queue"
          id="51459"
          type_id="3"
          status="-"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>